summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk6
-rw-r--r--CleanSpec.mk3
-rw-r--r--api/13.xml12
-rw-r--r--api/14.txt2423
-rw-r--r--api/current.txt9
-rw-r--r--build/phone-xhdpi-1024-dalvik-heap.mk22
-rw-r--r--cmds/dumpstate/dumpstate.c8
-rw-r--r--cmds/ip-up-vpn/ip-up-vpn.c10
-rw-r--r--cmds/stagefright/sf2.cpp61
-rw-r--r--cmds/stagefright/stagefright.cpp57
-rw-r--r--cmds/stagefright/stream.cpp2
-rw-r--r--core/java/android/accounts/AccountManager.java63
-rw-r--r--core/java/android/accounts/ChooseAccountTypeActivity.java196
-rw-r--r--core/java/android/accounts/ChooseTypeAndAccountActivity.java372
-rw-r--r--core/java/android/app/ActionBar.java38
-rw-r--r--core/java/android/app/ActivityManagerNative.java17
-rw-r--r--core/java/android/app/ActivityThread.java77
-rw-r--r--core/java/android/app/ApplicationPackageManager.java4
-rw-r--r--core/java/android/app/IActivityManager.java3
-rw-r--r--core/java/android/app/SearchManager.java2
-rw-r--r--core/java/android/bluetooth/BluetoothAdapter.java10
-rw-r--r--core/java/android/bluetooth/BluetoothProfile.java7
-rw-r--r--core/java/android/content/Intent.java40
-rw-r--r--core/java/android/content/SyncManager.java294
-rw-r--r--core/java/android/content/pm/ActivityInfo.java6
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl2
-rw-r--r--core/java/android/content/pm/PackageInfoLite.java17
-rw-r--r--core/java/android/content/pm/PackageManager.java43
-rw-r--r--core/java/android/content/pm/PackageParser.java116
-rw-r--r--core/java/android/content/pm/Signature.java19
-rw-r--r--core/java/android/content/pm/VerifierDeviceIdentity.java9
-rw-r--r--core/java/android/content/pm/VerifierInfo.aidl19
-rw-r--r--core/java/android/content/pm/VerifierInfo.java83
-rw-r--r--core/java/android/hardware/Camera.java97
-rw-r--r--core/java/android/inputmethodservice/Keyboard.java46
-rw-r--r--core/java/android/inputmethodservice/KeyboardView.java4
-rw-r--r--core/java/android/net/DhcpInfoInternal.java45
-rw-r--r--core/java/android/net/DhcpStateMachine.java5
-rw-r--r--core/java/android/net/DnsPinger.java26
-rw-r--r--core/java/android/net/IConnectivityManager.aidl6
-rw-r--r--core/java/android/net/MobileDataStateTracker.java2
-rw-r--r--core/java/android/net/NetworkStatsHistory.java14
-rw-r--r--core/java/android/net/NetworkTemplate.java41
-rw-r--r--core/java/android/net/ProxyProperties.java2
-rw-r--r--core/java/android/net/TrafficStats.java18
-rw-r--r--core/java/android/net/Uri.java42
-rw-r--r--core/java/android/nfc/NfcAdapter.java32
-rw-r--r--core/java/android/nfc/NfcEvent.java4
-rw-r--r--core/java/android/os/INetworkManagementService.aidl7
-rw-r--r--core/java/android/preference/PreferenceScreen.java11
-rw-r--r--core/java/android/provider/CalendarContract.java9
-rw-r--r--core/java/android/provider/ContactsContract.java8
-rw-r--r--core/java/android/provider/MediaStore.java11
-rw-r--r--core/java/android/provider/Settings.java15
-rw-r--r--core/java/android/server/BluetoothAdapterStateMachine.java26
-rwxr-xr-xcore/java/android/server/BluetoothService.java17
-rw-r--r--core/java/android/text/DynamicLayout.java4
-rw-r--r--core/java/android/text/SpannableStringBuilder.java5
-rw-r--r--core/java/android/text/StaticLayout.java10
-rw-r--r--core/java/android/text/TextLine.java189
-rw-r--r--core/java/android/text/TextUtils.java41
-rw-r--r--core/java/android/text/format/Time.java6
-rw-r--r--core/java/android/text/method/Touch.java43
-rw-r--r--core/java/android/view/ActionProvider.java28
-rw-r--r--core/java/android/view/IWindowManager.aidl14
-rw-r--r--core/java/android/view/Surface.java5
-rw-r--r--core/java/android/view/TextureView.java9
-rw-r--r--core/java/android/view/View.java60
-rw-r--r--core/java/android/view/ViewGroup.java38
-rw-r--r--core/java/android/view/ViewRootImpl.java1
-rw-r--r--core/java/android/view/VolumePanel.java38
-rw-r--r--core/java/android/view/WindowManagerPolicy.java71
-rwxr-xr-xcore/java/android/view/WindowOrientationListener.java460
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java4
-rw-r--r--core/java/android/webkit/BrowserFrame.java38
-rw-r--r--core/java/android/webkit/CallbackProxy.java27
-rw-r--r--core/java/android/webkit/CookieSyncManager.java4
-rw-r--r--core/java/android/webkit/HTML5Audio.java46
-rw-r--r--core/java/android/webkit/HTML5VideoInline.java9
-rw-r--r--core/java/android/webkit/JniUtil.java16
-rw-r--r--core/java/android/webkit/SslCertLookupTable.java19
-rw-r--r--core/java/android/webkit/WebView.java66
-rw-r--r--core/java/android/webkit/WebViewCore.java24
-rw-r--r--core/java/android/webkit/ZoomManager.java6
-rw-r--r--core/java/android/widget/AbsListView.java13
-rw-r--r--core/java/android/widget/ActivityChooserView.java62
-rw-r--r--core/java/android/widget/AdapterView.java42
-rw-r--r--core/java/android/widget/AutoCompleteTextView.java21
-rw-r--r--core/java/android/widget/BaseAdapter.java11
-rw-r--r--core/java/android/widget/CalendarView.java20
-rw-r--r--core/java/android/widget/GridLayout.java472
-rw-r--r--core/java/android/widget/HorizontalScrollView.java12
-rw-r--r--core/java/android/widget/MediaController.java75
-rw-r--r--core/java/android/widget/NumberPicker.java401
-rw-r--r--core/java/android/widget/OverScroller.java10
-rw-r--r--core/java/android/widget/PopupMenu.java2
-rw-r--r--core/java/android/widget/PopupWindow.java30
-rw-r--r--core/java/android/widget/ProgressBar.java3
-rw-r--r--core/java/android/widget/RelativeLayout.java5
-rw-r--r--core/java/android/widget/ScrollView.java12
-rw-r--r--core/java/android/widget/SearchView.java4
-rw-r--r--core/java/android/widget/ShareActionProvider.java1
-rw-r--r--core/java/android/widget/SpellChecker.java14
-rw-r--r--core/java/android/widget/TextView.java92
-rw-r--r--core/java/android/widget/VideoView.java7
-rw-r--r--core/java/com/android/internal/policy/IFaceLockCallback.aidl1
-rw-r--r--core/java/com/android/internal/util/ArrayUtils.java9
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java46
-rw-r--r--core/java/com/android/internal/view/menu/IconMenuPresenter.java4
-rw-r--r--core/java/com/android/internal/view/menu/ListMenuPresenter.java45
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java4
-rw-r--r--core/java/com/android/internal/view/menu/MenuPopupHelper.java57
-rw-r--r--core/java/com/android/internal/widget/AbsActionBarView.java22
-rw-r--r--core/java/com/android/internal/widget/ActionBarContextView.java35
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java23
-rw-r--r--core/java/com/android/internal/widget/LockPatternUtils.java67
-rw-r--r--core/java/com/android/internal/widget/TransportControlView.java63
-rw-r--r--core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java106
-rw-r--r--core/java/com/android/server/NetworkManagementSocketTagger.java117
-rw-r--r--core/jni/Android.mk1
-rw-r--r--core/jni/AndroidRuntime.cpp2
-rw-r--r--core/jni/android/graphics/Canvas.cpp29
-rw-r--r--core/jni/android/graphics/Paint.cpp15
-rw-r--r--core/jni/android/graphics/TextLayout.cpp92
-rw-r--r--core/jni/android/graphics/TextLayout.h10
-rw-r--r--core/jni/android/graphics/TextLayoutCache.cpp395
-rw-r--r--core/jni/android/graphics/TextLayoutCache.h67
-rw-r--r--core/jni/android_app_backup_FullBackup.cpp8
-rw-r--r--core/jni/android_hardware_Camera.cpp39
-rw-r--r--core/jni/android_net_wifi_Wifi.cpp28
-rw-r--r--core/jni/android_server_NetworkManagementSocketTagger.cpp97
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp28
-rw-r--r--core/res/AndroidManifest.xml15
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.pngbin1374 -> 1731 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.pngbin1380 -> 1695 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.pngbin1027 -> 1172 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.pngbin1028 -> 1146 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.pngbin1984 -> 2332 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.pngbin1984 -> 2367 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_holo.pngbin2131 -> 2336 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_holo_dark.pngbin1816 -> 2132 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_holo_light.pngbin1831 -> 2186 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.pngbin2815 -> 2952 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.pngbin2701 -> 2831 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_code_lock_default_holo.pngbin597 -> 697 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_code_lock_touched_holo.pngbin537 -> 596 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_focused_holo_dark.9.pngbin432 -> 404 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_focused_holo_light.9.pngbin432 -> 404 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_pressed_holo_dark.9.pngbin410 -> 392 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_group_pressed_holo_light.9.pngbin413 -> 395 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.pngbin2311 -> 2576 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.pngbin2402 -> 2762 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.pngbin1022 -> 1159 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.pngbin1069 -> 1209 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.pngbin2428 -> 2734 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.pngbin2477 -> 2943 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.pngbin1102 -> 1317 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.pngbin1167 -> 1326 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.pngbin2704 -> 3162 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.pngbin2709 -> 3282 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.pngbin2344 -> 2601 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.pngbin2395 -> 2743 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.pngbin1521 -> 1848 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.pngbin1540 -> 1864 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.pngbin2478 -> 2764 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.pngbin2471 -> 2913 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.pngbin1550 -> 1992 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.pngbin1626 -> 2002 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.pngbin2728 -> 3226 bytes
-rw-r--r--core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.pngbin2685 -> 3252 bytes
-rw-r--r--core/res/res/drawable-hdpi/divider_horizontal_holo_dark.9.pngbin167 -> 165 bytes
-rw-r--r--core/res/res/drawable-hdpi/divider_horizontal_holo_light.9.pngbin165 -> 164 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_angel.pngbin1068 -> 1387 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_cool.pngbin1048 -> 1404 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_crying.pngbin933 -> 1263 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_embarrassed.pngbin937 -> 1279 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_foot_in_mouth.pngbin1010 -> 1336 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_happy.pngbin957 -> 1273 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_kissing.pngbin1042 -> 1380 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_laughing.pngbin947 -> 1286 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_lips_are_sealed.pngbin1083 -> 1420 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_money_mouth.pngbin1159 -> 1529 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_sad.pngbin956 -> 1291 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_surprised.pngbin954 -> 1326 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_tongue_sticking_out.pngbin1064 -> 1436 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_undecided.pngbin892 -> 1201 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_winking.pngbin989 -> 1292 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_wtf.pngbin985 -> 1308 bytes
-rw-r--r--core/res/res/drawable-hdpi/emo_im_yelling.pngbin1020 -> 1359 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_close_holo_dark.9.pngbin397 -> 555 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_close_holo_light.9.pngbin412 -> 475 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_open_holo_dark.9.pngbin434 -> 609 bytes
-rw-r--r--core/res/res/drawable-hdpi/expander_open_holo_light.9.pngbin417 -> 485 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.pngbin1545 -> 1774 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.pngbin1552 -> 1763 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.pngbin1573 -> 1737 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.pngbin1540 -> 1683 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_default_holo_dark.9.pngbin116 -> 131 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_default_holo_light.9.pngbin116 -> 131 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_dark.9.pngbin116 -> 132 bytes
-rw-r--r--core/res/res/drawable-hdpi/fastscroll_track_pressed_holo_light.9.pngbin116 -> 132 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_ring_notif.pngbin1222 -> 1196 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_audio_ring_notif_mute.pngbin1456 -> 1398 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_checkmark_holo_light.pngbin0 -> 924 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_emergency.pngbin1045 -> 943 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_input_delete.pngbin1307 -> 1031 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.pngbin17978 -> 17982 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_answer_normal.pngbin6413 -> 6412 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.pngbin8110 -> 7214 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.pngbin2411 -> 1630 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_chevron_down.pngbin688 -> 1109 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_chevron_left.pngbin665 -> 1183 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_chevron_right.pngbin665 -> 1175 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_chevron_up.pngbin698 -> 1097 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_decline_focused.pngbin16551 -> 16563 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.pngbin8578 -> 7896 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_handle_pressed.pngbin8363 -> 8378 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.pngbin12977 -> 12968 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_silent_normal.pngbin5708 -> 5716 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.pngbin12771 -> 12774 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_soundon_normal.pngbin5176 -> 5172 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.pngbin9616 -> 9620 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.pngbin6731 -> 6727 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.pngbin9325 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.pngbin1347 -> 1376 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_menu_copy_holo_dark.pngbin731 -> 186 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_copy_holo_light.pngbin683 -> 199 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_cut_holo_dark.pngbin1298 -> 727 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_cut_holo_light.pngbin1130 -> 769 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.pngbin145 -> 144 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.pngbin147 -> 148 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_paste_holo_dark.pngbin1018 -> 344 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_paste_holo_light.pngbin893 -> 337 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.pngbin626 -> 185 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.pngbin435 -> 216 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_notification_ime_default.pngbin755 -> 755 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_green_up.pngbin298 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.pngbin597 -> 697 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.pngbin7573 -> 7367 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.pngbin7560 -> 7343 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.pngbin517 -> 804 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.pngbin444 -> 513 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.pngbin392 -> 461 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.pngbin378 -> 460 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.pngbin519 -> 863 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.pngbin470 -> 571 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.pngbin494 -> 624 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.pngbin494 -> 624 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.pngbin390 -> 511 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.pngbin390 -> 511 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.pngbin498 -> 608 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.pngbin498 -> 608 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.pngbin503 -> 780 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.pngbin429 -> 500 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.pngbin373 -> 458 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.pngbin368 -> 435 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.pngbin508 -> 825 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.pngbin452 -> 553 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.pngbin484 -> 612 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.pngbin484 -> 612 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.pngbin373 -> 504 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.pngbin373 -> 510 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.pngbin489 -> 604 bytes
-rw-r--r--core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.pngbin489 -> 604 bytes
-rw-r--r--core/res/res/drawable-hdpi/panel_bg_holo_dark.9.pngbin434 -> 422 bytes
-rw-r--r--core/res/res/drawable-hdpi/panel_bg_holo_light.9.pngbin416 -> 693 bytes
-rw-r--r--core/res/res/drawable-hdpi/presence_away.pngbin1280 -> 1278 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.pngbin1176 -> 1174 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.pngbin1275 -> 1283 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.pngbin1125 -> 1179 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.pngbin1169 -> 1224 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.pngbin974 -> 981 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.pngbin1102 -> 1105 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.pngbin1095 -> 1087 bytes
-rw-r--r--core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.pngbin1106 -> 1097 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.pngbin1965 -> 2444 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_half_holo_light.pngbin2057 -> 2503 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.pngbin1340 -> 1570 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_off_holo_light.pngbin1401 -> 1620 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.pngbin1943 -> 2448 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_big_on_holo_light.pngbin2033 -> 2463 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_half_holo_dark.pngbin1355 -> 1696 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_half_holo_light.pngbin1413 -> 1746 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_off_holo_dark.pngbin942 -> 1132 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_off_holo_light.pngbin988 -> 1159 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_on_holo_dark.pngbin1348 -> 1696 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_med_on_holo_light.pngbin1390 -> 1727 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.pngbin945 -> 1126 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_half_holo_light.pngbin977 -> 1157 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.pngbin703 -> 783 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_off_holo_light.pngbin723 -> 799 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.pngbin938 -> 1126 bytes
-rw-r--r--core/res/res/drawable-hdpi/rate_star_small_on_holo_light.pngbin982 -> 1143 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_disabled_holo.pngbin424 -> 999 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_focused_holo.pngbin0 -> 1579 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_holo.pngbin468 -> 0 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_normal_holo.pngbin0 -> 1227 bytes
-rw-r--r--core/res/res/drawable-hdpi/scrubber_control_pressed_holo.pngbin1819 -> 2229 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_16_inner_holo.pngbin1608 -> 755 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_16_outer_holo.pngbin1333 -> 654 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_20_inner_holo.pngbin1820 -> 879 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_20_outer_holo.pngbin1463 -> 759 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_48_inner_holo.pngbin3645 -> 2081 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_48_outer_holo.pngbin2622 -> 1811 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_76_inner_holo.pngbin5421 -> 3374 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_76_outer_holo.pngbin3929 -> 2876 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.pngbin390 -> 388 bytes
-rw-r--r--core/res/res/drawable-hdpi/spinner_ab_pressed_holo_light.9.pngbin398 -> 394 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_error.pngbin769 -> 904 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_missed_call.pngbin1020 -> 1018 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_notify_wifi_in_range.pngbin1121 -> 1474 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_adb.pngbin1220 -> 1171 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_download_anim1.pngbin674 -> 675 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.pngbin1237 -> 891 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_tether_general.pngbin1436 -> 963 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_tether_usb.pngbin1273 -> 909 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_tether_wifi.pngbin1076 -> 1139 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim1.pngbin681 -> 681 bytes
-rw-r--r--core/res/res/drawable-hdpi/stat_sys_upload_anim3.pngbin704 -> 704 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.pngbin219 -> 204 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_disabled_holo_light.9.pngbin219 -> 204 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_focused_holo_dark.9.pngbin262 -> 252 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_focused_holo_light.9.pngbin264 -> 254 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_holo_dark.9.pngbin195 -> 182 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_bg_holo_light.9.pngbin195 -> 182 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_activated_holo_dark.9.pngbin600 -> 854 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_activated_holo_light.9.pngbin427 -> 653 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_disabled_holo_dark.9.pngbin371 -> 483 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_disabled_holo_light.9.pngbin392 -> 502 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_holo_dark.9.pngbin400 -> 598 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_holo_light.9.pngbin399 -> 544 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_pressed_holo_dark.9.pngbin672 -> 956 bytes
-rw-r--r--core/res/res/drawable-hdpi/switch_thumb_pressed_holo_light.9.pngbin428 -> 720 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_bottom_holo.9.pngbin133 -> 129 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus.9.pngbin628 -> 623 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus_bar_left.9.pngbin140 -> 138 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_focus_bar_right.9.pngbin140 -> 138 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press.9.pngbin614 -> 608 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press_bar_left.9.pngbin139 -> 138 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_press_bar_right.9.pngbin139 -> 138 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_pressed_holo.9.pngbin437 -> 428 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected.9.pngbin622 -> 623 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected_bar_left.9.pngbin137 -> 135 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_selected_bar_right.9.pngbin137 -> 135 bytes
-rw-r--r--core/res/res/drawable-hdpi/tab_unselected.9.pngbin386 -> 380 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_left.pngbin1461 -> 1667 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_middle.pngbin1569 -> 1800 bytes
-rw-r--r--core/res/res/drawable-hdpi/text_select_handle_right.pngbin1506 -> 1762 bytes
-rw-r--r--core/res/res/drawable-hdpi/vpn_connected.pngbin757 -> 539 bytes
-rw-r--r--core/res/res/drawable-hdpi/vpn_disconnected.pngbin717 -> 577 bytes
-rw-r--r--core/res/res/drawable-large-mdpi/indicator_code_lock_drag_direction_green_up.pngbin573 -> 0 bytes
-rw-r--r--core/res/res/drawable-ldpi/indicator_code_lock_drag_direction_green_up.pngbin359 -> 0 bytes
-rw-r--r--core/res/res/drawable-ldpi/stat_sys_adb.pngbin1066 -> 362 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_dark.pngbin1033 -> 1115 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_light.pngbin1033 -> 1118 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_disabled_holo_dark.pngbin742 -> 792 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_disabled_holo_light.pngbin752 -> 793 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_focused_holo_dark.pngbin1347 -> 1452 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_focused_holo_light.pngbin1358 -> 1455 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_holo.pngbin1356 -> 1463 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_holo_dark.pngbin1238 -> 1339 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_holo_light.pngbin1250 -> 1346 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.pngbin1709 -> 1737 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.pngbin1678 -> 1711 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_code_lock_default.pngbin1190 -> 1254 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_code_lock_default_holo.pngbin481 -> 523 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/btn_code_lock_touched.pngbin739 -> 827 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_code_lock_touched_holo.pngbin447 -> 476 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_focused_holo_dark.9.pngbin295 -> 293 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_focused_holo_light.9.pngbin295 -> 293 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_pressed_holo_dark.9.pngbin294 -> 289 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_group_pressed_holo_light.9.pngbin296 -> 293 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.pngbin2282 -> 2286 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_disabled_holo_light.pngbin1572 -> 1575 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_focused_holo_light.pngbin2367 -> 2361 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_normal_holo_light.pngbin1656 -> 1661 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_rating_star_on_pressed_holo_light.pngbin2668 -> 2664 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.pngbin1470 -> 1569 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.pngbin1518 -> 1668 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.pngbin722 -> 770 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.pngbin752 -> 813 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.pngbin1539 -> 1648 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.pngbin1578 -> 1731 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.pngbin790 -> 857 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.pngbin817 -> 877 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.pngbin1736 -> 1914 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.pngbin1749 -> 1962 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.pngbin1483 -> 1575 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.pngbin1516 -> 1649 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.pngbin1063 -> 1165 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.pngbin1097 -> 1198 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.pngbin1552 -> 1658 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.pngbin1570 -> 1724 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.pngbin1086 -> 1239 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.pngbin1143 -> 1274 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.pngbin1776 -> 1912 bytes
-rw-r--r--core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.pngbin1739 -> 1947 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_angel.pngbin782 -> 893 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_cool.pngbin776 -> 916 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_crying.pngbin714 -> 873 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_embarrassed.pngbin771 -> 913 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_foot_in_mouth.pngbin783 -> 911 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_happy.pngbin716 -> 862 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_kissing.pngbin793 -> 926 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_laughing.pngbin727 -> 893 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_lips_are_sealed.pngbin806 -> 952 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_money_mouth.pngbin830 -> 985 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_sad.pngbin711 -> 856 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_surprised.pngbin773 -> 916 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_tongue_sticking_out.pngbin788 -> 941 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_undecided.pngbin686 -> 884 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_winking.pngbin734 -> 895 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_wtf.pngbin747 -> 893 bytes
-rw-r--r--core/res/res/drawable-mdpi/emo_im_yelling.pngbin754 -> 927 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_close_holo_dark.9.pngbin285 -> 409 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_close_holo_light.9.pngbin298 -> 343 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_open_holo_dark.9.pngbin303 -> 424 bytes
-rw-r--r--core/res/res/drawable-mdpi/expander_open_holo_light.9.pngbin296 -> 338 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.pngbin1053 -> 1170 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.pngbin1068 -> 1152 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.pngbin1060 -> 1128 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.pngbin1017 -> 1128 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_default_holo_dark.9.pngbin111 -> 127 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_default_holo_light.9.pngbin111 -> 127 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_dark.9.pngbin112 -> 128 bytes
-rw-r--r--core/res/res/drawable-mdpi/fastscroll_track_pressed_holo_light.9.pngbin112 -> 128 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_ring_notif.pngbin878 -> 855 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_audio_ring_notif_mute.pngbin964 -> 918 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_checkmark_holo_light.pngbin0 -> 658 bytes
-rw-r--r--[-rwxr-xr-x]core/res/res/drawable-mdpi/ic_emergency.pngbin900 -> 700 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_input_delete.pngbin3769 -> 786 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.pngbin4951 -> 4543 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.pngbin1572 -> 1186 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_chevron_down.pngbin538 -> 740 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_chevron_left.pngbin533 -> 754 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_chevron_right.pngbin534 -> 752 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_chevron_up.pngbin536 -> 748 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.pngbin4734 -> 4412 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.pngbin4231 -> 4237 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_unlock_focused.pngbin5437 -> 0 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.pngbin1006 -> 1041 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_menu_copy_holo_dark.pngbin612 -> 162 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_copy_holo_light.pngbin570 -> 161 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_cut_holo_dark.pngbin879 -> 486 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_cut_holo_light.pngbin761 -> 493 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_dark.pngbin123 -> 122 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.pngbin127 -> 131 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_paste_holo_dark.pngbin740 -> 226 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_paste_holo_light.pngbin669 -> 203 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.pngbin586 -> 167 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.pngbin726 -> 166 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_notification_ime_default.pngbin642 -> 642 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.pngbin388 -> 0 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_default.pngbin2498 -> 3222 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.pngbin481 -> 523 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_green.pngbin6335 -> 6481 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.pngbin4105 -> 4021 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.pngbin4080 -> 4025 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.pngbin463 -> 726 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.pngbin399 -> 455 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.pngbin368 -> 429 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.pngbin359 -> 421 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.pngbin470 -> 760 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.pngbin424 -> 501 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.pngbin441 -> 538 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.pngbin441 -> 538 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.pngbin368 -> 458 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.pngbin368 -> 458 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.pngbin441 -> 530 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.pngbin441 -> 530 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.pngbin453 -> 710 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.pngbin392 -> 447 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.pngbin355 -> 435 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.pngbin350 -> 426 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.pngbin460 -> 746 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.pngbin418 -> 495 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.pngbin433 -> 526 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.pngbin433 -> 526 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.pngbin355 -> 461 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.pngbin355 -> 457 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.pngbin433 -> 509 bytes
-rw-r--r--core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.pngbin433 -> 509 bytes
-rw-r--r--core/res/res/drawable-mdpi/panel_bg_holo_dark.9.pngbin321 -> 344 bytes
-rw-r--r--core/res/res/drawable-mdpi/popup_inline_error.9.pngbin1566 -> 1572 bytes
-rw-r--r--core/res/res/drawable-mdpi/popup_inline_error_above.9.pngbin1537 -> 1541 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.pngbin700 -> 728 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.pngbin739 -> 748 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.pngbin653 -> 701 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.pngbin680 -> 714 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.pngbin638 -> 663 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.pngbin668 -> 668 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.pngbin668 -> 664 bytes
-rw-r--r--core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.pngbin660 -> 662 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_half_holo_dark.pngbin1341 -> 1600 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_half_holo_light.pngbin1374 -> 1651 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_off_holo_dark.pngbin925 -> 1072 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_off_holo_light.pngbin948 -> 1090 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_on_holo_dark.pngbin1342 -> 1609 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_big_on_holo_light.pngbin1361 -> 1631 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_half_holo_dark.pngbin934 -> 1102 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_half_holo_light.pngbin959 -> 1133 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_off_holo_dark.pngbin689 -> 763 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_off_holo_light.pngbin709 -> 782 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_on_holo_dark.pngbin911 -> 1094 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_med_on_holo_light.pngbin937 -> 1125 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_half_holo_dark.pngbin678 -> 753 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_half_holo_light.pngbin696 -> 758 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_off_holo_dark.pngbin521 -> 566 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_off_holo_light.pngbin536 -> 561 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_on_holo_dark.pngbin677 -> 752 bytes
-rw-r--r--core/res/res/drawable-mdpi/rate_star_small_on_holo_light.pngbin688 -> 753 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_disabled_holo.pngbin387 -> 713 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_focused_holo.pngbin0 -> 1020 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_holo.pngbin420 -> 0 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_normal_holo.pngbin0 -> 796 bytes
-rw-r--r--core/res/res/drawable-mdpi/scrubber_control_pressed_holo.pngbin1312 -> 1306 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_16_inner_holo.pngbin1378 -> 553 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_16_outer_holo.pngbin1189 -> 491 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_20_inner_holo.pngbin1479 -> 627 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_20_outer_holo.pngbin1222 -> 548 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_48_inner_holo.pngbin2571 -> 1336 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_48_outer_holo.pngbin1892 -> 1165 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_76_inner_holo.pngbin3908 -> 2104 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_76_outer_holo.pngbin2816 -> 1808 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.pngbin299 -> 298 bytes
-rw-r--r--core/res/res/drawable-mdpi/spinner_ab_pressed_holo_light.9.pngbin295 -> 291 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_error.pngbin654 -> 662 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_missed_call.pngbin754 -> 717 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_wifi_in_range.pngbin798 -> 993 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_adb.pngbin1193 -> 302 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.pngbin846 -> 675 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_tether_general.pngbin941 -> 659 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_tether_usb.pngbin899 -> 698 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_sys_tether_wifi.pngbin809 -> 814 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_disabled_holo_dark.9.pngbin194 -> 198 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_disabled_holo_light.9.pngbin195 -> 200 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_focused_holo_dark.9.pngbin206 -> 205 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_focused_holo_light.9.pngbin208 -> 207 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_holo_dark.9.pngbin170 -> 163 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_bg_holo_light.9.pngbin170 -> 163 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_activated_holo_dark.9.pngbin432 -> 607 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_activated_holo_light.9.pngbin330 -> 537 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_disabled_holo_dark.9.pngbin287 -> 393 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_disabled_holo_light.9.pngbin302 -> 413 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_holo_dark.9.pngbin306 -> 493 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_holo_light.9.pngbin301 -> 453 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_pressed_holo_dark.9.pngbin479 -> 676 bytes
-rw-r--r--core/res/res/drawable-mdpi/switch_thumb_pressed_holo_light.9.pngbin330 -> 578 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_selected_v4.9.pngbin323 -> 307 bytes
-rw-r--r--core/res/res/drawable-mdpi/tab_unselected_v4.9.pngbin294 -> 289 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_left.pngbin972 -> 1117 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_middle.pngbin1050 -> 1176 bytes
-rw-r--r--core/res/res/drawable-mdpi/text_select_handle_right.pngbin999 -> 1201 bytes
-rw-r--r--core/res/res/drawable-mdpi/vpn_connected.pngbin762 -> 502 bytes
-rw-r--r--core/res/res/drawable-mdpi/vpn_disconnected.pngbin756 -> 496 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/platlogo.pngbin2058 -> 46426 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_disable.pngbin1959 -> 1756 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_dark.pngbin2145 -> 2242 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_light.pngbin2123 -> 2204 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_dark.pngbin1499 -> 1519 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_light.pngbin1491 -> 1495 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_focused_holo_dark.pngbin3066 -> 3274 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_focused_holo_light.pngbin3073 -> 3329 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_holo.pngbin3188 -> 3392 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_holo_dark.pngbin2810 -> 2987 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_holo_light.pngbin2845 -> 3043 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_pressed.pngbin4595 -> 4168 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.pngbin4268 -> 4220 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.pngbin4091 -> 4133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_check_on_selected.pngbin4882 -> 4499 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_default.pngbin2944 -> 2893 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_default_holo.pngbin802 -> 923 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_touched.pngbin1692 -> 1672 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_code_lock_touched_holo.pngbin713 -> 780 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal.9.pngbin1597 -> 1623 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal_disable.9.pngbin1498 -> 1518 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_normal_disable_focused.9.pngbin1779 -> 1791 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_pressed.9.pngbin1885 -> 1889 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_selected.9.pngbin1154 -> 1185 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal.9.pngbin1325 -> 1364 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal_disable.9.pngbin1201 -> 1269 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.pngbin1738 -> 1702 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_small_selected.9.pngbin1057 -> 1061 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_default_transparent_normal.9.pngbin2789 -> 2794 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.pngbin5697 -> 5725 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_normal.9.pngbin3625 -> 3617 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.pngbin10434 -> 10445 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_dropdown_selected.9.pngbin11934 -> 11846 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.pngbin2997 -> 3004 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_off.9.pngbin3619 -> 3627 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal_on.9.pngbin3721 -> 3729 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.pngbin3085 -> 3089 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_off.9.pngbin3745 -> 3751 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed_on.9.pngbin3804 -> 3809 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.pngbin1263 -> 1267 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.pngbin1786 -> 1792 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.pngbin2052 -> 2054 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.pngbin1243 -> 1249 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.pngbin1841 -> 1847 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.pngbin2020 -> 2024 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_off.9.pngbin2015 -> 2027 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_normal_on.9.pngbin2253 -> 2262 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_off.9.pngbin2077 -> 2084 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_keyboard_key_trans_pressed_on.9.pngbin2222 -> 2229 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_default.9.pngbin1424 -> 1428 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.pngbin2452 -> 2463 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.pngbin2517 -> 2523 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_default.9.pngbin1985 -> 1991 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_pressed.9.pngbin3151 -> 3159 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_search_dialog_voice_selected.9.pngbin3195 -> 3202 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off.pngbin2669 -> 2674 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_disable.pngbin2933 -> 2798 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_disable_focused.pngbin5466 -> 5067 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_pressed.pngbin4760 -> 4733 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_off_selected.pngbin4697 -> 4663 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on.pngbin5052 -> 5092 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_disable.pngbin5304 -> 4802 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_disable_focused.pngbin5287 -> 4818 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_pressed.pngbin4821 -> 4825 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_big_on_selected.pngbin4646 -> 4605 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.pngbin3410 -> 3672 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.pngbin3604 -> 4000 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.pngbin1405 -> 1514 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.pngbin1501 -> 1609 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.pngbin3649 -> 3934 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.pngbin3748 -> 4185 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.pngbin1575 -> 1749 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.pngbin1620 -> 1777 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.pngbin3963 -> 4429 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.pngbin4079 -> 4616 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.pngbin3502 -> 3795 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.pngbin3585 -> 3948 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.pngbin2217 -> 2480 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.pngbin2245 -> 2499 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.pngbin3732 -> 4060 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.pngbin3737 -> 4166 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.pngbin2385 -> 2657 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.pngbin2391 -> 2677 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.pngbin4106 -> 4536 bytes
-rw-r--r--core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.pngbin4057 -> 4571 bytes
-rw-r--r--core/res/res/drawable-xhdpi/code_lock_top.9.pngbin144 -> 141 bytes
-rw-r--r--core/res/res/drawable-xhdpi/contact_header_bg.9.pngbin254 -> 262 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.pngbin135 -> 134 bytes
-rw-r--r--core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.pngbin137 -> 142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_angel.pngbin1416 -> 1912 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_cool.pngbin1349 -> 1916 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_crying.pngbin1246 -> 1712 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_embarrassed.pngbin1319 -> 1814 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.pngbin1324 -> 1822 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_happy.pngbin1223 -> 1719 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_kissing.pngbin1408 -> 1888 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_laughing.pngbin1222 -> 1708 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.pngbin1485 -> 1986 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_money_mouth.pngbin1561 -> 2150 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_sad.pngbin1260 -> 1751 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_surprised.pngbin1235 -> 1742 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.pngbin1425 -> 1926 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_undecided.pngbin1169 -> 1582 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_winking.pngbin1288 -> 1762 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_wtf.pngbin1287 -> 1768 bytes
-rw-r--r--core/res/res/drawable-xhdpi/emo_im_yelling.pngbin1332 -> 1833 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_close_holo_dark.9.pngbin542 -> 753 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_close_holo_light.9.pngbin545 -> 624 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_ic_maximized.9.pngbin5331 -> 5345 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_ic_minimized.9.pngbin5514 -> 5523 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_open_holo_dark.9.pngbin623 -> 821 bytes
-rw-r--r--core/res/res/drawable-xhdpi/expander_open_holo_light.9.pngbin558 -> 636 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.pngbin2271 -> 2406 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.pngbin2237 -> 2405 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.pngbin2316 -> 2453 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.pngbin2192 -> 2411 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_default_holo_dark.9.pngbin117 -> 133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_default_holo_light.9.pngbin117 -> 133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_dark.9.pngbin117 -> 133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/fastscroll_track_pressed_holo_light.9.pngbin117 -> 133 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb.9.pngbin1975 -> 1937 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.pngbin1877 -> 1812 bytes
-rw-r--r--core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.pngbin1388 -> 1340 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_ring_notif.pngbin1579 -> 1581 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.pngbin1971 -> 1949 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_checkmark_holo_light.pngbin0 -> 1159 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_emergency.pngbin2170 -> 1195 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_input_delete.pngbin1743 -> 1307 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.pngbin11602 -> 10375 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.pngbin3380 -> 2341 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_chevron_down.pngbin859 -> 1363 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_chevron_left.pngbin840 -> 1600 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_chevron_right.pngbin844 -> 1578 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_chevron_up.pngbin845 -> 1346 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.pngbin12479 -> 11519 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.pngbin9630 -> 9615 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_unlock_focused.pngbin13386 -> 0 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.pngbin1759 -> 1760 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_copy_holo_dark.pngbin826 -> 261 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_copy_holo_light.pngbin747 -> 252 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_cut_holo_dark.pngbin1803 -> 985 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_cut_holo_light.pngbin1561 -> 1291 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_dark.pngbin166 -> 167 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.pngbin179 -> 184 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_paste_holo_dark.pngbin1288 -> 433 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_paste_holo_light.pngbin1085 -> 442 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_selectall_holo_dark.pngbin1264 -> 244 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_menu_selectall_holo_light.pngbin1712 -> 254 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_notification_ime_default.pngbin1012 -> 1012 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_notification_overlay.9.pngbin1690 -> 1671 bytes
-rw-r--r--core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.pngbin2516 -> 2448 bytes
-rw-r--r--core/res/res/drawable-xhdpi/icon_highlight_square.9.pngbin3362 -> 3204 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.pngbin825 -> 0 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default.pngbin9531 -> 8836 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.pngbin802 -> 923 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green.pngbin19681 -> 19083 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.pngbin11979 -> 11439 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.pngbin11992 -> 11335 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_header_holo_dark.9.pngbin425 -> 433 bytes
-rw-r--r--core/res/res/drawable-xhdpi/list_section_header_holo_light.9.pngbin294 -> 301 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_background.9.pngbin334 -> 332 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_background_fill_parent_width.9.pngbin243 -> 243 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_separator.9.pngbin146 -> 145 bytes
-rw-r--r--core/res/res/drawable-xhdpi/menu_submenu_background.9.pngbin1092 -> 1070 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.pngbin1083 -> 1333 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.pngbin2006 -> 2367 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.pngbin654 -> 910 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.pngbin534 -> 598 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.pngbin425 -> 522 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.pngbin425 -> 512 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.pngbin707 -> 969 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.pngbin587 -> 676 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.pngbin635 -> 756 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.pngbin635 -> 756 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_normal.9.pngbin1921 -> 2142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.pngbin425 -> 564 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.pngbin424 -> 563 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.pngbin2926 -> 3259 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.pngbin623 -> 755 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.pngbin623 -> 755 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_down_selected.9.pngbin2990 -> 3258 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.pngbin594 -> 706 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_normal.9.pngbin1184 -> 1263 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.pngbin2111 -> 2284 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_input_selected.9.pngbin1786 -> 2045 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.pngbin1740 -> 2174 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.pngbin2574 -> 3193 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.pngbin659 -> 867 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.pngbin541 -> 597 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.pngbin426 -> 535 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.pngbin427 -> 515 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.pngbin684 -> 940 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.pngbin570 -> 679 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.pngbin612 -> 760 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.pngbin612 -> 760 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_normal.9.pngbin2788 -> 3195 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.pngbin424 -> 564 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.pngbin425 -> 563 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.pngbin3865 -> 4374 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.pngbin614 -> 742 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.pngbin614 -> 742 bytes
-rw-r--r--core/res/res/drawable-xhdpi/numberpicker_up_selected.9.pngbin3876 -> 4368 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_background.9.pngbin2179 -> 2196 bytes
-rw-r--r--core/res/res/drawable-xhdpi/panel_bg_holo_light.9.pngbin680 -> 917 bytes
-rw-r--r--core/res/res/drawable-xhdpi/password_field_default.9.pngbin2871 -> 2877 bytes
-rw-r--r--core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.pngbin237 -> 240 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_center_bright.9.pngbin253 -> 256 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_full_bright.9.pngbin2199 -> 2202 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_full_dark.9.pngbin2205 -> 2209 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_inline_error.9.pngbin4445 -> 4398 bytes
-rw-r--r--core/res/res/drawable-xhdpi/popup_inline_error_above.9.pngbin4463 -> 4430 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.pngbin1488 -> 1509 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.pngbin1436 -> 1468 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.pngbin1342 -> 1375 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.pngbin1424 -> 1459 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.pngbin1289 -> 1333 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.pngbin1292 -> 1292 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.pngbin1284 -> 1288 bytes
-rw-r--r--core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.pngbin1279 -> 1285 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_dark.9.pngbin702 -> 704 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_left_holo_light.9.pngbin691 -> 691 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_dark.9.pngbin727 -> 727 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowdown_right_holo_light.9.pngbin732 -> 732 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_dark.9.pngbin685 -> 687 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_holo_light.9.pngbin687 -> 688 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_left_right_holo_dark.9.pngbin707 -> 707 bytes
-rw-r--r--core/res/res/drawable-xhdpi/quickactions_arrowup_right_holo_light.9.pngbin698 -> 700 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_half.pngbin3018 -> 2695 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_half_holo_dark.pngbin2674 -> 3242 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_half_holo_light.pngbin2820 -> 3367 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_off.pngbin1679 -> 1461 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_off_holo_dark.pngbin1776 -> 2091 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_off_holo_light.pngbin1846 -> 2153 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_on.pngbin3443 -> 3071 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_on_holo_dark.pngbin2622 -> 3225 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_big_on_holo_light.pngbin2723 -> 3306 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_half.pngbin2553 -> 2224 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_half_holo_dark.pngbin1958 -> 2304 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_half_holo_light.pngbin2034 -> 2339 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_off.pngbin1421 -> 1283 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_off_holo_dark.pngbin1318 -> 1500 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_off_holo_light.pngbin1358 -> 1546 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_on.pngbin2860 -> 2468 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_on_holo_dark.pngbin1953 -> 2286 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_med_on_holo_light.pngbin2011 -> 2314 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_half.pngbin1558 -> 1538 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_half_holo_dark.pngbin1301 -> 1499 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_half_holo_light.pngbin1328 -> 1528 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_off.pngbin861 -> 827 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_off_holo_dark.pngbin922 -> 1018 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_off_holo_light.pngbin922 -> 1032 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_on.pngbin1593 -> 1643 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_on_holo_dark.pngbin1316 -> 1478 bytes
-rw-r--r--core/res/res/drawable-xhdpi/rate_star_small_on_holo_light.pngbin1320 -> 1498 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.pngbin3772 -> 3797 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.pngbin596 -> 568 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.pngbin498 -> 1287 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_focused_holo.pngbin0 -> 2153 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_holo.pngbin586 -> 0 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_normal_holo.pngbin0 -> 1567 bytes
-rw-r--r--core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.pngbin2672 -> 2929 bytes
-rw-r--r--core/res/res/drawable-xhdpi/search_plate.9.pngbin420 -> 423 bytes
-rw-r--r--core/res/res/drawable-xhdpi/settings_header_raw.9.pngbin21167 -> 21143 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_16_inner_holo.pngbin1935 -> 938 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_16_outer_holo.pngbin1504 -> 808 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_20_inner_holo.pngbin2240 -> 1160 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_20_outer_holo.pngbin1669 -> 1007 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_48_inner_holo.pngbin4981 -> 2769 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_48_outer_holo.pngbin3570 -> 2432 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_76_inner_holo.pngbin7567 -> 4534 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_76_outer_holo.pngbin5445 -> 4020 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.pngbin519 -> 519 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_light.9.pngbin515 -> 511 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.pngbin993 -> 997 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.pngbin951 -> 952 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_normal.9.pngbin2006 -> 2008 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_press.9.pngbin3987 -> 4005 bytes
-rw-r--r--core/res/res/drawable-xhdpi/spinner_select.9.pngbin4234 -> 4221 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_error.pngbin1099 -> 1142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_missed_call.pngbin1306 -> 1355 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.pngbin1482 -> 1979 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_adb.pngbin1258 -> 1414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_phone_call.pngbin2984 -> 1164 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.pngbin1602 -> 1111 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_general.pngbin1999 -> 1274 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_usb.pngbin1738 -> 1182 bytes
-rw-r--r--core/res/res/drawable-xhdpi/stat_sys_tether_wifi.pngbin1331 -> 1542 bytes
-rw-r--r--core/res/res/drawable-xhdpi/status_bar_header_background.9.pngbin243 -> 248 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_activated_holo_dark.9.pngbin940 -> 1234 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_activated_holo_light.9.pngbin659 -> 902 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_dark.9.pngbin588 -> 676 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_light.9.pngbin609 -> 708 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_holo_dark.9.pngbin613 -> 825 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_holo_light.9.pngbin614 -> 760 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.pngbin1021 -> 1320 bytes
-rw-r--r--core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.pngbin665 -> 1030 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_selected_v4.9.pngbin682 -> 682 bytes
-rw-r--r--core/res/res/drawable-xhdpi/tab_unselected_v4.9.pngbin414 -> 414 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_left.pngbin1989 -> 2239 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_middle.pngbin2249 -> 2422 bytes
-rw-r--r--core/res/res/drawable-xhdpi/text_select_handle_right.pngbin2182 -> 2373 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_default.9.pngbin944 -> 951 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_disabled.9.pngbin1139 -> 1142 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_disabled_selected.9.pngbin1657 -> 1665 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_default.9.pngbin1377 -> 1381 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_default.9.pngbin1821 -> 1817 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.pngbin2444 -> 2449 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.pngbin2222 -> 2226 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_pressed.9.pngbin2408 -> 2415 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_search_selected.9.pngbin1847 -> 1852 bytes
-rw-r--r--core/res/res/drawable-xhdpi/textfield_selected.9.pngbin1359 -> 1361 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_medium.9.pngbin333 -> 342 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_portrait.9.pngbin237 -> 242 bytes
-rw-r--r--core/res/res/drawable-xhdpi/title_bar_tall.9.pngbin356 -> 370 bytes
-rw-r--r--core/res/res/drawable-xhdpi/vpn_connected.pngbin2017 -> 688 bytes
-rw-r--r--core/res/res/drawable-xhdpi/vpn_disconnected.pngbin1973 -> 717 bytes
-rw-r--r--core/res/res/drawable-xhdpi/zoom_plate.9.pngbin2979 -> 2975 bytes
-rw-r--r--core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.pngbin860 -> 0 bytes
-rw-r--r--core/res/res/drawable/btn_cab_done_holo_dark.xml5
-rw-r--r--core/res/res/drawable/btn_cab_done_holo_light.xml5
-rw-r--r--core/res/res/drawable/item_background_holo_dark.xml2
-rw-r--r--core/res/res/drawable/item_background_holo_light.xml2
-rw-r--r--core/res/res/drawable/scrubber_control_selector_holo.xml7
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml3
-rw-r--r--core/res/res/layout/choose_account_type.xml49
-rw-r--r--core/res/res/layout/choose_selected_account_row.xml46
-rw-r--r--core/res/res/layout/choose_type_and_account.xml67
-rw-r--r--core/res/res/layout/keyguard_screen_glogin_unlock.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_lock.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_password_landscape.xml14
-rw-r--r--core/res/res/layout/keyguard_screen_password_portrait.xml15
-rw-r--r--core/res/res/layout/keyguard_screen_sim_pin_landscape.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_sim_pin_portrait.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_sim_puk_landscape.xml2
-rw-r--r--core/res/res/layout/keyguard_screen_sim_puk_portrait.xml39
-rw-r--r--core/res/res/layout/keyguard_screen_tab_unlock.xml5
-rw-r--r--core/res/res/layout/keyguard_screen_tab_unlock_land.xml1
-rw-r--r--core/res/res/layout/keyguard_screen_unlock_landscape.xml14
-rw-r--r--core/res/res/layout/keyguard_screen_unlock_portrait.xml18
-rw-r--r--core/res/res/layout/number_picker.xml4
-rw-r--r--core/res/res/layout/text_edit_suggestion_item.xml2
-rw-r--r--core/res/res/layout/volume_adjust.xml1
-rw-r--r--core/res/res/layout/webview_find.xml2
-rw-r--r--core/res/res/values-af/strings.xml1103
-rw-r--r--core/res/res/values-am/strings.xml1110
-rw-r--r--core/res/res/values-ar/strings.xml24
-rw-r--r--core/res/res/values-bg/strings.xml73
-rw-r--r--core/res/res/values-ca/strings.xml11
-rw-r--r--core/res/res/values-cs/strings.xml24
-rw-r--r--core/res/res/values-da/strings.xml24
-rw-r--r--core/res/res/values-de/strings.xml50
-rw-r--r--core/res/res/values-el/strings.xml24
-rw-r--r--core/res/res/values-en-rGB/strings.xml11
-rw-r--r--core/res/res/values-es-rUS/strings.xml32
-rw-r--r--core/res/res/values-es/strings.xml26
-rw-r--r--core/res/res/values-fa/strings.xml42
-rw-r--r--core/res/res/values-fi/strings.xml24
-rw-r--r--core/res/res/values-fr/strings.xml24
-rw-r--r--core/res/res/values-hr/strings.xml24
-rw-r--r--core/res/res/values-hu/strings.xml24
-rw-r--r--core/res/res/values-in/strings.xml28
-rw-r--r--core/res/res/values-it/strings.xml11
-rw-r--r--core/res/res/values-iw/strings.xml24
-rw-r--r--core/res/res/values-ja/strings.xml73
-rw-r--r--core/res/res/values-ko/strings.xml32
-rw-r--r--core/res/res/values-lt/strings.xml18
-rw-r--r--core/res/res/values-lv/strings.xml18
-rw-r--r--core/res/res/values-mcc204/strings.xml2
-rw-r--r--core/res/res/values-mcc230/strings.xml2
-rw-r--r--core/res/res/values-mcc232/strings.xml2
-rw-r--r--core/res/res/values-mcc234/strings.xml2
-rw-r--r--core/res/res/values-mcc260/strings.xml2
-rw-r--r--core/res/res/values-mcc262/strings.xml2
-rw-r--r--core/res/res/values-ms/strings.xml26
-rw-r--r--core/res/res/values-nb/strings.xml24
-rw-r--r--core/res/res/values-nl/strings.xml24
-rw-r--r--core/res/res/values-pl/strings.xml24
-rw-r--r--core/res/res/values-pt-rPT/strings.xml24
-rw-r--r--core/res/res/values-pt/strings.xml24
-rw-r--r--core/res/res/values-rm/strings.xml12
-rw-r--r--core/res/res/values-ro/strings.xml73
-rw-r--r--core/res/res/values-ru/strings.xml18
-rw-r--r--core/res/res/values-sk/strings.xml24
-rw-r--r--core/res/res/values-sl/strings.xml24
-rw-r--r--core/res/res/values-sr/strings.xml24
-rw-r--r--core/res/res/values-sv/strings.xml24
-rw-r--r--core/res/res/values-sw/strings.xml1110
-rw-r--r--core/res/res/values-sw600dp/config.xml3
-rw-r--r--core/res/res/values-th/strings.xml18
-rw-r--r--core/res/res/values-tl/strings.xml18
-rw-r--r--core/res/res/values-tr/strings.xml75
-rw-r--r--core/res/res/values-uk/strings.xml24
-rw-r--r--core/res/res/values-vi/strings.xml24
-rw-r--r--core/res/res/values-zh-rCN/strings.xml30
-rw-r--r--core/res/res/values-zh-rTW/donottranslate-cldr.xml28
-rw-r--r--core/res/res/values-zh-rTW/strings.xml26
-rw-r--r--core/res/res/values-zu/strings.xml1110
-rw-r--r--core/res/res/values/attrs_manifest.xml22
-rw-r--r--core/res/res/values/colors.xml3
-rwxr-xr-xcore/res/res/values/config.xml18
-rw-r--r--core/res/res/values/dimens.xml7
-rw-r--r--core/res/res/values/public.xml568
-rwxr-xr-xcore/res/res/values/strings.xml14
-rw-r--r--core/res/res/values/styles.xml14
-rw-r--r--core/res/res/values/themes.xml4
-rw-r--r--core/tests/bandwidthtests/Android.mk2
-rw-r--r--core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java36
-rw-r--r--core/tests/bandwidthtests/src/com/android/bandwidthtest/util/BandwidthTestUtil.java46
-rw-r--r--core/tests/coretests/apks/install_verifier_bad/Android.mk11
-rw-r--r--core/tests/coretests/apks/install_verifier_bad/AndroidManifest.xml23
-rw-r--r--core/tests/coretests/apks/install_verifier_bad/res/values/strings.xml6
-rw-r--r--core/tests/coretests/apks/install_verifier_good/Android.mk10
-rw-r--r--core/tests/coretests/apks/install_verifier_good/AndroidManifest.xml23
-rw-r--r--core/tests/coretests/apks/install_verifier_good/res/values/strings.xml6
-rw-r--r--core/tests/coretests/src/android/content/pm/VerifierDeviceIdentityTest.java37
-rw-r--r--core/tests/coretests/src/android/net/http/AbstractProxyTest.java17
-rw-r--r--data/fonts/AndroidClock.ttfbin4744 -> 4824 bytes
-rw-r--r--data/fonts/AndroidClock_Highlight.ttfbin4744 -> 4824 bytes
-rw-r--r--data/fonts/AndroidClock_Solid.ttfbin4744 -> 4824 bytes
-rw-r--r--data/fonts/Lohit_Hindi.ttfbin67960 -> 0 bytes
-rw-r--r--data/fonts/Roboto-Bold.ttfbin84868 -> 84924 bytes
-rw-r--r--data/fonts/Roboto-BoldItalic.ttfbin88056 -> 88104 bytes
-rw-r--r--data/fonts/Roboto-Italic.ttfbin87632 -> 87680 bytes
-rw-r--r--data/fonts/Roboto-Regular.ttfbin84508 -> 84564 bytes
-rw-r--r--data/fonts/fallback_fonts.xml2
-rw-r--r--data/fonts/fonts.mk1
-rwxr-xr-xdata/sounds/AudioPackage7.mk20
-rw-r--r--data/sounds/alarms/ogg/Fermium.oggbin55528 -> 56058 bytes
-rw-r--r--data/sounds/alarms/ogg/Hassium.oggbin56827 -> 58730 bytes
-rw-r--r--data/sounds/alarms/ogg/Neptunium.oggbin45772 -> 43367 bytes
-rw-r--r--data/sounds/alarms/ogg/Nobelium.oggbin170613 -> 176792 bytes
-rw-r--r--data/sounds/effects/ogg/CameraShutter.oggbin6872 -> 0 bytes
-rw-r--r--data/sounds/effects/ogg/Dock.oggbin6313 -> 6327 bytes
-rw-r--r--data/sounds/effects/ogg/Effect_Tick.oggbin4348 -> 3653 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressDelete_14.ogg (renamed from data/sounds/effects/ogg/KeypressSpacebar_24.ogg)bin4749 -> 5053 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressDelete_49.oggbin0 -> 3918 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressReturn_14.ogg (renamed from data/sounds/effects/ogg/KeypressReturn_24.ogg)bin5057 -> 5175 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressReturn_49.oggbin0 -> 4135 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressSpacebar_14.ogg (renamed from data/sounds/effects/ogg/KeypressStandard_24.ogg)bin4716 -> 5055 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressSpacebar_49.oggbin0 -> 3953 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressStandard_14.ogg (renamed from data/sounds/effects/ogg/KeypressDelete_24.ogg)bin4748 -> 5055 bytes
-rw-r--r--data/sounds/effects/ogg/KeypressStandard_49.oggbin0 -> 3950 bytes
-rw-r--r--data/sounds/effects/ogg/Lock.oggbin13259 -> 16459 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/LowBattery.oggbin12015 -> 17786 bytes
-rw-r--r--data/sounds/effects/ogg/Media_Volume.oggbin29962 -> 29940 bytes
-rw-r--r--data/sounds/effects/ogg/Undock.oggbin6503 -> 8240 bytes
-rw-r--r--data/sounds/effects/ogg/Unlock.oggbin13450 -> 11739 bytes
-rw-r--r--data/sounds/effects/ogg/VideoRecord.oggbin10313 -> 9572 bytes
-rw-r--r--data/sounds/effects/ogg/VideoStop.oggbin0 -> 8316 bytes
-rw-r--r--data/sounds/effects/ogg/VolumeIncremental.oggbin0 -> 9361 bytes
-rw-r--r--[-rwxr-xr-x]data/sounds/effects/ogg/camera_click.oggbin7688 -> 9106 bytes
-rw-r--r--data/sounds/effects/wav/CameraClick.wavbin47524 -> 71370 bytes
-rw-r--r--data/sounds/effects/wav/CameraFocus.wavbin0 -> 71370 bytes
-rw-r--r--data/sounds/effects/wav/Dock.wavbin53576 -> 53696 bytes
-rw-r--r--data/sounds/effects/wav/Effect_Tick.wavbin1122 -> 13884 bytes
-rw-r--r--data/sounds/effects/wav/Lock.wavbin159416 -> 106496 bytes
-rw-r--r--data/sounds/effects/wav/LowBattery.wavbin265790 -> 239278 bytes
-rw-r--r--data/sounds/effects/wav/Media_Volume.wavbin0 -> 849046 bytes
-rw-r--r--data/sounds/effects/wav/NFCFailure.wavbin0 -> 248116 bytes
-rw-r--r--data/sounds/effects/wav/NFCInitiated.wavbin0 -> 283464 bytes
-rw-r--r--data/sounds/effects/wav/NFCSuccess.wavbin0 -> 248116 bytes
-rw-r--r--data/sounds/effects/wav/Undock.wavbin53576 -> 53696 bytes
-rw-r--r--data/sounds/effects/wav/Unlock.wavbin159416 -> 109436 bytes
-rw-r--r--data/sounds/effects/wav/VideoRecord.wavbin106496 -> 80208 bytes
-rw-r--r--data/sounds/effects/wav/VideoStop.wavbin0 -> 53696 bytes
-rw-r--r--data/sounds/effects/wav/VideoTransmitBegin.wavbin0 -> 133232 bytes
-rw-r--r--data/sounds/effects/wav/VideoTransmitEnd.wavbin0 -> 133232 bytes
-rw-r--r--data/sounds/effects/wav/VolumeIncremental.wavbin0 -> 106720 bytes
-rw-r--r--data/sounds/notifications/ogg/Antares.oggbin10733 -> 10910 bytes
-rw-r--r--data/sounds/notifications/ogg/Betelgeuse.oggbin15788 -> 15715 bytes
-rw-r--r--data/sounds/notifications/ogg/Deneb.oggbin16008 -> 15866 bytes
-rw-r--r--data/sounds/notifications/ogg/Hojus.oggbin16289 -> 16318 bytes
-rw-r--r--data/sounds/notifications/ogg/Lalande.oggbin18484 -> 18138 bytes
-rw-r--r--data/sounds/notifications/ogg/Mira.oggbin17509 -> 17711 bytes
-rw-r--r--data/sounds/notifications/ogg/Proxima.oggbin12864 -> 13244 bytes
-rw-r--r--data/sounds/notifications/ogg/Upsilon.oggbin23492 -> 24040 bytes
-rw-r--r--data/sounds/ringtones/ogg/Carina.oggbin15462 -> 15384 bytes
-rw-r--r--data/sounds/ringtones/ogg/Cassiopeia.oggbin42600 -> 44380 bytes
-rw-r--r--data/sounds/ringtones/ogg/Sceptrum.oggbin293038 -> 316370 bytes
-rw-r--r--data/sounds/ringtones/ogg/Solarium.oggbin85444 -> 89515 bytes
-rw-r--r--data/sounds/ringtones/ogg/UrsaMinor.oggbin193299 -> 185005 bytes
-rw-r--r--data/sounds/ringtones/ogg/Vespa.oggbin78187 -> 77920 bytes
-rw-r--r--data/videos/Disco.240p.mp4bin0 -> 791065 bytes
-rw-r--r--data/videos/Disco.480p.lq.mp4bin0 -> 1625396 bytes
-rw-r--r--data/videos/Disco.480p.mq.mp4bin0 -> 3345792 bytes
-rw-r--r--data/videos/VideoPackage1.mk5
-rw-r--r--data/videos/VideoPackage2.mk5
-rw-r--r--docs/html/guide/appendix/media-formats.jd137
-rw-r--r--docs/html/guide/guide_toc.cs20
-rw-r--r--docs/html/guide/practices/design/jni.jd168
-rw-r--r--docs/html/guide/practices/ui_guidelines/widget_design.jd426
-rw-r--r--docs/html/guide/topics/appwidgets/index.jd43
-rw-r--r--docs/html/guide/topics/resources/more-resources.jd2
-rw-r--r--docs/html/guide/topics/ui/notifiers/notifications.jd357
-rw-r--r--docs/html/guide/topics/usb/adk.jd9
-rwxr-xr-xdocs/html/images/custom_message.pngbin11120 -> 17871 bytes
-rw-r--r--docs/html/images/widget_design/2x2_Widget_Frame_Landscape.pngbin3504 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/2x2_Widget_Frame_Landscape.psdbin84164 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/2x2_Widget_Frame_Portrait.pngbin3765 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/2x2_Widget_Frame_Portrait.psdbin192054 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/3x3_Widget_Frame_Landscape.pngbin4851 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/3x3_Widget_Frame_Landscape.psdbin356070 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/3x3_Widget_Frame_Portrait.pngbin4943 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/3x3_Widget_Frame_Portrait.psdbin369054 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/4x1_Widget_Frame_Landscape.pngbin3270 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/4x1_Widget_Frame_Landscape.psdbin114336 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/4x1_Widget_Frame_Portrait.pngbin3403 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/4x1_Widget_Frame_Portrait.psdbin73853 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/Add_Noise.pngbin68306 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/Layer_Style.pngbin80200 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/Music_widget_button_states.psdbin948899 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/alignment.pngbin44231 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/buttons.pngbin6358 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/file_format.pngbin128651 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/landscape_sizes.pngbin88782 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/music_example.pngbin0 -> 6381 bytes
-rw-r--r--docs/html/images/widget_design/music_example_layouts.pngbin0 -> 33988 bytes
-rw-r--r--docs/html/images/widget_design/music_example_redline.pngbin0 -> 6055 bytes
-rw-r--r--docs/html/images/widget_design/music_example_stretched.pngbin0 -> 7688 bytes
-rw-r--r--docs/html/images/widget_design/portrait_sizes.pngbin97525 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/widget_examples.pngbin126431 -> 50203 bytes
-rw-r--r--docs/html/images/widget_design/widget_sizes_landscape.pngbin113725 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/widget_sizes_portrait.pngbin143836 -> 0 bytes
-rw-r--r--docs/html/images/widget_design/widget_template_excerpts.pngbin0 -> 5707 bytes
-rw-r--r--docs/html/images/widget_design/widget_terms.pngbin0 -> 4830 bytes
-rw-r--r--docs/html/resources/articles/speech-input.jd4
-rw-r--r--docs/html/resources/resources-data.js39
-rw-r--r--docs/html/sdk/android-3.2.jd4
-rw-r--r--docs/html/sdk/index.jd24
-rw-r--r--docs/html/sdk/sdk_toc.cs11
-rw-r--r--docs/html/sdk/tools-notes.jd47
-rw-r--r--docs/html/shareables/app_widget_templates-v4.0.zipbin0 -> 140221 bytes
-rw-r--r--drm/drmserver/DrmManager.cpp24
-rw-r--r--graphics/java/android/renderscript/ProgramRaster.java7
-rw-r--r--graphics/java/android/renderscript/RenderScript.java9
-rw-r--r--graphics/jni/android_renderscript_RenderScript.cpp10
-rw-r--r--include/camera/CameraParameters.h22
-rw-r--r--include/gui/SurfaceTexture.h11
-rw-r--r--include/media/MediaProfiles.h6
-rw-r--r--include/media/stagefright/ACodec.h7
-rw-r--r--include/surfaceflinger/ISurfaceComposer.h8
-rw-r--r--include/ui/Rect.h2
-rw-r--r--include/utils/threads.h4
-rw-r--r--libs/gui/SurfaceTexture.cpp145
-rw-r--r--libs/hwui/Rect.h62
-rw-r--r--libs/hwui/utils/Compare.h2
-rw-r--r--libs/rs/driver/rsdCore.cpp2
-rw-r--r--libs/rs/driver/rsdGL.cpp5
-rw-r--r--libs/rs/rs.spec3
-rw-r--r--libs/rs/rsContext.cpp22
-rw-r--r--libs/rs/rsProgramRaster.cpp27
-rw-r--r--libs/rs/rsProgramRaster.h9
-rw-r--r--libs/ui/Input.cpp2
-rw-r--r--libs/ui/Region.cpp6
-rw-r--r--libs/utils/Android.mk8
-rw-r--r--libs/utils/Threads.cpp8
-rw-r--r--media/java/android/media/AudioManager.java62
-rw-r--r--media/java/android/media/AudioService.java186
-rw-r--r--media/java/android/media/CamcorderProfile.java26
-rw-r--r--media/java/android/media/IAudioService.aidl12
-rw-r--r--media/java/android/media/IRemoteControlDisplay.aidl11
-rw-r--r--media/java/android/media/MediaScanner.java54
-rw-r--r--media/java/android/media/RemoteControlClient.java89
-rw-r--r--media/java/android/media/Ringtone.java20
-rw-r--r--media/jni/android_media_MediaPlayer.cpp27
-rw-r--r--media/jni/android_media_MediaProfiles.cpp16
-rw-r--r--media/libmedia/MediaProfiles.cpp6
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp13
-rw-r--r--media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp22
-rw-r--r--media/libmediaplayerservice/nuplayer/HTTPLiveSource.h5
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.cpp151
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayer.h30
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp15
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h3
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp28
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDriver.h7
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp89
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h28
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerSource.h5
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerStreamListener.h4
-rw-r--r--media/libmediaplayerservice/nuplayer/StreamingSource.cpp16
-rw-r--r--media/libmediaplayerservice/nuplayer/StreamingSource.h5
-rw-r--r--media/libstagefright/ACodec.cpp137
-rw-r--r--media/libstagefright/AVIExtractor.cpp445
-rw-r--r--media/libstagefright/AudioPlayer.cpp3
-rw-r--r--media/libstagefright/AwesomePlayer.cpp8
-rwxr-xr-xmedia/libstagefright/OMXCodec.cpp12
-rw-r--r--media/libstagefright/SampleTable.cpp101
-rw-r--r--media/libstagefright/SurfaceMediaSource.cpp4
-rw-r--r--media/libstagefright/avc_utils.cpp24
-rw-r--r--media/libstagefright/chromium_http/support.cpp22
-rw-r--r--media/libstagefright/foundation/AMessage.cpp9
-rw-r--r--media/libstagefright/include/AVIExtractor.h6
-rw-r--r--media/libstagefright/include/SampleTable.h6
-rw-r--r--media/libstagefright/include/avc_utils.h1
-rw-r--r--media/libstagefright/matroska/MatroskaExtractor.cpp108
-rw-r--r--media/libstagefright/omx/OMX.cpp2
-rw-r--r--media/libstagefright/omx/SimpleSoftOMXComponent.cpp2
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java35
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioEffectTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java)3
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioManagerTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioManagerTest.java)4
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioTrackTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java)3
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaBassBoostTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaBassBoostTest.java)19
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEnvReverbTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java)30
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEqualizerTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEqualizerTest.java)17
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaPresetReverbTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java)34
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVirtualizerTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVirtualizerTest.java)23
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVisualizerTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVisualizerTest.java)23
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/SimTonesTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java)4
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediaplayback/MediaPlayerApiTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java)12
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java)2
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaItemThumbnailTest.java)2
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java)2
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorAPITest.java)2
-rwxr-xr-xmedia/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java)2
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java (renamed from media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorPreviewTest.java)2
-rw-r--r--native/include/android/rect.h3
-rw-r--r--opengl/java/android/opengl/Matrix.java191
-rw-r--r--opengl/libs/EGL/egl_object.h2
-rw-r--r--opengl/libs/GLES2_dbg/Android.mk3
-rw-r--r--opengl/libs/GLES2_dbg/src/dbgcontext.cpp24
-rw-r--r--opengl/libs/GLES2_dbg/src/egl.cpp6
-rw-r--r--opengl/libs/GLES2_dbg/src/header.h4
-rw-r--r--opengl/libs/GLES2_dbg/src/vertex.cpp19
-rw-r--r--opengl/libs/GLES2_dbg/test/test_main.cpp2
-rw-r--r--opengl/libs/GLES2_dbg/test/test_server.cpp2
-rw-r--r--opengl/libs/GLES2_dbg/test/test_socket.cpp2
-rw-r--r--packages/BackupRestoreConfirmation/res/values-af/strings.xml7
-rw-r--r--packages/BackupRestoreConfirmation/res/values-am/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ar/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-bg/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ca/strings.xml7
-rw-r--r--packages/BackupRestoreConfirmation/res/values-cs/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-da/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-de/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-el/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml7
-rw-r--r--packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-es/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fa/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fi/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-fr/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-hr/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-hu/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-in/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-it/strings.xml7
-rw-r--r--packages/BackupRestoreConfirmation/res/values-iw/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ja/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ko/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-lt/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-lv/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ms/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-nb/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-nl/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pl/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-pt/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ro/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-ru/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sk/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sl/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sr/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sv/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-sw/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-th/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-tl/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-tr/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-uk/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-vi/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml14
-rw-r--r--packages/BackupRestoreConfirmation/res/values-zu/strings.xml14
-rw-r--r--packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java246
-rw-r--r--packages/SystemUI/res/drawable-hdpi/battery_low_battery.pngbin4183 -> 1476 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_bottom.9.pngbin1654 -> 1637 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_top.9.pngbin150 -> 129 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_notification_dnd.pngbin456 -> 419 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.pngbin1007 -> 1106 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.pngbin1015 -> 979 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_land.pngbin996 -> 1120 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_home.pngbin852 -> 1043 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_land.pngbin798 -> 1064 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.pngbin958 -> 972 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu.pngbin425 -> 626 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu_land.pngbin965 -> 615 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent.pngbin574 -> 728 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent_land.pngbin562 -> 739 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.pngbin9741 -> 3000 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.pngbin808 -> 1483 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.pngbin844 -> 895 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.pngbin616 -> 604 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.pngbin628 -> 691 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.pngbin529 -> 564 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.pngbin535 -> 570 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.pngbin536 -> 565 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.pngbin530 -> 563 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.pngbin524 -> 558 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.pngbin647 -> 685 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.pngbin971 -> 1040 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.pngbin926 -> 999 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.pngbin923 -> 1015 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.pngbin945 -> 1024 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.pngbin948 -> 1027 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.pngbin945 -> 1033 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.pngbin928 -> 1012 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.pngbin720 -> 1563 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.pngbin1246 -> 1304 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.pngbin548 -> 615 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.pngbin576 -> 643 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.pngbin564 -> 629 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.pngbin481 -> 497 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.pngbin501 -> 546 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.pngbin469 -> 496 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.pngbin480 -> 495 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.pngbin587 -> 687 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.pngbin614 -> 728 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.pngbin626 -> 717 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.pngbin516 -> 561 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.pngbin558 -> 631 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.pngbin505 -> 554 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.pngbin792 -> 694 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.pngbin1548 -> 872 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.pngbin1550 -> 872 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.pngbin525 -> 569 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.pngbin531 -> 594 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.pngbin657 -> 725 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.pngbin882 -> 1001 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.pngbin744 -> 785 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.pngbin1080 -> 1175 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.pngbin807 -> 850 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.pngbin1244 -> 1346 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.pngbin821 -> 877 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.pngbin1286 -> 1403 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.pngbin771 -> 887 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.pngbin381 -> 435 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.pngbin436 -> 523 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.pngbin381 -> 424 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_sync.pngbin0 -> 1338 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.pngbin0 -> 1381 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.pngbin384 -> 430 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.pngbin429 -> 512 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.pngbin385 -> 417 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.pngbin761 -> 818 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.pngbin891 -> 951 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.pngbin1241 -> 1335 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.pngbin1016 -> 1092 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.pngbin1605 -> 1731 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.pngbin1128 -> 1240 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.pngbin1923 -> 2156 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.pngbin1213 -> 1333 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.pngbin2192 -> 2436 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/battery_low_battery.pngbin2479 -> 1085 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/compat_mode_help_diagram.pngbin8649 -> 8410 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_bottom.9.pngbin689 -> 1113 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_top.9.pngbin142 -> 117 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/compat_mode_help_icon.pngbin2043 -> 1842 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_notification_dnd.pngbin438 -> 401 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.pngbin782 -> 816 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.pngbin757 -> 723 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_land.pngbin782 -> 791 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_home.pngbin695 -> 840 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_land.pngbin672 -> 832 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.pngbin717 -> 707 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu.pngbin429 -> 437 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_land.pngbin722 -> 438 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent.pngbin534 -> 592 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent_land.pngbin540 -> 616 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.pngbin9741 -> 1576 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.pngbin574 -> 1255 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.pngbin644 -> 658 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.pngbin514 -> 515 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.pngbin519 -> 547 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.pngbin475 -> 488 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.pngbin477 -> 493 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.pngbin477 -> 498 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.pngbin473 -> 492 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.pngbin487 -> 495 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.pngbin523 -> 540 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.pngbin732 -> 762 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.pngbin712 -> 747 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.pngbin724 -> 748 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.pngbin736 -> 775 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.pngbin743 -> 770 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.pngbin728 -> 762 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.pngbin731 -> 757 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.pngbin552 -> 1303 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.pngbin854 -> 915 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.pngbin457 -> 490 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.pngbin471 -> 503 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.pngbin456 -> 498 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.pngbin414 -> 424 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.pngbin428 -> 461 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.pngbin416 -> 430 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.pngbin409 -> 417 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.pngbin490 -> 533 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.pngbin506 -> 560 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.pngbin492 -> 552 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.pngbin446 -> 481 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.pngbin463 -> 508 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.pngbin448 -> 473 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.pngbin620 -> 560 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.pngbin1291 -> 640 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.pngbin1224 -> 640 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.pngbin486 -> 478 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.pngbin481 -> 479 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.pngbin560 -> 556 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.pngbin728 -> 751 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.pngbin587 -> 613 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.pngbin818 -> 847 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.pngbin610 -> 651 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.pngbin895 -> 922 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.pngbin613 -> 662 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.pngbin907 -> 949 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.pngbin564 -> 636 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.pngbin338 -> 392 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.pngbin378 -> 441 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.pngbin351 -> 386 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_sync.pngbin0 -> 1194 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.pngbin0 -> 1216 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.pngbin356 -> 392 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.pngbin394 -> 448 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.pngbin358 -> 387 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.pngbin576 -> 623 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.pngbin637 -> 700 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.pngbin858 -> 937 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.pngbin706 -> 771 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.pngbin1041 -> 1149 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.pngbin742 -> 826 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.pngbin1166 -> 1329 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.pngbin768 -> 863 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.pngbin1239 -> 1430 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.pngbin1232 -> 1337 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.pngbin1179 -> 1078 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.pngbin650 -> 664 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.pngbin779 -> 801 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.pngbin588 -> 614 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.pngbin588 -> 615 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.pngbin584 -> 615 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.pngbin589 -> 609 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.pngbin583 -> 610 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.pngbin826 -> 815 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.pngbin1281 -> 1263 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.pngbin1239 -> 1220 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.pngbin1262 -> 1246 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.pngbin1264 -> 1258 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.pngbin1274 -> 1251 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.pngbin1275 -> 1250 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.pngbin1244 -> 1223 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.pngbin1033 -> 1093 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.pngbin1800 -> 1694 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.pngbin675 -> 723 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.pngbin721 -> 765 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.pngbin712 -> 767 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.pngbin527 -> 544 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.pngbin616 -> 655 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.pngbin494 -> 517 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.pngbin767 -> 852 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.pngbin814 -> 928 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.pngbin813 -> 909 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.pngbin599 -> 633 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.pngbin685 -> 763 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.pngbin563 -> 610 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.pngbin610 -> 675 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.pngbin601 -> 661 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.pngbin785 -> 823 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.pngbin1084 -> 1142 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.pngbin865 -> 911 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.pngbin1273 -> 1362 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.pngbin983 -> 1005 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.pngbin1529 -> 1576 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.pngbin1012 -> 1045 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.pngbin1627 -> 1676 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.pngbin1091 -> 1090 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.pngbin426 -> 463 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.pngbin506 -> 581 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.pngbin411 -> 462 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.pngbin430 -> 465 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.pngbin510 -> 585 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.pngbin410 -> 449 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.pngbin1010 -> 1019 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.pngbin1216 -> 1226 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.pngbin1682 -> 1736 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.pngbin1422 -> 1429 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.pngbin2247 -> 2262 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.pngbin1664 -> 1671 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.pngbin2899 -> 2913 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.pngbin1837 -> 1836 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.pngbin3432 -> 3394 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.pngbin821 -> 883 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.pngbin835 -> 794 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.pngbin589 -> 568 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.pngbin615 -> 611 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.pngbin518 -> 531 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.pngbin528 -> 531 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.pngbin528 -> 529 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.pngbin524 -> 529 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.pngbin520 -> 532 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.pngbin635 -> 624 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.pngbin938 -> 909 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.pngbin899 -> 880 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.pngbin898 -> 893 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.pngbin919 -> 905 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.pngbin923 -> 906 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.pngbin930 -> 919 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.pngbin903 -> 897 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.pngbin732 -> 773 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.pngbin1227 -> 1183 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.pngbin541 -> 570 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.pngbin544 -> 565 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.pngbin554 -> 585 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.pngbin470 -> 467 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.pngbin497 -> 519 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.pngbin440 -> 469 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.pngbin584 -> 638 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.pngbin616 -> 654 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.pngbin604 -> 655 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.pngbin506 -> 541 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.pngbin547 -> 590 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.pngbin476 -> 528 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.pngbin515 -> 557 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.pngbin515 -> 551 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.pngbin613 -> 639 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.pngbin823 -> 848 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.pngbin674 -> 691 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.pngbin957 -> 973 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.pngbin741 -> 723 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.pngbin1112 -> 1066 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.pngbin755 -> 745 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.pngbin1148 -> 1127 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.pngbin777 -> 792 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.pngbin380 -> 426 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.pngbin428 -> 491 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.pngbin382 -> 408 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.pngbin387 -> 428 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.pngbin433 -> 493 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.pngbin379 -> 413 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.pngbin765 -> 748 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.pngbin872 -> 862 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.pngbin1182 -> 1184 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.pngbin966 -> 969 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.pngbin1513 -> 1485 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.pngbin1102 -> 1085 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.pngbin1849 -> 1834 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.pngbin1186 -> 1152 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.pngbin2091 -> 2049 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.pngbin1691 -> 1869 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.pngbin1477 -> 1436 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.pngbin817 -> 803 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.pngbin924 -> 945 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.pngbin673 -> 689 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.pngbin684 -> 687 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.pngbin677 -> 675 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.pngbin679 -> 688 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.pngbin672 -> 677 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.pngbin977 -> 955 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.pngbin1635 -> 1577 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.pngbin1522 -> 1464 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.pngbin1541 -> 1500 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.pngbin1575 -> 1507 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.pngbin1559 -> 1500 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.pngbin1569 -> 1526 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.pngbin1540 -> 1484 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.pngbin1370 -> 1441 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.pngbin2441 -> 2258 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.pngbin852 -> 929 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.pngbin888 -> 985 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.pngbin902 -> 988 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.pngbin569 -> 596 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.pngbin730 -> 800 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.pngbin556 -> 621 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.pngbin968 -> 1104 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.pngbin1059 -> 1218 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.pngbin1037 -> 1178 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.pngbin658 -> 670 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.pngbin838 -> 959 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.pngbin618 -> 700 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.pngbin710 -> 834 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.pngbin715 -> 834 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.pngbin923 -> 990 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.pngbin1305 -> 1385 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.pngbin1041 -> 1045 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.pngbin1542 -> 1581 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.pngbin1159 -> 1147 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.pngbin1846 -> 1826 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.pngbin1211 -> 1186 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.pngbin1985 -> 1947 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.pngbin1422 -> 1484 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.pngbin479 -> 541 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.pngbin608 -> 696 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.pngbin462 -> 520 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.pngbin481 -> 534 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.pngbin610 -> 703 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.pngbin461 -> 515 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.pngbin1335 -> 1292 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.pngbin1576 -> 1531 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.pngbin2247 -> 2180 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.pngbin1905 -> 1845 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.pngbin3057 -> 2983 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.pngbin2262 -> 2211 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.pngbin4018 -> 3984 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.pngbin2515 -> 2480 bytes
-rw-r--r--packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.pngbin4890 -> 4718 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/alert_bar_background_normal.9.pngbin0 -> 2074 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/alert_bar_background_pressed.9.pngbin0 -> 2099 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/battery_low_battery.pngbin0 -> 1934 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal.9.pngbin0 -> 1592 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable.9.pngbin0 -> 1128 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.pngbin0 -> 1920 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_default_small_pressed.9.pngbin0 -> 2210 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_default_small_selected.9.pngbin0 -> 2206 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/global_screenshot_background.9.pngbin0 -> 671 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/hd_off.pngbin0 -> 6729 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/hd_on.pngbin0 -> 7621 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_launcher_settings.pngbin0 -> 11968 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_notification_dnd.pngbin0 -> 464 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.pngbin0 -> 1751 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.pngbin1555 -> 1451 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.pngbin1349 -> 1291 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.pngbin1503 -> 1423 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.pngbin1191 -> 1390 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.pngbin1142 -> 1417 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default.pngbin1146 -> 1207 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.pngbin573 -> 232 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.pngbin1415 -> 233 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.pngbin793 -> 727 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.pngbin804 -> 792 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/pocket_drag_pattern.pngbin0 -> 1030 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/scrubber_control_disabled_holo.pngbin0 -> 3735 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/scrubber_control_holo.pngbin0 -> 6800 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/scrubber_track_holo_dark.9.pngbin0 -> 571 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.pngbin1107 -> 1745 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.pngbin1038 -> 1110 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.pngbin722 -> 728 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.pngbin714 -> 817 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.pngbin589 -> 643 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.pngbin575 -> 648 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.pngbin590 -> 663 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.pngbin584 -> 646 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.pngbin570 -> 646 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.pngbin774 -> 836 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.pngbin1246 -> 1332 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.pngbin1149 -> 1235 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.pngbin1176 -> 1262 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.pngbin1170 -> 1278 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.pngbin1185 -> 1294 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.pngbin1185 -> 1286 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.pngbin1146 -> 1267 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.pngbin939 -> 1843 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.pngbin1650 -> 1721 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.pngbin680 -> 762 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.pngbin701 -> 778 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.pngbin719 -> 779 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.pngbin542 -> 554 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.pngbin616 -> 663 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.pngbin520 -> 573 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.pngbin548 -> 570 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.pngbin757 -> 874 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.pngbin770 -> 913 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.pngbin789 -> 898 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.pngbin575 -> 652 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.pngbin664 -> 759 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.pngbin578 -> 660 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.pngbin967 -> 828 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.pngbin2021 -> 1130 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.pngbin2007 -> 1130 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.pngbin666 -> 733 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.pngbin663 -> 722 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.pngbin811 -> 859 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.pngbin1138 -> 1219 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.pngbin904 -> 907 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.pngbin1361 -> 1357 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.pngbin976 -> 985 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.pngbin1575 -> 1541 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.pngbin999 -> 1016 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.pngbin1651 -> 1622 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.pngbin1014 -> 1117 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.pngbin409 -> 478 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.pngbin479 -> 590 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.pngbin400 -> 452 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_sync.pngbin0 -> 1523 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.pngbin0 -> 1590 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.pngbin413 -> 465 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.pngbin489 -> 572 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.pngbin409 -> 453 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.pngbin953 -> 1042 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.pngbin1142 -> 1217 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.pngbin1635 -> 1709 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.pngbin1334 -> 1420 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.pngbin2195 -> 2287 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.pngbin1555 -> 1682 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.pngbin2778 -> 2975 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.pngbin1747 -> 1853 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.pngbin3287 -> 3485 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/status_bar_expand_default.pngbin0 -> 949 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/status_bar_expand_pressed.pngbin0 -> 9646 bytes
-rw-r--r--packages/SystemUI/res/drawable/notification_row_bg.xml22
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_recent_item.xml4
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/res/layout-port/status_bar_recent_item.xml4
-rw-r--r--packages/SystemUI/res/layout-port/status_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml4
-rw-r--r--packages/SystemUI/res/layout/battery_low.xml11
-rw-r--r--packages/SystemUI/res/layout/signal_cluster_view.xml6
-rw-r--r--packages/SystemUI/res/layout/status_bar_no_recent_apps.xml36
-rw-r--r--packages/SystemUI/res/layout/status_bar_notification_row.xml5
-rw-r--r--packages/SystemUI/res/values-af-large/strings.xml (renamed from packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml)10
-rw-r--r--packages/SystemUI/res/values-af/strings.xml231
-rw-r--r--packages/SystemUI/res/values-am-large/strings.xml (renamed from packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml)10
-rw-r--r--packages/SystemUI/res/values-am/strings.xml231
-rw-r--r--packages/SystemUI/res/values-ar-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml2
-rw-r--r--packages/SystemUI/res/values-bg-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml6
-rw-r--r--packages/SystemUI/res/values-ca-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml2
-rw-r--r--packages/SystemUI/res/values-cs-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml2
-rw-r--r--packages/SystemUI/res/values-da-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-da/strings.xml2
-rw-r--r--packages/SystemUI/res/values-de-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-de/strings.xml2
-rw-r--r--packages/SystemUI/res/values-el-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-el/strings.xml2
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml2
-rw-r--r--packages/SystemUI/res/values-es-rUS-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml2
-rw-r--r--packages/SystemUI/res/values-es-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-es/strings.xml2
-rw-r--r--packages/SystemUI/res/values-fa-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml2
-rw-r--r--packages/SystemUI/res/values-fi-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml2
-rw-r--r--packages/SystemUI/res/values-fr-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml2
-rw-r--r--packages/SystemUI/res/values-hr-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml2
-rw-r--r--packages/SystemUI/res/values-hu-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml2
-rw-r--r--packages/SystemUI/res/values-in-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-in/strings.xml4
-rw-r--r--packages/SystemUI/res/values-it-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-it/strings.xml2
-rw-r--r--packages/SystemUI/res/values-iw-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml2
-rw-r--r--packages/SystemUI/res/values-ja-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml6
-rw-r--r--packages/SystemUI/res/values-ko-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml2
-rw-r--r--packages/SystemUI/res/values-lt-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml2
-rw-r--r--packages/SystemUI/res/values-lv-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml2
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml2
-rw-r--r--packages/SystemUI/res/values-nb-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml2
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml2
-rw-r--r--packages/SystemUI/res/values-pl-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml2
-rw-r--r--packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml2
-rw-r--r--packages/SystemUI/res/values-pt-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml2
-rw-r--r--packages/SystemUI/res/values-rm/strings.xml2
-rw-r--r--packages/SystemUI/res/values-ro-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml6
-rw-r--r--packages/SystemUI/res/values-ru-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sk-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sl-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sr-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sv-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml2
-rw-r--r--packages/SystemUI/res/values-sw-large/strings.xml (renamed from packages/SystemUI/res/values-nl-xlarge/strings.xml)10
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml231
-rw-r--r--packages/SystemUI/res/values-th-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-th/strings.xml2
-rw-r--r--packages/SystemUI/res/values-tl-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml2
-rw-r--r--packages/SystemUI/res/values-tr-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml6
-rw-r--r--packages/SystemUI/res/values-uk-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml2
-rw-r--r--packages/SystemUI/res/values-vi-xlarge/strings.xml29
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml2
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml2
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml2
-rw-r--r--packages/SystemUI/res/values-zu-large/strings.xml (renamed from packages/SystemUI/res/values-en-rGB-xlarge/strings.xml)10
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml231
-rw-r--r--packages/SystemUI/res/values/colors.xml2
-rw-r--r--packages/SystemUI/res/values/strings.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/Choreographer.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java42
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java47
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java63
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java3
-rw-r--r--packages/VpnDialogs/res/layout/confirm.xml81
-rw-r--r--packages/VpnDialogs/res/values-af/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-am/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ar/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-bg/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ca/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-cs/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-da/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-de/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-el/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-en-rGB/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-es-rUS/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-es/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-fa/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-fi/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-fr/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-hr/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-hu/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-in/strings.xml6
-rw-r--r--packages/VpnDialogs/res/values-it/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-iw/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ja/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ko/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-lt/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-lv/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ms/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-nb/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-nl/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-pl/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-pt-rPT/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-pt/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ro/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-ru/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-sk/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-sl/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-sr/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-sv/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-sw/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-th/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-tl/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-tr/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-uk/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-vi/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-zh-rCN/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-zh-rTW/strings.xml4
-rw-r--r--packages/VpnDialogs/res/values-zu/strings.xml4
-rw-r--r--packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java6
-rw-r--r--policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java4
-rw-r--r--policy/src/com/android/internal/policy/impl/GlobalActions.java10
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java109
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java26
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardViewBase.java14
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardViewManager.java40
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java63
-rw-r--r--policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java175
-rw-r--r--policy/src/com/android/internal/policy/impl/LockScreen.java5
-rw-r--r--policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java2
-rw-r--r--policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java8
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java69
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java422
-rw-r--r--policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java72
-rw-r--r--policy/src/com/android/internal/policy/impl/SimUnlockScreen.java2
-rw-r--r--services/audioflinger/AudioFlinger.cpp15
-rw-r--r--services/audioflinger/AudioResampler.cpp16
-rw-r--r--services/java/com/android/server/AlarmManagerService.java2
-rw-r--r--services/java/com/android/server/BackupManagerService.java43
-rw-r--r--services/java/com/android/server/ConnectivityService.java177
-rw-r--r--services/java/com/android/server/EventLogTags.logtags4
-rw-r--r--services/java/com/android/server/NetworkManagementService.java75
-rwxr-xr-xservices/java/com/android/server/NotificationManagerService.java3
-rw-r--r--services/java/com/android/server/PowerManagerService.java165
-rw-r--r--services/java/com/android/server/SystemServer.java18
-rw-r--r--services/java/com/android/server/TelephonyRegistry.java11
-rw-r--r--services/java/com/android/server/WallpaperManagerService.java130
-rw-r--r--services/java/com/android/server/accessibility/AccessibilityManagerService.java28
-rw-r--r--services/java/com/android/server/accessibility/TouchExplorer.java4
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java79
-rw-r--r--services/java/com/android/server/am/ActivityRecord.java2
-rw-r--r--services/java/com/android/server/am/ActivityStack.java49
-rw-r--r--services/java/com/android/server/am/ContentProviderRecord.java8
-rw-r--r--services/java/com/android/server/am/IntentBindRecord.java4
-rw-r--r--services/java/com/android/server/am/PendingIntentRecord.java5
-rw-r--r--services/java/com/android/server/am/ServiceRecord.java2
-rw-r--r--services/java/com/android/server/am/TaskRecord.java4
-rw-r--r--services/java/com/android/server/connectivity/Tethering.java101
-rw-r--r--services/java/com/android/server/net/NetworkStatsService.java282
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java346
-rw-r--r--services/java/com/android/server/pm/PackageVerificationResponse.java28
-rw-r--r--services/java/com/android/server/pm/PackageVerificationState.java149
-rw-r--r--services/java/com/android/server/wm/AppWindowToken.java2
-rw-r--r--services/java/com/android/server/wm/DragState.java19
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java468
-rw-r--r--services/java/com/android/server/wm/WindowState.java38
-rw-r--r--services/surfaceflinger/DisplayHardware/DisplayHardware.h3
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.cpp53
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.h5
-rw-r--r--services/surfaceflinger/Layer.cpp36
-rw-r--r--services/surfaceflinger/Layer.h3
-rw-r--r--services/surfaceflinger/LayerBase.cpp2
-rw-r--r--services/surfaceflinger/LayerBase.h6
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp129
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h6
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java205
-rw-r--r--telephony/java/android/telephony/PhoneNumberUtils.java40
-rwxr-xr-x[-rw-r--r--]telephony/java/android/telephony/TelephonyManager.java20
-rw-r--r--telephony/java/com/android/internal/telephony/ApnContext.java6
-rw-r--r--telephony/java/com/android/internal/telephony/CallerInfo.java4
-rw-r--r--telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java4
-rw-r--r--telephony/java/com/android/internal/telephony/DataConnectionTracker.java2
-rwxr-xr-x[-rw-r--r--]telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl5
-rwxr-xr-x[-rw-r--r--]telephony/java/com/android/internal/telephony/PhoneSubInfo.java8
-rwxr-xr-x[-rw-r--r--]telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java7
-rw-r--r--telephony/java/com/android/internal/telephony/ServiceStateTracker.java13
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java5
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java4
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java56
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java2
-rw-r--r--telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java15
-rw-r--r--test-runner/src/android/test/InstrumentationTestRunner.java12
-rw-r--r--test-runner/src/android/test/mock/MockPackageManager.java7
-rw-r--r--tests/DataIdleTest/src/com/android/tests/dataidle/DataIdleTest.java14
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java3
-rw-r--r--tests/HwAccelerationTest/AndroidManifest.xml9
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/DisplayListLayersActivity.java125
-rw-r--r--tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java26
-rw-r--r--tools/aapt/ResourceTable.cpp33
-rw-r--r--tools/aapt/ResourceTable.h5
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java8
-rwxr-xr-xtools/orientationplot/orientationplot.py132
-rw-r--r--wifi/java/android/net/wifi/WifiNative.java16
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java50
-rw-r--r--wifi/java/android/net/wifi/WifiWatchdogStateMachine.java7
1906 files changed, 16852 insertions, 10574 deletions
diff --git a/Android.mk b/Android.mk
index 352e5ebca4fc..be8c25b714a1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -238,7 +238,7 @@ $(full_classes_compiled_jar): $(framework_res_R_stamp)
# Make sure that framework-res is installed when framework is.
$(LOCAL_INSTALLED_MODULE): | $(dir $(LOCAL_INSTALLED_MODULE))framework-res.apk
-framework_built := $(LOCAL_BUILT_MODULE)
+framework_built := $(call java-lib-deps,framework)
# AIDL files to be preprocessed and included in the SDK,
# relative to the root of the build tree.
@@ -381,7 +381,7 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS := \
-since ./frameworks/base/api/11.xml 11 \
-since ./frameworks/base/api/12.xml 12 \
-since ./frameworks/base/api/13.xml 13 \
- -since ./frameworks/base/api/current.txt ICS \
+ -since ./frameworks/base/api/14.txt 14 \
-werror -hide 113 \
-overview $(LOCAL_PATH)/core/java/overview.html
@@ -473,7 +473,7 @@ web_docs_sample_code_flags := \
## SDK version identifiers used in the published docs
# major[.minor] version for current SDK. (full releases only)
-framework_docs_SDK_VERSION:=3.2
+framework_docs_SDK_VERSION:=4.0
# release version (ie "Release x") (full releases only)
framework_docs_SDK_REL_ID:=1
diff --git a/CleanSpec.mk b/CleanSpec.mk
index d0aa368cfc65..6ae887b7a1c9 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -110,6 +110,9 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/nfc/)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/wifi/java)
$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/wifi/java)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts/Lohit_Hindi.ttf)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media/audio/)
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/api/13.xml b/api/13.xml
index 2bfa04ed8bc1..73995deca1ab 100644
--- a/api/13.xml
+++ b/api/13.xml
@@ -288451,7 +288451,7 @@
type="double"
transient="false"
volatile="false"
- value="(-1.0 / 0.0)"
+ value="(-1.0/0.0)"
static="true"
final="true"
deprecated="not deprecated"
@@ -288462,7 +288462,7 @@
type="double"
transient="false"
volatile="false"
- value="(0.0 / 0.0)"
+ value="(0.0/0.0)"
static="true"
final="true"
deprecated="not deprecated"
@@ -288473,7 +288473,7 @@
type="double"
transient="false"
volatile="false"
- value="(1.0 / 0.0)"
+ value="(1.0/0.0)"
static="true"
final="true"
deprecated="not deprecated"
@@ -289154,7 +289154,7 @@
type="float"
transient="false"
volatile="false"
- value="(-1.0f / 0.0f)"
+ value="(-1.0f/0.0f)"
static="true"
final="true"
deprecated="not deprecated"
@@ -289165,7 +289165,7 @@
type="float"
transient="false"
volatile="false"
- value="(0.0f / 0.0f)"
+ value="(0.0f/0.0f)"
static="true"
final="true"
deprecated="not deprecated"
@@ -289176,7 +289176,7 @@
type="float"
transient="false"
volatile="false"
- value="(1.0f / 0.0f)"
+ value="(1.0f/0.0f)"
static="true"
final="true"
deprecated="not deprecated"
diff --git a/api/14.txt b/api/14.txt
index 3d96c11226ad..9f2a6dfc3855 100644
--- a/api/14.txt
+++ b/api/14.txt
@@ -15,12 +15,15 @@ package android {
field public static final java.lang.String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
field public static final java.lang.String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE";
field public static final java.lang.String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER";
+ field public static final java.lang.String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL";
field public static final java.lang.String AUTHENTICATE_ACCOUNTS = "android.permission.AUTHENTICATE_ACCOUNTS";
field public static final java.lang.String BATTERY_STATS = "android.permission.BATTERY_STATS";
field public static final java.lang.String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
+ field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
+ field public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
field public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
field public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH";
field public static final java.lang.String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN";
@@ -78,6 +81,7 @@ package android {
field public static final java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE";
field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS";
field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
+ field public static final java.lang.String READ_PROFILE = "android.permission.READ_PROFILE";
field public static final java.lang.String READ_SMS = "android.permission.READ_SMS";
field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS";
field public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS";
@@ -96,6 +100,7 @@ package android {
field public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
field public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
field public static final java.lang.String SET_ORIENTATION = "android.permission.SET_ORIENTATION";
+ field public static final java.lang.String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED";
field public static final deprecated java.lang.String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS";
field public static final java.lang.String SET_PROCESS_LIMIT = "android.permission.SET_PROCESS_LIMIT";
field public static final java.lang.String SET_TIME = "android.permission.SET_TIME";
@@ -118,6 +123,7 @@ package android {
field public static final java.lang.String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";
field public static final java.lang.String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES";
field public static final java.lang.String WRITE_HISTORY_BOOKMARKS = "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS";
+ field public static final java.lang.String WRITE_PROFILE = "android.permission.WRITE_PROFILE";
field public static final java.lang.String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS";
field public static final java.lang.String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS";
field public static final java.lang.String WRITE_SMS = "android.permission.WRITE_SMS";
@@ -178,14 +184,21 @@ package android {
public static final class R.attr {
ctor public R.attr();
field public static final int absListViewStyle = 16842858; // 0x101006a
+ field public static final int accessibilityEventTypes = 16843648; // 0x1010380
+ field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
+ field public static final int accessibilityFlags = 16843652; // 0x1010384
field public static final int accountPreferences = 16843423; // 0x101029f
field public static final int accountType = 16843407; // 0x101028f
field public static final int action = 16842797; // 0x101002d
+ field public static final int actionBarDivider = 16843675; // 0x101039b
+ field public static final int actionBarItemBackground = 16843676; // 0x101039c
field public static final int actionBarSize = 16843499; // 0x10102eb
+ field public static final int actionBarSplitStyle = 16843656; // 0x1010388
field public static final int actionBarStyle = 16843470; // 0x10102ce
field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
field public static final int actionBarTabStyle = 16843507; // 0x10102f3
field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
+ field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
field public static final int actionButtonStyle = 16843480; // 0x10102d8
field public static final int actionDropDownStyle = 16843479; // 0x10102d7
field public static final int actionLayout = 16843515; // 0x10102fb
@@ -197,7 +210,11 @@ package android {
field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
field public static final int actionModeCutDrawable = 16843537; // 0x1010311
field public static final int actionModePasteDrawable = 16843539; // 0x1010313
+ field public static final int actionModeSelectAllDrawable = 16843646; // 0x101037e
+ field public static final int actionModeSplitBackground = 16843677; // 0x101039d
+ field public static final int actionModeStyle = 16843668; // 0x1010394
field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
+ field public static final int actionProviderClass = 16843657; // 0x1010389
field public static final int actionViewClass = 16843516; // 0x10102fc
field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba
@@ -209,6 +226,7 @@ package android {
field public static final int alertDialogIcon = 16843605; // 0x1010355
field public static final int alertDialogStyle = 16842845; // 0x101005d
field public static final int alertDialogTheme = 16843529; // 0x1010309
+ field public static final int alignmentMode = 16843642; // 0x101037a
field public static final int allContactsName = 16843468; // 0x10102cc
field public static final int allowBackup = 16843392; // 0x1010280
field public static final int allowClearUserData = 16842757; // 0x1010005
@@ -242,6 +260,8 @@ package android {
field public static final int background = 16842964; // 0x10100d4
field public static final int backgroundDimAmount = 16842802; // 0x1010032
field public static final int backgroundDimEnabled = 16843295; // 0x101021f
+ field public static final int backgroundSplit = 16843659; // 0x101038b
+ field public static final int backgroundStacked = 16843658; // 0x101038a
field public static final int backupAgent = 16843391; // 0x101027f
field public static final int baseline = 16843548; // 0x101031c
field public static final int baselineAlignBottom = 16843042; // 0x1010122
@@ -268,6 +288,7 @@ package android {
field public static final int cacheColorHint = 16843009; // 0x1010101
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
+ field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
field public static final deprecated int capitalize = 16843113; // 0x1010169
field public static final int centerBright = 16842956; // 0x10100cc
@@ -296,12 +317,20 @@ package android {
field public static final int codes = 16843330; // 0x1010242
field public static final int collapseColumns = 16843083; // 0x101014b
field public static final int color = 16843173; // 0x10101a5
+ field public static final int colorActivatedHighlight = 16843664; // 0x1010390
field public static final int colorBackground = 16842801; // 0x1010031
field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
+ field public static final int colorFocusedHighlight = 16843663; // 0x101038f
field public static final int colorForeground = 16842800; // 0x1010030
field public static final int colorForegroundInverse = 16843270; // 0x1010206
+ field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
+ field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
+ field public static final int colorPressedHighlight = 16843661; // 0x101038d
+ field public static final int columnCount = 16843639; // 0x1010377
field public static final int columnDelay = 16843215; // 0x10101cf
+ field public static final int columnOrderPreserved = 16843640; // 0x1010378
field public static final int columnWidth = 16843031; // 0x1010117
+ field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365
field public static final int completionHint = 16843122; // 0x1010172
field public static final int completionHintView = 16843123; // 0x1010173
field public static final int completionThreshold = 16843124; // 0x1010174
@@ -340,6 +369,7 @@ package android {
field public static final int dialogTitle = 16843250; // 0x10101f2
field public static final int digits = 16843110; // 0x1010166
field public static final int direction = 16843217; // 0x10101d1
+ field public static final int directionDescriptions = 16843681; // 0x10103a1
field public static final int directionPriority = 16843218; // 0x10101d2
field public static final int disableDependentsState = 16843249; // 0x10101f1
field public static final int disabledAlpha = 16842803; // 0x1010033
@@ -353,9 +383,11 @@ package android {
field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
field public static final int drawable = 16843161; // 0x1010199
field public static final int drawableBottom = 16843118; // 0x101016e
+ field public static final int drawableEnd = 16843667; // 0x1010393
field public static final int drawableLeft = 16843119; // 0x101016f
field public static final int drawablePadding = 16843121; // 0x1010171
field public static final int drawableRight = 16843120; // 0x1010170
+ field public static final int drawableStart = 16843666; // 0x1010392
field public static final int drawableTop = 16843117; // 0x101016d
field public static final int drawingCacheQuality = 16842984; // 0x10100e8
field public static final int dropDownAnchor = 16843363; // 0x1010263
@@ -402,7 +434,7 @@ package android {
field public static final int fadeEnabled = 16843390; // 0x101027e
field public static final int fadeOffset = 16843383; // 0x1010277
field public static final int fadeScrollbars = 16843434; // 0x10102aa
- field public static final int fadingEdge = 16842975; // 0x10100df
+ field public static final deprecated int fadingEdge = 16842975; // 0x10100df
field public static final int fadingEdgeLength = 16842976; // 0x10100e0
field public static final int fastScrollAlwaysVisible = 16843573; // 0x1010335
field public static final int fastScrollEnabled = 16843302; // 0x1010226
@@ -521,6 +553,7 @@ package android {
field public static final int installLocation = 16843447; // 0x10102b7
field public static final int interpolator = 16843073; // 0x1010141
field public static final int isAlwaysSyncable = 16843571; // 0x1010333
+ field public static final int isAuxiliary = 16843647; // 0x101037f
field public static final int isDefault = 16843297; // 0x1010221
field public static final int isIndicator = 16843079; // 0x1010147
field public static final int isModifier = 16843334; // 0x1010246
@@ -552,6 +585,7 @@ package android {
field public static final int labelTextSize = 16843317; // 0x1010235
field public static final int largeHeap = 16843610; // 0x101035a
field public static final int largeScreens = 16843398; // 0x1010286
+ field public static final int largestWidthLimitDp = 16843622; // 0x1010366
field public static final int launchMode = 16842781; // 0x101001d
field public static final int layerType = 16843604; // 0x1010354
field public static final int layout = 16842994; // 0x10100f2
@@ -572,6 +606,7 @@ package android {
field public static final int layout_centerInParent = 16843151; // 0x101018f
field public static final int layout_centerVertical = 16843153; // 0x1010191
field public static final int layout_column = 16843084; // 0x101014c
+ field public static final int layout_columnSpan = 16843645; // 0x101037d
field public static final int layout_gravity = 16842931; // 0x10100b3
field public static final int layout_height = 16842997; // 0x10100f5
field public static final int layout_margin = 16842998; // 0x10100f6
@@ -579,6 +614,8 @@ package android {
field public static final int layout_marginLeft = 16842999; // 0x10100f7
field public static final int layout_marginRight = 16843001; // 0x10100f9
field public static final int layout_marginTop = 16843000; // 0x10100f8
+ field public static final int layout_row = 16843643; // 0x101037b
+ field public static final int layout_rowSpan = 16843644; // 0x101037c
field public static final int layout_scale = 16843155; // 0x1010193
field public static final int layout_span = 16843085; // 0x101014d
field public static final int layout_toLeftOf = 16843138; // 0x1010182
@@ -599,6 +636,10 @@ package android {
field public static final int listDividerAlertDialog = 16843525; // 0x1010305
field public static final int listPopupWindowStyle = 16843519; // 0x10102ff
field public static final int listPreferredItemHeight = 16842829; // 0x101004d
+ field public static final int listPreferredItemHeightLarge = 16843654; // 0x1010386
+ field public static final int listPreferredItemHeightSmall = 16843655; // 0x1010387
+ field public static final int listPreferredItemPaddingLeft = 16843683; // 0x10103a3
+ field public static final int listPreferredItemPaddingRight = 16843684; // 0x10103a4
field public static final int listSelector = 16843003; // 0x10100fb
field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
field public static final int listViewStyle = 16842868; // 0x1010074
@@ -629,6 +670,8 @@ package android {
field public static final int minHeight = 16843072; // 0x1010140
field public static final int minLevel = 16843185; // 0x10101b1
field public static final int minLines = 16843094; // 0x1010156
+ field public static final int minResizeHeight = 16843670; // 0x1010396
+ field public static final int minResizeWidth = 16843669; // 0x1010395
field public static final int minSdkVersion = 16843276; // 0x101020c
field public static final int minWidth = 16843071; // 0x101013f
field public static final int mode = 16843134; // 0x101017e
@@ -644,6 +687,7 @@ package android {
field public static final int nextFocusUp = 16842979; // 0x10100e3
field public static final int noHistory = 16843309; // 0x101022d
field public static final int normalScreens = 16843397; // 0x1010285
+ field public static final int notificationTimeout = 16843651; // 0x1010383
field public static final int numColumns = 16843032; // 0x1010118
field public static final int numStars = 16843076; // 0x1010144
field public static final deprecated int numeric = 16843109; // 0x1010165
@@ -660,6 +704,8 @@ package android {
field public static final int overScrollFooter = 16843459; // 0x10102c3
field public static final int overScrollHeader = 16843458; // 0x10102c2
field public static final int overScrollMode = 16843457; // 0x10102c1
+ field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2
+ field public static final int packageNames = 16843649; // 0x1010381
field public static final int padding = 16842965; // 0x10100d5
field public static final int paddingBottom = 16842969; // 0x10100d9
field public static final int paddingLeft = 16842966; // 0x10100d6
@@ -713,6 +759,7 @@ package android {
field public static final int prompt = 16843131; // 0x101017b
field public static final int propertyName = 16843489; // 0x10102e1
field public static final int protectionLevel = 16842761; // 0x1010009
+ field public static final int publicKey = 16843686; // 0x10103a6
field public static final int queryActionMsg = 16843227; // 0x10101db
field public static final int queryAfterZeroResults = 16843394; // 0x1010282
field public static final int queryHint = 16843608; // 0x1010358
@@ -737,6 +784,8 @@ package android {
field public static final int reqNavigation = 16843306; // 0x101022a
field public static final int reqTouchScreen = 16843303; // 0x1010227
field public static final int required = 16843406; // 0x101028e
+ field public static final int requiresFadingEdge = 16843685; // 0x10103a5
+ field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364
field public static final int resizeMode = 16843619; // 0x1010363
field public static final int resizeable = 16843405; // 0x101028d
field public static final int resource = 16842789; // 0x1010025
@@ -748,9 +797,11 @@ package android {
field public static final int rotation = 16843558; // 0x1010326
field public static final int rotationX = 16843559; // 0x1010327
field public static final int rotationY = 16843560; // 0x1010328
+ field public static final int rowCount = 16843637; // 0x1010375
field public static final int rowDelay = 16843216; // 0x10101d0
field public static final int rowEdgeFlags = 16843329; // 0x1010241
field public static final int rowHeight = 16843058; // 0x1010132
+ field public static final int rowOrderPreserved = 16843638; // 0x1010376
field public static final int saveEnabled = 16842983; // 0x10100e7
field public static final int scaleGravity = 16843262; // 0x10101fe
field public static final int scaleHeight = 16843261; // 0x10101fd
@@ -837,11 +888,14 @@ package android {
field public static final int state_active = 16842914; // 0x10100a2
field public static final int state_checkable = 16842911; // 0x101009f
field public static final int state_checked = 16842912; // 0x10100a0
+ field public static final int state_drag_can_accept = 16843624; // 0x1010368
+ field public static final int state_drag_hovered = 16843625; // 0x1010369
field public static final int state_empty = 16842921; // 0x10100a9
field public static final int state_enabled = 16842910; // 0x101009e
field public static final int state_expanded = 16842920; // 0x10100a8
field public static final int state_first = 16842916; // 0x10100a4
field public static final int state_focused = 16842908; // 0x101009c
+ field public static final int state_hovered = 16843623; // 0x1010367
field public static final int state_last = 16842918; // 0x10100a6
field public static final int state_long_pressable = 16843324; // 0x101023c
field public static final int state_middle = 16842917; // 0x10100a5
@@ -852,11 +906,14 @@ package android {
field public static final int state_window_focused = 16842909; // 0x101009d
field public static final int staticWallpaperPreview = 16843569; // 0x1010331
field public static final int stepSize = 16843078; // 0x1010146
+ field public static final int stopWithTask = 16843626; // 0x101036a
field public static final int streamType = 16843273; // 0x1010209
field public static final int stretchColumns = 16843081; // 0x1010149
field public static final int stretchMode = 16843030; // 0x1010116
field public static final int subtitle = 16843473; // 0x10102d1
field public static final int subtitleTextStyle = 16843513; // 0x10102f9
+ field public static final int subtypeExtraValue = 16843674; // 0x101039a
+ field public static final int subtypeLocale = 16843673; // 0x1010399
field public static final int suggestActionMsg = 16843228; // 0x10101dc
field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd
field public static final int summary = 16843241; // 0x10101e9
@@ -864,6 +921,12 @@ package android {
field public static final int summaryOff = 16843248; // 0x10101f0
field public static final int summaryOn = 16843247; // 0x10101ef
field public static final int supportsUploading = 16843419; // 0x101029b
+ field public static final int switchMinWidth = 16843632; // 0x1010370
+ field public static final int switchPadding = 16843633; // 0x1010371
+ field public static final int switchPreferenceStyle = 16843629; // 0x101036d
+ field public static final int switchTextAppearance = 16843630; // 0x101036e
+ field public static final int switchTextOff = 16843628; // 0x101036c
+ field public static final int switchTextOn = 16843627; // 0x101036b
field public static final int syncable = 16842777; // 0x1010019
field public static final int tabStripEnabled = 16843453; // 0x10102bd
field public static final int tabStripLeft = 16843451; // 0x10102bb
@@ -872,6 +935,7 @@ package android {
field public static final int tag = 16842961; // 0x10100d1
field public static final int targetActivity = 16843266; // 0x1010202
field public static final int targetClass = 16842799; // 0x101002f
+ field public static final int targetDescriptions = 16843680; // 0x10103a0
field public static final int targetPackage = 16842785; // 0x1010021
field public static final int targetSdkVersion = 16843376; // 0x1010270
field public static final int taskAffinity = 16842770; // 0x1010012
@@ -886,12 +950,15 @@ package android {
field public static final int tension = 16843370; // 0x101026a
field public static final int testOnly = 16843378; // 0x1010272
field public static final int text = 16843087; // 0x101014f
+ field public static final int textAllCaps = 16843660; // 0x101038c
field public static final int textAppearance = 16842804; // 0x1010034
field public static final int textAppearanceButton = 16843271; // 0x1010207
field public static final int textAppearanceInverse = 16842805; // 0x1010035
field public static final int textAppearanceLarge = 16842816; // 0x1010040
field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
+ field public static final int textAppearanceListItem = 16843678; // 0x101039e
+ field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f
field public static final int textAppearanceMedium = 16842817; // 0x1010041
field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0
@@ -926,6 +993,7 @@ package android {
field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314
field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f
field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e
+ field public static final int textEditSuggestionItemLayout = 16843636; // 0x1010374
field public static final int textFilterEnabled = 16843007; // 0x10100ff
field public static final int textIsSelectable = 16843542; // 0x1010316
field public static final int textOff = 16843045; // 0x1010125
@@ -937,12 +1005,14 @@ package android {
field public static final int textSelectHandleWindowStyle = 16843464; // 0x10102c8
field public static final int textSize = 16842901; // 0x1010095
field public static final int textStyle = 16842903; // 0x1010097
+ field public static final int textSuggestionsWindowStyle = 16843635; // 0x1010373
field public static final int textViewStyle = 16842884; // 0x1010084
field public static final int theme = 16842752; // 0x1010000
field public static final int thickness = 16843360; // 0x1010260
field public static final int thicknessRatio = 16843164; // 0x101019c
field public static final int thumb = 16843074; // 0x1010142
field public static final int thumbOffset = 16843075; // 0x1010143
+ field public static final int thumbTextPadding = 16843634; // 0x1010372
field public static final int thumbnail = 16843429; // 0x10102a5
field public static final int tileMode = 16843265; // 0x1010201
field public static final int tint = 16843041; // 0x1010121
@@ -961,6 +1031,7 @@ package android {
field public static final int topLeftRadius = 16843177; // 0x10101a9
field public static final int topOffset = 16843352; // 0x1010258
field public static final int topRightRadius = 16843178; // 0x10101aa
+ field public static final int track = 16843631; // 0x101036f
field public static final int transcriptMode = 16843008; // 0x1010100
field public static final int transformPivotX = 16843552; // 0x1010320
field public static final int transformPivotY = 16843553; // 0x1010321
@@ -968,10 +1039,12 @@ package android {
field public static final int translationY = 16843555; // 0x1010323
field public static final int type = 16843169; // 0x10101a1
field public static final int typeface = 16842902; // 0x1010096
+ field public static final int uiOptions = 16843672; // 0x1010398
field public static final int uncertainGestureColor = 16843382; // 0x1010276
field public static final int unfocusedMonthDateColor = 16843588; // 0x1010344
field public static final int unselectedAlpha = 16843278; // 0x101020e
field public static final int updatePeriodMillis = 16843344; // 0x1010250
+ field public static final int useDefaultMargins = 16843641; // 0x1010379
field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
field public static final int useLevel = 16843167; // 0x101019f
field public static final int userVisible = 16843409; // 0x1010291
@@ -1055,6 +1128,16 @@ package android {
field public static final int background_light = 17170447; // 0x106000f
field public static final int black = 17170444; // 0x106000c
field public static final int darker_gray = 17170432; // 0x1060000
+ field public static final int holo_blue_bright = 17170459; // 0x106001b
+ field public static final int holo_blue_dark = 17170451; // 0x1060013
+ field public static final int holo_blue_light = 17170450; // 0x1060012
+ field public static final int holo_green_dark = 17170453; // 0x1060015
+ field public static final int holo_green_light = 17170452; // 0x1060014
+ field public static final int holo_orange_dark = 17170457; // 0x1060019
+ field public static final int holo_orange_light = 17170456; // 0x1060018
+ field public static final int holo_purple = 17170458; // 0x106001a
+ field public static final int holo_red_dark = 17170455; // 0x1060017
+ field public static final int holo_red_light = 17170454; // 0x1060016
field public static final int primary_text_dark = 17170433; // 0x1060001
field public static final int primary_text_dark_nodisable = 17170434; // 0x1060002
field public static final int primary_text_light = 17170435; // 0x1060003
@@ -1319,6 +1402,7 @@ package android {
field public static final int config_longAnimTime = 17694722; // 0x10e0002
field public static final int config_mediumAnimTime = 17694721; // 0x10e0001
field public static final int config_shortAnimTime = 17694720; // 0x10e0000
+ field public static final int status_bar_notification_info_maxnum = 17694723; // 0x10e0003
}
public static final class R.interpolator {
@@ -1405,6 +1489,7 @@ package android {
field public static final int search_go = 17039372; // 0x104000c
field public static final int selectAll = 17039373; // 0x104000d
field public static final int selectTextMode = 17039382; // 0x1040016
+ field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017
field public static final int unknownName = 17039374; // 0x104000e
field public static final int untitled = 17039375; // 0x104000f
field public static final int yes = 17039379; // 0x1040013
@@ -1418,6 +1503,12 @@ package android {
field public static final int Animation_InputMethod = 16973910; // 0x1030056
field public static final int Animation_Toast = 16973828; // 0x1030004
field public static final int Animation_Translucent = 16973827; // 0x1030003
+ field public static final int DeviceDefault_ButtonBar = 16974287; // 0x10301cf
+ field public static final int DeviceDefault_ButtonBar_AlertDialog = 16974288; // 0x10301d0
+ field public static final int DeviceDefault_Light_ButtonBar = 16974290; // 0x10301d2
+ field public static final int DeviceDefault_Light_ButtonBar_AlertDialog = 16974291; // 0x10301d3
+ field public static final int DeviceDefault_Light_SegmentedButton = 16974292; // 0x10301d4
+ field public static final int DeviceDefault_SegmentedButton = 16974289; // 0x10301d1
field public static final int Holo_ButtonBar = 16974053; // 0x10300e5
field public static final int Holo_ButtonBar_AlertDialog = 16974055; // 0x10300e7
field public static final int Holo_Light_ButtonBar = 16974054; // 0x10300e6
@@ -1432,7 +1523,75 @@ package android {
field public static final int MediaButton_Previous = 16973880; // 0x1030038
field public static final int MediaButton_Rew = 16973884; // 0x103003c
field public static final int TextAppearance = 16973886; // 0x103003e
+ field public static final int TextAppearance_DeviceDefault = 16974253; // 0x10301ad
+ field public static final int TextAppearance_DeviceDefault_DialogWindowTitle = 16974264; // 0x10301b8
+ field public static final int TextAppearance_DeviceDefault_Inverse = 16974254; // 0x10301ae
+ field public static final int TextAppearance_DeviceDefault_Large = 16974255; // 0x10301af
+ field public static final int TextAppearance_DeviceDefault_Large_Inverse = 16974256; // 0x10301b0
+ field public static final int TextAppearance_DeviceDefault_Medium = 16974257; // 0x10301b1
+ field public static final int TextAppearance_DeviceDefault_Medium_Inverse = 16974258; // 0x10301b2
+ field public static final int TextAppearance_DeviceDefault_SearchResult_Subtitle = 16974262; // 0x10301b6
+ field public static final int TextAppearance_DeviceDefault_SearchResult_Title = 16974261; // 0x10301b5
+ field public static final int TextAppearance_DeviceDefault_Small = 16974259; // 0x10301b3
+ field public static final int TextAppearance_DeviceDefault_Small_Inverse = 16974260; // 0x10301b4
+ field public static final int TextAppearance_DeviceDefault_Widget = 16974265; // 0x10301b9
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Menu = 16974286; // 0x10301ce
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle = 16974279; // 0x10301c7
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title = 16974278; // 0x10301c6
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle = 16974281; // 0x10301c9
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title = 16974280; // 0x10301c8
+ field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc
+ field public static final int TextAppearance_DeviceDefault_Widget_Button = 16974266; // 0x10301ba
+ field public static final int TextAppearance_DeviceDefault_Widget_DropDownHint = 16974271; // 0x10301bf
+ field public static final int TextAppearance_DeviceDefault_Widget_DropDownItem = 16974272; // 0x10301c0
+ field public static final int TextAppearance_DeviceDefault_Widget_EditText = 16974274; // 0x10301c2
+ field public static final int TextAppearance_DeviceDefault_Widget_IconMenu_Item = 16974267; // 0x10301bb
+ field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu = 16974275; // 0x10301c3
+ field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Large = 16974276; // 0x10301c4
+ field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Small = 16974277; // 0x10301c5
+ field public static final int TextAppearance_DeviceDefault_Widget_TabWidget = 16974268; // 0x10301bc
+ field public static final int TextAppearance_DeviceDefault_Widget_TextView = 16974269; // 0x10301bd
+ field public static final int TextAppearance_DeviceDefault_Widget_TextView_PopupMenu = 16974270; // 0x10301be
+ field public static final int TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem = 16974273; // 0x10301c1
+ field public static final int TextAppearance_DeviceDefault_WindowTitle = 16974263; // 0x10301b7
field public static final int TextAppearance_DialogWindowTitle = 16973889; // 0x1030041
+ field public static final int TextAppearance_Holo = 16974075; // 0x10300fb
+ field public static final int TextAppearance_Holo_DialogWindowTitle = 16974103; // 0x1030117
+ field public static final int TextAppearance_Holo_Inverse = 16974076; // 0x10300fc
+ field public static final int TextAppearance_Holo_Large = 16974077; // 0x10300fd
+ field public static final int TextAppearance_Holo_Large_Inverse = 16974078; // 0x10300fe
+ field public static final int TextAppearance_Holo_Medium = 16974079; // 0x10300ff
+ field public static final int TextAppearance_Holo_Medium_Inverse = 16974080; // 0x1030100
+ field public static final int TextAppearance_Holo_SearchResult_Subtitle = 16974084; // 0x1030104
+ field public static final int TextAppearance_Holo_SearchResult_Title = 16974083; // 0x1030103
+ field public static final int TextAppearance_Holo_Small = 16974081; // 0x1030101
+ field public static final int TextAppearance_Holo_Small_Inverse = 16974082; // 0x1030102
+ field public static final int TextAppearance_Holo_Widget = 16974085; // 0x1030105
+ field public static final int TextAppearance_Holo_Widget_ActionBar_Menu = 16974112; // 0x1030120
+ field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle = 16974099; // 0x1030113
+ field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse = 16974109; // 0x103011d
+ field public static final int TextAppearance_Holo_Widget_ActionBar_Title = 16974098; // 0x1030112
+ field public static final int TextAppearance_Holo_Widget_ActionBar_Title_Inverse = 16974108; // 0x103011c
+ field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle = 16974101; // 0x1030115
+ field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse = 16974111; // 0x103011f
+ field public static final int TextAppearance_Holo_Widget_ActionMode_Title = 16974100; // 0x1030114
+ field public static final int TextAppearance_Holo_Widget_ActionMode_Title_Inverse = 16974110; // 0x103011e
+ field public static final int TextAppearance_Holo_Widget_Button = 16974086; // 0x1030106
+ field public static final int TextAppearance_Holo_Widget_DropDownHint = 16974091; // 0x103010b
+ field public static final int TextAppearance_Holo_Widget_DropDownItem = 16974092; // 0x103010c
+ field public static final int TextAppearance_Holo_Widget_EditText = 16974094; // 0x103010e
+ field public static final int TextAppearance_Holo_Widget_IconMenu_Item = 16974087; // 0x1030107
+ field public static final int TextAppearance_Holo_Widget_PopupMenu = 16974095; // 0x103010f
+ field public static final int TextAppearance_Holo_Widget_PopupMenu_Large = 16974096; // 0x1030110
+ field public static final int TextAppearance_Holo_Widget_PopupMenu_Small = 16974097; // 0x1030111
+ field public static final int TextAppearance_Holo_Widget_TabWidget = 16974088; // 0x1030108
+ field public static final int TextAppearance_Holo_Widget_TextView = 16974089; // 0x1030109
+ field public static final int TextAppearance_Holo_Widget_TextView_PopupMenu = 16974090; // 0x103010a
+ field public static final int TextAppearance_Holo_Widget_TextView_SpinnerItem = 16974093; // 0x103010d
+ field public static final int TextAppearance_Holo_WindowTitle = 16974102; // 0x1030116
field public static final int TextAppearance_Inverse = 16973887; // 0x103003f
field public static final int TextAppearance_Large = 16973890; // 0x1030042
field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043
@@ -1444,6 +1603,7 @@ package android {
field public static final int TextAppearance_StatusBar_EventContent_Title = 16973928; // 0x1030068
field public static final int TextAppearance_StatusBar_Icon = 16973926; // 0x1030066
field public static final int TextAppearance_StatusBar_Title = 16973925; // 0x1030065
+ field public static final int TextAppearance_SuggestionHighlight = 16974104; // 0x1030118
field public static final int TextAppearance_Theme = 16973888; // 0x1030040
field public static final int TextAppearance_Theme_Dialog = 16973896; // 0x1030048
field public static final int TextAppearance_Widget = 16973897; // 0x1030049
@@ -1463,6 +1623,30 @@ package android {
field public static final int Theme_Black = 16973832; // 0x1030008
field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a
+ field public static final int Theme_DeviceDefault = 16974120; // 0x1030128
+ field public static final int Theme_DeviceDefault_Dialog = 16974126; // 0x103012e
+ field public static final int Theme_DeviceDefault_DialogWhenLarge = 16974134; // 0x1030136
+ field public static final int Theme_DeviceDefault_DialogWhenLarge_NoActionBar = 16974135; // 0x1030137
+ field public static final int Theme_DeviceDefault_Dialog_MinWidth = 16974127; // 0x103012f
+ field public static final int Theme_DeviceDefault_Dialog_NoActionBar = 16974128; // 0x1030130
+ field public static final int Theme_DeviceDefault_Dialog_NoActionBar_MinWidth = 16974129; // 0x1030131
+ field public static final int Theme_DeviceDefault_InputMethod = 16974142; // 0x103013e
+ field public static final int Theme_DeviceDefault_Light = 16974123; // 0x103012b
+ field public static final int Theme_DeviceDefault_Light_DarkActionBar = 16974143; // 0x103013f
+ field public static final int Theme_DeviceDefault_Light_Dialog = 16974130; // 0x1030132
+ field public static final int Theme_DeviceDefault_Light_DialogWhenLarge = 16974136; // 0x1030138
+ field public static final int Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar = 16974137; // 0x1030139
+ field public static final int Theme_DeviceDefault_Light_Dialog_MinWidth = 16974131; // 0x1030133
+ field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar = 16974132; // 0x1030134
+ field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth = 16974133; // 0x1030135
+ field public static final int Theme_DeviceDefault_Light_NoActionBar = 16974124; // 0x103012c
+ field public static final int Theme_DeviceDefault_Light_NoActionBar_Fullscreen = 16974125; // 0x103012d
+ field public static final int Theme_DeviceDefault_Light_Panel = 16974139; // 0x103013b
+ field public static final int Theme_DeviceDefault_NoActionBar = 16974121; // 0x1030129
+ field public static final int Theme_DeviceDefault_NoActionBar_Fullscreen = 16974122; // 0x103012a
+ field public static final int Theme_DeviceDefault_Panel = 16974138; // 0x103013a
+ field public static final int Theme_DeviceDefault_Wallpaper = 16974140; // 0x103013c
+ field public static final int Theme_DeviceDefault_Wallpaper_NoTitleBar = 16974141; // 0x103013d
field public static final int Theme_Dialog = 16973835; // 0x103000b
field public static final int Theme_Holo = 16973931; // 0x103006b
field public static final int Theme_Holo_Dialog = 16973935; // 0x103006f
@@ -1473,12 +1657,15 @@ package android {
field public static final int Theme_Holo_Dialog_NoActionBar_MinWidth = 16973938; // 0x1030072
field public static final int Theme_Holo_InputMethod = 16973951; // 0x103007f
field public static final int Theme_Holo_Light = 16973934; // 0x103006e
+ field public static final int Theme_Holo_Light_DarkActionBar = 16974105; // 0x1030119
field public static final int Theme_Holo_Light_Dialog = 16973939; // 0x1030073
field public static final int Theme_Holo_Light_DialogWhenLarge = 16973945; // 0x1030079
field public static final int Theme_Holo_Light_DialogWhenLarge_NoActionBar = 16973946; // 0x103007a
field public static final int Theme_Holo_Light_Dialog_MinWidth = 16973940; // 0x1030074
field public static final int Theme_Holo_Light_Dialog_NoActionBar = 16973941; // 0x1030075
field public static final int Theme_Holo_Light_Dialog_NoActionBar_MinWidth = 16973942; // 0x1030076
+ field public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0
+ field public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1
field public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c
field public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c
field public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d
@@ -1507,6 +1694,9 @@ package android {
field public static final int Widget = 16973842; // 0x1030012
field public static final int Widget_AbsListView = 16973843; // 0x1030013
field public static final int Widget_ActionBar = 16973954; // 0x1030082
+ field public static final int Widget_ActionBar_TabBar = 16974068; // 0x10300f4
+ field public static final int Widget_ActionBar_TabText = 16974067; // 0x10300f3
+ field public static final int Widget_ActionBar_TabView = 16974066; // 0x10300f2
field public static final int Widget_ActionButton = 16973956; // 0x1030084
field public static final int Widget_ActionButton_CloseMode = 16973960; // 0x1030088
field public static final int Widget_ActionButton_Overflow = 16973959; // 0x1030087
@@ -1521,6 +1711,115 @@ package android {
field public static final int Widget_CompoundButton_RadioButton = 16973850; // 0x103001a
field public static final int Widget_CompoundButton_Star = 16973851; // 0x103001b
field public static final int Widget_DatePicker = 16974062; // 0x10300ee
+ field public static final int Widget_DeviceDefault = 16974144; // 0x1030140
+ field public static final int Widget_DeviceDefault_ActionBar = 16974187; // 0x103016b
+ field public static final int Widget_DeviceDefault_ActionBar_Solid = 16974195; // 0x1030173
+ field public static final int Widget_DeviceDefault_ActionBar_TabBar = 16974194; // 0x1030172
+ field public static final int Widget_DeviceDefault_ActionBar_TabText = 16974193; // 0x1030171
+ field public static final int Widget_DeviceDefault_ActionBar_TabView = 16974192; // 0x1030170
+ field public static final int Widget_DeviceDefault_ActionButton = 16974182; // 0x1030166
+ field public static final int Widget_DeviceDefault_ActionButton_CloseMode = 16974186; // 0x103016a
+ field public static final int Widget_DeviceDefault_ActionButton_Overflow = 16974183; // 0x1030167
+ field public static final int Widget_DeviceDefault_ActionButton_TextButton = 16974184; // 0x1030168
+ field public static final int Widget_DeviceDefault_ActionMode = 16974185; // 0x1030169
+ field public static final int Widget_DeviceDefault_AutoCompleteTextView = 16974151; // 0x1030147
+ field public static final int Widget_DeviceDefault_Button = 16974145; // 0x1030141
+ field public static final int Widget_DeviceDefault_Button_Borderless = 16974188; // 0x103016c
+ field public static final int Widget_DeviceDefault_Button_Borderless_Small = 16974149; // 0x1030145
+ field public static final int Widget_DeviceDefault_Button_Inset = 16974147; // 0x1030143
+ field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142
+ field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144
+ field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e
+ field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148
+ field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159
+ field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d
+ field public static final int Widget_DeviceDefault_DatePicker = 16974191; // 0x103016f
+ field public static final int Widget_DeviceDefault_DropDownItem = 16974177; // 0x1030161
+ field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162
+ field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a
+ field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b
+ field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c
+ field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b
+ field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d
+ field public static final int Widget_DeviceDefault_Light = 16974196; // 0x1030174
+ field public static final int Widget_DeviceDefault_Light_ActionBar = 16974243; // 0x10301a3
+ field public static final int Widget_DeviceDefault_Light_ActionBar_Solid = 16974247; // 0x10301a7
+ field public static final int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar = 16974246; // 0x10301a6
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabText = 16974245; // 0x10301a5
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabView = 16974244; // 0x10301a4
+ field public static final int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa
+ field public static final int Widget_DeviceDefault_Light_ActionButton = 16974239; // 0x103019f
+ field public static final int Widget_DeviceDefault_Light_ActionButton_CloseMode = 16974242; // 0x10301a2
+ field public static final int Widget_DeviceDefault_Light_ActionButton_Overflow = 16974240; // 0x10301a0
+ field public static final int Widget_DeviceDefault_Light_ActionMode = 16974241; // 0x10301a1
+ field public static final int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac
+ field public static final int Widget_DeviceDefault_Light_AutoCompleteTextView = 16974203; // 0x103017b
+ field public static final int Widget_DeviceDefault_Light_Button = 16974197; // 0x1030175
+ field public static final int Widget_DeviceDefault_Light_Button_Borderless_Small = 16974201; // 0x1030179
+ field public static final int Widget_DeviceDefault_Light_Button_Inset = 16974199; // 0x1030177
+ field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176
+ field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178
+ field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e
+ field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c
+ field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190
+ field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194
+ field public static final int Widget_DeviceDefault_Light_DropDownItem = 16974232; // 0x1030198
+ field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199
+ field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e
+ field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f
+ field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180
+ field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192
+ field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181
+ field public static final int Widget_DeviceDefault_Light_ListPopupWindow = 16974235; // 0x103019b
+ field public static final int Widget_DeviceDefault_Light_ListView = 16974210; // 0x1030182
+ field public static final int Widget_DeviceDefault_Light_ListView_DropDown = 16974205; // 0x103017d
+ field public static final int Widget_DeviceDefault_Light_PopupMenu = 16974236; // 0x103019c
+ field public static final int Widget_DeviceDefault_Light_PopupWindow = 16974211; // 0x1030183
+ field public static final int Widget_DeviceDefault_Light_ProgressBar = 16974212; // 0x1030184
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Horizontal = 16974213; // 0x1030185
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Inverse = 16974217; // 0x1030189
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Large = 16974216; // 0x1030188
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Large_Inverse = 16974219; // 0x103018b
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Small = 16974214; // 0x1030186
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Inverse = 16974218; // 0x103018a
+ field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Title = 16974215; // 0x1030187
+ field public static final int Widget_DeviceDefault_Light_RatingBar = 16974221; // 0x103018d
+ field public static final int Widget_DeviceDefault_Light_RatingBar_Indicator = 16974222; // 0x103018e
+ field public static final int Widget_DeviceDefault_Light_RatingBar_Small = 16974223; // 0x103018f
+ field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191
+ field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c
+ field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193
+ field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d
+ field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195
+ field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a
+ field public static final int Widget_DeviceDefault_Light_TextView_SpinnerItem = 16974234; // 0x103019a
+ field public static final int Widget_DeviceDefault_Light_WebTextView = 16974230; // 0x1030196
+ field public static final int Widget_DeviceDefault_Light_WebView = 16974231; // 0x1030197
+ field public static final int Widget_DeviceDefault_ListPopupWindow = 16974180; // 0x1030164
+ field public static final int Widget_DeviceDefault_ListView = 16974158; // 0x103014e
+ field public static final int Widget_DeviceDefault_ListView_DropDown = 16974153; // 0x1030149
+ field public static final int Widget_DeviceDefault_PopupMenu = 16974181; // 0x1030165
+ field public static final int Widget_DeviceDefault_PopupWindow = 16974159; // 0x103014f
+ field public static final int Widget_DeviceDefault_ProgressBar = 16974160; // 0x1030150
+ field public static final int Widget_DeviceDefault_ProgressBar_Horizontal = 16974161; // 0x1030151
+ field public static final int Widget_DeviceDefault_ProgressBar_Large = 16974164; // 0x1030154
+ field public static final int Widget_DeviceDefault_ProgressBar_Small = 16974162; // 0x1030152
+ field public static final int Widget_DeviceDefault_ProgressBar_Small_Title = 16974163; // 0x1030153
+ field public static final int Widget_DeviceDefault_RatingBar = 16974166; // 0x1030156
+ field public static final int Widget_DeviceDefault_RatingBar_Indicator = 16974167; // 0x1030157
+ field public static final int Widget_DeviceDefault_RatingBar_Small = 16974168; // 0x1030158
+ field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a
+ field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155
+ field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c
+ field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d
+ field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e
+ field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146
+ field public static final int Widget_DeviceDefault_TextView_SpinnerItem = 16974179; // 0x1030163
+ field public static final int Widget_DeviceDefault_WebTextView = 16974175; // 0x103015f
+ field public static final int Widget_DeviceDefault_WebView = 16974176; // 0x1030160
field public static final int Widget_DropDownItem = 16973867; // 0x103002b
field public static final int Widget_DropDownItem_Spinner = 16973868; // 0x103002c
field public static final int Widget_EditText = 16973859; // 0x1030023
@@ -1530,6 +1829,10 @@ package android {
field public static final int Widget_GridView = 16973874; // 0x1030032
field public static final int Widget_Holo = 16973962; // 0x103008a
field public static final int Widget_Holo_ActionBar = 16974004; // 0x10300b4
+ field public static final int Widget_Holo_ActionBar_Solid = 16974113; // 0x1030121
+ field public static final int Widget_Holo_ActionBar_TabBar = 16974071; // 0x10300f7
+ field public static final int Widget_Holo_ActionBar_TabText = 16974070; // 0x10300f6
+ field public static final int Widget_Holo_ActionBar_TabView = 16974069; // 0x10300f5
field public static final int Widget_Holo_ActionButton = 16973999; // 0x10300af
field public static final int Widget_Holo_ActionButton_CloseMode = 16974003; // 0x10300b3
field public static final int Widget_Holo_ActionButton_Overflow = 16974000; // 0x10300b0
@@ -1538,6 +1841,7 @@ package android {
field public static final int Widget_Holo_AutoCompleteTextView = 16973968; // 0x1030090
field public static final int Widget_Holo_Button = 16973963; // 0x103008b
field public static final int Widget_Holo_Button_Borderless = 16974050; // 0x10300e2
+ field public static final int Widget_Holo_Button_Borderless_Small = 16974106; // 0x103011a
field public static final int Widget_Holo_Button_Inset = 16973965; // 0x103008d
field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c
field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e
@@ -1555,12 +1859,22 @@ package android {
field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
field public static final int Widget_Holo_Light = 16974005; // 0x10300b5
field public static final int Widget_Holo_Light_ActionBar = 16974049; // 0x10300e1
+ field public static final int Widget_Holo_Light_ActionBar_Solid = 16974114; // 0x1030122
+ field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974115; // 0x1030123
+ field public static final int Widget_Holo_Light_ActionBar_TabBar = 16974074; // 0x10300fa
+ field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974116; // 0x1030124
+ field public static final int Widget_Holo_Light_ActionBar_TabText = 16974073; // 0x10300f9
+ field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974118; // 0x1030126
+ field public static final int Widget_Holo_Light_ActionBar_TabView = 16974072; // 0x10300f8
+ field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974117; // 0x1030125
field public static final int Widget_Holo_Light_ActionButton = 16974045; // 0x10300dd
field public static final int Widget_Holo_Light_ActionButton_CloseMode = 16974048; // 0x10300e0
field public static final int Widget_Holo_Light_ActionButton_Overflow = 16974046; // 0x10300de
field public static final int Widget_Holo_Light_ActionMode = 16974047; // 0x10300df
+ field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
+ field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b
field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8
field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9
@@ -1667,14 +1981,23 @@ package android.accessibilityservice {
method protected void onServiceConnected();
method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
field public static final java.lang.String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService";
+ field public static final java.lang.String SERVICE_META_DATA = "android.accessibilityservice";
}
public class AccessibilityServiceInfo implements android.os.Parcelable {
ctor public AccessibilityServiceInfo();
method public int describeContents();
+ method public static java.lang.String feedbackTypeToString(int);
+ method public static java.lang.String flagToString(int);
+ method public boolean getCanRetrieveWindowContent();
+ method public java.lang.String getDescription();
+ method public java.lang.String getId();
+ method public android.content.pm.ResolveInfo getResolveInfo();
+ method public java.lang.String getSettingsActivityName();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int DEFAULT = 1; // 0x1
+ field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
field public static final int FEEDBACK_AUDIBLE = 4; // 0x4
field public static final int FEEDBACK_GENERIC = 16; // 0x10
field public static final int FEEDBACK_HAPTIC = 2; // 0x2
@@ -1742,13 +2065,15 @@ package android.accounts {
method public android.accounts.Account[] getAccountsByType(java.lang.String);
method public android.accounts.AccountManagerFuture<android.accounts.Account[]> getAccountsByTypeAndFeatures(java.lang.String, java.lang.String[], android.accounts.AccountManagerCallback<android.accounts.Account[]>, android.os.Handler);
method public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
- method public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+ method public deprecated android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, java.lang.String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+ method public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, java.lang.String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthTokenByFeatures(java.lang.String, java.lang.String, java.lang.String[], android.app.Activity, android.os.Bundle, android.os.Bundle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public android.accounts.AuthenticatorDescription[] getAuthenticatorTypes();
method public java.lang.String getPassword(android.accounts.Account);
method public java.lang.String getUserData(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void invalidateAuthToken(java.lang.String, java.lang.String);
+ method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener);
@@ -1771,6 +2096,7 @@ package android.accounts {
field public static final java.lang.String KEY_ACCOUNT_MANAGER_RESPONSE = "accountManagerResponse";
field public static final java.lang.String KEY_ACCOUNT_NAME = "authAccount";
field public static final java.lang.String KEY_ACCOUNT_TYPE = "accountType";
+ field public static final java.lang.String KEY_ANDROID_PACKAGE_NAME = "androidPackageName";
field public static final java.lang.String KEY_AUTHENTICATOR_TYPES = "authenticator_types";
field public static final java.lang.String KEY_AUTHTOKEN = "authtoken";
field public static final java.lang.String KEY_AUTH_FAILED_MESSAGE = "authFailedMessage";
@@ -1860,6 +2186,7 @@ package android.animation {
method public java.util.ArrayList<android.animation.Animator.AnimatorListener> getListeners();
method public abstract long getStartDelay();
method public abstract boolean isRunning();
+ method public boolean isStarted();
method public void removeAllListeners();
method public void removeListener(android.animation.Animator.AnimatorListener);
method public abstract android.animation.Animator setDuration(long);
@@ -1963,6 +2290,7 @@ package android.animation {
method public boolean isRunning();
method public void removeChild(android.view.ViewGroup, android.view.View);
method public void removeTransitionListener(android.animation.LayoutTransition.TransitionListener);
+ method public void setAnimateParentHierarchy(boolean);
method public void setAnimator(int, android.animation.Animator);
method public void setDuration(long);
method public void setDuration(int, long);
@@ -1986,9 +2314,13 @@ package android.animation {
method public java.lang.String getPropertyName();
method public java.lang.Object getTarget();
method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...);
+ method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...);
+ method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
+ method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
+ method public void setProperty(android.util.Property);
method public void setPropertyName(java.lang.String);
}
@@ -1996,14 +2328,19 @@ package android.animation {
method public android.animation.PropertyValuesHolder clone();
method public java.lang.String getPropertyName();
method public static android.animation.PropertyValuesHolder ofFloat(java.lang.String, float...);
+ method public static android.animation.PropertyValuesHolder ofFloat(android.util.Property<?, java.lang.Float>, float...);
method public static android.animation.PropertyValuesHolder ofInt(java.lang.String, int...);
+ method public static android.animation.PropertyValuesHolder ofInt(android.util.Property<?, java.lang.Integer>, int...);
method public static android.animation.PropertyValuesHolder ofKeyframe(java.lang.String, android.animation.Keyframe...);
+ method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
+ method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
method public void setEvaluator(android.animation.TypeEvaluator);
method public void setFloatValues(float...);
method public void setIntValues(int...);
method public void setKeyframes(android.animation.Keyframe...);
method public void setObjectValues(java.lang.Object...);
+ method public void setProperty(android.util.Property);
method public void setPropertyName(java.lang.String);
}
@@ -2079,6 +2416,7 @@ package android.app {
method public abstract java.lang.CharSequence getSubtitle();
method public abstract android.app.ActionBar.Tab getTabAt(int);
method public abstract int getTabCount();
+ method public android.content.Context getThemedContext();
method public abstract java.lang.CharSequence getTitle();
method public abstract void hide();
method public abstract boolean isShowing();
@@ -2099,9 +2437,16 @@ package android.app {
method public abstract void setDisplayShowHomeEnabled(boolean);
method public abstract void setDisplayShowTitleEnabled(boolean);
method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable);
method public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener);
+ method public abstract void setLogo(int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable);
method public abstract void setNavigationMode(int);
method public abstract void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
method public abstract void setSubtitle(java.lang.CharSequence);
method public abstract void setSubtitle(int);
method public abstract void setTitle(java.lang.CharSequence);
@@ -2137,12 +2482,15 @@ package android.app {
public static abstract class ActionBar.Tab {
ctor public ActionBar.Tab();
+ method public abstract java.lang.CharSequence getContentDescription();
method public abstract android.view.View getCustomView();
method public abstract android.graphics.drawable.Drawable getIcon();
method public abstract int getPosition();
method public abstract java.lang.Object getTag();
method public abstract java.lang.CharSequence getText();
method public abstract void select();
+ method public abstract android.app.ActionBar.Tab setContentDescription(int);
+ method public abstract android.app.ActionBar.Tab setContentDescription(java.lang.CharSequence);
method public abstract android.app.ActionBar.Tab setCustomView(android.view.View);
method public abstract android.app.ActionBar.Tab setCustomView(int);
method public abstract android.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
@@ -2160,13 +2508,13 @@ package android.app {
method public abstract void onTabUnselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
}
- public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+ public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
ctor public Activity();
method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
method public void closeContextMenu();
method public void closeOptionsMenu();
method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
- method public final void dismissDialog(int);
+ method public final deprecated void dismissDialog(int);
method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
method public boolean dispatchKeyEvent(android.view.KeyEvent);
method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
@@ -2188,7 +2536,7 @@ package android.app {
method public android.view.View getCurrentFocus();
method public android.app.FragmentManager getFragmentManager();
method public android.content.Intent getIntent();
- method public java.lang.Object getLastNonConfigurationInstance();
+ method public deprecated java.lang.Object getLastNonConfigurationInstance();
method public android.view.LayoutInflater getLayoutInflater();
method public android.app.LoaderManager getLoaderManager();
method public java.lang.String getLocalClassName();
@@ -2225,7 +2573,7 @@ package android.app {
method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
method public java.lang.CharSequence onCreateDescription();
method protected deprecated android.app.Dialog onCreateDialog(int);
- method protected android.app.Dialog onCreateDialog(int, android.os.Bundle);
+ method protected deprecated android.app.Dialog onCreateDialog(int, android.os.Bundle);
method public boolean onCreateOptionsMenu(android.view.Menu);
method public boolean onCreatePanelMenu(int, android.view.Menu);
method public android.view.View onCreatePanelView(int);
@@ -2251,13 +2599,13 @@ package android.app {
method protected void onPostCreate(android.os.Bundle);
method protected void onPostResume();
method protected deprecated void onPrepareDialog(int, android.app.Dialog);
- method protected void onPrepareDialog(int, android.app.Dialog, android.os.Bundle);
+ method protected deprecated void onPrepareDialog(int, android.app.Dialog, android.os.Bundle);
method public boolean onPrepareOptionsMenu(android.view.Menu);
method public boolean onPreparePanel(int, android.view.View, android.view.Menu);
method protected void onRestart();
method protected void onRestoreInstanceState(android.os.Bundle);
method protected void onResume();
- method public java.lang.Object onRetainNonConfigurationInstance();
+ method public deprecated java.lang.Object onRetainNonConfigurationInstance();
method protected void onSaveInstanceState(android.os.Bundle);
method public boolean onSearchRequested();
method protected void onStart();
@@ -2265,6 +2613,7 @@ package android.app {
method protected void onTitleChanged(java.lang.CharSequence, int);
method public boolean onTouchEvent(android.view.MotionEvent);
method public boolean onTrackballEvent(android.view.MotionEvent);
+ method public void onTrimMemory(int);
method public void onUserInteraction();
method protected void onUserLeaveHint();
method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
@@ -2275,7 +2624,7 @@ package android.app {
method public void overridePendingTransition(int, int);
method public void recreate();
method public void registerForContextMenu(android.view.View);
- method public final void removeDialog(int);
+ method public final deprecated void removeDialog(int);
method public final boolean requestWindowFeature(int);
method public final void runOnUiThread(java.lang.Runnable);
method public void setContentView(int);
@@ -2301,8 +2650,8 @@ package android.app {
method public void setTitleColor(int);
method public void setVisible(boolean);
method public final void setVolumeControlStream(int);
- method public final void showDialog(int);
- method public final boolean showDialog(int, android.os.Bundle);
+ method public final deprecated void showDialog(int);
+ method public final deprecated boolean showDialog(int, android.os.Bundle);
method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
method public void startActivityForResult(android.content.Intent, int);
method public void startActivityFromChild(android.app.Activity, android.content.Intent, int);
@@ -2328,7 +2677,7 @@ package android.app {
field public static final int RESULT_OK = -1; // 0xffffffff
}
- public class ActivityGroup extends android.app.Activity {
+ public deprecated class ActivityGroup extends android.app.Activity {
ctor public ActivityGroup();
ctor public ActivityGroup(boolean);
method public android.app.Activity getCurrentActivity();
@@ -2512,6 +2861,8 @@ package android.app {
method public void setMessage(java.lang.CharSequence);
method public void setView(android.view.View);
method public void setView(android.view.View, int, int, int, int);
+ field public static final int THEME_DEVICE_DEFAULT_DARK = 4; // 0x4
+ field public static final int THEME_DEVICE_DEFAULT_LIGHT = 5; // 0x5
field public static final int THEME_HOLO_DARK = 2; // 0x2
field public static final int THEME_HOLO_LIGHT = 3; // 0x3
field public static final int THEME_TRADITIONAL = 1; // 0x1
@@ -2560,12 +2911,95 @@ package android.app {
ctor public AliasActivity();
}
- public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks {
+ public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
ctor public Application();
method public void onConfigurationChanged(android.content.res.Configuration);
method public void onCreate();
method public void onLowMemory();
method public void onTerminate();
+ method public void onTrimMemory(int);
+ method public void registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+ method public void unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+ }
+
+ public static abstract interface Application.ActivityLifecycleCallbacks {
+ method public abstract void onActivityCreated(android.app.Activity, android.os.Bundle);
+ method public abstract void onActivityDestroyed(android.app.Activity);
+ method public abstract void onActivityPaused(android.app.Activity);
+ method public abstract void onActivityResumed(android.app.Activity);
+ method public abstract void onActivitySaveInstanceState(android.app.Activity, android.os.Bundle);
+ method public abstract void onActivityStarted(android.app.Activity);
+ method public abstract void onActivityStopped(android.app.Activity);
+ }
+
+ public class ApplicationErrorReport implements android.os.Parcelable {
+ ctor public ApplicationErrorReport();
+ method public int describeContents();
+ method public void dump(android.util.Printer, java.lang.String);
+ method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, java.lang.String, int);
+ method public void readFromParcel(android.os.Parcel);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int TYPE_ANR = 2; // 0x2
+ field public static final int TYPE_BATTERY = 3; // 0x3
+ field public static final int TYPE_CRASH = 1; // 0x1
+ field public static final int TYPE_NONE = 0; // 0x0
+ field public static final int TYPE_RUNNING_SERVICE = 5; // 0x5
+ field public android.app.ApplicationErrorReport.AnrInfo anrInfo;
+ field public android.app.ApplicationErrorReport.BatteryInfo batteryInfo;
+ field public android.app.ApplicationErrorReport.CrashInfo crashInfo;
+ field public java.lang.String installerPackageName;
+ field public java.lang.String packageName;
+ field public java.lang.String processName;
+ field public android.app.ApplicationErrorReport.RunningServiceInfo runningServiceInfo;
+ field public boolean systemApp;
+ field public long time;
+ field public int type;
+ }
+
+ public static class ApplicationErrorReport.AnrInfo {
+ ctor public ApplicationErrorReport.AnrInfo();
+ ctor public ApplicationErrorReport.AnrInfo(android.os.Parcel);
+ method public void dump(android.util.Printer, java.lang.String);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public java.lang.String activity;
+ field public java.lang.String cause;
+ field public java.lang.String info;
+ }
+
+ public static class ApplicationErrorReport.BatteryInfo {
+ ctor public ApplicationErrorReport.BatteryInfo();
+ ctor public ApplicationErrorReport.BatteryInfo(android.os.Parcel);
+ method public void dump(android.util.Printer, java.lang.String);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public java.lang.String checkinDetails;
+ field public long durationMicros;
+ field public java.lang.String usageDetails;
+ field public int usagePercent;
+ }
+
+ public static class ApplicationErrorReport.CrashInfo {
+ ctor public ApplicationErrorReport.CrashInfo();
+ ctor public ApplicationErrorReport.CrashInfo(java.lang.Throwable);
+ ctor public ApplicationErrorReport.CrashInfo(android.os.Parcel);
+ method public void dump(android.util.Printer, java.lang.String);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public java.lang.String exceptionClassName;
+ field public java.lang.String exceptionMessage;
+ field public java.lang.String stackTrace;
+ field public java.lang.String throwClassName;
+ field public java.lang.String throwFileName;
+ field public int throwLineNumber;
+ field public java.lang.String throwMethodName;
+ }
+
+ public static class ApplicationErrorReport.RunningServiceInfo {
+ ctor public ApplicationErrorReport.RunningServiceInfo();
+ ctor public ApplicationErrorReport.RunningServiceInfo(android.os.Parcel);
+ method public void dump(android.util.Printer, java.lang.String);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public long durationMillis;
+ field public java.lang.String serviceDetails;
}
public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
@@ -2784,7 +3218,7 @@ package android.app {
method public void setSelectedGroup(int);
}
- public class Fragment implements android.content.ComponentCallbacks android.view.View.OnCreateContextMenuListener {
+ public class Fragment implements android.content.ComponentCallbacks2 android.view.View.OnCreateContextMenuListener {
ctor public Fragment();
method public void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public final boolean equals(java.lang.Object);
@@ -2806,6 +3240,7 @@ package android.app {
method public static android.app.Fragment instantiate(android.content.Context, java.lang.String);
method public static android.app.Fragment instantiate(android.content.Context, java.lang.String, android.os.Bundle);
method public final boolean isAdded();
+ method public final boolean isDetached();
method public final boolean isHidden();
method public final boolean isInLayout();
method public final boolean isRemoving();
@@ -2837,9 +3272,13 @@ package android.app {
method public void onSaveInstanceState(android.os.Bundle);
method public void onStart();
method public void onStop();
+ method public void onTrimMemory(int);
+ method public void onViewCreated(android.view.View, android.os.Bundle);
method public void registerForContextMenu(android.view.View);
method public void setArguments(android.os.Bundle);
method public void setHasOptionsMenu(boolean);
+ method public void setInitialSavedState(android.app.Fragment.SavedState);
+ method public void setMenuVisibility(boolean);
method public void setRetainInstance(boolean);
method public void setTargetFragment(android.app.Fragment, int);
method public void startActivity(android.content.Intent);
@@ -2851,6 +3290,12 @@ package android.app {
ctor public Fragment.InstantiationException(java.lang.String, java.lang.Exception);
}
+ public static class Fragment.SavedState implements android.os.Parcelable {
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.ClassLoaderCreator CREATOR;
+ }
+
public class FragmentBreadCrumbs extends android.view.ViewGroup implements android.app.FragmentManager.OnBackStackChangedListener {
ctor public FragmentBreadCrumbs(android.content.Context);
ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet);
@@ -2880,6 +3325,7 @@ package android.app {
method public abstract android.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
method public abstract int getBackStackEntryCount();
method public abstract android.app.Fragment getFragment(android.os.Bundle, java.lang.String);
+ method public void invalidateOptionsMenu();
method public abstract void popBackStack();
method public abstract void popBackStack(java.lang.String, int);
method public abstract void popBackStack(int, int);
@@ -2888,6 +3334,7 @@ package android.app {
method public abstract boolean popBackStackImmediate(int, int);
method public abstract void putFragment(android.os.Bundle, java.lang.String, android.app.Fragment);
method public abstract void removeOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
+ method public abstract android.app.Fragment.SavedState saveFragmentInstanceState(android.app.Fragment);
field public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
}
@@ -2897,6 +3344,7 @@ package android.app {
method public abstract java.lang.CharSequence getBreadCrumbTitle();
method public abstract int getBreadCrumbTitleRes();
method public abstract int getId();
+ method public abstract java.lang.String getName();
}
public static abstract interface FragmentManager.OnBackStackChangedListener {
@@ -2909,8 +3357,10 @@ package android.app {
method public abstract android.app.FragmentTransaction add(int, android.app.Fragment);
method public abstract android.app.FragmentTransaction add(int, android.app.Fragment, java.lang.String);
method public abstract android.app.FragmentTransaction addToBackStack(java.lang.String);
+ method public abstract android.app.FragmentTransaction attach(android.app.Fragment);
method public abstract int commit();
method public abstract int commitAllowingStateLoss();
+ method public abstract android.app.FragmentTransaction detach(android.app.Fragment);
method public abstract android.app.FragmentTransaction disallowAddToBackStack();
method public abstract android.app.FragmentTransaction hide(android.app.Fragment);
method public abstract boolean isAddToBackStackAllowed();
@@ -2923,6 +3373,7 @@ package android.app {
method public abstract android.app.FragmentTransaction setBreadCrumbTitle(int);
method public abstract android.app.FragmentTransaction setBreadCrumbTitle(java.lang.CharSequence);
method public abstract android.app.FragmentTransaction setCustomAnimations(int, int);
+ method public abstract android.app.FragmentTransaction setCustomAnimations(int, int, int, int);
method public abstract android.app.FragmentTransaction setTransition(int);
method public abstract android.app.FragmentTransaction setTransitionStyle(int);
method public abstract android.app.FragmentTransaction show(android.app.Fragment);
@@ -3024,12 +3475,12 @@ package android.app {
}
public class KeyguardManager {
- method public void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult);
+ method public deprecated void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult);
method public boolean inKeyguardRestrictedInputMode();
- method public android.app.KeyguardManager.KeyguardLock newKeyguardLock(java.lang.String);
+ method public deprecated android.app.KeyguardManager.KeyguardLock newKeyguardLock(java.lang.String);
}
- public class KeyguardManager.KeyguardLock {
+ public deprecated class KeyguardManager.KeyguardLock {
method public void disableKeyguard();
method public void reenableKeyguard();
}
@@ -3104,7 +3555,7 @@ package android.app {
method public abstract void onLoaderReset(android.content.Loader<D>);
}
- public class LocalActivityManager {
+ public deprecated class LocalActivityManager {
ctor public LocalActivityManager(android.app.Activity, boolean);
method public android.view.Window destroyActivity(java.lang.String, boolean);
method public void dispatchCreate(android.os.Bundle);
@@ -3193,6 +3644,7 @@ package android.app {
method public android.app.Notification.Builder setNumber(int);
method public android.app.Notification.Builder setOngoing(boolean);
method public android.app.Notification.Builder setOnlyAlertOnce(boolean);
+ method public android.app.Notification.Builder setProgress(int, int, boolean);
method public android.app.Notification.Builder setSmallIcon(int);
method public android.app.Notification.Builder setSmallIcon(int, int);
method public android.app.Notification.Builder setSound(android.net.Uri);
@@ -3226,6 +3678,7 @@ package android.app {
method public void send(android.content.Context, int, android.content.Intent) throws android.app.PendingIntent.CanceledException;
method public void send(int, android.app.PendingIntent.OnFinished, android.os.Handler) throws android.app.PendingIntent.CanceledException;
method public void send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler) throws android.app.PendingIntent.CanceledException;
+ method public void send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler, java.lang.String) throws android.app.PendingIntent.CanceledException;
method public static void writePendingIntentOrNullToParcel(android.app.PendingIntent, android.os.Parcel);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
@@ -3289,6 +3742,7 @@ package android.app {
field public static final java.lang.String EXTRA_DATA_KEY = "intent_extra_data_key";
field public static final java.lang.String EXTRA_NEW_SEARCH = "new_search";
field public static final java.lang.String EXTRA_SELECT_QUERY = "select_query";
+ field public static final java.lang.String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent";
field public static final int FLAG_QUERY_REFINEMENT = 1; // 0x1
field public static final java.lang.String INTENT_ACTION_GLOBAL_SEARCH = "android.search.action.GLOBAL_SEARCH";
field public static final java.lang.String INTENT_ACTION_SEARCHABLES_CHANGED = "android.search.action.SEARCHABLES_CHANGED";
@@ -3307,6 +3761,7 @@ package android.app {
field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data";
field public static final java.lang.String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id";
field public static final java.lang.String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data";
+ field public static final java.lang.String SUGGEST_COLUMN_LAST_ACCESS_HINT = "suggest_last_access_hint";
field public static final java.lang.String SUGGEST_COLUMN_QUERY = "suggest_intent_query";
field public static final java.lang.String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id";
field public static final java.lang.String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = "suggest_spinner_while_refreshing";
@@ -3359,7 +3814,7 @@ package android.app {
field public static final android.os.Parcelable.Creator CREATOR;
}
- public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks {
+ public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
ctor public Service();
method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
method public final android.app.Application getApplication();
@@ -3371,6 +3826,8 @@ package android.app {
method public void onRebind(android.content.Intent);
method public deprecated void onStart(android.content.Intent, int);
method public int onStartCommand(android.content.Intent, int, int);
+ method public void onTaskRemoved(android.content.Intent);
+ method public void onTrimMemory(int);
method public boolean onUnbind(android.content.Intent);
method public final void startForeground(int, android.app.Notification);
method public final void stopForeground(boolean);
@@ -3386,7 +3843,7 @@ package android.app {
field public static final int START_STICKY_COMPATIBILITY = 0; // 0x0
}
- public class TabActivity extends android.app.ActivityGroup {
+ public deprecated class TabActivity extends android.app.ActivityGroup {
ctor public TabActivity();
method public android.widget.TabHost getTabHost();
method public android.widget.TabWidget getTabWidget();
@@ -3444,6 +3901,7 @@ package android.app {
public class WallpaperManager {
method public void clear() throws java.io.IOException;
method public void clearWallpaperOffsets(android.os.IBinder);
+ method public void forgetLoadedWallpaper();
method public int getDesiredMinimumHeight();
method public int getDesiredMinimumWidth();
method public android.graphics.drawable.Drawable getDrawable();
@@ -3487,6 +3945,7 @@ package android.app.admin {
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7
+ field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8
field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6
field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3
field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0
@@ -3520,6 +3979,7 @@ package android.app.admin {
public class DevicePolicyManager {
method public java.util.List<android.content.ComponentName> getActiveAdmins();
+ method public boolean getCameraDisabled(android.content.ComponentName);
method public int getCurrentFailedPasswordAttempts();
method public int getMaximumFailedPasswordsForWipe(android.content.ComponentName);
method public long getMaximumTimeToLock(android.content.ComponentName);
@@ -3543,6 +4003,7 @@ package android.app.admin {
method public void lockNow();
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean resetPassword(java.lang.String, int);
+ method public void setCameraDisabled(android.content.ComponentName, boolean);
method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
method public void setMaximumTimeToLock(android.content.ComponentName, long);
method public void setPasswordExpirationTimeout(android.content.ComponentName, long);
@@ -3568,6 +4029,7 @@ package android.app.admin {
field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
+ field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000
field public static final int PASSWORD_QUALITY_COMPLEX = 393216; // 0x60000
field public static final int PASSWORD_QUALITY_NUMERIC = 131072; // 0x20000
field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000
@@ -3582,10 +4044,15 @@ package android.app.backup {
public abstract class BackupAgent extends android.content.ContextWrapper {
ctor public BackupAgent();
+ method public final void fullBackupFile(java.io.File, android.app.backup.FullBackupDataOutput);
method public abstract void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException;
method public void onCreate();
method public void onDestroy();
+ method public void onFullBackup(android.app.backup.FullBackupDataOutput) throws java.io.IOException;
method public abstract void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException;
+ method public void onRestoreFile(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long) throws java.io.IOException;
+ field public static final int TYPE_DIRECTORY = 2; // 0x2
+ field public static final int TYPE_FILE = 1; // 0x1
}
public class BackupAgentHelper extends android.app.backup.BackupAgent {
@@ -3637,6 +4104,9 @@ package android.app.backup {
method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
}
+ public class FullBackupDataOutput {
+ }
+
public abstract class RestoreObserver {
ctor public RestoreObserver();
method public void onUpdate(int, java.lang.String);
@@ -3732,6 +4202,8 @@ package android.appwidget {
field public int initialLayout;
field public java.lang.String label;
field public int minHeight;
+ field public int minResizeHeight;
+ field public int minResizeWidth;
field public int minWidth;
field public int previewImage;
field public android.content.ComponentName provider;
@@ -3764,6 +4236,7 @@ package android.bluetooth {
method public java.util.Set<android.bluetooth.BluetoothDevice> getBondedDevices();
method public static synchronized android.bluetooth.BluetoothAdapter getDefaultAdapter();
method public java.lang.String getName();
+ method public int getProfileConnectionState(int);
method public boolean getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int);
method public android.bluetooth.BluetoothDevice getRemoteDevice(java.lang.String);
method public int getScanMode();
@@ -4048,6 +4521,44 @@ package android.bluetooth {
field public static final java.lang.String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid";
}
+ public final class BluetoothHealth implements android.bluetooth.BluetoothProfile {
+ method public boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+ method public boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int);
+ method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+ method public int getConnectionState(android.bluetooth.BluetoothDevice);
+ method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+ method public android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+ method public boolean registerSinkAppConfiguration(java.lang.String, int, android.bluetooth.BluetoothHealthCallback);
+ method public boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration);
+ field public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1
+ field public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0
+ field public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3
+ field public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2
+ field public static final int CHANNEL_TYPE_RELIABLE = 10; // 0xa
+ field public static final int CHANNEL_TYPE_STREAMING = 11; // 0xb
+ field public static final int SINK_ROLE = 2; // 0x2
+ field public static final int SOURCE_ROLE = 1; // 0x1
+ field public static final int STATE_CHANNEL_CONNECTED = 2; // 0x2
+ field public static final int STATE_CHANNEL_CONNECTING = 1; // 0x1
+ field public static final int STATE_CHANNEL_DISCONNECTED = 0; // 0x0
+ field public static final int STATE_CHANNEL_DISCONNECTING = 3; // 0x3
+ }
+
+ public final class BluetoothHealthAppConfiguration implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getDataType();
+ method public java.lang.String getName();
+ method public int getRole();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public abstract class BluetoothHealthCallback {
+ ctor public BluetoothHealthCallback();
+ method public void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int);
+ method public void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int);
+ }
+
public abstract interface BluetoothProfile {
method public abstract java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
method public abstract int getConnectionState(android.bluetooth.BluetoothDevice);
@@ -4056,6 +4567,7 @@ package android.bluetooth {
field public static final java.lang.String EXTRA_PREVIOUS_STATE = "android.bluetooth.profile.extra.PREVIOUS_STATE";
field public static final java.lang.String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
field public static final int HEADSET = 1; // 0x1
+ field public static final int HEALTH = 3; // 0x3
field public static final int STATE_CONNECTED = 2; // 0x2
field public static final int STATE_CONNECTING = 1; // 0x1
field public static final int STATE_DISCONNECTED = 0; // 0x0
@@ -4079,6 +4591,7 @@ package android.bluetooth {
method public java.io.InputStream getInputStream() throws java.io.IOException;
method public java.io.OutputStream getOutputStream() throws java.io.IOException;
method public android.bluetooth.BluetoothDevice getRemoteDevice();
+ method public boolean isConnected();
}
}
@@ -4242,6 +4755,14 @@ package android.content {
method public abstract void onLowMemory();
}
+ public abstract interface ComponentCallbacks2 implements android.content.ComponentCallbacks {
+ method public abstract void onTrimMemory(int);
+ field public static final int TRIM_MEMORY_BACKGROUND = 40; // 0x28
+ field public static final int TRIM_MEMORY_COMPLETE = 80; // 0x50
+ field public static final int TRIM_MEMORY_MODERATE = 60; // 0x3c
+ field public static final int TRIM_MEMORY_UI_HIDDEN = 20; // 0x14
+ }
+
public final class ComponentName implements java.lang.Cloneable java.lang.Comparable android.os.Parcelable {
ctor public ComponentName(java.lang.String, java.lang.String);
ctor public ComponentName(android.content.Context, java.lang.String);
@@ -4263,7 +4784,7 @@ package android.content {
field public static final android.os.Parcelable.Creator CREATOR;
}
- public abstract class ContentProvider implements android.content.ComponentCallbacks {
+ public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
ctor public ContentProvider();
method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException;
method public void attachInfo(android.content.Context, android.content.pm.ProviderInfo);
@@ -4281,6 +4802,7 @@ package android.content {
method public void onConfigurationChanged(android.content.res.Configuration);
method public abstract boolean onCreate();
method public void onLowMemory();
+ method public void onTrimMemory(int);
method public android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
method protected final android.os.ParcelFileDescriptor openFileHelper(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
@@ -4534,6 +5056,7 @@ package android.content {
method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler);
method public abstract deprecated android.graphics.drawable.Drawable peekWallpaper();
+ method public void registerComponentCallbacks(android.content.ComponentCallbacks);
method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
method public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, java.lang.String, android.os.Handler);
method public abstract void removeStickyBroadcast(android.content.Intent);
@@ -4554,15 +5077,21 @@ package android.content {
method public abstract android.content.ComponentName startService(android.content.Intent);
method public abstract boolean stopService(android.content.Intent);
method public abstract void unbindService(android.content.ServiceConnection);
+ method public void unregisterComponentCallbacks(android.content.ComponentCallbacks);
method public abstract void unregisterReceiver(android.content.BroadcastReceiver);
field public static final java.lang.String ACCESSIBILITY_SERVICE = "accessibility";
field public static final java.lang.String ACCOUNT_SERVICE = "account";
field public static final java.lang.String ACTIVITY_SERVICE = "activity";
field public static final java.lang.String ALARM_SERVICE = "alarm";
field public static final java.lang.String AUDIO_SERVICE = "audio";
+ field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
+ field public static final int BIND_ADJUST_WITH_ACTIVITY = 64; // 0x40
+ field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
field public static final int BIND_AUTO_CREATE = 1; // 0x1
field public static final int BIND_DEBUG_UNBIND = 2; // 0x2
+ field public static final int BIND_IMPORTANT = 64; // 0x40
field public static final int BIND_NOT_FOREGROUND = 4; // 0x4
+ field public static final int BIND_WAIVE_PRIORITY = 32; // 0x20
field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2
@@ -4587,10 +5116,12 @@ package android.content {
field public static final java.lang.String SENSOR_SERVICE = "sensor";
field public static final java.lang.String STORAGE_SERVICE = "storage";
field public static final java.lang.String TELEPHONY_SERVICE = "phone";
+ field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
field public static final java.lang.String UI_MODE_SERVICE = "uimode";
field public static final java.lang.String USB_SERVICE = "usb";
field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
+ field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p";
field public static final java.lang.String WIFI_SERVICE = "wifi";
field public static final java.lang.String WINDOW_SERVICE = "window";
}
@@ -4867,6 +5398,7 @@ package android.content {
field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE";
field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS";
field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER";
+ field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
@@ -4898,8 +5430,10 @@ package android.content {
field public static final java.lang.String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
field public static final java.lang.String ACTION_INSERT = "android.intent.action.INSERT";
field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
+ field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN";
+ field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
field public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
field public static final java.lang.String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
@@ -4920,7 +5454,9 @@ package android.content {
field public static final java.lang.String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
field public static final java.lang.String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
field public static final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
- field public static final java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
+ field public static final java.lang.String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
+ field public static final deprecated java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
+ field public static final java.lang.String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
@@ -4948,8 +5484,9 @@ package android.content {
field public static final java.lang.String ACTION_TIME_CHANGED = "android.intent.action.TIME_SET";
field public static final java.lang.String ACTION_TIME_TICK = "android.intent.action.TIME_TICK";
field public static final java.lang.String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED";
- field public static final java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
- field public static final java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
+ field public static final deprecated java.lang.String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
+ field public static final deprecated java.lang.String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
+ field public static final java.lang.String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
field public static final java.lang.String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT";
field public static final java.lang.String ACTION_VIEW = "android.intent.action.VIEW";
field public static final java.lang.String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND";
@@ -4980,7 +5517,9 @@ package android.content {
field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
field public static final android.os.Parcelable.Creator CREATOR;
field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
+ field public static final java.lang.String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
field public static final java.lang.String EXTRA_BCC = "android.intent.extra.BCC";
+ field public static final java.lang.String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
field public static final java.lang.String EXTRA_CC = "android.intent.extra.CC";
field public static final deprecated java.lang.String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name";
field public static final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
@@ -4996,12 +5535,15 @@ package android.content {
field public static final java.lang.String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
field public static final java.lang.String EXTRA_EMAIL = "android.intent.extra.EMAIL";
field public static final java.lang.String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
+ field public static final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
field public static final java.lang.String EXTRA_INTENT = "android.intent.extra.INTENT";
field public static final java.lang.String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT";
field public static final java.lang.String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY";
+ field public static final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
field public static final java.lang.String EXTRA_REPLACING = "android.intent.extra.REPLACING";
+ field public static final java.lang.String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
field public static final java.lang.String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
field public static final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
field public static final java.lang.String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT";
@@ -5146,6 +5688,7 @@ package android.content {
method public java.lang.String getTargetPackage();
method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel);
method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException;
+ method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, java.lang.String) throws android.content.IntentSender.SendIntentException;
method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
@@ -5279,6 +5822,7 @@ package android.content {
ctor public SyncAdapterType(android.os.Parcel);
method public boolean allowParallelSyncs();
method public int describeContents();
+ method public java.lang.String getSettingsActivity();
method public boolean isAlwaysSyncable();
method public boolean isUserVisible();
method public static android.content.SyncAdapterType newKey(java.lang.String, java.lang.String);
@@ -5374,6 +5918,8 @@ package android.content.pm {
field public static final int CONFIG_NAVIGATION = 64; // 0x40
field public static final int CONFIG_ORIENTATION = 128; // 0x80
field public static final int CONFIG_SCREEN_LAYOUT = 256; // 0x100
+ field public static final int CONFIG_SCREEN_SIZE = 1024; // 0x400
+ field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800
field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8
field public static final int CONFIG_UI_MODE = 512; // 0x200
field public static final android.os.Parcelable.Creator CREATOR;
@@ -5403,6 +5949,7 @@ package android.content.pm {
field public static final int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 7; // 0x7
field public static final int SCREEN_ORIENTATION_UNSPECIFIED = -1; // 0xffffffff
field public static final int SCREEN_ORIENTATION_USER = 2; // 0x2
+ field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
field public int configChanges;
field public int flags;
field public int launchMode;
@@ -5412,6 +5959,7 @@ package android.content.pm {
field public java.lang.String targetActivity;
field public java.lang.String taskAffinity;
field public int theme;
+ field public int uiOptions;
}
public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
@@ -5445,20 +5993,24 @@ package android.content.pm {
field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
field public java.lang.String backupAgentName;
field public java.lang.String className;
+ field public int compatibleWidthLimitDp;
field public java.lang.String dataDir;
field public int descriptionRes;
field public boolean enabled;
field public int flags;
+ field public int largestWidthLimitDp;
field public java.lang.String manageSpaceActivityName;
field public java.lang.String nativeLibraryDir;
field public java.lang.String permission;
field public java.lang.String processName;
field public java.lang.String publicSourceDir;
+ field public int requiresSmallestWidthDp;
field public java.lang.String[] sharedLibraryFiles;
field public java.lang.String sourceDir;
field public int targetSdkVersion;
field public java.lang.String taskAffinity;
field public int theme;
+ field public int uiOptions;
field public int uid;
}
@@ -5658,10 +6210,13 @@ package android.content.pm {
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
+ method public abstract void verifyPendingInstall(int, int);
field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2
+ field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
field public static final int DONT_KILL_APP = 1; // 0x1
+ field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera";
@@ -5669,12 +6224,16 @@ package android.content.pm {
field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
field public static final java.lang.String FEATURE_FAKETOUCH = "android.hardware.faketouch";
+ field public static final java.lang.String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
+ field public static final java.lang.String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
field public static final java.lang.String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
field public static final java.lang.String FEATURE_LOCATION = "android.hardware.location";
field public static final java.lang.String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone";
field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
+ field public static final java.lang.String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
+ field public static final java.lang.String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
field public static final java.lang.String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
field public static final java.lang.String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
field public static final java.lang.String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
@@ -5693,6 +6252,7 @@ package android.content.pm {
field public static final java.lang.String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
field public static final java.lang.String FEATURE_USB_HOST = "android.hardware.usb.host";
field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
+ field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
field public static final int GET_ACTIVITIES = 1; // 0x1
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
@@ -5718,6 +6278,8 @@ package android.content.pm {
field public static final int SIGNATURE_NO_MATCH = -3; // 0xfffffffd
field public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; // 0xfffffffe
field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
+ field public static final int VERIFICATION_ALLOW = 1; // 0x1
+ field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
}
public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
@@ -5736,6 +6298,7 @@ package android.content.pm {
field public long codeSize;
field public long dataSize;
field public long externalCacheSize;
+ field public long externalCodeSize;
field public long externalDataSize;
field public long externalMediaSize;
field public long externalObbSize;
@@ -5826,6 +6389,8 @@ package android.content.pm {
method public int describeContents();
method public void dump(android.util.Printer, java.lang.String);
field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1
+ field public int flags;
field public java.lang.String permission;
}
@@ -5959,6 +6524,9 @@ package android.content.res {
field public static final int SCREENLAYOUT_SIZE_SMALL = 1; // 0x1
field public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0; // 0x0
field public static final int SCREENLAYOUT_SIZE_XLARGE = 4; // 0x4
+ field public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0; // 0x0
+ field public static final int SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
+ field public static final int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
field public static final int TOUCHSCREEN_FINGER = 3; // 0x3
field public static final int TOUCHSCREEN_NOTOUCH = 1; // 0x1
field public static final int TOUCHSCREEN_STYLUS = 2; // 0x2
@@ -5971,6 +6539,7 @@ package android.content.res {
field public static final int UI_MODE_TYPE_DESK = 2; // 0x2
field public static final int UI_MODE_TYPE_MASK = 15; // 0xf
field public static final int UI_MODE_TYPE_NORMAL = 1; // 0x1
+ field public static final int UI_MODE_TYPE_TELEVISION = 4; // 0x4
field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
field public float fontScale;
field public int hardKeyboardHidden;
@@ -5982,7 +6551,10 @@ package android.content.res {
field public int navigation;
field public int navigationHidden;
field public int orientation;
+ field public int screenHeightDp;
field public int screenLayout;
+ field public int screenWidthDp;
+ field public int smallestScreenWidthDp;
field public int touchscreen;
field public int uiMode;
}
@@ -6693,6 +7265,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);
@@ -6750,6 +7323,7 @@ package android.database.sqlite {
method public void setCursorFactory(android.database.sqlite.SQLiteDatabase.CursorFactory);
method public void setDistinct(boolean);
method public void setProjectionMap(java.util.Map<java.lang.String, java.lang.String>);
+ method public void setStrict(boolean);
method public void setTables(java.lang.String);
}
@@ -7250,6 +7824,7 @@ package android.graphics {
method public static final android.graphics.Bitmap.CompressFormat[] values();
enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
+ enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP;
}
public static final class Bitmap.Config extends java.lang.Enum {
@@ -7403,6 +7978,8 @@ package android.graphics {
method public int getHeight();
method public void getMatrix(android.graphics.Matrix);
method public final android.graphics.Matrix getMatrix();
+ method public int getMaximumBitmapHeight();
+ method public int getMaximumBitmapWidth();
method public int getSaveCount();
method public int getWidth();
method public boolean isHardwareAccelerated();
@@ -7702,6 +8279,7 @@ package android.graphics {
method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
method public float getFontSpacing();
+ method public int getHinting();
method public android.graphics.MaskFilter getMaskFilter();
method public android.graphics.PathEffect getPathEffect();
method public android.graphics.Rasterizer getRasterizer();
@@ -7748,6 +8326,7 @@ package android.graphics {
method public void setFakeBoldText(boolean);
method public void setFilterBitmap(boolean);
method public void setFlags(int);
+ method public void setHinting(int);
method public void setLinearText(boolean);
method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter);
method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect);
@@ -7773,6 +8352,8 @@ package android.graphics {
field public static final int DITHER_FLAG = 4; // 0x4
field public static final int FAKE_BOLD_TEXT_FLAG = 32; // 0x20
field public static final int FILTER_BITMAP_FLAG = 2; // 0x2
+ field public static final int HINTING_OFF = 0; // 0x0
+ field public static final int HINTING_ON = 1; // 0x1
field public static final int LINEAR_TEXT_FLAG = 64; // 0x40
field public static final int STRIKE_THRU_TEXT_FLAG = 16; // 0x10
field public static final int SUBPIXEL_TEXT_FLAG = 128; // 0x80
@@ -7963,29 +8544,37 @@ package android.graphics {
ctor public PixelXorXfermode(int);
}
- public class Point {
+ public class Point implements android.os.Parcelable {
ctor public Point();
ctor public Point(int, int);
ctor public Point(android.graphics.Point);
+ method public int describeContents();
method public final boolean equals(int, int);
method public final void negate();
method public final void offset(int, int);
+ method public void readFromParcel(android.os.Parcel);
method public void set(int, int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
field public int x;
field public int y;
}
- public class PointF {
+ public class PointF implements android.os.Parcelable {
ctor public PointF();
ctor public PointF(float, float);
ctor public PointF(android.graphics.Point);
+ method public int describeContents();
method public final boolean equals(float, float);
method public final float length();
method public static float length(float, float);
method public final void negate();
method public final void offset(float, float);
+ method public void readFromParcel(android.os.Parcel);
method public final void set(float, float);
method public final void set(android.graphics.PointF);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
field public float x;
field public float y;
}
@@ -8105,6 +8694,7 @@ package android.graphics {
method public void setEmpty();
method public boolean setIntersect(android.graphics.RectF, android.graphics.RectF);
method public void sort();
+ method public java.lang.String toShortString();
method public void union(float, float, float, float);
method public void union(android.graphics.RectF);
method public void union(float, float);
@@ -8189,7 +8779,9 @@ package android.graphics {
public class SurfaceTexture {
ctor public SurfaceTexture(int);
+ method public long getTimestamp();
method public void getTransformMatrix(float[]);
+ method public void release();
method public void setOnFrameAvailableListener(android.graphics.SurfaceTexture.OnFrameAvailableListener);
method public void updateTexImage();
}
@@ -8652,6 +9244,7 @@ package android.hardware {
method public final void release();
method public final void setDisplayOrientation(int);
method public final void setErrorCallback(android.hardware.Camera.ErrorCallback);
+ method public final void setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener);
method public final void setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback);
method public void setParameters(android.hardware.Camera.Parameters);
method public final void setPreviewCallback(android.hardware.Camera.PreviewCallback);
@@ -8659,17 +9252,27 @@ package android.hardware {
method public final void setPreviewDisplay(android.view.SurfaceHolder) throws java.io.IOException;
method public final void setPreviewTexture(android.graphics.SurfaceTexture) throws java.io.IOException;
method public final void setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener);
+ method public final void startFaceDetection();
method public final void startPreview();
method public final void startSmoothZoom(int);
+ method public final void stopFaceDetection();
method public final void stopPreview();
method public final void stopSmoothZoom();
method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
method public final void unlock();
+ field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE";
+ field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO";
field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64
field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1
}
+ public static class Camera.Area {
+ ctor public Camera.Area(android.graphics.Rect, int);
+ field public android.graphics.Rect rect;
+ field public int weight;
+ }
+
public static abstract interface Camera.AutoFocusCallback {
method public abstract void onAutoFocus(boolean, android.hardware.Camera);
}
@@ -8686,6 +9289,20 @@ package android.hardware {
method public abstract void onError(int, android.hardware.Camera);
}
+ 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;
+ }
+
+ public static abstract interface Camera.FaceDetectionListener {
+ method public abstract void onFaceDetection(android.hardware.Camera.Face[], android.hardware.Camera);
+ }
+
public static abstract interface Camera.OnZoomChangeListener {
method public abstract void onZoomChange(int, boolean, android.hardware.Camera);
}
@@ -8694,11 +9311,14 @@ package android.hardware {
method public java.lang.String flatten();
method public java.lang.String get(java.lang.String);
method public java.lang.String getAntibanding();
+ method public boolean getAutoExposureLock();
+ method public boolean getAutoWhiteBalanceLock();
method public java.lang.String getColorEffect();
method public int getExposureCompensation();
method public float getExposureCompensationStep();
method public java.lang.String getFlashMode();
method public float getFocalLength();
+ method public java.util.List<android.hardware.Camera.Area> getFocusAreas();
method public void getFocusDistances(float[]);
method public java.lang.String getFocusMode();
method public float getHorizontalViewAngle();
@@ -8707,7 +9327,11 @@ package android.hardware {
method public int getJpegThumbnailQuality();
method public android.hardware.Camera.Size getJpegThumbnailSize();
method public int getMaxExposureCompensation();
+ method public int getMaxNumDetectedFaces();
+ method public int getMaxNumFocusAreas();
+ method public int getMaxNumMeteringAreas();
method public int getMaxZoom();
+ method public java.util.List<android.hardware.Camera.Area> getMeteringAreas();
method public int getMinExposureCompensation();
method public int getPictureFormat();
method public android.hardware.Camera.Size getPictureSize();
@@ -8735,16 +9359,22 @@ package android.hardware {
method public java.lang.String getWhiteBalance();
method public int getZoom();
method public java.util.List<java.lang.Integer> getZoomRatios();
+ method public boolean isAutoExposureLockSupported();
+ method public boolean isAutoWhiteBalanceLockSupported();
method public boolean isSmoothZoomSupported();
+ method public boolean isVideoSnapshotSupported();
method public boolean isZoomSupported();
method public void remove(java.lang.String);
method public void removeGpsData();
method public void set(java.lang.String, java.lang.String);
method public void set(java.lang.String, int);
method public void setAntibanding(java.lang.String);
+ method public void setAutoExposureLock(boolean);
+ method public void setAutoWhiteBalanceLock(boolean);
method public void setColorEffect(java.lang.String);
method public void setExposureCompensation(int);
method public void setFlashMode(java.lang.String);
+ method public void setFocusAreas(java.util.List<android.hardware.Camera.Area>);
method public void setFocusMode(java.lang.String);
method public void setGpsAltitude(double);
method public void setGpsLatitude(double);
@@ -8754,12 +9384,14 @@ package android.hardware {
method public void setJpegQuality(int);
method public void setJpegThumbnailQuality(int);
method public void setJpegThumbnailSize(int, int);
+ method public void setMeteringAreas(java.util.List<android.hardware.Camera.Area>);
method public void setPictureFormat(int);
method public void setPictureSize(int, int);
method public void setPreviewFormat(int);
method public void setPreviewFpsRange(int, int);
method public deprecated void setPreviewFrameRate(int);
method public void setPreviewSize(int, int);
+ method public void setRecordingHint(boolean);
method public void setRotation(int);
method public void setSceneMode(java.lang.String);
method public void setWhiteBalance(java.lang.String);
@@ -8787,6 +9419,7 @@ package android.hardware {
field public static final int FOCUS_DISTANCE_NEAR_INDEX = 0; // 0x0
field public static final int FOCUS_DISTANCE_OPTIMAL_INDEX = 1; // 0x1
field public static final java.lang.String FOCUS_MODE_AUTO = "auto";
+ field public static final java.lang.String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture";
field public static final java.lang.String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video";
field public static final java.lang.String FOCUS_MODE_EDOF = "edof";
field public static final java.lang.String FOCUS_MODE_FIXED = "fixed";
@@ -8860,6 +9493,7 @@ package android.hardware {
method public int getVersion();
field public static final int TYPE_ACCELEROMETER = 1; // 0x1
field public static final int TYPE_ALL = -1; // 0xffffffff
+ field public static final int TYPE_AMBIENT_TEMPERATURE = 13; // 0xd
field public static final int TYPE_GRAVITY = 9; // 0x9
field public static final int TYPE_GYROSCOPE = 4; // 0x4
field public static final int TYPE_LIGHT = 5; // 0x5
@@ -8868,8 +9502,9 @@ package android.hardware {
field public static final deprecated int TYPE_ORIENTATION = 3; // 0x3
field public static final int TYPE_PRESSURE = 6; // 0x6
field public static final int TYPE_PROXIMITY = 8; // 0x8
+ field public static final int TYPE_RELATIVE_HUMIDITY = 12; // 0xc
field public static final int TYPE_ROTATION_VECTOR = 11; // 0xb
- field public static final int TYPE_TEMPERATURE = 7; // 0x7
+ field public static final deprecated int TYPE_TEMPERATURE = 7; // 0x7
}
public class SensorEvent {
@@ -9044,6 +9679,7 @@ package android.hardware.usb {
method public void close();
method public int controlTransfer(int, int, int, int, byte[], int, int);
method public int getFileDescriptor();
+ method public byte[] getRawDescriptors();
method public java.lang.String getSerial();
method public boolean releaseInterface(android.hardware.usb.UsbInterface);
method public android.hardware.usb.UsbRequest requestWait();
@@ -9196,6 +9832,7 @@ package android.inputmethodservice {
method public void onUpdateExtractingViews(android.view.inputmethod.EditorInfo);
method public void onUpdateExtractingVisibility(android.view.inputmethod.EditorInfo);
method public void onUpdateSelection(int, int, int, int, int, int);
+ method public void onViewClicked(boolean);
method public void onWindowHidden();
method public void onWindowShown();
method public void requestHideSelf(int);
@@ -9239,6 +9876,7 @@ package android.inputmethodservice {
method public void updateCursor(android.graphics.Rect);
method public void updateExtractedText(int, android.view.inputmethod.ExtractedText);
method public void updateSelection(int, int, int, int, int, int);
+ method public void viewClicked(boolean);
}
public static final class InputMethodService.Insets {
@@ -9683,11 +10321,12 @@ package android.media {
method public boolean isMicrophoneMute();
method public boolean isMusicActive();
method public boolean isSpeakerphoneOn();
- method public boolean isWiredHeadsetOn();
+ method public deprecated boolean isWiredHeadsetOn();
method public void loadSoundEffects();
method public void playSoundEffect(int);
method public void playSoundEffect(int, float);
method public void registerMediaButtonEventReceiver(android.content.ComponentName);
+ method public void registerRemoteControlClient(android.media.RemoteControlClient);
method public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
method public deprecated void setBluetoothA2dpOn(boolean);
method public void setBluetoothScoOn(boolean);
@@ -9707,8 +10346,10 @@ package android.media {
method public void stopBluetoothSco();
method public void unloadSoundEffects();
method public void unregisterMediaButtonEventReceiver(android.content.ComponentName);
+ method public void unregisterRemoteControlClient(android.media.RemoteControlClient);
field public static final java.lang.String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
- field public static final java.lang.String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED";
+ field public static final deprecated java.lang.String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED";
+ field public static final java.lang.String ACTION_SCO_AUDIO_STATE_UPDATED = "android.media.ACTION_SCO_AUDIO_STATE_UPDATED";
field public static final int ADJUST_LOWER = -1; // 0xffffffff
field public static final int ADJUST_RAISE = 1; // 0x1
field public static final int ADJUST_SAME = 0; // 0x0
@@ -9721,6 +10362,7 @@ package android.media {
field public static final int AUDIOFOCUS_REQUEST_FAILED = 0; // 0x0
field public static final int AUDIOFOCUS_REQUEST_GRANTED = 1; // 0x1
field public static final java.lang.String EXTRA_RINGER_MODE = "android.media.EXTRA_RINGER_MODE";
+ field public static final java.lang.String EXTRA_SCO_AUDIO_PREVIOUS_STATE = "android.media.extra.SCO_AUDIO_PREVIOUS_STATE";
field public static final java.lang.String EXTRA_SCO_AUDIO_STATE = "android.media.extra.SCO_AUDIO_STATE";
field public static final java.lang.String EXTRA_VIBRATE_SETTING = "android.media.EXTRA_VIBRATE_SETTING";
field public static final java.lang.String EXTRA_VIBRATE_TYPE = "android.media.EXTRA_VIBRATE_TYPE";
@@ -9757,6 +10399,7 @@ package android.media {
field public static final deprecated int ROUTE_HEADSET = 8; // 0x8
field public static final deprecated int ROUTE_SPEAKER = 2; // 0x2
field public static final int SCO_AUDIO_STATE_CONNECTED = 1; // 0x1
+ field public static final int SCO_AUDIO_STATE_CONNECTING = 2; // 0x2
field public static final int SCO_AUDIO_STATE_DISCONNECTED = 0; // 0x0
field public static final int SCO_AUDIO_STATE_ERROR = -1; // 0xffffffff
field public static final int STREAM_ALARM = 4; // 0x4
@@ -10014,6 +10657,7 @@ package android.media {
method public android.graphics.Bitmap getFrameAtTime();
method public void release();
method public void setDataSource(java.lang.String) throws java.lang.IllegalArgumentException;
+ method public void setDataSource(java.lang.String, java.util.Map<java.lang.String, java.lang.String>) throws java.lang.IllegalArgumentException;
method public void setDataSource(java.io.FileDescriptor, long, long) throws java.lang.IllegalArgumentException;
method public void setDataSource(java.io.FileDescriptor) throws java.lang.IllegalArgumentException;
method public void setDataSource(android.content.Context, android.net.Uri) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
@@ -10021,6 +10665,7 @@ package android.media {
field public static final int METADATA_KEY_ALBUMARTIST = 13; // 0xd
field public static final int METADATA_KEY_ARTIST = 2; // 0x2
field public static final int METADATA_KEY_AUTHOR = 3; // 0x3
+ field public static final int METADATA_KEY_BITRATE = 20; // 0x14
field public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; // 0x0
field public static final int METADATA_KEY_COMPILATION = 15; // 0xf
field public static final int METADATA_KEY_COMPOSER = 4; // 0x4
@@ -10028,9 +10673,13 @@ package android.media {
field public static final int METADATA_KEY_DISC_NUMBER = 14; // 0xe
field public static final int METADATA_KEY_DURATION = 9; // 0x9
field public static final int METADATA_KEY_GENRE = 6; // 0x6
+ field public static final int METADATA_KEY_HAS_AUDIO = 16; // 0x10
+ field public static final int METADATA_KEY_HAS_VIDEO = 17; // 0x11
field public static final int METADATA_KEY_MIMETYPE = 12; // 0xc
field public static final int METADATA_KEY_NUM_TRACKS = 10; // 0xa
field public static final int METADATA_KEY_TITLE = 7; // 0x7
+ field public static final int METADATA_KEY_VIDEO_HEIGHT = 19; // 0x13
+ field public static final int METADATA_KEY_VIDEO_WIDTH = 18; // 0x12
field public static final int METADATA_KEY_WRITER = 11; // 0xb
field public static final int METADATA_KEY_YEAR = 8; // 0x8
field public static final int OPTION_CLOSEST = 3; // 0x3
@@ -10062,7 +10711,8 @@ package android.media {
method public void setAudioStreamType(int);
method public void setAuxEffectSendLevel(float);
method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
- method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+ method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+ method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
method public void setDisplay(android.view.SurfaceHolder);
@@ -10075,6 +10725,7 @@ package android.media {
method public void setOnSeekCompleteListener(android.media.MediaPlayer.OnSeekCompleteListener);
method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener);
method public void setScreenOnWhilePlaying(boolean);
+ method public void setSurface(android.view.Surface);
method public void setVolume(float, float);
method public void setWakeMode(android.content.Context, int);
method public void start() throws java.lang.IllegalStateException;
@@ -10131,10 +10782,11 @@ package android.media {
method public void setAudioEncodingBitRate(int);
method public void setAudioSamplingRate(int);
method public void setAudioSource(int) throws java.lang.IllegalStateException;
- method public void setAuxiliaryOutputFile(java.io.FileDescriptor);
- method public void setAuxiliaryOutputFile(java.lang.String);
+ method public deprecated void setAuxiliaryOutputFile(java.io.FileDescriptor);
+ method public deprecated void setAuxiliaryOutputFile(java.lang.String);
method public void setCamera(android.hardware.Camera);
method public void setCaptureRate(double);
+ method public void setLocation(float, float);
method public void setMaxDuration(int) throws java.lang.IllegalArgumentException;
method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException;
method public void setOnErrorListener(android.media.MediaRecorder.OnErrorListener);
@@ -10225,6 +10877,40 @@ package android.media {
method public abstract void onScanCompleted(java.lang.String, android.net.Uri);
}
+ public class RemoteControlClient {
+ ctor public RemoteControlClient(android.app.PendingIntent);
+ ctor public RemoteControlClient(android.app.PendingIntent, android.os.Looper);
+ method public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean);
+ method public void setPlaybackState(int);
+ method public void setTransportControlFlags(int);
+ field public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+ field public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+ field public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+ field public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+ field public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+ field public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+ field public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+ field public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+ field public static final int PLAYSTATE_BUFFERING = 8; // 0x8
+ field public static final int PLAYSTATE_ERROR = 9; // 0x9
+ field public static final int PLAYSTATE_FAST_FORWARDING = 4; // 0x4
+ field public static final int PLAYSTATE_PAUSED = 2; // 0x2
+ field public static final int PLAYSTATE_PLAYING = 3; // 0x3
+ field public static final int PLAYSTATE_REWINDING = 5; // 0x5
+ field public static final int PLAYSTATE_SKIPPING_BACKWARDS = 7; // 0x7
+ field public static final int PLAYSTATE_SKIPPING_FORWARDS = 6; // 0x6
+ field public static final int PLAYSTATE_STOPPED = 1; // 0x1
+ }
+
+ public class RemoteControlClient.MetadataEditor {
+ method public synchronized void apply();
+ method public synchronized void clear();
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+ method public synchronized android.media.RemoteControlClient.MetadataEditor putString(int, java.lang.String) throws java.lang.IllegalArgumentException;
+ field public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
+ }
+
public class Ringtone {
method public int getStreamType();
method public java.lang.String getTitle(android.content.Context);
@@ -10669,6 +11355,61 @@ 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_AUTOFIX = "android.media.effect.effects.AutoFixEffect";
+ field public static final java.lang.String EFFECT_BACKDROPPER = "android.media.effect.effects.BackDropperEffect";
+ field public static final java.lang.String EFFECT_BITMAPOVERLAY = "android.media.effect.effects.BitmapOverlayEffect";
+ field public static final java.lang.String EFFECT_BLACKWHITE = "android.media.effect.effects.BlackWhiteEffect";
+ field public static final java.lang.String EFFECT_BRIGHTNESS = "android.media.effect.effects.BrightnessEffect";
+ field public static final java.lang.String EFFECT_CONTRAST = "android.media.effect.effects.ContrastEffect";
+ field public static final java.lang.String EFFECT_CROP = "android.media.effect.effects.CropEffect";
+ field public static final java.lang.String EFFECT_CROSSPROCESS = "android.media.effect.effects.CrossProcessEffect";
+ field public static final java.lang.String EFFECT_DOCUMENTARY = "android.media.effect.effects.DocumentaryEffect";
+ field public static final java.lang.String EFFECT_DUOTONE = "android.media.effect.effects.DuotoneEffect";
+ field public static final java.lang.String EFFECT_FILLLIGHT = "android.media.effect.effects.FillLightEffect";
+ field public static final java.lang.String EFFECT_FISHEYE = "android.media.effect.effects.FisheyeEffect";
+ field public static final java.lang.String EFFECT_FLIP = "android.media.effect.effects.FlipEffect";
+ field public static final java.lang.String EFFECT_GRAIN = "android.media.effect.effects.GrainEffect";
+ field public static final java.lang.String EFFECT_GRAYSCALE = "android.media.effect.effects.GrayscaleEffect";
+ field public static final java.lang.String EFFECT_LOMOISH = "android.media.effect.effects.LomoishEffect";
+ field public static final java.lang.String EFFECT_NEGATIVE = "android.media.effect.effects.NegativeEffect";
+ field public static final java.lang.String EFFECT_POSTERIZE = "android.media.effect.effects.PosterizeEffect";
+ field public static final java.lang.String EFFECT_REDEYE = "android.media.effect.effects.RedEyeEffect";
+ field public static final java.lang.String EFFECT_ROTATE = "android.media.effect.effects.RotateEffect";
+ field public static final java.lang.String EFFECT_SATURATE = "android.media.effect.effects.SaturateEffect";
+ field public static final java.lang.String EFFECT_SEPIA = "android.media.effect.effects.SepiaEffect";
+ field public static final java.lang.String EFFECT_SHARPEN = "android.media.effect.effects.SharpenEffect";
+ field public static final java.lang.String EFFECT_STRAIGHTEN = "android.media.effect.effects.StraightenEffect";
+ field public static final java.lang.String EFFECT_TEMPERATURE = "android.media.effect.effects.ColorTemperatureEffect";
+ field public static final java.lang.String EFFECT_TINT = "android.media.effect.effects.TintEffect";
+ field public static final java.lang.String EFFECT_VIGNETTE = "android.media.effect.effects.VignetteEffect";
+ }
+
+ public abstract interface EffectUpdateListener {
+ method public abstract void onEffectUpdated(android.media.effect.Effect, java.lang.Object);
+ }
+
+}
+
package android.mtp {
public final class MtpConstants {
@@ -10800,8 +11541,9 @@ package android.net {
public class ConnectivityManager {
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);
@@ -10814,10 +11556,13 @@ package android.net {
field public static final int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo";
field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover";
- field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo";
+ field public static final deprecated java.lang.String EXTRA_NETWORK_INFO = "networkInfo";
field public static final java.lang.String EXTRA_NO_CONNECTIVITY = "noConnectivity";
field public static final java.lang.String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
field public static final java.lang.String EXTRA_REASON = "reason";
+ field public static final int TYPE_BLUETOOTH = 7; // 0x7
+ field public static final int TYPE_DUMMY = 8; // 0x8
+ field public static final int TYPE_ETHERNET = 9; // 0x9
field public static final int TYPE_MOBILE = 0; // 0x0
field public static final int TYPE_MOBILE_DUN = 4; // 0x4
field public static final int TYPE_MOBILE_HIPRI = 5; // 0x5
@@ -10933,6 +11678,7 @@ package android.net {
method public static android.net.NetworkInfo.DetailedState valueOf(java.lang.String);
method public static final android.net.NetworkInfo.DetailedState[] values();
enum_constant public static final android.net.NetworkInfo.DetailedState AUTHENTICATING;
+ enum_constant public static final android.net.NetworkInfo.DetailedState BLOCKED;
enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTED;
enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING;
enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED;
@@ -10955,6 +11701,16 @@ package android.net {
enum_constant public static final android.net.NetworkInfo.State UNKNOWN;
}
+ public class NetworkQuotaInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public long getEstimatedBytes();
+ method public long getHardLimitBytes();
+ method public long getSoftLimitBytes();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final long NO_LIMIT = -1L; // 0xffffffffffffffffL
+ }
+
public class ParseException extends java.lang.RuntimeException {
field public java.lang.String response;
}
@@ -10981,6 +11737,8 @@ package android.net {
method public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache);
method public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache);
method public java.lang.String[] getSupportedCipherSuites();
+ method public void setKeyManagers(javax.net.ssl.KeyManager[]);
+ method public void setTrustManagers(javax.net.ssl.TrustManager[]);
}
public final class SSLSessionCache {
@@ -10990,10 +11748,12 @@ package android.net {
public class TrafficStats {
ctor public TrafficStats();
+ method public static void clearThreadStatsTag();
method public static long getMobileRxBytes();
method public static long getMobileRxPackets();
method public static long getMobileTxBytes();
method public static long getMobileTxPackets();
+ method public static int getThreadStatsTag();
method public static long getTotalRxBytes();
method public static long getTotalRxPackets();
method public static long getTotalTxBytes();
@@ -11010,6 +11770,11 @@ package android.net {
method public static long getUidUdpRxPackets(int);
method public static long getUidUdpTxBytes(int);
method public static long getUidUdpTxPackets(int);
+ method public static void incrementOperationCount(int);
+ method public static void incrementOperationCount(int, int);
+ method public static void setThreadStatsTag(int);
+ method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
field public static final int UNSUPPORTED = -1; // 0xffffffff
}
@@ -11147,6 +11912,32 @@ package android.net {
method public abstract java.lang.String sanitize(java.lang.String);
}
+ public class VpnService extends android.app.Service {
+ ctor public VpnService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method public void onRevoke();
+ method public static android.content.Intent prepare(android.content.Context);
+ method public boolean protect(int);
+ method public boolean protect(java.net.Socket);
+ method public boolean protect(java.net.DatagramSocket);
+ field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService";
+ }
+
+ public class VpnService.Builder {
+ ctor public VpnService.Builder();
+ method public android.net.VpnService.Builder addAddress(java.net.InetAddress, int);
+ method public android.net.VpnService.Builder addAddress(java.lang.String, int);
+ method public android.net.VpnService.Builder addDnsServer(java.net.InetAddress);
+ method public android.net.VpnService.Builder addDnsServer(java.lang.String);
+ method public android.net.VpnService.Builder addRoute(java.net.InetAddress, int);
+ method public android.net.VpnService.Builder addRoute(java.lang.String, int);
+ method public android.net.VpnService.Builder addSearchDomain(java.lang.String);
+ method public android.os.ParcelFileDescriptor establish();
+ method public android.net.VpnService.Builder setConfigureIntent(android.app.PendingIntent);
+ method public android.net.VpnService.Builder setMtu(int);
+ method public android.net.VpnService.Builder setSession(java.lang.String);
+ }
+
}
package android.net.http {
@@ -11175,6 +11966,21 @@ package android.net.http {
field public static long DEFAULT_SYNC_MIN_GZIP_BYTES;
}
+ public final class HttpResponseCache extends java.net.ResponseCache implements java.io.Closeable {
+ method public void close() throws java.io.IOException;
+ method public void delete() throws java.io.IOException;
+ method public void flush();
+ method public java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException;
+ method public int getHitCount();
+ method public static android.net.http.HttpResponseCache getInstalled();
+ method public int getNetworkCount();
+ method public int getRequestCount();
+ method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException;
+ method public long maxSize();
+ method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+ method public long size();
+ }
+
public class SslCertificate {
ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.lang.String, java.lang.String);
ctor public deprecated SslCertificate(java.lang.String, java.lang.String, java.util.Date, java.util.Date);
@@ -11198,15 +12004,20 @@ package android.net.http {
}
public class SslError {
- ctor public SslError(int, android.net.http.SslCertificate);
- ctor public SslError(int, java.security.cert.X509Certificate);
+ ctor public deprecated SslError(int, android.net.http.SslCertificate);
+ ctor public deprecated SslError(int, java.security.cert.X509Certificate);
+ ctor public SslError(int, android.net.http.SslCertificate, java.lang.String);
+ ctor public SslError(int, java.security.cert.X509Certificate, java.lang.String);
method public boolean addError(int);
method public android.net.http.SslCertificate getCertificate();
method public int getPrimaryError();
+ method public java.lang.String getUrl();
method public boolean hasError(int);
+ field public static final int SSL_DATE_INVALID = 4; // 0x4
field public static final int SSL_EXPIRED = 1; // 0x1
field public static final int SSL_IDMISMATCH = 2; // 0x2
- field public static final int SSL_MAX_ERROR = 6; // 0x6
+ field public static final int SSL_INVALID = 5; // 0x5
+ field public static final deprecated int SSL_MAX_ERROR = 6; // 0x6
field public static final int SSL_NOTYETVALID = 0; // 0x0
field public static final int SSL_UNTRUSTED = 3; // 0x3
}
@@ -11467,12 +12278,14 @@ package android.net.wifi {
method public void writeToParcel(android.os.Parcel, int);
enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED;
enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING;
+ enum_constant public static final android.net.wifi.SupplicantState AUTHENTICATING;
enum_constant public static final android.net.wifi.SupplicantState COMPLETED;
enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED;
enum_constant public static final android.net.wifi.SupplicantState DORMANT;
enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE;
enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE;
enum_constant public static final android.net.wifi.SupplicantState INACTIVE;
+ enum_constant public static final android.net.wifi.SupplicantState INTERFACE_DISABLED;
enum_constant public static final android.net.wifi.SupplicantState INVALID;
enum_constant public static final android.net.wifi.SupplicantState SCANNING;
enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED;
@@ -11595,6 +12408,7 @@ package android.net.wifi {
field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state";
field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected";
field public static final java.lang.String EXTRA_SUPPLICANT_ERROR = "supplicantError";
+ field public static final java.lang.String EXTRA_WIFI_INFO = "wifiInfo";
field public static final java.lang.String EXTRA_WIFI_STATE = "wifi_state";
field public static final java.lang.String NETWORK_IDS_CHANGED_ACTION = "android.net.wifi.NETWORK_IDS_CHANGED";
field public static final java.lang.String NETWORK_STATE_CHANGED_ACTION = "android.net.wifi.STATE_CHANGE";
@@ -11628,6 +12442,142 @@ package android.net.wifi {
method public void setWorkSource(android.os.WorkSource);
}
+ public class WpsInfo implements android.os.Parcelable {
+ ctor public WpsInfo();
+ ctor public WpsInfo(android.net.wifi.WpsInfo);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int DISPLAY = 1; // 0x1
+ field public static final int INVALID = 4; // 0x4
+ field public static final int KEYPAD = 2; // 0x2
+ field public static final int LABEL = 3; // 0x3
+ field public static final int PBC = 0; // 0x0
+ field public java.lang.String pin;
+ field public int setup;
+ }
+
+}
+
+package android.net.wifi.p2p {
+
+ public class WifiP2pConfig implements android.os.Parcelable {
+ ctor public WifiP2pConfig();
+ ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public java.lang.String deviceAddress;
+ field public int groupOwnerIntent;
+ field public android.net.wifi.WpsInfo wps;
+ }
+
+ public class WifiP2pDevice implements android.os.Parcelable {
+ ctor public WifiP2pDevice();
+ ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice);
+ method public int describeContents();
+ method public boolean isGroupOwner();
+ method public boolean isServiceDiscoveryCapable();
+ method public boolean wpsDisplaySupported();
+ method public boolean wpsKeypadSupported();
+ method public boolean wpsPbcSupported();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final int AVAILABLE = 3; // 0x3
+ field public static final int CONNECTED = 0; // 0x0
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int FAILED = 2; // 0x2
+ field public static final int INVITED = 1; // 0x1
+ field public static final int UNAVAILABLE = 4; // 0x4
+ field public java.lang.String deviceAddress;
+ field public java.lang.String deviceName;
+ field public java.lang.String primaryDeviceType;
+ field public java.lang.String secondaryDeviceType;
+ field public int status;
+ }
+
+ public class WifiP2pDeviceList implements android.os.Parcelable {
+ ctor public WifiP2pDeviceList();
+ ctor public WifiP2pDeviceList(android.net.wifi.p2p.WifiP2pDeviceList);
+ method public int describeContents();
+ method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getDeviceList();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public class WifiP2pGroup implements android.os.Parcelable {
+ ctor public WifiP2pGroup();
+ ctor public WifiP2pGroup(android.net.wifi.p2p.WifiP2pGroup);
+ method public int describeContents();
+ method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList();
+ method public java.lang.String getInterface();
+ method public java.lang.String getNetworkName();
+ method public android.net.wifi.p2p.WifiP2pDevice getOwner();
+ method public java.lang.String getPassphrase();
+ method public boolean isGroupOwner();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public class WifiP2pInfo implements android.os.Parcelable {
+ ctor public WifiP2pInfo();
+ ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo);
+ method public int describeContents();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public boolean groupFormed;
+ field public java.net.InetAddress groupOwnerAddress;
+ field public boolean isGroupOwner;
+ }
+
+ public class WifiP2pManager {
+ method public void cancelConnect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method public void connect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pConfig, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method public void createGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method public void discoverPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method public android.net.wifi.p2p.WifiP2pManager.Channel initialize(android.content.Context, android.os.Looper, android.net.wifi.p2p.WifiP2pManager.ChannelListener);
+ method public void removeGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+ method public void requestConnectionInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener);
+ method public void requestGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.GroupInfoListener);
+ method public void requestPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PeerListListener);
+ field public static final int BUSY = 2; // 0x2
+ field public static final int ERROR = 0; // 0x0
+ field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo";
+ field public static final java.lang.String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice";
+ field public static final java.lang.String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo";
+ field public static final java.lang.String EXTRA_WIFI_STATE = "wifi_p2p_state";
+ field public static final int P2P_UNSUPPORTED = 1; // 0x1
+ field public static final java.lang.String WIFI_P2P_CONNECTION_CHANGED_ACTION = "android.net.wifi.p2p.CONNECTION_STATE_CHANGE";
+ field public static final java.lang.String WIFI_P2P_PEERS_CHANGED_ACTION = "android.net.wifi.p2p.PEERS_CHANGED";
+ field public static final java.lang.String WIFI_P2P_STATE_CHANGED_ACTION = "android.net.wifi.p2p.STATE_CHANGED";
+ field public static final int WIFI_P2P_STATE_DISABLED = 1; // 0x1
+ field public static final int WIFI_P2P_STATE_ENABLED = 2; // 0x2
+ field public static final java.lang.String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION = "android.net.wifi.p2p.THIS_DEVICE_CHANGED";
+ }
+
+ public static abstract interface WifiP2pManager.ActionListener {
+ method public abstract void onFailure(int);
+ method public abstract void onSuccess();
+ }
+
+ public static class WifiP2pManager.Channel {
+ }
+
+ public static abstract interface WifiP2pManager.ChannelListener {
+ method public abstract void onChannelDisconnected();
+ }
+
+ public static abstract interface WifiP2pManager.ConnectionInfoListener {
+ method public abstract void onConnectionInfoAvailable(android.net.wifi.p2p.WifiP2pInfo);
+ }
+
+ public static abstract interface WifiP2pManager.GroupInfoListener {
+ method public abstract void onGroupInfoAvailable(android.net.wifi.p2p.WifiP2pGroup);
+ }
+
+ public static abstract interface WifiP2pManager.PeerListListener {
+ method public abstract void onPeersAvailable(android.net.wifi.p2p.WifiP2pDeviceList);
+ }
+
}
package android.nfc {
@@ -11650,6 +12600,9 @@ package android.nfc {
public final class NdefRecord implements android.os.Parcelable {
ctor public NdefRecord(short, byte[], byte[], byte[]);
ctor public NdefRecord(byte[]) throws android.nfc.FormatException;
+ method public static android.nfc.NdefRecord createApplicationRecord(java.lang.String);
+ method public static android.nfc.NdefRecord createUri(android.net.Uri);
+ method public static android.nfc.NdefRecord createUri(java.lang.String);
method public int describeContents();
method public byte[] getId();
method public byte[] getPayload();
@@ -11676,12 +12629,15 @@ package android.nfc {
public final class NfcAdapter {
method public void disableForegroundDispatch(android.app.Activity);
- method public void disableForegroundNdefPush(android.app.Activity);
+ method public deprecated void disableForegroundNdefPush(android.app.Activity);
method public void enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], java.lang.String[][]);
- method public void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
+ method public deprecated void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context);
method public static deprecated android.nfc.NfcAdapter getDefaultAdapter();
method public boolean isEnabled();
+ method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...);
+ method public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...);
+ method public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...);
field public static final java.lang.String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
field public static final java.lang.String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED";
field public static final java.lang.String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
@@ -11690,6 +12646,18 @@ package android.nfc {
field public static final java.lang.String EXTRA_TAG = "android.nfc.extra.TAG";
}
+ public static abstract interface NfcAdapter.CreateNdefMessageCallback {
+ method public abstract android.nfc.NdefMessage createNdefMessage(android.nfc.NfcEvent);
+ }
+
+ public static abstract interface NfcAdapter.OnNdefPushCompleteCallback {
+ method public abstract void onNdefPushComplete(android.nfc.NfcEvent);
+ }
+
+ public final class NfcEvent {
+ field public final android.nfc.NfcAdapter nfcAdapter;
+ }
+
public final class NfcManager {
method public android.nfc.NfcAdapter getDefaultAdapter();
}
@@ -11722,6 +12690,8 @@ package android.nfc.tech {
method public static android.nfc.tech.IsoDep get(android.nfc.Tag);
method public byte[] getHiLayerResponse();
method public byte[] getHistoricalBytes();
+ method public int getMaxTransceiveLength();
+ method public int getTimeout();
method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -11734,13 +12704,16 @@ package android.nfc.tech {
method public static android.nfc.tech.MifareClassic get(android.nfc.Tag);
method public int getBlockCount();
method public int getBlockCountInSector(int);
+ method public int getMaxTransceiveLength();
method public int getSectorCount();
method public int getSize();
+ method public int getTimeout();
method public int getType();
method public void increment(int, int) throws java.io.IOException;
method public byte[] readBlock(int) throws java.io.IOException;
method public void restore(int) throws java.io.IOException;
method public int sectorToBlock(int);
+ method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
method public void transfer(int) throws java.io.IOException;
method public void writeBlock(int, byte[]) throws java.io.IOException;
@@ -11760,8 +12733,11 @@ package android.nfc.tech {
public final class MifareUltralight extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.MifareUltralight get(android.nfc.Tag);
+ method public int getMaxTransceiveLength();
+ method public int getTimeout();
method public int getType();
method public byte[] readPages(int) throws java.io.IOException;
+ method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
method public void writePage(int, byte[]) throws java.io.IOException;
field public static final int PAGE_SIZE = 4; // 0x4
@@ -11796,13 +12772,17 @@ package android.nfc.tech {
public final class NfcA extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcA get(android.nfc.Tag);
method public byte[] getAtqa();
+ method public int getMaxTransceiveLength();
method public short getSak();
+ method public int getTimeout();
+ method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
}
public final class NfcB extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcB get(android.nfc.Tag);
method public byte[] getApplicationData();
+ method public int getMaxTransceiveLength();
method public byte[] getProtocolInfo();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -11810,13 +12790,17 @@ package android.nfc.tech {
public final class NfcF extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcF get(android.nfc.Tag);
method public byte[] getManufacturer();
+ method public int getMaxTransceiveLength();
method public byte[] getSystemCode();
+ method public int getTimeout();
+ method public void setTimeout(int);
method public byte[] transceive(byte[]) throws java.io.IOException;
}
public final class NfcV extends android.nfc.tech.BasicTagTechnology {
method public static android.nfc.tech.NfcV get(android.nfc.Tag);
method public byte getDsfId();
+ method public int getMaxTransceiveLength();
method public byte getResponseFlags();
method public byte[] transceive(byte[]) throws java.io.IOException;
}
@@ -13232,6 +14216,7 @@ package android.opengl {
}
public final class GLUtils {
+ method public static java.lang.String getEGLErrorString(int);
method public static int getInternalFormat(android.graphics.Bitmap);
method public static int getType(android.graphics.Bitmap);
method public static void texImage2D(int, int, int, android.graphics.Bitmap, int);
@@ -13249,6 +14234,7 @@ package android.opengl {
method public static void multiplyMM(float[], int, float[], int, float[], int);
method public static void multiplyMV(float[], int, float[], int, float[], int);
method public static void orthoM(float[], int, float, float, float, float, float, float);
+ method public static void perspectiveM(float[], int, float, float, float, float);
method public static void rotateM(float[], int, float[], int, float, float, float, float);
method public static void rotateM(float[], int, float, float, float, float);
method public static void scaleM(float[], int, float[], int, float, float, float);
@@ -13341,6 +14327,7 @@ package android.os {
method public static final long clearCallingIdentity();
method public void dump(java.io.FileDescriptor, java.lang.String[]);
method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
+ method public void dumpAsync(java.io.FileDescriptor, java.lang.String[]);
method public static final void flushPendingCommands();
method public static final int getCallingPid();
method public static final int getCallingUid();
@@ -13358,6 +14345,7 @@ package android.os {
public class Build {
ctor public Build();
+ method public static java.lang.String getRadioVersion();
field public static final java.lang.String BOARD;
field public static final java.lang.String BOOTLOADER;
field public static final java.lang.String BRAND;
@@ -13372,7 +14360,7 @@ package android.os {
field public static final java.lang.String MANUFACTURER;
field public static final java.lang.String MODEL;
field public static final java.lang.String PRODUCT;
- field public static final java.lang.String RADIO;
+ field public static final deprecated java.lang.String RADIO;
field public static final java.lang.String SERIAL;
field public static final java.lang.String TAGS;
field public static final long TIME;
@@ -13405,6 +14393,8 @@ package android.os {
field public static final int GINGERBREAD_MR1 = 10; // 0xa
field public static final int HONEYCOMB = 11; // 0xb
field public static final int HONEYCOMB_MR1 = 12; // 0xc
+ field public static final int HONEYCOMB_MR2 = 13; // 0xd
+ field public static final int ICE_CREAM_SANDWICH = 14; // 0xe
}
public final class Bundle implements java.lang.Cloneable android.os.Parcelable {
@@ -13546,6 +14536,7 @@ package android.os {
method public static long getNativeHeapAllocatedSize();
method public static long getNativeHeapFreeSize();
method public static long getNativeHeapSize();
+ method public static long getPss();
method public static int getThreadAllocCount();
method public static int getThreadAllocSize();
method public static deprecated int getThreadExternalAllocCount();
@@ -13601,6 +14592,10 @@ package android.os {
public static class Debug.MemoryInfo implements android.os.Parcelable {
ctor public Debug.MemoryInfo();
method public int describeContents();
+ method public static java.lang.String getOtherLabel(int);
+ method public int getOtherPrivateDirty(int);
+ method public int getOtherPss(int);
+ method public int getOtherSharedDirty(int);
method public int getTotalPrivateDirty();
method public int getTotalPss();
method public int getTotalSharedDirty();
@@ -13709,6 +14704,7 @@ package android.os {
method public void dispatchMessage(android.os.Message);
method public final void dump(android.util.Printer, java.lang.String);
method public final android.os.Looper getLooper();
+ method public java.lang.String getMessageName(android.os.Message);
method public void handleMessage(android.os.Message);
method public final boolean hasMessages(int);
method public final boolean hasMessages(int, java.lang.Object);
@@ -13751,6 +14747,7 @@ package android.os {
public abstract interface IBinder {
method public abstract void dump(java.io.FileDescriptor, java.lang.String[]) throws android.os.RemoteException;
+ method public abstract void dumpAsync(java.io.FileDescriptor, java.lang.String[]) throws android.os.RemoteException;
method public abstract java.lang.String getInterfaceDescriptor() throws android.os.RemoteException;
method public abstract boolean isBinderAlive();
method public abstract void linkToDeath(android.os.IBinder.DeathRecipient, int) throws android.os.RemoteException;
@@ -13764,6 +14761,7 @@ package android.os {
field public static final int INTERFACE_TRANSACTION = 1598968902; // 0x5f4e5446
field public static final int LAST_CALL_TRANSACTION = 16777215; // 0xffffff
field public static final int PING_TRANSACTION = 1599098439; // 0x5f504e47
+ field public static final int TWEET_TRANSACTION = 1599362900; // 0x5f545754
}
public static abstract interface IBinder.DeathRecipient {
@@ -13776,13 +14774,13 @@ package android.os {
public class Looper {
method public void dump(android.util.Printer, java.lang.String);
- method public static final synchronized android.os.Looper getMainLooper();
+ method public static synchronized android.os.Looper getMainLooper();
method public java.lang.Thread getThread();
- method public static final void loop();
- method public static final android.os.Looper myLooper();
- method public static final android.os.MessageQueue myQueue();
- method public static final void prepare();
- method public static final void prepareMainLooper();
+ method public static void loop();
+ method public static android.os.Looper myLooper();
+ method public static android.os.MessageQueue myQueue();
+ method public static void prepare();
+ method public static void prepareMainLooper();
method public void quit();
method public void setMessageLogging(android.util.Printer);
}
@@ -13960,10 +14958,15 @@ package android.os {
public class ParcelFileDescriptor implements android.os.Parcelable {
ctor public ParcelFileDescriptor(android.os.ParcelFileDescriptor);
+ method public static android.os.ParcelFileDescriptor adoptFd(int);
method public void close() throws java.io.IOException;
method public static android.os.ParcelFileDescriptor[] createPipe() throws java.io.IOException;
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);
method public int getFd();
method public java.io.FileDescriptor getFileDescriptor();
@@ -14010,6 +15013,10 @@ package android.os {
field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
}
+ public static abstract interface Parcelable.ClassLoaderCreator implements android.os.Parcelable.Creator {
+ method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
+ }
+
public static abstract interface Parcelable.Creator {
method public abstract T createFromParcel(android.os.Parcel);
method public abstract T[] newArray(int);
@@ -14039,7 +15046,7 @@ package android.os {
field public static final int FULL_WAKE_LOCK = 26; // 0x1a
field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
- field public static final int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa
+ field public static final deprecated int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa
field public static final int SCREEN_DIM_WAKE_LOCK = 6; // 0x6
}
@@ -14065,7 +15072,7 @@ package android.os {
method public static final void sendSignal(int, int);
method public static final void setThreadPriority(int, int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
method public static final void setThreadPriority(int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
- method public static final boolean supportsProcesses();
+ method public static final deprecated boolean supportsProcesses();
field public static final int BLUETOOTH_GID = 2000; // 0x7d0
field public static final int FIRST_APPLICATION_UID = 10000; // 0x2710
field public static final int LAST_APPLICATION_UID = 99999; // 0x1869f
@@ -14089,6 +15096,7 @@ package android.os {
public class RecoverySystem {
ctor public RecoverySystem();
method public static void installPackage(android.content.Context, java.io.File) throws java.io.IOException;
+ method public static void rebootWipeCache(android.content.Context) throws java.io.IOException;
method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException;
method public static void verifyPackage(java.io.File, android.os.RecoverySystem.ProgressListener, java.io.File) throws java.security.GeneralSecurityException, java.io.IOException;
}
@@ -14255,7 +15263,7 @@ package android.os.storage {
package android.preference {
- public class CheckBoxPreference extends android.preference.TwoStatePreference {
+ public class CheckBoxPreference extends android.preference.TwoStatePreference {
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
ctor public CheckBoxPreference(android.content.Context);
@@ -14361,6 +15369,7 @@ package android.preference {
method public boolean getShouldDisableView();
method public java.lang.CharSequence getSummary();
method public java.lang.CharSequence getTitle();
+ method public int getTitleRes();
method public android.view.View getView(android.view.View, android.view.ViewGroup);
method public int getWidgetLayoutResource();
method public boolean hasKey();
@@ -14442,6 +15451,7 @@ package android.preference {
method public boolean isMultiPane();
method public void loadHeadersFromResource(int, java.util.List<android.preference.PreferenceActivity.Header>);
method public void onBuildHeaders(java.util.List<android.preference.PreferenceActivity.Header>);
+ method public android.content.Intent onBuildStartFragmentIntent(java.lang.String, android.os.Bundle, int, int);
method public android.preference.PreferenceActivity.Header onGetInitialHeader();
method public android.preference.PreferenceActivity.Header onGetNewHeader();
method public void onHeaderClick(android.preference.PreferenceActivity.Header, int);
@@ -14456,11 +15466,14 @@ package android.preference {
method public void startPreferenceFragment(android.app.Fragment, boolean);
method public void startPreferencePanel(java.lang.String, android.os.Bundle, int, java.lang.CharSequence, android.app.Fragment, int);
method public void startWithFragment(java.lang.String, android.os.Bundle, android.app.Fragment, int);
+ method public void startWithFragment(java.lang.String, android.os.Bundle, android.app.Fragment, int, int, int);
method public void switchToHeader(java.lang.String, android.os.Bundle);
method public void switchToHeader(android.preference.PreferenceActivity.Header);
field public static final java.lang.String EXTRA_NO_HEADERS = ":android:no_headers";
field public static final java.lang.String EXTRA_SHOW_FRAGMENT = ":android:show_fragment";
field public static final java.lang.String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":android:show_fragment_args";
+ field public static final java.lang.String EXTRA_SHOW_FRAGMENT_SHORT_TITLE = ":android:show_fragment_short_title";
+ field public static final java.lang.String EXTRA_SHOW_FRAGMENT_TITLE = ":android:show_fragment_title";
field public static final long HEADER_ID_UNDEFINED = -1L; // 0xffffffffffffffffL
}
@@ -14581,6 +15594,34 @@ package android.preference {
method public void setShowSilent(boolean);
}
+ public class SwitchPreference extends android.preference.TwoStatePreference {
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
+ ctor public SwitchPreference(android.content.Context);
+ method public java.lang.CharSequence getSwitchTextOff();
+ method public java.lang.CharSequence getSwitchTextOn();
+ method public void setSwitchTextOff(java.lang.CharSequence);
+ method public void setSwitchTextOff(int);
+ method public void setSwitchTextOn(java.lang.CharSequence);
+ method public void setSwitchTextOn(int);
+ }
+
+ public abstract class TwoStatePreference extends android.preference.Preference {
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+ ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+ ctor public TwoStatePreference(android.content.Context);
+ method public boolean getDisableDependentsState();
+ method public java.lang.CharSequence getSummaryOff();
+ method public java.lang.CharSequence getSummaryOn();
+ method public boolean isChecked();
+ method public void setChecked(boolean);
+ method public void setDisableDependentsState(boolean);
+ method public void setSummaryOff(java.lang.CharSequence);
+ method public void setSummaryOff(int);
+ method public void setSummaryOn(java.lang.CharSequence);
+ method public void setSummaryOn(int);
+ }
+
}
package android.provider {
@@ -14654,6 +15695,258 @@ package android.provider {
field public static final deprecated java.lang.String URL = "url";
}
+ public final class CalendarContract {
+ field public static final java.lang.String ACCOUNT_TYPE_LOCAL = "LOCAL";
+ field public static final java.lang.String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER";
+ field public static final java.lang.String AUTHORITY = "com.android.calendar";
+ field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String EXTRA_EVENT_ALL_DAY = "allDay";
+ field public static final java.lang.String EXTRA_EVENT_BEGIN_TIME = "beginTime";
+ field public static final java.lang.String EXTRA_EVENT_END_TIME = "endTime";
+ }
+
+ public static final class CalendarContract.Attendees implements android.provider.BaseColumns android.provider.CalendarContract.AttendeesColumns android.provider.CalendarContract.EventsColumns {
+ method public static final android.database.Cursor query(android.content.ContentResolver, long, java.lang.String[]);
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.AttendeesColumns {
+ field public static final java.lang.String ATTENDEE_EMAIL = "attendeeEmail";
+ field public static final java.lang.String ATTENDEE_NAME = "attendeeName";
+ field public static final java.lang.String ATTENDEE_RELATIONSHIP = "attendeeRelationship";
+ field public static final java.lang.String ATTENDEE_STATUS = "attendeeStatus";
+ field public static final int ATTENDEE_STATUS_ACCEPTED = 1; // 0x1
+ field public static final int ATTENDEE_STATUS_DECLINED = 2; // 0x2
+ field public static final int ATTENDEE_STATUS_INVITED = 3; // 0x3
+ field public static final int ATTENDEE_STATUS_NONE = 0; // 0x0
+ field public static final int ATTENDEE_STATUS_TENTATIVE = 4; // 0x4
+ field public static final java.lang.String ATTENDEE_TYPE = "attendeeType";
+ field public static final java.lang.String EVENT_ID = "event_id";
+ field public static final int RELATIONSHIP_ATTENDEE = 1; // 0x1
+ field public static final int RELATIONSHIP_NONE = 0; // 0x0
+ field public static final int RELATIONSHIP_ORGANIZER = 2; // 0x2
+ field public static final int RELATIONSHIP_PERFORMER = 3; // 0x3
+ field public static final int RELATIONSHIP_SPEAKER = 4; // 0x4
+ field public static final int TYPE_NONE = 0; // 0x0
+ field public static final int TYPE_OPTIONAL = 2; // 0x2
+ field public static final int TYPE_REQUIRED = 1; // 0x1
+ }
+
+ public static final class CalendarContract.CalendarAlerts implements android.provider.BaseColumns android.provider.CalendarContract.CalendarAlertsColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri CONTENT_URI_BY_INSTANCE;
+ }
+
+ protected static abstract interface CalendarContract.CalendarAlertsColumns {
+ field public static final java.lang.String ALARM_TIME = "alarmTime";
+ field public static final java.lang.String BEGIN = "begin";
+ field public static final java.lang.String CREATION_TIME = "creationTime";
+ field public static final java.lang.String DEFAULT_SORT_ORDER = "begin ASC,title ASC";
+ field public static final java.lang.String END = "end";
+ field public static final java.lang.String EVENT_ID = "event_id";
+ field public static final java.lang.String MINUTES = "minutes";
+ field public static final java.lang.String NOTIFY_TIME = "notifyTime";
+ field public static final java.lang.String RECEIVED_TIME = "receivedTime";
+ field public static final java.lang.String STATE = "state";
+ field public static final int STATE_DISMISSED = 2; // 0x2
+ field public static final int STATE_FIRED = 1; // 0x1
+ field public static final int STATE_SCHEDULED = 0; // 0x0
+ }
+
+ public static final class CalendarContract.CalendarCache implements android.provider.CalendarContract.CalendarCacheColumns {
+ field public static final java.lang.String KEY_TIMEZONE_INSTANCES = "timezoneInstances";
+ field public static final java.lang.String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious";
+ field public static final java.lang.String KEY_TIMEZONE_TYPE = "timezoneType";
+ field public static final java.lang.String TIMEZONE_TYPE_AUTO = "auto";
+ field public static final java.lang.String TIMEZONE_TYPE_HOME = "home";
+ field public static final android.net.Uri URI;
+ }
+
+ protected static abstract interface CalendarContract.CalendarCacheColumns {
+ field public static final java.lang.String KEY = "key";
+ field public static final java.lang.String VALUE = "value";
+ }
+
+ protected static abstract interface CalendarContract.CalendarColumns {
+ field public static final java.lang.String ALLOWED_REMINDERS = "allowedReminders";
+ field public static final java.lang.String CALENDAR_ACCESS_LEVEL = "calendar_access_level";
+ field public static final java.lang.String CALENDAR_COLOR = "calendar_color";
+ field public static final java.lang.String CALENDAR_DISPLAY_NAME = "calendar_displayName";
+ field public static final java.lang.String CALENDAR_TIME_ZONE = "calendar_timezone";
+ field public static final int CAL_ACCESS_CONTRIBUTOR = 500; // 0x1f4
+ field public static final int CAL_ACCESS_EDITOR = 600; // 0x258
+ field public static final int CAL_ACCESS_FREEBUSY = 100; // 0x64
+ field public static final int CAL_ACCESS_NONE = 0; // 0x0
+ field public static final int CAL_ACCESS_OVERRIDE = 400; // 0x190
+ field public static final int CAL_ACCESS_OWNER = 700; // 0x2bc
+ field public static final int CAL_ACCESS_READ = 200; // 0xc8
+ field public static final int CAL_ACCESS_RESPOND = 300; // 0x12c
+ field public static final int CAL_ACCESS_ROOT = 800; // 0x320
+ field public static final java.lang.String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone";
+ field public static final java.lang.String CAN_ORGANIZER_RESPOND = "canOrganizerRespond";
+ field public static final java.lang.String MAX_REMINDERS = "maxReminders";
+ field public static final java.lang.String OWNER_ACCOUNT = "ownerAccount";
+ field public static final java.lang.String SYNC_EVENTS = "sync_events";
+ field public static final java.lang.String VISIBLE = "visible";
+ }
+
+ public static final class CalendarContract.CalendarEntity implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+ method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.CalendarSyncColumns {
+ field public static final java.lang.String CAL_SYNC1 = "cal_sync1";
+ field public static final java.lang.String CAL_SYNC10 = "cal_sync10";
+ field public static final java.lang.String CAL_SYNC2 = "cal_sync2";
+ field public static final java.lang.String CAL_SYNC3 = "cal_sync3";
+ field public static final java.lang.String CAL_SYNC4 = "cal_sync4";
+ field public static final java.lang.String CAL_SYNC5 = "cal_sync5";
+ field public static final java.lang.String CAL_SYNC6 = "cal_sync6";
+ field public static final java.lang.String CAL_SYNC7 = "cal_sync7";
+ field public static final java.lang.String CAL_SYNC8 = "cal_sync8";
+ field public static final java.lang.String CAL_SYNC9 = "cal_sync9";
+ }
+
+ public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+ field public static final java.lang.String CALENDAR_LOCATION = "calendar_location";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String DEFAULT_SORT_ORDER = "calendar_displayName";
+ field public static final java.lang.String NAME = "name";
+ }
+
+ public static final class CalendarContract.EventDays implements android.provider.CalendarContract.EventDaysColumns {
+ method public static final android.database.Cursor query(android.content.ContentResolver, int, int, java.lang.String[]);
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.EventDaysColumns {
+ field public static final java.lang.String ENDDAY = "endDay";
+ field public static final java.lang.String STARTDAY = "startDay";
+ }
+
+ public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+ field public static final android.net.Uri CONTENT_EXCEPTION_URI;
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.EventsColumns {
+ field public static final int ACCESS_CONFIDENTIAL = 1; // 0x1
+ field public static final int ACCESS_DEFAULT = 0; // 0x0
+ field public static final java.lang.String ACCESS_LEVEL = "accessLevel";
+ field public static final int ACCESS_PRIVATE = 2; // 0x2
+ field public static final int ACCESS_PUBLIC = 3; // 0x3
+ field public static final java.lang.String ALL_DAY = "allDay";
+ field public static final java.lang.String AVAILABILITY = "availability";
+ field public static final int AVAILABILITY_BUSY = 0; // 0x0
+ field public static final int AVAILABILITY_FREE = 1; // 0x1
+ field public static final java.lang.String CALENDAR_ID = "calendar_id";
+ field public static final java.lang.String CAN_INVITE_OTHERS = "canInviteOthers";
+ field public static final java.lang.String DESCRIPTION = "description";
+ field public static final java.lang.String DTEND = "dtend";
+ field public static final java.lang.String DTSTART = "dtstart";
+ field public static final java.lang.String DURATION = "duration";
+ field public static final java.lang.String EVENT_COLOR = "eventColor";
+ field public static final java.lang.String EVENT_END_TIMEZONE = "eventEndTimezone";
+ field public static final java.lang.String EVENT_LOCATION = "eventLocation";
+ field public static final java.lang.String EVENT_TIMEZONE = "eventTimezone";
+ field public static final java.lang.String EXDATE = "exdate";
+ field public static final java.lang.String EXRULE = "exrule";
+ field public static final java.lang.String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers";
+ field public static final java.lang.String GUESTS_CAN_MODIFY = "guestsCanModify";
+ field public static final java.lang.String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests";
+ field public static final java.lang.String HAS_ALARM = "hasAlarm";
+ field public static final java.lang.String HAS_ATTENDEE_DATA = "hasAttendeeData";
+ field public static final java.lang.String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties";
+ field public static final java.lang.String LAST_DATE = "lastDate";
+ field public static final java.lang.String LAST_SYNCED = "lastSynced";
+ field public static final java.lang.String ORGANIZER = "organizer";
+ field public static final java.lang.String ORIGINAL_ALL_DAY = "originalAllDay";
+ field public static final java.lang.String ORIGINAL_ID = "original_id";
+ field public static final java.lang.String ORIGINAL_INSTANCE_TIME = "originalInstanceTime";
+ field public static final java.lang.String ORIGINAL_SYNC_ID = "original_sync_id";
+ field public static final java.lang.String RDATE = "rdate";
+ field public static final java.lang.String RRULE = "rrule";
+ field public static final java.lang.String SELF_ATTENDEE_STATUS = "selfAttendeeStatus";
+ field public static final java.lang.String STATUS = "eventStatus";
+ field public static final int STATUS_CANCELED = 2; // 0x2
+ field public static final int STATUS_CONFIRMED = 1; // 0x1
+ field public static final int STATUS_TENTATIVE = 0; // 0x0
+ field public static final java.lang.String SYNC_DATA1 = "sync_data1";
+ field public static final java.lang.String SYNC_DATA10 = "sync_data10";
+ field public static final java.lang.String SYNC_DATA2 = "sync_data2";
+ field public static final java.lang.String SYNC_DATA3 = "sync_data3";
+ field public static final java.lang.String SYNC_DATA4 = "sync_data4";
+ field public static final java.lang.String SYNC_DATA5 = "sync_data5";
+ field public static final java.lang.String SYNC_DATA6 = "sync_data6";
+ field public static final java.lang.String SYNC_DATA7 = "sync_data7";
+ field public static final java.lang.String SYNC_DATA8 = "sync_data8";
+ field public static final java.lang.String SYNC_DATA9 = "sync_data9";
+ field public static final java.lang.String TITLE = "title";
+ }
+
+ public static final class CalendarContract.EventsEntity implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+ method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentResolver);
+ method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentProviderClient);
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ public static final class CalendarContract.ExtendedProperties implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.ExtendedPropertiesColumns {
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.ExtendedPropertiesColumns {
+ field public static final java.lang.String EVENT_ID = "event_id";
+ field public static final java.lang.String NAME = "name";
+ field public static final java.lang.String VALUE = "value";
+ }
+
+ public static final class CalendarContract.Instances implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+ method public static final android.database.Cursor query(android.content.ContentResolver, java.lang.String[], long, long);
+ method public static final android.database.Cursor query(android.content.ContentResolver, java.lang.String[], long, long, java.lang.String);
+ field public static final java.lang.String BEGIN = "begin";
+ field public static final android.net.Uri CONTENT_BY_DAY_URI;
+ field public static final android.net.Uri CONTENT_SEARCH_BY_DAY_URI;
+ field public static final android.net.Uri CONTENT_SEARCH_URI;
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String END = "end";
+ field public static final java.lang.String END_DAY = "endDay";
+ field public static final java.lang.String END_MINUTE = "endMinute";
+ field public static final java.lang.String EVENT_ID = "event_id";
+ field public static final java.lang.String START_DAY = "startDay";
+ field public static final java.lang.String START_MINUTE = "startMinute";
+ }
+
+ public static final class CalendarContract.Reminders implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.RemindersColumns {
+ method public static final android.database.Cursor query(android.content.ContentResolver, long, java.lang.String[]);
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
+ protected static abstract interface CalendarContract.RemindersColumns {
+ field public static final java.lang.String EVENT_ID = "event_id";
+ field public static final java.lang.String METHOD = "method";
+ field public static final int METHOD_ALERT = 1; // 0x1
+ field public static final int METHOD_DEFAULT = 0; // 0x0
+ field public static final int METHOD_EMAIL = 2; // 0x2
+ field public static final int METHOD_SMS = 3; // 0x3
+ field public static final java.lang.String MINUTES = "minutes";
+ field public static final int MINUTES_DEFAULT = -1; // 0xffffffff
+ }
+
+ protected static abstract interface CalendarContract.SyncColumns implements android.provider.CalendarContract.CalendarSyncColumns {
+ field public static final java.lang.String ACCOUNT_NAME = "account_name";
+ field public static final java.lang.String ACCOUNT_TYPE = "account_type";
+ field public static final java.lang.String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate";
+ field public static final java.lang.String DELETED = "deleted";
+ field public static final java.lang.String DIRTY = "dirty";
+ field public static final java.lang.String _SYNC_ID = "_sync_id";
+ }
+
+ public static final class CalendarContract.SyncState implements android.provider.SyncStateContract.Columns {
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
public class CallLog {
ctor public CallLog();
field public static final java.lang.String AUTHORITY = "call_log";
@@ -14674,6 +15967,7 @@ package android.provider {
field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC";
field public static final java.lang.String DURATION = "duration";
field public static final int INCOMING_TYPE = 1; // 0x1
+ field public static final java.lang.String IS_READ = "is_read";
field public static final int MISSED_TYPE = 3; // 0x3
field public static final java.lang.String NEW = "new";
field public static final java.lang.String NUMBER = "number";
@@ -14977,11 +16271,14 @@ package android.provider {
public final class ContactsContract {
ctor public ContactsContract();
+ method public static boolean isProfileId(long);
field public static final java.lang.String AUTHORITY = "com.android.contacts";
field public static final android.net.Uri AUTHORITY_URI;
field public static final java.lang.String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
field public static final java.lang.String DIRECTORY_PARAM_KEY = "directory";
field public static final java.lang.String LIMIT_PARAM_KEY = "limit";
+ field public static final java.lang.String PRIMARY_ACCOUNT_NAME = "name_for_primary_account";
+ field public static final java.lang.String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account";
}
public static final class ContactsContract.AggregationExceptions implements android.provider.BaseColumns {
@@ -15047,6 +16344,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);
@@ -15134,6 +16437,7 @@ package android.provider {
public static final class ContactsContract.CommonDataKinds.Photo implements android.provider.ContactsContract.DataColumnsWithJoins {
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo";
field public static final java.lang.String PHOTO = "data15";
+ field public static final java.lang.String PHOTO_FILE_ID = "data14";
}
public static final class ContactsContract.CommonDataKinds.Relation implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
@@ -15244,6 +16548,7 @@ package android.provider {
method public static android.net.Uri getLookupUri(long, java.lang.String);
method public static android.net.Uri lookupContact(android.content.ContentResolver, android.net.Uri);
method public static void markAsContacted(android.content.ContentResolver, long);
+ method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri, boolean);
method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri);
field public static final android.net.Uri CONTENT_FILTER_URI;
field public static final android.net.Uri CONTENT_GROUP_URI;
@@ -15273,14 +16578,22 @@ package android.provider {
public static final class ContactsContract.Contacts.Photo implements android.provider.BaseColumns android.provider.ContactsContract.DataColumnsWithJoins {
field public static final java.lang.String CONTENT_DIRECTORY = "photo";
+ field public static final java.lang.String DISPLAY_PHOTO = "display_photo";
field public static final java.lang.String PHOTO = "data15";
+ field public static final java.lang.String PHOTO_FILE_ID = "data14";
+ }
+
+ public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
+ field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
}
protected static abstract interface ContactsContract.ContactsColumns {
field public static final java.lang.String DISPLAY_NAME = "display_name";
field public static final java.lang.String HAS_PHONE_NUMBER = "has_phone_number";
field public static final java.lang.String IN_VISIBLE_GROUP = "in_visible_group";
+ field public static final java.lang.String IS_USER_PROFILE = "is_user_profile";
field public static final java.lang.String LOOKUP_KEY = "lookup";
+ field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
field public static final java.lang.String PHOTO_ID = "photo_id";
field public static final java.lang.String PHOTO_THUMBNAIL_URI = "photo_thumb_uri";
field public static final java.lang.String PHOTO_URI = "photo_uri";
@@ -15323,6 +16636,15 @@ package android.provider {
protected static abstract interface ContactsContract.DataColumnsWithJoins implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns {
}
+ public static final class ContactsContract.DataUsageFeedback {
+ ctor public ContactsContract.DataUsageFeedback();
+ field public static final android.net.Uri FEEDBACK_URI;
+ field public static final java.lang.String USAGE_TYPE = "type";
+ field public static final java.lang.String USAGE_TYPE_CALL = "call";
+ field public static final java.lang.String USAGE_TYPE_LONG_TEXT = "long_text";
+ field public static final java.lang.String USAGE_TYPE_SHORT_TEXT = "short_text";
+ }
+
public static final class ContactsContract.Directory implements android.provider.BaseColumns {
method public static void notifyDirectoryChange(android.content.ContentResolver);
field public static final java.lang.String ACCOUNT_NAME = "accountName";
@@ -15360,6 +16682,13 @@ package android.provider {
field public static final int UNDEFINED = 0; // 0x0
}
+ public static final class ContactsContract.DisplayPhoto {
+ field public static final android.net.Uri CONTENT_MAX_DIMENSIONS_URI;
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String DISPLAY_MAX_DIM = "display_max_dim";
+ field public static final java.lang.String THUMBNAIL_MAX_DIM = "thumbnail_max_dim";
+ }
+
public static abstract interface ContactsContract.FullNameStyle {
field public static final int CHINESE = 3; // 0x3
field public static final int CJK = 2; // 0x2
@@ -15379,6 +16708,7 @@ package android.provider {
protected static abstract interface ContactsContract.GroupsColumns {
field public static final java.lang.String AUTO_ADD = "auto_add";
+ field public static final java.lang.String DATA_SET = "data_set";
field public static final java.lang.String DELETED = "deleted";
field public static final java.lang.String FAVORITES = "favorites";
field public static final java.lang.String GROUP_IS_READ_ONLY = "group_is_read_only";
@@ -15396,6 +16726,7 @@ package android.provider {
field public static final java.lang.String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE";
field public static final java.lang.String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
field public static final java.lang.String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE";
+ field public static final java.lang.String INVITE_CONTACT = "com.android.contacts.action.INVITE_CONTACT";
field public static final java.lang.String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
field public static final java.lang.String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
field public static final java.lang.String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
@@ -15463,6 +16794,22 @@ package android.provider {
field public static final java.lang.String PROTOCOL = "protocol";
}
+ public static final class ContactsContract.Profile implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+ field public static final android.net.Uri CONTENT_RAW_CONTACTS_URI;
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri CONTENT_VCARD_URI;
+ field public static final long MIN_ID = 9223372034707292160L; // 0x7fffffff80000000L
+ }
+
+ public static final class ContactsContract.ProfileSyncState implements android.provider.SyncStateContract.Columns {
+ method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+ method public static android.util.Pair<android.net.Uri, byte[]> getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+ method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]);
+ method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException;
+ field public static final java.lang.String CONTENT_DIRECTORY = "syncstate";
+ field public static final android.net.Uri CONTENT_URI;
+ }
+
public static final class ContactsContract.QuickContact {
ctor public ContactsContract.QuickContact();
method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, java.lang.String[]);
@@ -15488,22 +16835,33 @@ package android.provider {
field public static final java.lang.String CONTENT_DIRECTORY = "data";
}
+ public static final class ContactsContract.RawContacts.DisplayPhoto {
+ field public static final java.lang.String CONTENT_DIRECTORY = "display_photo";
+ }
+
public static final class ContactsContract.RawContacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
field public static final java.lang.String CONTENT_DIRECTORY = "entity";
field public static final java.lang.String DATA_ID = "data_id";
}
+ public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+ field public static final java.lang.String CONTENT_DIRECTORY = "stream_items";
+ }
+
protected static abstract interface ContactsContract.RawContactsColumns {
field public static final java.lang.String AGGREGATION_MODE = "aggregation_mode";
field public static final java.lang.String CONTACT_ID = "contact_id";
+ field public static final java.lang.String DATA_SET = "data_set";
field public static final java.lang.String DELETED = "deleted";
field public static final java.lang.String RAW_CONTACT_IS_READ_ONLY = "raw_contact_is_read_only";
+ field public static final java.lang.String RAW_CONTACT_IS_USER_PROFILE = "raw_contact_is_user_profile";
}
public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns {
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact_entity";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DATA_ID = "data_id";
+ field public static final android.net.Uri PROFILE_CONTENT_URI;
}
public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns {
@@ -15516,6 +16874,7 @@ package android.provider {
field public static final java.lang.String ACCOUNT_NAME = "account_name";
field public static final java.lang.String ACCOUNT_TYPE = "account_type";
field public static final java.lang.String ANY_UNSYNCED = "any_unsynced";
+ field public static final java.lang.String DATA_SET = "data_set";
field public static final java.lang.String SHOULD_SYNC = "should_sync";
field public static final java.lang.String UNGROUPED_COUNT = "summ_count";
field public static final java.lang.String UNGROUPED_VISIBLE = "ungrouped_visible";
@@ -15549,6 +16908,57 @@ package android.provider {
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/status-update";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/status-update";
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri PROFILE_CONTENT_URI;
+ }
+
+ public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+ field public static final java.lang.String PHOTO = "photo";
+ }
+
+ protected static abstract interface ContactsContract.StreamItemPhotosColumns {
+ field public static final java.lang.String PHOTO_FILE_ID = "photo_file_id";
+ field public static final java.lang.String PHOTO_URI = "photo_uri";
+ field public static final java.lang.String SORT_INDEX = "sort_index";
+ field public static final java.lang.String STREAM_ITEM_ID = "stream_item_id";
+ field public static final java.lang.String SYNC1 = "stream_item_photo_sync1";
+ field public static final java.lang.String SYNC2 = "stream_item_photo_sync2";
+ field public static final java.lang.String SYNC3 = "stream_item_photo_sync3";
+ field public static final java.lang.String SYNC4 = "stream_item_photo_sync4";
+ }
+
+ public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
+ field public static final android.net.Uri CONTENT_LIMIT_URI;
+ field public static final android.net.Uri CONTENT_PHOTO_URI;
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String MAX_ITEMS = "max_items";
+ }
+
+ public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+ field public static final java.lang.String CONTENT_DIRECTORY = "photo";
+ field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
+ field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
+ }
+
+ protected static abstract interface ContactsContract.StreamItemsColumns {
+ field public static final java.lang.String ACCOUNT_NAME = "account_name";
+ field public static final java.lang.String ACCOUNT_TYPE = "account_type";
+ field public static final java.lang.String COMMENTS = "comments";
+ field public static final java.lang.String CONTACT_ID = "contact_id";
+ field public static final java.lang.String CONTACT_LOOKUP_KEY = "contact_lookup";
+ field public static final java.lang.String DATA_SET = "data_set";
+ field public static final java.lang.String RAW_CONTACT_ID = "raw_contact_id";
+ field public static final java.lang.String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
+ field public static final java.lang.String RES_ICON = "icon";
+ field public static final java.lang.String RES_LABEL = "label";
+ field public static final java.lang.String RES_PACKAGE = "res_package";
+ field public static final java.lang.String SYNC1 = "stream_item_sync1";
+ field public static final java.lang.String SYNC2 = "stream_item_sync2";
+ field public static final java.lang.String SYNC3 = "stream_item_sync3";
+ field public static final java.lang.String SYNC4 = "stream_item_sync4";
+ field public static final java.lang.String TEXT = "text";
+ field public static final java.lang.String TIMESTAMP = "timestamp";
}
protected static abstract interface ContactsContract.SyncColumns implements android.provider.ContactsContract.BaseSyncColumns {
@@ -15568,7 +16978,7 @@ package android.provider {
field public static final android.net.Uri CONTENT_URI;
}
- public final class LiveFolders implements android.provider.BaseColumns {
+ public final deprecated class LiveFolders implements android.provider.BaseColumns {
field public static final java.lang.String ACTION_CREATE_LIVE_FOLDER = "android.intent.action.CREATE_LIVE_FOLDER";
field public static final java.lang.String DESCRIPTION = "description";
field public static final int DISPLAY_MODE_GRID = 1; // 0x1
@@ -15926,6 +17336,7 @@ package android.provider {
field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS";
field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS";
+ field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";
field public static final java.lang.String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
field public static final java.lang.String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
field public static final java.lang.String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
@@ -15971,7 +17382,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";
@@ -15994,14 +17405,15 @@ package android.provider {
field public static final java.lang.String SELECTED_INPUT_METHOD_SUBTYPE = "selected_input_method_subtype";
field public static final java.lang.String SETTINGS_CLASSNAME = "settings_classname";
field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_secure_version";
- field public static final java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country";
- field public static final java.lang.String TTS_DEFAULT_LANG = "tts_default_lang";
+ field public static final java.lang.String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
+ field public static final deprecated java.lang.String TTS_DEFAULT_COUNTRY = "tts_default_country";
+ field public static final deprecated java.lang.String TTS_DEFAULT_LANG = "tts_default_lang";
field public static final java.lang.String TTS_DEFAULT_PITCH = "tts_default_pitch";
field public static final java.lang.String TTS_DEFAULT_RATE = "tts_default_rate";
field public static final java.lang.String TTS_DEFAULT_SYNTH = "tts_default_synth";
- field public static final java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant";
+ field public static final deprecated java.lang.String TTS_DEFAULT_VARIANT = "tts_default_variant";
field public static final java.lang.String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
- field public static final java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults";
+ field public static final deprecated java.lang.String TTS_USE_DEFAULTS = "tts_use_defaults";
field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
@@ -16010,18 +17422,18 @@ package android.provider {
field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
field public static final java.lang.String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
field public static final java.lang.String WIFI_ON = "wifi_on";
- field public static final java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
- field public static final java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
- field public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
- field public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
- field public static final java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
- field public static final java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
- field public static final java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
- field public static final java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
- field public static final java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
- field public static final java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
- field public static final java.lang.String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
+ field public static final deprecated java.lang.String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
}
public static class Settings.SettingNotFoundException extends android.util.AndroidException {
@@ -16090,6 +17502,7 @@ package android.provider {
field public static final deprecated java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
field public static final java.lang.String RADIO_BLUETOOTH = "bluetooth";
field public static final java.lang.String RADIO_CELL = "cell";
+ field public static final java.lang.String RADIO_NFC = "nfc";
field public static final java.lang.String RADIO_WIFI = "wifi";
field public static final java.lang.String RINGTONE = "ringtone";
field public static final java.lang.String SCREEN_BRIGHTNESS = "screen_brightness";
@@ -16203,6 +17616,50 @@ package android.provider {
field public static final java.lang.String _ID = "_id";
}
+ public class VoicemailContract {
+ field public static final java.lang.String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL";
+ field public static final java.lang.String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
+ field public static final java.lang.String AUTHORITY = "com.android.voicemail";
+ field public static final java.lang.String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE";
+ field public static final java.lang.String PARAM_KEY_SOURCE_PACKAGE = "source_package";
+ }
+
+ public static final class VoicemailContract.Status implements android.provider.BaseColumns {
+ method public static android.net.Uri buildSourceUri(java.lang.String);
+ field public static final java.lang.String CONFIGURATION_STATE = "configuration_state";
+ field public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; // 0x2
+ field public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; // 0x1
+ field public static final int CONFIGURATION_STATE_OK = 0; // 0x0
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String DATA_CHANNEL_STATE = "data_channel_state";
+ field public static final int DATA_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+ field public static final int DATA_CHANNEL_STATE_OK = 0; // 0x0
+ field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemail.source.status";
+ field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail.source.status";
+ field public static final java.lang.String NOTIFICATION_CHANNEL_STATE = "notification_channel_state";
+ field public static final int NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING = 2; // 0x2
+ field public static final int NOTIFICATION_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+ field public static final int NOTIFICATION_CHANNEL_STATE_OK = 0; // 0x0
+ field public static final java.lang.String SETTINGS_URI = "settings_uri";
+ field public static final java.lang.String SOURCE_PACKAGE = "source_package";
+ field public static final java.lang.String VOICEMAIL_ACCESS_URI = "voicemail_access_uri";
+ }
+
+ public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
+ method public static android.net.Uri buildSourceUri(java.lang.String);
+ field public static final android.net.Uri CONTENT_URI;
+ field public static final java.lang.String DATE = "date";
+ field public static final java.lang.String DIR_TYPE = "vnd.android.cursor.dir/voicemails";
+ field public static final java.lang.String DURATION = "duration";
+ field public static final java.lang.String HAS_CONTENT = "has_content";
+ field public static final java.lang.String IS_READ = "is_read";
+ field public static final java.lang.String ITEM_TYPE = "vnd.android.cursor.item/voicemail";
+ field public static final java.lang.String MIME_TYPE = "mime_type";
+ field public static final java.lang.String NUMBER = "number";
+ field public static final java.lang.String SOURCE_DATA = "source_data";
+ field public static final java.lang.String SOURCE_PACKAGE = "source_package";
+ }
+
}
package android.renderscript {
@@ -16212,6 +17669,7 @@ package android.renderscript {
method public void copy1DRangeFrom(int, int, short[]);
method public void copy1DRangeFrom(int, int, byte[]);
method public void copy1DRangeFrom(int, int, float[]);
+ method public void copy1DRangeFrom(int, int, android.renderscript.Allocation, int);
method public void copy1DRangeFromUnchecked(int, int, int[]);
method public void copy1DRangeFromUnchecked(int, int, short[]);
method public void copy1DRangeFromUnchecked(int, int, byte[]);
@@ -16220,6 +17678,7 @@ package android.renderscript {
method public void copy2DRangeFrom(int, int, int, int, short[]);
method public void copy2DRangeFrom(int, int, int, int, int[]);
method public void copy2DRangeFrom(int, int, int, int, float[]);
+ method public void copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int);
method public void copy2DRangeFrom(int, int, android.graphics.Bitmap);
method public void copyFrom(android.renderscript.BaseObj[]);
method public void copyFrom(int[]);
@@ -16257,6 +17716,7 @@ package android.renderscript {
method public void setFromFieldPacker(int, int, android.renderscript.FieldPacker);
method public void syncAll(int);
field public static final int USAGE_GRAPHICS_CONSTANTS = 8; // 0x8
+ field public static final int USAGE_GRAPHICS_RENDER_TARGET = 16; // 0x10
field public static final int USAGE_GRAPHICS_TEXTURE = 2; // 0x2
field public static final int USAGE_GRAPHICS_VERTEX = 4; // 0x4
field public static final int USAGE_SCRIPT = 1; // 0x1
@@ -16271,6 +17731,7 @@ package android.renderscript {
}
public class AllocationAdapter extends android.renderscript.Allocation {
+ method public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
method public void setFace(android.renderscript.Type.CubemapFace);
method public void setLOD(int);
@@ -16278,19 +17739,22 @@ package android.renderscript {
method public void setZ(int);
}
- class BaseObj {
+ public class BaseObj {
method public synchronized void destroy();
+ method public java.lang.String getName();
method public void setName(java.lang.String);
}
public class Byte2 {
ctor public Byte2();
+ ctor public Byte2(byte, byte);
field public byte x;
field public byte y;
}
public class Byte3 {
ctor public Byte3();
+ ctor public Byte3(byte, byte, byte);
field public byte x;
field public byte y;
field public byte z;
@@ -16298,12 +17762,37 @@ package android.renderscript {
public class Byte4 {
ctor public Byte4();
+ ctor public Byte4(byte, byte, byte, byte);
field public byte w;
field public byte x;
field public byte y;
field public byte z;
}
+ public class Double2 {
+ ctor public Double2();
+ ctor public Double2(double, double);
+ field public double x;
+ field public double y;
+ }
+
+ public class Double3 {
+ ctor public Double3();
+ ctor public Double3(double, double, double);
+ field public double x;
+ field public double y;
+ field public double z;
+ }
+
+ public class Double4 {
+ ctor public Double4();
+ ctor public Double4(double, double, double, double);
+ field public double w;
+ field public double x;
+ field public double y;
+ field public double z;
+ }
+
public class Element extends android.renderscript.BaseObj {
method public static android.renderscript.Element ALLOCATION(android.renderscript.RenderScript);
method public static android.renderscript.Element A_8(android.renderscript.RenderScript);
@@ -16314,10 +17803,25 @@ package android.renderscript {
method public static android.renderscript.Element F32_3(android.renderscript.RenderScript);
method public static android.renderscript.Element F32_4(android.renderscript.RenderScript);
method public static android.renderscript.Element F64(android.renderscript.RenderScript);
+ method public static android.renderscript.Element F64_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element F64_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element F64_4(android.renderscript.RenderScript);
method public static android.renderscript.Element I16(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I16_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I16_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I16_4(android.renderscript.RenderScript);
method public static android.renderscript.Element I32(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I32_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I32_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I32_4(android.renderscript.RenderScript);
method public static android.renderscript.Element I64(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I64_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I64_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I64_4(android.renderscript.RenderScript);
method public static android.renderscript.Element I8(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I8_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I8_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element I8_4(android.renderscript.RenderScript);
method public static android.renderscript.Element MATRIX4X4(android.renderscript.RenderScript);
method public static android.renderscript.Element MATRIX_2X2(android.renderscript.RenderScript);
method public static android.renderscript.Element MATRIX_3X3(android.renderscript.RenderScript);
@@ -16336,12 +17840,24 @@ package android.renderscript {
method public static android.renderscript.Element SCRIPT(android.renderscript.RenderScript);
method public static android.renderscript.Element TYPE(android.renderscript.RenderScript);
method public static android.renderscript.Element U16(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U16_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U16_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U16_4(android.renderscript.RenderScript);
method public static android.renderscript.Element U32(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U32_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U32_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U32_4(android.renderscript.RenderScript);
method public static android.renderscript.Element U64(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U64_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U64_3(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U64_4(android.renderscript.RenderScript);
method public static android.renderscript.Element U8(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U8_2(android.renderscript.RenderScript);
+ method public static android.renderscript.Element U8_3(android.renderscript.RenderScript);
method public static android.renderscript.Element U8_4(android.renderscript.RenderScript);
method public static android.renderscript.Element createPixel(android.renderscript.RenderScript, android.renderscript.Element.DataType, android.renderscript.Element.DataKind);
method public static android.renderscript.Element createVector(android.renderscript.RenderScript, android.renderscript.Element.DataType, int);
+ method public boolean isCompatible(android.renderscript.Element);
method public boolean isComplex();
}
@@ -16404,6 +17920,9 @@ package android.renderscript {
method public void addF32(android.renderscript.Float3);
method public void addF32(android.renderscript.Float4);
method public void addF64(double);
+ method public void addF64(android.renderscript.Double2);
+ method public void addF64(android.renderscript.Double3);
+ method public void addF64(android.renderscript.Double4);
method public void addI16(short);
method public void addI16(android.renderscript.Short2);
method public void addI16(android.renderscript.Short3);
@@ -16413,6 +17932,9 @@ package android.renderscript {
method public void addI32(android.renderscript.Int3);
method public void addI32(android.renderscript.Int4);
method public void addI64(long);
+ method public void addI64(android.renderscript.Long2);
+ method public void addI64(android.renderscript.Long3);
+ method public void addI64(android.renderscript.Long4);
method public void addI8(byte);
method public void addI8(android.renderscript.Byte2);
method public void addI8(android.renderscript.Byte3);
@@ -16430,6 +17952,9 @@ package android.renderscript {
method public void addU32(android.renderscript.Long3);
method public void addU32(android.renderscript.Long4);
method public void addU64(long);
+ method public void addU64(android.renderscript.Long2);
+ method public void addU64(android.renderscript.Long3);
+ method public void addU64(android.renderscript.Long4);
method public void addU8(short);
method public void addU8(android.renderscript.Short2);
method public void addU8(android.renderscript.Short3);
@@ -16507,12 +18032,14 @@ package android.renderscript {
public class Int2 {
ctor public Int2();
+ ctor public Int2(int, int);
field public int x;
field public int y;
}
public class Int3 {
ctor public Int3();
+ ctor public Int3(int, int, int);
field public int x;
field public int y;
field public int z;
@@ -16520,6 +18047,7 @@ package android.renderscript {
public class Int4 {
ctor public Int4();
+ ctor public Int4(int, int, int, int);
field public int w;
field public int x;
field public int y;
@@ -16528,12 +18056,14 @@ package android.renderscript {
public class Long2 {
ctor public Long2();
+ ctor public Long2(long, long);
field public long x;
field public long y;
}
public class Long3 {
ctor public Long3();
+ ctor public Long3(long, long, long);
field public long x;
field public long y;
field public long z;
@@ -16541,6 +18071,7 @@ package android.renderscript {
public class Long4 {
ctor public Long4();
+ ctor public Long4(long, long, long, long);
field public long w;
field public long x;
field public long y;
@@ -16863,6 +18394,21 @@ package android.renderscript {
method public void surfaceDestroyed(android.view.SurfaceHolder);
}
+ public class RSTextureView extends android.view.TextureView implements android.view.TextureView.SurfaceTextureListener {
+ ctor public RSTextureView(android.content.Context);
+ ctor public RSTextureView(android.content.Context, android.util.AttributeSet);
+ method public android.renderscript.RenderScriptGL createRenderScriptGL(android.renderscript.RenderScriptGL.SurfaceConfig);
+ method public void destroyRenderScriptGL();
+ method public android.renderscript.RenderScriptGL getRenderScriptGL();
+ method public void onSurfaceTextureAvailable(android.graphics.SurfaceTexture, int, int);
+ method public boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture);
+ method public void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture, int, int);
+ method public void onSurfaceTextureUpdated(android.graphics.SurfaceTexture);
+ method public void pause();
+ method public void resume();
+ method public void setRenderScriptGL(android.renderscript.RenderScriptGL);
+ }
+
public class RenderScript {
method public void contextDump();
method public static android.renderscript.RenderScript create(android.content.Context);
@@ -16910,6 +18456,7 @@ package android.renderscript {
method public void pause();
method public void resume();
method public void setSurface(android.view.SurfaceHolder, int, int);
+ method public void setSurfaceTexture(android.graphics.SurfaceTexture, int, int);
}
public static class RenderScriptGL.SurfaceConfig {
@@ -16953,6 +18500,7 @@ package android.renderscript {
public class Script extends android.renderscript.BaseObj {
method public void bindAllocation(android.renderscript.Allocation, int);
+ method protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
method protected void invoke(int);
method protected void invoke(int, android.renderscript.FieldPacker);
method public void setTimeZone(java.lang.String);
@@ -16987,12 +18535,14 @@ package android.renderscript {
public class Short2 {
ctor public Short2();
+ ctor public Short2(short, short);
field public short x;
field public short y;
}
public class Short3 {
ctor public Short3();
+ ctor public Short3(short, short, short);
field public short x;
field public short y;
field public short z;
@@ -17000,6 +18550,7 @@ package android.renderscript {
public class Short4 {
ctor public Short4();
+ ctor public Short4(short, short, short, short);
field public short w;
field public short x;
field public short y;
@@ -17031,9 +18582,12 @@ package android.renderscript {
enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_X;
enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Y;
enum_constant public static final android.renderscript.Type.CubemapFace NEGATIVE_Z;
- enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_X;
- enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Y;
- enum_constant public static final android.renderscript.Type.CubemapFace POSITVE_Z;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_X;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_Y;
+ enum_constant public static final android.renderscript.Type.CubemapFace POSITIVE_Z;
+ enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_X;
+ enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_Y;
+ enum_constant public static final deprecated android.renderscript.Type.CubemapFace POSITVE_Z;
}
}
@@ -17078,6 +18632,53 @@ package android.sax {
}
+package android.security {
+
+ public final class KeyChain {
+ ctor public KeyChain();
+ method public static void choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, java.lang.String[], java.security.Principal[], java.lang.String, int, java.lang.String);
+ method public static android.content.Intent createInstallIntent();
+ method public static java.security.cert.X509Certificate[] getCertificateChain(android.content.Context, java.lang.String) throws java.lang.InterruptedException, android.security.KeyChainException;
+ method public static java.security.PrivateKey getPrivateKey(android.content.Context, java.lang.String) throws java.lang.InterruptedException, android.security.KeyChainException;
+ field public static final java.lang.String EXTRA_CERTIFICATE = "CERT";
+ field public static final java.lang.String EXTRA_NAME = "name";
+ field public static final java.lang.String EXTRA_PKCS12 = "PKCS12";
+ }
+
+ public abstract interface KeyChainAliasCallback {
+ method public abstract void alias(java.lang.String);
+ }
+
+ public class KeyChainException extends java.lang.Exception {
+ ctor public KeyChainException();
+ ctor public KeyChainException(java.lang.String);
+ ctor public KeyChainException(java.lang.String, java.lang.Throwable);
+ ctor public KeyChainException(java.lang.Throwable);
+ }
+
+}
+
+package android.service.textservice {
+
+ public abstract class SpellCheckerService extends android.app.Service {
+ ctor public SpellCheckerService();
+ method public abstract android.service.textservice.SpellCheckerService.Session createSession();
+ method public final android.os.IBinder onBind(android.content.Intent);
+ field public static final java.lang.String SERVICE_INTERFACE = "android.service.textservice.SpellCheckerService";
+ }
+
+ public static abstract class SpellCheckerService.Session {
+ ctor public SpellCheckerService.Session();
+ method public android.os.Bundle getBundle();
+ method public java.lang.String getLocale();
+ method public void onCancel();
+ method public abstract void onCreate();
+ method public abstract android.view.textservice.SuggestionsInfo onGetSuggestions(android.view.textservice.TextInfo, int);
+ method public android.view.textservice.SuggestionsInfo[] onGetSuggestionsMultiple(android.view.textservice.TextInfo[], int, boolean);
+ }
+
+}
+
package android.service.wallpaper {
public abstract class WallpaperService extends android.app.Service {
@@ -17090,6 +18691,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();
@@ -17153,11 +18755,13 @@ package android.speech {
field public static final java.lang.String ACTION_WEB_SEARCH = "android.speech.action.WEB_SEARCH";
field public static final java.lang.String DETAILS_META_DATA = "android.speech.DETAILS";
field public static final java.lang.String EXTRA_CALLING_PACKAGE = "calling_package";
+ field public static final java.lang.String EXTRA_CONFIDENCE_SCORES = "android.speech.extra.CONFIDENCE_SCORES";
field public static final java.lang.String EXTRA_LANGUAGE = "android.speech.extra.LANGUAGE";
field public static final java.lang.String EXTRA_LANGUAGE_MODEL = "android.speech.extra.LANGUAGE_MODEL";
field public static final java.lang.String EXTRA_LANGUAGE_PREFERENCE = "android.speech.extra.LANGUAGE_PREFERENCE";
field public static final java.lang.String EXTRA_MAX_RESULTS = "android.speech.extra.MAX_RESULTS";
field public static final java.lang.String EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE = "android.speech.extra.ONLY_RETURN_LANGUAGE_PREFERENCE";
+ field public static final java.lang.String EXTRA_ORIGIN = "android.speech.extra.ORIGIN";
field public static final java.lang.String EXTRA_PARTIAL_RESULTS = "android.speech.extra.PARTIAL_RESULTS";
field public static final java.lang.String EXTRA_PROMPT = "android.speech.extra.PROMPT";
field public static final java.lang.String EXTRA_RESULTS = "android.speech.extra.RESULTS";
@@ -17196,6 +18800,7 @@ package android.speech {
method public void setRecognitionListener(android.speech.RecognitionListener);
method public void startListening(android.content.Intent);
method public void stopListening();
+ field public static final java.lang.String CONFIDENCE_SCORES = "confidence_scores";
field public static final int ERROR_AUDIO = 3; // 0x3
field public static final int ERROR_CLIENT = 5; // 0x5
field public static final int ERROR_INSUFFICIENT_PERMISSIONS = 9; // 0x9
@@ -17212,20 +18817,41 @@ package android.speech {
package android.speech.tts {
+ public abstract interface SynthesisCallback {
+ method public abstract int audioAvailable(byte[], int, int);
+ method public abstract int done();
+ method public abstract void error();
+ method public abstract int getMaxBufferSize();
+ method public abstract int start(int, int, int);
+ }
+
+ public final class SynthesisRequest {
+ ctor public SynthesisRequest(java.lang.String, android.os.Bundle);
+ method public java.lang.String getCountry();
+ method public java.lang.String getLanguage();
+ method public android.os.Bundle getParams();
+ method public int getPitch();
+ method public int getSpeechRate();
+ method public java.lang.String getText();
+ method public java.lang.String getVariant();
+ }
+
public class TextToSpeech {
ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener);
+ ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String);
method public int addEarcon(java.lang.String, java.lang.String, int);
method public int addEarcon(java.lang.String, java.lang.String);
method public int addSpeech(java.lang.String, java.lang.String, int);
method public int addSpeech(java.lang.String, java.lang.String);
method public boolean areDefaultsEnforced();
method public java.lang.String getDefaultEngine();
+ method public java.util.List<android.speech.tts.TextToSpeech.EngineInfo> getEngines();
method public java.util.Locale getLanguage();
method public int isLanguageAvailable(java.util.Locale);
method public boolean isSpeaking();
method public int playEarcon(java.lang.String, int, java.util.HashMap<java.lang.String, java.lang.String>);
method public int playSilence(long, int, java.util.HashMap<java.lang.String, java.lang.String>);
- method public int setEngineByPackageName(java.lang.String);
+ method public deprecated int setEngineByPackageName(java.lang.String);
method public int setLanguage(java.util.Locale);
method public int setOnUtteranceCompletedListener(android.speech.tts.TextToSpeech.OnUtteranceCompletedListener);
method public int setPitch(float);
@@ -17264,10 +18890,19 @@ package android.speech.tts {
field public static final java.lang.String EXTRA_VOICE_DATA_FILES = "dataFiles";
field public static final java.lang.String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
field public static final java.lang.String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
+ field public static final java.lang.String INTENT_ACTION_TTS_SERVICE = "android.intent.action.TTS_SERVICE";
field public static final java.lang.String KEY_PARAM_PAN = "pan";
field public static final java.lang.String KEY_PARAM_STREAM = "streamType";
field public static final java.lang.String KEY_PARAM_UTTERANCE_ID = "utteranceId";
field public static final java.lang.String KEY_PARAM_VOLUME = "volume";
+ field public static final java.lang.String SERVICE_META_DATA = "android.speech.tts";
+ }
+
+ public static class TextToSpeech.EngineInfo {
+ ctor public TextToSpeech.EngineInfo();
+ field public int icon;
+ field public java.lang.String label;
+ field public java.lang.String name;
}
public static abstract interface TextToSpeech.OnInitListener {
@@ -17278,6 +18913,16 @@ package android.speech.tts {
method public abstract void onUtteranceCompleted(java.lang.String);
}
+ public abstract class TextToSpeechService extends android.app.Service {
+ ctor public TextToSpeechService();
+ method public android.os.IBinder onBind(android.content.Intent);
+ method protected abstract java.lang.String[] onGetLanguage();
+ method protected abstract int onIsLanguageAvailable(java.lang.String, java.lang.String, java.lang.String);
+ method protected abstract int onLoadLanguage(java.lang.String, java.lang.String, java.lang.String);
+ method protected abstract void onStop();
+ method protected abstract void onSynthesizeText(android.speech.tts.SynthesisRequest, android.speech.tts.SynthesisCallback);
+ }
+
}
package android.telephony {
@@ -17547,6 +19192,7 @@ package android.telephony {
field public static final int NETWORK_TYPE_GPRS = 1; // 0x1
field public static final int NETWORK_TYPE_HSDPA = 8; // 0x8
field public static final int NETWORK_TYPE_HSPA = 10; // 0xa
+ field public static final int NETWORK_TYPE_HSPAP = 15; // 0xf
field public static final int NETWORK_TYPE_HSUPA = 9; // 0x9
field public static final int NETWORK_TYPE_IDEN = 11; // 0xb
field public static final int NETWORK_TYPE_LTE = 13; // 0xd
@@ -18195,6 +19841,7 @@ package android.test.mock {
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
+ method public void verifyPendingInstall(int, int);
}
public class MockResources extends android.content.res.Resources {
@@ -18489,6 +20136,7 @@ package android.text {
method public abstract int getTopPadding();
method public final int getWidth();
method public final void increaseWidthTo(int);
+ method public boolean isRtlCharAt(int);
method protected final boolean isSpanned();
field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
@@ -19258,6 +20906,13 @@ package android.text.style {
field protected final int mVerticalAlignment;
}
+ public class EasyEditSpan implements android.text.ParcelableSpan {
+ ctor public EasyEditSpan();
+ method public int describeContents();
+ method public int getSpanTypeId();
+ method public void writeToParcel(android.os.Parcel, int);
+ }
+
public class ForegroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
ctor public ForegroundColorSpan(int);
ctor public ForegroundColorSpan(android.os.Parcel);
@@ -19417,6 +21072,29 @@ package android.text.style {
method public void writeToParcel(android.os.Parcel, int);
}
+ 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<?>);
+ ctor public SuggestionSpan(android.os.Parcel);
+ method public int describeContents();
+ method public int getFlags();
+ method public java.lang.String getLocale();
+ method public int getSpanTypeId();
+ method public java.lang.String[] getSuggestions();
+ method public void setFlags(int);
+ method public void updateDrawState(android.text.TextPaint);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final java.lang.String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
+ field public static final android.os.Parcelable.Creator CREATOR;
+ 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";
+ field public static final java.lang.String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+ }
+
public class SuperscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
ctor public SuperscriptSpan();
ctor public SuperscriptSpan(android.os.Parcel);
@@ -19615,6 +21293,14 @@ package android.util {
ctor public Base64OutputStream(java.io.OutputStream, int);
}
+ public final deprecated class Config {
+ field public static final deprecated boolean DEBUG = false;
+ field public static final deprecated boolean LOGD = true;
+ field public static final deprecated boolean LOGV = false;
+ field public static final deprecated boolean PROFILE = false;
+ field public static final deprecated boolean RELEASE = true;
+ }
+
public class DebugUtils {
method public static boolean isObjectSelected(java.lang.Object);
}
@@ -19627,6 +21313,7 @@ package android.util {
field public static final int DENSITY_HIGH = 240; // 0xf0
field public static final int DENSITY_LOW = 120; // 0x78
field public static final int DENSITY_MEDIUM = 160; // 0xa0
+ field public static final int DENSITY_TV = 213; // 0xd5
field public static final int DENSITY_XHIGH = 320; // 0x140
field public float density;
field public int densityDpi;
@@ -19804,6 +21491,10 @@ package android.util {
method public void previousMonth();
}
+ public class NoSuchPropertyException extends java.lang.RuntimeException {
+ ctor public NoSuchPropertyException(java.lang.String);
+ }
+
public class Pair {
ctor public Pair(F, S);
method public static android.util.Pair<A, B> create(A, B);
@@ -19839,11 +21530,22 @@ package android.util {
method public abstract void println(java.lang.String);
}
- public class SparseArray {
+ public abstract class Property {
+ ctor public Property(java.lang.Class<V>, java.lang.String);
+ method public abstract V get(T);
+ method public java.lang.String getName();
+ method public java.lang.Class<V> getType();
+ method public boolean isReadOnly();
+ method public static android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
+ method public void set(T, V);
+ }
+
+ public class SparseArray implements java.lang.Cloneable {
ctor public SparseArray();
ctor public SparseArray(int);
method public void append(int, E);
method public void clear();
+ method public android.util.SparseArray<E> clone();
method public void delete(int);
method public E get(int);
method public E get(int, E);
@@ -19858,11 +21560,12 @@ package android.util {
method public E valueAt(int);
}
- public class SparseBooleanArray {
+ public class SparseBooleanArray implements java.lang.Cloneable {
ctor public SparseBooleanArray();
ctor public SparseBooleanArray(int);
method public void append(int, boolean);
method public void clear();
+ method public android.util.SparseBooleanArray clone();
method public void delete(int);
method public boolean get(int);
method public boolean get(int, boolean);
@@ -19874,11 +21577,12 @@ package android.util {
method public boolean valueAt(int);
}
- public class SparseIntArray {
+ public class SparseIntArray implements java.lang.Cloneable {
ctor public SparseIntArray();
ctor public SparseIntArray(int);
method public void append(int, int);
method public void clear();
+ method public android.util.SparseIntArray clone();
method public void delete(int);
method public int get(int);
method public int get(int, int);
@@ -20025,11 +21729,13 @@ package android.view {
method public abstract android.view.Menu getMenu();
method public abstract android.view.MenuInflater getMenuInflater();
method public abstract java.lang.CharSequence getSubtitle();
+ method public java.lang.Object getTag();
method public abstract java.lang.CharSequence getTitle();
method public abstract void invalidate();
method public abstract void setCustomView(android.view.View);
method public abstract void setSubtitle(java.lang.CharSequence);
method public abstract void setSubtitle(int);
+ method public void setTag(java.lang.Object);
method public abstract void setTitle(java.lang.CharSequence);
method public abstract void setTitle(int);
}
@@ -20041,6 +21747,19 @@ package android.view {
method public abstract boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
}
+ public abstract class ActionProvider {
+ ctor public ActionProvider(android.content.Context);
+ method public boolean hasSubMenu();
+ method public abstract android.view.View onCreateActionView();
+ method public boolean onPerformDefaultAction();
+ method public void onPrepareSubMenu(android.view.SubMenu);
+ }
+
+ public abstract interface CollapsibleActionView {
+ method public abstract void onActionViewCollapsed();
+ method public abstract void onActionViewExpanded();
+ }
+
public abstract interface ContextMenu implements android.view.Menu {
method public abstract void clearHeader();
method public abstract android.view.ContextMenu setHeaderIcon(int);
@@ -20061,13 +21780,15 @@ package android.view {
public class Display {
method public int getDisplayId();
- method public int getHeight();
+ method public deprecated int getHeight();
method public void getMetrics(android.util.DisplayMetrics);
method public deprecated int getOrientation();
method public int getPixelFormat();
+ method public void getRectSize(android.graphics.Rect);
method public float getRefreshRate();
method public int getRotation();
- method public int getWidth();
+ method public void getSize(android.graphics.Point);
+ method public deprecated int getWidth();
field public static final int DEFAULT_DISPLAY = 0; // 0x0
}
@@ -20142,6 +21863,7 @@ package android.view {
method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect);
method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect);
method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect);
+ method public static int getAbsoluteGravity(int, int);
method public static boolean isHorizontal(int);
method public static boolean isVertical(int);
field public static final int AXIS_CLIP = 8; // 0x8
@@ -20158,13 +21880,17 @@ package android.view {
field public static final int CLIP_VERTICAL = 128; // 0x80
field public static final int DISPLAY_CLIP_HORIZONTAL = 16777216; // 0x1000000
field public static final int DISPLAY_CLIP_VERTICAL = 268435456; // 0x10000000
+ field public static final int END = 8388613; // 0x800005
field public static final int FILL = 119; // 0x77
field public static final int FILL_HORIZONTAL = 7; // 0x7
field public static final int FILL_VERTICAL = 112; // 0x70
field public static final int HORIZONTAL_GRAVITY_MASK = 7; // 0x7
field public static final int LEFT = 3; // 0x3
field public static final int NO_GRAVITY = 0; // 0x0
+ field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+ field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
field public static final int RIGHT = 5; // 0x5
+ field public static final int START = 8388611; // 0x800003
field public static final int TOP = 48; // 0x30
field public static final int VERTICAL_GRAVITY_MASK = 112; // 0x70
}
@@ -20222,6 +21948,7 @@ package android.view {
field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
field public static final int SOURCE_KEYBOARD = 257; // 0x101
field public static final int SOURCE_MOUSE = 8194; // 0x2002
+ field public static final int SOURCE_STYLUS = 16386; // 0x4002
field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
@@ -20328,6 +22055,7 @@ package android.view {
method public static int getMaxKeyCode();
method public final int getMetaState();
method public static int getModifierMetaStateMask();
+ method public final int getModifiers();
method public char getNumber();
method public final int getRepeatCount();
method public final int getScanCode();
@@ -20379,6 +22107,7 @@ package android.view {
field public static final int KEYCODE_1 = 8; // 0x8
field public static final int KEYCODE_2 = 9; // 0x9
field public static final int KEYCODE_3 = 10; // 0xa
+ field public static final int KEYCODE_3D_MODE = 206; // 0xce
field public static final int KEYCODE_4 = 11; // 0xb
field public static final int KEYCODE_5 = 12; // 0xc
field public static final int KEYCODE_6 = 13; // 0xd
@@ -20484,8 +22213,10 @@ package android.view {
field public static final int KEYCODE_J = 38; // 0x26
field public static final int KEYCODE_K = 39; // 0x27
field public static final int KEYCODE_L = 40; // 0x28
+ field public static final int KEYCODE_LANGUAGE_SWITCH = 204; // 0xcc
field public static final int KEYCODE_LEFT_BRACKET = 71; // 0x47
field public static final int KEYCODE_M = 41; // 0x29
+ field public static final int KEYCODE_MANNER_MODE = 205; // 0xcd
field public static final int KEYCODE_MEDIA_CLOSE = 128; // 0x80
field public static final int KEYCODE_MEDIA_EJECT = 129; // 0x81
field public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; // 0x5a
@@ -20695,6 +22426,9 @@ package android.view {
}
public abstract interface MenuItem {
+ method public abstract boolean collapseActionView();
+ method public abstract boolean expandActionView();
+ method public abstract android.view.ActionProvider getActionProvider();
method public abstract android.view.View getActionView();
method public abstract char getAlphabeticShortcut();
method public abstract int getGroupId();
@@ -20708,10 +22442,12 @@ package android.view {
method public abstract java.lang.CharSequence getTitle();
method public abstract java.lang.CharSequence getTitleCondensed();
method public abstract boolean hasSubMenu();
+ method public abstract boolean isActionViewExpanded();
method public abstract boolean isCheckable();
method public abstract boolean isChecked();
method public abstract boolean isEnabled();
method public abstract boolean isVisible();
+ method public abstract android.view.MenuItem setActionProvider(android.view.ActionProvider);
method public abstract android.view.MenuItem setActionView(android.view.View);
method public abstract android.view.MenuItem setActionView(int);
method public abstract android.view.MenuItem setAlphabeticShortcut(char);
@@ -20722,19 +22458,27 @@ package android.view {
method public abstract android.view.MenuItem setIcon(int);
method public abstract android.view.MenuItem setIntent(android.content.Intent);
method public abstract android.view.MenuItem setNumericShortcut(char);
+ method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener);
method public abstract android.view.MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
method public abstract android.view.MenuItem setShortcut(char, char);
method public abstract void setShowAsAction(int);
+ method public abstract android.view.MenuItem setShowAsActionFlags(int);
method public abstract android.view.MenuItem setTitle(java.lang.CharSequence);
method public abstract android.view.MenuItem setTitle(int);
method public abstract android.view.MenuItem setTitleCondensed(java.lang.CharSequence);
method public abstract android.view.MenuItem setVisible(boolean);
field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+ field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
}
+ public static abstract interface MenuItem.OnActionExpandListener {
+ method public abstract boolean onMenuItemActionCollapse(android.view.MenuItem);
+ method public abstract boolean onMenuItemActionExpand(android.view.MenuItem);
+ }
+
public static abstract interface MenuItem.OnMenuItemClickListener {
method public abstract boolean onMenuItemClick(android.view.MenuItem);
}
@@ -20750,6 +22494,7 @@ package android.view {
method public final int getActionMasked();
method public final float getAxisValue(int);
method public final float getAxisValue(int, int);
+ method public final int getButtonState();
method public final int getDeviceId();
method public final long getDownTime();
method public final int getEdgeFlags();
@@ -20784,6 +22529,7 @@ package android.view {
method public final void getPointerCoords(int, android.view.MotionEvent.PointerCoords);
method public final int getPointerCount();
method public final int getPointerId(int);
+ method public final void getPointerProperties(int, android.view.MotionEvent.PointerProperties);
method public final float getPressure();
method public final float getPressure(int);
method public final float getRawX();
@@ -20795,6 +22541,7 @@ package android.view {
method public final float getToolMajor(int);
method public final float getToolMinor();
method public final float getToolMinor(int);
+ method public final int getToolType(int);
method public final float getTouchMajor();
method public final float getTouchMajor(int);
method public final float getTouchMinor();
@@ -20805,7 +22552,8 @@ package android.view {
method public final float getY();
method public final float getY(int);
method public final float getYPrecision();
- method public static android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
+ method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int);
+ method public static deprecated android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int);
method public static deprecated android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int);
method public static android.view.MotionEvent obtain(long, long, int, float, float, int);
@@ -20821,6 +22569,8 @@ package android.view {
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACTION_CANCEL = 3; // 0x3
field public static final int ACTION_DOWN = 0; // 0x0
+ field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+ field public static final int ACTION_HOVER_EXIT = 10; // 0xa
field public static final int ACTION_HOVER_MOVE = 7; // 0x7
field public static final int ACTION_MASK = 255; // 0xff
field public static final int ACTION_MOVE = 2; // 0x2
@@ -20840,6 +22590,7 @@ package android.view {
field public static final int ACTION_SCROLL = 8; // 0x8
field public static final int ACTION_UP = 1; // 0x1
field public static final int AXIS_BRAKE = 23; // 0x17
+ field public static final int AXIS_DISTANCE = 24; // 0x18
field public static final int AXIS_GAS = 22; // 0x16
field public static final int AXIS_GENERIC_1 = 32; // 0x20
field public static final int AXIS_GENERIC_10 = 41; // 0x29
@@ -20870,6 +22621,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
@@ -20879,12 +22631,23 @@ package android.view {
field public static final int AXIS_X = 0; // 0x0
field public static final int AXIS_Y = 1; // 0x1
field public static final int AXIS_Z = 11; // 0xb
+ field public static final int BUTTON_BACK = 8; // 0x8
+ field public static final int BUTTON_FORWARD = 16; // 0x10
+ field public static final int BUTTON_PRIMARY = 1; // 0x1
+ field public static final int BUTTON_SECONDARY = 2; // 0x2
+ field public static final int BUTTON_TERTIARY = 4; // 0x4
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int EDGE_BOTTOM = 2; // 0x2
field public static final int EDGE_LEFT = 4; // 0x4
field public static final int EDGE_RIGHT = 8; // 0x8
field public static final int EDGE_TOP = 1; // 0x1
field public static final int FLAG_WINDOW_IS_OBSCURED = 1; // 0x1
+ field public static final int INVALID_POINTER_ID = -1; // 0xffffffff
+ field public static final int TOOL_TYPE_ERASER = 4; // 0x4
+ field public static final int TOOL_TYPE_FINGER = 1; // 0x1
+ field public static final int TOOL_TYPE_MOUSE = 3; // 0x3
+ field public static final int TOOL_TYPE_STYLUS = 2; // 0x2
+ field public static final int TOOL_TYPE_UNKNOWN = 0; // 0x0
}
public static final class MotionEvent.PointerCoords {
@@ -20905,6 +22668,15 @@ package android.view {
field public float y;
}
+ public static final class MotionEvent.PointerProperties {
+ ctor public MotionEvent.PointerProperties();
+ ctor public MotionEvent.PointerProperties(android.view.MotionEvent.PointerProperties);
+ method public void clear();
+ method public void copyFrom(android.view.MotionEvent.PointerProperties);
+ field public int id;
+ field public int toolType;
+ }
+
public abstract class OrientationEventListener {
ctor public OrientationEventListener(android.content.Context);
ctor public OrientationEventListener(android.content.Context, int);
@@ -20978,10 +22750,12 @@ package android.view {
}
public class Surface implements android.os.Parcelable {
+ ctor public Surface(android.graphics.SurfaceTexture);
method public int describeContents();
method public boolean isValid();
method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException;
method public void readFromParcel(android.os.Parcel);
+ method public void release();
method public void unlockCanvas(android.graphics.Canvas);
method public void unlockCanvasAndPost(android.graphics.Canvas);
method public void writeToParcel(android.os.Parcel, int);
@@ -21042,6 +22816,34 @@ package android.view {
method public void setZOrderOnTop(boolean);
}
+ public class TextureView extends android.view.View {
+ ctor public TextureView(android.content.Context);
+ ctor public TextureView(android.content.Context, android.util.AttributeSet);
+ ctor public TextureView(android.content.Context, android.util.AttributeSet, int);
+ method public final void draw(android.graphics.Canvas);
+ method public android.graphics.Bitmap getBitmap();
+ method public android.graphics.Bitmap getBitmap(int, int);
+ 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);
+ }
+
+ public static abstract interface TextureView.SurfaceTextureListener {
+ method public abstract void onSurfaceTextureAvailable(android.graphics.SurfaceTexture, int, int);
+ method public abstract boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture);
+ method public abstract void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture, int, int);
+ method public abstract void onSurfaceTextureUpdated(android.graphics.SurfaceTexture);
+ }
+
public class TouchDelegate {
ctor public TouchDelegate(android.graphics.Rect, android.view.View);
method public boolean onTouchEvent(android.view.MotionEvent);
@@ -21081,6 +22883,8 @@ package android.view {
method public void buildDrawingCache();
method public void buildDrawingCache(boolean);
method public void buildLayer();
+ method public boolean canScrollHorizontally(int);
+ method public boolean canScrollVertically(int);
method public void cancelLongPress();
method public boolean checkInputConnectionProxy(android.view.View);
method public void clearAnimation();
@@ -21093,13 +22897,17 @@ package android.view {
method protected int computeVerticalScrollExtent();
method protected int computeVerticalScrollOffset();
method protected int computeVerticalScrollRange();
+ method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
method public void createContextMenu(android.view.ContextMenu);
method public void destroyDrawingCache();
method public void dispatchConfigurationChanged(android.content.res.Configuration);
method public void dispatchDisplayHint(int);
method public boolean dispatchDragEvent(android.view.DragEvent);
method protected void dispatchDraw(android.graphics.Canvas);
+ method protected boolean dispatchGenericFocusedEvent(android.view.MotionEvent);
method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+ method protected boolean dispatchGenericPointerEvent(android.view.MotionEvent);
+ method protected boolean dispatchHoverEvent(android.view.MotionEvent);
method public boolean dispatchKeyEvent(android.view.KeyEvent);
method public boolean dispatchKeyEventPreIme(android.view.KeyEvent);
method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
@@ -21121,7 +22929,9 @@ package android.view {
method public android.view.View findFocus();
method public final android.view.View findViewById(int);
method public final android.view.View findViewWithTag(java.lang.Object);
+ method public void findViewsWithText(java.util.ArrayList<android.view.View>, java.lang.CharSequence, int);
method protected boolean fitSystemWindows(android.graphics.Rect);
+ method public boolean fitsSystemWindows();
method public android.view.View focusSearch(int);
method public void forceLayout();
method public float getAlpha();
@@ -21245,6 +23055,7 @@ package android.view {
method public boolean isHardwareAccelerated();
method public boolean isHorizontalFadingEdgeEnabled();
method public boolean isHorizontalScrollBarEnabled();
+ method public boolean isHovered();
method public boolean isInEditMode();
method public boolean isInTouchMode();
method public boolean isLayoutRequested();
@@ -21284,6 +23095,10 @@ package android.view {
method public void onFinishTemporaryDetach();
method protected void onFocusChanged(boolean, int, android.graphics.Rect);
method public boolean onGenericMotionEvent(android.view.MotionEvent);
+ method public void onHoverChanged(boolean);
+ method public boolean onHoverEvent(android.view.MotionEvent);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo);
method public boolean onKeyDown(int, android.view.KeyEvent);
method public boolean onKeyLongPress(int, android.view.KeyEvent);
method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
@@ -21293,6 +23108,7 @@ package android.view {
method protected void onLayout(boolean, int, int, int, int);
method protected void onMeasure(int, int);
method protected void onOverScrolled(int, int, boolean, boolean);
+ method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
method protected void onRestoreInstanceState(android.os.Parcelable);
method protected android.os.Parcelable onSaveInstanceState();
method protected void onScrollChanged(int, int, int, int);
@@ -21336,6 +23152,7 @@ package android.view {
method public void scrollTo(int, int);
method public void sendAccessibilityEvent(int);
method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent);
+ method public void setAccessibilityDelegate(android.view.View.AccessibilityDelegate);
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
@@ -21353,11 +23170,13 @@ package android.view {
method public void setEnabled(boolean);
method public void setFadingEdgeLength(int);
method public void setFilterTouchesWhenObscured(boolean);
+ method public void setFitsSystemWindows(boolean);
method public void setFocusable(boolean);
method public void setFocusableInTouchMode(boolean);
method public void setHapticFeedbackEnabled(boolean);
method public void setHorizontalFadingEdgeEnabled(boolean);
method public void setHorizontalScrollBarEnabled(boolean);
+ method public void setHovered(boolean);
method public void setId(int);
method public void setKeepScreenOn(boolean);
method public void setLayerType(int, android.graphics.Paint);
@@ -21377,6 +23196,7 @@ package android.view {
method public void setOnDragListener(android.view.View.OnDragListener);
method public void setOnFocusChangeListener(android.view.View.OnFocusChangeListener);
method public void setOnGenericMotionListener(android.view.View.OnGenericMotionListener);
+ method public void setOnHoverListener(android.view.View.OnHoverListener);
method public void setOnKeyListener(android.view.View.OnKeyListener);
method public void setOnLongClickListener(android.view.View.OnLongClickListener);
method public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
@@ -21396,6 +23216,8 @@ package android.view {
method public void setScaleY(float);
method public void setScrollBarStyle(int);
method public void setScrollContainer(boolean);
+ method public void setScrollX(int);
+ method public void setScrollY(int);
method public void setScrollbarFadingEnabled(boolean);
method public void setSelected(boolean);
method public void setSoundEffectsEnabled(boolean);
@@ -21423,6 +23245,7 @@ package android.view {
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
method public boolean willNotCacheDrawing();
method public boolean willNotDraw();
+ field public static android.util.Property ALPHA;
field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
field public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000
@@ -21435,6 +23258,8 @@ package android.view {
field protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET;
field protected static final int[] ENABLED_STATE_SET;
field protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET;
+ field public static final int FIND_VIEWS_WITH_CONTENT_DESCRIPTION = 2; // 0x2
+ field public static final int FIND_VIEWS_WITH_TEXT = 1; // 0x1
field public static final int FOCUSABLES_ALL = 0; // 0x0
field public static final int FOCUSABLES_TOUCH_MODE = 1; // 0x1
field protected static final int[] FOCUSED_SELECTED_STATE_SET;
@@ -21477,6 +23302,11 @@ package android.view {
field protected static final int[] PRESSED_SELECTED_STATE_SET;
field protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
field protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET;
+ field public static android.util.Property ROTATION;
+ field public static android.util.Property ROTATION_X;
+ field public static android.util.Property ROTATION_Y;
+ field public static android.util.Property SCALE_X;
+ field public static android.util.Property SCALE_Y;
field public static final int SCROLLBARS_INSIDE_INSET = 16777216; // 0x1000000
field public static final int SCROLLBARS_INSIDE_OVERLAY = 0; // 0x0
field public static final int SCROLLBARS_OUTSIDE_INSET = 50331648; // 0x3000000
@@ -21487,11 +23317,29 @@ package android.view {
field protected static final int[] SELECTED_STATE_SET;
field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
- field public static final int STATUS_BAR_HIDDEN = 1; // 0x1
- field public static final int STATUS_BAR_VISIBLE = 0; // 0x0
+ field public static final deprecated int STATUS_BAR_HIDDEN = 1; // 0x1
+ field public static final deprecated int STATUS_BAR_VISIBLE = 0; // 0x0
+ field public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2; // 0x2
+ field public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1
+ field public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0
+ field public static android.util.Property TRANSLATION_X;
+ field public static android.util.Property TRANSLATION_Y;
field protected static final java.lang.String VIEW_LOG_TAG = "View";
field public static final int VISIBLE = 0; // 0x0
field protected static final int[] WINDOW_FOCUSED_STATE_SET;
+ field public static android.util.Property X;
+ field public static android.util.Property Y;
+ }
+
+ public static class View.AccessibilityDelegate {
+ ctor public View.AccessibilityDelegate();
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(android.view.View, android.view.accessibility.AccessibilityNodeInfo);
+ method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+ method public void sendAccessibilityEvent(android.view.View, int);
+ method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
}
public static class View.BaseSavedState extends android.view.AbsSavedState {
@@ -21544,6 +23392,10 @@ package android.view {
method public abstract boolean onGenericMotion(android.view.View, android.view.MotionEvent);
}
+ public static abstract interface View.OnHoverListener {
+ method public abstract boolean onHover(android.view.View, android.view.MotionEvent);
+ }
+
public static abstract interface View.OnKeyListener {
method public abstract boolean onKey(android.view.View, int, android.view.KeyEvent);
}
@@ -21599,6 +23451,7 @@ package android.view {
method public static deprecated int getTouchSlop();
method public static deprecated int getWindowTouchSlop();
method public static long getZoomControlsTimeout();
+ method public boolean hasPermanentMenuKey();
}
public class ViewDebug {
@@ -21714,9 +23567,11 @@ package android.view {
method protected void measureChildren(int, int);
method public final void offsetDescendantRectToMyCoords(android.view.View, android.graphics.Rect);
method public final void offsetRectIntoDescendantCoords(android.view.View, android.graphics.Rect);
+ method public boolean onInterceptHoverEvent(android.view.MotionEvent);
method public boolean onInterceptTouchEvent(android.view.MotionEvent);
method protected abstract void onLayout(boolean, int, int, int, int);
method protected boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+ method public boolean onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void recomputeViewAttributes(android.view.View);
method public void removeAllViews();
method public void removeAllViewsInLayout();
@@ -21729,7 +23584,10 @@ package android.view {
method public void requestChildFocus(android.view.View, android.view.View);
method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
method public void requestDisallowInterceptTouchEvent(boolean);
+ method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void requestTransparentRegion(android.view.View);
+ method protected void resetResolvedLayoutDirection();
+ method protected void resetResolvedTextDirection();
method public void scheduleLayoutAnimation();
method public void setAddStatesFromChildren(boolean);
method public void setAlwaysDrawnWithCacheEnabled(boolean);
@@ -21747,6 +23605,7 @@ package android.view {
method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener);
method public void setPersistentDrawingCache(int);
method protected void setStaticTransformationsEnabled(boolean);
+ method public boolean shouldDelayChildPressedState();
method public boolean showContextMenuForChild(android.view.View);
method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
method public void startLayoutAnimation();
@@ -21815,6 +23674,7 @@ package android.view {
method public abstract boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
method public abstract void requestDisallowInterceptTouchEvent(boolean);
method public abstract void requestLayout();
+ method public abstract boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public abstract void requestTransparentRegion(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
@@ -21823,6 +23683,9 @@ package android.view {
public class ViewPropertyAnimator {
method public android.view.ViewPropertyAnimator alpha(float);
method public android.view.ViewPropertyAnimator alphaBy(float);
+ method public void cancel();
+ method public long getDuration();
+ method public long getStartDelay();
method public android.view.ViewPropertyAnimator rotation(float);
method public android.view.ViewPropertyAnimator rotationBy(float);
method public android.view.ViewPropertyAnimator rotationX(float);
@@ -21836,6 +23699,8 @@ package android.view {
method public android.view.ViewPropertyAnimator setDuration(long);
method public android.view.ViewPropertyAnimator setInterpolator(android.animation.TimeInterpolator);
method public android.view.ViewPropertyAnimator setListener(android.animation.Animator.AnimatorListener);
+ method public android.view.ViewPropertyAnimator setStartDelay(long);
+ method public void start();
method public android.view.ViewPropertyAnimator translationX(float);
method public android.view.ViewPropertyAnimator translationXBy(float);
method public android.view.ViewPropertyAnimator translationY(float);
@@ -21949,6 +23814,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);
@@ -21962,6 +23828,8 @@ package android.view {
method public abstract void setTitle(java.lang.CharSequence);
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);
@@ -22060,7 +23928,7 @@ package android.view {
field public static final int FLAGS_CHANGED = 4; // 0x4
field public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 1; // 0x1
field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
- field public static final int FLAG_BLUR_BEHIND = 4; // 0x4
+ field public static final deprecated int FLAG_BLUR_BEHIND = 4; // 0x4
field public static final int FLAG_DIM_BEHIND = 2; // 0x2
field public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
field public static final int FLAG_DITHER = 4096; // 0x1000
@@ -22163,6 +24031,7 @@ package android.view.accessibility {
public final class AccessibilityEvent extends android.view.accessibility.AccessibilityRecord implements android.os.Parcelable {
method public void appendRecord(android.view.accessibility.AccessibilityRecord);
method public int describeContents();
+ method public static java.lang.String eventTypeToString(int);
method public long getEventTime();
method public int getEventType();
method public java.lang.CharSequence getPackageName();
@@ -22170,6 +24039,7 @@ package android.view.accessibility {
method public int getRecordCount();
method public void initFromParcel(android.os.Parcel);
method public static android.view.accessibility.AccessibilityEvent obtain(int);
+ method public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent);
method public static android.view.accessibility.AccessibilityEvent obtain();
method public void setEventTime(long);
method public void setEventType(int);
@@ -22180,11 +24050,18 @@ package android.view.accessibility {
field public static final deprecated int MAX_TEXT_LENGTH = 500; // 0x1f4
field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+ field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
field public static final int TYPE_VIEW_CLICKED = 1; // 0x1
field public static final int TYPE_VIEW_FOCUSED = 8; // 0x8
+ field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+ field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2
+ field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
+ field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+ field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20
}
@@ -22194,12 +24071,78 @@ package android.view.accessibility {
}
public final class AccessibilityManager {
- method public java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
+ method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+ method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
+ method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
+ method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
method public void interrupt();
method public boolean isEnabled();
+ method public boolean isTouchExplorationEnabled();
+ method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
}
+ public static abstract interface AccessibilityManager.AccessibilityStateChangeListener {
+ method public abstract void onAccessibilityStateChanged(boolean);
+ }
+
+ public class AccessibilityNodeInfo implements android.os.Parcelable {
+ method public void addAction(int);
+ method public void addChild(android.view.View);
+ method public int describeContents();
+ method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String);
+ method public int getActions();
+ method public void getBoundsInParent(android.graphics.Rect);
+ method public void getBoundsInScreen(android.graphics.Rect);
+ method public android.view.accessibility.AccessibilityNodeInfo getChild(int);
+ method public int getChildCount();
+ method public java.lang.CharSequence getClassName();
+ method public java.lang.CharSequence getContentDescription();
+ method public java.lang.CharSequence getPackageName();
+ method public android.view.accessibility.AccessibilityNodeInfo getParent();
+ method public java.lang.CharSequence getText();
+ method public int getWindowId();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isClickable();
+ method public boolean isEnabled();
+ method public boolean isFocusable();
+ method public boolean isFocused();
+ method public boolean isLongClickable();
+ method public boolean isPassword();
+ method public boolean isScrollable();
+ method public boolean isSelected();
+ method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View);
+ method public static android.view.accessibility.AccessibilityNodeInfo obtain();
+ method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.accessibility.AccessibilityNodeInfo);
+ method public boolean performAction(int);
+ method public void recycle();
+ method public void setBoundsInParent(android.graphics.Rect);
+ method public void setBoundsInScreen(android.graphics.Rect);
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setClassName(java.lang.CharSequence);
+ method public void setClickable(boolean);
+ method public void setContentDescription(java.lang.CharSequence);
+ method public void setEnabled(boolean);
+ method public void setFocusable(boolean);
+ method public void setFocused(boolean);
+ method public void setLongClickable(boolean);
+ method public void setPackageName(java.lang.CharSequence);
+ method public void setParent(android.view.View);
+ method public void setPassword(boolean);
+ method public void setScrollable(boolean);
+ method public void setSelected(boolean);
+ method public void setSource(android.view.View);
+ method public void setText(java.lang.CharSequence);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+ field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+ field public static final int ACTION_FOCUS = 1; // 0x1
+ field public static final int ACTION_SELECT = 4; // 0x4
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
public class AccessibilityRecord {
method public int getAddedCount();
method public java.lang.CharSequence getBeforeText();
@@ -22210,11 +24153,18 @@ package android.view.accessibility {
method public int getItemCount();
method public android.os.Parcelable getParcelableData();
method public int getRemovedCount();
+ method public int getScrollX();
+ method public int getScrollY();
+ method public android.view.accessibility.AccessibilityNodeInfo getSource();
method public java.util.List<java.lang.CharSequence> getText();
+ method public int getToIndex();
+ method public int getWindowId();
method public boolean isChecked();
method public boolean isEnabled();
method public boolean isFullScreen();
method public boolean isPassword();
+ method public boolean isScrollable();
+ method public static android.view.accessibility.AccessibilityRecord obtain(android.view.accessibility.AccessibilityRecord);
method public static android.view.accessibility.AccessibilityRecord obtain();
method public void recycle();
method public void setAddedCount(int);
@@ -22230,7 +24180,13 @@ package android.view.accessibility {
method public void setParcelableData(android.os.Parcelable);
method public void setPassword(boolean);
method public void setRemovedCount(int);
+ method public void setScrollX(int);
+ method public void setScrollY(int);
+ method public void setScrollable(boolean);
+ method public void setSource(android.view.View);
+ method public void setToIndex(int);
}
+
}
package android.view.animation {
@@ -22732,6 +24688,7 @@ package android.view.inputmethod {
method public java.util.List<android.view.inputmethod.InputMethodInfo> getEnabledInputMethodList();
method public java.util.List<android.view.inputmethod.InputMethodSubtype> getEnabledInputMethodSubtypeList(android.view.inputmethod.InputMethodInfo, boolean);
method public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodList();
+ method public android.view.inputmethod.InputMethodSubtype getLastInputMethodSubtype();
method public java.util.Map<android.view.inputmethod.InputMethodInfo, java.util.List<android.view.inputmethod.InputMethodSubtype>> getShortcutInputMethodsAndSubtypes();
method public void hideSoftInputFromInputMethod(android.os.IBinder, int);
method public boolean hideSoftInputFromWindow(android.os.IBinder, int);
@@ -22744,6 +24701,7 @@ package android.view.inputmethod {
method public boolean isWatchingCursor(android.view.View);
method public void restartInput(android.view.View);
method public void sendAppPrivateCommand(android.view.View, java.lang.String, android.os.Bundle);
+ method public void setAdditionalInputMethodSubtypes(java.lang.String, android.view.inputmethod.InputMethodSubtype[]);
method public boolean setCurrentInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
method public void setInputMethod(android.os.IBinder, java.lang.String);
method public void setInputMethodAndSubtype(android.os.IBinder, java.lang.String, android.view.inputmethod.InputMethodSubtype);
@@ -22759,6 +24717,7 @@ package android.view.inputmethod {
method public void updateCursor(android.view.View, int, int, int, int);
method public void updateExtractedText(android.view.View, int, android.view.inputmethod.ExtractedText);
method public void updateSelection(android.view.View, int, int, int, int);
+ method public void viewClicked(android.view.View);
field public static final int HIDE_IMPLICIT_ONLY = 1; // 0x1
field public static final int HIDE_NOT_ALWAYS = 2; // 0x2
field public static final int RESULT_HIDDEN = 3; // 0x3
@@ -22779,6 +24738,7 @@ package android.view.inputmethod {
method public abstract void updateCursor(android.graphics.Rect);
method public abstract void updateExtractedText(int, android.view.inputmethod.ExtractedText);
method public abstract void updateSelection(int, int, int, int, int, int);
+ method public abstract void viewClicked(boolean);
}
public static abstract interface InputMethodSession.EventCallback {
@@ -22786,20 +24746,100 @@ package android.view.inputmethod {
}
public final class InputMethodSubtype implements android.os.Parcelable {
+ ctor public InputMethodSubtype(int, int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean);
method public boolean containsExtraValueKey(java.lang.String);
method public int describeContents();
+ method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
method public java.lang.String getExtraValue();
method public java.lang.String getExtraValueOf(java.lang.String);
method public int getIconResId();
method public java.lang.String getLocale();
method public java.lang.String getMode();
method public int getNameResId();
+ method public boolean isAuxiliary();
+ method public boolean overridesImplicitlyEnabledSubtype();
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
}
}
+package android.view.textservice {
+
+ public final class SpellCheckerInfo implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.ComponentName getComponent();
+ method public java.lang.String getId();
+ method public java.lang.String getPackageName();
+ method public android.content.pm.ServiceInfo getServiceInfo();
+ method public java.lang.String getSettingsActivity();
+ method public android.view.textservice.SpellCheckerSubtype getSubtypeAt(int);
+ method public int getSubtypeCount();
+ method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+ method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public class SpellCheckerSession {
+ method public void close();
+ method public android.view.textservice.SpellCheckerInfo getSpellChecker();
+ method public void getSuggestions(android.view.textservice.TextInfo, int);
+ method public void getSuggestions(android.view.textservice.TextInfo[], int, boolean);
+ method public boolean isSessionDisconnected();
+ field public static final java.lang.String SERVICE_META_DATA = "android.view.textservice.scs";
+ }
+
+ public static abstract interface SpellCheckerSession.SpellCheckerSessionListener {
+ method public abstract void onGetSuggestions(android.view.textservice.SuggestionsInfo[]);
+ }
+
+ public final class SpellCheckerSubtype implements android.os.Parcelable {
+ ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String);
+ method public int describeContents();
+ method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
+ method public java.lang.String getExtraValue();
+ method public java.lang.String getLocale();
+ method public int getNameResId();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public final class SuggestionsInfo implements android.os.Parcelable {
+ ctor public SuggestionsInfo(int, java.lang.String[]);
+ ctor public SuggestionsInfo(int, java.lang.String[], int, int);
+ ctor public SuggestionsInfo(android.os.Parcel);
+ method public int describeContents();
+ method public int getCookie();
+ method public int getSequence();
+ method public java.lang.String getSuggestionAt(int);
+ method public int getSuggestionsAttributes();
+ method public int getSuggestionsCount();
+ method public void setCookieAndSequence(int, int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1
+ field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2
+ }
+
+ public final class TextInfo implements android.os.Parcelable {
+ ctor public TextInfo(java.lang.String);
+ ctor public TextInfo(java.lang.String, int, int);
+ ctor public TextInfo(android.os.Parcel);
+ method public int describeContents();
+ method public int getCookie();
+ method public int getSequence();
+ method public java.lang.String getText();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator CREATOR;
+ }
+
+ public final class TextServicesManager {
+ method public android.view.textservice.SpellCheckerSession newSpellCheckerSession(android.os.Bundle, java.util.Locale, android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean);
+ }
+
+}
+
package android.webkit {
public final deprecated class CacheManager {
@@ -22987,6 +25027,7 @@ package android.webkit {
method public void onReceivedTouchIconUrl(android.webkit.WebView, java.lang.String, boolean);
method public void onRequestFocus(android.webkit.WebView);
method public void onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback);
+ method public void onShowCustomView(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback);
}
public static abstract interface WebChromeClient.CustomViewCallback {
@@ -23061,7 +25102,8 @@ package android.webkit {
method public boolean getSavePassword();
method public synchronized java.lang.String getSerifFontFamily();
method public synchronized java.lang.String getStandardFontFamily();
- method public synchronized android.webkit.WebSettings.TextSize getTextSize();
+ method public deprecated synchronized android.webkit.WebSettings.TextSize getTextSize();
+ method public synchronized int getTextZoom();
method public deprecated synchronized boolean getUseDoubleTree();
method public deprecated boolean getUseWebViewBackgroundForOverscrollBackground();
method public synchronized boolean getUseWideViewPort();
@@ -23111,7 +25153,8 @@ package android.webkit {
method public synchronized void setStandardFontFamily(java.lang.String);
method public synchronized void setSupportMultipleWindows(boolean);
method public void setSupportZoom(boolean);
- method public synchronized void setTextSize(android.webkit.WebSettings.TextSize);
+ method public deprecated synchronized void setTextSize(android.webkit.WebSettings.TextSize);
+ method public synchronized void setTextZoom(int);
method public deprecated synchronized void setUseDoubleTree(boolean);
method public deprecated void setUseWebViewBackgroundForOverscrollBackground(boolean);
method public synchronized void setUseWideViewPort(boolean);
@@ -23150,7 +25193,7 @@ package android.webkit {
enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL;
}
- public static final class WebSettings.TextSize extends java.lang.Enum {
+ public static final deprecated class WebSettings.TextSize extends java.lang.Enum {
method public static android.webkit.WebSettings.TextSize valueOf(java.lang.String);
method public static final android.webkit.WebSettings.TextSize[] values();
enum_constant public static final android.webkit.WebSettings.TextSize LARGER;
@@ -23300,11 +25343,11 @@ package android.webkit {
public class WebView.HitTestResult {
method public java.lang.String getExtra();
method public int getType();
- field public static final int ANCHOR_TYPE = 1; // 0x1
+ field public static final deprecated int ANCHOR_TYPE = 1; // 0x1
field public static final int EDIT_TEXT_TYPE = 9; // 0x9
field public static final int EMAIL_TYPE = 4; // 0x4
field public static final int GEO_TYPE = 3; // 0x3
- field public static final int IMAGE_ANCHOR_TYPE = 6; // 0x6
+ field public static final deprecated int IMAGE_ANCHOR_TYPE = 6; // 0x6
field public static final int IMAGE_TYPE = 5; // 0x5
field public static final int PHONE_TYPE = 2; // 0x2
field public static final int SRC_ANCHOR_TYPE = 7; // 0x7
@@ -23384,6 +25427,7 @@ package android.widget {
method public void beforeTextChanged(java.lang.CharSequence, int, int, int);
method public void clearChoices();
method public void clearTextFilter();
+ method public void deferNotifyDataSetChanged();
method public int getCacheColorHint();
method public int getCheckedItemCount();
method public long[] getCheckedItemIds();
@@ -23597,7 +25641,9 @@ package android.widget {
public abstract class AdapterViewAnimator extends android.widget.AdapterView {
ctor public AdapterViewAnimator(android.content.Context);
ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet);
+ ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int);
method public void advance();
+ method public void deferNotifyDataSetChanged();
method public void fyiWillBeAdvancedByHostKThx();
method public android.widget.Adapter getAdapter();
method public android.view.View getCurrentView();
@@ -23954,6 +26000,17 @@ package android.widget {
ctor public DigitalClock(android.content.Context, android.util.AttributeSet);
}
+ public class EdgeEffect {
+ ctor public EdgeEffect(android.content.Context);
+ method public boolean draw(android.graphics.Canvas);
+ method public void finish();
+ method public boolean isFinished();
+ method public void onAbsorb(int);
+ method public void onPull(float);
+ method public void onRelease();
+ method public void setSize(int, int);
+ }
+
public class EditText extends android.widget.TextView {
ctor public EditText(android.content.Context);
ctor public EditText(android.content.Context, android.util.AttributeSet);
@@ -23991,6 +26048,7 @@ package android.widget {
ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int);
method public boolean collapseGroup(int);
method public boolean expandGroup(int);
+ method public boolean expandGroup(int, boolean);
method public android.widget.ExpandableListAdapter getExpandableListAdapter();
method public long getExpandableListPosition(int);
method public int getFlatListPosition(long);
@@ -24075,8 +26133,9 @@ package android.widget {
ctor public FrameLayout(android.content.Context);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
- method public boolean getConsiderGoneChildrenWhenMeasuring();
+ method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
method public android.graphics.drawable.Drawable getForeground();
+ method public boolean getMeasureAllChildren();
method protected void onLayout(boolean, int, int, int, int);
method public void setForeground(android.graphics.drawable.Drawable);
method public void setForegroundGravity(int);
@@ -24115,6 +26174,61 @@ package android.widget {
ctor public Gallery.LayoutParams(android.view.ViewGroup.LayoutParams);
}
+ public class GridLayout extends android.view.ViewGroup {
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+ ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+ ctor public GridLayout(android.content.Context);
+ method public int getAlignmentMode();
+ method public int getColumnCount();
+ method public int getOrientation();
+ method public int getRowCount();
+ method public boolean getUseDefaultMargins();
+ method public boolean isColumnOrderPreserved();
+ method public boolean isRowOrderPreserved();
+ method protected void onLayout(boolean, int, int, int, int);
+ method public void setAlignmentMode(int);
+ method public void setColumnCount(int);
+ method public void setColumnOrderPreserved(boolean);
+ method public void setOrientation(int);
+ method public void setRowCount(int);
+ method public void setRowOrderPreserved(boolean);
+ method public void setUseDefaultMargins(boolean);
+ method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment);
+ method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment);
+ method public static android.widget.GridLayout.Spec spec(int, int);
+ method public static android.widget.GridLayout.Spec spec(int);
+ field public static final int ALIGN_BOUNDS = 0; // 0x0
+ field public static final int ALIGN_MARGINS = 1; // 0x1
+ field public static final android.widget.GridLayout.Alignment BASELINE;
+ field public static final android.widget.GridLayout.Alignment BOTTOM;
+ field public static final android.widget.GridLayout.Alignment CENTER;
+ field public static final android.widget.GridLayout.Alignment FILL;
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final android.widget.GridLayout.Alignment LEFT;
+ field public static final android.widget.GridLayout.Alignment RIGHT;
+ field public static final android.widget.GridLayout.Alignment TOP;
+ field public static final int UNDEFINED = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static abstract class GridLayout.Alignment {
+ }
+
+ public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public GridLayout.LayoutParams(android.widget.GridLayout.Spec, android.widget.GridLayout.Spec);
+ ctor public GridLayout.LayoutParams();
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+ ctor public GridLayout.LayoutParams(android.widget.GridLayout.LayoutParams);
+ ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+ method public void setGravity(int);
+ field public android.widget.GridLayout.Spec columnSpec;
+ field public android.widget.GridLayout.Spec rowSpec;
+ }
+
+ public static class GridLayout.Spec {
+ }
+
public class GridView extends android.widget.AbsListView {
ctor public GridView(android.content.Context);
ctor public GridView(android.content.Context, android.util.AttributeSet);
@@ -24247,6 +26361,7 @@ package android.widget {
ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
method public int getBaselineAlignedChildIndex();
+ method public int getDividerPadding();
method public int getOrientation();
method public int getShowDividers();
method public float getWeightSum();
@@ -24256,6 +26371,7 @@ package android.widget {
method public void setBaselineAligned(boolean);
method public void setBaselineAlignedChildIndex(int);
method public void setDividerDrawable(android.graphics.drawable.Drawable);
+ method public void setDividerPadding(int);
method public void setGravity(int);
method public void setHorizontalGravity(int);
method public void setMeasureWithLargestChildEnabled(boolean);
@@ -24481,6 +26597,7 @@ package android.widget {
method public void fling(int, int, int, int, int, int, int, int);
method public void fling(int, int, int, int, int, int, int, int, int, int);
method public final void forceFinished(boolean);
+ method public float getCurrVelocity();
method public final int getCurrX();
method public final int getCurrY();
method public final int getFinalX();
@@ -24502,10 +26619,16 @@ package android.widget {
method public void dismiss();
method public android.view.Menu getMenu();
method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(int);
+ method public void setOnDismissListener(android.widget.PopupMenu.OnDismissListener);
method public void setOnMenuItemClickListener(android.widget.PopupMenu.OnMenuItemClickListener);
method public void show();
}
+ public static abstract interface PopupMenu.OnDismissListener {
+ method public abstract void onDismiss(android.widget.PopupMenu);
+ }
+
public static abstract interface PopupMenu.OnMenuItemClickListener {
method public abstract boolean onMenuItemClick(android.view.MenuItem);
}
@@ -24731,7 +26854,8 @@ package android.widget {
method public void setPendingIntentTemplate(int, android.app.PendingIntent);
method public void setProgressBar(int, int, int, boolean);
method public void setRelativeScrollPosition(int, int);
- method public void setRemoteAdapter(int, int, android.content.Intent);
+ method public deprecated void setRemoteAdapter(int, int, android.content.Intent);
+ method public void setRemoteAdapter(int, android.content.Intent);
method public void setScrollPosition(int, int);
method public void setShort(int, java.lang.String, short);
method public void setString(int, java.lang.String, java.lang.String);
@@ -24816,6 +26940,7 @@ package android.widget {
method public void extendDuration(int);
method public void fling(int, int, int, int, int, int, int, int);
method public final void forceFinished(boolean);
+ method public float getCurrVelocity();
method public final int getCurrX();
method public final int getCurrY();
method public final int getDuration();
@@ -24832,7 +26957,7 @@ package android.widget {
method public int timePassed();
}
- public class SearchView extends android.widget.LinearLayout {
+ public class SearchView extends android.widget.LinearLayout implements android.view.CollapsibleActionView {
ctor public SearchView(android.content.Context);
ctor public SearchView(android.content.Context, android.util.AttributeSet);
method public java.lang.CharSequence getQuery();
@@ -24841,8 +26966,12 @@ package android.widget {
method public boolean isIconified();
method public boolean isQueryRefinementEnabled();
method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
method public void setIconified(boolean);
method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
method public void setMaxWidth(int);
method public void setOnCloseListener(android.widget.SearchView.OnCloseListener);
method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
@@ -24890,6 +27019,19 @@ package android.widget {
method public abstract void onStopTrackingTouch(android.widget.SeekBar);
}
+ 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();
@@ -25002,6 +27144,12 @@ package android.widget {
method public abstract void onScrollStarted();
}
+ public final class Space extends android.view.View {
+ ctor public Space(android.content.Context, android.util.AttributeSet, int);
+ ctor public Space(android.content.Context, android.util.AttributeSet);
+ ctor public Space(android.content.Context);
+ }
+
public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
ctor public Spinner(android.content.Context);
ctor public Spinner(android.content.Context, int);
@@ -25024,6 +27172,21 @@ package android.widget {
public class StackView extends android.widget.AdapterViewAnimator {
ctor public StackView(android.content.Context);
ctor public StackView(android.content.Context, android.util.AttributeSet);
+ ctor public StackView(android.content.Context, android.util.AttributeSet, int);
+ }
+
+ public class Switch extends android.widget.CompoundButton {
+ ctor public Switch(android.content.Context);
+ ctor public Switch(android.content.Context, android.util.AttributeSet);
+ ctor public Switch(android.content.Context, android.util.AttributeSet, int);
+ method public java.lang.CharSequence getTextOff();
+ method public java.lang.CharSequence getTextOn();
+ method public void onMeasure(int, int);
+ method public void setSwitchTextAppearance(android.content.Context, int);
+ method public void setSwitchTypeface(android.graphics.Typeface, int);
+ method public void setSwitchTypeface(android.graphics.Typeface);
+ method public void setTextOff(java.lang.CharSequence);
+ method public void setTextOn(java.lang.CharSequence);
}
public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener {
@@ -25182,6 +27345,7 @@ package android.widget {
method public final android.content.res.ColorStateList getLinkTextColors();
method public final boolean getLinksClickable();
method public final android.text.method.MovementMethod getMovementMethod();
+ method public int getOffsetForPosition(float, float);
method public android.text.TextPaint getPaint();
method public int getPaintFlags();
method public java.lang.String getPrivateImeOptions();
@@ -25202,6 +27366,7 @@ package android.widget {
method public android.text.style.URLSpan[] getUrls();
method public boolean hasSelection();
method public boolean isInputMethodTarget();
+ method public boolean isSuggestionsEnabled();
method public boolean isTextSelectable();
method public int length();
method public boolean moveCursorToVisibleOffset();
@@ -25218,6 +27383,11 @@ package android.widget {
method protected void onTextChanged(java.lang.CharSequence, int, int, int);
method public boolean onTextContextMenuItem(int);
method public void removeTextChangedListener(android.text.TextWatcher);
+ method protected void resetResolvedDrawables();
+ method protected void resetResolvedLayoutDirection();
+ method protected void resolveDrawables();
+ method protected void resolveTextDirection();
+ method public void setAllCaps(boolean);
method public final void setAutoLinkMask(int);
method public void setCompoundDrawablePadding(int);
method public void setCompoundDrawables(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
@@ -25490,10 +27660,10 @@ package com.android.internal.util {
package dalvik.annotation {
- public abstract class TestTarget implements java.lang.annotation.Annotation {
+ public abstract deprecated class TestTarget implements java.lang.annotation.Annotation {
}
- public abstract class TestTargetClass implements java.lang.annotation.Annotation {
+ public abstract deprecated class TestTargetClass implements java.lang.annotation.Annotation {
}
}
@@ -25788,6 +27958,11 @@ package dalvik.bytecode {
package dalvik.system {
+ public class BaseDexClassLoader extends java.lang.ClassLoader {
+ ctor public BaseDexClassLoader(java.lang.String, java.io.File, java.lang.String, java.lang.ClassLoader);
+ method public java.lang.String findLibrary(java.lang.String);
+ }
+
public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
ctor public DexClassLoader(java.lang.String, java.lang.String, java.lang.String, java.lang.ClassLoader);
}
@@ -25806,7 +27981,6 @@ package dalvik.system {
public class PathClassLoader extends dalvik.system.BaseDexClassLoader {
ctor public PathClassLoader(java.lang.String, java.lang.ClassLoader);
ctor public PathClassLoader(java.lang.String, java.lang.String, java.lang.ClassLoader);
- method public java.lang.String findLibrary(java.lang.String);
}
}
@@ -26241,9 +28415,7 @@ package java.io {
public final class FilePermission extends java.security.Permission implements java.io.Serializable {
ctor public FilePermission(java.lang.String, java.lang.String);
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
@@ -26380,10 +28552,10 @@ package java.io {
}
public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants {
- ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException;
+ ctor protected ObjectInputStream() throws java.io.IOException;
ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException;
method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException;
- method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException;
+ method protected boolean enableResolveObject(boolean);
method public int read() throws java.io.IOException;
method public boolean readBoolean() throws java.io.IOException;
method public byte readByte() throws java.io.IOException;
@@ -26441,13 +28613,13 @@ package java.io {
}
public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants {
- ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException;
+ ctor protected ObjectOutputStream() throws java.io.IOException;
ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException;
method protected void annotateClass(java.lang.Class<?>) throws java.io.IOException;
method protected void annotateProxyClass(java.lang.Class<?>) throws java.io.IOException;
method public void defaultWriteObject() throws java.io.IOException;
method protected void drain() throws java.io.IOException;
- method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException;
+ method protected boolean enableReplaceObject(boolean);
method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException;
method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException;
method public void reset() throws java.io.IOException;
@@ -27276,28 +29448,28 @@ package java.lang {
method public java.lang.ClassLoader getClassLoader();
method public java.lang.Class<?>[] getClasses();
method public java.lang.Class<?> getComponentType();
- method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
- method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
+ method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
+ method public java.lang.reflect.Constructor<?>[] getConstructors();
method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
- method public java.lang.Class<?>[] getDeclaredClasses() throws java.lang.SecurityException;
- method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
- method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException;
- method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException, java.lang.SecurityException;
- method public java.lang.reflect.Field[] getDeclaredFields() throws java.lang.SecurityException;
- method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
- method public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException;
+ method public java.lang.Class<?>[] getDeclaredClasses();
+ method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
+ method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors();
+ method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException;
+ method public java.lang.reflect.Field[] getDeclaredFields();
+ method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
+ method public java.lang.reflect.Method[] getDeclaredMethods();
method public java.lang.Class<?> getDeclaringClass();
method public java.lang.Class<?> getEnclosingClass();
method public java.lang.reflect.Constructor<?> getEnclosingConstructor();
method public java.lang.reflect.Method getEnclosingMethod();
method public T[] getEnumConstants();
- method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException, java.lang.SecurityException;
- method public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException;
+ method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException;
+ method public java.lang.reflect.Field[] getFields();
method public java.lang.reflect.Type[] getGenericInterfaces();
method public java.lang.reflect.Type getGenericSuperclass();
method public java.lang.Class<?>[] getInterfaces();
- method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
- method public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException;
+ method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException;
+ method public java.lang.reflect.Method[] getMethods();
method public int getModifiers();
method public java.lang.String getName();
method public java.lang.Package getPackage();
@@ -28478,7 +30650,7 @@ package java.lang.ref {
ctor public ReferenceQueue();
method public synchronized java.lang.ref.Reference<? extends T> poll();
method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
- method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
+ method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.InterruptedException;
}
public class SoftReference extends java.lang.ref.Reference {
@@ -28502,8 +30674,8 @@ package java.lang.reflect {
method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
method public boolean isAccessible();
method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
- method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException;
- method public void setAccessible(boolean) throws java.lang.SecurityException;
+ method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean);
+ method public void setAccessible(boolean);
}
public abstract interface AnnotatedElement {
@@ -28538,6 +30710,7 @@ package java.lang.reflect {
}
public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+ method public A getAnnotation(java.lang.Class<A>);
method public java.lang.Class<T> getDeclaringClass();
method public java.lang.Class<?>[] getExceptionTypes();
method public java.lang.reflect.Type[] getGenericExceptionTypes();
@@ -28555,6 +30728,7 @@ package java.lang.reflect {
public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
method public java.lang.Object get(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+ method public A getAnnotation(java.lang.Class<A>);
method public boolean getBoolean(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
method public byte getByte(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
method public char getChar(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
@@ -28619,6 +30793,7 @@ package java.lang.reflect {
}
public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+ method public A getAnnotation(java.lang.Class<A>);
method public java.lang.Class<?> getDeclaringClass();
method public java.lang.Object getDefaultValue();
method public java.lang.Class<?>[] getExceptionTypes();
@@ -28999,8 +31174,8 @@ package java.net {
ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException;
method public void bind(java.net.SocketAddress) throws java.net.SocketException;
method public void close();
- method public void connect(java.net.InetAddress, int);
method public void connect(java.net.SocketAddress) throws java.net.SocketException;
+ method public void connect(java.net.InetAddress, int);
method public void disconnect();
method public boolean getBroadcast() throws java.net.SocketException;
method public java.nio.channels.DatagramChannel getChannel();
@@ -29488,9 +31663,7 @@ package java.net {
public final class SocketPermission extends java.security.Permission implements java.io.Serializable {
ctor public SocketPermission(java.lang.String, java.lang.String);
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
@@ -30497,9 +32670,7 @@ package java.security {
public final class AllPermission extends java.security.Permission {
ctor public AllPermission(java.lang.String, java.lang.String);
ctor public AllPermission();
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
@@ -30513,9 +32684,7 @@ package java.security {
public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable {
ctor public BasicPermission(java.lang.String);
ctor public BasicPermission(java.lang.String, java.lang.String);
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
@@ -30878,10 +33047,8 @@ package java.security {
public abstract class Permission implements java.security.Guard java.io.Serializable {
ctor public Permission(java.lang.String);
method public void checkGuard(java.lang.Object) throws java.lang.SecurityException;
- method public abstract boolean equals(java.lang.Object);
method public abstract java.lang.String getActions();
method public final java.lang.String getName();
- method public abstract int hashCode();
method public abstract boolean implies(java.security.Permission);
method public java.security.PermissionCollection newPermissionCollection();
}
@@ -31138,13 +33305,11 @@ package java.security {
public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable {
ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]);
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
method public java.lang.String getUnresolvedActions();
method public java.security.cert.Certificate[] getUnresolvedCerts();
method public java.lang.String getUnresolvedName();
method public java.lang.String getUnresolvedType();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
@@ -33935,8 +36100,8 @@ package java.util {
method public void and(java.util.BitSet);
method public void andNot(java.util.BitSet);
method public int cardinality();
- method public void clear();
method public void clear(int);
+ method public void clear();
method public void clear(int, int);
method public java.lang.Object clone();
method public void flip(int);
@@ -33951,8 +36116,8 @@ package java.util {
method public void or(java.util.BitSet);
method public void set(int);
method public void set(int, boolean);
- method public void set(int, int);
method public void set(int, int, boolean);
+ method public void set(int, int);
method public int size();
method public void xor(java.util.BitSet);
}
@@ -36363,7 +38528,7 @@ package java.util.logging {
method public boolean isLoggable(java.util.logging.LogRecord);
method public abstract void publish(java.util.logging.LogRecord);
method protected void reportError(java.lang.String, java.lang.Exception, int);
- method public void setEncoding(java.lang.String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException;
+ method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException;
method public void setErrorManager(java.util.logging.ErrorManager);
method public void setFilter(java.util.logging.Filter);
method public void setFormatter(java.util.logging.Formatter);
@@ -38660,11 +40825,9 @@ package javax.security.auth {
public final class PrivateCredentialPermission extends java.security.Permission {
ctor public PrivateCredentialPermission(java.lang.String, java.lang.String);
- method public boolean equals(java.lang.Object);
method public java.lang.String getActions();
method public java.lang.String getCredentialClass();
method public java.lang.String[][] getPrincipals();
- method public int hashCode();
method public boolean implies(java.security.Permission);
}
diff --git a/api/current.txt b/api/current.txt
index ce78f9e9d5af..9f2a6dfc3855 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -759,6 +759,7 @@ package android {
field public static final int prompt = 16843131; // 0x101017b
field public static final int propertyName = 16843489; // 0x10102e1
field public static final int protectionLevel = 16842761; // 0x1010009
+ field public static final int publicKey = 16843686; // 0x10103a6
field public static final int queryActionMsg = 16843227; // 0x10101db
field public static final int queryAfterZeroResults = 16843394; // 0x1010282
field public static final int queryHint = 16843608; // 0x1010358
@@ -2072,6 +2073,7 @@ package android.accounts {
method public java.lang.String getUserData(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void invalidateAuthToken(java.lang.String, java.lang.String);
+ method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener);
@@ -4565,6 +4567,7 @@ package android.bluetooth {
field public static final java.lang.String EXTRA_PREVIOUS_STATE = "android.bluetooth.profile.extra.PREVIOUS_STATE";
field public static final java.lang.String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
field public static final int HEADSET = 1; // 0x1
+ field public static final int HEALTH = 3; // 0x3
field public static final int STATE_CONNECTED = 2; // 0x2
field public static final int STATE_CONNECTING = 1; // 0x1
field public static final int STATE_DISCONNECTED = 0; // 0x0
@@ -5453,6 +5456,7 @@ package android.content {
field public static final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
field public static final java.lang.String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
field public static final deprecated java.lang.String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
+ field public static final java.lang.String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
field public static final java.lang.String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
field public static final java.lang.String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
field public static final java.lang.String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
@@ -6206,11 +6210,13 @@ package android.content.pm {
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
+ method public abstract void verifyPendingInstall(int, int);
field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2
field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
field public static final int DONT_KILL_APP = 1; // 0x1
+ field public static final java.lang.String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
field public static final java.lang.String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
field public static final java.lang.String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
field public static final java.lang.String FEATURE_CAMERA = "android.hardware.camera";
@@ -6272,6 +6278,8 @@ package android.content.pm {
field public static final int SIGNATURE_NO_MATCH = -3; // 0xfffffffd
field public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; // 0xfffffffe
field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
+ field public static final int VERIFICATION_ALLOW = 1; // 0x1
+ field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
}
public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
@@ -19833,6 +19841,7 @@ package android.test.mock {
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
+ method public void verifyPendingInstall(int, int);
}
public class MockResources extends android.content.res.Resources {
diff --git a/build/phone-xhdpi-1024-dalvik-heap.mk b/build/phone-xhdpi-1024-dalvik-heap.mk
new file mode 100644
index 000000000000..f76535a7ad63
--- /dev/null
+++ b/build/phone-xhdpi-1024-dalvik-heap.mk
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+
+# Provides overrides to configure the Dalvik heap for a standard tablet device.
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ dalvik.vm.heapstartsize=8m \
+ dalvik.vm.heapgrowthlimit=64m \
+ dalvik.vm.heapsize=256m
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c
index 0b08c5e7aca0..30aed3317307 100644
--- a/cmds/dumpstate/dumpstate.c
+++ b/cmds/dumpstate/dumpstate.c
@@ -72,6 +72,7 @@ static void dumpstate() {
printf("Command line: %s\n", strtok(cmdline_buf, "\n"));
printf("\n");
+ run_command("UPTIME", 10, "uptime", NULL);
dump_file("MEMORY INFO", "/proc/meminfo");
run_command("CPU INFO", 10, "top", "-n", "1", "-d", "1", "-m", "30", "-t", NULL);
run_command("PROCRANK", 20, "procrank", NULL);
@@ -81,8 +82,6 @@ static void dumpstate() {
dump_file("ZONEINFO", "/proc/zoneinfo");
dump_file("PAGETYPEINFO", "/proc/pagetypeinfo");
dump_file("BUDDYINFO", "/proc/buddyinfo");
- dump_file("QTAGUID CTRL INFO", "/proc/net/xt_qtaguid/ctrl");
- run_command("QTAGUID STATS INFO", 10, "su", "root", "cat", "/proc/net/xt_qtaguid/stats", NULL);
if (screenshot_path[0]) {
LOGI("taking screenshot\n");
@@ -114,6 +113,11 @@ static void dumpstate() {
run_command("RADIO LOG", 20, "logcat", "-b", "radio", "-v", "threadtime", "-d", "*:v", NULL);
run_command("NETWORK INTERFACES", 10, "su", "root", "netcfg", NULL);
+ dump_file("NETWORK DEV INFO", "/proc/net/dev");
+ dump_file("QTAGUID NETWORK INTERFACES INFO", "/proc/net/xt_qtaguid/iface_stat_all");
+ dump_file("QTAGUID CTRL INFO", "/proc/net/xt_qtaguid/ctrl");
+ run_command("QTAGUID STATS INFO", 10, "su", "root", "cat", "/proc/net/xt_qtaguid/stats", NULL);
+
dump_file("NETWORK ROUTES", "/proc/net/route");
dump_file("NETWORK ROUTES IPV6", "/proc/net/ipv6_route");
dump_file("ARP CACHE", "/proc/net/arp");
diff --git a/cmds/ip-up-vpn/ip-up-vpn.c b/cmds/ip-up-vpn/ip-up-vpn.c
index e9ee95d67680..0e6286f9279c 100644
--- a/cmds/ip-up-vpn/ip-up-vpn.c
+++ b/cmds/ip-up-vpn/ip-up-vpn.c
@@ -40,6 +40,7 @@ static const char *env(const char *name) {
static int set_address(struct sockaddr *sa, const char *address) {
sa->sa_family = AF_INET;
+ errno = EINVAL;
return inet_pton(AF_INET, address, &((struct sockaddr_in *)sa)->sin_addr);
}
@@ -124,10 +125,11 @@ int main(int argc, char **argv)
}
/* Set the netmask. */
- if (!set_address(&ifr.ifr_netmask, env("INTERNAL_NETMASK4")) ||
- ioctl(s, SIOCSIFNETMASK, &ifr)) {
- LOGE("Cannot set netmask: %s", strerror(errno));
- return 1;
+ if (set_address(&ifr.ifr_netmask, env("INTERNAL_NETMASK4"))) {
+ if (ioctl(s, SIOCSIFNETMASK, &ifr)) {
+ LOGE("Cannot set netmask: %s", strerror(errno));
+ return 1;
+ }
}
/* TODO: Send few packets to trigger phase 2? */
diff --git a/cmds/stagefright/sf2.cpp b/cmds/stagefright/sf2.cpp
index 6fa66cf3524e..f547e019171c 100644
--- a/cmds/stagefright/sf2.cpp
+++ b/cmds/stagefright/sf2.cpp
@@ -46,7 +46,8 @@ struct Controller : public AHandler {
mDecodeAudio(decodeAudio),
mSurface(surface),
mRenderToSurface(renderToSurface),
- mCodec(new ACodec) {
+ mCodec(new ACodec),
+ mIsVorbis(false) {
CHECK(!mDecodeAudio || mSurface == NULL);
}
@@ -85,6 +86,12 @@ protected:
if (!strncasecmp(mDecodeAudio ? "audio/" : "video/",
mime, 6)) {
mSource = extractor->getTrack(i);
+
+ if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) {
+ mIsVorbis = true;
+ } else {
+ mIsVorbis = false;
+ }
break;
}
}
@@ -227,6 +234,7 @@ private:
bool mRenderToSurface;
sp<ACodec> mCodec;
sp<MediaSource> mSource;
+ bool mIsVorbis;
Vector<sp<ABuffer> > mCSD;
size_t mCSDIndex;
@@ -369,6 +377,20 @@ private:
buffer->meta()->setInt32("csd", true);
mCSD.push(buffer);
+ } else if (meta->findData(kKeyVorbisInfo, &type, &data, &size)) {
+ sp<ABuffer> buffer = new ABuffer(size);
+ memcpy(buffer->data(), data, size);
+
+ buffer->meta()->setInt32("csd", true);
+ mCSD.push(buffer);
+
+ CHECK(meta->findData(kKeyVorbisBooks, &type, &data, &size));
+
+ buffer = new ABuffer(size);
+ memcpy(buffer->data(), data, size);
+
+ buffer->meta()->setInt32("csd", true);
+ mCSD.push(buffer);
}
int32_t maxInputSize;
@@ -423,10 +445,17 @@ private:
}
}
- if (inBuffer->range_length() > sizeLeft) {
+ size_t sizeNeeded = inBuffer->range_length();
+ if (mIsVorbis) {
+ // Vorbis data is suffixed with the number of
+ // valid samples on the page.
+ sizeNeeded += sizeof(int32_t);
+ }
+
+ if (sizeNeeded > sizeLeft) {
if (outBuffer->size() == 0) {
LOGE("Unable to fit even a single input buffer of size %d.",
- inBuffer->range_length());
+ sizeNeeded);
}
CHECK_GT(outBuffer->size(), 0u);
@@ -448,10 +477,22 @@ private:
+ inBuffer->range_offset(),
inBuffer->range_length());
+ if (mIsVorbis) {
+ int32_t numPageSamples;
+ if (!inBuffer->meta_data()->findInt32(
+ kKeyValidSamples, &numPageSamples)) {
+ numPageSamples = -1;
+ }
+
+ memcpy(outBuffer->data()
+ + outBuffer->size() + inBuffer->range_length(),
+ &numPageSamples, sizeof(numPageSamples));
+ }
+
outBuffer->setRange(
- 0, outBuffer->size() + inBuffer->range_length());
+ 0, outBuffer->size() + sizeNeeded);
- sizeLeft -= inBuffer->range_length();
+ sizeLeft -= sizeNeeded;
inBuffer->release();
inBuffer = NULL;
@@ -569,12 +610,16 @@ int main(int argc, char **argv) {
CHECK(control->isValid());
SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(30000), (status_t)OK);
+ CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
CHECK_EQ(control->show(), (status_t)OK);
SurfaceComposerClient::closeGlobalTransaction();
surface = control->getSurface();
CHECK(surface != NULL);
+
+ CHECK_EQ((status_t)OK,
+ native_window_api_connect(
+ surface.get(), NATIVE_WINDOW_API_MEDIA));
}
sp<Controller> controller =
@@ -589,6 +634,10 @@ int main(int argc, char **argv) {
looper->unregisterHandler(controller->id());
if (!decodeAudio && useSurface) {
+ CHECK_EQ((status_t)OK,
+ native_window_api_disconnect(
+ surface.get(), NATIVE_WINDOW_API_MEDIA));
+
composerClient->dispose();
}
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index 34f0a64f0b72..528d197dd0fb 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -133,6 +133,39 @@ static void displayAVCProfileLevelIfPossible(const sp<MetaData>& meta) {
}
}
+static void dumpSource(const sp<MediaSource> &source, const String8 &filename) {
+ FILE *out = fopen(filename.string(), "wb");
+
+ CHECK_EQ((status_t)OK, source->start());
+
+ status_t err;
+ for (;;) {
+ MediaBuffer *mbuf;
+ err = source->read(&mbuf);
+
+ if (err == INFO_FORMAT_CHANGED) {
+ continue;
+ } else if (err != OK) {
+ break;
+ }
+
+ CHECK_EQ(
+ fwrite((const uint8_t *)mbuf->data() + mbuf->range_offset(),
+ 1,
+ mbuf->range_length(),
+ out),
+ (ssize_t)mbuf->range_length());
+
+ mbuf->release();
+ mbuf = NULL;
+ }
+
+ CHECK_EQ((status_t)OK, source->stop());
+
+ fclose(out);
+ out = NULL;
+}
+
static void playSource(OMXClient *client, sp<MediaSource> &source) {
sp<MetaData> meta = source->getFormat();
@@ -578,6 +611,7 @@ static void usage(const char *me) {
"(video only)\n");
fprintf(stderr, " -S allocate buffers from a surface\n");
fprintf(stderr, " -T allocate buffers from a surface texture\n");
+ fprintf(stderr, " -d(ump) filename (raw stream data to a file)\n");
}
int main(int argc, char **argv) {
@@ -590,6 +624,8 @@ int main(int argc, char **argv) {
bool seekTest = false;
bool useSurfaceAlloc = false;
bool useSurfaceTexAlloc = false;
+ bool dumpStream = false;
+ String8 dumpStreamFilename;
gNumRepetitions = 1;
gMaxNumFrames = 0;
gReproduceBug = -1;
@@ -604,7 +640,7 @@ int main(int argc, char **argv) {
sp<LiveSession> liveSession;
int res;
- while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxST")) >= 0) {
+ while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxSTd:")) >= 0) {
switch (res) {
case 'a':
{
@@ -612,6 +648,13 @@ int main(int argc, char **argv) {
break;
}
+ case 'd':
+ {
+ dumpStream = true;
+ dumpStreamFilename.setTo(optarg);
+ break;
+ }
+
case 'l':
{
listComponents = true;
@@ -874,7 +917,7 @@ int main(int argc, char **argv) {
CHECK(control->isValid());
SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(30000), (status_t)OK);
+ CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
CHECK_EQ(control->show(), (status_t)OK);
SurfaceComposerClient::closeGlobalTransaction();
@@ -886,6 +929,10 @@ int main(int argc, char **argv) {
sp<SurfaceTexture> texture = new SurfaceTexture(0 /* tex */);
gSurface = new SurfaceTextureClient(texture);
}
+
+ CHECK_EQ((status_t)OK,
+ native_window_api_connect(
+ gSurface.get(), NATIVE_WINDOW_API_MEDIA));
}
DataSource::RegisterDefaultSniffers();
@@ -1062,6 +1109,8 @@ int main(int argc, char **argv) {
if (gWriteMP4) {
writeSourcesToMP4(mediaSources, syncInfoPresent);
+ } else if (dumpStream) {
+ dumpSource(mediaSource, dumpStreamFilename);
} else if (seekTest) {
performSeekTest(mediaSource);
} else {
@@ -1077,6 +1126,10 @@ int main(int argc, char **argv) {
}
if ((useSurfaceAlloc || useSurfaceTexAlloc) && !audioOnly) {
+ CHECK_EQ((status_t)OK,
+ native_window_api_disconnect(
+ gSurface.get(), NATIVE_WINDOW_API_MEDIA));
+
gSurface.clear();
if (useSurfaceAlloc) {
diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp
index b13236a3569c..2378345821c2 100644
--- a/cmds/stagefright/stream.cpp
+++ b/cmds/stagefright/stream.cpp
@@ -323,7 +323,7 @@ int main(int argc, char **argv) {
CHECK(control->isValid());
SurfaceComposerClient::openGlobalTransaction();
- CHECK_EQ(control->setLayer(30000), (status_t)OK);
+ CHECK_EQ(control->setLayer(INT_MAX), (status_t)OK);
CHECK_EQ(control->show(), (status_t)OK);
SurfaceComposerClient::closeGlobalTransaction();
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index dbf4de8607c1..150880cd9a63 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -32,6 +32,7 @@ import android.util.Log;
import android.text.TextUtils;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
@@ -41,6 +42,7 @@ import java.util.concurrent.TimeUnit;
import java.util.HashMap;
import java.util.Map;
+import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
/**
@@ -1769,6 +1771,67 @@ public class AccountManager {
return task;
}
+ /**
+ * Returns an intent to an {@link Activity} that prompts the user to choose from a list of
+ * accounts.
+ * The caller will then typically start the activity by calling
+ * <code>startActivityWithResult(intent, ...);</code>.
+ * <p>
+ * On success the activity returns a Bundle with the account name and type specified using
+ * keys {@link #KEY_ACCOUNT_NAME} and {@link #KEY_ACCOUNT_TYPE}.
+ * <p>
+ * The most common case is to call this with one account type, e.g.:
+ * <p>
+ * <pre> newChooseAccountsIntent(null, null, new String[]{"com.google"}, false, null,
+ * null, null, null);</pre>
+ * @param selectedAccount if specified, indicates that the {@link Account} is the currently
+ * selected one, according to the caller's definition of selected.
+ * @param allowableAccounts an optional {@link ArrayList} of accounts that are allowed to be
+ * shown. If not specified then this field will not limit the displayed accounts.
+ * @param allowableAccountTypes an optional string array of account types. These are used
+ * both to filter the shown accounts and to filter the list of account types that are shown
+ * when adding an account.
+ * @param alwaysPromptForAccount if set the account chooser screen is always shown, otherwise
+ * it is only shown when there is more than one account from which to choose
+ * @param descriptionOverrideText if non-null this string is used as the description in the
+ * accounts chooser screen rather than the default
+ * @param addAccountAuthTokenType this string is passed as the {@link #addAccount}
+ * authTokenType parameter
+ * @param addAccountRequiredFeatures this string array is passed as the {@link #addAccount}
+ * requiredFeatures parameter
+ * @param addAccountOptions This {@link Bundle} is passed as the {@link #addAccount} options
+ * parameter
+ * @return an {@link Intent} that can be used to launch the ChooseAccount activity flow.
+ */
+ static public Intent newChooseAccountIntent(Account selectedAccount,
+ ArrayList<Account> allowableAccounts,
+ String[] allowableAccountTypes,
+ boolean alwaysPromptForAccount,
+ String descriptionOverrideText,
+ String addAccountAuthTokenType,
+ String[] addAccountRequiredFeatures,
+ Bundle addAccountOptions) {
+ Intent intent = new Intent();
+ intent.setClassName("android", "android.accounts.ChooseTypeAndAccountActivity");
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST,
+ allowableAccounts);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY,
+ allowableAccountTypes);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE,
+ addAccountOptions);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_SELECTED_ACCOUNT, selectedAccount);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT,
+ alwaysPromptForAccount);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_DESCRIPTION_TEXT_OVERRIDE,
+ descriptionOverrideText);
+ intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING,
+ addAccountAuthTokenType);
+ intent.putExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY,
+ addAccountRequiredFeatures);
+ return intent;
+ }
+
private final HashMap<OnAccountsUpdateListener, Handler> mAccountsUpdatedListeners =
Maps.newHashMap();
diff --git a/core/java/android/accounts/ChooseAccountTypeActivity.java b/core/java/android/accounts/ChooseAccountTypeActivity.java
new file mode 100644
index 000000000000..448b2c0c49ae
--- /dev/null
+++ b/core/java/android/accounts/ChooseAccountTypeActivity.java
@@ -0,0 +1,196 @@
+/*
+ * 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.accounts;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.internal.R;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @hide
+ */
+public class ChooseAccountTypeActivity extends Activity {
+ private static final String TAG = "AccountManager";
+
+ private HashMap<String, AuthInfo> mTypeToAuthenticatorInfo = new HashMap<String, AuthInfo>();
+ private ArrayList<AuthInfo> mAuthenticatorInfosToDisplay;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Read the validAccountTypes, if present, and add them to the setOfAllowableAccountTypes
+ Set<String> setOfAllowableAccountTypes = null;
+ String[] validAccountTypes = getIntent().getStringArrayExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY);
+ if (validAccountTypes != null) {
+ setOfAllowableAccountTypes = new HashSet<String>(validAccountTypes.length);
+ for (String type : validAccountTypes) {
+ setOfAllowableAccountTypes.add(type);
+ }
+ }
+
+ // create a map of account authenticators
+ buildTypeToAuthDescriptionMap();
+
+ // Create a list of authenticators that are allowable. Filter out those that
+ // don't match the allowable account types, if provided.
+ mAuthenticatorInfosToDisplay = new ArrayList<AuthInfo>(mTypeToAuthenticatorInfo.size());
+ for (Map.Entry<String, AuthInfo> entry: mTypeToAuthenticatorInfo.entrySet()) {
+ final String type = entry.getKey();
+ final AuthInfo info = entry.getValue();
+ if (setOfAllowableAccountTypes != null
+ && !setOfAllowableAccountTypes.contains(type)) {
+ continue;
+ }
+ mAuthenticatorInfosToDisplay.add(info);
+ }
+
+ if (mAuthenticatorInfosToDisplay.isEmpty()) {
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ERROR_MESSAGE, "no allowable account types");
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ finish();
+ return;
+ }
+
+ if (mAuthenticatorInfosToDisplay.size() == 1) {
+ setResultAndFinish(mAuthenticatorInfosToDisplay.get(0).desc.type);
+ return;
+ }
+
+ setContentView(R.layout.choose_account_type);
+ // Setup the list
+ ListView list = (ListView) findViewById(android.R.id.list);
+ // Use an existing ListAdapter that will map an array of strings to TextViews
+ list.setAdapter(new AccountArrayAdapter(this,
+ android.R.layout.simple_list_item_1, mAuthenticatorInfosToDisplay));
+ list.setChoiceMode(ListView.CHOICE_MODE_NONE);
+ list.setTextFilterEnabled(false);
+ list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ setResultAndFinish(mAuthenticatorInfosToDisplay.get(position).desc.type);
+ }
+ });
+ }
+
+ private void setResultAndFinish(final String type) {
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ Log.d(TAG, "ChooseAccountTypeActivity.setResultAndFinish: "
+ + "selected account type " + type);
+ finish();
+ }
+
+ private void buildTypeToAuthDescriptionMap() {
+ for(AuthenticatorDescription desc : AccountManager.get(this).getAuthenticatorTypes()) {
+ String name = null;
+ Drawable icon = null;
+ try {
+ Context authContext = createPackageContext(desc.packageName, 0);
+ icon = authContext.getResources().getDrawable(desc.iconId);
+ final CharSequence sequence = authContext.getResources().getText(desc.labelId);
+ if (sequence != null) {
+ name = sequence.toString();
+ }
+ name = sequence.toString();
+ } catch (PackageManager.NameNotFoundException e) {
+ // Nothing we can do much here, just log
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "No icon name for account type " + desc.type);
+ }
+ } catch (Resources.NotFoundException e) {
+ // Nothing we can do much here, just log
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "No icon resource for account type " + desc.type);
+ }
+ }
+ AuthInfo authInfo = new AuthInfo(desc, name, icon);
+ mTypeToAuthenticatorInfo.put(desc.type, authInfo);
+ }
+ }
+
+ private static class AuthInfo {
+ final AuthenticatorDescription desc;
+ final String name;
+ final Drawable drawable;
+
+ AuthInfo(AuthenticatorDescription desc, String name, Drawable drawable) {
+ this.desc = desc;
+ this.name = name;
+ this.drawable = drawable;
+ }
+ }
+
+ private static class ViewHolder {
+ ImageView icon;
+ TextView text;
+ }
+
+ private static class AccountArrayAdapter extends ArrayAdapter<AuthInfo> {
+ private LayoutInflater mLayoutInflater;
+ private ArrayList<AuthInfo> mInfos;
+
+ public AccountArrayAdapter(Context context, int textViewResourceId,
+ ArrayList<AuthInfo> infos) {
+ super(context, textViewResourceId, infos);
+ mInfos = infos;
+ mLayoutInflater = (LayoutInflater) context.getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+
+ if (convertView == null) {
+ convertView = mLayoutInflater.inflate(R.layout.choose_account_row, null);
+ holder = new ViewHolder();
+ holder.text = (TextView) convertView.findViewById(R.id.account_row_text);
+ holder.icon = (ImageView) convertView.findViewById(R.id.account_row_icon);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder) convertView.getTag();
+ }
+
+ holder.text.setText(mInfos.get(position).name);
+ holder.icon.setImageDrawable(mInfos.get(position).drawable);
+
+ return convertView;
+ }
+ }
+}
diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
new file mode 100644
index 000000000000..8cc200250ba3
--- /dev/null
+++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
@@ -0,0 +1,372 @@
+/*
+ * 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.accounts;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.android.internal.R;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @hide
+ */
+public class ChooseTypeAndAccountActivity extends Activity
+ implements AccountManagerCallback<Bundle> {
+ private static final String TAG = "AccountManager";
+
+ /**
+ * A Parcelable ArrayList of Account objects that limits the choosable accounts to those
+ * in this list, if this parameter is supplied.
+ */
+ public static final String EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST = "allowableAccounts";
+
+ /**
+ * A Parcelable ArrayList of String objects that limits the accounts to choose to those
+ * that match the types in this list, if this parameter is supplied. This list is also
+ * used to filter the allowable account types if add account is selected.
+ */
+ public static final String EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY = "allowableAccountTypes";
+
+ /**
+ * This is passed as the addAccountOptions parameter in AccountManager.addAccount()
+ * if it is called.
+ */
+ public static final String EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE = "addAccountOptions";
+
+ /**
+ * This is passed as the requiredFeatures parameter in AccountManager.addAccount()
+ * if it is called.
+ */
+ public static final String EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY =
+ "addAccountRequiredFeatures";
+
+ /**
+ * This is passed as the authTokenType string in AccountManager.addAccount()
+ * if it is called.
+ */
+ public static final String EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING = "authTokenType";
+
+ /**
+ * If set then the specified account is already "selected".
+ */
+ public static final String EXTRA_SELECTED_ACCOUNT = "selectedAccount";
+
+ /**
+ * If true then display the account selection list even if there is just
+ * one account to choose from. boolean.
+ */
+ public static final String EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT =
+ "alwaysPromptForAccount";
+
+ /**
+ * If set then this string willb e used as the description rather than
+ * the default.
+ */
+ public static final String EXTRA_DESCRIPTION_TEXT_OVERRIDE =
+ "descriptionTextOverride";
+
+ private ArrayList<AccountInfo> mAccountInfos;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.choose_type_and_account);
+
+ // save some items we use frequently
+ final AccountManager accountManager = AccountManager.get(this);
+ final Intent intent = getIntent();
+
+ // override the description text if supplied
+ final String descriptionOverride =
+ intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE);
+ if (!TextUtils.isEmpty(descriptionOverride)) {
+ ((TextView)findViewById(R.id.description)).setText(descriptionOverride);
+ }
+
+ // If the selected account matches one in the list we will place a
+ // checkmark next to it.
+ final Account selectedAccount =
+ (Account)intent.getParcelableExtra(EXTRA_SELECTED_ACCOUNT);
+
+ // build an efficiently queryable map of account types to authenticator descriptions
+ final HashMap<String, AuthenticatorDescription> typeToAuthDescription =
+ new HashMap<String, AuthenticatorDescription>();
+ for(AuthenticatorDescription desc : accountManager.getAuthenticatorTypes()) {
+ typeToAuthDescription.put(desc.type, desc);
+ }
+
+ // Read the validAccounts, if present, and add them to the setOfAllowableAccounts
+ Set<Account> setOfAllowableAccounts = null;
+ final ArrayList<Parcelable> validAccounts =
+ intent.getParcelableArrayListExtra(EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST);
+ if (validAccounts != null) {
+ setOfAllowableAccounts = new HashSet<Account>(validAccounts.size());
+ for (Parcelable parcelable : validAccounts) {
+ setOfAllowableAccounts.add((Account)parcelable);
+ }
+ }
+
+ // Read the validAccountTypes, if present, and add them to the setOfAllowableAccountTypes
+ Set<String> setOfAllowableAccountTypes = null;
+ final String[] validAccountTypes =
+ intent.getStringArrayExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY);
+ if (validAccountTypes != null) {
+ setOfAllowableAccountTypes = new HashSet<String>(validAccountTypes.length);
+ for (String type : validAccountTypes) {
+ setOfAllowableAccountTypes.add(type);
+ }
+ }
+
+ // Create a list of AccountInfo objects for each account that is allowable. Filter out
+ // accounts that don't match the allowable types, if provided, or that don't match the
+ // allowable accounts, if provided.
+ final Account[] accounts = accountManager.getAccounts();
+ mAccountInfos = new ArrayList<AccountInfo>(accounts.length);
+ for (Account account : accounts) {
+ if (setOfAllowableAccounts != null
+ && !setOfAllowableAccounts.contains(account)) {
+ continue;
+ }
+ if (setOfAllowableAccountTypes != null
+ && !setOfAllowableAccountTypes.contains(account.type)) {
+ continue;
+ }
+ mAccountInfos.add(new AccountInfo(account,
+ getDrawableForType(typeToAuthDescription, account.type),
+ account.equals(selectedAccount)));
+ }
+
+ // If there are no allowable accounts go directly to add account
+ if (mAccountInfos.isEmpty()) {
+ startChooseAccountTypeActivity();
+ return;
+ }
+
+ // if there is only one allowable account return it
+ if (!intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false)
+ && mAccountInfos.size() == 1) {
+ Account account = mAccountInfos.get(0).account;
+ setResultAndFinish(account.name, account.type);
+ return;
+ }
+
+ // there is more than one allowable account. initialize the list adapter to allow
+ // the user to select an account.
+ ListView list = (ListView) findViewById(android.R.id.list);
+ list.setAdapter(new AccountArrayAdapter(this,
+ android.R.layout.simple_list_item_1, mAccountInfos));
+ list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+ list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ onListItemClick((ListView)parent, v, position, id);
+ }
+ });
+
+ // set the listener for the addAccount button
+ Button addAccountButton = (Button) findViewById(R.id.addAccount);
+ addAccountButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(final View v) {
+ startChooseAccountTypeActivity();
+ }
+ });
+ }
+
+ // Called when the choose account type activity (for adding an account) returns.
+ // If it was a success read the account and set it in the result. In all cases
+ // return the result and finish this activity.
+ @Override
+ protected void onActivityResult(final int requestCode, final int resultCode,
+ final Intent data) {
+ if (resultCode == RESULT_OK && data != null) {
+ String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
+ if (accountType != null) {
+ runAddAccountForAuthenticator(accountType);
+ return;
+ }
+ }
+ Log.d(TAG, "ChooseTypeAndAccountActivity.onActivityResult: canceled");
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+
+ protected void runAddAccountForAuthenticator(String type) {
+ Log.d(TAG, "selected account type " + type);
+ final Bundle options = getIntent().getBundleExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE);
+ final String[] requiredFeatures = getIntent().getStringArrayExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY);
+ final String authTokenType = getIntent().getStringExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING);
+ AccountManager.get(this).addAccount(type, authTokenType, requiredFeatures,
+ options, this, this, null /* Handler */);
+ }
+
+ public void run(final AccountManagerFuture<Bundle> accountManagerFuture) {
+ try {
+ final Bundle accountManagerResult = accountManagerFuture.getResult();
+ final String name = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_NAME);
+ final String type = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_TYPE);
+ if (name != null && type != null) {
+ final Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ finish();
+ return;
+ }
+ } catch (OperationCanceledException e) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ } catch (IOException e) {
+ } catch (AuthenticatorException e) {
+ }
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ERROR_MESSAGE, "error communicating with server");
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ finish();
+ }
+
+ private Drawable getDrawableForType(
+ final HashMap<String, AuthenticatorDescription> typeToAuthDescription,
+ String accountType) {
+ Drawable icon = null;
+ if (typeToAuthDescription.containsKey(accountType)) {
+ try {
+ AuthenticatorDescription desc = typeToAuthDescription.get(accountType);
+ Context authContext = createPackageContext(desc.packageName, 0);
+ icon = authContext.getResources().getDrawable(desc.iconId);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Nothing we can do much here, just log
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "No icon name for account type " + accountType);
+ }
+ } catch (Resources.NotFoundException e) {
+ // Nothing we can do much here, just log
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "No icon resource for account type " + accountType);
+ }
+ }
+ }
+ return icon;
+ }
+
+ protected void onListItemClick(ListView l, View v, int position, long id) {
+ AccountInfo accountInfo = mAccountInfos.get(position);
+ Log.d(TAG, "selected account " + accountInfo.account);
+ setResultAndFinish(accountInfo.account.name, accountInfo.account.type);
+ }
+
+ private void setResultAndFinish(final String accountName, final String accountType) {
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType);
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ Log.d(TAG, "ChooseTypeAndAccountActivity.setResultAndFinish: "
+ + "selected account " + accountName + ", " + accountType);
+ finish();
+ }
+
+ private void startChooseAccountTypeActivity() {
+ final Intent intent = new Intent(this, ChooseAccountTypeActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ intent.putExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY,
+ getIntent().getStringArrayExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY));
+ intent.putExtra(EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE,
+ getIntent().getBundleExtra(EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE));
+ intent.putExtra(EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY,
+ getIntent().getStringArrayExtra(EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY));
+ intent.putExtra(EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING,
+ getIntent().getStringExtra(EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING));
+ startActivityForResult(intent, 0);
+ }
+
+ private static class AccountInfo {
+ final Account account;
+ final Drawable drawable;
+ private final boolean checked;
+
+ AccountInfo(Account account, Drawable drawable, boolean checked) {
+ this.account = account;
+ this.drawable = drawable;
+ this.checked = checked;
+ }
+ }
+
+ private static class ViewHolder {
+ ImageView icon;
+ TextView text;
+ ImageView checkmark;
+ }
+
+ private static class AccountArrayAdapter extends ArrayAdapter<AccountInfo> {
+ private LayoutInflater mLayoutInflater;
+ private ArrayList<AccountInfo> mInfos;
+
+ public AccountArrayAdapter(Context context, int textViewResourceId,
+ ArrayList<AccountInfo> infos) {
+ super(context, textViewResourceId, infos);
+ mInfos = infos;
+ mLayoutInflater = (LayoutInflater) context.getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+
+ if (convertView == null) {
+ convertView = mLayoutInflater.inflate(R.layout.choose_selected_account_row, null);
+ holder = new ViewHolder();
+ holder.text = (TextView) convertView.findViewById(R.id.account_row_text);
+ holder.icon = (ImageView) convertView.findViewById(R.id.account_row_icon);
+ holder.checkmark = (ImageView) convertView.findViewById(R.id.account_row_checkmark);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder) convertView.getTag();
+ }
+
+ holder.text.setText(mInfos.get(position).account.name);
+ holder.icon.setImageDrawable(mInfos.get(position).drawable);
+ final int displayCheckmark =
+ mInfos.get(position).checked ? View.VISIBLE : View.INVISIBLE;
+ holder.checkmark.setVisibility(displayCheckmark);
+ return convertView;
+ }
+ }
+}
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index be00aa56b90f..51c6f3adbbb3 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -29,16 +29,29 @@ import android.view.Window;
import android.widget.SpinnerAdapter;
/**
- * Acts as a replacement for the title bar in Activities.
- * The action bar provides facilities for creating toolbar actions as well as
- * methods of navigating the application.
- * <p>By default, the action bar appears at the top of every activity, with the application icon on
- * the left, followed by the activity title. Items from the activity's options menu are also
- * accessible from the action bar.</p>
+ * A window feature at the top of the activity that may display the activity title, navigation
+ * modes, and other interactive items.
+ * <p>Beginning with Android 3.0 (API level 11), the action bar appears at the top of an
+ * activity's window when the activity uses the system's {@link
+ * android.R.style#Theme_Holo Holo} theme (or one of its descendant themes), which is the default.
+ * You may otherwise add the action bar by calling {@link
+ * android.view.Window#requestFeature requestFeature(FEATURE_ACTION_BAR)} or by declaring it in a
+ * custom theme with the {@link android.R.styleable#Theme_windowActionBar windowActionBar} property.
+ * <p>By default, the action bar shows the application icon on
+ * the left, followed by the activity title. If your activity has an options menu, you can make
+ * select items accessible directly from the action bar as "action items". You can also
+ * modify various characteristics of the action bar or remove it completely.</p>
* <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
* android.app.Activity#getActionBar getActionBar()}.</p>
- * <p>For more information, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
+ * <p>For information about how to use the action bar, including how to add action items, navigation
+ * modes and more, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
* Bar</a> developer guide.</p>
+ * <p>In some cases, the action bar may be overlayed by another bar that enables contextual actions,
+ * using an {@link android.view.ActionMode}. For example, when the user selects one or more items in
+ * your activity, you can enable an action mode that offers actions specific to the selected
+ * items, with a UI that temporarily replaces the action bar. Although the UI may occupy the
+ * same space, the {@link android.view.ActionMode} APIs are distinct and independent from those for
+ * {@link ActionBar}.
*/
public abstract class ActionBar {
/**
@@ -423,6 +436,7 @@ public abstract class ActionBar {
* Set the ActionBar's split background. This will appear in
* the split action bar containing menu-provided action buttons
* on some devices and configurations.
+ * <p>You can enable split action bar with {@link android.R.attr#uiOptions}
*
* @param d Background drawable for the split bar
*/
@@ -460,13 +474,6 @@ public abstract class ActionBar {
* </ul>
*
* @return The current navigation mode.
- *
- * @see #setStandardNavigationMode()
- * @see #setStandardNavigationMode(CharSequence)
- * @see #setStandardNavigationMode(CharSequence, CharSequence)
- * @see #setDropdownNavigationMode(SpinnerAdapter)
- * @see #setTabNavigationMode()
- * @see #setCustomNavigationMode(View)
*/
public abstract int getNavigationMode();
@@ -498,7 +505,6 @@ public abstract class ActionBar {
* @return A new Tab
*
* @see #addTab(Tab)
- * @see #insertTab(Tab, int)
*/
public abstract Tab newTab();
@@ -606,7 +612,7 @@ public abstract class ActionBar {
public abstract void show();
/**
- * Hide the ActionBar if it is not currently showing.
+ * Hide the ActionBar if it is currently showing.
* If the window hosting the ActionBar does not have the feature
* {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
* content to fit the new space available.
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 77997796a8f7..b4471f096ad5 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1550,6 +1550,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
return true;
}
+ case DISMISS_KEYGUARD_ON_NEXT_ACTIVITY_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ dismissKeyguardOnNextActivity();
+ reply.writeNoException();
+ return true;
+ }
+
}
return super.onTransact(code, data, reply, flags);
@@ -3504,5 +3511,15 @@ class ActivityManagerProxy implements IActivityManager
reply.recycle();
}
+ public void dismissKeyguardOnNextActivity() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ mRemote.transact(DISMISS_KEYGUARD_ON_NEXT_ACTIVITY_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 2c2a493f85e2..0776e1015c3c 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -153,6 +153,7 @@ public final class ActivityThread {
final HashMap<IBinder, Service> mServices
= new HashMap<IBinder, Service>();
AppBindData mBoundApplication;
+ Profiler mProfiler;
Configuration mConfiguration;
Configuration mCompatConfiguration;
Configuration mResConfiguration;
@@ -364,10 +365,6 @@ public final class ActivityThread {
ApplicationInfo appInfo;
List<ProviderInfo> providers;
ComponentName instrumentationName;
- String profileFile;
- ParcelFileDescriptor profileFd;
- boolean autoStopProfiler;
- boolean profiling;
Bundle instrumentationArgs;
IInstrumentationWatcher instrumentationWatcher;
int debugMode;
@@ -375,10 +372,23 @@ public final class ActivityThread {
boolean persistent;
Configuration config;
CompatibilityInfo compatInfo;
- boolean handlingProfiling;
+
+ /** Initial values for {@link Profiler}. */
+ String initProfileFile;
+ ParcelFileDescriptor initProfileFd;
+ boolean initAutoStopProfiler;
+
public String toString() {
return "AppBindData{appInfo=" + appInfo + "}";
}
+ }
+
+ static final class Profiler {
+ String profileFile;
+ ParcelFileDescriptor profileFd;
+ boolean autoStopProfiler;
+ boolean profiling;
+ boolean handlingProfiling;
public void setProfiler(String file, ParcelFileDescriptor fd) {
if (profiling) {
if (fd != null) {
@@ -661,8 +671,6 @@ public final class ActivityThread {
data.appInfo = appInfo;
data.providers = providers;
data.instrumentationName = instrumentationName;
- data.setProfiler(profileFile, profileFd);
- data.autoStopProfiler = false;
data.instrumentationArgs = instrumentationArgs;
data.instrumentationWatcher = instrumentationWatcher;
data.debugMode = debugMode;
@@ -670,6 +678,9 @@ public final class ActivityThread {
data.persistent = persistent;
data.config = config;
data.compatInfo = compatInfo;
+ data.initProfileFile = profileFile;
+ data.initProfileFd = profileFd;
+ data.initAutoStopProfiler = false;
queueOrSendMessage(H.BIND_APPLICATION, data);
}
@@ -1293,8 +1304,8 @@ public final class ActivityThread {
public final boolean queueIdle() {
ActivityClientRecord a = mNewActivities;
boolean stopProfiling = false;
- if (mBoundApplication != null && mBoundApplication.profileFd != null
- && mBoundApplication.autoStopProfiler) {
+ if (mBoundApplication != null && mProfiler.profileFd != null
+ && mProfiler.autoStopProfiler) {
stopProfiling = true;
}
if (a != null) {
@@ -1320,7 +1331,7 @@ public final class ActivityThread {
} while (a != null);
}
if (stopProfiling) {
- mBoundApplication.stopProfiling();
+ mProfiler.stopProfiling();
}
ensureJitEnabled();
return false;
@@ -1635,12 +1646,12 @@ public final class ActivityThread {
}
public boolean isProfiling() {
- return mBoundApplication != null && mBoundApplication.profileFile != null
- && mBoundApplication.profileFd == null;
+ return mProfiler != null && mProfiler.profileFile != null
+ && mProfiler.profileFd == null;
}
public String getProfileFilePath() {
- return mBoundApplication.profileFile;
+ return mProfiler.profileFile;
}
public Looper getLooper() {
@@ -1679,6 +1690,9 @@ public final class ActivityThread {
ContextImpl context = getSystemContext();
context.init(new LoadedApk(this, "android", context, info,
CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO), null, this);
+
+ // give ourselves a default profiler
+ mProfiler = new Profiler();
}
}
@@ -1947,9 +1961,9 @@ public final class ActivityThread {
unscheduleGcIdler();
if (r.profileFd != null) {
- mBoundApplication.setProfiler(r.profileFile, r.profileFd);
- mBoundApplication.startProfiling();
- mBoundApplication.autoStopProfiler = r.autoStopProfiler;
+ mProfiler.setProfiler(r.profileFile, r.profileFd);
+ mProfiler.startProfiling();
+ mProfiler.autoStopProfiler = r.autoStopProfiler;
}
if (localLOGV) Slog.v(
@@ -3570,10 +3584,10 @@ public final class ActivityThread {
case 1:
ViewDebug.startLooperProfiling(pcd.path, pcd.fd.getFileDescriptor());
break;
- default:
- mBoundApplication.setProfiler(pcd.path, pcd.fd);
- mBoundApplication.autoStopProfiler = false;
- mBoundApplication.startProfiling();
+ default:
+ mProfiler.setProfiler(pcd.path, pcd.fd);
+ mProfiler.autoStopProfiler = false;
+ mProfiler.startProfiling();
break;
}
} catch (RuntimeException e) {
@@ -3592,7 +3606,7 @@ public final class ActivityThread {
ViewDebug.stopLooperProfiling();
break;
default:
- mBoundApplication.stopProfiling();
+ mProfiler.stopProfiling();
break;
}
}
@@ -3685,6 +3699,11 @@ public final class ActivityThread {
mConfiguration = new Configuration(data.config);
mCompatConfiguration = new Configuration(data.config);
+ mProfiler = new Profiler();
+ mProfiler.profileFile = data.initProfileFile;
+ mProfiler.profileFd = data.initProfileFd;
+ mProfiler.autoStopProfiler = data.initAutoStopProfiler;
+
// send up app name; do this *before* waiting for debugger
Process.setArgV0(data.processName);
android.ddm.DdmHandleAppName.setAppName(data.processName);
@@ -3699,8 +3718,8 @@ public final class ActivityThread {
}
}
- if (data.profileFd != null) {
- data.startProfiling();
+ if (mProfiler.profileFd != null) {
+ mProfiler.startProfiling();
}
// If the app is Honeycomb MR1 or earlier, switch its AsyncTask
@@ -3841,10 +3860,10 @@ public final class ActivityThread {
mInstrumentation.init(this, instrContext, appContext,
new ComponentName(ii.packageName, ii.name), data.instrumentationWatcher);
- if (data.profileFile != null && !ii.handleProfiling
- && data.profileFd == null) {
- data.handlingProfiling = true;
- File file = new File(data.profileFile);
+ if (mProfiler.profileFile != null && !ii.handleProfiling
+ && mProfiler.profileFd == null) {
+ mProfiler.handlingProfiling = true;
+ File file = new File(mProfiler.profileFile);
file.getParentFile().mkdirs();
Debug.startMethodTracing(file.toString(), 8 * 1024 * 1024);
}
@@ -3896,8 +3915,8 @@ public final class ActivityThread {
/*package*/ final void finishInstrumentation(int resultCode, Bundle results) {
IActivityManager am = ActivityManagerNative.getDefault();
- if (mBoundApplication.profileFile != null && mBoundApplication.handlingProfiling
- && mBoundApplication.profileFd == null) {
+ if (mProfiler.profileFile != null && mProfiler.handlingProfiling
+ && mProfiler.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 bd42e3413ca7..8ed7481cddd1 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -954,9 +954,9 @@ final class ApplicationPackageManager extends PackageManager {
}
@Override
- public void verifyPendingInstall(int id, boolean verified, String failureMessage) {
+ public void verifyPendingInstall(int id, int response) {
try {
- mPM.verifyPendingInstall(id, verified, failureMessage);
+ mPM.verifyPendingInstall(id, response);
} catch (RemoteException e) {
// Should never happen!
}
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 27dd6916af18..26813bf117df 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -372,6 +372,8 @@ public interface IActivityManager extends IInterface {
public void showBootMessage(CharSequence msg, boolean always) throws RemoteException;
+ public void dismissKeyguardOnNextActivity() throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -602,4 +604,5 @@ public interface IActivityManager extends IInterface {
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;
+ int DISMISS_KEYGUARD_ON_NEXT_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+138;
}
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 5c4cc876313e..3290b9d5ad19 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -338,7 +338,7 @@ public class SearchManager
/**
* Column name for suggestions cursor. <i>Optional.</i> This column may be
- * used to specify the time in (@link System#currentTimeMillis
+ * used to specify the time in {@link System#currentTimeMillis
* System.currentTImeMillis()} (wall time in UTC) when an item was last
* accessed within the results-providing application. If set, this may be
* used to show more-recently-used items first.
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 254c98ff8cf0..ea5c3db86571 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -781,7 +781,7 @@ 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},
+ * Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET},
* {@link BluetoothProfile#A2DP}.
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
@@ -1132,15 +1132,15 @@ public final class BluetoothAdapter {
/**
* Get the profile proxy object associated with the profile.
*
- * <p>Profile can be one of {@link BluetoothProfile#HEADSET} or
+ * <p>Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET} or
* {@link BluetoothProfile#A2DP}. Clients must implements
* {@link BluetoothProfile.ServiceListener} to get notified of
* the connection status and to get the proxy object.
*
* @param context Context of the application
* @param listener The service Listener for connection callbacks.
- * @param profile The Bluetooth profile; either {@link BluetoothProfile#HEADSET}
- * or {@link BluetoothProfile#A2DP}.
+ * @param profile The Bluetooth profile; either {@link BluetoothProfile#HEALTH},
+ * {@link BluetoothProfile#HEADSET} or {@link BluetoothProfile#A2DP}.
* @return true on success, false on error
*/
public boolean getProfileProxy(Context context, BluetoothProfile.ServiceListener listener,
@@ -1172,7 +1172,7 @@ public final class BluetoothAdapter {
*
* <p> Clients should call this when they are no longer using
* the proxy obtained from {@link #getProfileProxy}.
- * Profile can be one of {@link BluetoothProfile#HEADSET} or
+ * Profile can be one of {@link BluetoothProfile#HEALTH}, {@link BluetoothProfile#HEADSET} or
* {@link BluetoothProfile#A2DP}
*
* @param profile
diff --git a/core/java/android/bluetooth/BluetoothProfile.java b/core/java/android/bluetooth/BluetoothProfile.java
index 58b386838799..1920efa52f87 100644
--- a/core/java/android/bluetooth/BluetoothProfile.java
+++ b/core/java/android/bluetooth/BluetoothProfile.java
@@ -66,7 +66,6 @@ public interface BluetoothProfile {
/**
* Health Profile
- * @hide
*/
public static final int HEALTH = 3;
@@ -162,9 +161,9 @@ public interface BluetoothProfile {
/**
* Called to notify the client when the proxy object has been
* connected to the service.
- * @param profile - One of {@link #HEADSET} or
+ * @param profile - One of {@link #HEALTH}, {@link #HEADSET} or
* {@link #A2DP}
- * @param proxy - One of {@link BluetoothHeadset} or
+ * @param proxy - One of {@link BluetoothHealth}, {@link BluetoothHeadset} or
* {@link BluetoothA2dp}
*/
public void onServiceConnected(int profile, BluetoothProfile proxy);
@@ -172,7 +171,7 @@ public interface BluetoothProfile {
/**
* Called to notify the client that this proxy object has been
* disconnected from the service.
- * @param profile - One of {@link #HEADSET} or
+ * @param profile - One of {@link #HEALTH}, {@link #HEADSET} or
* {@link #A2DP}
*/
public void onServiceDisconnected(int profile);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index c7698bf17b72..f44d038a5fee 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1535,8 +1535,6 @@ public class Intent implements Parcelable, Cloneable {
* <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";
@@ -5579,24 +5577,35 @@ public class Intent implements Parcelable, Cloneable {
@Override
public String toString() {
- StringBuilder b = new StringBuilder(128);
+ StringBuilder b = new StringBuilder(128);
b.append("Intent { ");
- toShortString(b, true, true);
+ toShortString(b, true, true, true);
b.append(" }");
return b.toString();
}
/** @hide */
- public String toShortString(boolean comp, boolean extras) {
- StringBuilder b = new StringBuilder(128);
- toShortString(b, comp, extras);
+ public String toInsecureString() {
+ StringBuilder b = new StringBuilder(128);
+
+ b.append("Intent { ");
+ toShortString(b, false, true, true);
+ b.append(" }");
+
return b.toString();
}
/** @hide */
- public void toShortString(StringBuilder b, boolean comp, boolean extras) {
+ public String toShortString(boolean secure, boolean comp, boolean extras) {
+ StringBuilder b = new StringBuilder(128);
+ toShortString(b, secure, comp, extras);
+ return b.toString();
+ }
+
+ /** @hide */
+ public void toShortString(StringBuilder b, boolean secure, boolean comp, boolean extras) {
boolean first = true;
if (mAction != null) {
b.append("act=").append(mAction);
@@ -5623,19 +5632,8 @@ public class Intent implements Parcelable, Cloneable {
}
first = false;
b.append("dat=");
- String scheme = mData.getScheme();
- if (scheme != null) {
- if (scheme.equalsIgnoreCase("tel")) {
- b.append("tel:xxx-xxx-xxxx");
- } else if (scheme.equalsIgnoreCase("sip")) {
- b.append("sip:xxxxxxxxxx");
- } else if (scheme.equalsIgnoreCase("sms")) {
- b.append("sms:xxx-xxx-xxxx");
- } else if (scheme.equalsIgnoreCase("smsto")) {
- b.append("smsto:xxx-xxx-xxxx");
- } else {
- b.append(mData);
- }
+ if (secure) {
+ b.append(mData.toSafeString());
} else {
b.append(mData);
}
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java
index 684c4fed858e..127efa219308 100644
--- a/core/java/android/content/SyncManager.java
+++ b/core/java/android/content/SyncManager.java
@@ -16,22 +16,10 @@
package android.content;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import com.google.android.collect.Lists;
-import com.google.android.collect.Maps;
-
import com.android.internal.R;
import com.android.internal.util.ArrayUtils;
+import com.google.android.collect.Lists;
+import com.google.android.collect.Maps;
import android.accounts.Account;
import android.accounts.AccountManager;
@@ -42,12 +30,23 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.RegisteredServicesCache;
import android.content.pm.ProviderInfo;
+import android.content.pm.RegisteredServicesCache;
import android.content.pm.RegisteredServicesCacheListener;
+import android.content.pm.ResolveInfo;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PowerManager;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.os.SystemProperties;
import android.os.WorkSource;
import android.provider.Settings;
import android.text.format.DateUtils;
@@ -59,12 +58,15 @@ import android.util.Pair;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
@@ -1006,9 +1008,8 @@ public class SyncManager implements OnAccountsUpdateListener {
}
protected void dump(FileDescriptor fd, PrintWriter pw) {
- StringBuilder sb = new StringBuilder();
- dumpSyncState(pw, sb);
- dumpSyncHistory(pw, sb);
+ dumpSyncState(pw);
+ dumpSyncHistory(pw);
pw.println();
pw.println("SyncAdapters:");
@@ -1023,7 +1024,7 @@ public class SyncManager implements OnAccountsUpdateListener {
return tobj.format("%Y-%m-%d %H:%M:%S");
}
- protected void dumpSyncState(PrintWriter pw, StringBuilder sb) {
+ protected void dumpSyncState(PrintWriter pw) {
pw.print("data connected: "); pw.println(mDataConnectionIsConnected);
pw.print("memory low: "); pw.println(mStorageIsLow);
@@ -1055,7 +1056,7 @@ public class SyncManager implements OnAccountsUpdateListener {
}
pw.print("notification info: ");
- sb.setLength(0);
+ final StringBuilder sb = new StringBuilder();
mSyncHandler.mSyncNotificationInfo.toString(sb);
pw.println(sb.toString());
@@ -1204,7 +1205,197 @@ public class SyncManager implements OnAccountsUpdateListener {
pw.println(")");
}
- protected void dumpSyncHistory(PrintWriter pw, StringBuilder sb) {
+ protected void dumpSyncHistory(PrintWriter pw) {
+ dumpRecentHistory(pw);
+ dumpDayStatistics(pw);
+ }
+
+ private void dumpRecentHistory(PrintWriter pw) {
+ final ArrayList<SyncStorageEngine.SyncHistoryItem> items
+ = mSyncStorageEngine.getSyncHistory();
+ if (items != null && items.size() > 0) {
+ final Map<String, AuthoritySyncStats> authorityMap = Maps.newHashMap();
+ long totalElapsedTime = 0;
+ long totalTimes = 0;
+ final int N = items.size();
+
+ int maxAuthority = 0;
+ int maxAccount = 0;
+ for (SyncStorageEngine.SyncHistoryItem item : items) {
+ SyncStorageEngine.AuthorityInfo authority
+ = mSyncStorageEngine.getAuthority(item.authorityId);
+ final String authorityName;
+ final String accountKey;
+ if (authority != null) {
+ authorityName = authority.authority;
+ accountKey = authority.account.name + "/" + authority.account.type;
+ } else {
+ authorityName = "Unknown";
+ accountKey = "Unknown";
+ }
+
+ int length = authorityName.length();
+ if (length > maxAuthority) {
+ maxAuthority = length;
+ }
+ length = accountKey.length();
+ if (length > maxAccount) {
+ maxAccount = length;
+ }
+
+ final long elapsedTime = item.elapsedTime;
+ totalElapsedTime += elapsedTime;
+ totalTimes++;
+ AuthoritySyncStats authoritySyncStats = authorityMap.get(authorityName);
+ if (authoritySyncStats == null) {
+ authoritySyncStats = new AuthoritySyncStats(authorityName);
+ authorityMap.put(authorityName, authoritySyncStats);
+ }
+ authoritySyncStats.elapsedTime += elapsedTime;
+ authoritySyncStats.times++;
+ final Map<String, AccountSyncStats> accountMap = authoritySyncStats.accountMap;
+ AccountSyncStats accountSyncStats = accountMap.get(accountKey);
+ if (accountSyncStats == null) {
+ accountSyncStats = new AccountSyncStats(accountKey);
+ accountMap.put(accountKey, accountSyncStats);
+ }
+ accountSyncStats.elapsedTime += elapsedTime;
+ accountSyncStats.times++;
+
+ }
+
+ pw.println();
+ pw.printf("Detailed Statistics (Recent history): %d (# of times) %ds (sync time)\n",
+ totalTimes, totalElapsedTime / 1000);
+
+ final List<AuthoritySyncStats> sortedAuthorities =
+ new ArrayList<AuthoritySyncStats>(authorityMap.values());
+ Collections.sort(sortedAuthorities, new Comparator<AuthoritySyncStats>() {
+ @Override
+ public int compare(AuthoritySyncStats lhs, AuthoritySyncStats rhs) {
+ // reverse order
+ int compare = Integer.compare(rhs.times, lhs.times);
+ if (compare == 0) {
+ compare = Long.compare(rhs.elapsedTime, lhs.elapsedTime);
+ }
+ return compare;
+ }
+ });
+
+ final int maxLength = Math.max(maxAuthority, maxAccount + 3);
+ final int padLength = 2 + 2 + maxLength + 2 + 10 + 11;
+ final char chars[] = new char[padLength];
+ Arrays.fill(chars, '-');
+ final String separator = new String(chars);
+
+ final String authorityFormat = String.format(" %%-%ds: %%-9s %%-11s\n", maxLength + 2);
+ final String accountFormat = String.format(" %%-%ds: %%-9s %%-11s\n", maxLength);
+
+ pw.println(separator);
+ for (AuthoritySyncStats authoritySyncStats : sortedAuthorities) {
+ String name = authoritySyncStats.name;
+ long elapsedTime;
+ int times;
+ String timeStr;
+ String timesStr;
+
+ elapsedTime = authoritySyncStats.elapsedTime;
+ times = authoritySyncStats.times;
+ timeStr = String.format("%d/%d%%",
+ elapsedTime / 1000,
+ elapsedTime * 100 / totalElapsedTime);
+ timesStr = String.format("%d/%d%%",
+ times,
+ times * 100 / totalTimes);
+ pw.printf(authorityFormat, name, timesStr, timeStr);
+
+ if (authoritySyncStats.accountMap.size() > 1) {
+ final List<AccountSyncStats> sortedAccounts =
+ new ArrayList<AccountSyncStats>(
+ authoritySyncStats.accountMap.values());
+ Collections.sort(sortedAccounts, new Comparator<AccountSyncStats>() {
+ @Override
+ public int compare(AccountSyncStats lhs, AccountSyncStats rhs) {
+ // reverse order
+ int compare = Integer.compare(rhs.times, lhs.times);
+ if (compare == 0) {
+ compare = Long.compare(rhs.elapsedTime, lhs.elapsedTime);
+ }
+ return compare;
+ }
+ });
+ for (AccountSyncStats stats: sortedAccounts) {
+ elapsedTime = stats.elapsedTime;
+ times = stats.times;
+ timeStr = String.format("%d/%d%%",
+ elapsedTime / 1000,
+ elapsedTime * 100 / totalElapsedTime);
+ timesStr = String.format("%d/%d%%",
+ times,
+ times * 100 / totalTimes);
+ pw.printf(accountFormat, stats.name, timesStr, timeStr);
+ }
+ }
+ pw.println(separator);
+ }
+
+ pw.println();
+ pw.println("Recent Sync History");
+ final String format = " %-" + maxAccount + "s %s\n";
+ String lastAuthorityName = null;
+ String lastAccountKey = null;
+ long lastEventTime = 0;
+ for (int i = 0; i < N; i++) {
+ SyncStorageEngine.SyncHistoryItem item = items.get(i);
+ SyncStorageEngine.AuthorityInfo authority
+ = mSyncStorageEngine.getAuthority(item.authorityId);
+ final String authorityName;
+ final String accountKey;
+ if (authority != null) {
+ authorityName = authority.authority;
+ accountKey = authority.account.name + "/" + authority.account.type;
+ } else {
+ authorityName = "Unknown";
+ accountKey = "Unknown";
+ }
+ final long elapsedTime = item.elapsedTime;
+ final Time time = new Time();
+ final long eventTime = item.eventTime;
+ time.set(eventTime);
+
+ pw.printf(" #%-3d: %s %8s %5.1fs",
+ i + 1,
+ formatTime(eventTime),
+ SyncStorageEngine.SOURCES[item.source],
+ ((float) elapsedTime) / 1000);
+ if (authorityName.equals(lastAuthorityName) && accountKey.equals(lastAccountKey)) {
+ final long span = (lastEventTime - eventTime) / 1000;
+ pw.printf(" %02d:%02d\n", span / 60, span % 60);
+ } else {
+ pw.printf(format, accountKey, authorityName);
+ }
+
+ lastAuthorityName = authorityName;
+ lastAccountKey = accountKey;
+ lastEventTime = eventTime;
+
+ if (item.event != SyncStorageEngine.EVENT_STOP
+ || item.upstreamActivity != 0
+ || item.downstreamActivity != 0) {
+ pw.printf(" event=%d upstreamActivity=%d downstreamActivity=%d\n",
+ item.event,
+ item.upstreamActivity,
+ item.downstreamActivity);
+ }
+ if (item.mesg != null
+ && !SyncStorageEngine.MESG_SUCCESS.equals(item.mesg)) {
+ pw.printf(" mesg=%s\n", item.mesg);
+ }
+ }
+ }
+ }
+
+ private void dumpDayStatistics(PrintWriter pw) {
SyncStorageEngine.DayStats dses[] = mSyncStorageEngine.getDayStatistics();
if (dses != null && dses[0] != null) {
pw.println();
@@ -1254,47 +1445,26 @@ public class SyncManager implements OnAccountsUpdateListener {
}
}
}
+ }
- ArrayList<SyncStorageEngine.SyncHistoryItem> items
- = mSyncStorageEngine.getSyncHistory();
- if (items != null && items.size() > 0) {
- pw.println();
- pw.println("Recent Sync History");
- final int N = items.size();
- for (int i=0; i<N; i++) {
- SyncStorageEngine.SyncHistoryItem item = items.get(i);
- SyncStorageEngine.AuthorityInfo authority
- = mSyncStorageEngine.getAuthority(item.authorityId);
- pw.print(" #"); pw.print(i+1); pw.print(": ");
- if (authority != null) {
- pw.print(authority.account.name);
- pw.print(":");
- pw.print(authority.account.type);
- pw.print(" ");
- pw.print(authority.authority);
- } else {
- pw.print("<no account>");
- }
- Time time = new Time();
- time.set(item.eventTime);
- pw.print(" "); pw.print(SyncStorageEngine.SOURCES[item.source]);
- pw.print(" @ ");
- pw.print(formatTime(item.eventTime));
- pw.print(" for ");
- dumpTimeSec(pw, item.elapsedTime);
- pw.println();
- if (item.event != SyncStorageEngine.EVENT_STOP
- || item.upstreamActivity !=0
- || item.downstreamActivity != 0) {
- pw.print(" event="); pw.print(item.event);
- pw.print(" upstreamActivity="); pw.print(item.upstreamActivity);
- pw.print(" downstreamActivity="); pw.println(item.downstreamActivity);
- }
- if (item.mesg != null
- && !SyncStorageEngine.MESG_SUCCESS.equals(item.mesg)) {
- pw.print(" mesg="); pw.println(item.mesg);
- }
- }
+ private static class AuthoritySyncStats {
+ String name;
+ long elapsedTime;
+ int times;
+ Map<String, AccountSyncStats> accountMap = Maps.newHashMap();
+
+ private AuthoritySyncStats(String name) {
+ this.name = name;
+ }
+ }
+
+ private static class AccountSyncStats {
+ String name;
+ long elapsedTime;
+ int times;
+
+ private AccountSyncStats(String name) {
+ this.name = name;
}
}
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index bba329dd441e..0e6694deef2c 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -442,7 +442,11 @@ public class ActivityInfo extends ComponentInfo
public int uiOptions = 0;
/**
- * Flag for use with uiOptions.
+ * Flag for use with {@link #uiOptions}.
+ * Indicates that the action bar should put all action items in a separate bar when
+ * the screen is narrow.
+ * <p>This value corresponds to "splitActionBarWhenNarrow" for the {@link #uiOptions} XML
+ * attribute.
*/
public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1;
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 5e6e7686c174..a3bcc287e021 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -359,7 +359,7 @@ interface IPackageManager {
int flags, in String installerPackageName, in Uri verificationURI,
in ManifestDigest manifestDigest);
- void verifyPendingInstall(int id, boolean verified, in String message);
+ void verifyPendingInstall(int id, int verificationCode);
VerifierDeviceIdentity getVerifierDeviceIdentity();
}
diff --git a/core/java/android/content/pm/PackageInfoLite.java b/core/java/android/content/pm/PackageInfoLite.java
index da97fde006ef..962594440e8f 100644
--- a/core/java/android/content/pm/PackageInfoLite.java
+++ b/core/java/android/content/pm/PackageInfoLite.java
@@ -41,6 +41,8 @@ public class PackageInfoLite implements Parcelable {
public int recommendedInstallLocation;
public int installLocation;
+ public VerifierInfo[] verifiers;
+
public PackageInfoLite() {
}
@@ -58,6 +60,13 @@ public class PackageInfoLite implements Parcelable {
dest.writeString(packageName);
dest.writeInt(recommendedInstallLocation);
dest.writeInt(installLocation);
+
+ if (verifiers == null || verifiers.length == 0) {
+ dest.writeInt(0);
+ } else {
+ dest.writeInt(verifiers.length);
+ dest.writeTypedArray(verifiers, parcelableFlags);
+ }
}
public static final Parcelable.Creator<PackageInfoLite> CREATOR
@@ -75,5 +84,13 @@ public class PackageInfoLite implements Parcelable {
packageName = source.readString();
recommendedInstallLocation = source.readInt();
installLocation = source.readInt();
+
+ final int verifiersLength = source.readInt();
+ if (verifiersLength == 0) {
+ verifiers = new VerifierInfo[0];
+ } else {
+ verifiers = new VerifierInfo[verifiersLength];
+ source.readTypedArray(verifiers, VerifierInfo.CREATOR);
+ }
}
}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index dcb677617f2e..7a7e4f4b54ab 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -725,7 +725,32 @@ public abstract class PackageManager {
public static final int MOVE_EXTERNAL_MEDIA = 0x00000002;
/**
+ * Usable by the required verifier as the {@code verificationCode} argument
+ * for {@link PackageManager#verifyPendingInstall} to indicate that it will
+ * allow the installation to proceed without any of the optional verifiers
+ * needing to vote.
+ *
+ * @hide
+ */
+ public static final int VERIFICATION_ALLOW_WITHOUT_SUFFICIENT = 2;
+
+ /**
+ * Used as the {@code verificationCode} argument for
+ * {@link PackageManager#verifyPendingInstall} to indicate that the calling
+ * package verifier allows the installation to proceed.
+ */
+ public static final int VERIFICATION_ALLOW = 1;
+
+ /**
+ * Used as the {@code verificationCode} argument for
+ * {@link PackageManager#verifyPendingInstall} to indicate the calling
+ * package verifier does not vote to allow the installation to proceed.
+ */
+ public static final int VERIFICATION_REJECT = -1;
+
+ /**
* Range of IDs allocated for a user.
+ *
* @hide
*/
public static final int PER_USER_RANGE = 100000;
@@ -1045,9 +1070,7 @@ public abstract class PackageManager {
/**
* 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
+ * {@link PackageManager#verifyPendingInstall(int, int)}
*/
public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
@@ -2156,16 +2179,17 @@ public abstract class PackageManager {
/**
* Allows a package listening to the
* {@link Intent#ACTION_PACKAGE_NEEDS_VERIFICATION package verification
- * broadcast} to respond to the package manager.
+ * broadcast} to respond to the package manager. The response must include
+ * the {@code verificationCode} which is one of
+ * {@link PackageManager#VERIFICATION_ALLOW} or
+ * {@link PackageManager#VERIFICATION_REJECT}.
*
* @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
+ * @param verificationCode either {@link PackageManager#VERIFICATION_ALLOW}
+ * or {@link PackageManager#VERIFICATION_REJECT}.
*/
- public abstract void verifyPendingInstall(int id, boolean verified, String failureMessage);
+ public abstract void verifyPendingInstall(int id, int verificationCode);
/**
* Change the installer associated with a given package. There are limitations
@@ -2513,6 +2537,7 @@ public abstract class PackageManager {
* {@link #COMPONENT_ENABLED_STATE_DEFAULT}. The last one means the
* application's enabled state is based on the original information in
* the manifest as found in {@link ComponentInfo}.
+ * @throws IllegalArgumentException if the named package does not exist.
*/
public abstract int getApplicationEnabledSetting(String packageName);
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index e7b844c4808b..c30675b6a36d 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -28,7 +28,9 @@ import android.os.Build;
import android.os.Bundle;
import android.os.PatternMatcher;
import android.util.AttributeSet;
+import android.util.Base64;
import android.util.DisplayMetrics;
+import android.util.Log;
import android.util.Slog;
import android.util.TypedValue;
import com.android.internal.util.XmlUtils;
@@ -40,11 +42,18 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateEncodingException;
+import java.security.spec.EncodedKeySpec;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
+import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -150,12 +159,14 @@ public class PackageParser {
* @hide
*/
public static class PackageLite {
- public String packageName;
- public int installLocation;
- public String mScanPath;
- public PackageLite(String packageName, int installLocation) {
+ public final String packageName;
+ public final int installLocation;
+ public final VerifierInfo[] verifiers;
+
+ public PackageLite(String packageName, int installLocation, List<VerifierInfo> verifiers) {
this.packageName = packageName;
this.installLocation = installLocation;
+ this.verifiers = verifiers.toArray(new VerifierInfo[verifiers.size()]);
}
}
@@ -619,8 +630,9 @@ public class PackageParser {
* @return PackageLite object with package information or null on failure.
*/
public static PackageLite parsePackageLite(String packageFilePath, int flags) {
- XmlResourceParser parser = null;
AssetManager assmgr = null;
+ final XmlResourceParser parser;
+ final Resources res;
try {
assmgr = new AssetManager();
assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -631,6 +643,9 @@ public class PackageParser {
return null;
}
+ final DisplayMetrics metrics = new DisplayMetrics();
+ metrics.setToDefaults();
+ res = new Resources(assmgr, metrics, null);
parser = assmgr.openXmlResourceParser(cookie, ANDROID_MANIFEST_FILENAME);
} catch (Exception e) {
if (assmgr != null) assmgr.close();
@@ -638,11 +653,12 @@ public class PackageParser {
+ packageFilePath, e);
return null;
}
- AttributeSet attrs = parser;
- String errors[] = new String[1];
+
+ final AttributeSet attrs = parser;
+ final String errors[] = new String[1];
PackageLite packageLite = null;
try {
- packageLite = parsePackageLite(parser, attrs, flags, errors);
+ packageLite = parsePackageLite(res, parser, attrs, flags, errors);
} catch (IOException e) {
Slog.w(TAG, packageFilePath, e);
} catch (XmlPullParserException e) {
@@ -719,9 +735,9 @@ public class PackageParser {
return pkgName.intern();
}
- private static PackageLite parsePackageLite(XmlPullParser parser,
- AttributeSet attrs, int flags, String[] outError)
- throws IOException, XmlPullParserException {
+ private static PackageLite parsePackageLite(Resources res, XmlPullParser parser,
+ AttributeSet attrs, int flags, String[] outError) throws IOException,
+ XmlPullParserException {
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG
@@ -759,7 +775,26 @@ public class PackageParser {
break;
}
}
- return new PackageLite(pkgName.intern(), installLocation);
+
+ // Only search the tree when the tag is directly below <manifest>
+ final int searchDepth = parser.getDepth() + 1;
+
+ final List<VerifierInfo> verifiers = new ArrayList<VerifierInfo>();
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() >= searchDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+
+ if (parser.getDepth() == searchDepth && "package-verifier".equals(parser.getName())) {
+ final VerifierInfo verifier = parseVerifier(res, parser, attrs, flags, outError);
+ if (verifier != null) {
+ verifiers.add(verifier);
+ }
+ }
+ }
+
+ return new PackageLite(pkgName.intern(), installLocation, verifiers);
}
/**
@@ -2691,6 +2726,63 @@ public class PackageParser {
return data;
}
+ private static VerifierInfo parseVerifier(Resources res, XmlPullParser parser,
+ AttributeSet attrs, int flags, String[] outError) throws XmlPullParserException,
+ IOException {
+ final TypedArray sa = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.AndroidManifestPackageVerifier);
+
+ final String packageName = sa.getNonResourceString(
+ com.android.internal.R.styleable.AndroidManifestPackageVerifier_name);
+
+ final String encodedPublicKey = sa.getNonResourceString(
+ com.android.internal.R.styleable.AndroidManifestPackageVerifier_publicKey);
+
+ sa.recycle();
+
+ if (packageName == null || packageName.length() == 0) {
+ Slog.i(TAG, "verifier package name was null; skipping");
+ return null;
+ } else if (encodedPublicKey == null) {
+ Slog.i(TAG, "verifier " + packageName + " public key was null; skipping");
+ }
+
+ EncodedKeySpec keySpec;
+ try {
+ final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT);
+ keySpec = new X509EncodedKeySpec(encoded);
+ } catch (IllegalArgumentException e) {
+ Slog.i(TAG, "Could not parse verifier " + packageName + " public key; invalid Base64");
+ return null;
+ }
+
+ /* First try the key as an RSA key. */
+ try {
+ final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ final PublicKey publicKey = keyFactory.generatePublic(keySpec);
+ return new VerifierInfo(packageName, publicKey);
+ } catch (NoSuchAlgorithmException e) {
+ Log.wtf(TAG, "Could not parse public key because RSA isn't included in build");
+ return null;
+ } catch (InvalidKeySpecException e) {
+ // Not a RSA public key.
+ }
+
+ /* Now try it as a DSA key. */
+ try {
+ final KeyFactory keyFactory = KeyFactory.getInstance("DSA");
+ final PublicKey publicKey = keyFactory.generatePublic(keySpec);
+ return new VerifierInfo(packageName, publicKey);
+ } catch (NoSuchAlgorithmException e) {
+ Log.wtf(TAG, "Could not parse public key because DSA isn't included in build");
+ return null;
+ } catch (InvalidKeySpecException e) {
+ // Not a DSA public key.
+ }
+
+ return null;
+ }
+
private static final String ANDROID_RESOURCES
= "http://schemas.android.com/apk/res/android";
diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java
index c6aefb87c723..9c9340d0ef00 100644
--- a/core/java/android/content/pm/Signature.java
+++ b/core/java/android/content/pm/Signature.java
@@ -19,7 +19,12 @@ package android.content.pm;
import android.os.Parcel;
import android.os.Parcelable;
+import java.io.ByteArrayInputStream;
import java.lang.ref.SoftReference;
+import java.security.PublicKey;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
import java.util.Arrays;
/**
@@ -135,6 +140,20 @@ public class Signature implements Parcelable {
return bytes;
}
+ /**
+ * Returns the public key for this signature.
+ *
+ * @throws CertificateException when Signature isn't a valid X.509
+ * certificate; shouldn't happen.
+ * @hide
+ */
+ public PublicKey getPublicKey() throws CertificateException {
+ final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ final ByteArrayInputStream bais = new ByteArrayInputStream(mSignature);
+ final Certificate cert = certFactory.generateCertificate(bais);
+ return cert.getPublicKey();
+ }
+
@Override
public boolean equals(Object obj) {
try {
diff --git a/core/java/android/content/pm/VerifierDeviceIdentity.java b/core/java/android/content/pm/VerifierDeviceIdentity.java
index bfebe0f8bfca..a8cdb6ae8af6 100644
--- a/core/java/android/content/pm/VerifierDeviceIdentity.java
+++ b/core/java/android/content/pm/VerifierDeviceIdentity.java
@@ -153,6 +153,15 @@ public class VerifierDeviceIdentity implements Parcelable {
value = group - ('2' - 26);
} else if (group == SEPARATOR) {
continue;
+ } else if ('a' <= group && group <= 'z') {
+ /* Lowercase letters should be the same as uppercase for Base32 */
+ value = group - 'a';
+ } else if (group == '0') {
+ /* Be nice to users that mistake O (letter) for 0 (zero) */
+ value = 'O' - 'A';
+ } else if (group == '1') {
+ /* Be nice to users that mistake I (letter) for 1 (one) */
+ value = 'I' - 'A';
} else {
throw new IllegalArgumentException("base base-32 character: " + group);
}
diff --git a/core/java/android/content/pm/VerifierInfo.aidl b/core/java/android/content/pm/VerifierInfo.aidl
new file mode 100644
index 000000000000..7702d387d3f0
--- /dev/null
+++ b/core/java/android/content/pm/VerifierInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+parcelable VerifierInfo;
diff --git a/core/java/android/content/pm/VerifierInfo.java b/core/java/android/content/pm/VerifierInfo.java
new file mode 100644
index 000000000000..0a2b2832d319
--- /dev/null
+++ b/core/java/android/content/pm/VerifierInfo.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.pm;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.security.PublicKey;
+
+/**
+ * Contains information about a package verifier as used by
+ * {@code PackageManagerService} during package verification.
+ *
+ * @hide
+ */
+public class VerifierInfo implements Parcelable {
+ /** Package name of the verifier. */
+ public final String packageName;
+
+ /** Signatures used to sign the package verifier's package. */
+ public final PublicKey publicKey;
+
+ /**
+ * Creates an object that represents a verifier info object.
+ *
+ * @param packageName the package name in Java-style. Must not be {@code
+ * null} or empty.
+ * @param publicKey the public key for the signer encoded in Base64. Must
+ * not be {@code null} or empty.
+ * @throws IllegalArgumentException if either argument is null or empty.
+ */
+ public VerifierInfo(String packageName, PublicKey publicKey) {
+ if (packageName == null || packageName.length() == 0) {
+ throw new IllegalArgumentException("packageName must not be null or empty");
+ } else if (publicKey == null) {
+ throw new IllegalArgumentException("publicKey must not be null");
+ }
+
+ this.packageName = packageName;
+ this.publicKey = publicKey;
+ }
+
+ private VerifierInfo(Parcel source) {
+ packageName = source.readString();
+ publicKey = (PublicKey) source.readSerializable();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(packageName);
+ dest.writeSerializable(publicKey);
+ }
+
+ public static final Parcelable.Creator<VerifierInfo> CREATOR
+ = new Parcelable.Creator<VerifierInfo>() {
+ public VerifierInfo createFromParcel(Parcel source) {
+ return new VerifierInfo(source);
+ }
+
+ public VerifierInfo[] newArray(int size) {
+ return new VerifierInfo[size];
+ }
+ };
+} \ No newline at end of file
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 58f7869f5e95..e40de266606c 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -480,6 +480,12 @@ public class Camera {
public final void stopPreview() {
_stopPreview();
mFaceDetectionRunning = false;
+
+ mShutterCallback = null;
+ mRawImageCallback = null;
+ mPostviewCallback = null;
+ mJpegCallback = null;
+ mAutoFocusCallback = null;
}
private native final void _stopPreview();
@@ -766,15 +772,8 @@ public class Camera {
* onAutoFocus will be called immediately with a fake value of
* <code>success</code> set to <code>true</code>.
*
- * The auto-focus routine may lock auto-exposure and auto-white balance
- * after it completes. To check for the state of these locks, use the
- * {@link android.hardware.Camera.Parameters#getAutoExposureLock()} and
- * {@link android.hardware.Camera.Parameters#getAutoWhiteBalanceLock()}
- * methods. If such locking is undesirable, use
- * {@link android.hardware.Camera.Parameters#setAutoExposureLock(boolean)}
- * and
- * {@link android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean)}
- * to release the locks.
+ * The auto-focus routine does not lock auto-exposure and auto-white
+ * balance after it completes.
*
* @param success true if focus was successful, false if otherwise
* @param camera the Camera service object
@@ -805,16 +804,10 @@ public class Camera {
* {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}, flash may be
* fired during auto-focus, depending on the driver and camera hardware.<p>
*
- * The auto-focus routine may lock auto-exposure and auto-white balance
- * after it completes. To check for the state of these locks, use the
- * {@link android.hardware.Camera.Parameters#getAutoExposureLock()} and
- * {@link android.hardware.Camera.Parameters#getAutoWhiteBalanceLock()}
- * methods after the {@link AutoFocusCallback#onAutoFocus(boolean, Camera)}
- * callback is invoked. If such locking is undesirable, use
- * {@link android.hardware.Camera.Parameters#setAutoExposureLock(boolean)}
- * and
- * {@link android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean)}
- * to release the locks.
+ * Auto-exposure lock {@link android.hardware.Camera.Parameters#getAutoExposureLock()}
+ * and auto-white balance locks {@link android.hardware.Camera.Parameters#getAutoWhiteBalanceLock()}
+ * do not change during and after autofocus. But auto-focus routine may stop
+ * auto-exposure and auto-white balance transiently during focusing.
*
* @param cb the callback to run
* @see #cancelAutoFocus()
@@ -834,13 +827,7 @@ public class Camera {
* this function will return the focus position to the default.
* If the camera does not support auto-focus, this is a no-op.
*
- * Canceling auto-focus will return the auto-exposure lock and auto-white
- * balance lock to their state before {@link #autoFocus(AutoFocusCallback)}
- * was called.
- *
* @see #autoFocus(Camera.AutoFocusCallback)
- * @see android.hardware.Camera.Parameters#setAutoExposureLock(boolean)
- * @see android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean)
*/
public final void cancelAutoFocus()
{
@@ -2778,13 +2765,12 @@ public class Camera {
*
* <p>Stopping preview with {@link #stopPreview()}, or triggering still
* image capture with {@link #takePicture(Camera.ShutterCallback,
- * Camera.PictureCallback, Camera.PictureCallback)}, will automatically
- * set the lock to false. However, the lock can be re-enabled before
- * preview is re-started to keep the same AE parameters.</p>
+ * Camera.PictureCallback, Camera.PictureCallback)}, will not change the
+ * lock.</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.</p>
+ * <p>Exposure compensation, auto-exposure lock, and auto-white balance
+ * lock can be used to capture an exposure-bracketed burst of images,
+ * for example.</p>
*
* <p>Auto-exposure state, including the lock state, will not be
* maintained after camera {@link #release()} is called. Locking
@@ -2793,14 +2779,6 @@ public class Camera {
* run at all, and may result in severely over- or under-exposed
* images.</p>
*
- * <p>The driver may also independently lock auto-exposure after
- * auto-focus completes. If this is undesirable, be sure to always set
- * the auto-exposure lock to false after the
- * {@link AutoFocusCallback#onAutoFocus(boolean, Camera)} callback is
- * received. The {@link #getAutoExposureLock()} method can be used after
- * the callback to determine if the camera has locked auto-exposure
- * independently.</p>
- *
* @param toggle new state of the auto-exposure lock. True means that
* auto-exposure is locked, false means that the auto-exposure
* routine is free to run normally.
@@ -2817,11 +2795,7 @@ public class Camera {
* {@link #setAutoExposureLock} for details about the lock.
*
* @return State of the auto-exposure lock. Returns true if
- * auto-exposure is currently locked, and false otherwise. The
- * auto-exposure lock may be independently enabled by the camera
- * subsystem when auto-focus has completed. This method can be
- * used after the {@link AutoFocusCallback#onAutoFocus(boolean,
- * Camera)} callback to determine if the camera has locked AE.
+ * auto-exposure is currently locked, and false otherwise.
*
* @see #setAutoExposureLock(boolean)
*
@@ -2859,29 +2833,20 @@ public class Camera {
*
* <p>Stopping preview with {@link #stopPreview()}, or triggering still
* image capture with {@link #takePicture(Camera.ShutterCallback,
- * Camera.PictureCallback, Camera.PictureCallback)}, will automatically
- * 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>
+ * Camera.PictureCallback, Camera.PictureCallback)}, will not change the
+ * the lock.</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
- * state, including the lock state, will not be maintained after camera
- * {@link #release()} is called. Locking auto-white balance after
- * {@link #open()} but before the first call to {@link #startPreview()}
- * will not allow the auto-white balance routine to run at all, and may
- * result in severely incorrect color in captured images.</p>
- *
- * <p>The driver may also independently lock auto-white balance after
- * auto-focus completes. If this is undesirable, be sure to always set
- * the auto-white balance lock to false after the
- * {@link AutoFocusCallback#onAutoFocus(boolean, Camera)} callback is
- * received. The {@link #getAutoWhiteBalanceLock()} method can be used
- * after the callback to determine if the camera has locked auto-white
- * balance independently.</p>
+ * <p>Exposure compensation, AE lock, and AWB lock can be used to
+ * capture an exposure-bracketed burst of images, for example.
+ * Auto-white balance state, including the lock state, will not be
+ * maintained after camera {@link #release()} is called. Locking
+ * auto-white balance after {@link #open()} but before the first call to
+ * {@link #startPreview()} will not allow the auto-white balance routine
+ * to run at all, and may result in severely incorrect color in captured
+ * images.</p>
*
* @param toggle new state of the auto-white balance lock. True means
* that auto-white balance is locked, false means that the
@@ -2902,11 +2867,7 @@ public class Camera {
*
* @return State of the auto-white balance lock. Returns true if
* auto-white balance is currently locked, and false
- * otherwise. The auto-white balance lock may be independently
- * enabled by the camera subsystem when auto-focus has
- * completed. This method can be used after the
- * {@link AutoFocusCallback#onAutoFocus(boolean, Camera)}
- * callback to determine if the camera has locked AWB.
+ * otherwise.
*
* @see #setAutoWhiteBalanceLock(boolean)
*
diff --git a/core/java/android/inputmethodservice/Keyboard.java b/core/java/android/inputmethodservice/Keyboard.java
index 10386f84671d..4fe54c0aa4dd 100644
--- a/core/java/android/inputmethodservice/Keyboard.java
+++ b/core/java/android/inputmethodservice/Keyboard.java
@@ -144,6 +144,8 @@ public class Keyboard {
/** Number of key widths from current touch point to search for nearest keys. */
private static float SEARCH_DISTANCE = 1.8f;
+ private ArrayList<Row> rows = new ArrayList<Row>();
+
/**
* Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
* Some of the key size defaults can be overridden per row from what the {@link Keyboard}
@@ -164,6 +166,9 @@ public class Keyboard {
public int defaultHorizontalGap;
/** Vertical gap following this row. */
public int verticalGap;
+
+ ArrayList<Key> mKeys = new ArrayList<Key>();
+
/**
* Edge flags for this row of keys. Possible values that can be assigned are
* {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM}
@@ -256,7 +261,7 @@ public class Keyboard {
public CharSequence text;
/** Popup characters */
public CharSequence popupCharacters;
-
+
/**
* Flags that specify the anchoring to edges of the keyboard for detecting touch events
* that are just out of the boundary of the key. This is a bit mask of
@@ -596,11 +601,44 @@ public class Keyboard {
column++;
x += key.width + key.gap;
mKeys.add(key);
+ row.mKeys.add(key);
if (x > mTotalWidth) {
mTotalWidth = x;
}
}
- mTotalHeight = y + mDefaultHeight;
+ mTotalHeight = y + mDefaultHeight;
+ rows.add(row);
+ }
+
+ final void resize(int newWidth, int newHeight) {
+ int numRows = rows.size();
+ for (int rowIndex = 0; rowIndex < numRows; ++rowIndex) {
+ Row row = rows.get(rowIndex);
+ int numKeys = row.mKeys.size();
+ int totalGap = 0;
+ int totalWidth = 0;
+ for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) {
+ Key key = row.mKeys.get(keyIndex);
+ if (keyIndex > 0) {
+ totalGap += key.gap;
+ }
+ totalWidth += key.width;
+ }
+ if (totalGap + totalWidth > newWidth) {
+ int x = 0;
+ float scaleFactor = (float)(newWidth - totalGap) / totalWidth;
+ for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) {
+ Key key = row.mKeys.get(keyIndex);
+ key.width *= scaleFactor;
+ key.x = x;
+ x += key.width + key.gap;
+ }
+ }
+ }
+ mTotalWidth = newWidth;
+ // TODO: This does not adjust the vertical placement according to the new size.
+ // The main problem in the previous code was horizontal placement/size, but we should
+ // also recalculate the vertical sizes/positions when we get this resize call.
}
public List<Key> getKeys() {
@@ -749,7 +787,7 @@ public class Keyboard {
Row currentRow = null;
Resources res = context.getResources();
boolean skipRow = false;
-
+
try {
int event;
while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
@@ -759,6 +797,7 @@ public class Keyboard {
inRow = true;
x = 0;
currentRow = createRowFromXml(res, parser);
+ rows.add(currentRow);
skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode;
if (skipRow) {
skipToEndOfRow(parser);
@@ -781,6 +820,7 @@ public class Keyboard {
} else if (key.codes[0] == KEYCODE_ALT) {
mModifierKeys.add(key);
}
+ currentRow.mKeys.add(key);
} else if (TAG_KEYBOARD.equals(tag)) {
parseKeyboardAttributes(res, parser);
}
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 05444f628ffe..1119c1eb1b31 100644
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -376,6 +376,7 @@ public class KeyboardView extends View implements View.OnClickListener {
initGestureDetector();
}
+
private void initGestureDetector() {
mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
@Override
@@ -615,6 +616,9 @@ public class KeyboardView extends View implements View.OnClickListener {
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
+ if (mKeyboard != null) {
+ mKeyboard.resize(w, h);
+ }
// Release the buffer, if any and it will be reallocated on the next draw
mBuffer = null;
}
diff --git a/core/java/android/net/DhcpInfoInternal.java b/core/java/android/net/DhcpInfoInternal.java
index 9b0a2d7056fb..fa77bc5c0993 100644
--- a/core/java/android/net/DhcpInfoInternal.java
+++ b/core/java/android/net/DhcpInfoInternal.java
@@ -24,6 +24,7 @@ import java.net.Inet4Address;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
/**
* A simple object for retrieving the results of a DHCP request.
@@ -41,14 +42,18 @@ public class DhcpInfoInternal {
public String serverAddress;
public int leaseDuration;
- private Collection<RouteInfo> routes;
+ private Collection<RouteInfo> mRoutes;
public DhcpInfoInternal() {
- routes = new ArrayList<RouteInfo>();
+ mRoutes = new ArrayList<RouteInfo>();
}
public void addRoute(RouteInfo routeInfo) {
- routes.add(routeInfo);
+ mRoutes.add(routeInfo);
+ }
+
+ public Collection<RouteInfo> getRoutes() {
+ return Collections.unmodifiableCollection(mRoutes);
}
private int convertToInt(String addr) {
@@ -66,7 +71,7 @@ public class DhcpInfoInternal {
public DhcpInfo makeDhcpInfo() {
DhcpInfo info = new DhcpInfo();
info.ipAddress = convertToInt(ipAddress);
- for (RouteInfo route : routes) {
+ for (RouteInfo route : mRoutes) {
if (route.isDefaultRoute()) {
info.gateway = convertToInt(route.getGateway().getHostAddress());
break;
@@ -94,14 +99,14 @@ public class DhcpInfoInternal {
public LinkProperties makeLinkProperties() {
LinkProperties p = new LinkProperties();
p.addLinkAddress(makeLinkAddress());
- for (RouteInfo route : routes) {
+ for (RouteInfo route : mRoutes) {
p.addRoute(route);
}
+ //if empty, connectivity configures default DNS
if (TextUtils.isEmpty(dns1) == false) {
p.addDns(NetworkUtils.numericToInetAddress(dns1));
} else {
- p.addDns(NetworkUtils.numericToInetAddress(serverAddress));
- Log.d(TAG, "empty dns1, use dhcp server as dns1!");
+ Log.d(TAG, "makeLinkProperties with empty dns1!");
}
if (TextUtils.isEmpty(dns2) == false) {
p.addDns(NetworkUtils.numericToInetAddress(dns2));
@@ -111,11 +116,33 @@ public class DhcpInfoInternal {
return p;
}
+ /* Updates the DHCP fields that need to be retained from
+ * original DHCP request if the DHCP renewal shows them as
+ * being empty
+ */
+ public void updateFromDhcpRequest(DhcpInfoInternal orig) {
+ if (orig == null) return;
+
+ if (TextUtils.isEmpty(dns1)) {
+ dns1 = orig.dns1;
+ }
+
+ if (TextUtils.isEmpty(dns2)) {
+ dns2 = orig.dns2;
+ }
+
+ if (mRoutes.size() == 0) {
+ for (RouteInfo route : orig.getRoutes()) {
+ addRoute(route);
+ }
+ }
+ }
+
public String toString() {
String routeString = "";
- for (RouteInfo route : routes) routeString += route.toString() + " | ";
+ for (RouteInfo route : mRoutes) routeString += route.toString() + " | ";
return "addr: " + ipAddress + "/" + prefixLength +
- " routes: " + routeString +
+ " mRoutes: " + routeString +
" dns: " + dns1 + "," + dns2 +
" dhcpServer: " + serverAddress +
" leaseDuration: " + leaseDuration;
diff --git a/core/java/android/net/DhcpStateMachine.java b/core/java/android/net/DhcpStateMachine.java
index 445b2f77b06c..79c939565804 100644
--- a/core/java/android/net/DhcpStateMachine.java
+++ b/core/java/android/net/DhcpStateMachine.java
@@ -63,6 +63,9 @@ public class DhcpStateMachine extends StateMachine {
private PowerManager.WakeLock mDhcpRenewWakeLock;
private static final String WAKELOCK_TAG = "DHCP";
+ //Remember DHCP configuration from first request
+ private DhcpInfoInternal mDhcpInfo;
+
private static final int DHCP_RENEW = 0;
private static final String ACTION_DHCP_RENEW = "android.net.wifi.DHCP_RENEW";
@@ -335,9 +338,11 @@ public class DhcpStateMachine extends StateMachine {
if (dhcpAction == DhcpAction.START) {
Log.d(TAG, "DHCP request on " + mInterfaceName);
success = NetworkUtils.runDhcp(mInterfaceName, dhcpInfoInternal);
+ mDhcpInfo = dhcpInfoInternal;
} else if (dhcpAction == DhcpAction.RENEW) {
Log.d(TAG, "DHCP renewal on " + mInterfaceName);
success = NetworkUtils.runDhcpRenew(mInterfaceName, dhcpInfoInternal);
+ dhcpInfoInternal.updateFromDhcpRequest(mDhcpInfo);
}
if (success) {
diff --git a/core/java/android/net/DnsPinger.java b/core/java/android/net/DnsPinger.java
index 3e27b0defc07..3291e6b5c917 100644
--- a/core/java/android/net/DnsPinger.java
+++ b/core/java/android/net/DnsPinger.java
@@ -53,7 +53,7 @@ import java.util.concurrent.atomic.AtomicInteger;
public final class DnsPinger extends Handler {
private static final boolean V = true;
- private static final int RECEIVE_POLL_INTERVAL_MS = 30;
+ private static final int RECEIVE_POLL_INTERVAL_MS = 200;
private static final int DNS_PORT = 53;
/** Short socket timeout so we don't block one any 'receive' call */
@@ -70,6 +70,9 @@ public final class DnsPinger extends Handler {
private final ArrayList<InetAddress> mDefaultDns;
private String TAG;
+ //Invalidates old dns requests upon a cancel
+ private AtomicInteger mCurrentToken = new AtomicInteger();
+
private static final int BASE = Protocol.BASE_DNS_PINGER;
/**
@@ -102,6 +105,17 @@ public final class DnsPinger extends Handler {
long start = SystemClock.elapsedRealtime();
}
+ /* Message argument for ACTION_PING_DNS */
+ private class DnsArg {
+ InetAddress dns;
+ int seq;
+
+ DnsArg(InetAddress d, int s) {
+ dns = d;
+ seq = s;
+ }
+ }
+
public DnsPinger(Context context, String TAG, Looper looper,
Handler target, int connectionType) {
super(looper);
@@ -122,9 +136,13 @@ public final class DnsPinger extends Handler {
public void handleMessage(Message msg) {
switch (msg.what) {
case ACTION_PING_DNS:
+ DnsArg dnsArg = (DnsArg) msg.obj;
+ if (dnsArg.seq != mCurrentToken.get()) {
+ break;
+ }
try {
ActivePing newActivePing = new ActivePing();
- InetAddress dnsAddress = (InetAddress) msg.obj;
+ InetAddress dnsAddress = dnsArg.dns;
newActivePing.internalId = msg.arg1;
newActivePing.timeout = msg.arg2;
newActivePing.socket = new DatagramSocket();
@@ -248,11 +266,13 @@ public final class DnsPinger extends Handler {
*/
public int pingDnsAsync(InetAddress dns, int timeout, int delay) {
int id = sCounter.incrementAndGet();
- sendMessageDelayed(obtainMessage(ACTION_PING_DNS, id, timeout, dns), delay);
+ sendMessageDelayed(obtainMessage(ACTION_PING_DNS, id, timeout,
+ new DnsArg(dns, mCurrentToken.get())), delay);
return id;
}
public void cancelPings() {
+ mCurrentToken.incrementAndGet();
obtainMessage(ACTION_CANCEL_ALL_PINGS).sendToTarget();
}
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index eef658e4591a..70460087ca91 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -83,6 +83,12 @@ interface IConnectivityManager
String[] getTetheredIfaces();
+ /**
+ * Return list of interface pairs that are actively tethered. Even indexes are
+ * remote interface, and odd indexes are corresponding local interfaces.
+ */
+ String[] getTetheredIfacePairs();
+
String[] getTetheringErroredIfaces();
String[] getTetherableUsbRegexs();
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index bcf6239afbca..62bb9657f796 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -56,7 +56,7 @@ import java.io.PrintWriter;
public class MobileDataStateTracker implements NetworkStateTracker {
private static final String TAG = "MobileDataStateTracker";
- private static final boolean DBG = true;
+ private static final boolean DBG = false;
private static final boolean VDBG = false;
private Phone.DataState mMobileDataState;
diff --git a/core/java/android/net/NetworkStatsHistory.java b/core/java/android/net/NetworkStatsHistory.java
index d8ac31f277a0..a6635bee205a 100644
--- a/core/java/android/net/NetworkStatsHistory.java
+++ b/core/java/android/net/NetworkStatsHistory.java
@@ -270,6 +270,11 @@ public class NetworkStatsHistory implements Parcelable {
|| entry.operations < 0) {
throw new IllegalArgumentException("tried recording negative data");
}
+ if (entry.rxBytes == 0 && entry.rxPackets == 0 && entry.txBytes == 0 && entry.txPackets == 0
+ && entry.operations == 0) {
+ // nothing to record; skip
+ return;
+ }
// create any buckets needed by this range
ensureBuckets(start, end);
@@ -441,10 +446,10 @@ public class NetworkStatsHistory implements Parcelable {
final long curStart = bucketStart[i];
final long curEnd = curStart + bucketDuration;
- // bucket is older than record; we're finished
- if (curEnd < start) break;
- // bucket is newer than record; keep looking
- if (curStart > end) continue;
+ // bucket is older than request; we're finished
+ if (curEnd <= start) break;
+ // bucket is newer than request; keep looking
+ if (curStart >= end) continue;
// include full value for active buckets, otherwise only fractional
final boolean activeBucket = curStart < now && curEnd > now;
@@ -466,7 +471,6 @@ public class NetworkStatsHistory implements Parcelable {
if (txPackets != null) entry.txPackets += txPackets[i] * overlap / bucketDuration;
if (operations != null) entry.operations += operations[i] * overlap / bucketDuration;
}
-
return entry;
}
diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java
index cd4902308b72..418b82fdeaa2 100644
--- a/core/java/android/net/NetworkTemplate.java
+++ b/core/java/android/net/NetworkTemplate.java
@@ -19,14 +19,15 @@ package android.net;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_WIFI;
import static android.net.ConnectivityManager.TYPE_WIMAX;
-import static android.net.ConnectivityManager.isNetworkTypeMobile;
import static android.net.NetworkIdentity.scrubSubscriberId;
import static android.telephony.TelephonyManager.NETWORK_CLASS_2_G;
import static android.telephony.TelephonyManager.NETWORK_CLASS_3_G;
import static android.telephony.TelephonyManager.NETWORK_CLASS_4_G;
import static android.telephony.TelephonyManager.NETWORK_CLASS_UNKNOWN;
import static android.telephony.TelephonyManager.getNetworkClass;
+import static com.android.internal.util.ArrayUtils.contains;
+import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
@@ -52,6 +53,16 @@ public class NetworkTemplate implements Parcelable {
public static final int MATCH_ETHERNET = 5;
/**
+ * Set of {@link NetworkInfo#getType()} that reflect data usage.
+ */
+ private static final int[] DATA_USAGE_NETWORK_TYPES;
+
+ static {
+ DATA_USAGE_NETWORK_TYPES = Resources.getSystem().getIntArray(
+ com.android.internal.R.array.config_data_usage_network_types);
+ }
+
+ /**
* Template to combine all {@link ConnectivityManager#TYPE_MOBILE} style
* networks together. Only uses statistics for requested IMSI.
*/
@@ -151,7 +162,7 @@ public class NetworkTemplate implements Parcelable {
}
/**
- * Test if this network matches the given template and IMSI.
+ * Test if given {@link NetworkIdentity} matches this template.
*/
public boolean matches(NetworkIdentity ident) {
switch (mMatchRule) {
@@ -171,23 +182,25 @@ public class NetworkTemplate implements Parcelable {
}
/**
- * Check if mobile network with matching IMSI. Also matches
- * {@link #TYPE_WIMAX}.
+ * Check if mobile network with matching IMSI.
*/
private boolean matchesMobile(NetworkIdentity ident) {
- if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
- return true;
- } else if (ident.mType == TYPE_WIMAX) {
+ if (ident.mType == TYPE_WIMAX) {
+ // TODO: consider matching against WiMAX subscriber identity
return true;
+ } else {
+ return (contains(DATA_USAGE_NETWORK_TYPES, ident.mType)
+ && Objects.equal(mSubscriberId, ident.mSubscriberId));
}
- return false;
}
/**
* Check if mobile network classified 3G or lower with matching IMSI.
*/
private boolean matchesMobile3gLower(NetworkIdentity ident) {
- if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
+ if (ident.mType == TYPE_WIMAX) {
+ return false;
+ } else if (matchesMobile(ident)) {
switch (getNetworkClass(ident.mSubType)) {
case NETWORK_CLASS_UNKNOWN:
case NETWORK_CLASS_2_G:
@@ -199,17 +212,17 @@ public class NetworkTemplate implements Parcelable {
}
/**
- * Check if mobile network classified 4G with matching IMSI. Also matches
- * {@link #TYPE_WIMAX}.
+ * Check if mobile network classified 4G with matching IMSI.
*/
private boolean matchesMobile4g(NetworkIdentity ident) {
- if (isNetworkTypeMobile(ident.mType) && Objects.equal(mSubscriberId, ident.mSubscriberId)) {
+ if (ident.mType == TYPE_WIMAX) {
+ // TODO: consider matching against WiMAX subscriber identity
+ return true;
+ } else if (matchesMobile(ident)) {
switch (getNetworkClass(ident.mSubType)) {
case NETWORK_CLASS_4_G:
return true;
}
- } else if (ident.mType == TYPE_WIMAX) {
- return true;
}
return false;
}
diff --git a/core/java/android/net/ProxyProperties.java b/core/java/android/net/ProxyProperties.java
index 44dbec1ba508..cd799da9d7d2 100644
--- a/core/java/android/net/ProxyProperties.java
+++ b/core/java/android/net/ProxyProperties.java
@@ -137,6 +137,8 @@ public class ProxyProperties implements Parcelable {
if (mExclusionList != null) {
sb.append(" xl=").append(mExclusionList);
}
+ } else {
+ sb.append("[ProxyProperties.mHost == null]");
}
return sb.toString();
}
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index 47cfa73de0d8..18eb9f69daf8 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -53,25 +53,33 @@ public class TrafficStats {
public static final int UID_REMOVED = -4;
/**
+ * Special UID value used when collecting {@link NetworkStatsHistory} for
+ * tethering traffic.
+ *
+ * @hide
+ */
+ public static final int UID_TETHERING = -5;
+
+ /**
* Default tag value for {@link DownloadManager} traffic.
*
* @hide
*/
- public static final int TAG_SYSTEM_DOWNLOAD = 0xFFFF0001;
+ public static final int TAG_SYSTEM_DOWNLOAD = 0xFFFFFF01;
/**
* Default tag value for {@link MediaPlayer} traffic.
*
* @hide
*/
- public static final int TAG_SYSTEM_MEDIA = 0xFFFF0002;
+ public static final int TAG_SYSTEM_MEDIA = 0xFFFFFF02;
/**
* Default tag value for {@link BackupManager} traffic.
*
* @hide
*/
- public static final int TAG_SYSTEM_BACKUP = 0xFFFF0003;
+ public static final int TAG_SYSTEM_BACKUP = 0xFFFFFF03;
/**
* Snapshot of {@link NetworkStats} when the currently active profiling
@@ -90,6 +98,10 @@ public class TrafficStats {
* <p>
* Changes only take effect during subsequent calls to
* {@link #tagSocket(Socket)}.
+ * <p>
+ * Tags between {@code 0xFFFFFF00} and {@code 0xFFFFFFFF} are reserved and
+ * used internally by system services like {@link DownloadManager} when
+ * performing traffic on behalf of an application.
*/
public static void setThreadStatsTag(int tag) {
NetworkManagementSocketTagger.setThreadSocketStatsTag(tag);
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index 2c875c82e780..9d28effe27b1 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -353,6 +353,48 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
public abstract String toString();
/**
+ * Return a string representation of the URI that is safe to print
+ * to logs and other places where PII should be avoided.
+ * @hide
+ */
+ public String toSafeString() {
+ String scheme = getScheme();
+ String ssp = getSchemeSpecificPart();
+ if (scheme != null) {
+ if (scheme.equalsIgnoreCase("tel") || scheme.equalsIgnoreCase("sip")
+ || scheme.equalsIgnoreCase("sms") || scheme.equalsIgnoreCase("smsto")
+ || scheme.equalsIgnoreCase("mailto")) {
+ StringBuilder builder = new StringBuilder(64);
+ builder.append(scheme);
+ builder.append(':');
+ if (ssp != null) {
+ for (int i=0; i<ssp.length(); i++) {
+ char c = ssp.charAt(i);
+ if (c == '-' || c == '@' || c == '.') {
+ builder.append(c);
+ } else {
+ builder.append('x');
+ }
+ }
+ }
+ return builder.toString();
+ }
+ }
+ // Not a sensitive scheme, but let's still be conservative about
+ // the data we include -- only the ssp, not the query params or
+ // fragment, because those can often have sensitive info.
+ StringBuilder builder = new StringBuilder(64);
+ if (scheme != null) {
+ builder.append(scheme);
+ builder.append(':');
+ }
+ if (ssp != null) {
+ builder.append(ssp);
+ }
+ return builder.toString();
+ }
+
+ /**
* Constructs a new builder, copying the attributes from this Uri.
*/
public abstract Builder buildUpon();
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index e392bca671ee..fe0106dc52c4 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -208,7 +208,9 @@ public final class NfcAdapter {
final NfcActivityManager mNfcActivityManager;
/**
- * @see {@link #setNdefPushMessageCallback}
+ * A callback to be invoked when the system successfully delivers your {@link NdefMessage}
+ * to another device.
+ * @see #setOnNdefPushCompleteCallback
*/
public interface OnNdefPushCompleteCallback {
/**
@@ -217,13 +219,21 @@ public final class NfcAdapter {
* <p>This callback is usually made on a binder thread (not the UI thread).
*
* @param event {@link NfcEvent} with the {@link NfcEvent#nfcAdapter} field set
- * @see {@link #setNdefPushMessageCallback}
+ * @see #setNdefPushMessageCallback
*/
public void onNdefPushComplete(NfcEvent event);
}
/**
- * @see {@link #setCeateNdefMessageCallback}
+ * A callback to be invoked when another NFC device capable of NDEF push (Android Beam)
+ * is within range.
+ * <p>Implement this interface and pass it to {@link
+ * NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()} in order to create an
+ * {@link NdefMessage} at the moment that another device is within range for NFC. Using this
+ * callback allows you to create a message with data that might vary based on the
+ * content currently visible to the user. Alternatively, you can call {@link
+ * #setNdefPushMessage setNdefPushMessage()} if the {@link NdefMessage} always contains the
+ * same data.
*/
public interface CreateNdefMessageCallback {
/**
@@ -507,13 +517,15 @@ public final class NfcAdapter {
* <p>Pass a null NDEF message to disable foreground NDEF push in the
* specified activities.
*
- * <p>One or more activities must be specified.
+ * <p>At least one activity must be specified, and usually only one is necessary.
*
* <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
*
* @param message NDEF message to push over NFC, or null to disable
- * @param activity an activity to enable for NDEF push (at least one is required)
- * @param activities zero or more additional activities to enable for NDEF Push
+ * @param activity an activity in which NDEF push should be enabled to share the provided
+ * NDEF message
+ * @param activities optional additional activities that should also enable NDEF push with
+ * the provided NDEF message
*/
public void setNdefPushMessage(NdefMessage message, Activity activity,
Activity ... activities) {
@@ -544,13 +556,15 @@ public final class NfcAdapter {
* <p>Pass a null callback to disable the callback in the
* specified activities.
*
- * <p>One or more activities must be specified.
+ * <p>At least one activity must be specified, and usually only one is necessary.
*
* <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
*
* @param callback callback, or null to disable
- * @param activity an activity to enable for NDEF push (at least one is required)
- * @param activities zero or more additional activities to enable for NDEF Push
+ * @param activity an activity in which NDEF push should be enabled to share an NDEF message
+ * that's retrieved from the provided callback
+ * @param activities optional additional activities that should also enable NDEF push using
+ * the provided callback
*/
public void setNdefPushMessageCallback(CreateNdefMessageCallback callback, Activity activity,
Activity ... activities) {
diff --git a/core/java/android/nfc/NfcEvent.java b/core/java/android/nfc/NfcEvent.java
index b00d8b755b03..860700a80f02 100644
--- a/core/java/android/nfc/NfcEvent.java
+++ b/core/java/android/nfc/NfcEvent.java
@@ -29,8 +29,8 @@ package android.nfc;
* in the callback) because it allows new fields to be added without breaking
* API compatibility.
*
- * @see {@link NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete}
- * @see {@link NfcAdapter.CreateNdefMessageCallback#createNdefMessage}
+ * @see NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete
+ * @see NfcAdapter.CreateNdefMessageCallback#createNdefMessage
*/
public final class NfcEvent {
/**
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 4e5645d53beb..66373fe242e6 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -231,6 +231,13 @@ interface INetworkManagementService
NetworkStats getNetworkStatsUidDetail(int uid);
/**
+ * Return summary of network statistics for the requested pairs of
+ * tethering interfaces. Even indexes are remote interface, and odd
+ * indexes are corresponding local interfaces.
+ */
+ NetworkStats getNetworkStatsTethering(in String[] ifacePairs);
+
+ /**
* Set quota for an interface.
*/
void setInterfaceQuota(String iface, long quotaBytes);
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java
index 45e3a4ccf984..dd9dd2562851 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -25,6 +25,7 @@ import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
+import android.view.Window;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ListAdapter;
@@ -156,13 +157,13 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi
// Set the title bar if title is available, else no title bar
final CharSequence title = getTitle();
- Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
- ? com.android.internal.R.style.Theme_NoTitleBar
- : com.android.internal.R.style.Theme);
- dialog.setContentView(mListView);
- if (!TextUtils.isEmpty(title)) {
+ Dialog dialog = mDialog = new Dialog(context, context.getThemeResId());
+ if (TextUtils.isEmpty(title)) {
+ dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ } else {
dialog.setTitle(title);
}
+ dialog.setContentView(mListView);
dialog.setOnDismissListener(this);
if (state != null) {
dialog.onRestoreInstanceState(state);
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index 9ba1fdbe67b0..4b4d3081a453 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -292,7 +292,9 @@ public final class CalendarContract {
*/
protected interface CalendarColumns {
/**
- * The color of the calendar
+ * The color of the calendar. This should only be updated by the sync
+ * adapter, not other apps, as changing a calendar's color can adversely
+ * affect its display.
* <P>Type: INTEGER (color value)</P>
*/
public static final String CALENDAR_COLOR = "calendar_color";
@@ -551,7 +553,6 @@ public final class CalendarContract {
* <ul>
* <li>{@link #NAME}</li>
* <li>{@link #CALENDAR_DISPLAY_NAME}</li>
- * <li>{@link #CALENDAR_COLOR}</li>
* <li>{@link #VISIBLE}</li>
* <li>{@link #SYNC_EVENTS}</li>
* </ul>
@@ -559,6 +560,7 @@ public final class CalendarContract {
* <ul>
* <li>{@link #ACCOUNT_NAME}</li>
* <li>{@link #ACCOUNT_TYPE}</li>
+ * <li>{@link #CALENDAR_COLOR}</li>
* <li>{@link #_SYNC_ID}</li>
* <li>{@link #DIRTY}</li>
* <li>{@link #OWNER_ACCOUNT}</li>
@@ -785,7 +787,8 @@ public final class CalendarContract {
public static final String EVENT_LOCATION = "eventLocation";
/**
- * A secondary color for the individual event. Column name.
+ * A secondary color for the individual event. Reserved for future use.
+ * Column name.
* <P>Type: INTEGER</P>
*/
public static final String EVENT_COLOR = "eventColor";
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index ca1d0d9e371d..fb119b343abd 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -2983,8 +2983,9 @@ public final class ContactsContract {
* long streamItemId = ContentUris.parseId(streamItemUri);
* </pre>
* </dd>
- * <dt>Via the {@link StreamItems#CONTENT_URI} URI:</dt>
+ * <dt>Via {@link StreamItems#CONTENT_URI}:</dt>
* <dd>
+ *<pre>
* ContentValues values = new ContentValues();
* values.put(StreamItems.RAW_CONTACT_ID, rawContactId);
* values.put(StreamItems.TEXT, "Breakfasted at Tiffanys");
@@ -2992,6 +2993,7 @@ public final class ContactsContract {
* values.put(StreamItems.COMMENTS, "3 people reshared this");
* Uri streamItemUri = getContentResolver().insert(StreamItems.CONTENT_URI, values);
* long streamItemId = ContentUris.parseId(streamItemUri);
+ *</pre>
* </dd>
* </dl>
* </dd>
@@ -3012,7 +3014,7 @@ public final class ContactsContract {
* StreamItems.StreamItemPhotos.CONTENT_DIRECTORY), values);
* </pre>
* </dd>
- * <dt>Via {@link ContactsContract.StreamItems#CONTENT_PHOTO_URI}</dt>
+ * <dt>Via {@link ContactsContract.StreamItems#CONTENT_PHOTO_URI}:</dt>
* <dd>
* <pre>
* values.clear();
@@ -3021,7 +3023,7 @@ public final class ContactsContract {
* values.put(StreamItemPhotos.PHOTO, photoData);
* getContentResolver().insert(StreamItems.CONTENT_PHOTO_URI, values);
* </pre>
- * Note that this latter form allows the insertion of a stream item and its
+ * <p>Note that this latter form allows the insertion of a stream item and its
* photos in a single transaction, by using {@link ContentProviderOperation} with
* back references to populate the stream item ID in the {@link ContentValues}.
* </dd>
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 5da31149968c..5f111eb8e73c 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -283,6 +283,17 @@ public final class MediaStore {
*/
public static final String IS_DRM = "is_drm";
+ /**
+ * The width of the image/video in pixels.
+ * @hide
+ */
+ public static final String WIDTH = "width";
+
+ /**
+ * The height of the image/video in pixels.
+ * @hide
+ */
+ public static final String HEIGHT = "height";
}
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e5882fc26445..bc05078906e6 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1882,6 +1882,11 @@ public final class Settings {
/**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
+ *
+ * NOTE: Settings are backed up and restored in the order they appear
+ * in this array. If you have one setting depending on another,
+ * make sure that they are ordered appropriately.
+ *
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
@@ -4031,8 +4036,6 @@ public final class Settings {
public static final String NETSTATS_UID_MAX_HISTORY = "netstats_uid_max_history";
/** {@hide} */
public static final String NETSTATS_TAG_MAX_HISTORY = "netstats_tag_max_history";
- /** {@hide} */
- public static final String NETSTATS_FORCE_COMPLETE_POLL = "netstats_force_complete_poll";
/** Preferred NTP server. {@hide} */
public static final String NTP_SERVER = "ntp_server";
@@ -4050,6 +4053,12 @@ public final class Settings {
public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout";
/**
+ * This are the settings to be backed up.
+ *
+ * NOTE: Settings are backed up and restored in the order they appear
+ * in this array. If you have one setting depending on another,
+ * make sure that they are ordered appropriately.
+ *
* @hide
*/
public static final String[] SETTINGS_TO_BACKUP = {
@@ -4058,11 +4067,11 @@ public final class Settings {
PARENTAL_CONTROL_ENABLED,
PARENTAL_CONTROL_REDIRECT_URL,
USB_MASS_STORAGE_ENABLED,
- ACCESSIBILITY_ENABLED,
ACCESSIBILITY_SCRIPT_INJECTION,
BACKUP_AUTO_RESTORE,
ENABLED_ACCESSIBILITY_SERVICES,
TOUCH_EXPLORATION_ENABLED,
+ ACCESSIBILITY_ENABLED,
TTS_USE_DEFAULTS,
TTS_DEFAULT_RATE,
TTS_DEFAULT_PITCH,
diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java
index ac46ee2d08d3..d26364ec7159 100644
--- a/core/java/android/server/BluetoothAdapterStateMachine.java
+++ b/core/java/android/server/BluetoothAdapterStateMachine.java
@@ -434,6 +434,10 @@ final class BluetoothAdapterStateMachine extends StateMachine {
if (mPublicState == BluetoothAdapter.STATE_TURNING_OFF) {
transitionTo(mHotOff);
finishSwitchingOff();
+ if (!mContext.getResources().getBoolean
+ (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
+ deferMessage(obtainMessage(TURN_COLD));
+ }
}
} else {
if (mPublicState != BluetoothAdapter.STATE_TURNING_ON) {
@@ -486,16 +490,6 @@ final class BluetoothAdapterStateMachine extends StateMachine {
}
return retValue;
}
-
- private void finishSwitchingOff() {
- mBluetoothService.finishDisable();
- if (mContext.getResources().getBoolean
- (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) {
- broadcastState(BluetoothAdapter.STATE_OFF);
- } else {
- deferMessage(obtainMessage(TURN_COLD));
- }
- }
}
private class BluetoothOn extends State {
@@ -656,12 +650,10 @@ final class BluetoothAdapterStateMachine extends StateMachine {
//$FALL-THROUGH$ all devices are already disconnected
case ALL_DEVICES_DISCONNECTED:
removeMessages(DEVICES_DISCONNECT_TIMEOUT);
- mBluetoothService.finishDisable();
- broadcastState(BluetoothAdapter.STATE_OFF);
+ finishSwitchingOff();
break;
case DEVICES_DISCONNECT_TIMEOUT:
- mBluetoothService.finishDisable();
- broadcastState(BluetoothAdapter.STATE_OFF);
+ finishSwitchingOff();
Log.e(TAG, "Devices fail to disconnect, reseting...");
transitionTo(mHotOff);
deferMessage(obtainMessage(TURN_COLD));
@@ -695,6 +687,12 @@ final class BluetoothAdapterStateMachine extends StateMachine {
}
}
+ private void finishSwitchingOff() {
+ mBluetoothService.finishDisable();
+ broadcastState(BluetoothAdapter.STATE_OFF);
+ mBluetoothService.cleanupAfterFinishDisable();
+ }
+
private void shutoffBluetooth() {
mBluetoothService.shutoffBluetooth();
mEventLoop.stop();
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index f0fb4e003bcd..63da9268fd01 100755
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -390,8 +390,7 @@ public class BluetoothService extends IBluetooth.Stub {
}
/**
- * The Bluetooth has been turned off, but hot. Do bonding, profile,
- * and internal cleanup
+ * The Bluetooth has been turned off, but hot. Do bonding, profile cleanup
*/
synchronized void finishDisable() {
// mark in progress bondings as cancelled
@@ -409,8 +408,17 @@ public class BluetoothService extends IBluetooth.Stub {
Intent intent = new Intent(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intent.putExtra(BluetoothAdapter.EXTRA_SCAN_MODE, BluetoothAdapter.SCAN_MODE_NONE);
mContext.sendBroadcast(intent, BLUETOOTH_PERM);
+ }
+ /**
+ * Local clean up after broadcasting STATE_OFF intent
+ */
+ synchronized void cleanupAfterFinishDisable() {
mAdapterProperties.clear();
+
+ for (Integer srHandle : mServiceRecordToPid.keySet()) {
+ removeServiceRecordNative(srHandle);
+ }
mServiceRecordToPid.clear();
mProfilesConnected = 0;
@@ -1526,6 +1534,8 @@ public class BluetoothService extends IBluetooth.Stub {
public void removeServiceRecord(int handle) {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM,
"Need BLUETOOTH permission");
+ // Since this is a binder call check if Bluetooth is off
+ if (getBluetoothStateInternal() == BluetoothAdapter.STATE_OFF) return;
Message message = mHandler.obtainMessage(MESSAGE_REMOVE_SERVICE_RECORD);
message.obj = new Pair<Integer, Integer>(handle, Binder.getCallingPid());
mHandler.sendMessage(message);
@@ -1533,8 +1543,7 @@ public class BluetoothService extends IBluetooth.Stub {
private synchronized void checkAndRemoveRecord(int handle, int pid) {
Pair<Integer, IBinder> pidPair = mServiceRecordToPid.get(handle);
- Integer owner = pidPair.first;
- if (owner != null && pid == owner.intValue()) {
+ if (pidPair != null && pid == pidPair.first) {
if (DBG) Log.d(TAG, "Removing service record " +
Integer.toHexString(handle) + " for pid " + pid);
mServiceRecordToPid.remove(handle);
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 2f9852d6a816..f82c9c4f06e8 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(getText());
+ reflowed = new StaticLayout(null);
} else {
reflowed.prepare();
}
@@ -488,7 +488,7 @@ extends Layout
private int mTopPadding, mBottomPadding;
- private static StaticLayout sStaticLayout = null;
+ private static StaticLayout sStaticLayout = new StaticLayout(null);
private static final Object[] sLock = new Object[0];
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 5fed775dc035..fdbec206ce9f 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -709,8 +709,6 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
T ret1 = null;
for (int i = 0; i < spanCount; i++) {
- if (!kind.isInstance(spans[i])) continue;
-
int spanStart = starts[i];
int spanEnd = ends[i];
@@ -735,6 +733,9 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
continue;
}
+ // Expensive test, should be performed after the previous tests
+ if (!kind.isInstance(spans[i])) continue;
+
if (count == 0) {
// Safe conversion thanks to the isInstance test above
ret1 = (T) spans[i];
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index e8b2045ef828..583cbe615fa4 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -763,7 +763,8 @@ public class StaticLayout extends Layout {
return;
}
- float ellipsisWidth = paint.measureText(HORIZONTAL_ELLIPSIS);
+ float ellipsisWidth = paint.measureText(
+ (where == TextUtils.TruncateAt.END_SMALL) ? ELLIPSIS_TWO_DOTS : ELLIPSIS_NORMAL);
int ellipsisStart = 0;
int ellipsisCount = 0;
int len = lineEnd - lineStart;
@@ -791,7 +792,8 @@ public class StaticLayout extends Layout {
Log.w(TAG, "Start Ellipsis only supported with one line");
}
}
- } else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE) {
+ } else if (where == TextUtils.TruncateAt.END || where == TextUtils.TruncateAt.MARQUEE ||
+ where == TextUtils.TruncateAt.END_SMALL) {
float sum = 0;
int i;
@@ -1001,7 +1003,9 @@ public class StaticLayout extends Layout {
private static final char CHAR_HYPHEN = '-';
private static final double EXTRA_ROUNDING = 0.5;
- private static final String HORIZONTAL_ELLIPSIS = "\u2026"; // this is "..."
+
+ private static final String ELLIPSIS_NORMAL = "\u2026"; // this is "..."
+ private static final String ELLIPSIS_TWO_DOTS = "\u2025"; // this is ".."
private static final int CHAR_FIRST_HIGH_SURROGATE = 0xD800;
private static final int CHAR_LAST_LOW_SURROGATE = 0xDFFF;
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index a52d48e630d1..68fea1907b87 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -30,6 +30,8 @@ import android.util.Log;
import com.android.internal.util.ArrayUtils;
+import java.lang.reflect.Array;
+
/**
* Represents a line of styled text, for measuring in visual order and
* for rendering.
@@ -679,6 +681,12 @@ class TextLine {
wp.getFontMetricsInt(fmi);
+ updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom,
+ previousLeading);
+ }
+
+ static void updateMetrics(FontMetricsInt fmi, int previousTop, int previousAscent,
+ int previousDescent, int previousBottom, int previousLeading) {
fmi.top = Math.min(fmi.top, previousTop);
fmi.ascent = Math.min(fmi.ascent, previousAscent);
fmi.descent = Math.max(fmi.descent, previousDescent);
@@ -809,7 +817,28 @@ class TextLine {
int textLimit = mStart + limit;
if (needWidth || (c != null && runIsRtl)) {
+ int previousTop = 0;
+ int previousAscent = 0;
+ int previousDescent = 0;
+ int previousBottom = 0;
+ int previousLeading = 0;
+
+ boolean needUpdateMetrics = (fmi != null);
+
+ if (needUpdateMetrics) {
+ previousTop = fmi.top;
+ previousAscent = fmi.ascent;
+ previousDescent = fmi.descent;
+ previousBottom = fmi.bottom;
+ previousLeading = fmi.leading;
+ }
+
ret = replacement.getSize(wp, mText, textStart, textLimit, fmi);
+
+ if (needUpdateMetrics) {
+ updateMetrics(fmi, previousTop, previousAscent, previousDescent, previousBottom,
+ previousLeading);
+ }
}
if (c != null) {
@@ -823,6 +852,73 @@ class TextLine {
return runIsRtl ? -ret : ret;
}
+ private static class SpanSet<E> {
+ final int numberOfSpans;
+ final E[] spans;
+ final int[] spanStarts;
+ final int[] spanEnds;
+ final int[] spanFlags;
+
+ @SuppressWarnings("unchecked")
+ SpanSet(Spanned spanned, int start, int limit, Class<? extends E> type) {
+ final E[] allSpans = spanned.getSpans(start, limit, type);
+ final int length = allSpans.length;
+ // These arrays may end up being too large because of empty spans
+ spans = (E[]) Array.newInstance(type, length);
+ spanStarts = new int[length];
+ spanEnds = new int[length];
+ spanFlags = new int[length];
+
+ int count = 0;
+ for (int i = 0; i < length; i++) {
+ final E span = allSpans[i];
+
+ final int spanStart = spanned.getSpanStart(span);
+ final int spanEnd = spanned.getSpanEnd(span);
+ if (spanStart == spanEnd) continue;
+
+ final int spanFlag = spanned.getSpanFlags(span);
+ final int priority = spanFlag & Spanned.SPAN_PRIORITY;
+ if (priority != 0 && count != 0) {
+ int j;
+
+ for (j = 0; j < count; j++) {
+ final int otherPriority = spanFlags[j] & Spanned.SPAN_PRIORITY;
+ if (priority > otherPriority) break;
+ }
+
+ System.arraycopy(spans, j, spans, j + 1, count - j);
+ System.arraycopy(spanStarts, j, spanStarts, j + 1, count - j);
+ System.arraycopy(spanEnds, j, spanEnds, j + 1, count - j);
+ System.arraycopy(spanFlags, j, spanFlags, j + 1, count - j);
+
+ spans[j] = span;
+ spanStarts[j] = spanStart;
+ spanEnds[j] = spanEnd;
+ spanFlags[j] = spanFlag;
+ } else {
+ spans[i] = span;
+ spanStarts[i] = spanStart;
+ spanEnds[i] = spanEnd;
+ spanFlags[i] = spanFlag;
+ }
+
+ count++;
+ }
+ numberOfSpans = count;
+ }
+
+ int getNextTransition(int start, int limit) {
+ for (int i = 0; i < numberOfSpans; i++) {
+ final int spanStart = spanStarts[i];
+ final int spanEnd = spanEnds[i];
+ if (spanStart > start && spanStart < limit) limit = spanStart;
+ if (spanEnd > start && spanEnd < limit) limit = spanEnd;
+ }
+ return limit;
+ }
+ }
+
/**
* Utility function for handling a unidirectional run. The run must not
* contain tabs or emoji but can contain styles.
@@ -856,66 +952,70 @@ class TextLine {
return 0f;
}
+ if (mSpanned == null) {
+ TextPaint wp = mWorkPaint;
+ wp.set(mPaint);
+ final int mlimit = measureLimit;
+ return handleText(wp, start, mlimit, start, limit, runIsRtl, c, x, top,
+ y, bottom, fmi, needWidth || mlimit < measureLimit);
+ }
+
+ final SpanSet<MetricAffectingSpan> metricAffectingSpans = new SpanSet<MetricAffectingSpan>(
+ mSpanned, mStart + start, mStart + limit, MetricAffectingSpan.class);
+ final SpanSet<CharacterStyle> characterStyleSpans = new SpanSet<CharacterStyle>(
+ mSpanned, mStart + start, mStart + limit, CharacterStyle.class);
+
// Shaping needs to take into account context up to metric boundaries,
// but rendering needs to take into account character style boundaries.
// So we iterate through metric runs to get metric bounds,
// then within each metric run iterate through character style runs
// for the run bounds.
- float ox = x;
+ final float originalX = x;
for (int i = start, inext; i < measureLimit; i = inext) {
TextPaint wp = mWorkPaint;
wp.set(mPaint);
- int mlimit;
- if (mSpanned == null) {
- inext = limit;
- mlimit = measureLimit;
- } else {
- inext = mSpanned.nextSpanTransition(mStart + i, mStart + limit,
- MetricAffectingSpan.class) - mStart;
-
- mlimit = inext < measureLimit ? inext : measureLimit;
- MetricAffectingSpan[] spans = mSpanned.getSpans(mStart + i,
- mStart + mlimit, MetricAffectingSpan.class);
- spans = TextUtils.removeEmptySpans(spans, mSpanned, MetricAffectingSpan.class);
-
- if (spans.length > 0) {
- ReplacementSpan replacement = null;
- for (int j = 0; j < spans.length; j++) {
- MetricAffectingSpan span = spans[j];
- if (span instanceof ReplacementSpan) {
- replacement = (ReplacementSpan)span;
- } else {
- // We might have a replacement that uses the draw
- // state, otherwise measure state would suffice.
- span.updateDrawState(wp);
- }
- }
-
- if (replacement != null) {
- x += handleReplacement(replacement, wp, i,
- mlimit, runIsRtl, c, x, top, y, bottom, fmi,
- needWidth || mlimit < measureLimit);
- continue;
- }
+ inext = metricAffectingSpans.getNextTransition(mStart + i, mStart + limit) - mStart;
+ int mlimit = Math.min(inext, measureLimit);
+
+ ReplacementSpan replacement = null;
+
+ for (int j = 0; j < metricAffectingSpans.numberOfSpans; j++) {
+ // Both intervals [spanStarts..spanEnds] and [mStart + i..mStart + mlimit] are NOT
+ // empty by construction. This special case in getSpans() explains the >= & <= tests
+ if ((metricAffectingSpans.spanStarts[j] >= mStart + mlimit) ||
+ (metricAffectingSpans.spanEnds[j] <= mStart + i)) continue;
+ MetricAffectingSpan span = metricAffectingSpans.spans[j];
+ if (span instanceof ReplacementSpan) {
+ replacement = (ReplacementSpan)span;
+ } else {
+ // We might have a replacement that uses the draw
+ // state, otherwise measure state would suffice.
+ span.updateDrawState(wp);
}
}
- if (mSpanned == null || c == null) {
+ if (replacement != null) {
+ x += handleReplacement(replacement, wp, i, mlimit, runIsRtl, c, x, top, y,
+ bottom, fmi, needWidth || mlimit < measureLimit);
+ continue;
+ }
+
+ if (c == null) {
x += handleText(wp, i, mlimit, i, inext, runIsRtl, c, x, top,
y, bottom, fmi, needWidth || mlimit < measureLimit);
} else {
for (int j = i, jnext; j < mlimit; j = jnext) {
- jnext = mSpanned.nextSpanTransition(mStart + j,
- mStart + mlimit, CharacterStyle.class) - mStart;
-
- CharacterStyle[] spans = mSpanned.getSpans(mStart + j,
- mStart + jnext, CharacterStyle.class);
- spans = TextUtils.removeEmptySpans(spans, mSpanned, CharacterStyle.class);
+ jnext = characterStyleSpans.getNextTransition(mStart + j, mStart + mlimit) -
+ mStart;
wp.set(mPaint);
- for (int k = 0; k < spans.length; k++) {
- CharacterStyle span = spans[k];
+ for (int k = 0; k < characterStyleSpans.numberOfSpans; k++) {
+ // Intentionally using >= and <= as explained above
+ if ((characterStyleSpans.spanStarts[k] >= mStart + jnext) ||
+ (characterStyleSpans.spanEnds[k] <= mStart + j)) continue;
+
+ CharacterStyle span = characterStyleSpans.spans[k];
span.updateDrawState(wp);
}
@@ -925,7 +1025,7 @@ class TextLine {
}
}
- return x - ox;
+ return x - originalX;
}
/**
@@ -970,8 +1070,7 @@ class TextLine {
}
pos += mStart;
- MetricAffectingSpan[] spans = mSpanned.getSpans(pos, pos + 1,
- MetricAffectingSpan.class);
+ MetricAffectingSpan[] spans = mSpanned.getSpans(pos, pos + 1, MetricAffectingSpan.class);
if (spans.length == 0) {
return mPaint.ascent();
}
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 894afbdc20ef..95a3cdc6ad8d 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -53,9 +53,8 @@ import java.util.Iterator;
import java.util.regex.Pattern;
public class TextUtils {
- private TextUtils() { /* cannot be instantiated */ }
- private static String[] EMPTY_STRING_ARRAY = new String[]{};
+ private TextUtils() { /* cannot be instantiated */ }
public static void getChars(CharSequence s, int start, int end,
char[] dest, int destoff) {
@@ -1000,6 +999,10 @@ public class TextUtils {
MIDDLE,
END,
MARQUEE,
+ /**
+ * @hide
+ */
+ END_SMALL
}
public interface EllipsizeCallback {
@@ -1010,8 +1013,6 @@ public class TextUtils {
public void ellipsized(int start, int end);
}
- private static String sEllipsis = null;
-
/**
* Returns the original text if it fits in the specified width
* given the properties of the specified Paint,
@@ -1042,7 +1043,8 @@ public class TextUtils {
boolean preserveLength,
EllipsizeCallback callback) {
return ellipsize(text, paint, avail, where, preserveLength, callback,
- TextDirectionHeuristics.FIRSTSTRONG_LTR);
+ TextDirectionHeuristics.FIRSTSTRONG_LTR,
+ (where == TruncateAt.END_SMALL) ? ELLIPSIS_TWO_DOTS : ELLIPSIS_NORMAL);
}
/**
@@ -1063,11 +1065,7 @@ public class TextUtils {
float avail, TruncateAt where,
boolean preserveLength,
EllipsizeCallback callback,
- TextDirectionHeuristic textDir) {
- if (sEllipsis == null) {
- Resources r = Resources.getSystem();
- sEllipsis = r.getString(R.string.ellipsis);
- }
+ TextDirectionHeuristic textDir, String ellipsis) {
int len = text.length();
@@ -1085,7 +1083,7 @@ public class TextUtils {
// XXX assumes ellipsis string does not require shaping and
// is unaffected by style
- float ellipsiswid = paint.measureText(sEllipsis);
+ float ellipsiswid = paint.measureText(ellipsis);
avail -= ellipsiswid;
int left = 0;
@@ -1094,7 +1092,7 @@ public class TextUtils {
// it all goes
} else if (where == TruncateAt.START) {
right = len - mt.breakText(0, len, false, avail);
- } else if (where == TruncateAt.END) {
+ } else if (where == TruncateAt.END || where == TruncateAt.END_SMALL) {
left = mt.breakText(0, len, true, avail);
} else {
right = len - mt.breakText(0, len, false, avail / 2);
@@ -1112,10 +1110,10 @@ public class TextUtils {
int remaining = len - (right - left);
if (preserveLength) {
if (remaining > 0) { // else eliminate the ellipsis too
- buf[left++] = '\u2026';
+ buf[left++] = ellipsis.charAt(0);
}
for (int i = left; i < right; i++) {
- buf[i] = '\uFEFF';
+ buf[i] = ZWNBS_CHAR;
}
String s = new String(buf, 0, len);
if (sp == null) {
@@ -1131,16 +1129,16 @@ public class TextUtils {
}
if (sp == null) {
- StringBuilder sb = new StringBuilder(remaining + sEllipsis.length());
+ StringBuilder sb = new StringBuilder(remaining + ellipsis.length());
sb.append(buf, 0, left);
- sb.append(sEllipsis);
+ sb.append(ellipsis);
sb.append(buf, right, len - right);
return sb.toString();
}
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(text, 0, left);
- ssb.append(sEllipsis);
+ ssb.append(ellipsis);
ssb.append(text, right, len);
return ssb;
} finally {
@@ -1664,4 +1662,13 @@ public class TextUtils {
private static Object sLock = new Object();
private static char[] sTemp = null;
+
+ private static String[] EMPTY_STRING_ARRAY = new String[]{};
+
+ private static final char ZWNBS_CHAR = '\uFEFF';
+
+ private static final String ELLIPSIS_NORMAL = Resources.getSystem().getString(
+ R.string.ellipsis);
+ private static final String ELLIPSIS_TWO_DOTS = Resources.getSystem().getString(
+ R.string.ellipsis_two_dots);
}
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index 5926db3713db..b4445ca1e0ed 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -22,8 +22,8 @@ import java.util.Locale;
import java.util.TimeZone;
/**
- * The Time class is a faster replacement for the java.util.Calendar and
- * java.util.GregorianCalendar classes. An instance of the Time class represents
+ * An alternative to the {@link java.util.Calendar} and
+ * {@link java.util.GregorianCalendar} classes. An instance of the Time class represents
* a moment in time, specified with second precision. It is modelled after
* struct tm, and in fact, uses struct tm to implement most of the
* functionality.
@@ -79,7 +79,7 @@ public class Time {
public int month;
/**
- * Year. TBD. Is this years since 1900 like in struct tm?
+ * Year. For example, 1970.
*/
public int year;
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 3f9b94563a0b..106a80190b36 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -35,44 +35,39 @@ public class Touch {
* Y position.
*/
public static void scrollTo(TextView widget, Layout layout, int x, int y) {
- int padding = widget.getTotalPaddingTop() +
- widget.getTotalPaddingBottom();
- int top = layout.getLineForVertical(y);
- int bottom = layout.getLineForVertical(y + widget.getHeight() -
- padding);
+ final int verticalPadding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
+ final int top = layout.getLineForVertical(y);
+ final int bottom = layout.getLineForVertical(y + widget.getHeight() - verticalPadding);
int left = Integer.MAX_VALUE;
int right = 0;
- Alignment a = null;
- boolean ltr = true;
+ Alignment a = layout.getParagraphAlignment(top);
+ boolean ltr = layout.getParagraphDirection(top) > 0;
for (int i = top; i <= bottom; i++) {
left = (int) Math.min(left, layout.getLineLeft(i));
right = (int) Math.max(right, layout.getLineRight(i));
-
- if (a == null) {
- a = layout.getParagraphAlignment(i);
- ltr = layout.getParagraphDirection(i) > 0;
- }
}
- padding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
- int width = widget.getWidth();
- int diff = 0;
+ final int hoizontalPadding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
+ final int availableWidth = widget.getWidth() - hoizontalPadding;
+ final int actualWidth = right - left;
- // align_opposite does NOT mean align_right, we need the paragraph
- // direction to resolve it to left or right
- if (right - left < width - padding) {
+ if (actualWidth < availableWidth) {
if (a == Alignment.ALIGN_CENTER) {
- diff = (width - padding - (right - left)) / 2;
- } else if (ltr == (a == Alignment.ALIGN_OPPOSITE)) {
- diff = width - padding - (right - left);
+ x = left - ((availableWidth - actualWidth) / 2);
+ } else if ((ltr && (a == Alignment.ALIGN_OPPOSITE)) || (a == Alignment.ALIGN_RIGHT)) {
+ // align_opposite does NOT mean align_right, we need the paragraph
+ // direction to resolve it to left or right
+ x = left - (availableWidth - actualWidth);
+ } else {
+ x = left;
}
+ } else {
+ x = Math.min(x, right - availableWidth);
+ x = Math.max(x, left);
}
- x = Math.min(x, right - (width - padding) - diff);
- x = Math.max(x, left - diff);
-
widget.scrollTo(x, y);
}
diff --git a/core/java/android/view/ActionProvider.java b/core/java/android/view/ActionProvider.java
index 5601dc526c2f..ed976ab1d6b6 100644
--- a/core/java/android/view/ActionProvider.java
+++ b/core/java/android/view/ActionProvider.java
@@ -58,6 +58,7 @@ import android.content.Context;
* @see MenuItem#getActionProvider()
*/
public abstract class ActionProvider {
+ private SubUiVisibilityListener mSubUiVisibilityListener;
/**
* Creates a new instance.
@@ -138,4 +139,31 @@ public abstract class ActionProvider {
*/
public void onPrepareSubMenu(SubMenu subMenu) {
}
+
+ /**
+ * Notify the system that the visibility of an action view's sub-UI such as
+ * an anchored popup has changed. This will affect how other system
+ * visibility notifications occur.
+ *
+ * @hide Pending future API approval
+ */
+ public void subUiVisibilityChanged(boolean isVisible) {
+ if (mSubUiVisibilityListener != null) {
+ mSubUiVisibilityListener.onSubUiVisibilityChanged(isVisible);
+ }
+ }
+
+ /**
+ * @hide Internal use only
+ */
+ public void setSubUiVisibilityListener(SubUiVisibilityListener listener) {
+ mSubUiVisibilityListener = listener;
+ }
+
+ /**
+ * @hide Internal use only
+ */
+ public interface SubUiVisibilityListener {
+ public void onSubUiVisibilityChanged(boolean isVisible);
+ }
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 0dc781f18c53..45f9da21c435 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -23,6 +23,7 @@ import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Point;
+import android.os.IRemoteCallback;
import android.view.IApplicationToken;
import android.view.IOnKeyguardExitResult;
import android.view.IRotationWatcher;
@@ -115,6 +116,7 @@ interface IWindowManager
boolean isKeyguardLocked();
boolean isKeyguardSecure();
boolean inKeyguardRestrictedInputMode();
+ void dismissKeyguard();
void closeSystemDialogs(String reason);
@@ -162,15 +164,13 @@ interface IWindowManager
// These can only be called with the SET_ORIENTATION permission.
/**
- * Change the current screen rotation, constants as per
- * {@link android.view.Surface}.
- * @param rotation the intended rotation.
+ * Update the current screen rotation based on the current state of
+ * the world.
* @param alwaysSendConfiguration Flag to force a new configuration to
* be evaluated. This can be used when there are other parameters in
* configuration that are changing.
- * @param animFlags Animation flags as per {@link android.view.Surface}.
*/
- void setRotation(int rotation, boolean alwaysSendConfiguration, int animFlags);
+ void updateRotation(boolean alwaysSendConfiguration);
/**
* Retrieve the current screen orientation, constants as per
@@ -220,7 +220,7 @@ interface IWindowManager
void setPointerSpeed(int speed);
/**
- * Block until all windows the window manager knows about have been drawn.
+ * Block until the given window has been drawn to the screen.
*/
- void waitForAllDrawn();
+ void waitForWindowDrawn(IBinder token, in IRemoteCallback callback);
}
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 3880bc45b4f3..64d3d3101cdb 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -207,9 +207,6 @@ public class Surface implements Parcelable {
/** Enable dithering when compositing this surface @hide */
public static final int SURFACE_DITHER = 0x04;
-
- /** Disable the orientation animation @hide */
- public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001;
// The mSurfaceControl will only be present for Surfaces used by the window
// server or system processes. When this class is parceled we defer to the
@@ -393,7 +390,7 @@ public class Surface implements Parcelable {
* set the orientation of the given display.
* @param display
* @param orientation
- * @param flags
+ * @param flags Currently unused, set to 0.
* @hide
*/
public static native void setOrientation(int display, int orientation, int flags);
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index c735d6bddba6..c974ba19d916 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -93,6 +93,11 @@ import android.util.Log;
* been invoked.) It is therefore highly recommended you use a listener to
* be notified when the SurfaceTexture becomes available.</p>
*
+ * <p>It is important to note that only one producer can use the TextureView.
+ * For instance, if you use a TextureView to display the camera preview, you
+ * cannot use {@link #lockCanvas()} to draw onto the TextureView at the same
+ * time.</p>
+ *
* @see SurfaceView
* @see SurfaceTexture
*/
@@ -523,6 +528,10 @@ public class TextureView extends View {
* rectangle is specified, in which case, non-dirty pixels will be
* preserved.</p>
*
+ * <p>This method can only be used if the underlying surface is not already
+ * owned by another producer. For instance, if the TextureView is being used
+ * to render the camera's preview you cannot invoke this method.</p>
+ *
* @return A Canvas used to draw into the surface.
*
* @see #lockCanvas(android.graphics.Rect)
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index ca06b9cf118a..2ebe756bebfa 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -81,7 +81,6 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Locale;
-import java.util.WeakHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -1497,12 +1496,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
/**
* Map used to store views' tags.
*/
- private static WeakHashMap<View, SparseArray<Object>> sTags;
-
- /**
- * Lock used to access sTags.
- */
- private static final Object sTagsLock = new Object();
+ private SparseArray<Object> mKeyedTags;
/**
* The next available accessiiblity id.
@@ -2915,6 +2909,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
initializeScrollbars(a);
}
break;
+ //noinspection deprecation
case R.styleable.View_fadingEdge:
if (context.getApplicationInfo().targetSdkVersion >= ICE_CREAM_SANDWICH) {
// Ignore the attribute starting with ICS
@@ -3900,6 +3895,12 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* Note: Called from the default {@link AccessibilityDelegate}.
*/
boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
+ // Do not populate text to scroll events. They describe position change
+ // and usually come from container with a lot of text which is not very
+ // informative for accessibility purposes. Also they are fired frequently.
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) {
+ return true;
+ }
onPopulateAccessibilityEvent(event);
return false;
}
@@ -12236,14 +12237,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* @see #getTag()
*/
public Object getTag(int key) {
- SparseArray<Object> tags = null;
- synchronized (sTagsLock) {
- if (sTags != null) {
- tags = sTags.get(this);
- }
- }
-
- if (tags != null) return tags.get(key);
+ if (mKeyedTags != null) return mKeyedTags.get(key);
return null;
}
@@ -12276,7 +12270,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
+ "resource id.");
}
- setTagInternal(this, key, tag);
+ setKeyedTag(key, tag);
}
/**
@@ -12291,27 +12285,15 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
+ "resource id.");
}
- setTagInternal(this, key, tag);
+ setKeyedTag(key, tag);
}
- private static void setTagInternal(View view, int key, Object tag) {
- SparseArray<Object> tags = null;
- synchronized (sTagsLock) {
- if (sTags == null) {
- sTags = new WeakHashMap<View, SparseArray<Object>>();
- } else {
- tags = sTags.get(view);
- }
+ private void setKeyedTag(int key, Object tag) {
+ if (mKeyedTags == null) {
+ mKeyedTags = new SparseArray<Object>();
}
- if (tags == null) {
- tags = new SparseArray<Object>(2);
- synchronized (sTagsLock) {
- sTags.put(view, tags);
- }
- }
-
- tags.put(key, tag);
+ mKeyedTags.put(key, tag);
}
/**
@@ -12969,15 +12951,13 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* 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) {
- mSystemUiVisibility = visibility;
- if (mParent != null && mAttachInfo != null && !mAttachInfo.mRecomputeGlobalAttributes) {
- mParent.recomputeViewAttributes(this);
+ if (visibility != mSystemUiVisibility) {
+ 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 c7b59b8b79f0..ddb982a1ce57 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -34,7 +34,6 @@ import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
-import android.view.View.AccessibilityDelegate;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.Animation;
@@ -290,6 +289,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
private static final int FLAG_SPLIT_MOTION_EVENTS = 0x200000;
/**
+ * When set, this ViewGroup will not dispatch onAttachedToWindow calls
+ * to children when adding new views. This is used to prevent multiple
+ * onAttached calls when a ViewGroup adds children in its own onAttached method.
+ */
+ private static final int FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW = 0x400000;
+
+ /**
* Indicates which types of drawing caches are to be kept in memory.
* This field should be made private, so it is hidden from the SDK.
* {@hide}
@@ -608,9 +614,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
* Called when a child has requested sending an {@link AccessibilityEvent} and
* gives an opportunity to its parent to augment the event.
* <p>
- * If an {@link AccessibilityDelegate} has been specified via calling
- * {@link #setAccessibilityDelegate(AccessibilityDelegate)} its
- * {@link AccessibilityDelegate#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent)}
+ * If an {@link android.view.View.AccessibilityDelegate} has been specified via calling
+ * {@link android.view.View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)} its
+ * {@link android.view.View.AccessibilityDelegate#onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent)}
* is responsible for handling this call.
* </p>
*
@@ -2154,8 +2160,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
*/
@Override
void dispatchAttachedToWindow(AttachInfo info, int visibility) {
+ mGroupFlags |= FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;
super.dispatchAttachedToWindow(info, visibility);
+ mGroupFlags &= ~FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW;
+
visibility |= mViewFlags & VISIBILITY_MASK;
+
final int count = mChildrenCount;
final View[] children = mChildren;
for (int i = 0; i < count; i++) {
@@ -2165,13 +2175,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
@Override
boolean dispatchPopulateAccessibilityEventInternal(AccessibilityEvent event) {
- // We first get a chance to populate the event.
- super.dispatchPopulateAccessibilityEventInternal(event);
+ boolean handled = super.dispatchPopulateAccessibilityEventInternal(event);
+ if (handled) {
+ return handled;
+ }
// Let our children have a shot in populating the event.
for (int i = 0, count = getChildCount(); i < count; i++) {
View child = getChildAt(i);
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) {
- boolean handled = getChildAt(i).dispatchPopulateAccessibilityEvent(event);
+ handled = getChildAt(i).dispatchPopulateAccessibilityEvent(event);
if (handled) {
return handled;
}
@@ -2548,7 +2560,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
final View[] children = mChildren;
for (int i = 0; i < count; i++) {
final View child = children[i];
- if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) {
+ if (((child.mViewFlags & VISIBILITY_MASK) == VISIBLE ||
+ child.getAnimation() != null) && child.getLayerType() == LAYER_TYPE_NONE) {
child.mRecreateDisplayList = (child.mPrivateFlags & INVALIDATED) == INVALIDATED;
child.mPrivateFlags &= ~INVALIDATED;
child.getDisplayList();
@@ -2811,6 +2824,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (hasDisplayList) {
displayList = child.getDisplayList();
+ if (!displayList.isValid()) {
+ // Uncommon, but possible. If a view is removed from the hierarchy during the call
+ // to getDisplayList(), the display list will be marked invalid and we should not
+ // try to use it again.
+ displayList = null;
+ hasDisplayList = false;
+ }
}
if (hasNoCache) {
@@ -3321,7 +3341,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
AttachInfo ai = mAttachInfo;
- if (ai != null) {
+ if (ai != null && (mGroupFlags & FLAG_PREVENT_DISPATCH_ATTACHED_TO_WINDOW) == 0) {
boolean lastKeepOn = ai.mKeepScreenOn;
ai.mKeepScreenOn = false;
child.dispatchAttachedToWindow(mAttachInfo, (mViewFlags&VISIBILITY_MASK));
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 46119843951f..9cb4e5e7b0a8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1054,7 +1054,6 @@ public final class ViewRootImpl extends Handler implements ViewParent,
|| attachInfo.mSystemUiVisibility != oldVis
|| attachInfo.mHasSystemUiListeners) {
params = lp;
- windowAttributesChanges |= WindowManager.LayoutParams.BUFFER_CHANGED;
}
}
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index fb87e23a4d9e..122865e1e4cf 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -34,10 +34,12 @@ import android.media.ToneGenerator;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
+import android.os.RemoteException;
import android.os.Vibrator;
import android.provider.Settings;
import android.provider.Settings.System;
import android.util.Log;
+import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
@@ -175,20 +177,8 @@ 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;
+ return false;
}
});
mPanel = (ViewGroup) mView.findViewById(R.id.visible_panel);
@@ -196,7 +186,15 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
mMoreButton = (ImageView) mView.findViewById(R.id.expand_button);
mDivider = (ImageView) mView.findViewById(R.id.expand_button_divider);
- mDialog = new Dialog(context, R.style.Theme_Panel_Volume);
+ mDialog = new Dialog(context, R.style.Theme_Panel_Volume) {
+ public boolean onTouchEvent(MotionEvent event) {
+ if (isShowing() && event.getAction() == MotionEvent.ACTION_OUTSIDE) {
+ forceTimeout();
+ return true;
+ }
+ return false;
+ }
+ };
mDialog.setTitle("Volume control"); // No need to localize
mDialog.setContentView(mView);
mDialog.setOnDismissListener(new OnDismissListener() {
@@ -208,11 +206,17 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie
// Change some window properties
Window window = mDialog.getWindow();
window.setGravity(Gravity.TOP);
- WindowManager.LayoutParams lp = window.getAttributes();
+ LayoutParams lp = window.getAttributes();
lp.token = null;
- lp.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
+ // Offset from the top
+ lp.y = mContext.getResources().getDimensionPixelOffset(
+ com.android.internal.R.dimen.volume_panel_top);
+ lp.type = LayoutParams.TYPE_VOLUME_OVERLAY;
+ lp.width = LayoutParams.WRAP_CONTENT;
+ lp.height = LayoutParams.WRAP_CONTENT;
window.setAttributes(lp);
- window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCH_MODAL
+ | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()];
mVibrator = new Vibrator();
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 980e454294b6..4f67675c1aed 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -375,12 +375,6 @@ public interface WindowManagerPolicy {
/** Screen turned off because of proximity sensor */
public final int OFF_BECAUSE_OF_PROX_SENSOR = 4;
- /**
- * Magic constant to {@link IWindowManager#setRotation} to not actually
- * modify the rotation.
- */
- public final int USE_LAST_ROTATION = -1000;
-
/** When not otherwise specified by the activity's screenOrientation, rotation should be
* determined by the system (that is, using sensors). */
public final int USER_ROTATION_FREE = 0;
@@ -772,15 +766,26 @@ public interface WindowManagerPolicy {
*/
public void screenTurnedOff(int why);
+ public interface ScreenOnListener {
+ void onScreenOn();
+ };
+
/**
- * Called after the screen turns on.
+ * Called when the power manager would like to turn the screen on.
+ * Must call back on the listener to tell it when the higher-level system
+ * is ready for the screen to go on (i.e. the lock screen is shown).
*/
- public void screenTurnedOn();
+ public void screenTurningOn(ScreenOnListener screenOnListener);
/**
- * Return whether the screen is currently on.
+ * Return whether the screen is about to turn on or is currently on.
*/
- public boolean isScreenOn();
+ public boolean isScreenOnEarly();
+
+ /**
+ * Return whether the screen is fully turned on.
+ */
+ public boolean isScreenOnFully();
/**
* Tell the policy that the lid switch has changed state.
@@ -845,22 +850,42 @@ public interface WindowManagerPolicy {
public boolean inKeyguardRestrictedKeyInputMode();
/**
- * Given an orientation constant
- * ({@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE
- * ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE} or
- * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_PORTRAIT
- * ActivityInfo.SCREEN_ORIENTATION_PORTRAIT}), return a surface
- * rotation.
+ * Ask the policy to dismiss the keyguard, if it is currently shown.
*/
- public int rotationForOrientationLw(int orientation, int lastRotation,
- boolean displayEnabled);
-
+ public void dismissKeyguardLw();
+
/**
- * Return the currently locked screen rotation, if any. Return
- * Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180, or
- * Surface.ROTATION_270 if locked; return -1 if not locked.
+ * Given an orientation constant, returns the appropriate surface rotation,
+ * taking into account sensors, docking mode, rotation lock, and other factors.
+ *
+ * @param orientation An orientation constant, such as
+ * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}.
+ * @param lastRotation The most recently used rotation.
+ * @return The surface rotation to use.
+ */
+ public int rotationForOrientationLw(int orientation, int lastRotation);
+
+ /**
+ * Given an orientation constant and a rotation, returns true if the rotation
+ * has compatible metrics to the requested orientation. For example, if
+ * the application requested landscape and got seascape, then the rotation
+ * has compatible metrics; if the application requested portrait and got landscape,
+ * then the rotation has incompatible metrics; if the application did not specify
+ * a preference, then anything goes.
+ *
+ * @param orientation An orientation constant, such as
+ * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}.
+ * @param rotation The rotation to check.
+ * @return True if the rotation is compatible with the requested orientation.
+ */
+ public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation);
+
+ /**
+ * Called by the window manager when the rotation changes.
+ *
+ * @param rotation The new rotation.
*/
- public int getLockedRotationLw();
+ public void setRotationLw(int rotation);
/**
* Called when the system is mostly done booting to determine whether
diff --git a/core/java/android/view/WindowOrientationListener.java b/core/java/android/view/WindowOrientationListener.java
index 76b47ca5a5e5..c3c74a7c59c5 100755
--- a/core/java/android/view/WindowOrientationListener.java
+++ b/core/java/android/view/WindowOrientationListener.java
@@ -26,7 +26,7 @@ import android.util.Slog;
/**
* A special helper class used by the WindowManager
- * for receiving notifications from the SensorManager when
+ * for receiving notifications from the SensorManager when
* the orientation of the device has changed.
*
* NOTE: If changing anything here, please run the API demo
@@ -54,6 +54,7 @@ public abstract class WindowOrientationListener {
private Sensor mSensor;
private SensorEventListenerImpl mSensorEventListener;
boolean mLogEnabled;
+ int mCurrentRotation = -1;
/**
* Creates a new WindowOrientationListener.
@@ -117,15 +118,27 @@ public abstract class WindowOrientationListener {
}
/**
- * Gets the current orientation.
- * @param lastRotation
- * @return
+ * Sets the current rotation.
+ *
+ * @param rotation The current rotation.
+ */
+ public void setCurrentRotation(int rotation) {
+ mCurrentRotation = rotation;
+ }
+
+ /**
+ * Gets the proposed rotation.
+ *
+ * This method only returns a rotation if the orientation listener is certain
+ * of its proposal. If the rotation is indeterminate, returns -1.
+ *
+ * @return The proposed rotation, or -1 if unknown.
*/
- public int getCurrentRotation(int lastRotation) {
+ public int getProposedRotation() {
if (mEnabled) {
- return mSensorEventListener.getCurrentRotation(lastRotation);
+ return mSensorEventListener.getProposedRotation();
}
- return lastRotation;
+ return -1;
}
/**
@@ -138,10 +151,14 @@ public abstract class WindowOrientationListener {
/**
* Called when the rotation view of the device has changed.
*
+ * This method is called whenever the orientation becomes certain of an orientation.
+ * It is called each time the orientation determination transitions from being
+ * uncertain to being certain again, even if it is the same orientation as before.
+ *
* @param rotation The new orientation of the device, one of the Surface.ROTATION_* constants.
* @see Surface
*/
- public abstract void onOrientationChanged(int rotation);
+ public abstract void onProposedRotationChanged(int rotation);
/**
* Enables or disables the window orientation listener logging for use with
@@ -183,23 +200,8 @@ public abstract class WindowOrientationListener {
* to the corresponding orientation. These thresholds have some hysteresis built-in
* to avoid oscillations between adjacent orientations.
*
- * - Use the magnitude to judge the confidence of the orientation.
- * Under ideal conditions, the magnitude should equal to that of gravity. When it
- * differs significantly, we know the device is under external acceleration and
- * we can't trust the data.
- *
- * - Use the tilt angle to judge the confidence of the orientation.
- * When the tilt angle is high in absolute value then the device is nearly flat
- * so small physical movements produce large changes in orientation angle.
- * This can be the case when the device is being picked up from a table.
- *
- * - Use the orientation angle to judge the confidence of the orientation.
- * The close the orientation angle is to the canonical orientation angle, the better.
- *
- * - Based on the aggregate confidence, we determine how long we want to wait for
- * the new orientation to settle. This is accomplished by integrating the confidence
- * for each orientation over time. When a threshold integration sum is reached
- * then we actually change orientations.
+ * - Wait for the device to settle for a little bit. Once that happens, issue the
+ * new orientation proposal.
*
* Details are explained inline.
*/
@@ -212,22 +214,8 @@ public abstract class WindowOrientationListener {
private static final int ACCELEROMETER_DATA_Y = 1;
private static final int ACCELEROMETER_DATA_Z = 2;
- // Rotation constants.
- // These are the same as Surface rotation constants with the addition of a 5th
- // unknown state when we are not confident about the proporsed orientation.
- // One important property of these constants is that they are equal to the
- // orientation angle itself divided by 90. We use this fact to map
- // back and forth between orientation angles and rotation values.
- private static final int ROTATION_UNKNOWN = -1;
- //private static final int ROTATION_0 = Surface.ROTATION_0; // 0
- //private static final int ROTATION_90 = Surface.ROTATION_90; // 1
- //private static final int ROTATION_180 = Surface.ROTATION_180; // 2
- //private static final int ROTATION_270 = Surface.ROTATION_270; // 3
-
private final WindowOrientationListener mOrientationListener;
- private int mRotation = ROTATION_UNKNOWN;
-
/* State for first order low-pass filtering of accelerometer data.
* See http://en.wikipedia.org/wiki/Low-pass_filter#Discrete-time_realization for
* signal processing background.
@@ -236,6 +224,24 @@ public abstract class WindowOrientationListener {
private long mLastTimestamp = Long.MAX_VALUE; // in nanoseconds
private float mLastFilteredX, mLastFilteredY, mLastFilteredZ;
+ // The current proposal. We wait for the proposal to be stable for a
+ // certain amount of time before accepting it.
+ //
+ // The basic idea is to ignore intermediate poses of the device while the
+ // user is picking up, putting down or turning the device.
+ private int mProposalRotation;
+ private long mProposalAgeMS;
+
+ // A historical trace of tilt and orientation angles. Used to determine whether
+ // the device posture has settled down.
+ private static final int HISTORY_SIZE = 20;
+ private int mHistoryIndex; // index of most recent sample
+ private int mHistoryLength; // length of historical trace
+ private final long[] mHistoryTimestampMS = new long[HISTORY_SIZE];
+ private final float[] mHistoryMagnitudes = new float[HISTORY_SIZE];
+ private final int[] mHistoryTiltAngles = new int[HISTORY_SIZE];
+ private final int[] mHistoryOrientationAngles = new int[HISTORY_SIZE];
+
// The maximum sample inter-arrival time in milliseconds.
// If the acceleration samples are further apart than this amount in time, we reset the
// state of the low-pass filter and orientation properties. This helps to handle
@@ -243,24 +249,26 @@ public abstract class WindowOrientationListener {
// a significant gap in samples.
private static final float MAX_FILTER_DELTA_TIME_MS = 1000;
- // The acceleration filter cutoff frequency.
- // This is the frequency at which signals are attenuated by 3dB (half the passband power).
+ // The acceleration filter time constant.
+ //
+ // This time constant is used to tune the acceleration filter such that
+ // impulses and vibrational noise (think car dock) is suppressed before we
+ // try to calculate the tilt and orientation angles.
+ //
+ // The filter time constant is related to the filter cutoff frequency, which is the
+ // frequency at which signals are attenuated by 3dB (half the passband power).
// Each successive octave beyond this frequency is attenuated by an additional 6dB.
//
- // We choose the cutoff frequency such that impulses and vibrational noise
- // (think car dock) is suppressed. However, this filtering does not eliminate
- // all possible sources of orientation ambiguity so we also rely on a dynamic
- // settle time for establishing a new orientation. Filtering adds latency
- // inversely proportional to the cutoff frequency so we don't want to make
- // it too small or we can lose hundreds of milliseconds of responsiveness.
- private static final float FILTER_CUTOFF_FREQUENCY_HZ = 1f;
- private static final float FILTER_TIME_CONSTANT_MS = (float)(500.0f
- / (Math.PI * FILTER_CUTOFF_FREQUENCY_HZ)); // t = 1 / (2pi * Fc) * 1000ms
-
- // The filter gain.
- // We choose a value slightly less than unity to avoid numerical instabilities due
- // to floating-point error accumulation.
- private static final float FILTER_GAIN = 0.999f;
+ // Given a time constant t in seconds, the filter cutoff frequency Fc in Hertz
+ // is given by Fc = 1 / (2pi * t).
+ //
+ // The higher the time constant, the lower the cutoff frequency, so more noise
+ // will be suppressed.
+ //
+ // Filtering adds latency proportional the time constant (inversely proportional
+ // to the cutoff frequency) so we don't want to make the time constant too
+ // large or we can lose responsiveness.
+ private static final float FILTER_TIME_CONSTANT_MS = 100.0f;
/* State for orientation detection. */
@@ -298,10 +306,10 @@ public abstract class WindowOrientationListener {
// The ideal tilt angle is 0 (when the device is vertical) so the limits establish
// how close to vertical the device must be in order to change orientation.
private static final int[][] TILT_TOLERANCE = new int[][] {
- /* ROTATION_0 */ { -20, 75 },
- /* ROTATION_90 */ { -20, 70 },
- /* ROTATION_180 */ { -20, 65 },
- /* ROTATION_270 */ { -20, 70 }
+ /* ROTATION_0 */ { -20, 70 },
+ /* ROTATION_90 */ { -20, 60 },
+ /* ROTATION_180 */ { -20, 50 },
+ /* ROTATION_270 */ { -20, 60 }
};
// The gap angle in degrees between adjacent orientation angles for hysteresis.
@@ -309,41 +317,31 @@ public abstract class WindowOrientationListener {
// adjacent orientation. No orientation proposal is made when the orientation
// angle is within the gap between the current orientation and the adjacent
// orientation.
- private static final int ADJACENT_ORIENTATION_ANGLE_GAP = 30;
-
- // The confidence scale factors for angle, tilt and magnitude.
- // When the distance between the actual value and the ideal value is the
- // specified delta, orientation transitions will take twice as long as they would
- // in the ideal case. Increasing or decreasing the delta has an exponential effect
- // on each factor's influence over the transition time.
+ private static final int ADJACENT_ORIENTATION_ANGLE_GAP = 45;
- // Transition takes 2x longer when angle is 30 degrees from ideal orientation angle.
- private static final float ORIENTATION_ANGLE_CONFIDENCE_SCALE =
- confidenceScaleFromDelta(30);
+ // The number of milliseconds for which the device posture must be stable
+ // before we perform an orientation change. If the device appears to be rotating
+ // (being picked up, put down) then we keep waiting until it settles.
+ private static final int SETTLE_TIME_MS = 200;
- // Transition takes 2x longer when tilt is 60 degrees from vertical.
- private static final float TILT_ANGLE_CONFIDENCE_SCALE = confidenceScaleFromDelta(60);
+ // The maximum change in magnitude that can occur during the settle time.
+ // Tuning this constant particularly helps to filter out situations where the
+ // device is being picked up or put down by the user.
+ private static final float SETTLE_MAGNITUDE_MAX_DELTA =
+ SensorManager.STANDARD_GRAVITY * 0.2f;
- // Transition takes 2x longer when acceleration is 0.5 Gs.
- private static final float MAGNITUDE_CONFIDENCE_SCALE = confidenceScaleFromDelta(
- SensorManager.STANDARD_GRAVITY * 0.5f);
+ // The maximum change in tilt angle that can occur during the settle time.
+ private static final int SETTLE_TILT_ANGLE_MAX_DELTA = 5;
- // The number of milliseconds for which a new orientation must be stable before
- // we perform an orientation change under ideal conditions. It will take
- // proportionally longer than this to effect an orientation change when
- // the proposed orientation confidence is low.
- private static final float ORIENTATION_SETTLE_TIME_MS = 250;
-
- // The confidence that we have abount effecting each orientation change.
- // When one of these values exceeds 1.0, we have determined our new orientation!
- private float mConfidence[] = new float[4];
+ // The maximum change in orientation angle that can occur during the settle time.
+ private static final int SETTLE_ORIENTATION_ANGLE_MAX_DELTA = 5;
public SensorEventListenerImpl(WindowOrientationListener orientationListener) {
mOrientationListener = orientationListener;
}
- public int getCurrentRotation(int lastRotation) {
- return mRotation != ROTATION_UNKNOWN ? mRotation : lastRotation;
+ public int getProposedRotation() {
+ return mProposalAgeMS >= SETTLE_TIME_MS ? mProposalRotation : -1;
}
@Override
@@ -369,20 +367,18 @@ public abstract class WindowOrientationListener {
// Reset the orientation listener state if the samples are too far apart in time
// or when we see values of (0, 0, 0) which indicates that we polled the
// accelerometer too soon after turning it on and we don't have any data yet.
- final float timeDeltaMS = (event.timestamp - mLastTimestamp) * 0.000001f;
+ final long now = event.timestamp;
+ final float timeDeltaMS = (now - mLastTimestamp) * 0.000001f;
boolean skipSample;
if (timeDeltaMS <= 0 || timeDeltaMS > MAX_FILTER_DELTA_TIME_MS
|| (x == 0 && y == 0 && z == 0)) {
if (log) {
Slog.v(TAG, "Resetting orientation listener.");
}
- for (int i = 0; i < 4; i++) {
- mConfidence[i] = 0;
- }
+ clearProposal();
skipSample = true;
} else {
- final float alpha = timeDeltaMS
- / (FILTER_TIME_CONSTANT_MS + timeDeltaMS) * FILTER_GAIN;
+ final float alpha = timeDeltaMS / (FILTER_TIME_CONSTANT_MS + timeDeltaMS);
x = alpha * (x - mLastFilteredX) + mLastFilteredX;
y = alpha * (y - mLastFilteredY) + mLastFilteredY;
z = alpha * (z - mLastFilteredZ) + mLastFilteredZ;
@@ -392,17 +388,13 @@ public abstract class WindowOrientationListener {
}
skipSample = false;
}
- mLastTimestamp = event.timestamp;
+ mLastTimestamp = now;
mLastFilteredX = x;
mLastFilteredY = y;
mLastFilteredZ = z;
- boolean orientationChanged = false;
+ final int oldProposedRotation = getProposedRotation();
if (!skipSample) {
- // Determine a proposed orientation based on the currently available data.
- int proposedOrientation = ROTATION_UNKNOWN;
- float combinedConfidence = 1.0f;
-
// Calculate the magnitude of the acceleration vector.
final float magnitude = (float) Math.sqrt(x * x + y * y + z * z);
if (magnitude < MIN_ACCELERATION_MAGNITUDE
@@ -411,6 +403,7 @@ public abstract class WindowOrientationListener {
Slog.v(TAG, "Ignoring sensor data, magnitude out of range: "
+ "magnitude=" + magnitude);
}
+ clearProposal();
} else {
// Calculate the tilt angle.
// This is the angle between the up vector and the x-y plane (the plane of
@@ -418,123 +411,82 @@ public abstract class WindowOrientationListener {
// -90 degrees: screen horizontal and facing the ground (overhead)
// 0 degrees: screen vertical
// 90 degrees: screen horizontal and facing the sky (on table)
- final int tiltAngle = (int) Math.round(
- Math.asin(z / magnitude) * RADIANS_TO_DEGREES);
-
- // If the tilt angle is too close to horizontal then we cannot determine
- // the orientation angle of the screen.
- if (Math.abs(tiltAngle) > MAX_TILT) {
- if (log) {
- Slog.v(TAG, "Ignoring sensor data, tilt angle too high: "
- + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle);
- }
- } else {
- // Calculate the orientation angle.
- // This is the angle between the x-y projection of the up vector onto
- // the +y-axis, increasing clockwise in a range of [0, 360] degrees.
- int orientationAngle = (int) Math.round(
- -Math.atan2(-x, y) * RADIANS_TO_DEGREES);
- if (orientationAngle < 0) {
- // atan2 returns [-180, 180]; normalize to [0, 360]
- orientationAngle += 360;
- }
-
- // Find the nearest orientation.
- // An orientation of 0 can have a nearest angle of 0 or 360 depending
- // on which is closer to the measured orientation angle. We leave the
- // nearest angle at 360 in that case since it makes the delta calculation
- // for orientation angle confidence easier below.
- int nearestOrientation = (orientationAngle + 45) / 90;
- int nearestOrientationAngle = nearestOrientation * 90;
- if (nearestOrientation == 4) {
- nearestOrientation = 0;
- }
-
- // Determine the proposed orientation.
- // The confidence of the proposal is 1.0 when it is ideal and it
- // decays exponentially as the proposal moves further from the ideal
- // angle, tilt and magnitude of the proposed orientation.
- if (isTiltAngleAcceptable(nearestOrientation, tiltAngle)
- && isOrientationAngleAcceptable(nearestOrientation,
- orientationAngle)) {
- proposedOrientation = nearestOrientation;
-
- final float idealOrientationAngle = nearestOrientationAngle;
- final float orientationConfidence = confidence(orientationAngle,
- idealOrientationAngle, ORIENTATION_ANGLE_CONFIDENCE_SCALE);
-
- final float idealTiltAngle = 0;
- final float tiltConfidence = confidence(tiltAngle,
- idealTiltAngle, TILT_ANGLE_CONFIDENCE_SCALE);
-
- final float idealMagnitude = SensorManager.STANDARD_GRAVITY;
- final float magnitudeConfidence = confidence(magnitude,
- idealMagnitude, MAGNITUDE_CONFIDENCE_SCALE);
-
- combinedConfidence = orientationConfidence
- * tiltConfidence * magnitudeConfidence;
-
- if (log) {
- Slog.v(TAG, "Proposal: "
- + "magnitude=" + magnitude
- + ", tiltAngle=" + tiltAngle
- + ", orientationAngle=" + orientationAngle
- + ", proposedOrientation=" + proposedOrientation
- + ", combinedConfidence=" + combinedConfidence
- + ", orientationConfidence=" + orientationConfidence
- + ", tiltConfidence=" + tiltConfidence
- + ", magnitudeConfidence=" + magnitudeConfidence);
- }
- } else {
- if (log) {
- Slog.v(TAG, "Ignoring sensor data, no proposal: "
- + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle
- + ", orientationAngle=" + orientationAngle);
- }
- }
- }
- }
-
- // Sum up the orientation confidence weights.
- // Detect an orientation change when the sum reaches 1.0.
- final float confidenceAmount = combinedConfidence * timeDeltaMS
- / ORIENTATION_SETTLE_TIME_MS;
- for (int i = 0; i < 4; i++) {
- if (i == proposedOrientation) {
- mConfidence[i] += confidenceAmount;
- if (mConfidence[i] >= 1.0f) {
- mConfidence[i] = 1.0f;
-
- if (i != mRotation) {
- if (log) {
- Slog.v(TAG, "Orientation changed! rotation=" + i);
- }
- mRotation = i;
- orientationChanged = true;
- }
+ final int tiltAngle = (int) Math.round(
+ Math.asin(z / magnitude) * RADIANS_TO_DEGREES);
+
+ // If the tilt angle is too close to horizontal then we cannot determine
+ // the orientation angle of the screen.
+ if (Math.abs(tiltAngle) > MAX_TILT) {
+ if (log) {
+ Slog.v(TAG, "Ignoring sensor data, tilt angle too high: "
+ + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle);
}
+ clearProposal();
} else {
- mConfidence[i] -= confidenceAmount;
- if (mConfidence[i] < 0.0f) {
- mConfidence[i] = 0.0f;
+ // Calculate the orientation angle.
+ // This is the angle between the x-y projection of the up vector onto
+ // the +y-axis, increasing clockwise in a range of [0, 360] degrees.
+ int orientationAngle = (int) Math.round(
+ -Math.atan2(-x, y) * RADIANS_TO_DEGREES);
+ if (orientationAngle < 0) {
+ // atan2 returns [-180, 180]; normalize to [0, 360]
+ orientationAngle += 360;
+ }
+
+ // Find the nearest rotation.
+ int nearestRotation = (orientationAngle + 45) / 90;
+ if (nearestRotation == 4) {
+ nearestRotation = 0;
+ }
+
+ // Determine the proposed orientation.
+ // The confidence of the proposal is 1.0 when it is ideal and it
+ // decays exponentially as the proposal moves further from the ideal
+ // angle, tilt and magnitude of the proposed orientation.
+ if (!isTiltAngleAcceptable(nearestRotation, tiltAngle)
+ || !isOrientationAngleAcceptable(nearestRotation,
+ orientationAngle)) {
+ if (log) {
+ Slog.v(TAG, "Ignoring sensor data, no proposal: "
+ + "magnitude=" + magnitude + ", tiltAngle=" + tiltAngle
+ + ", orientationAngle=" + orientationAngle);
+ }
+ clearProposal();
+ } else {
+ if (log) {
+ Slog.v(TAG, "Proposal: "
+ + "magnitude=" + magnitude
+ + ", tiltAngle=" + tiltAngle
+ + ", orientationAngle=" + orientationAngle
+ + ", proposalRotation=" + mProposalRotation);
+ }
+ updateProposal(nearestRotation, now / 1000000L,
+ magnitude, tiltAngle, orientationAngle);
}
}
}
}
// Write final statistics about where we are in the orientation detection process.
+ final int proposedRotation = getProposedRotation();
if (log) {
- Slog.v(TAG, "Result: rotation=" + mRotation
- + ", confidence=["
- + mConfidence[0] + ", "
- + mConfidence[1] + ", "
- + mConfidence[2] + ", "
- + mConfidence[3] + "], timeDeltaMS=" + timeDeltaMS);
+ final float proposalConfidence = Math.min(
+ mProposalAgeMS * 1.0f / SETTLE_TIME_MS, 1.0f);
+ Slog.v(TAG, "Result: currentRotation=" + mOrientationListener.mCurrentRotation
+ + ", proposedRotation=" + proposedRotation
+ + ", timeDeltaMS=" + timeDeltaMS
+ + ", proposalRotation=" + mProposalRotation
+ + ", proposalAgeMS=" + mProposalAgeMS
+ + ", proposalConfidence=" + proposalConfidence);
}
// Tell the listener.
- if (orientationChanged) {
- mOrientationListener.onOrientationChanged(mRotation);
+ if (proposedRotation != oldProposedRotation && proposedRotation >= 0) {
+ if (log) {
+ Slog.v(TAG, "Proposed rotation changed! proposedRotation=" + proposedRotation
+ + ", oldProposedRotation=" + oldProposedRotation);
+ }
+ mOrientationListener.onProposedRotationChanged(proposedRotation);
}
}
@@ -542,33 +494,34 @@ public abstract class WindowOrientationListener {
* Returns true if the tilt angle is acceptable for a proposed
* orientation transition.
*/
- private boolean isTiltAngleAcceptable(int proposedOrientation,
+ private boolean isTiltAngleAcceptable(int proposedRotation,
int tiltAngle) {
- return tiltAngle >= TILT_TOLERANCE[proposedOrientation][0]
- && tiltAngle <= TILT_TOLERANCE[proposedOrientation][1];
+ return tiltAngle >= TILT_TOLERANCE[proposedRotation][0]
+ && tiltAngle <= TILT_TOLERANCE[proposedRotation][1];
}
/**
* Returns true if the orientation angle is acceptable for a proposed
* orientation transition.
+ *
* This function takes into account the gap between adjacent orientations
* for hysteresis.
*/
- private boolean isOrientationAngleAcceptable(int proposedOrientation,
- int orientationAngle) {
- final int currentOrientation = mRotation;
-
+ private boolean isOrientationAngleAcceptable(int proposedRotation, int orientationAngle) {
// If there is no current rotation, then there is no gap.
- if (currentOrientation != ROTATION_UNKNOWN) {
- // If the proposed orientation is the same or is counter-clockwise adjacent,
+ // The gap is used only to introduce hysteresis among advertised orientation
+ // changes to avoid flapping.
+ final int currentRotation = mOrientationListener.mCurrentRotation;
+ if (currentRotation >= 0) {
+ // If the proposed rotation is the same or is counter-clockwise adjacent,
// then we set a lower bound on the orientation angle.
- // For example, if currentOrientation is ROTATION_0 and proposed is ROTATION_90,
+ // For example, if currentRotation is ROTATION_0 and proposed is ROTATION_90,
// then we want to check orientationAngle > 45 + GAP / 2.
- if (proposedOrientation == currentOrientation
- || proposedOrientation == (currentOrientation + 1) % 4) {
- int lowerBound = proposedOrientation * 90 - 45
+ if (proposedRotation == currentRotation
+ || proposedRotation == (currentRotation + 1) % 4) {
+ int lowerBound = proposedRotation * 90 - 45
+ ADJACENT_ORIENTATION_ANGLE_GAP / 2;
- if (proposedOrientation == 0) {
+ if (proposedRotation == 0) {
if (orientationAngle >= 315 && orientationAngle < lowerBound + 360) {
return false;
}
@@ -579,15 +532,15 @@ public abstract class WindowOrientationListener {
}
}
- // If the proposed orientation is the same or is clockwise adjacent,
+ // If the proposed rotation is the same or is clockwise adjacent,
// then we set an upper bound on the orientation angle.
- // For example, if currentOrientation is ROTATION_0 and proposed is ROTATION_270,
+ // For example, if currentRotation is ROTATION_0 and proposed is ROTATION_270,
// then we want to check orientationAngle < 315 - GAP / 2.
- if (proposedOrientation == currentOrientation
- || proposedOrientation == (currentOrientation + 3) % 4) {
- int upperBound = proposedOrientation * 90 + 45
+ if (proposedRotation == currentRotation
+ || proposedRotation == (currentRotation + 3) % 4) {
+ int upperBound = proposedRotation * 90 + 45
- ADJACENT_ORIENTATION_ANGLE_GAP / 2;
- if (proposedOrientation == 0) {
+ if (proposedRotation == 0) {
if (orientationAngle <= 45 && orientationAngle > upperBound) {
return false;
}
@@ -601,21 +554,58 @@ public abstract class WindowOrientationListener {
return true;
}
- /**
- * Calculate an exponentially weighted confidence value in the range [0.0, 1.0].
- * The further the value is from the target, the more the confidence trends to 0.
- */
- private static float confidence(float value, float target, float scale) {
- return (float) Math.exp(-Math.abs(value - target) * scale);
+ private void clearProposal() {
+ mProposalRotation = -1;
+ mProposalAgeMS = 0;
}
- /**
- * Calculate a scale factor for the confidence weight exponent.
- * The scale value is chosen such that confidence(value, target, scale) == 0.5
- * whenever abs(value - target) == cutoffDelta.
- */
- private static float confidenceScaleFromDelta(float cutoffDelta) {
- return (float) -Math.log(0.5) / cutoffDelta;
+ private void updateProposal(int rotation, long timestampMS,
+ float magnitude, int tiltAngle, int orientationAngle) {
+ if (mProposalRotation != rotation) {
+ mProposalRotation = rotation;
+ mHistoryIndex = 0;
+ mHistoryLength = 0;
+ }
+
+ final int index = mHistoryIndex;
+ mHistoryTimestampMS[index] = timestampMS;
+ mHistoryMagnitudes[index] = magnitude;
+ mHistoryTiltAngles[index] = tiltAngle;
+ mHistoryOrientationAngles[index] = orientationAngle;
+ mHistoryIndex = (index + 1) % HISTORY_SIZE;
+ if (mHistoryLength < HISTORY_SIZE) {
+ mHistoryLength += 1;
+ }
+
+ long age = 0;
+ for (int i = 1; i < mHistoryLength; i++) {
+ final int olderIndex = (index + HISTORY_SIZE - i) % HISTORY_SIZE;
+ if (Math.abs(mHistoryMagnitudes[olderIndex] - magnitude)
+ > SETTLE_MAGNITUDE_MAX_DELTA) {
+ break;
+ }
+ if (angleAbsoluteDelta(mHistoryTiltAngles[olderIndex],
+ tiltAngle) > SETTLE_TILT_ANGLE_MAX_DELTA) {
+ break;
+ }
+ if (angleAbsoluteDelta(mHistoryOrientationAngles[olderIndex],
+ orientationAngle) > SETTLE_ORIENTATION_ANGLE_MAX_DELTA) {
+ break;
+ }
+ age = timestampMS - mHistoryTimestampMS[olderIndex];
+ if (age >= SETTLE_TIME_MS) {
+ break;
+ }
+ }
+ mProposalAgeMS = age;
+ }
+
+ private static int angleAbsoluteDelta(int a, int b) {
+ int delta = Math.abs(a - b);
+ if (delta > 180) {
+ delta = 360 - delta;
+ }
+ return delta;
}
}
}
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index 01587aac7d2a..b06c112cdf54 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -223,7 +223,7 @@ public final class TextServicesManager {
try {
sService.setSpellCheckerEnabled(enabled);
} catch (RemoteException e) {
- Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
+ Log.e(TAG, "Error in setSpellCheckerEnabled:" + e);
}
}
@@ -234,7 +234,7 @@ public final class TextServicesManager {
try {
return sService.isSpellCheckerEnabled();
} catch (RemoteException e) {
- Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
+ Log.e(TAG, "Error in isSpellCheckerEnabled:" + e);
return false;
}
}
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 309857d033e0..28f54aa08e7c 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -1159,51 +1159,49 @@ class BrowserFrame extends Handler {
}
/**
- * Called by JNI when the native HTTPS stack gets an invalid cert chain.
+ * Called by JNI when the Chromium HTTP stack gets an invalid certificate chain.
*
* We delegate the request to CallbackProxy, and route its response to
* {@link #nativeSslCertErrorProceed(int)} or
* {@link #nativeSslCertErrorCancel(int, int)}.
*/
- private void reportSslCertError(
- final int handle, final int cert_error, byte cert_der[], String url) {
- final SslError ssl_error;
+ private void reportSslCertError(final int handle, final int certError, byte certDER[],
+ String url) {
+ final SslError sslError;
try {
- X509Certificate cert = new X509CertImpl(cert_der);
+ X509Certificate cert = new X509CertImpl(certDER);
SslCertificate sslCert = new SslCertificate(cert);
if (JniUtil.useChromiumHttpStack()) {
- ssl_error = SslError.SslErrorFromChromiumErrorCode(cert_error, sslCert,
+ sslError = SslError.SslErrorFromChromiumErrorCode(certError, sslCert,
new URL(url).getHost());
} else {
- ssl_error = new SslError(cert_error, cert, url);
+ sslError = new SslError(certError, cert, url);
}
} catch (IOException e) {
// Can't get the certificate, not much to do.
Log.e(LOGTAG, "Can't get the certificate from WebKit, canceling");
- nativeSslCertErrorCancel(handle, cert_error);
+ nativeSslCertErrorCancel(handle, certError);
return;
}
- SslErrorHandler handler = new SslErrorHandler() {
+ if (SslCertLookupTable.getInstance().isAllowed(sslError)) {
+ nativeSslCertErrorProceed(handle);
+ return;
+ }
+ SslErrorHandler handler = new SslErrorHandler() {
@Override
public void proceed() {
- SslCertLookupTable.getInstance().Allow(ssl_error);
+ SslCertLookupTable.getInstance().setIsAllowed(sslError, true);
nativeSslCertErrorProceed(handle);
}
-
@Override
public void cancel() {
- SslCertLookupTable.getInstance().Deny(ssl_error);
- nativeSslCertErrorCancel(handle, cert_error);
+ SslCertLookupTable.getInstance().setIsAllowed(sslError, false);
+ nativeSslCertErrorCancel(handle, certError);
}
};
-
- if (SslCertLookupTable.getInstance().IsAllowed(ssl_error)) {
- nativeSslCertErrorProceed(handle);
- } else {
- mCallbackProxy.onReceivedSslError(handler, ssl_error);
- }
+ mCallbackProxy.onReceivedSslError(handler, sslError);
}
/**
@@ -1416,7 +1414,7 @@ class BrowserFrame extends Handler {
private native void nativeAuthenticationCancel(int handle);
private native void nativeSslCertErrorProceed(int handle);
- private native void nativeSslCertErrorCancel(int handle, int cert_error);
+ private native void nativeSslCertErrorCancel(int handle, int certError);
native void nativeSslClientCert(int handle,
byte[] pkcs8EncodedPrivateKey,
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 88583df47ce3..5ee90a4fdab6 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -165,8 +165,6 @@ class CallbackProxy extends Handler {
/**
* Get the WebViewClient.
* @return the current WebViewClient instance.
- *
- *@hide pending API council approval.
*/
public WebViewClient getWebViewClient() {
return mWebViewClient;
@@ -907,11 +905,9 @@ class CallbackProxy extends Handler {
*/
public void onPageStarted(String url, Bitmap favicon) {
- // Do an unsynchronized quick check to avoid posting if no callback has
- // been set.
- if (mWebViewClient == null) {
- return;
- }
+ // We need to send the message even if no WebViewClient is set, because we need to call
+ // WebView.onPageStarted().
+
// Performance probe
if (PERF_PROBE) {
mWebCoreThreadTime = SystemClock.currentThreadTimeMillis();
@@ -1013,10 +1009,6 @@ class CallbackProxy extends Handler {
sendMessage(msg);
}
- /**
- * @hide - hide this because it contains a parameter of type SslError.
- * SslError is located in a hidden package.
- */
public void onReceivedSslError(SslErrorHandler handler, SslError error) {
// Do an unsynchronized quick check to avoid posting if no callback has
// been set.
@@ -1031,9 +1023,7 @@ class CallbackProxy extends Handler {
msg.obj = map;
sendMessage(msg);
}
- /**
- * @hide
- */
+
public void onReceivedClientCertRequest(ClientCertRequestHandler handler, String host_and_port) {
// Do an unsynchronized quick check to avoid posting if no callback has
// been set.
@@ -1048,17 +1038,8 @@ class CallbackProxy extends Handler {
msg.obj = map;
sendMessage(msg);
}
- /**
- * @hide - hide this because it contains a parameter of type SslCertificate,
- * which is located in a hidden package.
- */
public void onReceivedCertificate(SslCertificate certificate) {
- // Do an unsynchronized quick check to avoid posting if no callback has
- // been set.
- if (mWebViewClient == null) {
- return;
- }
// here, certificate can be null (if the site is not secure)
sendMessage(obtainMessage(RECEIVED_CERTIFICATE, certificate));
}
diff --git a/core/java/android/webkit/CookieSyncManager.java b/core/java/android/webkit/CookieSyncManager.java
index 313f7558bfe7..a6998006e895 100644
--- a/core/java/android/webkit/CookieSyncManager.java
+++ b/core/java/android/webkit/CookieSyncManager.java
@@ -88,6 +88,10 @@ public final class CookieSyncManager extends WebSyncManager {
*/
public static synchronized CookieSyncManager createInstance(
Context context) {
+ if (context == null) {
+ throw new IllegalArgumentException("Invalid context argument");
+ }
+
JniUtil.setContext(context);
Context appContext = context.getApplicationContext();
if (sRef == null) {
diff --git a/core/java/android/webkit/HTML5Audio.java b/core/java/android/webkit/HTML5Audio.java
index 1e958549809d..3600d09732e9 100644
--- a/core/java/android/webkit/HTML5Audio.java
+++ b/core/java/android/webkit/HTML5Audio.java
@@ -23,6 +23,7 @@ import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.Handler;
+import android.os.Looper;
import android.os.Message;
import android.util.Log;
@@ -33,7 +34,11 @@ import java.util.Timer;
import java.util.TimerTask;
/**
- * <p>HTML5 support class for Audio.
+ * HTML5 support class for Audio.
+ *
+ * This class runs almost entirely on the WebCore thread. The exception is when
+ * accessing the WebView object to determine whether private browsing is
+ * enabled.
*/
class HTML5Audio extends Handler
implements MediaPlayer.OnBufferingUpdateListener,
@@ -49,7 +54,7 @@ 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 IsPrivateBrowsingEnabledGetter mIsPrivateBrowsingEnabledGetter;
private static int IDLE = 0;
private static int INITIALIZED = 1;
@@ -82,6 +87,35 @@ class HTML5Audio extends Handler
}
}
+ // Helper class to determine whether private browsing is enabled in the
+ // given WebView. Queries the WebView on the UI thread. Calls to get()
+ // block until the data is available.
+ private class IsPrivateBrowsingEnabledGetter {
+ private boolean mIsReady;
+ private boolean mIsPrivateBrowsingEnabled;
+ IsPrivateBrowsingEnabledGetter(Looper uiThreadLooper, final WebView webView) {
+ new Handler(uiThreadLooper).post(new Runnable() {
+ @Override
+ public void run() {
+ synchronized(IsPrivateBrowsingEnabledGetter.this) {
+ mIsPrivateBrowsingEnabled = webView.isPrivateBrowsingEnabled();
+ mIsReady = true;
+ IsPrivateBrowsingEnabledGetter.this.notify();
+ }
+ }
+ });
+ }
+ synchronized boolean get() {
+ while (!mIsReady) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ }
+ }
+ return mIsPrivateBrowsingEnabled;
+ }
+ };
+
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
@@ -149,7 +183,8 @@ class HTML5Audio extends Handler
// Save the native ptr
mNativePointer = nativePtr;
resetMediaPlayer();
- mIsPrivate = webViewCore.getWebView().isPrivateBrowsingEnabled();
+ mIsPrivateBrowsingEnabledGetter = new IsPrivateBrowsingEnabledGetter(
+ webViewCore.getContext().getMainLooper(), webViewCore.getWebView());
}
private void resetMediaPlayer() {
@@ -177,13 +212,14 @@ class HTML5Audio extends Handler
if (mState != IDLE) {
resetMediaPlayer();
}
- String cookieValue = CookieManager.getInstance().getCookie(url, mIsPrivate);
+ String cookieValue = CookieManager.getInstance().getCookie(
+ url, mIsPrivateBrowsingEnabledGetter.get());
Map<String, String> headers = new HashMap<String, String>();
if (cookieValue != null) {
headers.put(COOKIE, cookieValue);
}
- if (mIsPrivate) {
+ if (mIsPrivateBrowsingEnabledGetter.get()) {
headers.put(HIDE_URL_LOGS, "true");
}
diff --git a/core/java/android/webkit/HTML5VideoInline.java b/core/java/android/webkit/HTML5VideoInline.java
index 97dc2918a2c9..42581c2fa51d 100644
--- a/core/java/android/webkit/HTML5VideoInline.java
+++ b/core/java/android/webkit/HTML5VideoInline.java
@@ -1,6 +1,8 @@
package android.webkit;
+import android.Manifest.permission;
+import android.content.pm.PackageManager;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.webkit.HTML5VideoView;
@@ -52,7 +54,12 @@ public class HTML5VideoInline extends HTML5VideoView{
public void prepareDataAndDisplayMode(HTML5VideoViewProxy proxy) {
super.prepareDataAndDisplayMode(proxy);
setFrameAvailableListener(proxy);
- mPlayer.setWakeMode(proxy.getContext(), PowerManager.FULL_WAKE_LOCK);
+ // TODO: This is a workaround, after b/5375681 fixed, we should switch
+ // to the better way.
+ if (mProxy.getContext().checkCallingOrSelfPermission(permission.WAKE_LOCK)
+ == PackageManager.PERMISSION_GRANTED) {
+ mPlayer.setWakeMode(proxy.getContext(), PowerManager.FULL_WAKE_LOCK);
+ }
}
// Pause the play and update the play/pause button
diff --git a/core/java/android/webkit/JniUtil.java b/core/java/android/webkit/JniUtil.java
index ef1641de73aa..7759ff37053e 100644
--- a/core/java/android/webkit/JniUtil.java
+++ b/core/java/android/webkit/JniUtil.java
@@ -39,25 +39,21 @@ class JniUtil {
private static Boolean sUseChromiumHttpStack;
private static Context sContext;
- private static boolean initialized = false;
-
private static void checkInitialized() {
- if (!initialized) {
+ if (sContext == null) {
throw new IllegalStateException("Call CookieSyncManager::createInstance() or create a webview before using this class");
}
}
protected static synchronized void setContext(Context context) {
- if (initialized)
+ if (sContext != null) {
return;
+ }
sContext = context.getApplicationContext();
- initialized = true;
}
protected static synchronized Context getContext() {
- if (!initialized)
- return null;
return sContext;
}
@@ -68,8 +64,9 @@ class JniUtil {
private static synchronized String getDatabaseDirectory() {
checkInitialized();
- if (sDatabaseDirectory == null)
+ if (sDatabaseDirectory == null) {
sDatabaseDirectory = sContext.getDatabasePath("dummy").getParent();
+ }
return sDatabaseDirectory;
}
@@ -81,8 +78,9 @@ class JniUtil {
private static synchronized String getCacheDirectory() {
checkInitialized();
- if (sCacheDirectory == null)
+ if (sCacheDirectory == null) {
sCacheDirectory = sContext.getCacheDir().getAbsolutePath();
+ }
return sCacheDirectory;
}
diff --git a/core/java/android/webkit/SslCertLookupTable.java b/core/java/android/webkit/SslCertLookupTable.java
index faff110aae8a..052244f95f89 100644
--- a/core/java/android/webkit/SslCertLookupTable.java
+++ b/core/java/android/webkit/SslCertLookupTable.java
@@ -20,14 +20,15 @@ import android.os.Bundle;
import android.net.http.SslError;
/**
- * A simple class to store the wrong certificates that user is aware but
- * chose to proceed.
+ * Stores the user's decision of whether to allow or deny an invalid certificate.
+ *
+ * This class is not threadsafe. It is used only on the WebCore thread.
*/
final class SslCertLookupTable {
private static SslCertLookupTable sTable;
private final Bundle table;
- public static synchronized SslCertLookupTable getInstance() {
+ public static SslCertLookupTable getInstance() {
if (sTable == null) {
sTable = new SslCertLookupTable();
}
@@ -38,15 +39,15 @@ final class SslCertLookupTable {
table = new Bundle();
}
- public void Allow(SslError ssl_error) {
- table.putBoolean(ssl_error.toString(), true);
+ public void setIsAllowed(SslError sslError, boolean allow) {
+ table.putBoolean(sslError.toString(), allow);
}
- public void Deny(SslError ssl_error) {
- table.putBoolean(ssl_error.toString(), false);
+ public boolean isAllowed(SslError sslError) {
+ return table.getBoolean(sslError.toString());
}
- public boolean IsAllowed(SslError ssl_error) {
- return table.getBoolean(ssl_error.toString());
+ public void clear() {
+ table.clear();
}
}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index be42608ded11..530b230b348b 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -644,7 +644,7 @@ public class WebView extends AbsoluteLayout
private Drawable mSelectHandleLeft;
private Drawable mSelectHandleRight;
- static final boolean USE_WEBKIT_RINGS = true;
+ static final boolean USE_WEBKIT_RINGS = false;
// the color used to highlight the touch rectangles
private static final int HIGHLIGHT_COLOR = 0x6633b5e5;
// the round corner for the highlight path
@@ -730,6 +730,7 @@ public class WebView extends AbsoluteLayout
static final int SELECT_AT = 135;
static final int SCREEN_ON = 136;
static final int ENTER_FULLSCREEN_VIDEO = 137;
+ static final int UPDATE_SELECTION = 138;
private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID;
private static final int LAST_PACKAGE_MSG_ID = SET_TOUCH_HIGHLIGHT_RECTS;
@@ -1054,6 +1055,10 @@ public class WebView extends AbsoluteLayout
super(context, attrs, defStyle);
checkThread();
+ if (context == null) {
+ throw new IllegalArgumentException("Invalid context argument");
+ }
+
// Used by the chrome stack to find application paths
JniUtil.setContext(context);
@@ -1803,6 +1808,8 @@ public class WebView extends AbsoluteLayout
/**
* Restore the display data that was save in {@link #savePicture}. Used in
* conjunction with {@link #restoreState}.
+ *
+ * Note that this will not work if the WebView is hardware accelerated.
* @param b A Bundle containing the saved display data.
* @param src The file where the picture data was stored.
* @return True if the picture was successfully restored.
@@ -2385,6 +2392,12 @@ public class WebView extends AbsoluteLayout
return mZoomManager.getScale();
}
+ // Called by JNI. Returns the scale to apply to the text selection handles
+ /* package */ float getTextHandleScale() {
+ float density = mContext.getResources().getDisplayMetrics().density;
+ return density / getScale();
+ }
+
/**
* Return the reading level scale of the WebView
* @return The reading level scale.
@@ -4023,7 +4036,7 @@ public class WebView extends AbsoluteLayout
protected void finalize() throws Throwable {
try {
if (mNativeClass != 0) {
- post(new Runnable() {
+ mPrivateHandler.post(new Runnable() {
@Override
public void run() {
destroy();
@@ -4062,8 +4075,11 @@ public class WebView extends AbsoluteLayout
// state.
// If mNativeClass is 0, we should not reach here, so we do not
// need to check it again.
+ boolean pressed = (mTouchMode == TOUCH_SHORTPRESS_START_MODE
+ || mTouchMode == TOUCH_INIT_MODE
+ || mTouchMode == TOUCH_SHORTPRESS_MODE);
nativeRecordButtons(hasFocus() && hasWindowFocus(),
- (mTouchMode == TOUCH_SHORTPRESS_START_MODE && !USE_WEBKIT_RINGS)
+ (pressed && !USE_WEBKIT_RINGS)
|| mTrackballDown || mGotCenterDown, false);
drawCoreAndCursorRing(canvas, mBackgroundColor,
mDrawCursorRing && drawRings);
@@ -4280,7 +4296,6 @@ public class WebView extends AbsoluteLayout
}
nativeSetExtendSelection();
mDrawSelectionPointer = false;
- mSelectionStarted = true;
mTouchMode = TOUCH_DRAG_MODE;
return true;
}
@@ -4293,6 +4308,7 @@ public class WebView extends AbsoluteLayout
selectionDone();
}
mOrientation = newConfig.orientation;
+ contentInvalidateAll();
}
/**
@@ -4441,6 +4457,7 @@ public class WebView extends AbsoluteLayout
mHeldMotionless = MOTIONLESS_PENDING;
}
}
+ int saveCount = canvas.save();
if (animateZoom) {
mZoomManager.animateZoom(canvas);
} else if (!canvas.isHardwareAccelerated()) {
@@ -4491,10 +4508,6 @@ public class WebView extends AbsoluteLayout
nativeUseHardwareAccelSkia(mHardwareAccelSkia);
}
- if (mSelectingText && USE_JAVA_TEXT_SELECTION) {
- drawTextSelectionHandles(canvas);
- }
-
} else {
DrawFilter df = null;
if (mZoomManager.isZoomAnimating() || UIAnimationsRunning) {
@@ -4512,6 +4525,11 @@ public class WebView extends AbsoluteLayout
}
}
+ canvas.restoreToCount(saveCount);
+ if (mSelectingText && USE_JAVA_TEXT_SELECTION) {
+ drawTextSelectionHandles(canvas);
+ }
+
if (extras == DRAW_EXTRAS_CURSOR_RING) {
if (mTouchMode == TOUCH_SHORTPRESS_START_MODE) {
mTouchMode = TOUCH_SHORTPRESS_MODE;
@@ -6530,6 +6548,8 @@ public class WebView extends AbsoluteLayout
mLastTouchTime = eventTime;
mVelocityTracker = VelocityTracker.obtain();
mSnapScrollMode = SNAP_NONE;
+ mPrivateHandler.sendEmptyMessageDelayed(UPDATE_SELECTION,
+ ViewConfiguration.getTapTimeout());
}
private void startDrag() {
@@ -7159,6 +7179,14 @@ public class WebView extends AbsoluteLayout
}
/**
+ * Return the overview scale of the WebView
+ * @return The overview scale.
+ */
+ float getZoomOverviewScale() {
+ return mZoomManager.getZoomOverviewScale();
+ }
+
+ /**
* @return TRUE if the WebView can be zoomed in.
*/
public boolean canZoomIn() {
@@ -7192,10 +7220,15 @@ public class WebView extends AbsoluteLayout
return mZoomManager.zoomOut();
}
+ /**
+ * This selects the best clickable target at mLastTouchX and mLastTouchY
+ * and calls showCursorTimed on the native side
+ */
private void updateSelection() {
if (mNativeClass == 0) {
return;
}
+ mPrivateHandler.removeMessages(UPDATE_SELECTION);
// mLastTouchX and mLastTouchY are the point in the current viewport
int contentX = viewToContentX(mLastTouchX + mScrollX);
int contentY = viewToContentY(mLastTouchY + mScrollY);
@@ -7295,6 +7328,7 @@ public class WebView extends AbsoluteLayout
return;
}
mTouchMode = TOUCH_DONE_MODE;
+ updateSelection();
switchOutDrawHistory();
// mLastTouchX and mLastTouchY are the point in the current viewport
int contentX = viewToContentX(mLastTouchX + mScrollX);
@@ -8185,6 +8219,14 @@ public class WebView extends AbsoluteLayout
SCROLL_SELECT_TEXT, SELECT_SCROLL_INTERVAL);
break;
}
+ case UPDATE_SELECTION: {
+ if (mTouchMode == TOUCH_INIT_MODE
+ || mTouchMode == TOUCH_SHORTPRESS_MODE
+ || mTouchMode == TOUCH_SHORTPRESS_START_MODE) {
+ updateSelection();
+ }
+ break;
+ }
case SWITCH_TO_SHORTPRESS: {
mInitialHitTestResult = null; // set by updateSelection()
if (mTouchMode == TOUCH_INIT_MODE) {
@@ -9247,13 +9289,13 @@ public class WebView extends AbsoluteLayout
private static void checkThread() {
if (Looper.myLooper() != Looper.getMainLooper()) {
- RuntimeException exception = new RuntimeException(
- "A WebView method was called on thread '" +
+ Throwable throwable = new Throwable(
+ "Warning: A WebView method was called on thread '" +
Thread.currentThread().getName() + "'. " +
"All WebView methods must be called on the UI thread. " +
"Future versions of WebView may not support use on other threads.");
- Log.e(LOGTAG, Log.getStackTraceString(exception));
- StrictMode.onWebViewMethodCalledOnWrongThread(exception);
+ Log.w(LOGTAG, Log.getStackTraceString(throwable));
+ StrictMode.onWebViewMethodCalledOnWrongThread(throwable);
}
}
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 48359d44daca..63c4d032ddab 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1349,8 +1349,14 @@ public final class WebViewCore {
}
case CLEAR_SSL_PREF_TABLE:
- Network.getInstance(mContext)
- .clearUserSslPrefTable();
+ if (JniUtil.useChromiumHttpStack()) {
+ // FIXME: This will not work for connections currently in use, as
+ // they cache the certificate responses. See http://b/5324235.
+ SslCertLookupTable.getInstance().clear();
+ nativeCloseIdleConnections();
+ } else {
+ Network.getInstance(mContext).clearUserSslPrefTable();
+ }
break;
case TOUCH_UP:
@@ -2225,6 +2231,8 @@ public final class WebViewCore {
mRepaintScheduled = false;
}
+ // Gets the WebView corresponding to this WebViewCore. Note that the
+ // WebView object must only be used on the UI thread.
/* package */ WebView getWebView() {
return mWebView;
}
@@ -2512,10 +2520,13 @@ public final class WebViewCore {
// called by JNI
private void restoreScale(float scale, float textWrapScale) {
if (mBrowserFrame.firstLayoutDone() == false) {
- final float defaultScale = mWebView.getDefaultZoomScale();
- mRestoredScale = (scale <= 0.0) ? defaultScale : scale;
+ // If restored scale and textWrapScale are 0, set them to
+ // overview and reading level scale respectively.
+ mRestoredScale = (scale <= 0.0)
+ ? mWebView.getZoomOverviewScale() : scale;
if (mSettings.getUseWideViewPort()) {
- mRestoredTextWrapScale = (textWrapScale <= 0.0) ? defaultScale : textWrapScale;
+ mRestoredTextWrapScale = (textWrapScale <= 0.0)
+ ? mWebView.getReadingLevelScale() : textWrapScale;
}
}
}
@@ -2623,8 +2634,7 @@ public final class WebViewCore {
}
}
- // called by JNI
- private Context getContext() {
+ Context getContext() {
return mContext;
}
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 7ca6aeba87fe..7f526e7e7c1b 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -1128,12 +1128,6 @@ class ZoomManager {
mTextWrapScale = Math.max(mTextWrapScale, overviewScale);
}
reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
- } else {
- // In case of restored scale, treat defaultScale as overview since
- // it usually means the previous scale is not saved.
- if (scale == mDefaultScale && settings.getLoadWithOverviewMode()) {
- scale = overviewScale;
- }
}
mInitialZoomOverview = settings.getLoadWithOverviewMode() &&
!exceedsMinScaleIncrement(scale, overviewScale);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index cfe4cb720de7..7b8c7f218ddc 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1304,16 +1304,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
}
}
- @Override
- public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // Do not append text content to scroll events they are fired frequently
- // and the client has already received another event type with the text.
- if (event.getEventType() != AccessibilityEvent.TYPE_VIEW_SCROLLED) {
- super.dispatchPopulateAccessibilityEvent(event);
- }
- return false;
- }
-
/**
* Indicates whether the children's drawing cache is used during a scroll.
* By default, the drawing cache is enabled but this will consume more memory.
@@ -3654,7 +3644,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
vt.computeCurrentVelocity(1000, mMaximumVelocity);
final float yvel = -vt.getYVelocity(activeId);
- if (scroller.isScrollingInDirection(0, yvel)) {
+ if (Math.abs(yvel) >= mMinimumVelocity
+ && scroller.isScrollingInDirection(0, yvel)) {
// Keep the fling alive a little longer
postDelayed(this, FLYWHEEL_TIMEOUT);
} else {
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index 312303d5dc0e..c6e63c36098f 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -16,6 +16,8 @@
package android.widget;
+import com.android.internal.R;
+
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -23,19 +25,16 @@ import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
-import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.view.ActionProvider;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.View.MeasureSpec;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ActivityChooserModel.ActivityChooserModelClient;
-import com.android.internal.R;
-
/**
* This class is a view for choosing an activity for handling a given {@link Intent}.
* <p>
@@ -107,6 +106,11 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
private final int mListPopupMaxWidth;
/**
+ * The ActionProvider hosting this view, if applicable.
+ */
+ ActionProvider mProvider;
+
+ /**
* Observer for the model data.
*/
private final DataSetObserver mModelDataSetOberver = new DataSetObserver() {
@@ -131,6 +135,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
getListPopupWindow().dismiss();
} else {
getListPopupWindow().show();
+ if (mProvider != null) {
+ mProvider.subUiVisibilityChanged(true);
+ }
}
}
}
@@ -262,6 +269,14 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
/**
+ * Set the provider hosting this view, if applicable.
+ * @hide Internal use only
+ */
+ public void setProvider(ActionProvider provider) {
+ mProvider = provider;
+ }
+
+ /**
* Shows the popup window with activities.
*
* @return True if the popup was shown, false if already showing.
@@ -289,9 +304,13 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
mAdapter.setMaxActivityCount(maxActivityCount);
+ final boolean defaultActivityButtonShown =
+ mDefaultActivityButton.getVisibility() == VISIBLE;
+
final int activityCount = mAdapter.getActivityCount();
+ final int maxActivityCountOffset = defaultActivityButtonShown ? 1 : 0;
if (maxActivityCount != ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_UNLIMITED
- && activityCount > maxActivityCount + 1) {
+ && activityCount > maxActivityCount + maxActivityCountOffset) {
mAdapter.setShowFooterView(true);
} else {
mAdapter.setShowFooterView(false);
@@ -299,14 +318,17 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
ListPopupWindow popupWindow = getListPopupWindow();
if (!popupWindow.isShowing()) {
- if (mIsSelectingDefaultActivity) {
- mAdapter.setShowDefaultActivity(true);
+ if (mIsSelectingDefaultActivity || !defaultActivityButtonShown) {
+ mAdapter.setShowDefaultActivity(true, defaultActivityButtonShown);
} else {
- mAdapter.setShowDefaultActivity(false);
+ mAdapter.setShowDefaultActivity(false, false);
}
final int contentWidth = Math.min(mAdapter.measureContentWidth(), mListPopupMaxWidth);
popupWindow.setContentWidth(contentWidth);
popupWindow.show();
+ if (mProvider != null) {
+ mProvider.subUiVisibilityChanged(true);
+ }
}
}
@@ -476,8 +498,10 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
mAdapter.getDataModel().setDefaultActivity(position);
}
} else {
- // The first item in the model is default action => adjust index
- Intent launchIntent = mAdapter.getDataModel().chooseActivity(position + 1);
+ // If the default target is not shown in the list, the first
+ // item in the model is default action => adjust index
+ position = mAdapter.getShowDefaultActivity() ? position : position + 1;
+ Intent launchIntent = mAdapter.getDataModel().chooseActivity(position);
if (launchIntent != null) {
mContext.startActivity(launchIntent);
}
@@ -523,6 +547,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
// PopUpWindow.OnDismissListener#onDismiss
public void onDismiss() {
notifyOnDismissListener();
+ if (mProvider != null) {
+ mProvider.subUiVisibilityChanged(false);
+ }
}
private void notifyOnDismissListener() {
@@ -553,6 +580,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
private boolean mShowDefaultActivity;
+ private boolean mHighlightDefaultActivity;
+
private boolean mShowFooterView;
public void setDataModel(ActivityChooserModel dataModel) {
@@ -640,7 +669,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
TextView titleView = (TextView) convertView.findViewById(R.id.title);
titleView.setText(activity.loadLabel(packageManager));
// Highlight the default.
- if (mShowDefaultActivity && position == 0) {
+ if (mShowDefaultActivity && position == 0 && mHighlightDefaultActivity) {
convertView.setActivated(true);
} else {
convertView.setActivated(false);
@@ -709,11 +738,18 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
return mDataModel;
}
- public void setShowDefaultActivity(boolean showDefaultActivity) {
- if (mShowDefaultActivity != showDefaultActivity) {
+ public void setShowDefaultActivity(boolean showDefaultActivity,
+ boolean highlightDefaultActivity) {
+ if (mShowDefaultActivity != showDefaultActivity
+ || mHighlightDefaultActivity != highlightDefaultActivity) {
mShowDefaultActivity = showDefaultActivity;
+ mHighlightDefaultActivity = highlightDefaultActivity;
notifyDataSetChanged();
}
}
+
+ public boolean getShowDefaultActivity() {
+ return mShowDefaultActivity;
+ }
}
}
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index 72db8e8225f8..a4b4e783def9 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -277,10 +277,11 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
* called, false otherwise is returned.
*/
public boolean performItemClick(View view, int position, long id) {
- view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
-
if (mOnItemClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
+ if (view != null) {
+ view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+ }
mOnItemClickListener.onItemClick(this, view, position, id);
return true;
}
@@ -338,8 +339,10 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
*/
public interface OnItemSelectedListener {
/**
- * Callback method to be invoked when an item in this view has been
- * selected.
+ * <p>Callback method to be invoked when an item in this view has been
+ * selected. This callback is invoked only when the newly selected
+ * position is different from the previously selected position or if
+ * there was no selected item.</p>
*
* Impelmenters can call getItemAtPosition(position) if they need to access the
* data associated with the selected item.
@@ -878,31 +881,30 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
@Override
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
- // This is an exceptional case which occurs when a window gets the
- // focus and sends a focus event via its focused child to announce
- // current focus/selection. AdapterView fires selection but not focus
- // events so we change the event type here.
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
- event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ final int eventType = event.getEventType();
+ switch (eventType) {
+ case AccessibilityEvent.TYPE_VIEW_SCROLLED:
+ // Do not populate the text of scroll events.
+ return true;
+ case AccessibilityEvent.TYPE_VIEW_FOCUSED:
+ // This is an exceptional case which occurs when a window gets the
+ // focus and sends a focus event via its focused child to announce
+ // current focus/selection. AdapterView fires selection but not focus
+ // events so we change the event type here.
+ if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
+ event.setEventType(AccessibilityEvent.TYPE_VIEW_SELECTED);
+ }
+ break;
}
View selectedView = getSelectedView();
if (selectedView != null && selectedView.getVisibility() == VISIBLE) {
- // We first get a chance to populate the event.
- onPopulateAccessibilityEvent(event);
+ getSelectedView().dispatchPopulateAccessibilityEvent(event);
}
return false;
}
@Override
- public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
- super.onPopulateAccessibilityEvent(event);
- // We send selection events only from AdapterView to avoid
- // generation of such event for each child.
- getSelectedView().dispatchPopulateAccessibilityEvent(event);
- }
-
- @Override
public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
if (super.onRequestSendAccessibilityEvent(child, event)) {
// Add a record for ourselves as well.
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 27610b9fe5c2..07523e3a17c3 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -16,8 +16,6 @@
package android.widget;
-import com.android.internal.R;
-
import android.content.Context;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
@@ -38,6 +36,8 @@ import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
+import com.android.internal.R;
+
/**
* <p>An editable text view that shows completion suggestions automatically
@@ -744,7 +744,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
if (mFilter != null) {
mPopupCanBeUpdated = true;
performFiltering(getText(), mLastKeyCode);
- buildImeCompletions();
}
} else {
// drop down is automatically dismissed when enough characters
@@ -837,10 +836,6 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
@Override
public void onCommitCompletion(CompletionInfo completion) {
if (isPopupShowing()) {
- mBlockCompletion = true;
- replaceText(completion.getText());
- mBlockCompletion = false;
-
mPopup.performItemClick(completion.getPosition());
}
}
@@ -938,7 +933,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
*/
final boolean dropDownAlwaysVisible = mPopup.isDropDownAlwaysVisible();
- if ((count > 0 || dropDownAlwaysVisible) && enoughToFilter()) {
+ final boolean enoughToFilter = enoughToFilter();
+ if ((count > 0 || dropDownAlwaysVisible) && enoughToFilter) {
if (hasFocus() && hasWindowFocus() && mPopupCanBeUpdated) {
showDropDown();
}
@@ -1049,6 +1045,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
* <p>Displays the drop down on screen.</p>
*/
public void showDropDown() {
+ buildImeCompletions();
+
if (mPopup.getAnchorView() == null) {
if (mDropDownAnchorId != View.NO_ID) {
mPopup.setAnchorView(getRootView().findViewById(mDropDownAnchorId));
@@ -1064,7 +1062,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
mPopup.show();
mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
}
-
+
/**
* Forces outside touches to be ignored. Normally if {@link #isDropDownAlwaysVisible()} is
* false, we allow outside touch to dismiss the dropdown. If this is set to true, then we
@@ -1075,7 +1073,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
public void setForceIgnoreOutsideTouch(boolean forceIgnoreOutsideTouch) {
mPopup.setForceIgnoreOutsideTouch(forceIgnoreOutsideTouch);
}
-
+
private void buildImeCompletions() {
final ListAdapter adapter = mAdapter;
if (adapter != null) {
@@ -1090,8 +1088,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
realCount++;
Object item = adapter.getItem(i);
long id = adapter.getItemId(i);
- completions[i] = new CompletionInfo(id, i,
- convertSelectionToString(item));
+ completions[i] = new CompletionInfo(id, i, convertSelectionToString(item));
}
}
diff --git a/core/java/android/widget/BaseAdapter.java b/core/java/android/widget/BaseAdapter.java
index 532fd766ec66..401fcb83499d 100644
--- a/core/java/android/widget/BaseAdapter.java
+++ b/core/java/android/widget/BaseAdapter.java
@@ -43,13 +43,18 @@ public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
}
/**
- * Notifies the attached View that the underlying data has been changed
- * and it should refresh itself.
+ * Notifies the attached observers that the underlying data has been changed
+ * and any View reflecting the data set should refresh itself.
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
-
+
+ /**
+ * Notifies the attached observers that the underlying data is no longer valid
+ * or available. Once invoked this adapter is no longer valid and should
+ * not report further data set changes.
+ */
public void notifyDataSetInvalidated() {
mDataSetObservable.notifyInvalidated();
}
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index 1b713c3786d4..9cbe8db412b1 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -339,10 +339,8 @@ public class CalendarView extends FrameLayout {
// initialization based on locale
setCurrentLocale(Locale.getDefault());
- TypedValue calendarViewStyle = new TypedValue();
- context.getTheme().resolveAttribute(R.attr.calendarViewStyle, calendarViewStyle, true);
- TypedArray attributesArray = context.obtainStyledAttributes(calendarViewStyle.resourceId,
- R.styleable.CalendarView);
+ TypedArray attributesArray = context.obtainStyledAttributes(attrs, R.styleable.CalendarView,
+ R.attr.calendarViewStyle, 0);
mShowWeekNumber = attributesArray.getBoolean(R.styleable.CalendarView_showWeekNumber,
DEFAULT_SHOW_WEEK_NUMBER);
mFirstDayOfWeek = attributesArray.getInt(R.styleable.CalendarView_firstDayOfWeek,
@@ -355,6 +353,9 @@ public class CalendarView extends FrameLayout {
if (TextUtils.isEmpty(maxDate) || !parseDate(maxDate, mMaxDate)) {
parseDate(DEFAULT_MAX_DATE, mMaxDate);
}
+ if (mMaxDate.before(mMinDate)) {
+ throw new IllegalArgumentException("Max date cannot be before min date.");
+ }
mShownWeekCount = attributesArray.getInt(R.styleable.CalendarView_shownWeekCount,
DEFAULT_SHOWN_WEEK_COUNT);
mSelectedWeekBackgroundColor = attributesArray.getColor(
@@ -407,9 +408,16 @@ public class CalendarView extends FrameLayout {
setUpListView();
setUpAdapter();
- // go to today now
+ // go to today or whichever is close to today min or max date
mTempDate.setTimeInMillis(System.currentTimeMillis());
- goTo(mTempDate, false, true, true);
+ if (mTempDate.before(mMinDate)) {
+ goTo(mMinDate, false, true, true);
+ } else if (mMaxDate.before(mTempDate)) {
+ goTo(mMaxDate, false, true, true);
+ } else {
+ goTo(mTempDate, false, true, true);
+ }
+
invalidate();
}
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index 390002b6ba30..ba692885a768 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -87,19 +87,26 @@ import static java.lang.Math.min;
* layout parameters. When the
* {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins}
* property is set, default margins around children are automatically
- * allocated based on the child's visual characteristics. Each of the
- * margins so defined may be independently overridden by an assignment
+ * allocated based on the prevailing UI style guide for the platform.
+ * Each of the margins so defined may be independently overridden by an assignment
* to the appropriate layout parameter.
+ * Default values will generally produce a reasonable spacing between components
+ * but values may change between different releases of the platform.
*
* <h4>Excess Space Distribution</h4>
*
+ * GridLayout's distribution of excess space is based on <em>priority</em>
+ * rather than <em>weight</em>.
+ * <p>
* A child's ability to stretch is inferred from the alignment properties of
* its row and column groups (which are typically set by setting the
* {@link LayoutParams#setGravity(int) gravity} property of the child's layout parameters).
* If alignment was defined along a given axis then the component
- * is taken as flexible in along that axis. If no alignment was set,
- * the component is instead assumed to be inflexible. Multiple components in
- * the same row or column group are considered to act in <em>parallel</em>. Such a
+ * is taken as <em>flexible</em> in that direction. If no alignment was set,
+ * the component is instead assumed to be <em>inflexible</em>.
+ * <p>
+ * Multiple components in the same row or column group are
+ * considered to act in <em>parallel</em>. Such a
* group is flexible only if <em>all</em> of the components
* within it are flexible. Row and column groups that sit either side of a common boundary
* are instead considered to act in <em>series</em>. The composite group made of these two
@@ -109,6 +116,23 @@ import static java.lang.Math.min;
* gravity. To prevent a column from stretching, ensure that one of the components
* in the column does not define a gravity.
* <p>
+ * When the principle of flexibility does not provide complete disambiguation,
+ * GridLayout's algorithms favour rows and columns that are closer to its <em>right</em>
+ * and <em>bottom</em> edges.
+ *
+ * <h5>Limitations</h5>
+ *
+ * GridLayout does not provide support for the principle of <em>weight</em>, as defined in
+ * {@link LinearLayout.LayoutParams#weight}. In general, it is not therefore possible
+ * to configure a GridLayout to distribute excess space in non-trivial proportions between
+ * multiple rows or columns.
+ * <p>
+ * Some common use-cases may nevertheless be accommodated as follows.
+ * To place equal amounts of space around a component in a cell group;
+ * use {@link #CENTER} alignment (or {@link LayoutParams#setGravity(int) gravity}).
+ * For complete control over excess space distribution in a row or column;
+ * use a {@link LinearLayout} subview to hold the components in the associated cell group.
+ * When using either of these techniques, bear in mind that cell groups may be defined to overlap.
* <p>
* See {@link GridLayout.LayoutParams} for a full description of the
* layout parameters used by GridLayout.
@@ -180,9 +204,11 @@ public class GridLayout extends ViewGroup {
// Misc constants
- private static final String TAG = GridLayout.class.getName();
- private static boolean DEBUG = false;
- private static final int PRF = 1;
+ static final String TAG = GridLayout.class.getName();
+ static final boolean DEBUG = false;
+ static final int PRF = 1;
+ static final int MAX_SIZE = 100000;
+ static final int DEFAULT_CONTAINER_MARGIN = 0;
// Defaults
@@ -191,8 +217,6 @@ public class GridLayout extends ViewGroup {
private static final boolean DEFAULT_USE_DEFAULT_MARGINS = false;
private static final boolean DEFAULT_ORDER_PRESERVED = true;
private static final int DEFAULT_ALIGNMENT_MODE = ALIGN_MARGINS;
- private static final int DEFAULT_CONTAINER_MARGIN = 0;
- private static final int MAX_SIZE = 100000;
// TypedArray indices
@@ -206,13 +230,13 @@ public class GridLayout extends ViewGroup {
// Instance variables
- private final Axis mHorizontalAxis = new Axis(true);
- private final Axis mVerticalAxis = new Axis(false);
- private boolean mLayoutParamsValid = false;
- private int mOrientation = DEFAULT_ORIENTATION;
- private boolean mUseDefaultMargins = DEFAULT_USE_DEFAULT_MARGINS;
- private int mAlignmentMode = DEFAULT_ALIGNMENT_MODE;
- private int mDefaultGap;
+ final Axis horizontalAxis = new Axis(true);
+ final Axis verticalAxis = new Axis(false);
+ boolean layoutParamsValid = false;
+ int orientation = DEFAULT_ORIENTATION;
+ boolean useDefaultMargins = DEFAULT_USE_DEFAULT_MARGINS;
+ int alignmentMode = DEFAULT_ALIGNMENT_MODE;
+ int defaultGap;
// Constructors
@@ -224,7 +248,7 @@ public class GridLayout extends ViewGroup {
if (DEBUG) {
setWillNotDraw(false);
}
- mDefaultGap = context.getResources().getDimensionPixelOffset(R.dimen.default_gap);
+ defaultGap = context.getResources().getDimensionPixelOffset(R.dimen.default_gap);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.GridLayout);
try {
setRowCount(a.getInt(ROW_COUNT, DEFAULT_COUNT));
@@ -266,13 +290,12 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_orientation
*/
public int getOrientation() {
- return mOrientation;
+ return orientation;
}
/**
- * The orientation property does not affect layout. Orientation is used
- * only to generate default row/column indices when they are not specified
- * by a component's layout parameters.
+ * Orientation is used only to generate default row/column indices when
+ * they are not specified by a component's layout parameters.
* <p>
* The default value of this property is {@link #HORIZONTAL}.
*
@@ -283,8 +306,9 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_orientation
*/
public void setOrientation(int orientation) {
- if (mOrientation != orientation) {
- mOrientation = orientation;
+ if (this.orientation != orientation) {
+ this.orientation = orientation;
+ invalidateStructure();
requestLayout();
}
}
@@ -302,13 +326,12 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_rowCount
*/
public int getRowCount() {
- return mVerticalAxis.getCount();
+ return verticalAxis.getCount();
}
/**
- * The rowCount property does not affect layout. RowCount is used
- * only to generate default row/column indices when they are not specified
- * by a component's layout parameters.
+ * RowCount is used only to generate default row/column indices when
+ * they are not specified by a component's layout parameters.
*
* @param rowCount the number of rows
*
@@ -318,7 +341,9 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_rowCount
*/
public void setRowCount(int rowCount) {
- mVerticalAxis.setCount(rowCount);
+ verticalAxis.setCount(rowCount);
+ invalidateStructure();
+ requestLayout();
}
/**
@@ -334,13 +359,12 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_columnCount
*/
public int getColumnCount() {
- return mHorizontalAxis.getCount();
+ return horizontalAxis.getCount();
}
/**
- * The columnCount property does not affect layout. ColumnCount is used
- * only to generate default column/column indices when they are not specified
- * by a component's layout parameters.
+ * ColumnCount is used only to generate default column/column indices when
+ * they are not specified by a component's layout parameters.
*
* @param columnCount the number of columns.
*
@@ -350,7 +374,9 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_columnCount
*/
public void setColumnCount(int columnCount) {
- mHorizontalAxis.setCount(columnCount);
+ horizontalAxis.setCount(columnCount);
+ invalidateStructure();
+ requestLayout();
}
/**
@@ -364,7 +390,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_useDefaultMargins
*/
public boolean getUseDefaultMargins() {
- return mUseDefaultMargins;
+ return useDefaultMargins;
}
/**
@@ -394,7 +420,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_useDefaultMargins
*/
public void setUseDefaultMargins(boolean useDefaultMargins) {
- mUseDefaultMargins = useDefaultMargins;
+ this.useDefaultMargins = useDefaultMargins;
requestLayout();
}
@@ -411,7 +437,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_alignmentMode
*/
public int getAlignmentMode() {
- return mAlignmentMode;
+ return alignmentMode;
}
/**
@@ -430,7 +456,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_alignmentMode
*/
public void setAlignmentMode(int alignmentMode) {
- mAlignmentMode = alignmentMode;
+ this.alignmentMode = alignmentMode;
requestLayout();
}
@@ -445,7 +471,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_rowOrderPreserved
*/
public boolean isRowOrderPreserved() {
- return mVerticalAxis.isOrderPreserved();
+ return verticalAxis.isOrderPreserved();
}
/**
@@ -465,7 +491,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_rowOrderPreserved
*/
public void setRowOrderPreserved(boolean rowOrderPreserved) {
- mVerticalAxis.setOrderPreserved(rowOrderPreserved);
+ verticalAxis.setOrderPreserved(rowOrderPreserved);
invalidateStructure();
requestLayout();
}
@@ -481,7 +507,7 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_columnOrderPreserved
*/
public boolean isColumnOrderPreserved() {
- return mHorizontalAxis.isOrderPreserved();
+ return horizontalAxis.isOrderPreserved();
}
/**
@@ -501,14 +527,14 @@ public class GridLayout extends ViewGroup {
* @attr ref android.R.styleable#GridLayout_columnOrderPreserved
*/
public void setColumnOrderPreserved(boolean columnOrderPreserved) {
- mHorizontalAxis.setOrderPreserved(columnOrderPreserved);
+ horizontalAxis.setOrderPreserved(columnOrderPreserved);
invalidateStructure();
requestLayout();
}
// Static utility methods
- private static int max2(int[] a, int valueIfEmpty) {
+ static int max2(int[] a, int valueIfEmpty) {
int result = valueIfEmpty;
for (int i = 0, N = a.length; i < N; i++) {
result = Math.max(result, a[i]);
@@ -517,14 +543,14 @@ public class GridLayout extends ViewGroup {
}
@SuppressWarnings("unchecked")
- private static <T> T[] append(T[] a, T[] b) {
+ static <T> T[] append(T[] a, T[] b) {
T[] result = (T[]) Array.newInstance(a.getClass().getComponentType(), a.length + b.length);
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
- private static Alignment getAlignment(int gravity, boolean horizontal) {
+ static Alignment getAlignment(int gravity, boolean horizontal) {
int mask = horizontal ? HORIZONTAL_GRAVITY_MASK : VERTICAL_GRAVITY_MASK;
int shift = horizontal ? AXIS_X_SHIFT : AXIS_Y_SHIFT;
int flags = (gravity & mask) >> shift;
@@ -547,7 +573,7 @@ public class GridLayout extends ViewGroup {
if (c.getClass() == Space.class) {
return 0;
}
- return mDefaultGap / 2;
+ return defaultGap / 2;
}
private int getDefaultMargin(View c, boolean isAtEdge, boolean horizontal, boolean leading) {
@@ -555,18 +581,18 @@ public class GridLayout extends ViewGroup {
}
private int getDefaultMarginValue(View c, LayoutParams p, boolean horizontal, boolean leading) {
- if (!mUseDefaultMargins) {
+ if (!useDefaultMargins) {
return 0;
}
Spec spec = horizontal ? p.columnSpec : p.rowSpec;
- Axis axis = horizontal ? mHorizontalAxis : mVerticalAxis;
+ Axis axis = horizontal ? horizontalAxis : verticalAxis;
Interval span = spec.span;
boolean isAtEdge = leading ? (span.min == 0) : (span.max == axis.getCount());
return getDefaultMargin(c, isAtEdge, horizontal, leading);
}
- private int getMargin1(View view, boolean horizontal, boolean leading) {
+ int getMargin1(View view, boolean horizontal, boolean leading) {
LayoutParams lp = getLayoutParams(view);
int margin = horizontal ?
(leading ? lp.leftMargin : lp.rightMargin) :
@@ -575,10 +601,10 @@ public class GridLayout extends ViewGroup {
}
private int getMargin(View view, boolean horizontal, boolean leading) {
- if (mAlignmentMode == ALIGN_MARGINS) {
+ if (alignmentMode == ALIGN_MARGINS) {
return getMargin1(view, horizontal, leading);
} else {
- Axis axis = horizontal ? mHorizontalAxis : mVerticalAxis;
+ Axis axis = horizontal ? horizontalAxis : verticalAxis;
int[] margins = leading ? axis.getLeadingMargins() : axis.getTrailingMargins();
LayoutParams lp = getLayoutParams(view);
Spec spec = horizontal ? lp.columnSpec : lp.rowSpec;
@@ -591,10 +617,6 @@ public class GridLayout extends ViewGroup {
return getMargin(child, horizontal, true) + getMargin(child, horizontal, false);
}
- private static int valueIfDefined(int value, int defaultValue) {
- return (value != UNDEFINED) ? value : defaultValue;
- }
-
private static boolean fits(int[] a, int value, int start, int end) {
if (end > a.length) {
return false;
@@ -629,9 +651,9 @@ public class GridLayout extends ViewGroup {
// install default indices for cells that don't define them
private void validateLayoutParams() {
- final boolean horizontal = (mOrientation == HORIZONTAL);
- final int axisCount = horizontal ? mHorizontalAxis.count : mVerticalAxis.count;
- final int count = valueIfDefined(axisCount, 0);
+ final boolean horizontal = (orientation == HORIZONTAL);
+ final Axis axis = horizontal ? horizontalAxis : verticalAxis;
+ final int count = (axis.definedCount != UNDEFINED) ? axis.definedCount : 0;
int major = 0;
int minor = 0;
@@ -640,15 +662,17 @@ public class GridLayout extends ViewGroup {
for (int i = 0, N = getChildCount(); i < N; i++) {
LayoutParams lp = getLayoutParams1(getChildAt(i));
- final Interval majorRange = (horizontal ? lp.rowSpec : lp.columnSpec).span;
- final boolean majorWasDefined = (majorRange.min != UNDEFINED);
+ final Spec majorSpec = horizontal ? lp.rowSpec : lp.columnSpec;
+ final Interval majorRange = majorSpec.span;
+ final boolean majorWasDefined = majorSpec.startDefined;
final int majorSpan = majorRange.size();
if (majorWasDefined) {
major = majorRange.min;
}
- final Interval minorRange = (horizontal ? lp.columnSpec : lp.rowSpec).span;
- final boolean minorWasDefined = (minorRange.min != UNDEFINED);
+ final Spec minorSpec = horizontal ? lp.columnSpec : lp.rowSpec;
+ final Interval minorRange = minorSpec.span;
+ final boolean minorWasDefined = minorSpec.startDefined;
final int minorSpan = clip(minorRange, minorWasDefined, count);
if (minorWasDefined) {
minor = minorRange.min;
@@ -685,9 +709,9 @@ public class GridLayout extends ViewGroup {
}
private void invalidateStructure() {
- mLayoutParamsValid = false;
- mHorizontalAxis.invalidateStructure();
- mVerticalAxis.invalidateStructure();
+ layoutParamsValid = false;
+ horizontalAxis.invalidateStructure();
+ verticalAxis.invalidateStructure();
// This can end up being done twice. Better twice than not at all.
invalidateValues();
}
@@ -695,9 +719,9 @@ public class GridLayout extends ViewGroup {
private void invalidateValues() {
// Need null check because requestLayout() is called in View's initializer,
// before we are set up.
- if (mHorizontalAxis != null && mVerticalAxis != null) {
- mHorizontalAxis.invalidateValues();
- mVerticalAxis.invalidateValues();
+ if (horizontalAxis != null && verticalAxis != null) {
+ horizontalAxis.invalidateValues();
+ verticalAxis.invalidateValues();
}
}
@@ -705,10 +729,10 @@ public class GridLayout extends ViewGroup {
return (LayoutParams) c.getLayoutParams();
}
- private LayoutParams getLayoutParams(View c) {
- if (!mLayoutParamsValid) {
+ final LayoutParams getLayoutParams(View c) {
+ if (!layoutParamsValid) {
validateLayoutParams();
- mLayoutParamsValid = true;
+ layoutParamsValid = true;
}
return getLayoutParams1(c);
}
@@ -752,7 +776,7 @@ public class GridLayout extends ViewGroup {
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.argb(50, 255, 255, 255));
- int[] xs = mHorizontalAxis.locations;
+ int[] xs = horizontalAxis.locations;
if (xs != null) {
for (int i = 0, length = xs.length; i < length; i++) {
int x = xs[i];
@@ -760,7 +784,7 @@ public class GridLayout extends ViewGroup {
}
}
- int[] ys = mVerticalAxis.locations;
+ int[] ys = verticalAxis.locations;
if (ys != null) {
for (int i = 0, length = ys.length; i < length; i++) {
int y = ys[i];
@@ -822,7 +846,7 @@ public class GridLayout extends ViewGroup {
// Measurement
- private boolean isGone(View c) {
+ final boolean isGone(View c) {
return c.getVisibility() == View.GONE;
}
@@ -847,8 +871,8 @@ public class GridLayout extends ViewGroup {
protected void onMeasure(int widthSpec, int heightSpec) {
measureChildrenWithMargins(widthSpec, heightSpec);
- int width = getPaddingLeft() + mHorizontalAxis.getMeasure(widthSpec) + getPaddingRight();
- int height = getPaddingTop() + mVerticalAxis.getMeasure(heightSpec) + getPaddingBottom();
+ int width = getPaddingLeft() + horizontalAxis.getMeasure(widthSpec) + getPaddingRight();
+ int height = getPaddingTop() + verticalAxis.getMeasure(heightSpec) + getPaddingBottom();
int measuredWidth = Math.max(width, getSuggestedMinimumWidth());
int measuredHeight = Math.max(height, getSuggestedMinimumHeight());
@@ -866,7 +890,7 @@ public class GridLayout extends ViewGroup {
return horizontal ? c.getMeasuredWidth() : c.getMeasuredHeight();
}
- private int getMeasurementIncludingMargin(View c, boolean horizontal) {
+ final int getMeasurementIncludingMargin(View c, boolean horizontal) {
if (isGone(c)) {
return 0;
}
@@ -879,7 +903,7 @@ public class GridLayout extends ViewGroup {
invalidateValues();
}
- private Alignment getAlignment(Alignment alignment, boolean horizontal) {
+ final Alignment getAlignment(Alignment alignment, boolean horizontal) {
return (alignment != UNDEFINED_ALIGNMENT) ? alignment :
(horizontal ? LEFT : BASELINE);
}
@@ -908,11 +932,11 @@ public class GridLayout extends ViewGroup {
int paddingRight = getPaddingRight();
int paddingBottom = getPaddingBottom();
- mHorizontalAxis.layout(targetWidth - paddingLeft - paddingRight);
- mVerticalAxis.layout(targetHeight - paddingTop - paddingBottom);
+ horizontalAxis.layout(targetWidth - paddingLeft - paddingRight);
+ verticalAxis.layout(targetHeight - paddingTop - paddingBottom);
- int[] hLocations = mHorizontalAxis.getLocations();
- int[] vLocations = mVerticalAxis.getLocations();
+ int[] hLocations = horizontalAxis.getLocations();
+ int[] vLocations = verticalAxis.getLocations();
for (int i = 0, N = getChildCount(); i < N; i++) {
View c = getChildAt(i);
@@ -941,8 +965,8 @@ public class GridLayout extends ViewGroup {
int dx, dy;
- Bounds colBounds = mHorizontalAxis.getGroupBounds().getValue(i);
- Bounds rowBounds = mVerticalAxis.getGroupBounds().getValue(i);
+ Bounds colBounds = horizontalAxis.getGroupBounds().getValue(i);
+ Bounds rowBounds = verticalAxis.getGroupBounds().getValue(i);
// Gravity offsets: the location of the alignment group relative to its cell group.
//noinspection NullableProblems
@@ -990,7 +1014,7 @@ public class GridLayout extends ViewGroup {
distinguished by the "horizontal" flag which is true for the horizontal axis and false
for the vertical one.
*/
- private class Axis {
+ final class Axis {
private static final int MIN_VALUE = -1000000;
private static final int NEW = 0;
@@ -999,9 +1023,8 @@ public class GridLayout extends ViewGroup {
public final boolean horizontal;
- public int count = UNDEFINED;
- public boolean countValid = false;
- public boolean countWasExplicitySet = false;
+ public int definedCount = UNDEFINED;
+ private int inferredCount = UNDEFINED;
PackedMap<Spec, Bounds> groupBounds;
public boolean groupBoundsValid = false;
@@ -1024,7 +1047,7 @@ public class GridLayout extends ViewGroup {
public int[] locations;
public boolean locationsValid = false;
- private boolean mOrderPreserved = DEFAULT_ORDER_PRESERVED;
+ boolean orderPreserved = DEFAULT_ORDER_PRESERVED;
private MutableInt parentMin = new MutableInt(0);
private MutableInt parentMax = new MutableInt(-MAX_SIZE);
@@ -1046,25 +1069,27 @@ public class GridLayout extends ViewGroup {
return count == -1 ? UNDEFINED : count;
}
- public int getCount() {
- if (!countValid) {
- count = max(0, maxIndex()); // if there are no cells, the count is zero
- countValid = true;
+ private int getInferredCount() {
+ if (inferredCount == UNDEFINED) {
+ inferredCount = max(0, maxIndex()); // if there are no cells, actual count is zero
}
- return count;
+ return inferredCount;
+ }
+
+ public int getCount() {
+ return max(definedCount, getInferredCount());
}
public void setCount(int count) {
- this.count = count;
- this.countWasExplicitySet = count != UNDEFINED;
+ this.definedCount = count;
}
public boolean isOrderPreserved() {
- return mOrderPreserved;
+ return orderPreserved;
}
public void setOrderPreserved(boolean orderPreserved) {
- mOrderPreserved = orderPreserved;
+ this.orderPreserved = orderPreserved;
invalidateStructure();
}
@@ -1093,7 +1118,7 @@ public class GridLayout extends ViewGroup {
}
}
- private PackedMap<Spec, Bounds> getGroupBounds() {
+ public PackedMap<Spec, Bounds> getGroupBounds() {
if (groupBounds == null) {
groupBounds = createGroupBounds();
}
@@ -1183,7 +1208,7 @@ public class GridLayout extends ViewGroup {
// Group arcs by their first vertex, returning an array of arrays.
// This is linear in the number of arcs.
- private Arc[][] groupArcsByFirstVertex(Arc[] arcs) {
+ Arc[][] groupArcsByFirstVertex(Arc[] arcs) {
int N = getCount() + 1; // the number of vertices
Arc[][] result = new Arc[N][];
int[] sizes = new int[N];
@@ -1262,7 +1287,7 @@ public class GridLayout extends ViewGroup {
addComponentSizes(maxs, getBackwardLinks());
// Add ordering constraints to prevent row/col sizes from going negative
- if (mOrderPreserved) {
+ if (orderPreserved) {
// Add a constraint for every row/col
for (int i = 0; i < getCount(); i++) {
include(mins, new Interval(i, i + 1), new MutableInt(0));
@@ -1315,6 +1340,48 @@ public class GridLayout extends ViewGroup {
return false;
}
+ private void init(int[] locations) {
+ Arrays.fill(locations, MIN_VALUE);
+ locations[0] = 0;
+ }
+
+ private String arcsToString(List<Arc> arcs) {
+ String var = horizontal ? "c" : "r";
+ StringBuilder result = new StringBuilder();
+ boolean first = false;
+ for(Arc arc : arcs) {
+ if (!first) {
+ first = true;
+ } else {
+ result =result.append(", ");
+ }
+ int src = arc.span.min;
+ int dst = arc.span.max;
+ int value = arc.value.value;
+ result.append((src < dst) ?
+ var + dst + " - " + var + src + " > " + value :
+ var + src + " - " + var + dst + " < " + -value);
+
+ }
+ return result.toString();
+ }
+
+ private void logError(String axisName, Arc[] arcs, boolean[] culprits0) {
+ List<Arc> culprits = new ArrayList<Arc>();
+ List<Arc> removed = new ArrayList<Arc>();
+ for (int c = 0; c < arcs.length; c++) {
+ Arc arc = arcs[c];
+ if (culprits0[c]) {
+ culprits.add(arc);
+ }
+ if (!arc.valid) {
+ removed.add(arc);
+ }
+ }
+ Log.d(TAG, axisName + " constraints: " + arcsToString(culprits) + " are inconsistent; "
+ + "permanently removing: " + arcsToString(removed) + ". ");
+ }
+
/*
Bellman-Ford variant - modified to reduce typical running time from O(N^2) to O(N)
@@ -1350,51 +1417,54 @@ public class GridLayout extends ViewGroup {
completes in O(N) steps with very low constants.
*/
private void solve(Arc[] arcs, int[] locations) {
- String axis = horizontal ? "horizontal" : "vertical";
+ String axisName = horizontal ? "horizontal" : "vertical";
int N = getCount() + 1; // The number of vertices is the number of columns/rows + 1.
+ boolean[] originalCulprits = null;
- // We take one extra pass over traditional Bellman-Ford (and omit their final step)
- for (int i = 0; i < N; i++) {
- boolean changed = false;
- for (int j = 0, length = arcs.length; j < length; j++) {
- changed |= relax(locations, arcs[j]);
- }
- if (!changed) {
- if (DEBUG) {
- Log.v(TAG, axis + " iteration completed in " + (1 + i) + " steps of " + N);
+ for (int p = 0; p < arcs.length; p++) {
+ init(locations);
+
+ // We take one extra pass over traditional Bellman-Ford (and omit their final step)
+ for (int i = 0; i < N; i++) {
+ boolean changed = false;
+ for (int j = 0, length = arcs.length; j < length; j++) {
+ changed |= relax(locations, arcs[j]);
+ }
+ if (!changed) {
+ if (originalCulprits != null) {
+ logError(axisName, arcs, originalCulprits);
+ }
+ if (DEBUG) {
+ Log.v(TAG, axisName + " iteration completed in " +
+ (1 + i) + " steps of " + N);
+ }
+ return;
}
- return;
}
- }
- Log.d(TAG, "The " + axis + " constraints contained a contradiction. Resolving... ");
- Log.d(TAG, Arrays.toString(arcs));
+ boolean[] culprits = new boolean[arcs.length];
+ for (int i = 0; i < N; i++) {
+ for (int j = 0, length = arcs.length; j < length; j++) {
+ culprits[j] |= relax(locations, arcs[j]);
+ }
+ }
- boolean[] culprits = new boolean[arcs.length];
- for (int i = 0; i < N; i++) {
- for (int j = 0, length = arcs.length; j < length; j++) {
- culprits[j] |= relax(locations, arcs[j]);
+ if (p == 0) {
+ originalCulprits = culprits;
}
- }
- for (int i = 0; i < culprits.length; i++) {
- if (culprits[i]) {
- Arc arc = arcs[i];
- // Only remove max values, min values alone cannot be inconsistent
- if (arc.span.min < arc.span.max) {
- continue;
+
+ for (int i = 0; i < arcs.length; i++) {
+ if (culprits[i]) {
+ Arc arc = arcs[i];
+ // Only remove max values, min values alone cannot be inconsistent
+ if (arc.span.min < arc.span.max) {
+ continue;
+ }
+ arc.valid = false;
+ break;
}
- Log.d(TAG, "Removing: " + arc);
- arc.valid = false;
- break;
}
}
- solve1(arcs, locations);
- }
-
- private void solve1(Arc[] arcs, int[] a) {
- Arrays.fill(a, MIN_VALUE);
- a[0] = 0;
- solve(arcs, a);
}
private void computeMargins(boolean leading) {
@@ -1410,7 +1480,9 @@ public class GridLayout extends ViewGroup {
}
}
- private int[] getLeadingMargins() {
+ // External entry points
+
+ public int[] getLeadingMargins() {
if (leadingMargins == null) {
leadingMargins = new int[getCount() + 1];
}
@@ -1421,7 +1493,7 @@ public class GridLayout extends ViewGroup {
return leadingMargins;
}
- private int[] getTrailingMargins() {
+ public int[] getTrailingMargins() {
if (trailingMargins == null) {
trailingMargins = new int[getCount() + 1];
}
@@ -1433,10 +1505,10 @@ public class GridLayout extends ViewGroup {
}
private void computeLocations(int[] a) {
- solve1(getArcs(), a);
+ solve(getArcs(), a);
}
- private int[] getLocations() {
+ public int[] getLocations() {
if (locations == null) {
int N = getCount() + 1;
locations = new int[N];
@@ -1448,8 +1520,6 @@ public class GridLayout extends ViewGroup {
return locations;
}
- // External entry points
-
private int size(int[] locations) {
return max2(locations, 0) - locations[0];
}
@@ -1465,7 +1535,7 @@ public class GridLayout extends ViewGroup {
return size(getLocations());
}
- private int getMeasure(int measureSpec) {
+ public int getMeasure(int measureSpec) {
int mode = MeasureSpec.getMode(measureSpec);
int size = MeasureSpec.getSize(measureSpec);
switch (mode) {
@@ -1485,13 +1555,13 @@ public class GridLayout extends ViewGroup {
}
}
- private void layout(int size) {
+ public void layout(int size) {
setParentConstraints(size, size);
getLocations();
}
- private void invalidateStructure() {
- countValid = false;
+ public void invalidateStructure() {
+ inferredCount = UNDEFINED;
groupBounds = null;
forwardLinks = null;
@@ -1506,7 +1576,7 @@ public class GridLayout extends ViewGroup {
invalidateValues();
}
- private void invalidateValues() {
+ public void invalidateValues() {
groupBoundsValid = false;
forwardLinksValid = false;
backwardLinksValid = false;
@@ -1536,9 +1606,22 @@ public class GridLayout extends ViewGroup {
* both aspects of alignment within the cell group. It is also possible to specify a child's
* alignment within its cell group by using the {@link GridLayout.LayoutParams#setGravity(int)}
* method.
- * <p>
- * See {@link GridLayout} for a description of the conventions used by GridLayout
- * in reference to grid indices.
+ *
+ * <h4>WRAP_CONTENT and MATCH_PARENT</h4>
+ *
+ * Because the default values of the {@link #width} and {@link #height}
+ * properties are both {@link #WRAP_CONTENT}, this value never needs to be explicitly
+ * declared in the layout parameters of GridLayout's children. In addition,
+ * GridLayout does not distinguish the special size value {@link #MATCH_PARENT} from
+ * {@link #WRAP_CONTENT}. A component's ability to expand to the size of the parent is
+ * instead controlled by the principle of <em>flexibility</em>,
+ * as discussed in {@link GridLayout}.
+ *
+ * <h4>Summary</h4>
+ *
+ * You should not need to use either of the special size values:
+ * {@code WRAP_CONTENT} or {@code MATCH_PARENT} when configuring the children of
+ * a GridLayout.
*
* <h4>Default values</h4>
*
@@ -1561,12 +1644,17 @@ public class GridLayout extends ViewGroup {
* {@link GridLayout#setUseDefaultMargins(boolean) useDefaultMargins} is
* {@code false}; otherwise {@link #UNDEFINED}, to
* indicate that a default value should be computed on demand. </li>
- * <li>{@link #rowSpec}{@code .span} = {@code [0, 1]} </li>
- * <li>{@link #rowSpec}{@code .alignment} = {@link #BASELINE} </li>
- * <li>{@link #columnSpec}{@code .span} = {@code [0, 1]} </li>
- * <li>{@link #columnSpec}{@code .alignment} = {@link #LEFT} </li>
+ * <li>{@link #rowSpec}<code>.row</code> = {@link #UNDEFINED} </li>
+ * <li>{@link #rowSpec}<code>.rowSpan</code> = 1 </li>
+ * <li>{@link #rowSpec}<code>.alignment</code> = {@link #BASELINE} </li>
+ * <li>{@link #columnSpec}<code>.column</code> = {@link #UNDEFINED} </li>
+ * <li>{@link #columnSpec}<code>.columnSpan</code> = 1 </li>
+ * <li>{@link #columnSpec}<code>.alignment</code> = {@link #LEFT} </li>
* </ul>
*
+ * See {@link GridLayout} for a more complete description of the conventions
+ * used by GridLayout in the interpretation of the properties of this class.
+ *
* @attr ref android.R.styleable#GridLayout_Layout_layout_row
* @attr ref android.R.styleable#GridLayout_Layout_layout_rowSpan
* @attr ref android.R.styleable#GridLayout_Layout_layout_column
@@ -1606,15 +1694,16 @@ public class GridLayout extends ViewGroup {
// Instance variables
/**
- * The spec that specifies the vertical characteristics of the cell group
+ * The spec that defines the vertical characteristics of the cell group
* described by these layout parameters.
*/
- public Spec rowSpec;
+ public Spec rowSpec = Spec.UNDEFINED;
+
/**
- * The spec that specifies the horizontal characteristics of the cell group
+ * The spec that defines the horizontal characteristics of the cell group
* described by these layout parameters.
*/
- public Spec columnSpec;
+ public Spec columnSpec = Spec.UNDEFINED;
// Constructors
@@ -1646,7 +1735,7 @@ public class GridLayout extends ViewGroup {
* Constructs a new LayoutParams with default values as defined in {@link LayoutParams}.
*/
public LayoutParams() {
- this(spec(UNDEFINED), spec(UNDEFINED));
+ this(Spec.UNDEFINED, Spec.UNDEFINED);
}
// Copying constructors
@@ -1670,8 +1759,8 @@ public class GridLayout extends ViewGroup {
*/
public LayoutParams(LayoutParams that) {
super(that);
- this.rowSpec = new Spec(that.rowSpec);
- this.columnSpec = new Spec(that.columnSpec);
+ this.rowSpec = that.rowSpec;
+ this.columnSpec = that.columnSpec;
}
// AttributeSet constructors
@@ -1750,11 +1839,11 @@ public class GridLayout extends ViewGroup {
this.height = attributes.getLayoutDimension(heightAttr, DEFAULT_HEIGHT);
}
- private void setRowSpecSpan(Interval span) {
+ final void setRowSpecSpan(Interval span) {
rowSpec = rowSpec.copyWriteSpan(span);
}
- private void setColumnSpecSpan(Interval span) {
+ final void setColumnSpecSpan(Interval span) {
columnSpec = columnSpec.copyWriteSpan(span);
}
}
@@ -1763,7 +1852,7 @@ public class GridLayout extends ViewGroup {
In place of a HashMap from span to Int, use an array of key/value pairs - stored in Arcs.
Add the mutables completesCycle flag to avoid creating another hash table for detecting cycles.
*/
- private static class Arc {
+ final static class Arc {
public final Interval span;
public final MutableInt value;
public boolean valid = true;
@@ -1781,18 +1870,18 @@ public class GridLayout extends ViewGroup {
// A mutable Integer - used to avoid heap allocation during the layout operation
- private static class MutableInt {
+ final static class MutableInt {
public int value;
- private MutableInt() {
+ public MutableInt() {
reset();
}
- private MutableInt(int value) {
+ public MutableInt(int value) {
this.value = value;
}
- private void reset() {
+ public void reset() {
value = Integer.MIN_VALUE;
}
@@ -1802,7 +1891,7 @@ public class GridLayout extends ViewGroup {
}
}
- private static class Assoc<K, V> extends ArrayList<Pair<K, V>> {
+ final static class Assoc<K, V> extends ArrayList<Pair<K, V>> {
private final Class<K> keyType;
private final Class<V> valueType;
@@ -1811,7 +1900,7 @@ public class GridLayout extends ViewGroup {
this.valueType = valueType;
}
- private static <K, V> Assoc<K, V> of(Class<K> keyType, Class<V> valueType) {
+ public static <K, V> Assoc<K, V> of(Class<K> keyType, Class<V> valueType) {
return new Assoc<K, V>(keyType, valueType);
}
@@ -1847,7 +1936,7 @@ public class GridLayout extends ViewGroup {
rather than using (and storing) an implementation of Map<Key, ?>.
*/
@SuppressWarnings(value = "unchecked")
- private static class PackedMap<K, V> {
+ final static class PackedMap<K, V> {
public final int[] index;
public final K[] keys;
public final V[] values;
@@ -1859,7 +1948,7 @@ public class GridLayout extends ViewGroup {
this.values = compact(values, index);
}
- private V getValue(int i) {
+ public V getValue(int i) {
return values[index[i]];
}
@@ -1907,7 +1996,7 @@ public class GridLayout extends ViewGroup {
group to Bounds and to loop through all Views in the group taking the maximum
of the values for each View.
*/
- private static class Bounds {
+ static class Bounds {
public int before;
public int after;
public int flexibility; // we're flexible iff all included specs are flexible
@@ -1969,7 +2058,7 @@ public class GridLayout extends ViewGroup {
* Intervals are often written as {@code [min, max]} and represent the set of values
* {@code x} such that {@code min <= x < max}.
*/
- static class Interval {
+ final static class Interval {
/**
* The minimum value.
*/
@@ -1995,11 +2084,11 @@ public class GridLayout extends ViewGroup {
this.max = max;
}
- private int size() {
+ int size() {
return max - min;
}
- private Interval inverse() {
+ Interval inverse() {
return new Interval(max, min);
}
@@ -2062,32 +2151,31 @@ public class GridLayout extends ViewGroup {
* For column groups, this specifies the horizontal alignment.
*/
public static class Spec {
+ static final Spec UNDEFINED = spec(GridLayout.UNDEFINED);
+
+ final boolean startDefined;
final Interval span;
final Alignment alignment;
- private Spec(Interval span, Alignment alignment) {
+ private Spec(boolean startDefined, Interval span, Alignment alignment) {
+ this.startDefined = startDefined;
this.span = span;
this.alignment = alignment;
}
- /* Copying constructor */
- private Spec(Spec that) {
- this(that.span, that.alignment);
- }
-
- private Spec(int start, int size, Alignment alignment) {
- this(new Interval(start, start + size), alignment);
+ private Spec(boolean startDefined, int start, int size, Alignment alignment) {
+ this(startDefined, new Interval(start, start + size), alignment);
}
- private Spec copyWriteSpan(Interval span) {
- return new Spec(span, alignment);
+ final Spec copyWriteSpan(Interval span) {
+ return new Spec(startDefined, span, alignment);
}
- private Spec copyWriteAlignment(Alignment alignment) {
- return new Spec(span, alignment);
+ final Spec copyWriteAlignment(Alignment alignment) {
+ return new Spec(startDefined, span, alignment);
}
- int getFlexibility() {
+ final int getFlexibility() {
return (alignment == UNDEFINED_ALIGNMENT) ? INFLEXIBLE : CAN_STRETCH;
}
@@ -2143,7 +2231,7 @@ public class GridLayout extends ViewGroup {
* @param alignment the alignment
*/
public static Spec spec(int start, int size, Alignment alignment) {
- return new Spec(start, size, alignment);
+ return new Spec(start != UNDEFINED, start, size, alignment);
}
/**
@@ -2246,7 +2334,7 @@ public class GridLayout extends ViewGroup {
}
}
- private static final Alignment UNDEFINED_ALIGNMENT = new Alignment() {
+ static final Alignment UNDEFINED_ALIGNMENT = new Alignment() {
public int getAlignmentValue(View view, int viewSize) {
return UNDEFINED;
}
@@ -2367,7 +2455,7 @@ public class GridLayout extends ViewGroup {
}
};
- private static boolean canStretch(int flexibility) {
+ static boolean canStretch(int flexibility) {
return (flexibility & CAN_STRETCH) != 0;
}
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 9ce8fe077582..1bbc50152a8d 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -569,7 +569,7 @@ public class HorizontalScrollView extends FrameLayout {
final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
(overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);
- if (canOverscroll && overScrollBy(deltaX, 0, mScrollX, 0, range, 0,
+ if (overScrollBy(deltaX, 0, mScrollX, 0, range, 0,
mOverscrollDistance, 0, true)) {
// Break our velocity if we hit a scroll barrier.
mVelocityTracker.clear();
@@ -602,16 +602,12 @@ public class HorizontalScrollView extends FrameLayout {
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
int initialVelocity = (int) velocityTracker.getXVelocity(mActivePointerId);
- final int right = getScrollRange();
- final int overscrollMode = getOverScrollMode();
- final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
- (overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && right > 0);
-
- if (getChildCount() > 0 && canOverscroll) {
+ if (getChildCount() > 0) {
if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
fling(-initialVelocity);
} else {
- if (mScroller.springBack(mScrollX, mScrollY, 0, right, 0, 0)) {
+ if (mScroller.springBack(mScrollX, mScrollY, 0,
+ getScrollRange(), 0, 0)) {
invalidate();
}
}
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index 690164c11430..f2ea3fc1d6d2 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -75,6 +75,7 @@ public class MediaController extends FrameLayout {
private WindowManager mWindowManager;
private Window mWindow;
private View mDecor;
+ private WindowManager.LayoutParams mDecorLayoutParams;
private ProgressBar mProgress;
private TextView mEndTime, mCurrentTime;
private boolean mShowing;
@@ -112,14 +113,12 @@ public class MediaController extends FrameLayout {
super(context);
mContext = context;
mUseFastForward = useFastForward;
+ initFloatingWindowLayout();
initFloatingWindow();
}
public MediaController(Context context) {
- super(context);
- mContext = context;
- mUseFastForward = true;
- initFloatingWindow();
+ this(context, true);
}
private void initFloatingWindow() {
@@ -142,6 +141,48 @@ public class MediaController extends FrameLayout {
requestFocus();
}
+ // Allocate and initialize the static parts of mDecorLayoutParams. Must
+ // also call updateFloatingWindowLayout() to fill in the dynamic parts
+ // (y and width) before mDecorLayoutParams can be used.
+ private void initFloatingWindowLayout() {
+ mDecorLayoutParams = new WindowManager.LayoutParams();
+ WindowManager.LayoutParams p = mDecorLayoutParams;
+ p.gravity = Gravity.TOP;
+ p.height = LayoutParams.WRAP_CONTENT;
+ p.x = 0;
+ p.format = PixelFormat.TRANSLUCENT;
+ p.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
+ p.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
+ | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
+ | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
+ p.token = null;
+ p.windowAnimations = 0; // android.R.style.DropDownAnimationDown;
+ }
+
+ // Update the dynamic parts of mDecorLayoutParams
+ // Must be called with mAnchor != NULL.
+ private void updateFloatingWindowLayout() {
+ int [] anchorPos = new int[2];
+ mAnchor.getLocationOnScreen(anchorPos);
+
+ WindowManager.LayoutParams p = mDecorLayoutParams;
+ p.width = mAnchor.getWidth();
+ p.y = anchorPos[1] + mAnchor.getHeight();
+ }
+
+ // This is called whenever mAnchor's layout bound changes
+ private OnLayoutChangeListener mLayoutChangeListener =
+ new OnLayoutChangeListener() {
+ public void onLayoutChange(View v, int left, int top, int right,
+ int bottom, int oldLeft, int oldTop, int oldRight,
+ int oldBottom) {
+ updateFloatingWindowLayout();
+ if (mShowing) {
+ mWindowManager.updateViewLayout(mDecor, mDecorLayoutParams);
+ }
+ }
+ };
+
private OnTouchListener mTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
@@ -164,7 +205,13 @@ public class MediaController extends FrameLayout {
* @param view The view to which to anchor the controller when it is visible.
*/
public void setAnchorView(View view) {
+ if (mAnchor != null) {
+ mAnchor.removeOnLayoutChangeListener(mLayoutChangeListener);
+ }
mAnchor = view;
+ if (mAnchor != null) {
+ mAnchor.addOnLayoutChangeListener(mLayoutChangeListener);
+ }
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -279,30 +326,14 @@ public class MediaController extends FrameLayout {
* the controller until hide() is called.
*/
public void show(int timeout) {
-
if (!mShowing && mAnchor != null) {
setProgress();
if (mPauseButton != null) {
mPauseButton.requestFocus();
}
disableUnsupportedButtons();
-
- int [] anchorpos = new int[2];
- mAnchor.getLocationOnScreen(anchorpos);
-
- WindowManager.LayoutParams p = new WindowManager.LayoutParams();
- p.gravity = Gravity.TOP;
- p.width = mAnchor.getWidth();
- p.height = LayoutParams.WRAP_CONTENT;
- p.x = 0;
- p.y = anchorpos[1] + mAnchor.getHeight() - p.height;
- p.format = PixelFormat.TRANSLUCENT;
- p.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
- p.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
- | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
- p.token = null;
- p.windowAnimations = 0; // android.R.style.DropDownAnimationDown;
- mWindowManager.addView(mDecor, p);
+ updateFloatingWindowLayout();
+ mWindowManager.addView(mDecor, mDecorLayoutParams);
mShowing = true;
}
updatePausePlay();
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 5345fa4d722b..b4c844b121f9 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -16,13 +16,10 @@
package android.widget;
-import com.android.internal.R;
-
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
import android.annotation.Widget;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -30,8 +27,8 @@ import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
-import android.graphics.Rect;
import android.graphics.Paint.Align;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.InputFilter;
import android.text.InputType;
@@ -43,16 +40,18 @@ import android.util.SparseArray;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
+import android.view.LayoutInflater.Filter;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
-import android.view.LayoutInflater.Filter;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.animation.DecelerateInterpolator;
import android.view.inputmethod.InputMethodManager;
+import com.android.internal.R;
+
/**
* A widget that enables the user to select a number form a predefined range.
* The widget presents an input filed and up and down buttons for selecting the
@@ -91,6 +90,12 @@ public class NumberPicker extends LinearLayout {
private static final int SELECTOR_ADJUSTMENT_DURATION_MILLIS = 800;
/**
+ * The duration of scrolling to the next/previous value while changing
+ * the current value by one, i.e. increment or decrement.
+ */
+ private static final int CHANGE_CURRENT_BY_ONE_SCROLL_DURATION = 300;
+
+ /**
* The the delay for showing the input controls after a single tap on the
* input text.
*/
@@ -98,24 +103,59 @@ public class NumberPicker extends LinearLayout {
.getDoubleTapTimeout();
/**
- * The update step for incrementing the current value.
+ * The strength of fading in the top and bottom while drawing the selector.
*/
- private static final int UPDATE_STEP_INCREMENT = 1;
+ private static final float TOP_AND_BOTTOM_FADING_EDGE_STRENGTH = 0.9f;
/**
- * The update step for decrementing the current value.
+ * The default unscaled height of the selection divider.
*/
- private static final int UPDATE_STEP_DECREMENT = -1;
+ private static final int UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT = 2;
/**
- * The strength of fading in the top and bottom while drawing the selector.
+ * In this state the selector wheel is not shown.
*/
- private static final float TOP_AND_BOTTOM_FADING_EDGE_STRENGTH = 0.9f;
+ private static final int SELECTOR_WHEEL_STATE_NONE = 0;
/**
- * The default unscaled height of the selection divider.
+ * In this state the selector wheel is small.
+ */
+ private static final int SELECTOR_WHEEL_STATE_SMALL = 1;
+
+ /**
+ * In this state the selector wheel is large.
+ */
+ private static final int SELECTOR_WHEEL_STATE_LARGE = 2;
+
+ /**
+ * The alpha of the selector wheel when it is bright.
*/
- private final int UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT = 2;
+ private static final int SELECTOR_WHEEL_BRIGHT_ALPHA = 255;
+
+ /**
+ * The alpha of the selector wheel when it is dimmed.
+ */
+ private static final int SELECTOR_WHEEL_DIM_ALPHA = 60;
+
+ /**
+ * The alpha for the increment/decrement button when it is transparent.
+ */
+ private static final int BUTTON_ALPHA_TRANSPARENT = 0;
+
+ /**
+ * The alpha for the increment/decrement button when it is opaque.
+ */
+ private static final int BUTTON_ALPHA_OPAQUE = 1;
+
+ /**
+ * The property for setting the selector paint.
+ */
+ private static final String PROPERTY_SELECTOR_PAINT_ALPHA = "selectorPaintAlpha";
+
+ /**
+ * The property for setting the increment/decrement button alpha.
+ */
+ private static final String PROPERTY_BUTTON_ALPHA = "alpha";
/**
* The numbers accepted by the input text's {@link Filter}
@@ -168,6 +208,11 @@ public class NumberPicker extends LinearLayout {
private final int mTextSize;
/**
+ * The height of the gap between text elements if the selector wheel.
+ */
+ private int mSelectorTextGapHeight;
+
+ /**
* The values to be displayed instead the indices.
*/
private String[] mDisplayedValues;
@@ -223,7 +268,7 @@ public class NumberPicker extends LinearLayout {
/**
* The {@link Paint} for drawing the selector.
*/
- private final Paint mSelectorPaint;
+ private final Paint mSelectorWheelPaint;
/**
* The height of a selector element (text + gap).
@@ -266,10 +311,10 @@ public class NumberPicker extends LinearLayout {
private AdjustScrollerCommand mAdjustScrollerCommand;
/**
- * Handle to the reusable command for updating the current value from long
- * press.
+ * Handle to the reusable command for changing the current value from long
+ * press by one.
*/
- private UpdateValueFromLongPressCommand mUpdateFromLongPressCommand;
+ private ChangeCurrentByOneFromLongPressCommand mChangeCurrentByOneFromLongPressCommand;
/**
* {@link Animator} for showing the up/down arrows.
@@ -277,6 +322,11 @@ public class NumberPicker extends LinearLayout {
private final AnimatorSet mShowInputControlsAnimator;
/**
+ * {@link Animator} for dimming the selector wheel.
+ */
+ private final Animator mDimSelectorWheelAnimator;
+
+ /**
* The Y position of the last down event.
*/
private float mLastDownEventY;
@@ -297,9 +347,9 @@ public class NumberPicker extends LinearLayout {
private boolean mAdjustScrollerOnUpEvent;
/**
- * Flag if to draw the selector wheel.
+ * The state of the selector wheel.
*/
- private boolean mDrawSelectorWheel;
+ private int mSelectorWheelState;
/**
* Determines speed during touch scrolling.
@@ -362,6 +412,11 @@ public class NumberPicker extends LinearLayout {
private final long mShowInputControlsAnimimationDuration;
/**
+ * Flag whether the scoll wheel and the fading edges have been initialized.
+ */
+ private boolean mScrollWheelAndFadingEdgesInitialized;
+
+ /**
* Interface to listen for changes of the current value.
*/
public interface OnValueChangeListener {
@@ -473,7 +528,7 @@ public class NumberPicker extends LinearLayout {
// the fading edge effect implemented by View and we need our
// draw() method to be called. Therefore, we declare we will draw.
setWillNotDraw(false);
- setDrawScrollWheel(false);
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_NONE);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
@@ -483,9 +538,9 @@ public class NumberPicker extends LinearLayout {
public void onClick(View v) {
mInputText.clearFocus();
if (v.getId() == R.id.increment) {
- changeCurrent(mValue + 1);
+ changeCurrentByOne(true);
} else {
- changeCurrent(mValue - 1);
+ changeCurrentByOne(false);
}
}
};
@@ -494,9 +549,9 @@ public class NumberPicker extends LinearLayout {
public boolean onLongClick(View v) {
mInputText.clearFocus();
if (v.getId() == R.id.increment) {
- postUpdateValueFromLongPress(UPDATE_STEP_INCREMENT);
+ postChangeCurrentByOneFromLongPress(true);
} else {
- postUpdateValueFromLongPress(UPDATE_STEP_DECREMENT);
+ postChangeCurrentByOneFromLongPress(false);
}
return true;
}
@@ -516,10 +571,17 @@ public class NumberPicker extends LinearLayout {
mInputText = (EditText) findViewById(R.id.numberpicker_input);
mInputText.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
+ InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
if (hasFocus) {
mInputText.selectAll();
+ if (inputMethodManager != null) {
+ inputMethodManager.showSoftInput(mInputText, 0);
+ }
} else {
mInputText.setSelection(0, 0);
+ if (inputMethodManager != null) {
+ inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
+ }
validateInputTextView(v);
}
}
@@ -548,16 +610,17 @@ public class NumberPicker extends LinearLayout {
ColorStateList colors = mInputText.getTextColors();
int color = colors.getColorForState(ENABLED_STATE_SET, Color.WHITE);
paint.setColor(color);
- mSelectorPaint = paint;
+ mSelectorWheelPaint = paint;
// create the animator for showing the input controls
- final ValueAnimator fadeScroller = ObjectAnimator.ofInt(this, "selectorPaintAlpha", 255, 0);
+ mDimSelectorWheelAnimator = ObjectAnimator.ofInt(this, PROPERTY_SELECTOR_PAINT_ALPHA,
+ SELECTOR_WHEEL_BRIGHT_ALPHA, SELECTOR_WHEEL_DIM_ALPHA);
final ObjectAnimator showIncrementButton = ObjectAnimator.ofFloat(mIncrementButton,
- "alpha", 0, 1);
+ PROPERTY_BUTTON_ALPHA, BUTTON_ALPHA_TRANSPARENT, BUTTON_ALPHA_OPAQUE);
final ObjectAnimator showDecrementButton = ObjectAnimator.ofFloat(mDecrementButton,
- "alpha", 0, 1);
+ PROPERTY_BUTTON_ALPHA, BUTTON_ALPHA_TRANSPARENT, BUTTON_ALPHA_OPAQUE);
mShowInputControlsAnimator = new AnimatorSet();
- mShowInputControlsAnimator.playTogether(fadeScroller, showIncrementButton,
+ mShowInputControlsAnimator.playTogether(mDimSelectorWheelAnimator, showIncrementButton,
showDecrementButton);
mShowInputControlsAnimator.addListener(new AnimatorListenerAdapter() {
private boolean mCanceled = false;
@@ -566,11 +629,9 @@ public class NumberPicker extends LinearLayout {
public void onAnimationEnd(Animator animation) {
if (!mCanceled) {
// if canceled => we still want the wheel drawn
- setDrawScrollWheel(false);
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_SMALL);
}
mCanceled = false;
- mSelectorPaint.setAlpha(255);
- invalidate();
}
@Override
@@ -588,20 +649,28 @@ public class NumberPicker extends LinearLayout {
updateInputTextView();
updateIncrementAndDecrementButtonsVisibilityState();
- if (mFlingable && !isInEditMode()) {
- // Start with shown selector wheel and hidden controls. When made
- // visible hide the selector and fade-in the controls to suggest
- // fling interaction.
- setDrawScrollWheel(true);
- hideInputControls();
+ if (mFlingable) {
+ if (isInEditMode()) {
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_SMALL);
+ } else {
+ // Start with shown selector wheel and hidden controls. When made
+ // visible hide the selector and fade-in the controls to suggest
+ // fling interaction.
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_LARGE);
+ hideInputControls();
+ }
}
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- // need to do this when we know our size
- initializeScrollWheel();
+ if (!mScrollWheelAndFadingEdgesInitialized) {
+ mScrollWheelAndFadingEdgesInitialized = true;
+ // need to do all this when we know our size
+ initializeSelectorWheel();
+ initializeFadingEdges();
+ }
}
@Override
@@ -614,9 +683,10 @@ public class NumberPicker extends LinearLayout {
mLastMotionEventY = mLastDownEventY = event.getY();
removeAllCallbacks();
mShowInputControlsAnimator.cancel();
+ mDimSelectorWheelAnimator.cancel();
mBeginEditOnUpEvent = false;
mAdjustScrollerOnUpEvent = true;
- if (mDrawSelectorWheel) {
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_LARGE) {
boolean scrollersFinished = mFlingScroller.isFinished()
&& mAdjustScroller.isFinished();
if (!scrollersFinished) {
@@ -635,7 +705,7 @@ public class NumberPicker extends LinearLayout {
|| (!mDecrementButton.isShown()
&& isEventInViewHitRect(event, mDecrementButton))) {
mAdjustScrollerOnUpEvent = false;
- setDrawScrollWheel(true);
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_LARGE);
hideInputControls();
return true;
}
@@ -646,7 +716,7 @@ public class NumberPicker extends LinearLayout {
if (deltaDownY > mTouchSlop) {
mBeginEditOnUpEvent = false;
onScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
- setDrawScrollWheel(true);
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_LARGE);
hideInputControls();
return true;
}
@@ -683,12 +753,9 @@ public class NumberPicker extends LinearLayout {
break;
case MotionEvent.ACTION_UP:
if (mBeginEditOnUpEvent) {
- setDrawScrollWheel(false);
+ setSelectorWheelState(SELECTOR_WHEEL_STATE_SMALL);
showInputControls(mShowInputControlsAnimimationDuration);
mInputText.requestFocus();
- InputMethodManager imm = (InputMethodManager) getContext().getSystemService(
- Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mInputText, 0);
return true;
}
VelocityTracker velocityTracker = mVelocityTracker;
@@ -715,10 +782,18 @@ public class NumberPicker extends LinearLayout {
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
- int action = event.getActionMasked();
- if ((action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP)
- && !isEventInViewHitRect(event, mInputText)) {
- removeAllCallbacks();
+ final int action = event.getActionMasked();
+ switch (action) {
+ case MotionEvent.ACTION_MOVE:
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_LARGE) {
+ removeAllCallbacks();
+ forceCompleteChangeCurrentByOneViaScroll();
+ }
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ removeAllCallbacks();
+ break;
}
return super.dispatchTouchEvent(event);
}
@@ -743,7 +818,7 @@ public class NumberPicker extends LinearLayout {
@Override
public void computeScroll() {
- if (!mDrawSelectorWheel) {
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_NONE) {
return;
}
Scroller scroller = mFlingScroller;
@@ -777,7 +852,10 @@ public class NumberPicker extends LinearLayout {
@Override
public void scrollBy(int x, int y) {
- int[] selectorIndices = getSelectorIndices();
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_NONE) {
+ return;
+ }
+ int[] selectorIndices = mSelectorIndices;
if (!mWrapSelectorWheel && y > 0
&& selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) {
mCurrentScrollOffset = mInitialScrollOffset;
@@ -789,19 +867,19 @@ public class NumberPicker extends LinearLayout {
return;
}
mCurrentScrollOffset += y;
- while (mCurrentScrollOffset - mInitialScrollOffset >= mSelectorElementHeight) {
+ while (mCurrentScrollOffset - mInitialScrollOffset > mSelectorTextGapHeight) {
mCurrentScrollOffset -= mSelectorElementHeight;
decrementSelectorIndices(selectorIndices);
changeCurrent(selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX]);
- if (selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) {
+ if (!mWrapSelectorWheel && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) {
mCurrentScrollOffset = mInitialScrollOffset;
}
}
- while (mCurrentScrollOffset - mInitialScrollOffset <= -mSelectorElementHeight) {
+ while (mCurrentScrollOffset - mInitialScrollOffset < -mSelectorTextGapHeight) {
mCurrentScrollOffset += mSelectorElementHeight;
- incrementScrollSelectorIndices(selectorIndices);
+ incrementSelectorIndices(selectorIndices);
changeCurrent(selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX]);
- if (selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] >= mMaxValue) {
+ if (!mWrapSelectorWheel && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] >= mMaxValue) {
mCurrentScrollOffset = mInitialScrollOffset;
}
}
@@ -847,7 +925,7 @@ public class NumberPicker extends LinearLayout {
return;
}
mFormatter = formatter;
- resetSelectorWheelIndices();
+ initializeSelectorWheelIndices();
updateInputTextView();
}
@@ -890,8 +968,10 @@ public class NumberPicker extends LinearLayout {
value = mWrapSelectorWheel ? mMinValue : mMaxValue;
}
mValue = value;
+ initializeSelectorWheelIndices();
updateInputTextView();
updateIncrementAndDecrementButtonsVisibilityState();
+ invalidate();
}
/**
@@ -981,7 +1061,7 @@ public class NumberPicker extends LinearLayout {
}
boolean wrapSelectorWheel = mMaxValue - mMinValue > mSelectorIndices.length;
setWrapSelectorWheel(wrapSelectorWheel);
- resetSelectorWheelIndices();
+ initializeSelectorWheelIndices();
updateInputTextView();
}
@@ -1012,7 +1092,7 @@ public class NumberPicker extends LinearLayout {
}
boolean wrapSelectorWheel = mMaxValue - mMinValue > mSelectorIndices.length;
setWrapSelectorWheel(wrapSelectorWheel);
- resetSelectorWheelIndices();
+ initializeSelectorWheelIndices();
updateInputTextView();
}
@@ -1043,7 +1123,7 @@ public class NumberPicker extends LinearLayout {
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
updateInputTextView();
- resetSelectorWheelIndices();
+ initializeSelectorWheelIndices();
}
@Override
@@ -1080,18 +1160,19 @@ public class NumberPicker extends LinearLayout {
@Override
public void draw(Canvas canvas) {
// Dispatch draw to our children only if we are not currently running
- // the animation for simultaneously fading out the scroll wheel and
+ // the animation for simultaneously dimming the scroll wheel and
// showing in the buttons. This class takes advantage of the View
// implementation of fading edges effect to draw the selector wheel.
// However, in View.draw(), the fading is applied after all the children
// have been drawn and we do not want this fading to be applied to the
- // buttons which are currently showing in. Therefore, we draw our
- // children after we have completed drawing ourselves.
+ // buttons. Therefore, we draw our children after we have completed
+ // drawing ourselves.
super.draw(canvas);
// Draw our children if we are not showing the selector wheel of fading
// it out
- if (mShowInputControlsAnimator.isRunning() || !mDrawSelectorWheel) {
+ if (mShowInputControlsAnimator.isRunning()
+ || mSelectorWheelState != SELECTOR_WHEEL_STATE_LARGE) {
long drawTime = getDrawingTime();
for (int i = 0, count = getChildCount(); i < count; i++) {
View child = getChildAt(i);
@@ -1105,25 +1186,32 @@ public class NumberPicker extends LinearLayout {
@Override
protected void onDraw(Canvas canvas) {
- // we only draw the selector wheel
- if (!mDrawSelectorWheel) {
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_NONE) {
return;
}
+
float x = (mRight - mLeft) / 2;
float y = mCurrentScrollOffset;
+ final int restoreCount = canvas.save();
+
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_SMALL) {
+ Rect clipBounds = canvas.getClipBounds();
+ clipBounds.inset(0, mSelectorElementHeight);
+ canvas.clipRect(clipBounds);
+ }
+
// draw the selector wheel
- int[] selectorIndices = getSelectorIndices();
+ int[] selectorIndices = mSelectorIndices;
for (int i = 0; i < selectorIndices.length; i++) {
int selectorIndex = selectorIndices[i];
String scrollSelectorValue = mSelectorIndexToStringCache.get(selectorIndex);
- canvas.drawText(scrollSelectorValue, x, y, mSelectorPaint);
+ canvas.drawText(scrollSelectorValue, x, y, mSelectorWheelPaint);
y += mSelectorElementHeight;
}
// draw the selection dividers (only if scrolling and drawable specified)
if (mSelectionDivider != null) {
- mSelectionDivider.setAlpha(mSelectorPaint.getAlpha());
// draw the top divider
int topOfTopDivider =
(getHeight() - mSelectorElementHeight - mSelectionDividerHeight) / 2;
@@ -1137,6 +1225,8 @@ public class NumberPicker extends LinearLayout {
mSelectionDivider.setBounds(0, topOfBottomDivider, mRight, bottomOfBottomDivider);
mSelectionDivider.draw(canvas);
}
+
+ canvas.restoreToCount(restoreCount);
}
@Override
@@ -1149,11 +1239,17 @@ public class NumberPicker extends LinearLayout {
* Resets the selector indices and clear the cached
* string representation of these indices.
*/
- private void resetSelectorWheelIndices() {
+ private void initializeSelectorWheelIndices() {
mSelectorIndexToStringCache.clear();
- int[] selectorIdices = getSelectorIndices();
- for (int i = 0; i < selectorIdices.length; i++) {
- selectorIdices[i] = Integer.MIN_VALUE;
+ int[] selectorIdices = mSelectorIndices;
+ int current = getValue();
+ for (int i = 0; i < mSelectorIndices.length; i++) {
+ int selectorIndex = current + (i - SELECTOR_MIDDLE_ITEM_INDEX);
+ if (mWrapSelectorWheel) {
+ selectorIndex = getWrappedSelectorIndex(selectorIndex);
+ }
+ mSelectorIndices[i] = selectorIndex;
+ ensureCachedScrollSelectorValue(mSelectorIndices[i]);
}
}
@@ -1179,16 +1275,59 @@ public class NumberPicker extends LinearLayout {
}
/**
+ * Changes the current value by one which is increment or
+ * decrement based on the passes argument.
+ *
+ * @param increment True to increment, false to decrement.
+ */
+ private void changeCurrentByOne(boolean increment) {
+ if (mFlingable) {
+ mDimSelectorWheelAnimator.cancel();
+ mInputText.setVisibility(View.INVISIBLE);
+ mSelectorWheelPaint.setAlpha(SELECTOR_WHEEL_BRIGHT_ALPHA);
+ mPreviousScrollerY = 0;
+ forceCompleteChangeCurrentByOneViaScroll();
+ if (increment) {
+ mFlingScroller.startScroll(0, 0, 0, -mSelectorElementHeight,
+ CHANGE_CURRENT_BY_ONE_SCROLL_DURATION);
+ } else {
+ mFlingScroller.startScroll(0, 0, 0, mSelectorElementHeight,
+ CHANGE_CURRENT_BY_ONE_SCROLL_DURATION);
+ }
+ invalidate();
+ } else {
+ if (increment) {
+ changeCurrent(mValue + 1);
+ } else {
+ changeCurrent(mValue - 1);
+ }
+ }
+ }
+
+ /**
+ * Ensures that if we are in the process of changing the current value
+ * by one via scrolling the scroller gets to its final state and the
+ * value is updated.
+ */
+ private void forceCompleteChangeCurrentByOneViaScroll() {
+ Scroller scroller = mFlingScroller;
+ if (!scroller.isFinished()) {
+ final int yBeforeAbort = scroller.getCurrY();
+ scroller.abortAnimation();
+ final int yDelta = scroller.getCurrY() - yBeforeAbort;
+ scrollBy(0, yDelta);
+ }
+ }
+
+ /**
* Sets the <code>alpha</code> of the {@link Paint} for drawing the selector
* wheel.
*/
@SuppressWarnings("unused")
- // Called by ShowInputControlsAnimator via reflection
+ // Called via reflection
private void setSelectorPaintAlpha(int alpha) {
- mSelectorPaint.setAlpha(alpha);
- if (mDrawSelectorWheel) {
- invalidate();
- }
+ mSelectorWheelPaint.setAlpha(alpha);
+ invalidate();
}
/**
@@ -1200,14 +1339,15 @@ public class NumberPicker extends LinearLayout {
}
/**
- * Sets if to <code>drawSelectionWheel</code>.
+ * Sets the <code>selectorWheelState</code>.
*/
- private void setDrawScrollWheel(boolean drawSelectorWheel) {
- mDrawSelectorWheel = drawSelectorWheel;
- // do not fade if the selector wheel not shown
- setVerticalFadingEdgeEnabled(drawSelectorWheel);
+ private void setSelectorWheelState(int selectorWheelState) {
+ mSelectorWheelState = selectorWheelState;
+ if (selectorWheelState == SELECTOR_WHEEL_STATE_LARGE) {
+ mSelectorWheelPaint.setAlpha(SELECTOR_WHEEL_BRIGHT_ALPHA);
+ }
- if (mFlingable && mDrawSelectorWheel
+ if (mFlingable && selectorWheelState == SELECTOR_WHEEL_STATE_LARGE
&& AccessibilityManager.getInstance(mContext).isEnabled()) {
AccessibilityManager.getInstance(mContext).interrupt();
String text = mContext.getString(R.string.number_picker_increment_scroll_action);
@@ -1217,16 +1357,14 @@ public class NumberPicker extends LinearLayout {
}
}
- private void initializeScrollWheel() {
- if (mInitialScrollOffset != Integer.MIN_VALUE) {
- return;
- }
- int[] selectorIndices = getSelectorIndices();
+ private void initializeSelectorWheel() {
+ initializeSelectorWheelIndices();
+ int[] selectorIndices = mSelectorIndices;
int totalTextHeight = selectorIndices.length * mTextSize;
float totalTextGapHeight = (mBottom - mTop) - totalTextHeight;
float textGapCount = selectorIndices.length - 1;
- int selectorTextGapHeight = (int) (totalTextGapHeight / textGapCount + 0.5f);
- mSelectorElementHeight = mTextSize + selectorTextGapHeight;
+ mSelectorTextGapHeight = (int) (totalTextGapHeight / textGapCount + 0.5f);
+ mSelectorElementHeight = mTextSize + mSelectorTextGapHeight;
// Ensure that the middle item is positioned the same as the text in mInputText
int editTextTextPosition = mInputText.getBaseline() + mInputText.getTop();
mInitialScrollOffset = editTextTextPosition -
@@ -1235,13 +1373,23 @@ public class NumberPicker extends LinearLayout {
updateInputTextView();
}
+ private void initializeFadingEdges() {
+ setVerticalFadingEdgeEnabled(true);
+ setFadingEdgeLength((mBottom - mTop - mTextSize) / 2);
+ }
+
/**
* Callback invoked upon completion of a given <code>scroller</code>.
*/
private void onScrollerFinished(Scroller scroller) {
if (scroller == mFlingScroller) {
- postAdjustScrollerCommand(0);
- onScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
+ if (mSelectorWheelState == SELECTOR_WHEEL_STATE_LARGE) {
+ postAdjustScrollerCommand(0);
+ onScrollStateChange(OnScrollListener.SCROLL_STATE_IDLE);
+ } else {
+ updateInputTextView();
+ fadeSelectorWheel(mShowInputControlsAnimimationDuration);
+ }
} else {
updateInputTextView();
showInputControls(mShowInputControlsAnimimationDuration);
@@ -1312,6 +1460,17 @@ public class NumberPicker extends LinearLayout {
}
/**
+ * Fade the selector wheel via an animation.
+ *
+ * @param animationDuration The duration of the animation.
+ */
+ private void fadeSelectorWheel(long animationDuration) {
+ mInputText.setVisibility(VISIBLE);
+ mDimSelectorWheelAnimator.setDuration(animationDuration);
+ mDimSelectorWheelAnimator.start();
+ }
+
+ /**
* Updates the visibility state of the increment and decrement buttons.
*/
private void updateIncrementAndDecrementButtonsVisibilityState() {
@@ -1328,25 +1487,6 @@ public class NumberPicker extends LinearLayout {
}
/**
- * @return The selector indices array with proper values with the current as
- * the middle one.
- */
- private int[] getSelectorIndices() {
- int current = getValue();
- if (mSelectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] != current) {
- for (int i = 0; i < mSelectorIndices.length; i++) {
- int selectorIndex = current + (i - SELECTOR_MIDDLE_ITEM_INDEX);
- if (mWrapSelectorWheel) {
- selectorIndex = getWrappedSelectorIndex(selectorIndex);
- }
- mSelectorIndices[i] = selectorIndex;
- ensureCachedScrollSelectorValue(mSelectorIndices[i]);
- }
- }
- return mSelectorIndices;
- }
-
- /**
* @return The wrapped index <code>selectorIndex</code> value.
*/
private int getWrappedSelectorIndex(int selectorIndex) {
@@ -1362,7 +1502,7 @@ public class NumberPicker extends LinearLayout {
* Increments the <code>selectorIndices</code> whose string representations
* will be displayed in the selector.
*/
- private void incrementScrollSelectorIndices(int[] selectorIndices) {
+ private void incrementSelectorIndices(int[] selectorIndices) {
for (int i = 0; i < selectorIndices.length - 1; i++) {
selectorIndices[i] = selectorIndices[i + 1];
}
@@ -1467,25 +1607,26 @@ public class NumberPicker extends LinearLayout {
}
/**
- * Posts a command for updating the current value every <code>updateMillis
- * </code>.
+ * Posts a command for changing the current value by one.
+ *
+ * @param increment Whether to increment or decrement the value.
*/
- private void postUpdateValueFromLongPress(int updateMillis) {
+ private void postChangeCurrentByOneFromLongPress(boolean increment) {
mInputText.clearFocus();
removeAllCallbacks();
- if (mUpdateFromLongPressCommand == null) {
- mUpdateFromLongPressCommand = new UpdateValueFromLongPressCommand();
+ if (mChangeCurrentByOneFromLongPressCommand == null) {
+ mChangeCurrentByOneFromLongPressCommand = new ChangeCurrentByOneFromLongPressCommand();
}
- mUpdateFromLongPressCommand.setUpdateStep(updateMillis);
- post(mUpdateFromLongPressCommand);
+ mChangeCurrentByOneFromLongPressCommand.setIncrement(increment);
+ post(mChangeCurrentByOneFromLongPressCommand);
}
/**
* Removes all pending callback from the message queue.
*/
private void removeAllCallbacks() {
- if (mUpdateFromLongPressCommand != null) {
- removeCallbacks(mUpdateFromLongPressCommand);
+ if (mChangeCurrentByOneFromLongPressCommand != null) {
+ removeCallbacks(mChangeCurrentByOneFromLongPressCommand);
}
if (mAdjustScrollerCommand != null) {
removeCallbacks(mAdjustScrollerCommand);
@@ -1658,17 +1799,17 @@ public class NumberPicker extends LinearLayout {
}
/**
- * Command for updating the current value from a long press.
+ * Command for changing the current value from a long press by one.
*/
- class UpdateValueFromLongPressCommand implements Runnable {
- private int mUpdateStep = 0;
+ class ChangeCurrentByOneFromLongPressCommand implements Runnable {
+ private boolean mIncrement;
- private void setUpdateStep(int updateStep) {
- mUpdateStep = updateStep;
+ private void setIncrement(boolean increment) {
+ mIncrement = increment;
}
public void run() {
- changeCurrent(mValue + mUpdateStep);
+ changeCurrentByOne(mIncrement);
postDelayed(this, mLongPressUpdateInterval);
}
}
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index 542a1ef2acda..6aee5a07e030 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -532,7 +532,7 @@ public class OverScroller {
final int dx = mScrollerX.mFinal - mScrollerX.mStart;
final int dy = mScrollerY.mFinal - mScrollerY.mStart;
return !isFinished() && Math.signum(xvel) == Math.signum(dx) &&
- Math.signum(yvel) == Math.signum(dy);
+ Math.signum(yvel) == Math.signum(dy);
}
static class SplineOverScroller {
@@ -584,10 +584,10 @@ public class OverScroller {
// A device specific coefficient adjusted to physical values.
private static float PHYSICAL_COEF;
- private static float DECELERATION_RATE = (float) (Math.log(0.75) / Math.log(0.9));
- private static final float INFLEXION = 0.4f; // Tension lines cross at (INFLEXION, 1)
- private static final float START_TENSION = 1.0f;
- private static final float END_TENSION = 0.6666f;
+ private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9));
+ private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1)
+ private static final float START_TENSION = 0.5f;
+ private static final float END_TENSION = 1.0f;
private static final float P1 = START_TENSION * INFLEXION;
private static final float P2 = 1.0f - END_TENSION * (1.0f - INFLEXION);
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index 17512d8c93d2..6a6d76766113 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -157,6 +157,8 @@ public class PopupMenu implements MenuBuilder.Callback, MenuPresenter.Callback {
* @hide
*/
public boolean onOpenSubMenu(MenuBuilder subMenu) {
+ if (subMenu == null) return false;
+
if (!subMenu.hasVisibleItems()) {
return true;
}
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 4d45c2fee094..8ba7beed3ffd 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -92,6 +92,7 @@ public class PopupWindow {
private boolean mClipToScreen;
private boolean mAllowScrollingAnchorParent = true;
private boolean mLayoutInsetDecor = false;
+ private boolean mNotTouchModal;
private OnTouchListener mTouchInterceptor;
@@ -694,6 +695,15 @@ public class PopupWindow {
}
/**
+ * Set whether this window is touch modal or if outside touches will be sent to
+ * other windows behind it.
+ * @hide
+ */
+ public void setTouchModal(boolean touchModal) {
+ mNotTouchModal = !touchModal;
+ }
+
+ /**
* <p>Change the width and height measure specs that are given to the
* window manager by the popup. By default these are 0, meaning that
* the current width or height is requested as an explicit size from
@@ -796,6 +806,21 @@ public class PopupWindow {
* @param y the popup's y location offset
*/
public void showAtLocation(View parent, int gravity, int x, int y) {
+ showAtLocation(parent.getWindowToken(), gravity, x, y);
+ }
+
+ /**
+ * Display the content view in a popup window at the specified location.
+ *
+ * @param token Window token to use for creating the new window
+ * @param gravity the gravity which controls the placement of the popup window
+ * @param x the popup's x location offset
+ * @param y the popup's y location offset
+ *
+ * @hide Internal use only. Applications should use
+ * {@link #showAtLocation(View, int, int, int)} instead.
+ */
+ public void showAtLocation(IBinder token, int gravity, int x, int y) {
if (isShowing() || mContentView == null) {
return;
}
@@ -805,7 +830,7 @@ public class PopupWindow {
mIsShowing = true;
mIsDropdown = false;
- WindowManager.LayoutParams p = createPopupLayout(parent.getWindowToken());
+ WindowManager.LayoutParams p = createPopupLayout(token);
p.windowAnimations = computeAnimationResource();
preparePopup(p);
@@ -1033,6 +1058,9 @@ public class PopupWindow {
if (mLayoutInsetDecor) {
curFlags |= WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
}
+ if (mNotTouchModal) {
+ curFlags |= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
+ }
return curFlags;
}
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index e033d2d0558f..df88fecc0618 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -937,7 +937,8 @@ public class ProgressBar extends View {
int left = 0;
if (mIndeterminateDrawable != null) {
- if (mOnlyIndeterminate) {
+ // Aspect ratio logic does not apply to AnimationDrawables
+ if (mOnlyIndeterminate && !(mIndeterminateDrawable instanceof AnimationDrawable)) {
// Maintain aspect ratio. Certain kinds of animated drawables
// get very confused otherwise.
final int intrinsicWidth = mIndeterminateDrawable.getIntrinsicWidth();
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index 6edfd5923973..12a93ac888dc 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -212,6 +212,11 @@ public class RelativeLayout extends ViewGroup {
* Describes how the child views are positioned. Defaults to
* <code>Gravity.LEFT | Gravity.TOP</code>.
*
+ * <p>Note that since RelativeLayout considers the positioning of each child
+ * relative to one another to be significant, setting gravity will affect
+ * the positioning of all children as a single unit within the parent.
+ * This happens after children have been relatively positioned.</p>
+ *
* @param gravity See {@link android.view.Gravity}
*
* @see #setHorizontalGravity(int)
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index d91eeb2d7d81..61ea5c9c211a 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -583,7 +583,7 @@ public class ScrollView extends FrameLayout {
final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
(overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);
- if (canOverscroll && overScrollBy(0, deltaY, 0, mScrollY,
+ if (overScrollBy(0, deltaY, 0, mScrollY,
0, range, 0, mOverscrollDistance, true)) {
// Break our velocity if we hit a scroll barrier.
mVelocityTracker.clear();
@@ -616,16 +616,12 @@ public class ScrollView extends FrameLayout {
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
int initialVelocity = (int) velocityTracker.getYVelocity(mActivePointerId);
- final int bottom = getScrollRange();
- final int overscrollMode = getOverScrollMode();
- final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
- (overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && bottom > 0);
-
- if (getChildCount() > 0 && canOverscroll) {
+ if (getChildCount() > 0) {
if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
fling(-initialVelocity);
} else {
- if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0, bottom)) {
+ if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0,
+ getScrollRange())) {
invalidate();
}
}
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index f230031908cf..adf2b7b7a3f9 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -120,6 +120,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
private CharSequence mOldQueryText;
private CharSequence mUserQuery;
private boolean mExpandedInActionView;
+ private int mCollapsedImeOptions;
private SearchableInfo mSearchable;
private Bundle mAppSearchData;
@@ -1166,6 +1167,7 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
clearFocus();
updateViewsVisibility(true);
mQueryTextView.setText("");
+ mQueryTextView.setImeOptions(mCollapsedImeOptions);
mExpandedInActionView = false;
}
@@ -1175,6 +1177,8 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {
@Override
public void onActionViewExpanded() {
mExpandedInActionView = true;
+ mCollapsedImeOptions = mQueryTextView.getImeOptions();
+ mQueryTextView.setImeOptions(mCollapsedImeOptions | EditorInfo.IME_FLAG_NO_FULLSCREEN);
setIconified(false);
}
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index 6e29024bcef4..36278907cea2 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -169,6 +169,7 @@ public class ShareActionProvider extends ActionProvider {
mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId);
activityChooserView.setExpandActivityOverflowButtonDrawable(drawable);
+ activityChooserView.setProvider(this);
return activityChooserView;
}
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index 14cbf6fe42d5..6b2f3e4faa19 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -75,6 +75,20 @@ public class SpellChecker implements SpellCheckerSessionListener {
mLength = 0;
}
+ /**
+ * @return true if a spell checker session has successfully been created. Returns false if not,
+ * for instance when spell checking has been disabled in settings.
+ */
+ public boolean isSessionActive() {
+ return mSpellCheckerSession != null;
+ }
+
+ public void closeSession() {
+ if (mSpellCheckerSession != null) {
+ mSpellCheckerSession.close();
+ }
+ }
+
public void addSpellCheckSpan(SpellCheckSpan spellCheckSpan) {
int length = mIds.length;
if (mLength >= length) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d78a7a36e67c..bffdadcf420d 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -1193,6 +1193,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
super.setEnabled(enabled);
prepareCursorControllers();
+ if (enabled) {
+ // Make sure IME is updated with current editor info.
+ InputMethodManager imm = InputMethodManager.peekInstance();
+ if (imm != null) imm.restartInput(this);
+ }
}
/**
@@ -3245,7 +3250,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
sendOnTextChanged(text, 0, oldlen, textLength);
onTextChanged(text, 0, oldlen, textLength);
- if (startSpellCheck) {
+ if (startSpellCheck && mSpellChecker != null) {
+ // This view has to have been previously attached for mSpellChecker to exist
updateSpellCheckSpans(0, textLength);
}
@@ -4407,6 +4413,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Resolve drawables as the layout direction has been resolved
resolveDrawables();
+
+ updateSpellCheckSpans(0, mText.length());
}
@Override
@@ -4438,6 +4446,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
hideControllers();
resetResolvedDrawables();
+
+ if (mSpellChecker != null) {
+ mSpellChecker.closeSession();
+ removeMisspelledSpans();
+ // Forces the creation of a new SpellChecker next time this window is created.
+ // Will handle the cases where the settings has been changed in the meantime.
+ mSpellChecker = null;
+ }
}
@Override
@@ -6125,7 +6141,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
TruncateAt effectiveEllipsize = mEllipsize;
if (mEllipsize == TruncateAt.MARQUEE &&
mMarqueeFadeMode == MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) {
- effectiveEllipsize = TruncateAt.END;
+ effectiveEllipsize = TruncateAt.END_SMALL;
}
if (mTextDir == null) {
@@ -7590,7 +7606,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
ims.mChangedDelta += after-before;
}
-
+
sendOnTextChanged(buffer, start, before, after);
onTextChanged(buffer, start, before, after);
@@ -7732,7 +7748,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
* Create new SpellCheckSpans on the modified region.
*/
private void updateSpellCheckSpans(int start, int end) {
- if (!(mText instanceof Editable) || !isSuggestionsEnabled()) return;
+ if (!isTextEditable() || !isSuggestionsEnabled() || !getSpellChecker().isSessionActive())
+ return;
Editable text = (Editable) mText;
WordIterator wordIterator = getWordIterator();
@@ -8422,13 +8439,31 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
int flags = suggestionSpans[i].getFlags();
if ((flags & SuggestionSpan.FLAG_EASY_CORRECT) != 0
&& (flags & SuggestionSpan.FLAG_MISSPELLED) == 0) {
- flags = flags & ~SuggestionSpan.FLAG_EASY_CORRECT;
+ flags &= ~SuggestionSpan.FLAG_EASY_CORRECT;
suggestionSpans[i].setFlags(flags);
}
}
}
}
+ /**
+ * Removes the suggestion spans for misspelled words.
+ */
+ private void removeMisspelledSpans() {
+ if (mText instanceof Spannable) {
+ Spannable spannable = (Spannable) mText;
+ SuggestionSpan[] suggestionSpans = spannable.getSpans(0,
+ spannable.length(), SuggestionSpan.class);
+ for (int i = 0; i < suggestionSpans.length; i++) {
+ int flags = suggestionSpans[i].getFlags();
+ if ((flags & SuggestionSpan.FLAG_EASY_CORRECT) != 0
+ && (flags & SuggestionSpan.FLAG_MISSPELLED) != 0) {
+ spannable.removeSpan(suggestionSpans[i]);
+ }
+ }
+ }
+ }
+
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
if (mMovement != null && mText instanceof Spannable && mLayout != null) {
@@ -8939,13 +8974,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final boolean isPassword = hasPasswordTransformationMethod();
if (!isPassword) {
- CharSequence text = getText();
- if (TextUtils.isEmpty(text)) {
- text = getHint();
- }
- if (TextUtils.isEmpty(text)) {
- text = getContentDescription();
- }
+ CharSequence text = getTextForAccessibility();
if (!TextUtils.isEmpty(text)) {
event.getText().add(text);
}
@@ -8972,7 +9001,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final boolean isPassword = hasPasswordTransformationMethod();
if (!isPassword) {
- info.setText(getText());
+ info.setText(getTextForAccessibility());
}
info.setPassword(isPassword);
}
@@ -8988,6 +9017,20 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
super.sendAccessibilityEvent(eventType);
}
+ /**
+ * Gets the text reported for accessibility purposes. It is the
+ * text if not empty or the hint.
+ *
+ * @return The accessibility text.
+ */
+ private CharSequence getTextForAccessibility() {
+ CharSequence text = getText();
+ if (TextUtils.isEmpty(text)) {
+ text = getHint();
+ }
+ return text;
+ }
+
void sendAccessibilityEventTypeViewTextChanged(CharSequence beforeText,
int fromIndex, int removedCount, int addedCount) {
AccessibilityEvent event =
@@ -9560,7 +9603,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private final Comparator<SuggestionSpan> mSuggestionSpanComparator;
private final HashMap<SuggestionSpan, Integer> mSpansLengths;
-
private class CustomPopupWindow extends PopupWindow {
public CustomPopupWindow(Context context, int defStyle) {
super(context, null, defStyle);
@@ -9572,9 +9614,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
TextView.this.getPositionListener().removeSubscriber(SuggestionsPopupWindow.this);
- if ((mText instanceof Spannable)) {
- ((Spannable) mText).removeSpan(mSuggestionRangeSpan);
- }
+ // Safe cast since show() checks that mText is an Editable
+ ((Spannable) mText).removeSpan(mSuggestionRangeSpan);
setCursorVisible(mCursorWasVisibleBeforeSuggestions);
if (hasInsertionController()) {
@@ -9624,8 +9665,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
void removeMisspelledFlag() {
int suggestionSpanFlags = suggestionSpan.getFlags();
if ((suggestionSpanFlags & SuggestionSpan.FLAG_MISSPELLED) > 0) {
- suggestionSpanFlags &= ~(SuggestionSpan.FLAG_MISSPELLED);
- suggestionSpanFlags &= ~(SuggestionSpan.FLAG_EASY_CORRECT);
+ suggestionSpanFlags &= ~SuggestionSpan.FLAG_MISSPELLED;
+ suggestionSpanFlags &= ~SuggestionSpan.FLAG_EASY_CORRECT;
suggestionSpan.setFlags(suggestionSpanFlags);
}
}
@@ -9729,6 +9770,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
View view = null;
for (int i = 0; i < mNumberOfSuggestions; i++) {
view = mSuggestionsAdapter.getView(i, view, mContentView);
+ view.getLayoutParams().width = LayoutParams.WRAP_CONTENT;
view.measure(horizontalMeasure, verticalMeasure);
width = Math.max(width, view.getMeasuredWidth());
}
@@ -9874,6 +9916,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ hide();
+
if (view instanceof TextView) {
TextView textView = (TextView) view;
Editable editable = (Editable) mText;
@@ -9881,6 +9925,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
SuggestionInfo suggestionInfo = mSuggestionInfos[position];
final int spanStart = editable.getSpanStart(suggestionInfo.suggestionSpan);
final int spanEnd = editable.getSpanEnd(suggestionInfo.suggestionSpan);
+ if (spanStart < 0 || spanEnd < 0) return; // Span has been removed
final String originalText = mText.subSequence(spanStart, spanEnd).toString();
if (suggestionInfo.suggestionIndex < 0) {
@@ -9942,7 +9987,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
Selection.setSelection(editable, spanEnd + lengthDifference);
}
}
- hide();
}
}
@@ -10507,9 +10551,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
public abstract int getCurrentCursorOffset();
- protected void updateSelection(int offset) {
- updateDrawable();
- }
+ protected abstract void updateSelection(int offset);
public abstract void updatePosition(float x, float y);
@@ -10783,8 +10825,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void updateSelection(int offset) {
- super.updateSelection(offset);
Selection.setSelection((Spannable) mText, offset, getSelectionEnd());
+ updateDrawable();
}
@Override
@@ -10825,8 +10867,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override
public void updateSelection(int offset) {
- super.updateSelection(offset);
Selection.setSelection((Spannable) mText, getSelectionStart(), offset);
+ updateDrawable();
}
@Override
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index 88a0e0130473..8e438ffe4678 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -456,13 +456,6 @@ public class VideoView extends SurfaceView implements MediaPlayerControl {
seekTo(mSeekWhenPrepared);
}
start();
- if (mMediaController != null) {
- if (mMediaController.isShowing()) {
- // ensure the controller will get repositioned later
- mMediaController.hide();
- }
- mMediaController.show();
- }
}
}
diff --git a/core/java/com/android/internal/policy/IFaceLockCallback.aidl b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
index 1eadc412810b..4f76c7131f48 100644
--- a/core/java/com/android/internal/policy/IFaceLockCallback.aidl
+++ b/core/java/com/android/internal/policy/IFaceLockCallback.aidl
@@ -21,5 +21,4 @@ import android.os.IBinder;
oneway interface IFaceLockCallback {
void unlock();
void cancel();
- void sleepDevice();
}
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 159929b19f7a..3d229295ca7a 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -133,4 +133,13 @@ public class ArrayUtils
}
return false;
}
+
+ public static boolean contains(int[] array, int value) {
+ for (int element : array) {
+ if (element == value) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index fba6a5a3a049..aabea2c91458 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseBooleanArray;
+import android.view.ActionProvider;
import android.view.MenuItem;
import android.view.SoundEffectConstants;
import android.view.View;
@@ -40,7 +41,8 @@ import java.util.ArrayList;
/**
* MenuPresenter for building action menus as seen in the action bar and action modes.
*/
-public class ActionMenuPresenter extends BaseMenuPresenter {
+public class ActionMenuPresenter extends BaseMenuPresenter
+ implements ActionProvider.SubUiVisibilityListener {
private static final String TAG = "ActionMenuPresenter";
private View mOverflowButton;
@@ -187,8 +189,30 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
public void updateMenuView(boolean cleared) {
super.updateMenuView(cleared);
- final boolean hasOverflow = mReserveOverflow && mMenu != null &&
- mMenu.getNonActionItems().size() > 0;
+ if (mMenu != null) {
+ final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
+ final int count = actionItems.size();
+ for (int i = 0; i < count; i++) {
+ final ActionProvider provider = actionItems.get(i).getActionProvider();
+ if (provider != null) {
+ provider.setSubUiVisibilityListener(this);
+ }
+ }
+ }
+
+ final ArrayList<MenuItemImpl> nonActionItems = mMenu != null ?
+ mMenu.getNonActionItems() : null;
+
+ boolean hasOverflow = false;
+ if (mReserveOverflow && nonActionItems != null) {
+ final int count = nonActionItems.size();
+ if (count == 1) {
+ hasOverflow = !nonActionItems.get(0).isActionViewExpanded();
+ } else {
+ hasOverflow = count > 0;
+ }
+ }
+
if (hasOverflow) {
if (mOverflowButton == null) {
mOverflowButton = new OverflowMenuButton(mContext);
@@ -483,6 +507,16 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
}
}
+ @Override
+ public void onSubUiVisibilityChanged(boolean isVisible) {
+ if (isVisible) {
+ // Not a submenu, but treat it like one.
+ super.onSubMenuSelected(null);
+ } else {
+ mMenu.close(false);
+ }
+ }
+
private static class SavedState implements Parcelable {
public int openSubMenuId;
@@ -590,7 +624,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
@Override
public void onDismiss() {
super.onDismiss();
- mSubMenu.close();
mActionButtonPopup = null;
mOpenSubMenuId = 0;
}
@@ -600,12 +633,17 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
@Override
public boolean onOpenSubMenu(MenuBuilder subMenu) {
+ if (subMenu == null) return false;
+
mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
return false;
}
@Override
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+ if (menu instanceof SubMenuBuilder) {
+ ((SubMenuBuilder) menu).getRootMenu().close(false);
+ }
}
}
diff --git a/core/java/com/android/internal/view/menu/IconMenuPresenter.java b/core/java/com/android/internal/view/menu/IconMenuPresenter.java
index d1b1dae80315..24ddad668ac3 100644
--- a/core/java/com/android/internal/view/menu/IconMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/IconMenuPresenter.java
@@ -187,7 +187,9 @@ public class IconMenuPresenter extends BaseMenuPresenter {
@Override
public boolean onOpenSubMenu(MenuBuilder subMenu) {
- mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
+ if (subMenu != null) {
+ mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
+ }
return false;
}
diff --git a/core/java/com/android/internal/view/menu/ListMenuPresenter.java b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
index 014142729dc1..a331bec53dc4 100644
--- a/core/java/com/android/internal/view/menu/ListMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
@@ -17,6 +17,7 @@
package com.android.internal.view.menu;
import android.content.Context;
+import android.database.DataSetObserver;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.SparseArray;
@@ -47,7 +48,7 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick
int mItemLayoutRes;
private Callback mCallback;
- private MenuAdapter mAdapter;
+ MenuAdapter mAdapter;
private int mId;
@@ -216,14 +217,29 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick
}
private class MenuAdapter extends BaseAdapter {
+ private int mExpandedIndex = -1;
+
+ public MenuAdapter() {
+ registerDataSetObserver(new ExpandedIndexObserver());
+ findExpandedIndex();
+ }
+
public int getCount() {
ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
- return items.size() - mItemIndexOffset;
+ int count = items.size() - mItemIndexOffset;
+ if (mExpandedIndex < 0) {
+ return count;
+ }
+ return count - 1;
}
public MenuItemImpl getItem(int position) {
ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
- return items.get(position + mItemIndexOffset);
+ position += mItemIndexOffset;
+ if (mExpandedIndex >= 0 && position >= mExpandedIndex) {
+ position++;
+ }
+ return items.get(position);
}
public long getItemId(int position) {
@@ -241,5 +257,28 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick
itemView.initialize(getItem(position), 0);
return convertView;
}
+
+ void findExpandedIndex() {
+ final MenuItemImpl expandedItem = mMenu.getExpandedItem();
+ if (expandedItem != null) {
+ final ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
+ final int count = items.size();
+ for (int i = 0; i < count; i++) {
+ final MenuItemImpl item = items.get(i);
+ if (item == expandedItem) {
+ mExpandedIndex = i;
+ return;
+ }
+ }
+ }
+ mExpandedIndex = -1;
+ }
+ }
+
+ private class ExpandedIndexObserver extends DataSetObserver {
+ @Override
+ public void onChanged() {
+ mAdapter.findExpandedIndex();
+ }
}
}
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index c30e83b670ed..9fbca824f202 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -1258,4 +1258,8 @@ public class MenuBuilder implements Menu {
}
return collapsed;
}
+
+ public MenuItemImpl getExpandedItem() {
+ return mExpandedItem;
+ }
}
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index 626561894bfc..329b457b56c9 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -18,6 +18,7 @@ package com.android.internal.view.menu;
import android.content.Context;
import android.content.res.Resources;
+import android.database.DataSetObserver;
import android.os.Parcelable;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -286,22 +287,45 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
return false;
}
+ @Override
+ public int getId() {
+ return 0;
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ return null;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ }
+
private class MenuAdapter extends BaseAdapter {
private MenuBuilder mAdapterMenu;
+ private int mExpandedIndex = -1;
public MenuAdapter(MenuBuilder menu) {
mAdapterMenu = menu;
+ registerDataSetObserver(new ExpandedIndexObserver());
+ findExpandedIndex();
}
public int getCount() {
ArrayList<MenuItemImpl> items = mOverflowOnly ?
mAdapterMenu.getNonActionItems() : mAdapterMenu.getVisibleItems();
- return items.size();
+ if (mExpandedIndex < 0) {
+ return items.size();
+ }
+ return items.size() - 1;
}
public MenuItemImpl getItem(int position) {
ArrayList<MenuItemImpl> items = mOverflowOnly ?
mAdapterMenu.getNonActionItems() : mAdapterMenu.getVisibleItems();
+ if (mExpandedIndex >= 0 && position >= mExpandedIndex) {
+ position++;
+ }
return items.get(position);
}
@@ -323,19 +347,28 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
itemView.initialize(getItem(position), 0);
return convertView;
}
- }
-
- @Override
- public int getId() {
- return 0;
- }
- @Override
- public Parcelable onSaveInstanceState() {
- return null;
+ void findExpandedIndex() {
+ final MenuItemImpl expandedItem = mMenu.getExpandedItem();
+ if (expandedItem != null) {
+ final ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
+ final int count = items.size();
+ for (int i = 0; i < count; i++) {
+ final MenuItemImpl item = items.get(i);
+ if (item == expandedItem) {
+ mExpandedIndex = i;
+ return;
+ }
+ }
+ }
+ mExpandedIndex = -1;
+ }
}
- @Override
- public void onRestoreInstanceState(Parcelable state) {
+ private class ExpandedIndexObserver extends DataSetObserver {
+ @Override
+ public void onChanged() {
+ mAdapter.findExpandedIndex();
+ }
}
}
diff --git a/core/java/com/android/internal/widget/AbsActionBarView.java b/core/java/com/android/internal/widget/AbsActionBarView.java
index 6c11288deb61..06f5158f43e4 100644
--- a/core/java/com/android/internal/widget/AbsActionBarView.java
+++ b/core/java/com/android/internal/widget/AbsActionBarView.java
@@ -35,6 +35,8 @@ public abstract class AbsActionBarView extends ViewGroup {
protected ActionMenuView mMenuView;
protected ActionMenuPresenter mActionMenuPresenter;
protected ActionBarContainer mSplitView;
+ protected boolean mSplitActionBar;
+ protected boolean mSplitWhenNarrow;
protected int mContentHeight;
protected Animator mVisibilityAnim;
@@ -66,11 +68,31 @@ public abstract class AbsActionBarView extends ViewGroup {
com.android.internal.R.attr.actionBarStyle, 0);
setContentHeight(a.getLayoutDimension(R.styleable.ActionBar_height, 0));
a.recycle();
+ if (mSplitWhenNarrow) {
+ setSplitActionBar(getContext().getResources().getBoolean(
+ com.android.internal.R.bool.split_action_bar_is_narrow));
+ }
if (mActionMenuPresenter != null) {
mActionMenuPresenter.onConfigurationChanged(newConfig);
}
}
+ /**
+ * Sets whether the bar should be split right now, no questions asked.
+ * @param split true if the bar should split
+ */
+ public void setSplitActionBar(boolean split) {
+ mSplitActionBar = split;
+ }
+
+ /**
+ * Sets whether the bar should split if we enter a narrow screen configuration.
+ * @param splitWhenNarrow true if the bar should check to split after a config change
+ */
+ public void setSplitWhenNarrow(boolean splitWhenNarrow) {
+ mSplitWhenNarrow = splitWhenNarrow;
+ }
+
public void setContentHeight(int height) {
mContentHeight = height;
requestLayout();
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 7bc33c73baab..acffa5c16d1b 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -93,6 +93,39 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
a.recycle();
}
+ @Override
+ public void setSplitActionBar(boolean split) {
+ if (mSplitActionBar != split) {
+ if (mActionMenuPresenter != null) {
+ // Mode is already active; move everything over and adjust the menu itself.
+ final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
+ LayoutParams.MATCH_PARENT);
+ if (!split) {
+ mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
+ mMenuView.setBackgroundDrawable(null);
+ final ViewGroup oldParent = (ViewGroup) mMenuView.getParent();
+ if (oldParent != null) oldParent.removeView(mMenuView);
+ addView(mMenuView, layoutParams);
+ } else {
+ // Allow full screen width in split mode.
+ mActionMenuPresenter.setWidthLimit(
+ getContext().getResources().getDisplayMetrics().widthPixels, true);
+ // No limit to the item count; use whatever will fit.
+ mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
+ // Span the whole width
+ layoutParams.width = LayoutParams.MATCH_PARENT;
+ layoutParams.height = mContentHeight;
+ mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
+ mMenuView.setBackgroundDrawable(mSplitBackground);
+ final ViewGroup oldParent = (ViewGroup) mMenuView.getParent();
+ if (oldParent != null) oldParent.removeView(mMenuView);
+ mSplitView.addView(mMenuView, layoutParams);
+ }
+ }
+ super.setSplitActionBar(split);
+ }
+ }
+
public void setContentHeight(int height) {
mContentHeight = height;
}
@@ -179,7 +212,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi
final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
- if (mSplitView == null) {
+ if (!mSplitActionBar) {
menu.addMenuPresenter(mActionMenuPresenter);
mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
mMenuView.setBackgroundDrawable(null);
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index bbecb6c89af4..6d2e8232156b 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -113,7 +113,6 @@ public class ActionBarView extends AbsActionBarView {
private int mProgressStyle;
private int mIndeterminateProgressStyle;
- private boolean mSplitActionBar;
private boolean mUserTitle;
private boolean mIncludeTabs;
private boolean mIsCollapsable;
@@ -133,6 +132,8 @@ public class ActionBarView extends AbsActionBarView {
private ExpandedActionViewMenuPresenter mExpandedMenuPresenter;
View mExpandedActionView;
+ Window.Callback mWindowCallback;
+
private final AdapterView.OnItemSelectedListener mNavItemSelectedListener =
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View view, int position, long id) {
@@ -157,11 +158,7 @@ public class ActionBarView extends AbsActionBarView {
private final OnClickListener mUpClickListener = new OnClickListener() {
public void onClick(View v) {
- Context context = getContext();
- if (context instanceof Activity) {
- Activity activity = (Activity) context;
- activity.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mLogoNavItem);
- }
+ mWindowCallback.onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, mLogoNavItem);
}
};
@@ -276,6 +273,14 @@ public class ActionBarView extends AbsActionBarView {
}
}
+ /**
+ * Set the window callback used to invoke menu items; used for dispatching home button presses.
+ * @param cb Window callback to dispatch to
+ */
+ public void setWindowCallback(Window.Callback cb) {
+ mWindowCallback = cb;
+ }
+
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
@@ -301,6 +306,7 @@ public class ActionBarView extends AbsActionBarView {
addView(mIndeterminateProgressView);
}
+ @Override
public void setSplitActionBar(boolean splitActionBar) {
if (mSplitActionBar != splitActionBar) {
if (mMenuView != null) {
@@ -316,7 +322,10 @@ public class ActionBarView extends AbsActionBarView {
addView(mMenuView);
}
}
- mSplitActionBar = splitActionBar;
+ if (mSplitView != null) {
+ mSplitView.setVisibility(splitActionBar ? VISIBLE : GONE);
+ }
+ super.setSplitActionBar(splitActionBar);
}
}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 4d828c448fe2..81e7c34709a3 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -756,24 +756,36 @@ public class LockPatternUtils {
}
/**
- * @return Whether the lock password is enabled.
+ * @return Whether the lock password is enabled, or if it is set as a backup for biometric weak
*/
public boolean isLockPasswordEnabled() {
long mode = getLong(PASSWORD_TYPE_KEY, 0);
- return savedPasswordExists() &&
- (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC
- || mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC
- || mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
- || mode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
+ long backupMode = getLong(PASSWORD_TYPE_ALTERNATE_KEY, 0);
+ final boolean passwordEnabled = mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC
+ || mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC
+ || mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
+ || mode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
+ final boolean backupEnabled = backupMode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC
+ || backupMode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC
+ || backupMode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
+ || backupMode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
+
+ return savedPasswordExists() && (passwordEnabled ||
+ (isBiometricEnabled() && backupEnabled));
}
/**
- * @return Whether the lock pattern is enabled.
+ * @return Whether the lock pattern is enabled, or if it is set as a backup for biometric weak
*/
public boolean isLockPatternEnabled() {
+ final boolean backupEnabled =
+ getLong(PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
+ == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+
return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED)
- && getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
- == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+ && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
+ == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ||
+ (isBiometricEnabled() && backupEnabled));
}
/**
@@ -923,8 +935,7 @@ public class LockPatternUtils {
|| mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC
|| mode == DevicePolicyManager.PASSWORD_QUALITY_COMPLEX;
final boolean secure = isPattern && isLockPatternEnabled() && savedPatternExists()
- || isPassword && savedPasswordExists()
- || usingBiometricWeak() && isBiometricEnabled();
+ || isPassword && savedPasswordExists();
return secure;
}
@@ -936,18 +947,24 @@ public class LockPatternUtils {
*
* If there's currently a call in progress, the button will take them to the call
* @param button the button to update
- */
- public void updateEmergencyCallButtonState(Button button) {
- if (isEmergencyCallCapable()) {
+ * @param the phone state:
+ * {@link TelephonyManager#CALL_STATE_IDLE}
+ * {@link TelephonyManager#CALL_STATE_RINGING}
+ * {@link TelephonyManager#CALL_STATE_OFFHOOK}
+ * @param showIfCapable indicates whether the button should be shown if emergency calls are
+ * possible on the device
+ */
+ public void updateEmergencyCallButtonState(Button button, int phoneState,
+ boolean showIfCapable) {
+ if (isEmergencyCallCapable() && showIfCapable) {
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
return;
}
- int newState = TelephonyManager.getDefault().getCallState();
int textId;
- if (newState == TelephonyManager.CALL_STATE_OFFHOOK) {
+ if (phoneState == TelephonyManager.CALL_STATE_OFFHOOK) {
// show "return to call" text and show phone icon
textId = R.string.lockscreen_return_to_call;
int phoneCallIcon = R.drawable.stat_sys_phone_call;
@@ -977,22 +994,4 @@ public class LockPatternUtils {
}
return false;
}
-
- /**
- * Performs concentenation of PLMN/SPN
- * @param plmn
- * @param spn
- * @return
- */
- public static CharSequence getCarrierString(CharSequence plmn, CharSequence spn) {
- if (plmn != null && spn == null) {
- return plmn;
- } else if (plmn != null && spn != null) {
- return plmn + "|" + spn;
- } else if (plmn == null && spn != null) {
- return spn;
- } else {
- return "";
- }
- }
}
diff --git a/core/java/com/android/internal/widget/TransportControlView.java b/core/java/com/android/internal/widget/TransportControlView.java
index 29ad15bc18b3..1042a59d6d24 100644
--- a/core/java/com/android/internal/widget/TransportControlView.java
+++ b/core/java/com/android/internal/widget/TransportControlView.java
@@ -21,6 +21,8 @@ import java.lang.ref.WeakReference;
import com.android.internal.widget.LockScreenWidgetCallback;
import com.android.internal.widget.LockScreenWidgetInterface;
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +35,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.text.Spannable;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
@@ -57,6 +60,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener
private static final int MSG_SET_ARTWORK = 103;
private static final int MSG_SET_GENERATION_ID = 104;
private static final int MAXDIM = 512;
+ private static final int DISPLAY_TIMEOUT_MS = 5000; // 5s
protected static final boolean DEBUG = true;
protected static final String TAG = "TransportControlView";
@@ -68,7 +72,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener
private int mClientGeneration;
private Metadata mMetadata = new Metadata();
private boolean mAttached;
- private ComponentName mClientName;
+ private PendingIntent mClientIntent;
private int mTransportControlFlags;
private int mPlayState;
private AudioManager mAudioManager;
@@ -100,6 +104,9 @@ public class TransportControlView extends FrameLayout implements OnClickListener
case MSG_SET_ARTWORK:
if (mClientGeneration == msg.arg1) {
+ if (mMetadata.bitmap != null) {
+ mMetadata.bitmap.recycle();
+ }
mMetadata.bitmap = (Bitmap) msg.obj;
mAlbumArt.setImageBitmap(mMetadata.bitmap);
}
@@ -116,7 +123,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener
}
}
mClientGeneration = msg.arg1;
- mClientName = (ComponentName) msg.obj;
+ mClientIntent = (PendingIntent) msg.obj;
break;
}
@@ -137,7 +144,7 @@ public class TransportControlView extends FrameLayout implements OnClickListener
mLocalHandler = new WeakReference<Handler>(handler);
}
- public void setPlaybackState(int generationId, int state) {
+ public void setPlaybackState(int generationId, int state, long stateChangeTimeMs) {
Handler handler = mLocalHandler.get();
if (handler != null) {
handler.obtainMessage(MSG_UPDATE_STATE, generationId, state).sendToTarget();
@@ -174,12 +181,12 @@ public class TransportControlView extends FrameLayout implements OnClickListener
}
}
- public void setCurrentClientId(int clientGeneration, ComponentName clientEventReceiver,
+ public void setCurrentClientId(int clientGeneration, PendingIntent mediaIntent,
boolean clearing) throws RemoteException {
Handler handler = mLocalHandler.get();
if (handler != null) {
handler.obtainMessage(MSG_SET_GENERATION_ID,
- clientGeneration, (clearing ? 1 : 0), clientEventReceiver).sendToTarget();
+ clientGeneration, (clearing ? 1 : 0), mediaIntent).sendToTarget();
}
}
};
@@ -365,16 +372,27 @@ public class TransportControlView extends FrameLayout implements OnClickListener
}
private void sendMediaButtonClick(int keyCode) {
- // TODO: target to specific player based on mClientName
+ // use the registered PendingIntent that will be processed by the registered
+ // media button event receiver, which is the component of mClientIntent
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- getContext().sendOrderedBroadcast(intent, null);
+ try {
+ mClientIntent.send(getContext(), 0, intent);
+ } catch (CanceledException e) {
+ Log.e(TAG, "Error sending intent for media button down: "+e);
+ e.printStackTrace();
+ }
keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
- getContext().sendOrderedBroadcast(intent, null);
+ try {
+ mClientIntent.send(getContext(), 0, intent);
+ } catch (CanceledException e) {
+ Log.e(TAG, "Error sending intent for media button up: "+e);
+ e.printStackTrace();
+ }
}
public void setCallback(LockScreenWidgetCallback callback) {
@@ -385,4 +403,33 @@ public class TransportControlView extends FrameLayout implements OnClickListener
return false;
}
+ private boolean wasPlayingRecently(int state, long stateChangeTimeMs) {
+ switch (state) {
+ case RemoteControlClient.PLAYSTATE_PLAYING:
+ case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
+ case RemoteControlClient.PLAYSTATE_REWINDING:
+ case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS:
+ case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
+ case RemoteControlClient.PLAYSTATE_BUFFERING:
+ // actively playing or about to play
+ return true;
+ case RemoteControlClient.PLAYSTATE_NONE:
+ return false;
+ case RemoteControlClient.PLAYSTATE_STOPPED:
+ case RemoteControlClient.PLAYSTATE_PAUSED:
+ case RemoteControlClient.PLAYSTATE_ERROR:
+ // we have stopped playing, check how long ago
+ if (DEBUG) {
+ if ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS) {
+ Log.v(TAG, "wasPlayingRecently: time < TIMEOUT was playing recently");
+ } else {
+ Log.v(TAG, "wasPlayingRecently: time > TIMEOUT");
+ }
+ }
+ return ((SystemClock.elapsedRealtime() - stateChangeTimeMs) < DISPLAY_TIMEOUT_MS);
+ default:
+ Log.e(TAG, "Unknown playback state " + state + " in wasPlayingRecently()");
+ return false;
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
index 173279e3d0c3..ebd355aa272c 100644
--- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
+++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
@@ -35,7 +35,6 @@ import android.util.Log;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
@@ -72,7 +71,7 @@ public class MultiWaveView extends View {
// Tune-able parameters
private static final int CHEVRON_INCREMENTAL_DELAY = 160;
- private static final int CHEVRON_ANIMATION_DURATION = 650;
+ private static final int CHEVRON_ANIMATION_DURATION = 850;
private static final int RETURN_TO_HOME_DELAY = 1200;
private static final int RETURN_TO_HOME_DURATION = 300;
private static final int HIDE_ANIMATION_DELAY = 200;
@@ -109,15 +108,19 @@ public class MultiWaveView extends View {
private boolean mDragging;
private int mNewTargetResources;
- private boolean mWaveHovered = false;
- private long mLastHoverExitTimeMillis = 0;
-
private AnimatorListener mResetListener = new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animator) {
switchToState(STATE_IDLE, mWaveCenterX, mWaveCenterY);
}
};
+ private AnimatorListener mResetListenerWithPing = new AnimatorListenerAdapter() {
+ public void onAnimationEnd(Animator animator) {
+ ping();
+ switchToState(STATE_IDLE, mWaveCenterX, mWaveCenterY);
+ }
+ };
+
private AnimatorUpdateListener mUpdateListener = new AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
invalidateGlobalRegion(mHandleDrawable);
@@ -301,7 +304,7 @@ public class MultiWaveView extends View {
*/
private void startChevronAnimation() {
final float r = mHandleDrawable.getWidth() * 0.4f;
- final float chevronAnimationDistance = mOuterRadius * 0.8f;
+ final float chevronAnimationDistance = mOuterRadius * 0.9f;
final float from[][] = {
{mWaveCenterX - r, mWaveCenterY}, // left
{mWaveCenterX + r, mWaveCenterY}, // right
@@ -314,6 +317,8 @@ public class MultiWaveView extends View {
{mWaveCenterX, mWaveCenterY + chevronAnimationDistance} }; // bottom
mChevronAnimations.clear();
+ final float startScale = 0.5f;
+ final float endScale = 2.0f;
for (int direction = 0; direction < 4; direction++) {
for (int count = 0; count < mFeedbackCount; count++) {
int delay = count * CHEVRON_INCREMENTAL_DELAY;
@@ -327,6 +332,8 @@ public class MultiWaveView extends View {
"x", new float[] { from[direction][0], to[direction][0] },
"y", new float[] { from[direction][1], to[direction][1] },
"alpha", new float[] {1.0f, 0.0f},
+ "scaleX", new float[] {startScale, endScale},
+ "scaleY", new float[] {startScale, endScale},
"onUpdate", mUpdateListener));
}
}
@@ -421,7 +428,7 @@ public class MultiWaveView extends View {
"x", mWaveCenterX,
"y", mWaveCenterY,
"onUpdate", mUpdateListener,
- "onComplete", mResetListener);
+ "onComplete", mDragging ? mResetListenerWithPing : mResetListener);
}
setGrabbedState(OnTriggerListener.NO_HANDLE);
@@ -660,59 +667,13 @@ public class MultiWaveView extends View {
}
private void handleDown(MotionEvent event) {
- final float x = event.getX();
- final float y = event.getY();
- final float dx = x - mWaveCenterX;
- final float dy = y - mWaveCenterY;
- if (dist2(dx,dy) <= getScaledTapRadiusSquared()) {
- if (DEBUG) Log.v(TAG, "** Handle HIT");
- switchToState(STATE_FIRST_TOUCH, x, y);
- moveHandleTo(x, y, false);
- mDragging = true;
- } else {
+ if (!trySwitchToFirstTouchState(event)) {
mDragging = false;
stopTargetAnimation();
ping();
}
}
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
- final int action = event.getAction();
- switch (action) {
- case MotionEvent.ACTION_HOVER_ENTER:
- case MotionEvent.ACTION_HOVER_MOVE:
- final float dx = event.getX() - mWaveCenterX;
- final float dy = event.getY() - mWaveCenterY;
- if (dist2(dx,dy) <= getScaledTapRadiusSquared()) {
- if (!mWaveHovered) {
- mWaveHovered = true;
- final long timeSinceLastHoverExitMillis =
- event.getEventTime() - mLastHoverExitTimeMillis;
- final long recurringEventsInterval =
- ViewConfiguration.getSendRecurringAccessibilityEventsInterval();
- if (timeSinceLastHoverExitMillis > recurringEventsInterval) {
- String text =
- mContext.getString(R.string.content_description_sliding_handle);
- announceText(text);
- }
- }
- } else {
- mWaveHovered = false;
- }
- break;
- case MotionEvent.ACTION_HOVER_EXIT:
- mLastHoverExitTimeMillis = event.getEventTime();
- mWaveHovered = false;
- break;
- default:
- mWaveHovered = false;
- }
- }
- return super.onHoverEvent(event);
- }
-
private void handleUp(MotionEvent event) {
if (DEBUG && mDragging) Log.v(TAG, "** Handle RELEASE");
switchToState(STATE_FINISH, event.getX(), event.getY());
@@ -720,6 +681,7 @@ public class MultiWaveView extends View {
private void handleMove(MotionEvent event) {
if (!mDragging) {
+ trySwitchToFirstTouchState(event);
return;
}
@@ -792,6 +754,27 @@ public class MultiWaveView extends View {
mActiveTarget = activeTarget;
}
+ @Override
+ public boolean onHoverEvent(MotionEvent event) {
+ if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
+ 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;
+ }
+ onTouchEvent(event);
+ event.setAction(action);
+ }
+ return super.onHoverEvent(event);
+ }
+
/**
* Sets the current grabbed state, and dispatches a grabbed state change
* event to our listener.
@@ -808,6 +791,21 @@ public class MultiWaveView extends View {
}
}
+ private boolean trySwitchToFirstTouchState(MotionEvent event) {
+ final float x = event.getX();
+ final float y = event.getY();
+ final float dx = x - mWaveCenterX;
+ final float dy = y - mWaveCenterY;
+ if (dist2(dx,dy) <= getScaledTapRadiusSquared()) {
+ if (DEBUG) Log.v(TAG, "** Handle HIT");
+ switchToState(STATE_FIRST_TOUCH, x, y);
+ moveHandleTo(x, y, false);
+ mDragging = true;
+ return true;
+ }
+ return false;
+ }
+
private void performInitialLayout(float centerX, float centerY) {
if (mOuterRadius == 0.0f) {
mOuterRadius = 0.5f*(float) Math.sqrt(dist2(centerX, centerY));
diff --git a/core/java/com/android/server/NetworkManagementSocketTagger.java b/core/java/com/android/server/NetworkManagementSocketTagger.java
index 9f6ab315c304..8445ad10ae4f 100644
--- a/core/java/com/android/server/NetworkManagementSocketTagger.java
+++ b/core/java/com/android/server/NetworkManagementSocketTagger.java
@@ -75,30 +75,20 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
Log.d(TAG, "tagSocket(" + fd.getInt$() + ") with statsTag=0x"
+ Integer.toHexString(options.statsTag) + ", statsUid=" + options.statsUid);
}
- try {
- // TODO: skip tagging when options would be no-op
- tagSocketFd(fd, options.statsTag, options.statsUid);
- } catch (IOException e) {
- throw new SocketException("Problem tagging socket", e);
- }
+ // TODO: skip tagging when options would be no-op
+ tagSocketFd(fd, options.statsTag, options.statsUid);
}
- private void tagSocketFd(FileDescriptor fd, int tag, int uid) throws IOException {
- final int fdNum = fd.getInt$();
- if (fdNum == -1 || (tag == -1 && uid == -1)) return;
-
- String cmd = "t " + fdNum;
- if (tag == -1) {
- // Case where just the uid needs adjusting. But probably the caller
- // will want to track his own name here, just in case.
- cmd += " 0";
- } else {
- cmd += " " + tagToKernel(tag);
- }
- if (uid != -1) {
- cmd += " " + uid;
+ private void tagSocketFd(FileDescriptor fd, int tag, int uid) {
+ int errno;
+ if (tag == -1 && uid == -1) return;
+
+ errno = native_tagSocketFd(fd, tag, uid);
+ if (errno < 0) {
+ Log.i(TAG, "tagSocketFd(" + fd.getInt$() + ", "
+ + tag + ", " +
+ + uid + ") failed with errno" + errno);
}
- internalModuleCtrl(cmd);
}
@Override
@@ -106,19 +96,18 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
if (LOGD) {
Log.i(TAG, "untagSocket(" + fd.getInt$() + ")");
}
- try {
- unTagSocketFd(fd);
- } catch (IOException e) {
- throw new SocketException("Problem untagging socket", e);
- }
+ unTagSocketFd(fd);
}
- private void unTagSocketFd(FileDescriptor fd) throws IOException {
- int fdNum = fd.getInt$();
+ private void unTagSocketFd(FileDescriptor fd) {
final SocketTags options = threadSocketTags.get();
- if (fdNum == -1 || (options.statsTag == -1 && options.statsUid == -1)) return;
- String cmd = "u " + fdNum;
- internalModuleCtrl(cmd);
+ int errno;
+ if (options.statsTag == -1 && options.statsUid == -1) return;
+
+ errno = native_untagSocketFd(fd);
+ if (errno < 0) {
+ Log.w(TAG, "untagSocket(" + fd.getInt$() + ") failed with errno " + errno);
+ }
}
public static class SocketTags {
@@ -127,69 +116,20 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
}
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);
+ int errno = native_setCounterSet(counterSet, uid);
+ if (errno < 0) {
+ Log.w(TAG, "setKernelCountSet(" + uid + ", " + counterSet + ") failed with errno " + errno);
}
}
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);
+ int errno = native_deleteTagData(0, uid);
+ if (errno < 0) {
+ Slog.w(TAG, "problem clearing counters for uid " + uid + " : errno " + errno);
}
}
/**
- * Sends commands to the kernel netfilter module.
- *
- * @param cmd command string for the qtaguid netfilter module. May not be null.
- * <p>Supports:
- * <ul><li>tag a socket:<br>
- * <code>t <i>sock_fd</i> <i>acct_tag</i> [<i>uid_in_case_caller_is_acting_on_behalf_of</i>]</code><br>
- * <code>*_tag</code> defaults to default_policy_tag_from_uid(uid_of_caller)<br>
- * <code>acct_tag</code> is either 0 or greater that 2^32.<br>
- * <code>uid_*</code> is only settable by privileged UIDs (DownloadManager,...)
- * </li>
- * <li>untag a socket, preserving counters:<br>
- * <code>u <i>sock_fd</i></code>
- * </li></ul>
- * <p>Notes:<br>
- * <ul><li><i>sock_fd</i> is withing the callers process space.</li>
- * <li><i>*_tag</i> are 64bit values</li></ul>
- *
- */
- private static void internalModuleCtrl(String cmd) throws IOException {
- if (!SystemProperties.getBoolean(PROP_QTAGUID_ENABLED, false)) return;
-
- // TODO: migrate to native library for tagging commands
- FileOutputStream procOut = null;
- try {
- procOut = new FileOutputStream("/proc/net/xt_qtaguid/ctrl");
- procOut.write(cmd.getBytes(Charsets.US_ASCII));
- } finally {
- IoUtils.closeQuietly(procOut);
- }
- }
-
- /**
- * Convert {@link Integer} tag to {@code /proc/} format. Assumes unsigned
- * base-10 format like {@code 2147483647}. Currently strips signed bit to
- * avoid using {@link BigInteger}.
- */
- public static String tagToKernel(int tag) {
- // TODO: eventually write in hex, since that's what proc exports
- // TODO: migrate to direct integer instead of odd shifting
- return Long.toString((((long) tag) << 32) & 0x7FFFFFFF00000000L);
- }
-
- /**
* Convert {@code /proc/} tag format to {@link Integer}. Assumes incoming
* format like {@code 0x7fffffff00000000}.
*/
@@ -197,4 +137,9 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
// TODO: migrate to direct integer instead of odd shifting
return (int) (Long.decode(string) >> 32);
}
+
+ private static native int native_tagSocketFd(FileDescriptor fd, int tag, int uid);
+ private static native int native_untagSocketFd(FileDescriptor fd);
+ private static native int native_setCounterSet(int uid, int counterSetNum);
+ private static native int native_deleteTagData(int tag, int uid);
}
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index aece5f0b6e7e..59a03e7833c5 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -143,6 +143,7 @@ LOCAL_SRC_FILES:= \
android_server_BluetoothService.cpp \
android_server_BluetoothEventLoop.cpp \
android_server_BluetoothA2dpService.cpp \
+ android_server_NetworkManagementSocketTagger.cpp \
android_server_Watchdog.cpp \
android_ddm_DdmHandleNativeHeap.cpp \
com_android_internal_os_ZygoteInit.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index dd7dd867d5f2..12ec1b65da94 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -155,6 +155,7 @@ extern int register_android_bluetooth_BluetoothSocket(JNIEnv *env);
extern int register_android_server_BluetoothService(JNIEnv* env);
extern int register_android_server_BluetoothEventLoop(JNIEnv *env);
extern int register_android_server_BluetoothA2dpService(JNIEnv* env);
+extern int register_android_server_NetworkManagementSocketTagger(JNIEnv* env);
extern int register_android_server_Watchdog(JNIEnv* env);
extern int register_android_ddm_DdmHandleNativeHeap(JNIEnv *env);
extern int register_com_android_internal_os_ZygoteInit(JNIEnv* env);
@@ -1178,6 +1179,7 @@ static const RegJNIRec gRegJNI[] = {
REG_JNI(register_android_server_BluetoothService),
REG_JNI(register_android_server_BluetoothEventLoop),
REG_JNI(register_android_server_BluetoothA2dpService),
+ REG_JNI(register_android_server_NetworkManagementSocketTagger),
REG_JNI(register_android_server_Watchdog),
REG_JNI(register_android_ddm_DdmHandleNativeHeap),
REG_JNI(register_android_backup_BackupDataInput),
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index 9313d0afce2b..02c5bb3a2885 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -758,21 +758,7 @@ public:
jfloat x, jfloat y, int flags, SkPaint* paint) {
jint count = end - start;
- sp<TextLayoutCacheValue> value;
-#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count,
- end, flags);
- if (value == NULL) {
- LOGE("Cannot get TextLayoutCache value");
- return ;
- }
-#else
- value = new TextLayoutCacheValue();
- value->computeValues(paint, textArray, start, count, end, flags);
-#endif
-
- doDrawGlyphs(canvas, value->getGlyphs(), 0, value->getGlyphsCount(),
- x, y, flags, paint);
+ drawTextWithGlyphs(canvas, textArray + start, 0, count, count, x, y, flags, paint);
}
static void drawTextWithGlyphs(SkCanvas* canvas, const jchar* textArray,
@@ -781,19 +767,20 @@ public:
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, textArray, start, count,
- contextCount, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, textArray, contextCount, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, textArray, start, count, contextCount, flags);
+ value->computeValues(paint, textArray, contextCount, flags);
#endif
-
- doDrawGlyphs(canvas, value->getGlyphs(), 0, value->getGlyphsCount(),
- x, y, flags, paint);
+ size_t startIndex = 0;
+ size_t glyphsCount = 0;
+ value->getGlyphsIndexAndCount(start, count, &startIndex, &glyphsCount);
+ const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
+ doDrawGlyphs(canvas, glyphs, 0, glyphsCount, x, y, flags, paint);
}
static void doDrawGlyphs(SkCanvas* canvas, const jchar* glyphArray, int index, int count,
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 7d222f639392..3daf7d0273cd 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -352,7 +352,7 @@ public:
jfloat result = 0;
#if RTL_USE_HARFBUZZ
TextLayout::getTextRunAdvances(paint, textArray, index, count, textLength,
- paint->getFlags(), NULL /* dont need all advances */, result);
+ paint->getFlags(), NULL /* dont need all advances */, &result);
#else
// we double count, since measureText wants a byteLength
SkScalar width = paint->measureText(textArray + index, count << 1);
@@ -382,7 +382,7 @@ public:
#if RTL_USE_HARFBUZZ
TextLayout::getTextRunAdvances(paint, textArray, start, count, textLength,
- paint->getFlags(), NULL /* dont need all advances */, width);
+ paint->getFlags(), NULL /* dont need all advances */, &width);
#else
width = SkScalarToFloat(paint->measureText(textArray + start, count << 1));
@@ -406,7 +406,7 @@ public:
#if RTL_USE_HARFBUZZ
TextLayout::getTextRunAdvances(paint, textArray, 0, textLength, textLength,
- paint->getFlags(), NULL /* dont need all advances */, width);
+ paint->getFlags(), NULL /* dont need all advances */, &width);
#else
width = SkScalarToFloat(paint->measureText(textArray, textLength << 1));
#endif
@@ -435,10 +435,8 @@ public:
jfloat* widthsArray = autoWidths.ptr();
#if RTL_USE_HARFBUZZ
- jfloat totalAdvance;
-
TextLayout::getTextRunAdvances(paint, text, 0, count, count,
- paint->getFlags(), widthsArray, totalAdvance);
+ paint->getFlags(), widthsArray, NULL /* dont need totalAdvance */);
#else
SkScalar* scalarArray = (SkScalar*)widthsArray;
@@ -533,7 +531,7 @@ public:
jfloat totalAdvance = 0;
TextLayout::getTextRunAdvances(paint, text, start, count, contextCount, flags,
- advancesArray, totalAdvance);
+ advancesArray, &totalAdvance);
if (advances != NULL) {
env->SetFloatArrayRegion(advances, advancesIndex, count, advancesArray);
@@ -604,10 +602,9 @@ public:
jint count, jint flags, jint offset, jint opt) {
#if RTL_USE_HARFBUZZ
jfloat scalarArray[count];
- jfloat totalAdvance = 0;
TextLayout::getTextRunAdvances(paint, text, start, count, count, flags,
- scalarArray, totalAdvance);
+ scalarArray, NULL /* dont need totalAdvance */);
#else
SkScalar scalarArray[count];
jchar buffer[count];
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index fa9a7b740fc1..ae17aed1a8e0 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -253,37 +253,30 @@ void TextLayout::drawTextRun(SkPaint* paint, const jchar* chars,
void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
jint count, jint contextCount, jint dirFlags,
- jfloat* resultAdvances, jfloat& resultTotalAdvance) {
+ jfloat* resultAdvances, jfloat* resultTotalAdvance) {
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
// Return advances from the cache. Compute them if needed
- value = TextLayoutCache::getInstance().getValue(
- paint, chars, start, count, contextCount, dirFlags);
+ value = TextLayoutCache::getInstance().getValue(paint, chars, contextCount, dirFlags);
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, chars, start, count, contextCount, dirFlags);
+ value->computeValues(paint, chars, contextCount, dirFlags);
#endif
if (value != NULL) {
if (resultAdvances != NULL) {
- memcpy(resultAdvances, value->getAdvances(), value->getAdvancesCount() * sizeof(jfloat));
+ value->getAdvances(start, count, resultAdvances);
+ }
+ if (resultTotalAdvance) {
+ *resultTotalAdvance = value->getTotalAdvance(start, count);
}
- resultTotalAdvance = value->getTotalAdvance();
}
}
-void TextLayout::getTextRunAdvancesHB(SkPaint* paint, const jchar* chars, jint start,
- jint count, jint contextCount, jint dirFlags,
- jfloat* resultAdvances, jfloat& resultTotalAdvance) {
- // Compute advances and return them
- TextLayoutCacheValue::computeValuesWithHarfbuzz(paint, chars, start, count, contextCount,
- dirFlags, resultAdvances, &resultTotalAdvance, NULL, NULL);
-}
-
void TextLayout::getTextRunAdvancesICU(SkPaint* paint, const jchar* chars, jint start,
jint count, jint contextCount, jint dirFlags,
jfloat* resultAdvances, jfloat& resultTotalAdvance) {
// Compute advances and return them
- TextLayoutCacheValue::computeAdvancesWithICU(paint, chars, start, count, contextCount, dirFlags,
+ computeAdvancesWithICU(paint, chars, start, count, contextCount, dirFlags,
resultAdvances, &resultTotalAdvance);
}
@@ -321,4 +314,73 @@ void TextLayout::drawTextOnPath(SkPaint* paint, const jchar* text, int count,
}
}
+void TextLayout::computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
+ size_t start, size_t count, size_t contextCount, int dirFlags,
+ jfloat* outAdvances, jfloat* outTotalAdvance) {
+ SkAutoSTMalloc<CHAR_BUFFER_SIZE, jchar> tempBuffer(contextCount);
+ jchar* buffer = tempBuffer.get();
+ SkScalar* scalarArray = (SkScalar*)outAdvances;
+
+ // this is where we'd call harfbuzz
+ // for now we just use ushape.c
+ size_t widths;
+ const jchar* text;
+ if (dirFlags & 0x1) { // rtl, call arabic shaping in case
+ UErrorCode status = U_ZERO_ERROR;
+ // Use fixed length since we need to keep start and count valid
+ u_shapeArabic(chars, contextCount, buffer, contextCount,
+ U_SHAPE_LENGTH_FIXED_SPACES_NEAR |
+ U_SHAPE_TEXT_DIRECTION_LOGICAL | U_SHAPE_LETTERS_SHAPE |
+ U_SHAPE_X_LAMALEF_SUB_ALTERNATE, &status);
+ // we shouldn't fail unless there's an out of memory condition,
+ // in which case we're hosed anyway
+ for (int i = start, e = i + count; i < e; ++i) {
+ if (buffer[i] == UNICODE_NOT_A_CHAR) {
+ buffer[i] = UNICODE_ZWSP; // zero-width-space for skia
+ }
+ }
+ text = buffer + start;
+ widths = paint->getTextWidths(text, count << 1, scalarArray);
+ } else {
+ text = chars + start;
+ widths = paint->getTextWidths(text, count << 1, scalarArray);
+ }
+
+ jfloat totalAdvance = 0;
+ if (widths < count) {
+#if DEBUG_ADVANCES
+ LOGD("ICU -- count=%d", widths);
+#endif
+ // Skia operates on code points, not code units, so surrogate pairs return only
+ // one value. Expand the result so we have one value per UTF-16 code unit.
+
+ // Note, skia's getTextWidth gets confused if it encounters a surrogate pair,
+ // leaving the remaining widths zero. Not nice.
+ for (size_t i = 0, p = 0; i < widths; ++i) {
+ totalAdvance += outAdvances[p++] = SkScalarToFloat(scalarArray[i]);
+ if (p < count &&
+ text[p] >= UNICODE_FIRST_LOW_SURROGATE &&
+ text[p] < UNICODE_FIRST_PRIVATE_USE &&
+ text[p-1] >= UNICODE_FIRST_HIGH_SURROGATE &&
+ text[p-1] < UNICODE_FIRST_LOW_SURROGATE) {
+ outAdvances[p++] = 0;
+ }
+#if DEBUG_ADVANCES
+ LOGD("icu-adv = %f - total = %f", outAdvances[i], totalAdvance);
+#endif
+ }
+ } else {
+#if DEBUG_ADVANCES
+ LOGD("ICU -- count=%d", count);
+#endif
+ for (size_t i = 0; i < count; i++) {
+ totalAdvance += outAdvances[i] = SkScalarToFloat(scalarArray[i]);
+#if DEBUG_ADVANCES
+ LOGD("icu-adv = %f - total = %f", outAdvances[i], totalAdvance);
+#endif
+ }
+ }
+ *outTotalAdvance = totalAdvance;
+}
+
}
diff --git a/core/jni/android/graphics/TextLayout.h b/core/jni/android/graphics/TextLayout.h
index 0a29d7876a9d..9df38296e329 100644
--- a/core/jni/android/graphics/TextLayout.h
+++ b/core/jni/android/graphics/TextLayout.h
@@ -71,16 +71,12 @@ public:
static void getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
jint count, jint contextCount, jint dirFlags,
- jfloat* resultAdvances, jfloat& resultTotalAdvance);
+ jfloat* resultAdvances, jfloat* resultTotalAdvance);
static void getTextRunAdvancesICU(SkPaint* paint, const jchar* chars, jint start,
jint count, jint contextCount, jint dirFlags,
jfloat* resultAdvances, jfloat& resultTotalAdvance);
- static void getTextRunAdvancesHB(SkPaint* paint, const jchar* chars, jint start,
- jint count, jint contextCount, jint dirFlags,
- jfloat* resultAdvances, jfloat& resultTotalAdvance);
-
static void drawText(SkPaint* paint, const jchar* text, jsize len,
jint bidiFlags, jfloat x, jfloat y, SkCanvas* canvas);
@@ -106,5 +102,9 @@ private:
UErrorCode &status);
static void handleText(SkPaint* paint, const jchar* text, jsize len,
int bidiFlags, jfloat x, jfloat y, SkCanvas* canvas, SkPath* path);
+
+ static void computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
+ size_t start, size_t count, size_t contextCount, int dirFlags,
+ jfloat* outAdvances, jfloat* outTotalAdvance);
};
} // namespace android
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index d04e05977fb1..86ae7d2ae05f 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -52,13 +52,7 @@ void TextLayoutCache::init() {
mCacheStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
if (mDebugEnabled) {
- LOGD("Start time: %lld", mCacheStartTime);
-#if RTL_USE_HARFBUZZ
- LOGD("Using HARFBUZZ");
-#else
- LOGD("Using ICU");
-#endif
- LOGD("Initialization is done");
+ LOGD("Initialization is done - Start time: %lld", mCacheStartTime);
}
mInitialized = true;
@@ -112,7 +106,7 @@ void TextLayoutCache::clear() {
* Caching
*/
sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
- const jchar* text, jint start, jint count, jint contextCount, jint dirFlags) {
+ const jchar* text, jint count, jint dirFlags) {
AutoMutex _l(mLock);
nsecs_t startTime = 0;
if (mDebugEnabled) {
@@ -120,7 +114,7 @@ sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
}
// Create the key
- TextLayoutCacheKey key(paint, text, start, count, contextCount, dirFlags);
+ TextLayoutCacheKey key(paint, text, count, dirFlags);
// Get value from cache if possible
sp<TextLayoutCacheValue> value = mCache.get(key);
@@ -134,7 +128,7 @@ sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
value = new TextLayoutCacheValue();
// Compute advances and store them
- value->computeValues(paint, text, start, count, contextCount, dirFlags);
+ value->computeValues(paint, text, count, dirFlags);
nsecs_t endTime = systemTime(SYSTEM_TIME_MONOTONIC);
@@ -163,20 +157,20 @@ sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
// Update timing information for statistics
value->setElapsedTime(endTime - startTime);
- LOGD("CACHE MISS: Added entry with start=%d, count=%d, "
- "contextCount=%d, entry size %d bytes, remaining space %d bytes"
+ LOGD("CACHE MISS: Added entry with "
+ "count=%d, entry size %d bytes, remaining space %d bytes"
" - Compute time in nanos: %d - Text='%s' ",
- start, count, contextCount, size, mMaxSize - mSize, value->getElapsedTime(),
- String8(text, contextCount).string());
+ count, size, mMaxSize - mSize, value->getElapsedTime(),
+ String8(text, count).string());
}
} else {
if (mDebugEnabled) {
LOGD("CACHE MISS: Calculated but not storing entry because it is too big "
- "with start=%d, count=%d, contextCount=%d, "
+ "with count=%d, "
"entry size %d bytes, remaining space %d bytes"
" - Compute time in nanos: %lld - Text='%s'",
- start, count, contextCount, size, mMaxSize - mSize, endTime,
- String8(text, contextCount).string());
+ count, size, mMaxSize - mSize, endTime,
+ String8(text, count).string());
}
value.clear();
}
@@ -190,12 +184,12 @@ sp<TextLayoutCacheValue> TextLayoutCache::getValue(SkPaint* paint,
if (value->getElapsedTime() > 0) {
float deltaPercent = 100 * ((value->getElapsedTime() - elapsedTimeThruCacheGet)
/ ((float)value->getElapsedTime()));
- LOGD("CACHE HIT #%d with start=%d, count=%d, contextCount=%d "
+ LOGD("CACHE HIT #%d with count=%d "
"- Compute time in nanos: %d - "
"Cache get time in nanos: %lld - Gain in percent: %2.2f - Text='%s' ",
- mCacheHitCount, start, count, contextCount,
+ mCacheHitCount, count,
value->getElapsedTime(), elapsedTimeThruCacheGet, deltaPercent,
- String8(text, contextCount).string());
+ String8(text, count).string());
}
if (mCacheHitCount % DEFAULT_DUMP_STATS_CACHE_HIT_INTERVAL == 0) {
dumpCacheStats();
@@ -224,15 +218,14 @@ void TextLayoutCache::dumpCacheStats() {
/**
* TextLayoutCacheKey
*/
-TextLayoutCacheKey::TextLayoutCacheKey(): text(NULL), start(0), count(0), contextCount(0),
+TextLayoutCacheKey::TextLayoutCacheKey(): text(NULL), count(0),
dirFlags(0), typeface(NULL), textSize(0), textSkewX(0), textScaleX(0), flags(0),
hinting(SkPaint::kNo_Hinting) {
}
TextLayoutCacheKey::TextLayoutCacheKey(const SkPaint* paint,
- const UChar* text, size_t start, size_t count,
- size_t contextCount, int dirFlags) :
- text(text), start(start), count(count), contextCount(contextCount),
+ const UChar* text, size_t count, int dirFlags) :
+ text(text), count(count),
dirFlags(dirFlags) {
typeface = paint->getTypeface();
textSize = paint->getTextSize();
@@ -242,20 +235,33 @@ TextLayoutCacheKey::TextLayoutCacheKey(const SkPaint* paint,
hinting = paint->getHinting();
}
+TextLayoutCacheKey::TextLayoutCacheKey(const TextLayoutCacheKey& other) :
+ text(NULL),
+ textCopy(other.textCopy),
+ count(other.count),
+ dirFlags(other.dirFlags),
+ typeface(other.typeface),
+ textSize(other.textSize),
+ textSkewX(other.textSkewX),
+ textScaleX(other.textScaleX),
+ flags(other.flags),
+ hinting(other.hinting) {
+ if (other.text) {
+ textCopy.setTo(other.text);
+ }
+}
+
bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
LTE_INT(count) {
- LTE_INT(contextCount) {
- LTE_INT(start) {
- LTE_INT(typeface) {
- LTE_FLOAT(textSize) {
- LTE_FLOAT(textSkewX) {
- LTE_FLOAT(textScaleX) {
- LTE_INT(flags) {
- LTE_INT(hinting) {
- LTE_INT(dirFlags) {
- return strncmp16(text, rhs.text, contextCount) < 0;
- }
- }
+ LTE_INT(typeface) {
+ LTE_FLOAT(textSize) {
+ LTE_FLOAT(textSkewX) {
+ LTE_FLOAT(textScaleX) {
+ LTE_INT(flags) {
+ LTE_INT(hinting) {
+ LTE_INT(dirFlags) {
+ return memcmp(getText(), rhs.getText(),
+ count * sizeof(UChar)) < 0;
}
}
}
@@ -268,25 +274,19 @@ bool TextLayoutCacheKey::operator<(const TextLayoutCacheKey& rhs) const {
}
void TextLayoutCacheKey::internalTextCopy() {
- textCopy.setTo(text, contextCount);
- text = textCopy.string();
+ textCopy.setTo(text, count);
+ text = NULL;
}
size_t TextLayoutCacheKey::getSize() {
- return sizeof(TextLayoutCacheKey) + sizeof(UChar) * contextCount;
+ return sizeof(TextLayoutCacheKey) + sizeof(UChar) * count;
}
/**
* TextLayoutCacheValue
*/
TextLayoutCacheValue::TextLayoutCacheValue() :
- mAdvances(NULL), mTotalAdvance(0), mAdvancesCount(0),
- mGlyphs(NULL), mGlyphsCount(0), mElapsedTime(0) {
-}
-
-TextLayoutCacheValue::~TextLayoutCacheValue() {
- delete[] mAdvances;
- delete[] mGlyphs;
+ mTotalAdvance(0), mElapsedTime(0) {
}
void TextLayoutCacheValue::setElapsedTime(uint32_t time) {
@@ -297,28 +297,23 @@ uint32_t TextLayoutCacheValue::getElapsedTime() {
return mElapsedTime;
}
-void TextLayoutCacheValue::computeValues(SkPaint* paint, const UChar* chars, size_t start,
- size_t count, size_t contextCount, int dirFlags) {
- mAdvancesCount = count;
- mAdvances = new float[count];
+void TextLayoutCacheValue::computeValues(SkPaint* paint, const UChar* chars,
+ size_t contextCount, int dirFlags) {
+ // Give a hint for advances, glyphs and log clusters vectors size
+ mAdvances.setCapacity(contextCount);
+ mGlyphs.setCapacity(contextCount);
+ mLogClusters.setCapacity(contextCount);
-#if RTL_USE_HARFBUZZ
- computeValuesWithHarfbuzz(paint, chars, start, count, contextCount, dirFlags,
- mAdvances, &mTotalAdvance, &mGlyphs, &mGlyphsCount);
-#else
- computeAdvancesWithICU(paint, chars, start, count, contextCount, dirFlags,
- mAdvances, &mTotalAdvance);
-#endif
+ computeValuesWithHarfbuzz(paint, chars, contextCount, dirFlags,
+ &mAdvances, &mTotalAdvance, &mGlyphs, &mLogClusters);
#if DEBUG_ADVANCES
- LOGD("Advances - count=%d - countextCount=%d - totalAdvance=%f - "
- "adv[0]=%f adv[1]=%f adv[2]=%f adv[3]=%f", count, contextCount, mTotalAdvance,
- mAdvances[0], mAdvances[1], mAdvances[2], mAdvances[3]);
+ LOGD("Advances - countextCount=%d - totalAdvance=%f", contextCount, mTotalAdvance);
#endif
}
size_t TextLayoutCacheValue::getSize() {
- return sizeof(TextLayoutCacheValue) + sizeof(jfloat) * mAdvancesCount +
- sizeof(jchar) * mGlyphsCount;
+ return sizeof(TextLayoutCacheValue) + sizeof(jfloat) * mAdvances.capacity() +
+ sizeof(jchar) * mGlyphs.capacity() + sizeof(unsigned short) * mLogClusters.capacity();
}
void TextLayoutCacheValue::setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec* font,
@@ -389,27 +384,10 @@ void TextLayoutCacheValue::shapeWithHarfbuzz(HB_ShaperItem* shaperItem, HB_FontR
}
}
-struct GlyphRun {
- inline GlyphRun() {}
- inline GlyphRun(jchar* glyphs, size_t glyphsCount, bool isRTL) :
- glyphs(glyphs), glyphsCount(glyphsCount), isRTL(isRTL) { }
- jchar* glyphs;
- size_t glyphsCount;
- int isRTL;
-};
-
-void static reverseGlyphArray(jchar* glyphs, size_t count) {
- for (size_t i = 0; i < count / 2; i++) {
- jchar temp = glyphs[i];
- glyphs[i] = glyphs[count - 1 - i];
- glyphs[count - 1 - i] = temp;
- }
-}
-
void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
- size_t start, size_t count, size_t contextCount, int dirFlags,
- jfloat* outAdvances, jfloat* outTotalAdvance,
- jchar** outGlyphs, size_t* outGlyphsCount) {
+ size_t contextCount, int dirFlags,
+ Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+ Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters) {
UBiDiLevel bidiReq = 0;
bool forceLTR = false;
@@ -429,12 +407,8 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar
LOGD("computeValuesWithHarfbuzz -- forcing run with LTR=%d RTL=%d",
forceLTR, forceRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, start, count, contextCount, forceRTL,
- outAdvances, outTotalAdvance, outGlyphs, outGlyphsCount);
-
- if (forceRTL && *outGlyphsCount > 1) {
- reverseGlyphArray(*outGlyphs, *outGlyphsCount);
- }
+ computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount, forceRTL,
+ outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
} else {
UBiDi* bidi = ubidi_open();
if (bidi) {
@@ -453,42 +427,16 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar
bool isRTL = (paraDir == 1);
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- processing SINGLE run "
- "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL);
+ "-- run-start=%d run-len=%d isRTL=%d", 0, contextCount, isRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, start, count, contextCount,
- isRTL, outAdvances, outTotalAdvance, outGlyphs, outGlyphsCount);
-
- if (isRTL && *outGlyphsCount > 1) {
- reverseGlyphArray(*outGlyphs, *outGlyphsCount);
- }
+ computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount,
+ isRTL, outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
} else {
- Vector<GlyphRun> glyphRuns;
- jchar* runGlyphs;
- size_t runGlyphsCount = 0;
- int32_t end = start + count;
for (size_t i = 0; i < rc; ++i) {
int32_t startRun;
int32_t lengthRun;
UBiDiDirection runDir = ubidi_getVisualRun(bidi, i, &startRun, &lengthRun);
- if (startRun >= end) {
- break;
- }
-
- int32_t endRun = startRun + lengthRun;
- if (endRun <= start) {
- continue;
- }
-
- if (startRun < start) {
- startRun = start;
- }
- if (endRun > end) {
- endRun = end;
- }
-
- lengthRun = endRun - startRun;
-
bool isRTL = (runDir == UBIDI_RTL);
jfloat runTotalAdvance = 0;
#if DEBUG_GLYPHS
@@ -498,34 +446,9 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar
computeRunValuesWithHarfbuzz(paint, chars, startRun,
lengthRun, contextCount, isRTL,
outAdvances, &runTotalAdvance,
- &runGlyphs, &runGlyphsCount);
+ outGlyphs, outLogClusters);
- outAdvances += lengthRun;
*outTotalAdvance += runTotalAdvance;
- *outGlyphsCount += runGlyphsCount;
-#if DEBUG_GLYPHS
- LOGD("computeValuesWithHarfbuzz -- run=%d run-glyphs-count=%d",
- i, runGlyphsCount);
- for (size_t j = 0; j < runGlyphsCount; j++) {
- LOGD(" -- glyphs[%d]=%d", j, runGlyphs[j]);
- }
-#endif
- glyphRuns.push(GlyphRun(runGlyphs, runGlyphsCount, isRTL));
- }
- *outGlyphs = new jchar[*outGlyphsCount];
-
- jchar* glyphs = *outGlyphs;
- for (size_t i = 0; i < glyphRuns.size(); i++) {
- const GlyphRun& glyphRun = glyphRuns.itemAt(i);
- if (glyphRun.isRTL) {
- for (size_t n = 0; n < glyphRun.glyphsCount; n++) {
- glyphs[glyphRun.glyphsCount - n - 1] = glyphRun.glyphs[n];
- }
- } else {
- memcpy(glyphs, glyphRun.glyphs, glyphRun.glyphsCount * sizeof(jchar));
- }
- glyphs += glyphRun.glyphsCount;
- delete[] glyphRun.glyphs;
}
}
}
@@ -535,25 +458,21 @@ void TextLayoutCacheValue::computeValuesWithHarfbuzz(SkPaint* paint, const UChar
bool isRTL = (bidiReq = 1) || (bidiReq = UBIDI_DEFAULT_RTL);
#if DEBUG_GLYPHS
LOGD("computeValuesWithHarfbuzz -- cannot run BiDi, considering a SINGLE Run "
- "-- run-start=%d run-len=%d isRTL=%d", start, count, isRTL);
+ "-- run-start=%d run-len=%d isRTL=%d", 0, contextCount, isRTL);
#endif
- computeRunValuesWithHarfbuzz(paint, chars, start, count, contextCount, isRTL,
- outAdvances, outTotalAdvance, outGlyphs, outGlyphsCount);
-
- if (isRTL && *outGlyphsCount > 1) {
- reverseGlyphArray(*outGlyphs, *outGlyphsCount);
- }
+ computeRunValuesWithHarfbuzz(paint, chars, 0, contextCount, contextCount, isRTL,
+ outAdvances, outTotalAdvance, outGlyphs, outLogClusters);
}
}
#if DEBUG_GLYPHS
- LOGD("computeValuesWithHarfbuzz -- total-glyphs-count=%d", *outGlyphsCount);
+ LOGD("computeValuesWithHarfbuzz -- total-glyphs-count=%d", outGlyphs->size());
#endif
}
static void logGlyphs(HB_ShaperItem shaperItem) {
LOGD("Got glyphs - count=%d", shaperItem.num_glyphs);
for (size_t i = 0; i < shaperItem.num_glyphs; i++) {
- LOGD(" glyphs[%d]=%d - offset.x=%f offset.y=%f", i, shaperItem.glyphs[i],
+ LOGD(" glyph[%d]=%d - offset.x=%f offset.y=%f", i, shaperItem.glyphs[i],
HBFixedToFloat(shaperItem.offsets[i].x),
HBFixedToFloat(shaperItem.offsets[i].y));
}
@@ -561,12 +480,13 @@ static void logGlyphs(HB_ShaperItem shaperItem) {
void TextLayoutCacheValue::computeRunValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
size_t start, size_t count, size_t contextCount, bool isRTL,
- jfloat* outAdvances, jfloat* outTotalAdvance,
- jchar** outGlyphs, size_t* outGlyphsCount) {
+ Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+ Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters) {
HB_ShaperItem shaperItem;
HB_FontRec font;
FontData fontData;
+
shapeWithHarfbuzz(&shaperItem, &font, &fontData, paint, chars, start, count,
contextCount, isRTL);
@@ -583,30 +503,28 @@ void TextLayoutCacheValue::computeRunValuesWithHarfbuzz(SkPaint* paint, const UC
#if DEBUG_GLYPHS
LOGD("HARFBUZZ -- advances array is empty or num_glypth = 0");
#endif
- for (size_t i = 0; i < count; i++) {
- outAdvances[i] = 0;
- }
+ outAdvances->insertAt(0, outAdvances->size(), count);
*outTotalAdvance = 0;
- if (outGlyphs) {
- *outGlyphsCount = 0;
- *outGlyphs = new jchar[0];
- }
-
// Cleaning
deleteGlyphArrays(&shaperItem);
HB_FreeFace(shaperItem.face);
return;
}
+
// Get Advances and their total
- jfloat totalAdvance = outAdvances[0] = HBFixedToFloat(shaperItem.advances[shaperItem.log_clusters[0]]);
+ jfloat currentAdvance = HBFixedToFloat(shaperItem.advances[shaperItem.log_clusters[0]]);
+ jfloat totalAdvance = currentAdvance;
+ outAdvances->add(currentAdvance);
for (size_t i = 1; i < count; i++) {
size_t clusterPrevious = shaperItem.log_clusters[i - 1];
size_t cluster = shaperItem.log_clusters[i];
if (cluster == clusterPrevious) {
- outAdvances[i] = 0;
+ outAdvances->add(0);
} else {
- totalAdvance += outAdvances[i] = HBFixedToFloat(shaperItem.advances[shaperItem.log_clusters[i]]);
+ currentAdvance = HBFixedToFloat(shaperItem.advances[shaperItem.log_clusters[i]]);
+ totalAdvance += currentAdvance;
+ outAdvances->add(currentAdvance);
}
}
*outTotalAdvance = totalAdvance;
@@ -614,91 +532,38 @@ void TextLayoutCacheValue::computeRunValuesWithHarfbuzz(SkPaint* paint, const UC
#if DEBUG_ADVANCES
for (size_t i = 0; i < count; i++) {
LOGD("hb-adv[%d] = %f - log_clusters = %d - total = %f", i,
- outAdvances[i], shaperItem.log_clusters[i], totalAdvance);
+ (*outAdvances)[i], shaperItem.log_clusters[i], totalAdvance);
}
#endif
- // Get Glyphs
+ // Get Glyphs and reverse them in place if RTL
if (outGlyphs) {
- *outGlyphsCount = shaperItem.num_glyphs;
- *outGlyphs = new jchar[shaperItem.num_glyphs];
- for (size_t i = 0; i < shaperItem.num_glyphs; i++) {
- (*outGlyphs)[i] = (jchar) shaperItem.glyphs[i];
- }
- }
-
- // Cleaning
- deleteGlyphArrays(&shaperItem);
- HB_FreeFace(shaperItem.face);
-}
-
-void TextLayoutCacheValue::computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
- size_t start, size_t count, size_t contextCount, int dirFlags,
- jfloat* outAdvances, jfloat* outTotalAdvance) {
- SkAutoSTMalloc<CHAR_BUFFER_SIZE, jchar> tempBuffer(contextCount);
- jchar* buffer = tempBuffer.get();
- SkScalar* scalarArray = (SkScalar*)outAdvances;
-
- // this is where we'd call harfbuzz
- // for now we just use ushape.c
- size_t widths;
- const jchar* text;
- if (dirFlags & 0x1) { // rtl, call arabic shaping in case
- UErrorCode status = U_ZERO_ERROR;
- // Use fixed length since we need to keep start and count valid
- u_shapeArabic(chars, contextCount, buffer, contextCount,
- U_SHAPE_LENGTH_FIXED_SPACES_NEAR |
- U_SHAPE_TEXT_DIRECTION_LOGICAL | U_SHAPE_LETTERS_SHAPE |
- U_SHAPE_X_LAMALEF_SUB_ALTERNATE, &status);
- // we shouldn't fail unless there's an out of memory condition,
- // in which case we're hosed anyway
- for (int i = start, e = i + count; i < e; ++i) {
- if (buffer[i] == UNICODE_NOT_A_CHAR) {
- buffer[i] = UNICODE_ZWSP; // zero-width-space for skia
- }
+ size_t countGlyphs = shaperItem.num_glyphs;
+ for (size_t i = 0; i < countGlyphs; i++) {
+ jchar glyph = (jchar) shaperItem.glyphs[(!isRTL) ? i : countGlyphs - 1 - i];
+#if DEBUG_GLYPHS
+ LOGD("HARFBUZZ -- glyph[%d]=%d", i, glyph);
+#endif
+ outGlyphs->add(glyph);
}
- text = buffer + start;
- widths = paint->getTextWidths(text, count << 1, scalarArray);
- } else {
- text = chars + start;
- widths = paint->getTextWidths(text, count << 1, scalarArray);
}
- jfloat totalAdvance = 0;
- if (widths < count) {
-#if DEBUG_ADVANCES
- LOGD("ICU -- count=%d", widths);
-#endif
- // Skia operates on code points, not code units, so surrogate pairs return only
- // one value. Expand the result so we have one value per UTF-16 code unit.
-
- // Note, skia's getTextWidth gets confused if it encounters a surrogate pair,
- // leaving the remaining widths zero. Not nice.
- for (size_t i = 0, p = 0; i < widths; ++i) {
- totalAdvance += outAdvances[p++] = SkScalarToFloat(scalarArray[i]);
- if (p < count &&
- text[p] >= UNICODE_FIRST_LOW_SURROGATE &&
- text[p] < UNICODE_FIRST_PRIVATE_USE &&
- text[p-1] >= UNICODE_FIRST_HIGH_SURROGATE &&
- text[p-1] < UNICODE_FIRST_LOW_SURROGATE) {
- outAdvances[p++] = 0;
- }
-#if DEBUG_ADVANCES
- LOGD("icu-adv = %f - total = %f", outAdvances[i], totalAdvance);
-#endif
- }
- } else {
-#if DEBUG_ADVANCES
- LOGD("ICU -- count=%d", count);
-#endif
+ // Get LogClusters
+ if (outLogClusters) {
+ size_t countLogClusters = outLogClusters->size();
for (size_t i = 0; i < count; i++) {
- totalAdvance += outAdvances[i] = SkScalarToFloat(scalarArray[i]);
-#if DEBUG_ADVANCES
- LOGD("icu-adv = %f - total = %f", outAdvances[i], totalAdvance);
+ // As there may be successive runs, we need to shift the log clusters
+ unsigned short logCluster = shaperItem.log_clusters[i] + countLogClusters;
+#if DEBUG_GLYPHS
+ LOGD("HARFBUZZ -- logCluster[%d] relative=%d - absolute=%d", i, shaperItem.log_clusters[i], logCluster);
#endif
+ outLogClusters->add(logCluster);
}
}
- *outTotalAdvance = totalAdvance;
+
+ // Cleaning
+ deleteGlyphArrays(&shaperItem);
+ HB_FreeFace(shaperItem.face);
}
void TextLayoutCacheValue::deleteGlyphArrays(HB_ShaperItem* shaperItem) {
@@ -726,5 +591,57 @@ void TextLayoutCacheValue::resetGlyphArrays(HB_ShaperItem* shaperItem) {
memset(shaperItem->offsets, 0, size * sizeof(shaperItem->offsets[0]));
}
+void TextLayoutCacheValue::getAdvances(size_t start, size_t count, jfloat* outAdvances) const {
+ memcpy(outAdvances, mAdvances.array() + start, count * sizeof(jfloat));
+#if DEBUG_ADVANCES
+ LOGD("getAdvances - start=%d count=%d", start, count);
+ for (size_t i = 0; i < count; i++) {
+ LOGD(" adv[%d] = %f", i, outAdvances[i]);
+ }
+#endif
+}
+
+jfloat TextLayoutCacheValue::getTotalAdvance(size_t start, size_t count) const {
+ jfloat outTotalAdvance = 0;
+ for (size_t i = start; i < start + count; i++) {
+ outTotalAdvance += mAdvances[i];
+ }
+#if DEBUG_ADVANCES
+ LOGD("getTotalAdvance - start=%d count=%d - total=%f", start, count, outTotalAdvance);
+#endif
+ return outTotalAdvance;
+}
+
+void TextLayoutCacheValue::getGlyphsIndexAndCount(size_t start, size_t count, size_t* outStartIndex,
+ size_t* outGlyphsCount) const {
+ *outStartIndex = 0;
+ if (count == 0) {
+ *outGlyphsCount = 0;
+ return;
+ }
+ *outStartIndex = mLogClusters[start];
+ *outGlyphsCount = mLogClusters[start + count - 1] - mLogClusters[start] + 1;
+#if DEBUG_GLYPHS
+ LOGD("getGlyphsIndexes - start=%d count=%d - startIndex=%d count=%d", start, count,
+ *outStartIndex, *outGlyphsCount);
+ for(size_t i = 0; i < mGlyphs.size(); i++) {
+ LOGD("getGlyphs - all - glyph[%d] = %d", i, mGlyphs[i]);
+ }
+ for(size_t i = 0; i < mAdvances.size(); i++) {
+ LOGD("getGlyphs - all - logcl[%d] = %d", i, mLogClusters[i]);
+ }
+#endif
+}
+
+const jchar* TextLayoutCacheValue::getGlyphs(size_t startIndex, size_t count) {
+ const jchar* glyphs = mGlyphs.array() + startIndex;
+#if DEBUG_GLYPHS
+ LOGD("getGlyphs - with startIndex = %d count = %d", startIndex, count);
+ for (size_t i = 0; i < count; i++) {
+ LOGD("getGlyphs - result - glyph[%d] = %d", i, glyphs[i]);
+ }
+#endif
+ return glyphs;
+}
} // namespace android
diff --git a/core/jni/android/graphics/TextLayoutCache.h b/core/jni/android/graphics/TextLayoutCache.h
index 0d8d71fe7c26..35dd6fd8ed17 100644
--- a/core/jni/android/graphics/TextLayoutCache.h
+++ b/core/jni/android/graphics/TextLayoutCache.h
@@ -68,9 +68,9 @@ class TextLayoutCacheKey {
public:
TextLayoutCacheKey();
- TextLayoutCacheKey(const SkPaint* paint,
- const UChar* text, size_t start, size_t count,
- size_t contextCount, int dirFlags);
+ TextLayoutCacheKey(const SkPaint* paint, const UChar* text, size_t count, int dirFlags);
+
+ TextLayoutCacheKey(const TextLayoutCacheKey& other);
bool operator<(const TextLayoutCacheKey& rhs) const;
@@ -86,11 +86,9 @@ public:
size_t getSize();
private:
- const UChar* text;
+ const UChar* text; // if text is NULL, use textCopy
String16 textCopy;
- size_t start;
size_t count;
- size_t contextCount;
int dirFlags;
SkTypeface* typeface;
SkScalar textSize;
@@ -98,29 +96,29 @@ private:
SkScalar textScaleX;
uint32_t flags;
SkPaint::Hinting hinting;
+
+ inline const UChar* getText() const {
+ return text ? text : textCopy.string();
+ }
}; // TextLayoutCacheKey
/*
* TextLayoutCacheValue is the Cache value
*/
class TextLayoutCacheValue : public RefBase {
-protected:
- ~TextLayoutCacheValue();
-
public:
TextLayoutCacheValue();
void setElapsedTime(uint32_t time);
uint32_t getElapsedTime();
- void computeValues(SkPaint* paint, const UChar* chars, size_t start, size_t count,
- size_t contextCount, int dirFlags);
+ void computeValues(SkPaint* paint, const UChar* chars, size_t contextCount, int dirFlags);
- inline const jfloat* getAdvances() const { return mAdvances; }
- inline size_t getAdvancesCount() const { return mAdvancesCount; }
- inline jfloat getTotalAdvance() const { return mTotalAdvance; }
- inline const jchar* getGlyphs() const { return mGlyphs; }
- inline size_t getGlyphsCount() const { return mGlyphsCount; }
+ void getAdvances(size_t start, size_t count, jfloat* outAdvances) const;
+ jfloat getTotalAdvance(size_t start, size_t count) const;
+ void getGlyphsIndexAndCount(size_t start, size_t count, size_t* outStartIndex,
+ size_t* outGlyphsCount) const;
+ const jchar* getGlyphs(size_t startIndex, size_t count);
/**
* Get the size of the Cache entry
@@ -135,20 +133,16 @@ public:
SkPaint* paint, const UChar* chars, size_t start, size_t count, size_t contextCount,
bool isRTL);
- static void computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars, size_t start,
- size_t count, size_t contextCount, int dirFlags,
- jfloat* outAdvances, jfloat* outTotalAdvance,
- jchar** outGlyphs, size_t* outGlyphsCount);
-
- static void computeAdvancesWithICU(SkPaint* paint, const UChar* chars, size_t start,
- size_t count, size_t contextCount, int dirFlags,
- jfloat* outAdvances, jfloat* outTotalAdvance);
+ static void computeValuesWithHarfbuzz(SkPaint* paint, const UChar* chars,
+ size_t contextCount, int dirFlags,
+ Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+ Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters);
private:
/**
- * Advances array
+ * Advances vector
*/
- jfloat* mAdvances;
+ Vector<jfloat> mAdvances;
/**
* Total number of advances
@@ -156,19 +150,14 @@ private:
jfloat mTotalAdvance;
/**
- * Allocated size for advances array
- */
- size_t mAdvancesCount;
-
- /**
- * Glyphs array
+ * Glyphs vector
*/
- jchar* mGlyphs;
+ Vector<jchar> mGlyphs;
/**
- * Total number of glyphs
+ * Harfbuzz Log Clusters
*/
- size_t mGlyphsCount;
+ Vector<unsigned short> mLogClusters;
/**
* Time for computing the values (in milliseconds)
@@ -181,8 +170,8 @@ private:
static void computeRunValuesWithHarfbuzz(SkPaint* paint, const UChar* chars, size_t start,
size_t count, size_t contextCount, bool isRTL,
- jfloat* outAdvances, jfloat* outTotalAdvance,
- jchar** outGlyphs, size_t* outGlyphsCount);
+ Vector<jfloat>* const outAdvances, jfloat* outTotalAdvance,
+ Vector<jchar>* const outGlyphs, Vector<unsigned short>* const outLogClusters);
}; // TextLayoutCacheValue
/**
@@ -206,8 +195,8 @@ public:
*/
void operator()(TextLayoutCacheKey& text, sp<TextLayoutCacheValue>& desc);
- sp<TextLayoutCacheValue> getValue(SkPaint* paint,
- const jchar* text, jint start, jint count, jint contextCount, jint dirFlags);
+ sp<TextLayoutCacheValue> getValue(SkPaint* paint, const jchar* text, jint count,
+ jint dirFlags);
/**
* Clear the cache
diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp
index b36fa3e2f6b2..6ef62a9824f1 100644
--- a/core/jni/android_app_backup_FullBackup.cpp
+++ b/core/jni/android_app_backup_FullBackup.cpp
@@ -76,10 +76,10 @@ static int backupToTar(JNIEnv* env, jobject clazz, jstring packageNameObj,
int ret;
// Extract the various strings, allowing for null object pointers
- const char* packagenamechars = env->GetStringUTFChars(packageNameObj, NULL);
- const char* rootchars = env->GetStringUTFChars(rootpathObj, NULL);
- const char* pathchars = env->GetStringUTFChars(pathObj, NULL);
- const char* domainchars = env->GetStringUTFChars(domainObj, NULL);
+ const char* packagenamechars = (packageNameObj) ? env->GetStringUTFChars(packageNameObj, NULL) : NULL;
+ const char* rootchars = (rootpathObj) ? env->GetStringUTFChars(rootpathObj, NULL) : NULL;
+ const char* pathchars = (pathObj) ? env->GetStringUTFChars(pathObj, NULL) : NULL;
+ const char* domainchars = (domainObj) ? env->GetStringUTFChars(domainObj, NULL) : NULL;
String8 packageName(packagenamechars ? packagenamechars : "");
String8 rootpath(rootchars ? rootchars : "");
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 884fa78e308b..fe603813da27 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -234,34 +234,23 @@ void JNICameraContext::copyAndPost(JNIEnv* env, const sp<IMemory>& dataPtr, int
if (heapBase != NULL) {
const jbyte* data = reinterpret_cast<const jbyte*>(heapBase + offset);
- if (!mManualBufferMode) {
- LOGV("Allocating callback buffer");
- obj = env->NewByteArray(size);
- } else {
- switch (msgType) {
- case CAMERA_MSG_PREVIEW_FRAME: {
- obj = getCallbackBuffer(env, &mCallbackBuffers, size);
-
- if (mCallbackBuffers.isEmpty()) {
- LOGV("Out of buffers, clearing callback!");
- mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
- mManualCameraCallbackSet = false;
-
- if (obj == NULL) {
- return;
- }
- }
- break;
- }
- case CAMERA_MSG_RAW_IMAGE: {
- obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
- break;
- }
- default: {
- jniThrowRuntimeException(env, "Unsupported message type");
+ if (msgType == CAMERA_MSG_RAW_IMAGE) {
+ obj = getCallbackBuffer(env, &mRawImageCallbackBuffers, size);
+ } else if (msgType == CAMERA_MSG_PREVIEW_FRAME && mManualBufferMode) {
+ obj = getCallbackBuffer(env, &mCallbackBuffers, size);
+
+ if (mCallbackBuffers.isEmpty()) {
+ LOGV("Out of buffers, clearing callback!");
+ mCamera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP);
+ mManualCameraCallbackSet = false;
+
+ if (obj == NULL) {
return;
}
}
+ } else {
+ LOGV("Allocating callback buffer");
+ obj = env->NewByteArray(size);
}
if (obj == NULL) {
diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp
index 84a50f029e67..84c636b0ede5 100644
--- a/core/jni/android_net_wifi_Wifi.cpp
+++ b/core/jni/android_net_wifi_Wifi.cpp
@@ -402,30 +402,6 @@ static jint android_net_wifi_getRssiHelper(const char *cmd)
return (jint)rssi;
}
-static jint android_net_wifi_getRssiCommand(JNIEnv* env, jobject)
-{
- return android_net_wifi_getRssiHelper("DRIVER RSSI");
-}
-
-static jint android_net_wifi_getRssiApproxCommand(JNIEnv* env, jobject)
-{
- return android_net_wifi_getRssiHelper("DRIVER RSSI-APPROX");
-}
-
-static jint android_net_wifi_getLinkSpeedCommand(JNIEnv* env, jobject)
-{
- char reply[BUF_SIZE];
- int linkspeed;
-
- if (doCommand("DRIVER LINKSPEED", reply, sizeof(reply)) != 0) {
- return (jint)-1;
- }
- // reply comes back in the form "LinkSpeed XX" where XX is the
- // number we're interested in.
- sscanf(reply, "%*s %u", &linkspeed);
- return (jint)linkspeed;
-}
-
static jstring android_net_wifi_getMacAddressCommand(JNIEnv* env, jobject)
{
char reply[BUF_SIZE];
@@ -625,10 +601,6 @@ static JNINativeMethod gWifiMethods[] = {
(void*) android_net_wifi_setBluetoothCoexistenceModeCommand },
{ "setBluetoothCoexistenceScanModeCommand", "(Z)Z",
(void*) android_net_wifi_setBluetoothCoexistenceScanModeCommand },
- { "getRssiCommand", "()I", (void*) android_net_wifi_getRssiCommand },
- { "getRssiApproxCommand", "()I",
- (void*) android_net_wifi_getRssiApproxCommand},
- { "getLinkSpeedCommand", "()I", (void*) android_net_wifi_getLinkSpeedCommand },
{ "getMacAddressCommand", "()Ljava/lang/String;", (void*) android_net_wifi_getMacAddressCommand },
{ "saveConfigCommand", "()Z", (void*) android_net_wifi_saveConfigCommand },
{ "reloadConfigCommand", "()Z", (void*) android_net_wifi_reloadConfigCommand },
diff --git a/core/jni/android_server_NetworkManagementSocketTagger.cpp b/core/jni/android_server_NetworkManagementSocketTagger.cpp
new file mode 100644
index 000000000000..c279cedc40e6
--- /dev/null
+++ b/core/jni/android_server_NetworkManagementSocketTagger.cpp
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "NMST_QTagUidNative"
+#include <utils/Log.h>
+
+#include "JNIHelp.h"
+
+#include "jni.h"
+#include <utils/misc.h>
+#include <cutils/qtaguid.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+namespace android {
+
+static jint QTagUid_tagSocketFd(JNIEnv* env, jclass,
+ jobject fileDescriptor,
+ jint tagNum, jint uid) {
+ int userFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
+
+ if (env->ExceptionOccurred() != NULL) {
+ LOGE("Can't get FileDescriptor num");
+ return (jint)-1;
+ }
+
+ int res = qtaguid_tagSocket(userFd, tagNum, uid);
+ if (res < 0) {
+ return (jint)-errno;
+ }
+ return (jint)res;
+}
+
+static int QTagUid_untagSocketFd(JNIEnv* env, jclass,
+ jobject fileDescriptor) {
+ int userFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
+
+ if (env->ExceptionOccurred() != NULL) {
+ LOGE("Can't get FileDescriptor num");
+ return (jint)-1;
+ }
+
+ int res = qtaguid_untagSocket(userFd);
+ if (res < 0) {
+ return (jint)-errno;
+ }
+ return (jint)res;
+}
+
+static jint QTagUid_setCounterSet(JNIEnv* env, jclass,
+ jint setNum, jint uid) {
+
+ int res = qtaguid_setCounterSet(setNum, uid);
+ if (res < 0) {
+ return (jint)-errno;
+ }
+ return (jint)res;
+}
+
+static jint QTagUid_deleteTagData(JNIEnv* env, jclass,
+ jint tagNum, jint uid) {
+
+ int res = qtaguid_deleteTagData(tagNum, uid);
+ if (res < 0) {
+ return (jint)-errno;
+ }
+ return (jint)res;
+}
+
+static JNINativeMethod gQTagUidMethods[] = {
+ { "native_tagSocketFd", "(Ljava/io/FileDescriptor;II)I", (void*)QTagUid_tagSocketFd},
+ { "native_untagSocketFd", "(Ljava/io/FileDescriptor;)I", (void*)QTagUid_untagSocketFd},
+ { "native_setCounterSet", "(II)I", (void*)QTagUid_setCounterSet},
+ { "native_deleteTagData", "(II)I", (void*)QTagUid_deleteTagData},
+};
+
+int register_android_server_NetworkManagementSocketTagger(JNIEnv* env) {
+ return jniRegisterNativeMethods(env, "com/android/server/NetworkManagementSocketTagger", gQTagUidMethods, NELEM(gQTagUidMethods));
+}
+
+};
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 395e417aee39..e542a4717b88 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -477,19 +477,21 @@ static void renderText(OpenGLRenderer* renderer, const jchar* text, int count,
#if RTL_USE_HARFBUZZ
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, 0, count, count, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, text, count, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, text, 0, count, count, flags);
+ value->computeValues(paint, text, count, flags);
#endif
- const jchar* glyphArray = value->getGlyphs();
- int glyphCount = value->getGlyphsCount();
- int bytesCount = glyphCount * sizeof(jchar);
- renderer->drawText((const char*) glyphArray, bytesCount, glyphCount, x, y, paint);
+ size_t startIndex = 0;
+ size_t glyphsCount = 0;
+ value->getGlyphsIndexAndCount(0, count, &startIndex, &glyphsCount);
+ const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
+ int bytesCount = glyphsCount * sizeof(jchar);
+ renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y, paint);
#else
const jchar *workText;
jchar* buffer = NULL;
@@ -507,19 +509,21 @@ static void renderTextRun(OpenGLRenderer* renderer, const jchar* text,
#if RTL_USE_HARFBUZZ
sp<TextLayoutCacheValue> value;
#if USE_TEXT_LAYOUT_CACHE
- value = TextLayoutCache::getInstance().getValue(paint, text, start, count, contextCount, flags);
+ value = TextLayoutCache::getInstance().getValue(paint, text, contextCount, flags);
if (value == NULL) {
LOGE("Cannot get TextLayoutCache value");
return ;
}
#else
value = new TextLayoutCacheValue();
- value->computeValues(paint, text, start, count, contextCount, flags);
+ value->computeValues(paint, text, contextCount, flags);
#endif
- const jchar* glyphArray = value->getGlyphs();
- int glyphCount = value->getGlyphsCount();
- int bytesCount = glyphCount * sizeof(jchar);
- renderer->drawText((const char*) glyphArray, bytesCount, glyphCount, x, y, paint);
+ size_t startIndex = 0;
+ size_t glyphsCount = 0;
+ value->getGlyphsIndexAndCount(start, count, &startIndex, &glyphsCount);
+ const jchar* glyphs = value->getGlyphs(startIndex, glyphsCount);
+ int bytesCount = glyphsCount * sizeof(jchar);
+ renderer->drawText((const char*) glyphs, bytesCount, glyphsCount, x, y, paint);
#else
uint8_t rtl = flags & 0x1;
if (rtl) {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9f2eef553eba..9755f227a63f 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1530,6 +1530,21 @@
android:process=":ui">
</activity>
+ <activity android:name="android.accounts.ChooseTypeAndAccountActivity"
+ android:excludeFromRecents="true"
+ android:exported="true"
+ android:theme="@android:style/Theme.Holo.DialogWhenLarge.NoActionBar"
+ android:label="@string/choose_account_label"
+ android:process=":ui">
+ </activity>
+
+ <activity android:name="android.accounts.ChooseAccountTypeActivity"
+ android:excludeFromRecents="true"
+ android:theme="@android:style/Theme.Holo.DialogWhenLarge.NoActionBar"
+ android:label="@string/choose_account_label"
+ android:process=":ui">
+ </activity>
+
<activity android:name="android.accounts.GrantCredentialsPermissionActivity"
android:excludeFromRecents="true"
android:exported="true"
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
index 671ca318da41..52a9800130a6 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
index b024da420760..49a2aeb42313 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
index cba1ff5da67f..e6ebb43fbcec 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
index 62537b0e19c8..7069fc5b5623 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
index 5d559e114879..ec2a7e30f014 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
index 5041ff99309d..486334f7c8a6 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo.png b/core/res/res/drawable-hdpi/btn_check_on_holo.png
index 4c1bfbcb27ab..1f11a7867580 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
index 3492b8a1fc48..a17100cf5007 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
index 49e837c6e5b2..130ab4f24596 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
index 0d4e8b30ab13..96abcda92024 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
index c4283b65b7f1..0a22f02a9cd4 100644
--- a/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png b/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
index 94098902e928..28b25781b7da 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_code_lock_touched_holo.png b/core/res/res/drawable-hdpi/btn_code_lock_touched_holo.png
index 55acc9ae968d..66cb1eca1c05 100644
--- a/core/res/res/drawable-hdpi/btn_code_lock_touched_holo.png
+++ b/core/res/res/drawable-hdpi/btn_code_lock_touched_holo.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 34762f8cc252..824b45ac7d4b 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 34762f8cc252..824b45ac7d4b 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 0d2eb4b990d5..34ec825d9e6c 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 7de8d9be4ca6..f7680ab862db 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_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
index 3c1001495999..8906c4d86c15 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
index 93177761c23c..2bcb98ede035 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
index 8e92f715bb38..2e36821d5300 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
index 54ec8ee7cb2f..6a50bd82dada 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
index cdb1f71f37eb..8595dd0025f5 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
index ff7848decff6..1dda090f8afd 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
index 98705f777cf6..942722e29582 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
index 0d3147f579ae..e46f035313ad 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
index 01c54e69e95b..5cfe146716ae 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
index fe3225fcb7b8..20d0eb3c0bec 100644
--- a/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
index c25fe90dff81..3b478d63375d 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
index 4185d719cbe8..52a9f442ea9b 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
index e95f4ab965d5..9810029e50f1 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
index 7ed0fab91897..445af7bd35a0 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
index c9e99e8237c2..d3884f618b96 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
index f8a36b331747..eea174aacd86 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
index 8bfd65abd214..fecb1afc7686 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
index ba942947e84b..58b2b0989364 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
index 9112ed6b455f..a39a6200b7ed 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
index a29f69eb4463..1ffe7fe2c5a6 100644
--- a/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/btn_star_on_pressed_holo_light.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 a529487092c8..3dfe6c2eea81 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 e3641b5a8d59..ea38ebbb390c 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 e9d4983647ce..2cbb7dacedb4 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 c8464b59c28a..3813bc6a278f 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 94a2b9a826c1..3982d7052f75 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 fe9138db8bac..982f0ae215f0 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 98471773d6f9..d40fb90d7ff2 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 eba9debca83b..f1e47237f579 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 ff19711a312f..21e5d304fd13 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 b1d4d6a02ae1..03aa60a7794c 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 e47cf2ae8b98..14edaeb8e8e5 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 82f80f25e3d1..957bc906bfd8 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 b5959ec8bac6..bcfe71b4c5d7 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 dbe1c3873bcf..961a9bbfcfcf 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 fb5f9adf0887..7a1235c78596 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 b7edef7086f2..72bf2f2eddbd 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 6fe1027dea42..b8fd6d9e32bd 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 1d4a99bfd9e8..b22179523d5a 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 99d694ba7b76..59798cbe0fae 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 6bb4d1e691d0..73ff79fd9ddb 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 3fb3eb1bbb47..290c24d77ab4 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 a679da5b391b..754032eb5bbb 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 175ce17ffd50..e32c7c74a856 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_label_left_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
index 0a1bca862400..769cb125f4b1 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
index fd5b18d1c3b1..c5372a81f280 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
index 97d61f43c069..1dee51b5c385 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png
index 9afd6ab99752..3c1e25adc194 100644
--- a/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/fastscroll_label_right_holo_light.9.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 5cd1ac7b51ab..707414d059f0 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 5cd1ac7b51ab..707414d059f0 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 9a7e5aeca66a..4d810dd50823 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 9a7e5aeca66a..64fa147a87d4 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_ring_notif.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif.png
index 1df685865dbd..a89f45f5b970 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 fae02f9a765a..d03badea7849 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_checkmark_holo_light.png b/core/res/res/drawable-hdpi/ic_checkmark_holo_light.png
new file mode 100644
index 000000000000..2c6719b796bc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_checkmark_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_emergency.png b/core/res/res/drawable-hdpi/ic_emergency.png
index 89c05e360493..09bcbda5c2e0 100644
--- a/core/res/res/drawable-hdpi/ic_emergency.png
+++ b/core/res/res/drawable-hdpi/ic_emergency.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_input_delete.png b/core/res/res/drawable-hdpi/ic_input_delete.png
index f35f89f69000..5d638bd511ed 100644
--- a/core/res/res/drawable-hdpi/ic_input_delete.png
+++ b/core/res/res/drawable-hdpi/ic_input_delete.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 639529489422..683a57510e91 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 74fda0f31a14..bdece9fc942f 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 1558a0a9c177..6a8ab241718d 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 a94d1b9ea5c0..19c8eb29e273 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_camera_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png
index 36d766d76a94..c79a245580cb 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_down.png b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_down.png
index 620844ec374f..bc718b57b43c 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_down.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_down.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_left.png b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_left.png
index d008afa1ef26..0892c31863b2 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_left.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_left.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_right.png b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_right.png
index e5089003c052..04cc0a23b4aa 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_right.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_right.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_up.png b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_up.png
index 4ffa833b93cf..bb553b1fc2a1 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_chevron_up.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_chevron_up.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 0ccf36189085..f2fceaabc6d1 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 14a684e93354..e005ffc18c03 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 1b7f499aa7de..f41ad95abb58 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 399aa1cdba80..98ab6e919c6a 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_silent_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_focused.png
index b79dbbaa2606..651b83709aa4 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 86325458d7a6..babab1d22381 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_focused.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_focused.png
index e25c7a0db9db..d000866c8502 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 701fa42b5c3a..82133d02a259 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_focusde.png b/core/res/res/drawable-hdpi/ic_lockscreen_text_focusde.png
index c8de3a31995f..26df6b2a87a2 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 e3009436ca44..9e36918974d6 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
deleted file mode 100644
index da7734014a07..000000000000
--- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_focused.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.png
index 7db46c1a8c86..39608932b3e6 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_normal.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_menu_copy_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_copy_holo_dark.png
index d1e1337f70f4..d37d0a318a4f 100644
--- a/core/res/res/drawable-hdpi/ic_menu_copy_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_copy_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_copy_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_copy_holo_light.png
index 5d026609b964..0dd8865f4a9a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_copy_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_copy_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_cut_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_cut_holo_dark.png
index bd28a8590ebf..81c52b0b5ea1 100644
--- a/core/res/res/drawable-hdpi/ic_menu_cut_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_cut_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_cut_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_cut_holo_light.png
index 037c36256c6c..15500c341ed6 100644
--- a/core/res/res/drawable-hdpi/ic_menu_cut_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_cut_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
index 5f2f60433d20..2abc45809c62 100644
--- a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
index 7f3459c8688d..bb6aef1d069a 100644
--- a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_paste_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_paste_holo_dark.png
index e9514b8d7fc4..eb701f241cb9 100644
--- a/core/res/res/drawable-hdpi/ic_menu_paste_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_paste_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_paste_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_paste_holo_light.png
index b02aa09e7075..886c49317e0b 100644
--- a/core/res/res/drawable-hdpi/ic_menu_paste_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_paste_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
index b1613613c62b..c2cec7ff1a7f 100644
--- a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
index 0a7b364d65ad..902402e26efd 100644
--- a/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_notification_ime_default.png b/core/res/res/drawable-hdpi/ic_notification_ime_default.png
index ac598190a0b8..369c88d31707 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/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_green_up.png
deleted file mode 100644
index 6560696c8edf..000000000000
--- a/core/res/res/drawable-hdpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
index 237011c16b44..28b25781b7da 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
index 24180178097d..545cc09c036d 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
index 2120bad70380..9176b3372c4c 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
index 30b3a4d4dc6d..fb34a6deab6c 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
index 0e8ac15b284e..87b2ad67cfea 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
index 762e4b07be7f..1655feacd3c4 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
index 4d3dc683e7fe..61cfe7a24887 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
index fcf3565bee3b..43e2e89fbd77 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
index 12fb9701d9b7..7d80ff6e748f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
index a82fd1732965..cc21a1c9ff29 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
index a82fd1732965..cc21a1c9ff29 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
index 32845065ab13..3c9c192d8c34 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
index 6afc2d09efd6..6511cd20e4c1 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
index e414e330c004..7b135ea67912 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
index e414e330c004..7b135ea67912 100644
--- a/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_down_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
index 828c07962271..b6a85a2f66af 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
index e7e22c3862a7..50d979e86143 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
index a2a773b8a467..608dd529f17f 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
index 0b1b1893bf5f..96ff781a213d 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
index ca12894242cf..a48bf2e58c88 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
index 52f8b38d9c59..b69589b21517 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
index 5f9411ab9039..5adfb04fb890 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
index 5f9411ab9039..5adfb04fb890 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
index cdc1775dfb65..ff34463d12db 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
index b4981d45ddb5..0bcfd67e913e 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
index e124a1868b55..00092cc83db6 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png
index e124a1868b55..00092cc83db6 100644
--- a/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-hdpi/numberpicker_up_pressed_holo_light.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 416b456ba425..1b4fed88c462 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/panel_bg_holo_light.9.png b/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png
index ddd242ba8d0c..c8b3177ceabd 100644
--- a/core/res/res/drawable-hdpi/panel_bg_holo_light.9.png
+++ b/core/res/res/drawable-hdpi/panel_bg_holo_light.9.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 b25b8212eef8..fe5b880f49af 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/progressbar_indeterminate_holo1.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png
index 1d33e47591fb..bf3cabb6395d 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo1.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png
index 81fe0850bf5b..c4f00be47d59 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo2.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png
index cf864d231414..935e44ff5940 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo3.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png
index 583e0c920d57..03ae28be2a39 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo4.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png
index 357b66035055..b68981f24239 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo5.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png
index 0add340610c5..678b7726f558 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo6.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png
index e1a8a63fdb3e..0aeb0a6cda4f 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo7.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png
index 934d6d17a3a5..1bd731270537 100644
--- a/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png
+++ b/core/res/res/drawable-hdpi/progressbar_indeterminate_holo8.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
index 64eee9345e8d..e3131b115503 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
index 8817efe997c9..cdc94a135bec 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
index 5a447880c11f..d83522ac67bc 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
index d47f63a8a25c..2af7814d1aef 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
index 947ac178aac8..e4b766d72456 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
index 6b2588d55bd3..edd264a37281 100644
--- a/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_big_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_half_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_med_half_holo_dark.png
index 4a02a23cfff1..65f673d762d8 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_half_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
index e73bdcca02a7..3ff3bbd60410 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_off_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_med_off_holo_dark.png
index e96936c28590..b8bca18154c7 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
index 76b9c189d0e0..ce9fc2502714 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_on_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_med_on_holo_dark.png
index cfcf62928c90..1b7fe776ca1d 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
index a7d5af8a8252..a6fdcff49c2f 100644
--- a/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_med_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
index 946cdfdc51c0..4fb14f934afd 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
index d046838760c1..667b8e280789 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
index 6f1ffe874d73..e19cf7aa4e9c 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
index 6286fcd85afc..8886006d0176 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png b/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
index a53b62727e58..bc5d3dba0d12 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png b/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
index dc102a99058a..104100844c75 100644
--- a/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
+++ b/core/res/res/drawable-hdpi/rate_star_small_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
index a23119511832..d4b3209e2162 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png
new file mode 100644
index 000000000000..ec7303e12e39
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_holo.png b/core/res/res/drawable-hdpi/scrubber_control_holo.png
deleted file mode 100644
index fae05e5dadee..000000000000
--- a/core/res/res/drawable-hdpi/scrubber_control_holo.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png
new file mode 100644
index 000000000000..19526fee8648
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
index ff4d71074122..e8f9eefbe00b 100644
--- a/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-hdpi/scrubber_control_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
index b59b492576b7..01669381af25 100644
--- a/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
index 57b8b31ec6d3..ffdb78af9040 100644
--- a/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
index 14d26a5818d8..ffad7209e470 100644
--- a/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
index e457a6685094..f2523f4b0c17 100644
--- a/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
index 86c036d7a7d6..f8e3fef633cc 100644
--- a/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
index ddd3e74cad87..04c5fb5a26ee 100644
--- a/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
index 74e7e2ed2886..a28a6d1607c8 100644
--- a/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
index 989a18c0bc36..3d5aa46b7f58 100644
--- a/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-hdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-hdpi/spinner_ab_pressed_holo_dark.9.png
index 3128fd9278ce..51a5226b644e 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 924a93b7a4e0..a24da9104e03 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/stat_notify_error.png b/core/res/res/drawable-hdpi/stat_notify_error.png
index dbaf94433b45..deb38726301b 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_missed_call.png b/core/res/res/drawable-hdpi/stat_notify_missed_call.png
index 74f5df730406..f205471bc5f1 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_wifi_in_range.png b/core/res/res/drawable-hdpi/stat_notify_wifi_in_range.png
index 97ddb3cfa014..f3aaa276fc8a 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 8e15aba2c69a..ddb8a71d76fe 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_download_anim1.png b/core/res/res/drawable-hdpi/stat_sys_download_anim1.png
index 71ea9250a2e5..3e27c52b19d6 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_tether_bluetooth.png b/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png
index 11869af2a4a9..9451174d65d7 100644
--- a/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png
+++ b/core/res/res/drawable-hdpi/stat_sys_tether_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_general.png b/core/res/res/drawable-hdpi/stat_sys_tether_general.png
index f1606baa176a..79d5756ae38e 100644
--- a/core/res/res/drawable-hdpi/stat_sys_tether_general.png
+++ b/core/res/res/drawable-hdpi/stat_sys_tether_general.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/stat_sys_tether_usb.png b/core/res/res/drawable-hdpi/stat_sys_tether_usb.png
index a05ab3ec7bf1..cae1bd1b2574 100644
--- a/core/res/res/drawable-hdpi/stat_sys_tether_usb.png
+++ b/core/res/res/drawable-hdpi/stat_sys_tether_usb.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 576bd77b889e..0b8dbf5fbc2e 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_upload_anim1.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim1.png
index 9ec9f2ecbb98..275442838194 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_anim3.png b/core/res/res/drawable-hdpi/stat_sys_upload_anim3.png
index 486c1eda32ba..35900621dbce 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/switch_bg_disabled_holo_dark.9.png b/core/res/res/drawable-hdpi/switch_bg_disabled_holo_dark.9.png
index e65f21a3f54f..e88681261aa3 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 76c54841f073..3e92cf0ede3a 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 80a7ef1d9bd1..962cefb380fb 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 bd11555ae568..e05b345f0e2c 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 1fba7ee14b44..933d99b6796c 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 5a484dfc8c68..7abe99a5f544 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 152c33889d47..0bce7679a709 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 9c44d4b77750..3b9c048cbd28 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 cb456485fac8..a4bd07454f4c 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 13dd09aeffb4..587bf4e5c836 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 e72f42853938..a86be03cad88 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 84504eb4e053..e3b0729e34fc 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 44a4baa4cc16..4b56420a0a0a 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 5c5ee814c304..741674d5218c 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 9286c7a93e8e..8abf2baeb886 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 89a1c0bcb27c..8862fc72615e 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 e879e37808e7..7f40d36703fd 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 e879e37808e7..7f40d36703fd 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_press.9.png b/core/res/res/drawable-hdpi/tab_press.9.png
index 4c34188426b2..4650d6828453 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 c5f44f3ece38..b43c592932c0 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 c5f44f3ece38..b43c592932c0 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 2adb22ca101e..6d057358eb6e 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 46a331f5a159..d5d3cee6fc01 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 53efbb4b7d87..c1f950c95355 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 53efbb4b7d87..c1f950c95355 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 74181af4b43c..cdc7a4ad2aa9 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_select_handle_left.png b/core/res/res/drawable-hdpi/text_select_handle_left.png
index e980857544ef..5adc2e119fd6 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 603f497dd4ac..b7a472a76fa9 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 a5efe304f806..cf94179ef0e3 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/vpn_connected.png b/core/res/res/drawable-hdpi/vpn_connected.png
index 65fc6db787bf..c3547e855744 100644
--- a/core/res/res/drawable-hdpi/vpn_connected.png
+++ b/core/res/res/drawable-hdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/vpn_disconnected.png b/core/res/res/drawable-hdpi/vpn_disconnected.png
index 2440c6909ef5..10a9065cabdd 100644
--- a/core/res/res/drawable-hdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-hdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-large-mdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-large-mdpi/indicator_code_lock_drag_direction_green_up.png
deleted file mode 100644
index 0bc86c36a70a..000000000000
--- a/core/res/res/drawable-large-mdpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-ldpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-ldpi/indicator_code_lock_drag_direction_green_up.png
deleted file mode 100644
index 9c8610fce53f..000000000000
--- a/core/res/res/drawable-ldpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-ldpi/stat_sys_adb.png b/core/res/res/drawable-ldpi/stat_sys_adb.png
index aec8d90238fe..86b945b5f16b 100644
--- a/core/res/res/drawable-ldpi/stat_sys_adb.png
+++ b/core/res/res/drawable-ldpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_dark.png
index 5435438399c3..ac83494fff86 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_light.png
index b350144ead23..6c247a820a3e 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_dark.png
index 5010bffac72f..7710165da106 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_light.png
index 20f8d3d4951b..15d0c803a4b8 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_focused_holo_dark.png
index 96a9548ff34c..f1d8aec579bf 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_focused_holo_light.png
index 8871519ddd93..0d95a00ffddd 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_holo.png b/core/res/res/drawable-mdpi/btn_check_on_holo.png
index 38ab51ac8c30..2737d8c858e1 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_holo.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_holo_dark.png
index 4738e5ab8e8b..4dd94529f9fb 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_holo_light.png
index db93b6d01bb9..38abce61f6b8 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
index b47b5dde63e6..b70db89b26a2 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
index ad6947ad8d93..21d54a627786 100644
--- a/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_default.png b/core/res/res/drawable-mdpi/btn_code_lock_default.png
index f524317d33f8..206f9b3bc3b7 100755..100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_default.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_default_holo.png b/core/res/res/drawable-mdpi/btn_code_lock_default_holo.png
index 82fc3b2d331f..4c4adf2cfe34 100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_default_holo.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched.png b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
index 5cd436c0b889..98a3b6d5a928 100755..100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_code_lock_touched_holo.png b/core/res/res/drawable-mdpi/btn_code_lock_touched_holo.png
index d1fe1adb6550..ef701ed67d1c 100644
--- a/core/res/res/drawable-mdpi/btn_code_lock_touched_holo.png
+++ b/core/res/res/drawable-mdpi/btn_code_lock_touched_holo.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 290b9776963e..db2eae1dff94 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 290b9776963e..db2eae1dff94 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 ffc11b78201e..67b5e4ee757b 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 8b5d036ef486..154726710e0a 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_rating_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_rating_star_on_disabled_focused_holo_light.png
index ebea1db0906d..816e14615bde 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 761c9361a351..4f4eff2270e8 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 c505d3d659ea..afaa8ca8d666 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 99a71ef3a03e..b7d90791e841 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 3c48fa10e16f..994eb0c90afb 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/btn_star_off_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
index c1923e4cb02e..f4a1cbc321ac 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
index 08f4ca7b567e..79ca527b9e43 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
index 5696511feef3..33d130828d0e 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
index b090127e916c..9672415371c6 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
index 9f46b757178a..94d3784d5a70 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
index b4bf9c9bb23c..9f3ce4efcdd1 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
index 98c176cfbcb5..05563bffe827 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
index 16708fd40baa..ee166bc09fd2 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
index 9e946db549e7..4bc4a30bd4f1 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
index 875ec01baebd..dd14aec49268 100644
--- a/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
index a72fe324d36a..becc09132876 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
index 545899a14014..e49dbab41c42 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
index aca83b03bf29..61837f842549 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
index 2ff492eb650c..19f139f0c6aa 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
index 816af011b9c4..9fed6b5a7bfe 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
index 66ea0c75156d..d52dbb7e57f4 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
index 3ffc6ca0038d..c0c6b49e7da2 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
index e580075b0eb8..237f7e7dc547 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
index 20d4ab4232ef..2f1f004001f2 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
index b31449576cdd..4bea36bff24a 100644
--- a/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/btn_star_on_pressed_holo_light.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 297fcf0f0e50..3efea42df152 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 9ee1d5dda643..650ed8f62feb 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 42ec8db47d12..ad1e50f585a6 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 048f4b1363e0..8a343213f03f 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 db5c801e4204..9607ff735312 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 e85af7db84dd..a32472096452 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 6c2458c57c3b..f18a391b3e2c 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 268c8642eb32..963a4ba68f77 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 a838158cdead..58bd1387aeac 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 56fcce4be7f4..718c7e3a63cf 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 c5245cc6c26c..7daac6c0e39b 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 231ccb1f606a..b4b614dc55de 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 93847189758f..9fa6534c90f7 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 9927af90f9ba..8b2577af738b 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 a9b39bd3aa90..069e9e33f95d 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 17806523e089..0d963ec826bf 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 18e47153e42f..836f60f68bd2 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 6fa069fac957..036ffb7bbd98 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 b9067933008e..9f9dd7013c7a 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 5c7fa382727c..867f36d1d7d4 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 c392ecbfef4d..7f5ca483c59f 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_label_left_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
index b3fd908915d5..94b944d0705c 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
index a64d4d1a2fb1..987c097065c0 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
index 6469fcaafef6..8d87032affe1 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png
index fca2e25a78e9..b29042a30276 100644
--- a/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.png
+++ b/core/res/res/drawable-mdpi/fastscroll_label_right_holo_light.9.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 55f17c2f5cca..eb2b8bdc2224 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 55f17c2f5cca..eb2b8bdc2224 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 34e126b26625..6fb59b6f47ca 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 34e126b26625..1a63f5dfc316 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_ring_notif.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif.png
index b9b7c7b79a32..1ce4f52d36dc 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 cbe5021fa6ab..cb17415d4aa3 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_checkmark_holo_light.png b/core/res/res/drawable-mdpi/ic_checkmark_holo_light.png
new file mode 100644
index 000000000000..744e964477bd
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_checkmark_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_emergency.png b/core/res/res/drawable-mdpi/ic_emergency.png
index c6faf1e9e430..dfa17c62f8e9 100755..100644
--- a/core/res/res/drawable-mdpi/ic_emergency.png
+++ b/core/res/res/drawable-mdpi/ic_emergency.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_input_delete.png b/core/res/res/drawable-mdpi/ic_input_delete.png
index ee4c911349aa..47c8708782a2 100644
--- a/core/res/res/drawable-mdpi/ic_input_delete.png
+++ b/core/res/res/drawable-mdpi/ic_input_delete.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png
index 1437798cb9d7..862f33bffe6b 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png
index b71825855a89..30df0a328ca5 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_down.png b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_down.png
index d3cfd17ea104..308fe8a29321 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_down.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_down.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_left.png b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_left.png
index e5ef113b0909..9a2563433d1f 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_left.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_left.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_right.png b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_right.png
index ab723b711e94..77240d03453f 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_right.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_right.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_up.png b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_up.png
index 35aca4e82450..e0b013425e7c 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_chevron_up.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_chevron_up.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png
index 754d7bc830e5..1d547e118c5b 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_handle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png
index 0d3f756cb99a..68409c5b37f9 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_focused.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_focused.png
deleted file mode 100644
index 6f51447744a2..000000000000
--- a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_focused.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.png
index dd255f57c7ee..52866f258e32 100644
--- a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.png
+++ b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_normal.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_menu_copy_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_copy_holo_dark.png
index cb19fea81d73..97e8ac1b775d 100644
--- a/core/res/res/drawable-mdpi/ic_menu_copy_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_copy_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_copy_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_copy_holo_light.png
index e353d46ffb49..74cb920f487b 100644
--- a/core/res/res/drawable-mdpi/ic_menu_copy_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_menu_copy_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_cut_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_cut_holo_dark.png
index 66a750d6a32b..85f3cb2ad632 100644
--- a/core/res/res/drawable-mdpi/ic_menu_cut_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_cut_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_cut_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_cut_holo_light.png
index e7e8c547c728..77f92fb56874 100644
--- a/core/res/res/drawable-mdpi/ic_menu_cut_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_menu_cut_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_dark.png
index 1d2592a9eeaa..ba704b67e3a2 100644
--- a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png
index 4060afe2362f..01d681697f79 100644
--- a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_paste_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_paste_holo_dark.png
index 23f3a320c234..093496d4089b 100644
--- a/core/res/res/drawable-mdpi/ic_menu_paste_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_paste_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_paste_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_paste_holo_light.png
index c9d571cd4ae1..61fd91c8808a 100644
--- a/core/res/res/drawable-mdpi/ic_menu_paste_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_menu_paste_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png
index caec299c39f6..da64c7556eba 100644
--- a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png
index 434f5d1bcc2d..e0dd67c69445 100644
--- a/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.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 67269e824947..7d97eb575f2a 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/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
deleted file mode 100644
index 7ddeba529748..000000000000
--- a/core/res/res/drawable-mdpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
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 f6d9f1bf7986..05c194bf63e2 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_default_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png
index a627cda96b02..4c4adf2cfe34 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.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 b7262d17ff1e..8f24832f1149 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/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
index 308624bce110..cb5b31a06457 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
index 6c451ec5389a..843474124846 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
index 0329d5855832..1f29da2a25f5 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
index d17ca1c095b6..a27f5aac026f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
index c41e4b863b24..34268af0076e 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
index 846c2e8af797..304f800edae3 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
index 5543ac6979c1..583542b41f41 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
index 65e7c87fe9ee..d15bd16bc99f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
index 50a4167f4878..9a5d79f9d9db 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
index 50a4167f4878..9a5d79f9d9db 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
index 025b27e837fb..8051d64610b5 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
index 7dd30e983fde..bcd34e95d6c1 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
index 25c22b6b6daf..cf4bdb6f9bcc 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
index 25c22b6b6daf..cf4bdb6f9bcc 100644
--- a/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_down_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
index c32596ce3321..0535ff7a8f25 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
index 4b862657640a..360284d48114 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
index e47ff9c3c091..1e0e92c9a296 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
index b5e32d8e1107..14bcce93e556 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
index 543d3e3486b8..6ed2cf01081a 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
index 6b395ddc568d..015a8cf9dc65 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
index f0cd69fb54ec..8bb44f2eead8 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
index f0cd69fb54ec..8bb44f2eead8 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_longpressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
index bf8136c6950b..6ab5f231d3ed 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
index 2c2bef35c03b..65ec302ac586 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
index 394f063a0272..34d3228b320f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png
index 394f063a0272..34d3228b320f 100644
--- a/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-mdpi/numberpicker_up_pressed_holo_light.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 c64da8d0e712..8c51b013d22c 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 2d62071ad29a..17fbe4a690d9 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 a318891f258c..1d9381740b44 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/progressbar_indeterminate_holo1.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png
index 4cab1a15ea2c..1e5d956c8fd1 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo1.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png
index 2692bd17f6d7..d0c0200f120e 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo2.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png
index d83cad902dc9..bfdc5ea503f1 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo3.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png
index 4ef84a11e344..1440bc8b4877 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo4.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png
index f661b11bb3cc..4f645fa80217 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo5.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png
index 69df8e0ff065..21966fdbd41e 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo6.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png
index c34f0a5f7442..7ca15ed78637 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo7.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png
index 2258b202eb8c..369d0ace8a52 100644
--- a/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png
+++ b/core/res/res/drawable-mdpi/progressbar_indeterminate_holo8.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_half_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_big_half_holo_dark.png
index 593af6e7c3f7..dac51dfd7882 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_half_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_half_holo_light.png b/core/res/res/drawable-mdpi/rate_star_big_half_holo_light.png
index 3dc3aed1a5e5..441dbf7b7b72 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_half_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_off_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_big_off_holo_dark.png
index 3650f003c099..cde1fb934fbe 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_off_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_off_holo_light.png b/core/res/res/drawable-mdpi/rate_star_big_off_holo_light.png
index 107e0fb34085..8ecf0f95be02 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_off_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_on_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_big_on_holo_dark.png
index 2b9d79dfa558..0674db311627 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_big_on_holo_light.png b/core/res/res/drawable-mdpi/rate_star_big_on_holo_light.png
index c1196838e299..01179196e5cf 100644
--- a/core/res/res/drawable-mdpi/rate_star_big_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_big_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_half_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_med_half_holo_dark.png
index 7dc749db5be7..f2ce7abeea02 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_half_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_half_holo_light.png b/core/res/res/drawable-mdpi/rate_star_med_half_holo_light.png
index 22e2a6692b48..48bcf85518e3 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_half_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_off_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_med_off_holo_dark.png
index 24adc5bfc298..d2e7ab696fc0 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_off_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_off_holo_light.png b/core/res/res/drawable-mdpi/rate_star_med_off_holo_light.png
index d309d27981ba..69824eb8a87f 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_off_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_on_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_med_on_holo_dark.png
index af8c4740727c..b3b801675db7 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_med_on_holo_light.png b/core/res/res/drawable-mdpi/rate_star_med_on_holo_light.png
index 9f030769eb13..84ca715cebf7 100644
--- a/core/res/res/drawable-mdpi/rate_star_med_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_med_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_half_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_small_half_holo_dark.png
index 6b5f41cb5bf5..56a62d2f710c 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_half_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_half_holo_light.png b/core/res/res/drawable-mdpi/rate_star_small_half_holo_light.png
index db84cc71bec3..83b7c1ca8987 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_half_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_half_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_off_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_small_off_holo_dark.png
index 6819f81c7e56..b70244b99b8c 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_off_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_off_holo_light.png b/core/res/res/drawable-mdpi/rate_star_small_off_holo_light.png
index 8b45582a56f9..bb5c08cedf33 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_off_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_off_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_on_holo_dark.png b/core/res/res/drawable-mdpi/rate_star_small_on_holo_dark.png
index 25f6df840b4c..444e88207d6f 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_on_holo_dark.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/rate_star_small_on_holo_light.png b/core/res/res/drawable-mdpi/rate_star_small_on_holo_light.png
index 0d34be92a139..7dba5290d90c 100644
--- a/core/res/res/drawable-mdpi/rate_star_small_on_holo_light.png
+++ b/core/res/res/drawable-mdpi/rate_star_small_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
index 9d7b77c3d467..6f58ef0a1cf8 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png
new file mode 100644
index 000000000000..3d8f1347d3c9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_holo.png b/core/res/res/drawable-mdpi/scrubber_control_holo.png
deleted file mode 100644
index 832fa07e9bb9..000000000000
--- a/core/res/res/drawable-mdpi/scrubber_control_holo.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png
new file mode 100644
index 000000000000..d480c550cf53
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
index 4a518f2a086c..6a414fa006b7 100644
--- a/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-mdpi/scrubber_control_pressed_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
index c0f1b2052832..eeef0c834acf 100644
--- a/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
index 0492a629ff75..7cc2b54b4894 100644
--- a/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
index 5e141d835f61..4569faedaeba 100644
--- a/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
index 07ba3f38e5d8..9287dd7c87b2 100644
--- a/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
index 8c27069a08c4..9458668f0230 100644
--- a/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
index d5f04903dd3f..4ce73edce72e 100644
--- a/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
index 3e263e83840f..cba1300d3a8f 100644
--- a/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
index 6eb6d10ab7e2..99a5ebbfa69d 100644
--- a/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-mdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-mdpi/spinner_ab_pressed_holo_dark.9.png
index dda29986727a..6255e2eb9c61 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 951301dfa062..1085248704ab 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/stat_notify_error.png b/core/res/res/drawable-mdpi/stat_notify_error.png
index 168f8f6ff88e..78d59aa1c12c 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_missed_call.png b/core/res/res/drawable-mdpi/stat_notify_missed_call.png
index 9583a6bc993a..f2ff56e21ba7 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_wifi_in_range.png b/core/res/res/drawable-mdpi/stat_notify_wifi_in_range.png
index 11b6a5a3bfda..747cb97a5a36 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 ebedfa3137a5..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_tether_bluetooth.png b/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png
index b318b9c317ed..f42dae0fdcb9 100644
--- a/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png
+++ b/core/res/res/drawable-mdpi/stat_sys_tether_bluetooth.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_general.png b/core/res/res/drawable-mdpi/stat_sys_tether_general.png
index 952ff6bfc1ad..065516185ad4 100644
--- a/core/res/res/drawable-mdpi/stat_sys_tether_general.png
+++ b/core/res/res/drawable-mdpi/stat_sys_tether_general.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_usb.png b/core/res/res/drawable-mdpi/stat_sys_tether_usb.png
index 3206557519d0..2e2b8ca2e9cb 100644
--- a/core/res/res/drawable-mdpi/stat_sys_tether_usb.png
+++ b/core/res/res/drawable-mdpi/stat_sys_tether_usb.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png b/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png
index 45a95f8bca42..869ad35f16c0 100644
--- a/core/res/res/drawable-mdpi/stat_sys_tether_wifi.png
+++ b/core/res/res/drawable-mdpi/stat_sys_tether_wifi.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 b8dd5450a2bc..a161b03a05b3 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 11b84265fb5f..c637dd1e55e9 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 c9481fa4efb1..680d1a06a672 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 eb08c872ef74..70da7b343682 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 429d73de7ab0..b5582b553cc9 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 693ee3311903..a2af2b5e2001 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 bf4b1617e32e..3d786c01a66a 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 45359935bc32..2bad2b8f2df8 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 c56f49dc78df..f6ed0bf0af0d 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 5272f08f4e96..a430b7782f13 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 9b7380461fde..6312c599e380 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 bcd503f8e80c..208672267053 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 9c948a5c98b2..e44b1d819b14 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 b035f427c5a8..ee7e37b06d26 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/tab_selected_v4.9.png b/core/res/res/drawable-mdpi/tab_selected_v4.9.png
index 3c1c4ebca4b4..e8e112a5a7e6 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 bb383371a10e..229f5037ae39 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_select_handle_left.png b/core/res/res/drawable-mdpi/text_select_handle_left.png
index 0c3a0ccfc797..750cdea505da 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 f488bdd2d924..3cdca907c958 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 d3880c6ce620..fc3d14497fdb 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/vpn_connected.png b/core/res/res/drawable-mdpi/vpn_connected.png
index 0d1a0262154d..7e167f84dfa4 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 d16d7fbd1db0..a08c42a2702a 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/platlogo.png b/core/res/res/drawable-nodpi/platlogo.png
index faabda158a9b..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/btn_check_on_disable.png b/core/res/res/drawable-xhdpi/btn_check_on_disable.png
index 179f191c8e71..11917b5fe54d 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_disable.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_disable.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_dark.png
index 02e4254d2d7a..041663af8e18 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_light.png
index 7e61802c8e3b..ca0dadbfe2a4 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_dark.png
index cc6326e7e46b..4960b5799501 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_light.png
index f468781a07bc..ce1dd23554c4 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_dark.png
index 1e2536416aaf..0a31fbcdd5d8 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_light.png
index fc1af9f8128a..62f6336cce74 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_holo.png b/core/res/res/drawable-xhdpi/btn_check_on_holo.png
index 75f66521e81a..65dd58d7fa58 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_holo.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_holo_dark.png
index c327f56b57c5..dc2379c942af 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_holo_light.png
index 74a2ea343a3f..cbb26fd822b3 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_pressed.png b/core/res/res/drawable-xhdpi/btn_check_on_pressed.png
index f84a5b040635..995775e67400 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_pressed.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_pressed.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
index 48a6431f3456..9c160affd7dd 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
index 5defddfe322b..eb8521825363 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_selected.png b/core/res/res/drawable-xhdpi/btn_check_on_selected.png
index 963c68ea9e9f..a46f2f4f0266 100644
--- a/core/res/res/drawable-xhdpi/btn_check_on_selected.png
+++ b/core/res/res/drawable-xhdpi/btn_check_on_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
index a644014d58b6..c1358a21ad74 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_default.png
+++ 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_default_holo.png b/core/res/res/drawable-xhdpi/btn_code_lock_default_holo.png
index f6072516b8c8..db1cbe6ca16c 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_default_holo.png
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_default_holo.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
index 67faad25eb90..0fafc3ef0436 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_touched.png
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_touched.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_code_lock_touched_holo.png b/core/res/res/drawable-xhdpi/btn_code_lock_touched_holo.png
index e057cdd51c59..073c3ac91296 100644
--- a/core/res/res/drawable-xhdpi/btn_code_lock_touched_holo.png
+++ b/core/res/res/drawable-xhdpi/btn_code_lock_touched_holo.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 4ca0b374b4f0..708090584023 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 f7af2a477302..704bb554f391 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 ab7084ec6b0e..7f64c753f00a 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 02f5bb82704a..849cd48e62d2 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 0375a18e011e..2be8da670761 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 d3680731e02c..5b7a3bdb1e5f 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 6d1eb481efbf..36cbd3e5f08d 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 f4783d4e06c3..3ce0038d3bc8 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 0df43d7d7a09..5874b8c7f14f 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 44123463f3f3..fb2fbf5e4431 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_dropdown_disabled_focused.9.png b/core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.png
index 0e0e0d15193c..1e4cec3de39a 100644
--- a/core/res/res/drawable-xhdpi/btn_dropdown_disabled_focused.9.png
+++ 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
index a47ad5a6df5d..aab7658d373f 100644
--- a/core/res/res/drawable-xhdpi/btn_dropdown_normal.9.png
+++ 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
index a3851a85e4f1..4a1ddf3fd2f1 100644
--- a/core/res/res/drawable-xhdpi/btn_dropdown_pressed.9.png
+++ 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
index 80e4d0410cc1..cdae834e2e0a 100644
--- a/core/res/res/drawable-xhdpi/btn_dropdown_selected.9.png
+++ b/core/res/res/drawable-xhdpi/btn_dropdown_selected.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
index ef9262fca75e..981cad99fcd0 100644
--- 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
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
index 6715afddd4f9..22522931fcb5 100644
--- 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
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
index 8ffddcf25dcc..4db7078bfd19 100644
--- 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
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
index 5a52bbc07431..04e7ea127cd6 100644
--- 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
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
index 77c6d7822070..95e91e8fe58e 100644
--- 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
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
index ed73f09ab9f7..cdd47d584a53 100644
--- 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
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
index 08021f99672b..1f3a6b3c08fe 100644
--- a/core/res/res/drawable-xhdpi/btn_keyboard_key_normal.9.png
+++ 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
index 41c8ccb2954b..2a9b6f49ef05 100644
--- 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
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
index 546ccbc43b48..096d6e9e9f2a 100644
--- 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
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
index 802b22eb846b..20852d654b6c 100644
--- a/core/res/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png
+++ 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
index d317f94bd798..271c6b41621f 100644
--- 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
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
index 80b50a11199f..e72ec794fb74 100644
--- 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
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
index 76202a4dd684..e08dcc508095 100644
--- 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
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
index e9b2d7e1bd89..fd512d9cf011 100644
--- 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
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
index 8db4f8e20739..b18642d58c85 100644
--- 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
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
index b835a07248ed..134c4a9fe6d1 100644
--- 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
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
index 07cb53c08c8a..0a12dc991a88 100644
--- a/core/res/res/drawable-xhdpi/btn_search_dialog_default.9.png
+++ 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
index d3ccef89098d..35ad67cf324b 100644
--- a/core/res/res/drawable-xhdpi/btn_search_dialog_pressed.9.png
+++ 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
index c553c58e6501..2f9af47261ea 100644
--- a/core/res/res/drawable-xhdpi/btn_search_dialog_selected.9.png
+++ 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
index f478c4694df8..d3c770930d37 100644
--- 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
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
index ea5e50999f14..0c4f0da112c4 100644
--- 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
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
index a46f0edebc91..2e2f587d08e6 100644
--- 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
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
index 4ed5142bbcbb..f60eb48a8778 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off.png
+++ 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
index cc52dec15d97..8e0858d512e6 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_disable.png
+++ 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
index fea77171eae5..f77e08c142cb 100644
--- 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
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
index 503a5b260425..3f9695ed32df 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_pressed.png
+++ 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
index 8470723c0725..b2e82da6eb01 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_off_selected.png
+++ 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
index a094406f091a..7cda08992e47 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on.png
+++ 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
index bbf7d170b60e..da50266146da 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_disable.png
+++ 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
index a46ea6942ac5..df07003b12c5 100644
--- 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
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
index 7e45f2a733d9..d56f46d027df 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_pressed.png
+++ 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
index 0607b78abb0b..5a62f47a6bce 100644
--- a/core/res/res/drawable-xhdpi/btn_star_big_on_selected.png
+++ 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_off_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
index 7b479404b58c..f31cf2702dda 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
index 6a819900a74b..9b28db852cb3 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
index 5f6ff354781f..bec293cc9bdf 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
index 3a0f83de6bff..eec89dfadc5b 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
index 6fb25b569f28..757908e51311 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
index 44e87c46a254..c58bd5c6b6f7 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
index 01d4a9ae8a48..c591caefa2ae 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
index 967ca90f3eef..b3e981a17cc4 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
index ebb80ee29e83..85253f7b5317 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
index 9f32c30b4b30..efd26b0ee8f2 100644
--- a/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_off_pressed_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
index ffe47dedf2ef..25fd6bb96421 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
index ed3670719ba7..fcd06afb7f19 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
index fd9da6c67ef8..641f79bf4fc2 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
index f5908dadc685..9e47d8b2ad24 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
index 7e76adf1f3f2..8f14270a2943 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
index b64a8d55c33d..1d5567020ad9 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
index 48d89f09bb67..032e89f734a4 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
index ae4f9394b211..ef59ce2403a8 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
index 4f052cffa28b..e2305cb51c99 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png
index ea92177b2d82..6643deb2a6c3 100644
--- a/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/btn_star_on_pressed_holo_light.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
index 6f5cf6261797..31517e4a58b1 100644
--- a/core/res/res/drawable-xhdpi/code_lock_top.9.png
+++ b/core/res/res/drawable-xhdpi/code_lock_top.9.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
index aee15b83ffeb..bde1d5670c04 100644
--- a/core/res/res/drawable-xhdpi/contact_header_bg.9.png
+++ b/core/res/res/drawable-xhdpi/contact_header_bg.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
index 93507893f75b..9666f7355473 100644
--- a/core/res/res/drawable-xhdpi/divider_vertical_holo_dark.9.png
+++ 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
index e0f6e0adc35e..026017bda180 100644
--- a/core/res/res/drawable-xhdpi/divider_vertical_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/divider_vertical_holo_light.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
index b4123ffe86c1..8853cbe570fc 100644
--- a/core/res/res/drawable-xhdpi/emo_im_angel.png
+++ 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
index 0efacf895c87..82cbd55d5b5e 100644
--- a/core/res/res/drawable-xhdpi/emo_im_cool.png
+++ 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
index 7de7bf040b50..315112590f08 100644
--- a/core/res/res/drawable-xhdpi/emo_im_crying.png
+++ 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
index baa07653146b..ef2fded97fb7 100644
--- a/core/res/res/drawable-xhdpi/emo_im_embarrassed.png
+++ 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
index afb22bb4382d..c41b19d5b377 100644
--- a/core/res/res/drawable-xhdpi/emo_im_foot_in_mouth.png
+++ 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
index 08a242d2b0fc..a2702b26749a 100644
--- a/core/res/res/drawable-xhdpi/emo_im_happy.png
+++ 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
index c643a3cfbfc2..7afd2f69a8ab 100644
--- a/core/res/res/drawable-xhdpi/emo_im_kissing.png
+++ 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
index 0301f808a245..abc3700da6b4 100644
--- a/core/res/res/drawable-xhdpi/emo_im_laughing.png
+++ 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
index 594e5e7359f5..60592fb85b73 100644
--- a/core/res/res/drawable-xhdpi/emo_im_lips_are_sealed.png
+++ 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
index df9283a7c123..8efcf0b6fa61 100644
--- a/core/res/res/drawable-xhdpi/emo_im_money_mouth.png
+++ 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
index f42f0a91e1a4..81e94b1ec704 100644
--- a/core/res/res/drawable-xhdpi/emo_im_sad.png
+++ 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
index 6b057fa2521b..7b7aabf1f1f7 100644
--- a/core/res/res/drawable-xhdpi/emo_im_surprised.png
+++ 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
index ef128c551377..1b6a98531ae9 100644
--- a/core/res/res/drawable-xhdpi/emo_im_tongue_sticking_out.png
+++ 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
index fcc0f4276f37..2c2cfa6bbf04 100644
--- a/core/res/res/drawable-xhdpi/emo_im_undecided.png
+++ 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
index 687b62b4a1fb..6c9cb0e247b2 100644
--- a/core/res/res/drawable-xhdpi/emo_im_winking.png
+++ 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
index cb75a18d662e..34861e4093fb 100644
--- a/core/res/res/drawable-xhdpi/emo_im_wtf.png
+++ 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
index 32a7028a705e..0583178a5aaf 100644
--- a/core/res/res/drawable-xhdpi/emo_im_yelling.png
+++ b/core/res/res/drawable-xhdpi/emo_im_yelling.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_close_holo_dark.9.png b/core/res/res/drawable-xhdpi/expander_close_holo_dark.9.png
index 8005de74ab9c..f56ef3118273 100644
--- a/core/res/res/drawable-xhdpi/expander_close_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/expander_close_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_close_holo_light.9.png b/core/res/res/drawable-xhdpi/expander_close_holo_light.9.png
index 333dd24db2ea..e1570248abf3 100644
--- a/core/res/res/drawable-xhdpi/expander_close_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/expander_close_holo_light.9.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
index 6eed88a1fda7..598b75b59bca 100644
--- a/core/res/res/drawable-xhdpi/expander_ic_maximized.9.png
+++ 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
index 0683be681584..396f41382dcc 100644
--- a/core/res/res/drawable-xhdpi/expander_ic_minimized.9.png
+++ b/core/res/res/drawable-xhdpi/expander_ic_minimized.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_open_holo_dark.9.png b/core/res/res/drawable-xhdpi/expander_open_holo_dark.9.png
index 4a56a80eb3f5..d2e8ae851fe8 100644
--- a/core/res/res/drawable-xhdpi/expander_open_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/expander_open_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_open_holo_light.9.png b/core/res/res/drawable-xhdpi/expander_open_holo_light.9.png
index 67ed4c0a130f..35fb75a442d4 100644
--- a/core/res/res/drawable-xhdpi/expander_open_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/expander_open_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png
index dfc5e6b6f9a0..6e0244f79eaa 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png
index eab0cb91ff92..6478a112ebad 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_left_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png
index e3e0cde4be4e..0330b172e07d 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png
index b2bd5ca878c9..57539e450472 100644
--- a/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/fastscroll_label_right_holo_light.9.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 c727bd44627b..751e0d5a85aa 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 c727bd44627b..751e0d5a85aa 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 f2c6b42031e0..c9427a997b76 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 f2c6b42031e0..b495fbd7ea1a 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/frame_gallery_thumb.9.png b/core/res/res/drawable-xhdpi/frame_gallery_thumb.9.png
index 915fbed3340b..a6bb25afaf1f 100644
--- a/core/res/res/drawable-xhdpi/frame_gallery_thumb.9.png
+++ 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
index 13ea0067944f..85d65faa710f 100644
--- a/core/res/res/drawable-xhdpi/frame_gallery_thumb_pressed.9.png
+++ 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
index f9471444dd4d..1dadee661704 100644
--- a/core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.png
+++ b/core/res/res/drawable-xhdpi/frame_gallery_thumb_selected.9.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
index 3fa419734bf3..0df19342106c 100644
--- a/core/res/res/drawable-xhdpi/ic_audio_ring_notif.png
+++ 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
index e8e7fcc4b0ea..85acb93db2b5 100644
--- a/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.png
+++ b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_checkmark_holo_light.png b/core/res/res/drawable-xhdpi/ic_checkmark_holo_light.png
new file mode 100644
index 000000000000..1607f35857df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_checkmark_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_emergency.png b/core/res/res/drawable-xhdpi/ic_emergency.png
index f5df6cd1de38..0e975498d5a8 100644
--- a/core/res/res/drawable-xhdpi/ic_emergency.png
+++ b/core/res/res/drawable-xhdpi/ic_emergency.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
index 34c5f3939bb7..8b822d9e37c2 100644
--- a/core/res/res/drawable-xhdpi/ic_input_delete.png
+++ b/core/res/res/drawable-xhdpi/ic_input_delete.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png
index d54588336fdb..760ef2d9ed49 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png
index 8de7b8416db1..093bc055081c 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_down.png b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_down.png
index c655d93b0cc7..b8e5733522ef 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_down.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_down.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_left.png b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_left.png
index 75173cb701fd..ce5da43fc650 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_left.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_left.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_right.png b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_right.png
index 9f6da72fbc13..c16f1431125d 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_right.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_up.png b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_up.png
index 53794fde8cf7..9bed39a3e3e0 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_up.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_chevron_up.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png
index 544924e4bcf9..b09071b705c2 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_handle_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png
index 73d7af3cd51b..8a0331d8359d 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_focused.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_focused.png
deleted file mode 100644
index d067ab8d29fd..000000000000
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_focused.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png
index 1a53c630c5b0..0422117f72d3 100644
--- a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png
+++ b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_normal.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_copy_holo_dark.png b/core/res/res/drawable-xhdpi/ic_menu_copy_holo_dark.png
index 801434525cb1..ba883aec0ffd 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_copy_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_copy_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_copy_holo_light.png b/core/res/res/drawable-xhdpi/ic_menu_copy_holo_light.png
index b5359a1963a8..364b1692f3ea 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_copy_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_copy_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_cut_holo_dark.png b/core/res/res/drawable-xhdpi/ic_menu_cut_holo_dark.png
index 180365f4e5b7..16632b196392 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_cut_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_cut_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_cut_holo_light.png b/core/res/res/drawable-xhdpi/ic_menu_cut_holo_light.png
index a31a06f59ce7..6e007c76d2fd 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_cut_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_cut_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_dark.png b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_dark.png
index 1ce25e2e419c..a92fb1d4af62 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png
index dcd6514a9bf7..930ca8d95e8b 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_paste_holo_dark.png b/core/res/res/drawable-xhdpi/ic_menu_paste_holo_dark.png
index 6e7273f252b9..4c5f7f20d426 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_paste_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_paste_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_paste_holo_light.png b/core/res/res/drawable-xhdpi/ic_menu_paste_holo_light.png
index b7eedd917afe..6edd4b222ef0 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_paste_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_paste_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_dark.png b/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_dark.png
index 7125557124de..8eef37dd4698 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_light.png b/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_light.png
index c7728d4b190a..2e1cf86dbbef 100644
--- a/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_menu_selectall_holo_light.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
index 4d0f074c3910..900801a4d3d7 100644
--- a/core/res/res/drawable-xhdpi/ic_notification_ime_default.png
+++ 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
index 010852f86121..a7a8bb3e1dff 100644
--- a/core/res/res/drawable-xhdpi/ic_notification_overlay.9.png
+++ b/core/res/res/drawable-xhdpi/ic_notification_overlay.9.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
index b26180dfa075..cdc37f1e23dc 100644
--- a/core/res/res/drawable-xhdpi/icon_highlight_rectangle.9.png
+++ 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
index f45f1c51794e..cc2ab8c0ff96 100644
--- a/core/res/res/drawable-xhdpi/icon_highlight_square.9.png
+++ b/core/res/res/drawable-xhdpi/icon_highlight_square.9.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
deleted file mode 100644
index a89b8d5d5609..000000000000
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
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
index 997d6a5eec08..0812cb58107f 100644
--- 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
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png
index d98a126327c2..db1cbe6ca16c 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.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
index 2eb69f676109..3ab2e99785c3 100644
--- 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
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
index 4491f02f9b5f..de4ca916ca58 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png
index 6e91fbcdf62a..853b0f0ced00 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.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
index 4412331cd5e4..6cb42c1b5bca 100644
--- 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
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
index d0cba8d761a0..f646a4135bd0 100644
--- 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
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
index b784f711c9b9..3aa8ccbfd5cb 100644
--- a/core/res/res/drawable-xhdpi/menu_background.9.png
+++ 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
index ab43013078e7..af08de2e16a1 100644
--- 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
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
index 3251f9587a50..3c3722cbc72f 100644
--- a/core/res/res/drawable-xhdpi/menu_separator.9.png
+++ 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
index 54b2be68553a..4a8b2ad873d2 100644
--- a/core/res/res/drawable-xhdpi/menu_submenu_background.9.png
+++ b/core/res/res/drawable-xhdpi/menu_submenu_background.9.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
index b8220ceb7ec4..62b267e6159d 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled.9.png
+++ 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
index 7f4f0937419c..5f38c35c1faf 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused.9.png
+++ 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_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
index beae86df3cfe..1c2f33e14803 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
index 1f5b745be6fd..4e688bcd1abc 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
index cee62f8d6873..dc422f2f95b3 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
index 367dad4b66ba..afc02db78ce1 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
index 66b4807f338a..3604013f00e4 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
index b99572cad02d..a16cd38ec2be 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
index 37cd3ce74d39..b975b6398696 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png
index 37cd3ce74d39..b975b6398696 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_longpressed_holo_light.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
index c10b671f16d3..b1d3e7b3f9de 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
index 18e7c8e18709..39cdb93f8854 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png
index 5ddece8f9633..2a14ac559895 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_normal_holo_light.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
index bfae684ddfd3..e61c469afd12 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
index 7459f478fa5b..4827377c244a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png
index 7459f478fa5b..4827377c244a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_down_pressed_holo_light.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
index 945163094d69..ed0c0160b73e 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_down_selected.9.png
+++ 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
index 01cc01a98987..279087c4c868 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_disabled.9.png
+++ 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
index b4d9c7f33102..1b3467acf57e 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_normal.9.png
+++ 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
index 5f3d98225eff..930415e7a4f3 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_pressed.9.png
+++ 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
index 434f05fbbab3..5240d0874c9c 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_input_selected.9.png
+++ 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
index 0c329945d58e..4b7911279146 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled.9.png
+++ 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
index cba1e76cb088..6c2f397175cd 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused.9.png
+++ 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_disabled_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
index b13f8e8d0715..97ea0b5fe4b3 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
index b71cc03081ac..e59e2a7e18b7 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
index 982f6255d87a..3b8fa7fda9fa 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
index fd3fa74afa1a..77a1dd4cb885 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_disabled_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
index 57dcf2785a6b..24c2d8445fa8 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
index eff8c2204b73..b2566dc3e486 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_focused_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
index 15bed2c60f7b..7075af79495a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png
index 15bed2c60f7b..7075af79495a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_longpressed_holo_light.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
index ee270b44aea3..699a9f5f7556 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
index 74bc6dfbda75..11b60a96e043 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png
index 8fe215974c85..074fae59b4cb 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_normal_holo_light.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
index 297f77c768a6..5504fee0ea3a 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
index 97cdcb13f115..2310f830ecf0 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png
index 97cdcb13f115..2310f830ecf0 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_pressed_holo_light.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
index e5d512699c33..585cf304efc6 100644
--- a/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.png
+++ b/core/res/res/drawable-xhdpi/numberpicker_up_selected.9.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
index 2ceae602f6b0..f3a3a9d9c6bd 100644
--- a/core/res/res/drawable-xhdpi/panel_background.9.png
+++ b/core/res/res/drawable-xhdpi/panel_background.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
index c171b7c7bc03..9bdf3f1665c7 100644
--- a/core/res/res/drawable-xhdpi/panel_bg_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/panel_bg_holo_light.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
index cf8329e3862d..9aa677695ea8 100644
--- a/core/res/res/drawable-xhdpi/password_field_default.9.png
+++ 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
index 65ea61bc7869..7f951300667e 100644
--- a/core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.png
+++ b/core/res/res/drawable-xhdpi/password_keyboard_background_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_center_bright.9.png b/core/res/res/drawable-xhdpi/popup_center_bright.9.png
index b1a8e3e182a1..97614e396a98 100644
--- a/core/res/res/drawable-xhdpi/popup_center_bright.9.png
+++ b/core/res/res/drawable-xhdpi/popup_center_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_full_bright.9.png b/core/res/res/drawable-xhdpi/popup_full_bright.9.png
index 114faa0e1b8c..f10dd85af9cb 100644
--- a/core/res/res/drawable-xhdpi/popup_full_bright.9.png
+++ b/core/res/res/drawable-xhdpi/popup_full_bright.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/popup_full_dark.9.png b/core/res/res/drawable-xhdpi/popup_full_dark.9.png
index 996beaa6e94b..7de3e9d8c793 100644
--- a/core/res/res/drawable-xhdpi/popup_full_dark.9.png
+++ b/core/res/res/drawable-xhdpi/popup_full_dark.9.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
index 2784c3066ff9..a24e607821f7 100644
--- a/core/res/res/drawable-xhdpi/popup_inline_error.9.png
+++ 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
index f26be8c70711..e382712de9e2 100644
--- a/core/res/res/drawable-xhdpi/popup_inline_error_above.9.png
+++ b/core/res/res/drawable-xhdpi/popup_inline_error_above.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png
index f96a4a60e056..ca2450239fde 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo1.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png
index 3a6554f6b44b..5653118c7645 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo2.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png
index 30bd7ada7629..438b1b5c9c7f 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo3.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png
index 209036be79ae..efe3fed5b863 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo4.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png
index 830820b10c56..cb7931c873f5 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo5.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png
index 39eb2048d5f5..8ff7ee999ce2 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo6.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png
index a2d4dc254129..ce07298ada97 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo7.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png
index 1772aeae36e8..87e9d8fbeef6 100644
--- a/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.png
+++ b/core/res/res/drawable-xhdpi/progressbar_indeterminate_holo8.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
index 622095bfca75..3f23144632c6 100644
--- 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
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
index bf8cf4c5870e..41848dd92978 100644
--- 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
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
index 3e155decb26d..b2a1d8c230cf 100644
--- 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
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
index 1c1974ab4cf0..27218f2cf833 100644
--- 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
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
index 52d95afa8dab..49d1ed5c305e 100644
--- 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
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
index 2613e0d954d2..8be8ac80f283 100644
--- 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
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
index b7986e7c4681..3f9e4aabfb5f 100644
--- 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
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
index e964b39467bb..46f3640c1a54 100644
--- 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
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
index 68c77a879467..2ecb3b5e1f91 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_half.png
+++ 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_half_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_big_half_holo_dark.png
index 637c727fa6fc..f9d3cecc7d69 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_half_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_half_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_big_half_holo_light.png
index 50f06ddf30ed..bbdc70d320ca 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_half_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_half_holo_light.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
index 2389fff3af6a..8dae7140c003 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_off.png
+++ 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_off_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_big_off_holo_dark.png
index 96c96fbce424..34b94dbcb3fb 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_off_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_off_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_big_off_holo_light.png
index 9e8cd54f9ab2..34cb926b024d 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_off_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_off_holo_light.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
index 39467dd052f9..43633e15ccac 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_on.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_on_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_big_on_holo_dark.png
index 1e42698a2f26..273fd16da5e9 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_on_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_big_on_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_big_on_holo_light.png
index 538e1a835d69..dbd11bd68636 100644
--- a/core/res/res/drawable-xhdpi/rate_star_big_on_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_big_on_holo_light.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
index 6c6011428122..44178c9ab3aa 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_half.png
+++ 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_half_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_med_half_holo_dark.png
index c35d9a4986a6..013543e004f6 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_half_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_half_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_med_half_holo_light.png
index f74ea469f573..801703f29494 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_half_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_half_holo_light.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
index 3428a3b63d3e..101692d4017f 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_off.png
+++ 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_off_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_med_off_holo_dark.png
index be309705d625..d411e25ea5a3 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_off_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_off_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_med_off_holo_light.png
index 1d19a88e0e81..39f0fa2e8297 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_off_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_off_holo_light.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
index 0acddec3b15d..a650d0d08d94 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_on.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_on_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_med_on_holo_dark.png
index d9122b4adefe..fdfe9322a88e 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_on_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_med_on_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_med_on_holo_light.png
index 106ae7791f74..ca88d284623f 100644
--- a/core/res/res/drawable-xhdpi/rate_star_med_on_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_med_on_holo_light.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
index b7a5709617fc..a7e97a58e636 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_half.png
+++ 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_half_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_small_half_holo_dark.png
index fc09cd697d7e..3d2a77404a2e 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_half_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_half_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_half_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_small_half_holo_light.png
index 663332f6f96d..9221829f7526 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_half_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_half_holo_light.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
index 2516cccc7a75..71140ac81e5d 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_off.png
+++ 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_off_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_small_off_holo_dark.png
index 8fc525fc13d1..346daa31fd46 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_off_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_off_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_off_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_small_off_holo_light.png
index 59b50605fcce..4c2b62c3f76d 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_off_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_off_holo_light.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
index 327fd1ffa7fa..ddfb876d25e9 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_on.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_on.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_on_holo_dark.png b/core/res/res/drawable-xhdpi/rate_star_small_on_holo_dark.png
index 09bb66b083a0..9bf24666dea9 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_on_holo_dark.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_on_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/rate_star_small_on_holo_light.png b/core/res/res/drawable-xhdpi/rate_star_small_on_holo_light.png
index b1ee6eb17c84..187eeded5e50 100644
--- a/core/res/res/drawable-xhdpi/rate_star_small_on_holo_light.png
+++ b/core/res/res/drawable-xhdpi/rate_star_small_on_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
index fdbf4dd925f0..3cf84a5a8d19 100644
--- a/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png
index 4f6391f53613..24789a5c2a1f 100644
--- a/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_vertical.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
index 0b0bf244657f..4715cfb7cb36 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png
new file mode 100644
index 000000000000..d41d5a38678e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_focused_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_holo.png
deleted file mode 100644
index 45060cbf2780..000000000000
--- a/core/res/res/drawable-xhdpi/scrubber_control_holo.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png
new file mode 100644
index 000000000000..4f0e06dd710c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_normal_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png
index d1fe11591b76..5d9f860e636a 100644
--- a/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.png
+++ b/core/res/res/drawable-xhdpi/scrubber_control_pressed_holo.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
index 2ad7615df04b..f917cb66ce02 100644
--- a/core/res/res/drawable-xhdpi/search_plate.9.png
+++ b/core/res/res/drawable-xhdpi/search_plate.9.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
index 41e6c31a8371..c248237858ba 100644
--- a/core/res/res/drawable-xhdpi/settings_header_raw.9.png
+++ b/core/res/res/drawable-xhdpi/settings_header_raw.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
index 7294519fd012..9afd52fae827 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
index d43da4e14e5f..afd4bb921f57 100644
--- a/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_16_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
index eecac27d655c..76e9428beb16 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
index eb91b2c729fe..6f693d631535 100644
--- a/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_20_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
index b1b8232e5cbc..19517c4b0aee 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
index 0c15e128690f..14143c51c351 100644
--- a/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_48_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
index 6215e95aa2d4..4c92e956fe8c 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_inner_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
index 0a67fff8efb2..fe1d615a2ddc 100644
--- a/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
+++ b/core/res/res/drawable-xhdpi/spinner_76_outer_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/spinner_ab_pressed_holo_dark.9.png
index 9ee1f8ceb778..5253673642fb 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 e3e8656c3afe..cfb4a9cb4c16 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_dropdown_background_down.9.png b/core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.png
index b4352186ff81..7814354d1cd9 100644
--- a/core/res/res/drawable-xhdpi/spinner_dropdown_background_down.9.png
+++ 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
index a45c7617715c..17ee05c6c5bc 100644
--- a/core/res/res/drawable-xhdpi/spinner_dropdown_background_up.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_dropdown_background_up.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
index 71b65ddca777..1ecf8978acc6 100644
--- a/core/res/res/drawable-xhdpi/spinner_normal.9.png
+++ 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
index d7233baa19ad..87af85cf46c3 100644
--- a/core/res/res/drawable-xhdpi/spinner_press.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_press.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
index a1b11e0b12ac..15b7a902f65b 100644
--- a/core/res/res/drawable-xhdpi/spinner_select.9.png
+++ b/core/res/res/drawable-xhdpi/spinner_select.9.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
index c7ac11ff7fa2..2d0283e7e8d7 100644
--- a/core/res/res/drawable-xhdpi/stat_notify_error.png
+++ b/core/res/res/drawable-xhdpi/stat_notify_error.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
index 4fab7967cb5c..8719eff5ae1a 100644
--- a/core/res/res/drawable-xhdpi/stat_notify_missed_call.png
+++ b/core/res/res/drawable-xhdpi/stat_notify_missed_call.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
index 3a2e070adfb2..6bb7512cbf82 100644
--- a/core/res/res/drawable-xhdpi/stat_notify_wifi_in_range.png
+++ 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
index 92f8dd4a0a54..01eb61d38874 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_adb.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_adb.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_sys_phone_call.png b/core/res/res/drawable-xhdpi/stat_sys_phone_call.png
index 5aee387d21bf..e7a3981e5340 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_phone_call.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_phone_call.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
index c3e2acf52470..3f57d1c76ccb 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_tether_bluetooth.png
+++ 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
index a1c200ef739a..34b0cb36736a 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_tether_general.png
+++ 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
index a3008b8b9ecd..36afe485b5bb 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_tether_usb.png
+++ 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
index 1fd3139c92b5..dc48646b64f7 100644
--- a/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.png
+++ b/core/res/res/drawable-xhdpi/stat_sys_tether_wifi.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
index d03720f81ae7..efd3e97e35d0 100644
--- a/core/res/res/drawable-xhdpi/status_bar_header_background.9.png
+++ b/core/res/res/drawable-xhdpi/status_bar_header_background.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_dark.9.png b/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_dark.9.png
index cf10fb92da83..ea53b5f3f1b4 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_light.9.png b/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_light.9.png
index fe7a441e83fe..8a4b61aa89ec 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_activated_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_dark.9.png b/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_dark.9.png
index 54ae97993197..6a280dc6cd14 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_light.9.png b/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_light.9.png
index 305cc356a23c..34a93041ac0f 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_disabled_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_holo_dark.9.png b/core/res/res/drawable-xhdpi/switch_thumb_holo_dark.9.png
index 05dfedeaec58..757fdd4ff02e 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_holo_light.9.png b/core/res/res/drawable-xhdpi/switch_thumb_holo_light.9.png
index 63bbc4166e8b..8873ccca1cec 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_holo_light.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
index d830a99af538..d22226ed6c75 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_dark.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png
index 17802601e8de..c94248c01b1a 100644
--- a/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.9.png
+++ b/core/res/res/drawable-xhdpi/switch_thumb_pressed_holo_light.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
index e867f90df55b..f1f4ec6a96de 100644
--- a/core/res/res/drawable-xhdpi/tab_selected_v4.9.png
+++ b/core/res/res/drawable-xhdpi/tab_selected_v4.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
index 60b980737cce..1df8c3a0b784 100644
--- a/core/res/res/drawable-xhdpi/tab_unselected_v4.9.png
+++ b/core/res/res/drawable-xhdpi/tab_unselected_v4.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
index 5fcbc528ff11..98d10c92928b 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_left.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_left.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_middle.png b/core/res/res/drawable-xhdpi/text_select_handle_middle.png
index 05c2ca71a2a5..058b30b731bc 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_middle.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_middle.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_right.png b/core/res/res/drawable-xhdpi/text_select_handle_right.png
index ebf97c40c2a3..b3a0c9f47ec3 100644
--- a/core/res/res/drawable-xhdpi/text_select_handle_right.png
+++ b/core/res/res/drawable-xhdpi/text_select_handle_right.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_default.9.png b/core/res/res/drawable-xhdpi/textfield_default.9.png
index 20b1a098451a..f084f47dfc41 100644
--- a/core/res/res/drawable-xhdpi/textfield_default.9.png
+++ 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
index 794dce806376..1940051f7acd 100644
--- a/core/res/res/drawable-xhdpi/textfield_disabled.9.png
+++ 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
index b708d8241894..335bee64b4ec 100644
--- a/core/res/res/drawable-xhdpi/textfield_disabled_selected.9.png
+++ b/core/res/res/drawable-xhdpi/textfield_disabled_selected.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
index 0ed71f7e0022..ad4b935c69f5 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_default.9.png
+++ 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
index 290dd38cc515..0c60f9edccea 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_empty_default.9.png
+++ 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
index bf20153b7bbd..741bed9731c1 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_empty_pressed.9.png
+++ 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
index 18406a39bb1e..24ea6cfbc935 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_empty_selected.9.png
+++ 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
index 0913c23ada57..815785c3dd2f 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_pressed.9.png
+++ 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
index 7ba4d61f5543..f009cdbd6f35 100644
--- a/core/res/res/drawable-xhdpi/textfield_search_selected.9.png
+++ 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
index 275d6283c23b..963efdebb00f 100644
--- a/core/res/res/drawable-xhdpi/textfield_selected.9.png
+++ 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
index 4ef531c22a4d..109c01754f9b 100644
--- a/core/res/res/drawable-xhdpi/title_bar_medium.9.png
+++ 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
index eb607c7cb995..3c91a4a69200 100644
--- a/core/res/res/drawable-xhdpi/title_bar_portrait.9.png
+++ b/core/res/res/drawable-xhdpi/title_bar_portrait.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
index 4beb1d7fee46..e986db113ae1 100644
--- a/core/res/res/drawable-xhdpi/title_bar_tall.9.png
+++ b/core/res/res/drawable-xhdpi/title_bar_tall.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/vpn_connected.png b/core/res/res/drawable-xhdpi/vpn_connected.png
index 5d37ffc47ff9..1f46be2cea5d 100644
--- a/core/res/res/drawable-xhdpi/vpn_connected.png
+++ 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
index dd9ba929ad3d..847d3f52701f 100644
--- a/core/res/res/drawable-xhdpi/vpn_disconnected.png
+++ 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
index 5229b5fa6ff3..797215b6595a 100644
--- a/core/res/res/drawable-xhdpi/zoom_plate.9.png
+++ b/core/res/res/drawable-xhdpi/zoom_plate.9.png
Binary files differ
diff --git a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png b/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png
deleted file mode 100644
index c605607222ae..000000000000
--- a/core/res/res/drawable-xlarge-hdpi/indicator_code_lock_drag_direction_green_up.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/btn_cab_done_holo_dark.xml b/core/res/res/drawable/btn_cab_done_holo_dark.xml
index 2cdb60509239..65d3496a550d 100644
--- a/core/res/res/drawable/btn_cab_done_holo_dark.xml
+++ b/core/res/res/drawable/btn_cab_done_holo_dark.xml
@@ -14,9 +14,8 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false" android:state_enabled="true"
- android:drawable="@drawable/btn_cab_done_default_holo_dark" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true"
android:drawable="@drawable/btn_cab_done_pressed_holo_dark" />
<item android:state_focused="true" android:state_enabled="true"
diff --git a/core/res/res/drawable/btn_cab_done_holo_light.xml b/core/res/res/drawable/btn_cab_done_holo_light.xml
index 81add4c5da04..f6a63f430793 100644
--- a/core/res/res/drawable/btn_cab_done_holo_light.xml
+++ b/core/res/res/drawable/btn_cab_done_holo_light.xml
@@ -14,9 +14,8 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false" android:state_enabled="true"
- android:drawable="@drawable/btn_cab_done_default_holo_light" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:state_pressed="true"
android:drawable="@drawable/btn_cab_done_pressed_holo_light" />
<item android:state_focused="true" android:state_enabled="true"
diff --git a/core/res/res/drawable/item_background_holo_dark.xml b/core/res/res/drawable/item_background_holo_dark.xml
index 2d4f20aa7eb1..f188df79af6b 100644
--- a/core/res/res/drawable/item_background_holo_dark.xml
+++ b/core/res/res/drawable/item_background_holo_dark.xml
@@ -17,8 +17,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
-
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_dark" />
diff --git a/core/res/res/drawable/item_background_holo_light.xml b/core/res/res/drawable/item_background_holo_light.xml
index c616d86a1d3a..ee3f4d898154 100644
--- a/core/res/res/drawable/item_background_holo_light.xml
+++ b/core/res/res/drawable/item_background_holo_light.xml
@@ -17,8 +17,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
-
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" />
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_light" />
diff --git a/core/res/res/drawable/scrubber_control_selector_holo.xml b/core/res/res/drawable/scrubber_control_selector_holo.xml
index d146eee3b8c2..1e6c6689374c 100644
--- a/core/res/res/drawable/scrubber_control_selector_holo.xml
+++ b/core/res/res/drawable/scrubber_control_selector_holo.xml
@@ -15,7 +15,8 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true" android:state_enabled="true" android:drawable="@android:drawable/scrubber_control_pressed_holo" />
- <item android:state_enabled="true" android:drawable="@android:drawable/scrubber_control_holo" />
- <item android:drawable="@android:drawable/scrubber_control_disabled_holo" />
+ <item android:state_enabled="false" android:drawable="@android:drawable/scrubber_control_disabled_holo" />
+ <item android:state_pressed="true" android:drawable="@android:drawable/scrubber_control_pressed_holo" />
+ <item android:state_selected="true" android:drawable="@android:drawable/scrubber_control_focused_holo" />
+ <item android:drawable="@android:drawable/scrubber_control_normal_holo" />
</selector>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
index 07b4837624a9..dd291644e4f3 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
@@ -80,7 +80,8 @@
android:layout_alignParentBottom="true"
android:drawableLeft="@drawable/ic_emergency"
style="@style/Widget.Button.Transparent"
- android:drawablePadding="8dip"/>
+ android:drawablePadding="8dip"
+ android:visibility="gone"/>
</RelativeLayout>>
diff --git a/core/res/res/layout/choose_account_type.xml b/core/res/res/layout/choose_account_type.xml
new file mode 100644
index 000000000000..db96dc118b3a
--- /dev/null
+++ b/core/res/res/layout/choose_account_type.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_gravity="left"
+ android:text="@string/add_account_label"
+ android:paddingTop="16dip"
+ android:paddingBottom="16dip"
+ android:textColor="@android:color/holo_blue_light"
+ />
+
+ <View android:layout_height="3dip"
+ android:layout_width="match_parent"
+ android:background="#323232"/>
+
+ <ListView android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:drawSelectorOnTop="false"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/choose_selected_account_row.xml b/core/res/res/layout/choose_selected_account_row.xml
new file mode 100644
index 000000000000..d88750dcc28b
--- /dev/null
+++ b/core/res/res/layout/choose_selected_account_row.xml
@@ -0,0 +1,46 @@
+<?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.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:paddingLeft="0dip"
+ android:paddingRight="0dip"
+ android:orientation="horizontal" >
+
+ <ImageView android:id="@+id/account_row_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingRight="8dip" />
+
+ <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/account_row_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:gravity="center_vertical"
+ android:minHeight="?android:attr/listPreferredItemHeight" />
+
+ <ImageView android:id="@+id/account_row_checkmark"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="right"
+ android:layout_weight="2"
+ android:paddingRight="8dip"
+ android:src="@drawable/ic_checkmark_holo_light" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/core/res/res/layout/choose_type_and_account.xml b/core/res/res/layout/choose_type_and_account.xml
new file mode 100644
index 000000000000..5a0512633402
--- /dev/null
+++ b/core/res/res/layout/choose_type_and_account.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* //device/apps/common/assets/res/layout/list_content.xml
+**
+** 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_gravity="left"
+ android:text="@string/choose_account_label"
+ android:paddingTop="16dip"
+ android:paddingBottom="16dip"
+ android:textColor="@android:color/holo_blue_light"
+ />
+
+ <View android:layout_height="3dip"
+ android:layout_width="match_parent"
+ android:background="#323232"/>
+
+ <TextView android:id="@+id/description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_gravity="left|center_vertical"
+ android:text="@string/choose_account_text"
+ android:paddingTop="16dip"
+ android:paddingBottom="16dip"
+ />
+
+ <ListView android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:drawSelectorOnTop="false"
+ android:layout_weight="1"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+ <Button android:id="@+id/addAccount"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="2dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/add_account_button_label"
+ />
+</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_glogin_unlock.xml b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
index 0e5fe78c5209..35d113c899df 100644
--- a/core/res/res/layout/keyguard_screen_glogin_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
@@ -119,7 +119,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
android:text="@android:string/lockscreen_emergency_call"
/>
diff --git a/core/res/res/layout/keyguard_screen_lock.xml b/core/res/res/layout/keyguard_screen_lock.xml
index 6e4fa7df1f5b..43867f4dfdf3 100644
--- a/core/res/res/layout/keyguard_screen_lock.xml
+++ b/core/res/res/layout/keyguard_screen_lock.xml
@@ -211,7 +211,7 @@
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
android:text="@android:string/lockscreen_emergency_call"
/>
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
index 694db50a84ee..8bc5f34a84a6 100644
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_password_landscape.xml
@@ -170,6 +170,7 @@
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
android:layout_width="270dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="4dip"
android:layout_marginRight="4dip"
android:background="#40000000"
android:layout_marginTop="5dip"
@@ -190,4 +191,17 @@
android:layout_height="0dip"
/>
+ <!-- Area to overlay FaceLock -->
+ <TextView android:id="@+id/faceLockAreaView"
+ android:visibility="gone"
+ android:layout_row="0"
+ android:layout_column="2"
+ android:layout_rowSpan="8"
+ android:layout_columnSpan="1"
+ android:layout_gravity="fill"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:background="@color/facelock_color_background"
+ />
+
</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index cf3bd4239a06..2a66d7dba841 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -132,7 +132,7 @@
<!-- Numeric keyboard -->
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_marginLeft="4dip"
android:layout_marginRight="4dip"
android:paddingTop="4dip"
android:paddingBottom="4dip"
@@ -178,4 +178,17 @@
android:layout_height="0dip"
/>
+ <!-- Area to overlay FaceLock -->
+ <TextView android:id="@+id/faceLockAreaView"
+ android:visibility="gone"
+ android:layout_row="3"
+ android:layout_column="0"
+ android:layout_rowSpan="2"
+ android:layout_columnSpan="1"
+ android:layout_gravity="fill"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:background="@color/facelock_color_background"
+ />
+
</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
index dff2a3fdb9a7..59065e11cbfc 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
@@ -113,7 +113,7 @@
android:layout_marginLeft="8dip"
android:textSize="18sp"
android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
/>
</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
index d8bea5693ade..6e8a6458e5ba 100644
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
@@ -111,7 +111,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
android:text="@android:string/lockscreen_emergency_call"
/>
</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml b/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
index 11a6e12bd1f4..b662e8278b32 100644
--- a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
@@ -175,7 +175,7 @@
android:layout_marginLeft="8dip"
android:textSize="18sp"
android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
/>
</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml b/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml
index e5e045956f56..8b039f7e2ff7 100644
--- a/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml
@@ -34,6 +34,9 @@
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
+ android:ellipsize="marquee"
+ android:layout_marginRight="6dip"
+ android:layout_marginLeft="6dip"
android:textAppearance="?android:attr/textAppearanceLarge"/>
<!-- Carrier info -->
@@ -44,6 +47,8 @@
android:gravity="center"
android:singleLine="true"
android:ellipsize="marquee"
+ android:layout_marginRight="6dip"
+ android:layout_marginLeft="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<LinearLayout
@@ -52,28 +57,6 @@
android:layout_height="wrap_content">
<LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginRight="10dip"
- android:layout_marginLeft="10dip">
- <TextView android:id="@+id/enter_puk"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:text="@android:string/keyguard_password_enter_puk_prompt"
- android:textSize="30sp"
- android:layout_marginBottom="10dip"/>
- <TextView android:id="@+id/enter_pin"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:text="@android:string/keyguard_password_enter_pin_prompt"
- android:textSize="30sp"
- android:layout_marginTop="10dip"/>
- </LinearLayout>
-
- <LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_weight="1"
@@ -92,14 +75,15 @@
android:background="@android:drawable/edit_text">
<!-- displays dots as user enters puk -->
- <TextView android:id="@+id/pukDisplay"
+ <EditText android:id="@+id/pukDisplay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
android:textStyle="bold"
android:inputType="textPassword"
+ android:textColor="#000"
+ android:hint="@android:string/keyguard_password_enter_puk_prompt"
/>
<ImageButton android:id="@+id/pukDel"
@@ -122,14 +106,15 @@
android:background="@android:drawable/edit_text">
<!-- displays dots as user enters new pin -->
- <TextView android:id="@+id/pinDisplay"
+ <EditText android:id="@+id/pinDisplay"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
android:textStyle="bold"
android:inputType="textPassword"
+ android:textColor="#000"
+ android:hint="@android:string/keyguard_password_enter_pin_prompt"
/>
<ImageButton android:id="@+id/pinDel"
@@ -177,7 +162,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="8dip"
+ android:drawablePadding="4dip"
android:text="@android:string/lockscreen_emergency_call"
/>
</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml
index 03685300ea12..4349c5bb0e87 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml
@@ -29,7 +29,8 @@
android:gravity="center_horizontal">
<com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginBottom="18dip"
+ android:layout_marginTop="@dimen/keyguard_lockscreen_status_line_clockfont_top_margin"
+ android:layout_marginBottom="12dip"
android:layout_marginRight="@dimen/keyguard_lockscreen_status_line_font_right_margin"
android:layout_gravity="right">
@@ -149,7 +150,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:layout_marginBottom="8dip"
+ android:layout_marginBottom="12dip"
android:gravity="center_horizontal"
android:singleLine="true"
android:ellipsize="marquee"
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
index 2849376c7f5b..294f91e89997 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
@@ -104,6 +104,7 @@
android:id="@+id/carrier"
android:layout_width="0dip"
android:layout_gravity="fill_horizontal"
+ android:layout_marginBottom="12dip"
android:gravity="right"
android:singleLine="true"
android:ellipsize="marquee"
diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
index d71dbffd8f9d..2778f4e8446d 100644
--- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
@@ -160,4 +160,18 @@
android:layout_height="0dip"
/>
+ <!-- Area to overlay FaceLock -->
+ <TextView android:id="@+id/faceLockAreaView"
+ android:visibility="gone"
+ android:layout_row="0"
+ android:layout_column="1"
+ android:layout_rowSpan="7"
+ android:layout_columnSpan="1"
+ android:layout_gravity="fill"
+ android:layout_marginLeft="8dip"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:background="@color/facelock_color_background"
+ />
+
</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
index 64c479f32c52..03fc79e81671 100644
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
@@ -28,7 +28,8 @@
android:gravity="center_horizontal">
<com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginBottom="18dip"
+ android:layout_marginTop="@dimen/keyguard_lockscreen_status_line_clockfont_top_margin"
+ android:layout_marginBottom="12dip"
android:layout_marginRight="@dimen/keyguard_lockscreen_status_line_font_right_margin"
android:layout_gravity="right">
@@ -171,4 +172,19 @@
android:layout_height="0dip"
/>
+ <!-- Area to overlay FaceLock -->
+ <TextView android:id="@+id/faceLockAreaView"
+ android:visibility="gone"
+ android:layout_row="4"
+ android:layout_column="0"
+ android:layout_rowSpan="1"
+ android:layout_columnSpan="1"
+ android:layout_gravity="fill"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:background="@color/facelock_color_background"
+ />
+
</GridLayout>
diff --git a/core/res/res/layout/number_picker.xml b/core/res/res/layout/number_picker.xml
index f2f524caf813..807daf2b2dae 100644
--- a/core/res/res/layout/number_picker.xml
+++ b/core/res/res/layout/number_picker.xml
@@ -23,8 +23,6 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/numberPickerUpButtonStyle"
- android:paddingTop="22dip"
- android:paddingBottom="22dip"
android:contentDescription="@string/number_picker_increment_button" />
<EditText android:id="@+id/numberpicker_input"
@@ -36,8 +34,6 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/numberPickerDownButtonStyle"
- android:paddingTop="22dip"
- android:paddingBottom="22dip"
android:contentDescription="@string/number_picker_decrement_button" />
</merge>
diff --git a/core/res/res/layout/text_edit_suggestion_item.xml b/core/res/res/layout/text_edit_suggestion_item.xml
index 082c5ec031c0..0e2b04f3a59b 100644
--- a/core/res/res/layout/text_edit_suggestion_item.xml
+++ b/core/res/res/layout/text_edit_suggestion_item.xml
@@ -15,7 +15,7 @@
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dip"
android:paddingRight="16dip"
diff --git a/core/res/res/layout/volume_adjust.xml b/core/res/res/layout/volume_adjust.xml
index ea4e1f9a6036..c16a12cec025 100644
--- a/core/res/res/layout/volume_adjust.xml
+++ b/core/res/res/layout/volume_adjust.xml
@@ -21,7 +21,6 @@
android:id="@+id/visible_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="80dp"
android:background="@android:drawable/dialog_full_holo_dark"
android:orientation="horizontal"
>
diff --git a/core/res/res/layout/webview_find.xml b/core/res/res/layout/webview_find.xml
index 4cf2df51b136..a628ac8cf730 100644
--- a/core/res/res/layout/webview_find.xml
+++ b/core/res/res/layout/webview_find.xml
@@ -26,7 +26,7 @@
android:scrollHorizontally="true"
android:inputType="text"
android:hint="@string/find_on_page"
- android:imeOptions="actionDone"
+ android:imeOptions="actionDone|flagNoExtractUi|flagNoFullscreen"
android:layout_marginRight="10dip"
/>
<TextView android:id="@+id/matches"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index e5686bc10cdb..dfd8ff809e21 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -20,93 +20,54 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for byteShort (8340973892742019101) -->
- <skip />
- <!-- no translation found for kilobyteShort (5973789783504771878) -->
- <skip />
- <!-- no translation found for megabyteShort (6355851576770428922) -->
- <skip />
- <!-- no translation found for gigabyteShort (3259882455212193214) -->
- <skip />
- <!-- no translation found for terabyteShort (231613018159186962) -->
- <skip />
- <!-- no translation found for petabyteShort (5637816680144990219) -->
- <skip />
+ <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="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>
- <!-- no translation found for untitled (6071602020171759109) -->
- <skip />
- <!-- no translation found for ellipsis (7899829516048813237) -->
- <skip />
- <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
- <skip />
- <!-- no translation found for unknownName (2277556546742746522) -->
- <skip />
- <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
- <skip />
- <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
- <skip />
- <!-- no translation found for mmiError (5154499457739052907) -->
- <skip />
+ <string name="untitled" msgid="6071602020171759109">"&lt;ongetiteld&gt;"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Geen foonnommer)"</string>
+ <string name="unknownName" msgid="2277556546742746522">"(Onbekend)"</string>
+ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Stemboodskap"</string>
+ <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+ <string name="mmiError" msgid="5154499457739052907">"Verbindingsprobleem of ongeldige MMI-kode."</string>
<string name="mmiFdnError" msgid="5224398216385316471">"Bewerking is beperk tot belbeperking-nommers."</string>
- <!-- no translation found for serviceEnabled (8147278346414714315) -->
- <skip />
- <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
- <skip />
- <!-- no translation found for serviceDisabled (1937553226592516411) -->
- <skip />
- <!-- no translation found for serviceRegistered (6275019082598102493) -->
- <skip />
- <!-- no translation found for serviceErased (1288584695297200972) -->
- <skip />
- <!-- no translation found for passwordIncorrect (7612208839450128715) -->
- <skip />
- <!-- no translation found for mmiComplete (8232527495411698359) -->
- <skip />
- <!-- no translation found for badPin (5085454289896032547) -->
- <skip />
- <!-- no translation found for badPuk (5702522162746042460) -->
- <skip />
- <!-- no translation found for mismatchPin (3695902225843339274) -->
- <skip />
- <!-- no translation found for invalidPin (3850018445187475377) -->
- <skip />
- <!-- no translation found for invalidPuk (8761456210898036513) -->
- <skip />
+ <string name="serviceEnabled" msgid="8147278346414714315">"Diens is geaktiveer."</string>
+ <string name="serviceEnabledFor" msgid="6856228140453471041">"Diens geaktiveer vir:"</string>
+ <string name="serviceDisabled" msgid="1937553226592516411">"Diens is gedeaktiveer."</string>
+ <string name="serviceRegistered" msgid="6275019082598102493">"Registrasie was suksesvol."</string>
+ <string name="serviceErased" msgid="1288584695297200972">"Uitvee was suksesvol."</string>
+ <string name="passwordIncorrect" msgid="7612208839450128715">"Verkeerde wagwoord."</string>
+ <string name="mmiComplete" msgid="8232527495411698359">"MMI voltooi."</string>
+ <string name="badPin" msgid="5085454289896032547">"Die ou PIN wat jy ingesleutel het werk nie."</string>
+ <string name="badPuk" msgid="5702522162746042460">"Die PUK wat jy ingesleutel het is verkeerd."</string>
+ <string name="mismatchPin" msgid="3695902225843339274">"Die PIN\'s wat jy ingesleutel het, pas nie."</string>
+ <string name="invalidPin" msgid="3850018445187475377">"Sleutel \'n PIN wat 4 to 8 nommers lank is, in."</string>
+ <string name="invalidPuk" msgid="8761456210898036513">"Voer \'n PUK van 8 syfers of langer in."</string>
<string name="needPuk" msgid="919668385956251611">"Jou SIM-kaart is PUK-gesluit. Voer die PUK-kode in om dit te ontsluit."</string>
- <!-- no translation found for needPuk2 (4526033371987193070) -->
- <skip />
- <!-- no translation found for ClipMmi (6952821216480289285) -->
- <skip />
- <!-- no translation found for ClirMmi (7784673673446833091) -->
- <skip />
- <!-- no translation found for CfMmi (5123218989141573515) -->
- <skip />
- <!-- no translation found for CwMmi (9129678056795016867) -->
- <skip />
- <!-- no translation found for BaMmi (455193067926770581) -->
- <skip />
- <!-- no translation found for PwdMmi (7043715687905254199) -->
- <skip />
- <!-- no translation found for PinMmi (3113117780361190304) -->
- <skip />
+ <string name="needPuk2" msgid="4526033371987193070">"Sleutel PUK2 in om SIM-kaart oop te sluit."</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"Inkomender beller-ID"</string>
+ <string name="ClirMmi" msgid="7784673673446833091">"Uitgaande beller-ID"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"Oproepaanstuur"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"Oproep wag"</string>
+ <string name="BaMmi" msgid="455193067926770581">"Oproepblokkering"</string>
+ <string name="PwdMmi" msgid="7043715687905254199">"Wagwoord verander"</string>
+ <string name="PinMmi" msgid="3113117780361190304">"PIN verander"</string>
<string name="CnipMmi" msgid="3110534680557857162">"Bel teenwoordige nommer"</string>
<string name="CnirMmi" msgid="3062102121430548731">"Oproepnommer beperk"</string>
<string name="ThreeWCMmi" msgid="9051047170321190368">"Drierigtingbel"</string>
<string name="RuacMmi" msgid="7827887459138308886">"Verwerping van ongewenste, irriterende oproepe"</string>
<string name="CndMmi" msgid="3116446237081575808">"Oproepnommer-lewering"</string>
<string name="DndMmi" msgid="1265478932418334331">"Moenie steur nie"</string>
- <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
- <skip />
- <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
- <skip />
- <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
- <skip />
- <!-- no translation found for CLIRPermanent (5460892159398802465) -->
- <skip />
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Beller-ID se verstek is beperk. Volgende oproep: beperk"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Beller-ID se verstek is beperk. Volgende oproep: nie beperk nie"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Beller-ID se verstek is nie beperk nie. Volgende oproep: beperk"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Beller-ID se verstek is nie beperk nie. Volgende oproep: nie beperk nie"</string>
+ <string name="serviceNotProvisioned" msgid="8614830180508686666">"Diens nie verskaf nie."</string>
+ <string name="CLIRPermanent" msgid="5460892159398802465">"Die beller-ID-instelling kan nie verander word nie."</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"Beperkte toegang het verander"</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"Datadiens word geblokkeer."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Nooddiens word geblokkeer."</string>
@@ -116,22 +77,14 @@
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Stem-/datadienste is geblokkeer."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Stem-/SMS-dienste is geblokkeer."</string>
<string name="RestrictedOnAll" msgid="2714924667937117304">"Alle stem-/data-/SMS-dienste is geblokkeer."</string>
- <!-- no translation found for serviceClassVoice (1258393812335258019) -->
- <skip />
- <!-- no translation found for serviceClassData (872456782077937893) -->
- <skip />
- <!-- no translation found for serviceClassFAX (5566624998840486475) -->
- <skip />
- <!-- no translation found for serviceClassSMS (2015460373701527489) -->
- <skip />
- <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
- <skip />
- <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
- <skip />
- <!-- no translation found for serviceClassPacket (6991006557993423453) -->
- <skip />
- <!-- no translation found for serviceClassPAD (3235259085648271037) -->
- <skip />
+ <string name="serviceClassVoice" msgid="1258393812335258019">"Stem"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"Data"</string>
+ <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+ <string name="serviceClassDataAsync" msgid="4523454783498551468">"A-sinkroniseer"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"Sinkroniseer"</string>
+ <string name="serviceClassPacket" msgid="6991006557993423453">"Pakkie"</string>
+ <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"Swerfmodus-liggie aan"</string>
<string name="roamingText1" msgid="5314861519752538922">"Swerfmodus-liggie af"</string>
<string name="roamingText2" msgid="8969929049081268115">"Swerwing-aanduider flits"</string>
@@ -153,171 +106,114 @@
<string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nie aangestuur nie"</string>
<string name="fcComplete" msgid="3118848230966886575">"Kenmerkkode klaar."</string>
<string name="fcError" msgid="3327560126588500777">"Verbindingsprobleem of ongeldige kenmerk-kode."</string>
- <!-- no translation found for httpErrorOk (1191919378083472204) -->
- <skip />
+ <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
<string name="httpError" msgid="6603022914760066338">"\'n Netwerkfout het voorgekom."</string>
- <!-- no translation found for httpErrorLookup (4517085806977851374) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
- <skip />
- <!-- no translation found for httpErrorAuth (7293960746955020542) -->
- <skip />
- <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
- <skip />
- <!-- no translation found for httpErrorConnect (7623096283505770433) -->
- <skip />
+ <string name="httpErrorLookup" msgid="4517085806977851374">"Die URL kon nie gevind word nie."</string>
+ <string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Die webwerf-bevestigingskema word nie ondersteun nie."</string>
+ <string name="httpErrorAuth" msgid="7293960746955020542">"Bevestiging was onsuksesvol."</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Geldigheidsvastelling deur die instaanbediener was onsuksesvol."</string>
+ <string name="httpErrorConnect" msgid="7623096283505770433">"Die verbinding na die bediener was onsuksesvol."</string>
<string name="httpErrorIO" msgid="4270874999047767599">"Die bediener kon nie kommunikeer nie. Probeer later weer."</string>
- <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
- <skip />
- <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
- <skip />
- <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
- <skip />
- <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
- <skip />
- <!-- no translation found for httpErrorFile (8250549644091165175) -->
- <skip />
- <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
- <skip />
- <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
- <skip />
+ <string name="httpErrorTimeout" msgid="4743403703762883954">"Die verbinding na die bediener het uitgetel."</string>
+ <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Die bladsy bevat te veel bedienerherverwysings."</string>
+ <string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Die protokol word nie ondersteun nie."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"\'n Veilige verbinding kon nie vasgestel word nie."</string>
+ <string name="httpErrorBadUrl" msgid="6088183159988619736">"Die bladsy kon nie oopgemaak word nie, want die URL is ongeldig."</string>
+ <string name="httpErrorFile" msgid="8250549644091165175">"Die lêer kon nie oopgemaak word nie."</string>
+ <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Die versoekte lêer is nie gevind nie."</string>
+ <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Te veel versoeke word verwerk. Probeer weer later."</string>
<string name="notification_title" msgid="1259940370369187045">"Aanmeldfout vir <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <!-- no translation found for contentServiceSync (8353523060269335667) -->
- <skip />
- <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
- <skip />
+ <string name="contentServiceSync" msgid="8353523060269335667">"Sinkroniseer"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinkroniseer"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Te veel <xliff:g id="CONTENT_TYPE">%s</xliff:g> uitgevee."</string>
<string name="low_memory" product="tablet" msgid="2292820184396262278">"Tabletberging is vol! Vee \'n klompie lêers uit om plek te maak."</string>
- <!-- outdated translation 2292820184396262278 --> <string name="low_memory" product="default" msgid="6632412458436461203">"Tabletberging is vol! Vee \'n klompie lêers uit om plek te maak."</string>
- <!-- no translation found for me (6545696007631404292) -->
- <skip />
+ <string name="low_memory" product="default" msgid="6632412458436461203">"Foonberging is vol! Vee sommige lêers uit om spasie te maak."</string>
+ <string name="me" msgid="6545696007631404292">"Ek"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Tablet-opsies"</string>
- <!-- outdated translation 8545351420865202853 --> <string name="power_dialog" product="default" msgid="1319919075463988638">"Tablet-opsies"</string>
- <!-- no translation found for silent_mode (7167703389802618663) -->
- <skip />
- <!-- no translation found for turn_on_radio (3912793092339962371) -->
- <skip />
- <!-- no translation found for turn_off_radio (8198784949987062346) -->
- <skip />
- <!-- no translation found for screen_lock (799094655496098153) -->
- <skip />
- <!-- no translation found for power_off (4266614107412865048) -->
- <skip />
- <!-- no translation found for shutdown_progress (2281079257329981203) -->
- <skip />
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"Foonopsies"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"Stilmodus"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"Skakel draadloos aan"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"Skakel draadloos af"</string>
+ <string name="screen_lock" msgid="799094655496098153">"Skermslot"</string>
+ <string name="power_off" msgid="4266614107412865048">"Sit af"</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"Sit tans af…"</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Jou tablet gaan nou afskakel."</string>
- <!-- outdated translation 3385745179555731470 --> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Jou tablet gaan nou afskakel."</string>
+ <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Jou foon gaan nou afsit."</string>
<string name="shutdown_confirm_question" msgid="6656441286856415014">"Wil jy afskakel?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Onlangs"</string>
- <!-- no translation found for no_recent_tasks (279702952298056674) -->
- <skip />
+ <string name="no_recent_tasks" msgid="279702952298056674">"Geen onlangse programme nie."</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"Tablet-opsies"</string>
- <!-- outdated translation 408477140088053665 --> <string name="global_actions" product="default" msgid="2406416831541615258">"Tablet-opsies"</string>
- <!-- no translation found for global_action_lock (2844945191792119712) -->
- <skip />
- <!-- no translation found for global_action_power_off (4471879440839879722) -->
- <skip />
- <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
- <skip />
+ <string name="global_actions" product="default" msgid="2406416831541615258">"Foonopsies"</string>
+ <string name="global_action_lock" msgid="2844945191792119712">"Skermslot"</string>
+ <string name="global_action_power_off" msgid="4471879440839879722">"Sit af"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stilmodus"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Klank is AF"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Klank is AAN"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegtuigmodus"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegtuigmodus is AAN"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegtuigmodus is AF"</string>
- <!-- outdated translation 5833510281787786290 --> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"100+"</string>
- <!-- no translation found for safeMode (2788228061547930246) -->
- <skip />
+ <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+ <string name="safeMode" msgid="2788228061547930246">"Veiligmodus"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-stelsel"</string>
- <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
- <skip />
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Dienste wat jou geld kos"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Laat programme toe om dinge te doen wat jou geld kan kos."</string>
- <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
- <skip />
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"Jou boodskappe"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"Lees en skryf jou SMS-, e-pos- en ander boodskappe."</string>
- <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
- <skip />
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Jou persoonlike inligting"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Direkte toegang tot jou kontakte en kalender wat op die tablet gestoor is."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Direkte toegang tot jou kontakte en kalender wat op die foon gestoor is."</string>
- <!-- no translation found for permgrouplab_location (635149742436692049) -->
- <skip />
- <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
- <skip />
- <!-- no translation found for permgrouplab_network (5808983377727109831) -->
- <skip />
+ <string name="permgrouplab_location" msgid="635149742436692049">"Jou ligging"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"Monitor jou fisiese ligging"</string>
+ <string name="permgrouplab_network" msgid="5808983377727109831">"Netwerkkommunikasie"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Laat programme toe om verskeie netwerkkenmerke te gebruik."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
- <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
- <skip />
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardewarekontroles"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Direkte toegang tot hardeware op die selfoon."</string>
- <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
- <skip />
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"foonoproepe"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Monitor, neem op, en verwerk foonoproepe."</string>
- <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
- <skip />
+ <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Stelselhulpmiddels"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Laervlak-toegang en -beheer van die stelsel."</string>
- <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
- <skip />
+ <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Ontwikkelingshulpmiddels"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Kenmerke net nodig vir programontwikkelaars."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Stoor"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Gebruik die USB-berging."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Lees die SD-kaart."</string>
- <!-- no translation found for permlab_statusBar (7417192629601890791) -->
- <skip />
+ <string name="permlab_statusBar" msgid="7417192629601890791">"deaktiveer of verander statusbalk"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Laat program toe om die statusbalk te deaktiveer of stelselikone by te voeg of te verwyder."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"statusbalk"</string>
<string name="permdesc_statusBarService" msgid="4097605867643520920">"Laat die program toe om die statusbalk te wees."</string>
- <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
- <skip />
+ <string name="permlab_expandStatusBar" msgid="1148198785937489264">"vou statusbalk in of uit"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Laat program toe om die statusbalk uit of in te vou."</string>
- <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"onderskep uitgaande oproepe"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Laat program toe om uitgaande oproepe te verwerk en die nommer wat geskakel word, te verander. Kwaadwillige programme kan uitgaande oproepe monitor, herlei, of voorkom."</string>
- <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"ontvang SMS"</string>
<string name="permdesc_receiveSms" msgid="6298292335965966117">"Laat program toe om SMS-boodskappe te ontvang en te verwerk. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
- <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"ontvang MMS"</string>
<string name="permdesc_receiveMms" msgid="4563346832000174373">"Laat program toe om MMS-boodskappe te ontvang en te verwerk. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
- <!-- no translation found for permlab_receiveEmergencyBroadcast (1803477660846288089) -->
- <skip />
- <!-- no translation found for permdesc_receiveEmergencyBroadcast (7118393393716546131) -->
- <skip />
- <!-- no translation found for permlab_sendSms (5600830612147671529) -->
- <skip />
+ <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"ontvang nooduitsendings"</string>
+ <string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Laat program toe om nooduitsending-boodskappe te ontvang en te verwerk. Hierdie toestemming is net vir stelselprogramme beskikbaar."</string>
+ <string name="permlab_sendSms" msgid="5600830612147671529">"stuur SMS-boodskappe"</string>
<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>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"stuur sms-boodskappe met geen bestiging"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Laat program toe om SMS-boodskappe te stuur. Kwaadwillige programme kan jou geld kos deur boodskappe sonder jou bevestiging te stuur."</string>
- <!-- no translation found for permlab_readSms (4085333708122372256) -->
- <skip />
+ <string name="permlab_readSms" msgid="4085333708122372256">"lees SMS of MMS"</string>
<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>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Laat program toe om SMS-boodskappe te lees wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan dalk jou vertroulike boodskappe lees."</string>
- <!-- no translation found for permlab_writeSms (6881122575154940744) -->
- <skip />
+ <string name="permlab_writeSms" msgid="6881122575154940744">"verander SMS of MMS"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Laat program toe om te skryf aan SMS-boodskappe wat op jou tablet of SIM-kaart gestoor is. Kwaadwillige programme kan jou boodskappe uitvee."</string>
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Laat program toe om SMS-boodskappe te stuur wat op jou foon of SIM-kaart gestoor is. Kwaadwillige programme kan jou boodskappe uitvee."</string>
- <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="8258226427716551388">"ontvang WAP"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Laat program toe om WAP-boodskappe te ontvang en te stuur. Kwaadwillige programme kan jou boodskappe monitor of dit uitvee sonder om dit aan jou te wys."</string>
- <!-- no translation found for permlab_getTasks (5005277531132573353) -->
- <skip />
+ <string name="permlab_getTasks" msgid="5005277531132573353">"herwin lopende programme"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"Laat program toe om inligting op te haal oor huidige en onlangse take. Kan toelaat dat kwaadwillige programme private inligting oor ander programme ontdek."</string>
- <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
- <skip />
+ <string name="permlab_reorderTasks" msgid="5669588525059921549">"herrangskik lopende programme"</string>
<string name="permdesc_reorderTasks" msgid="126252774270522835">"Laat \'n program toe om take na die voorgrond en agtergrond te skuif. Kwaadwillige programme kan hulself na die voorkant bring, sonder jou beheer."</string>
- <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
- <skip />
- <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
- <skip />
- <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
- <skip />
+ <string name="permlab_removeTasks" msgid="4802740047161700683">"stop lopende programme"</string>
+ <string name="permdesc_removeTasks" msgid="2000332928514575461">"Laat \'n program toe om take te verwyder en hul programme te staak. Kwaadwillige programme kan die gedrag van ander programme ontwrig."</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"aktiveer programontfout"</string>
<string name="permdesc_setDebugApp" msgid="5584310661711990702">"Laat \'n program toe om ontfouting vir \'n ander program af te skakel. Kwaadwillige programme kan dit gebruik om ander belangrike programme te stop."</string>
- <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"Verander jou UI-instellings"</string>
<string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Laat \'n program toe om die huidige opstelling, soos die locale of algemene lettergrootte, te verander."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"aktiveer motormodus"</string>
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"Laat \'n program toe om die motormodus te aktiveer."</string>
@@ -325,109 +221,78 @@
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Laat \'n program toe om ander programme se agtergrondprosesse te stop, selfs al is daar nie min geheue nie."</string>
<string name="permlab_forceStopPackages" msgid="1447830113260156236">"dwing ander programme om te stop"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Laat \'n program toe om ander programme te dwing om te stop."</string>
- <!-- no translation found for permlab_forceBack (1804196839880393631) -->
- <skip />
+ <string name="permlab_forceBack" msgid="1804196839880393631">"dwing program om toe te maak"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"Laat \'n program toe om enige aktiwiteit wat in die voorgrond is, te dwing om te sluit en terug te gaan. Behoort vir gewone programme nooit nodig te wees nie."</string>
- <!-- no translation found for permlab_dump (1681799862438954752) -->
- <skip />
+ <string name="permlab_dump" msgid="1681799862438954752">"verkry interne stelselstatus"</string>
<string name="permdesc_dump" msgid="2198776174276275220">"Laat program toe om interne status van die stelsel op te haal. Kwaadwillige programme kan \'n wye verskeidenheid private en beveiligde inligting ophaal wat hulle normaalweg nooit nodig sou hê nie."</string>
- <!-- no translation found for permlab_retrieve_window_content (8022588608994589938) -->
- <skip />
- <!-- no translation found for permdesc_retrieve_window_content (3390962289797156152) -->
- <skip />
+ <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"haal skerminhoud op"</string>
+ <string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"Laat program toe om inhoud van aktiewe venster op te haal. Kwaadwillige programme kan die hele vensterinhoud ophaal en al die teks lees, behalwe wagwoorde."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelike afskakeling"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Plaas die aktiwiteitbestuurder in \'n afsluitingstatus. Doen nie \'n volledige afsluiting nie."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"verhoed program-oorskakelings"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Voorkom dat die gebruiker na \'n ander program oorskakel."</string>
- <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
- <skip />
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"monitor en beheer alle programme wat oopmaak"</string>
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Laat \'n program toe om te monitor en te beheer hoe die stelsel handelinge laat loop. Kwaadwillige programme kan die stelsel heeltemal kompromitteer. Hierdie toestemming is net vir ontwikkeling nodig, nooit vir gewone gebruik nie."</string>
- <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
- <skip />
+ <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"stuur uitsending met pakket verwyder"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n programpakket verwyder is. Kwaadwillige programme kan dit gebruik om enige ander programme wat loop, te stop."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"stuur SMS-ontvangde uitsending"</string>
<string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n SMS-boodskap ontvang is. Kwaadwillige programme kan dit gebruik om inkomende SMS-boodskappe te vervals."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"stuur WAP-PUSH-ontvange uitsending"</string>
<string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Laat \'n program toe om \'n kennisgewing uit te saai dat \'n WAP PUSH-boodskap ontvang is. Kwaadwillige programme kan dit gebruik om ontvangs van MMS-boodskappe te vervals, of om die inhoud van enige webbladsy met kwaadwillige variante te vervang."</string>
- <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
- <skip />
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"beperk hoeveelheid lopende prosesse"</string>
<string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Laat \'n program toe om die maksimum aantal prosesse te beheer wat sal loop. Vir gewone programme nooit nodig nie."</string>
- <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"maak alle agtergrondprogramme toe"</string>
<string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Laat \'n program toe om te beheer of aktiwiteite altyd klaar is so gou as wat hulle na die agtergrond gaan. Vir gewone programme nooit nodig nie."</string>
- <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
- <skip />
+ <string name="permlab_batteryStats" msgid="7863923071360031652">"verander batterystatistiek"</string>
<string name="permdesc_batteryStats" msgid="5847319823772230560">"Laat die wysiging van versamelde batterystatistieke toe. Nie vir gebruik deur normale programme nie."</string>
<string name="permlab_backup" msgid="470013022865453920">"beheerstelsel-rugsteun en -teruglaai"</string>
<string name="permdesc_backup" msgid="4837493065154256525">"Laat die program toe om die stelsel se rugsteun- en teruglaaimeganisme te beheer. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
- <skip />
- <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
- <skip />
- <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
- <skip />
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"bevestig \'n volledige rugsteun- of teruglaaihandeling"</string>
+ <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Laat program toe om volledige rugsteun- bevestiging-UI te laat loop. Moet nie deur enige program gebruik word nie."</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"wys ongemagtigde vensters"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Laat die skep van vensters toe wat bedoel is om deur die interne stelsel se gebruikerkoppelvlak gebruik gemaak te word. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"vertoon kennisgewings op stelselvlak"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Laat \'n program toe om stelselwaarskuwing-vensters te wys. Kwaadwillige programme kan die hele skerm oorneem."</string>
- <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
- <skip />
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"verander globale animasiespoed"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Laat \'n program toe om die globale animasiespoed (vinniger of stadiger animasies) te enige tyd te verander."</string>
- <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
- <skip />
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"bestuur programtokens"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"Laat programme toe om hul eie tokens te skep en te bestuur, wat hul normale Z-volgordes omseil. Behoort vir gewone programme nooit nodig te wees nie."</string>
- <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
- <skip />
+ <string name="permlab_injectEvents" msgid="1378746584023586600">"druk sleutels en beheerknoppies"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Laat \'n program toe om sy eie invoergebeurtenisse (sleuteldrukke ens.) na ander toestelle te lewer. Kwaadwillige programme kan dit gebruik om die tablet oor te neem."</string>
<string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Laat \'n program toe om sy eie invoergebeurtenisse (sleutel indruk, ens) aan ander programme te lewer. Kwaadwillige programme kan dit gebruik om die foon oor te neem."</string>
- <!-- no translation found for permlab_readInputState (469428900041249234) -->
- <skip />
+ <string name="permlab_readInputState" msgid="469428900041249234">"noteer wat jy insleutel en watter aksies jy onderneem"</string>
<string name="permdesc_readInputState" msgid="5132879321450325445">"Laat programme toe om te sien watter sleutels jy druk, selfs wanneer jy met \'n ander program werk (soos wanneer jy \'n wagwoord intik). Behoort vir gewone programme nooit nodig te wees nie."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"bind aan \'n invoermetode"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Laat die houer toe om aan die topvlak-koppelvlak van \'n invoermetode te bind. Behoort vir gewone programme nooit nodig te wees nie."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"bind aan \'n teksdiens"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Laat die houer toe om aan die topvlak-koppelvlak van \'n teksdiens (bv. SpellCheckerService) te bind. Behoort nooit vir gewone programme nodig te wees nie."</string>
<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) -->
- <skip />
- <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
- <skip />
+ <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind aan \'n legstukdiens"</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"Laat die houer toe om aan die topvlak-koppelvlak van \'n legstukdiens te bind. Behoort nooit vir gewone programme nodig te wees nie."</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"skakel met \'n toestel-admin"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Laat die houer toe om bedoelings na \'n toesteladministrateur te stuur. Behoort nooit vir gewone programme nodig te wees nie."</string>
- <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
- <skip />
+ <string name="permlab_setOrientation" msgid="3365947717163866844">"verander skermoriëntasie"</string>
<string name="permdesc_setOrientation" msgid="6335814461615851863">"Laat \'n program toe om die skerm te enige tyd te draai. Behoort vir gewone programme nooit nodig te wees nie."</string>
- <!-- no translation found for permlab_setPointerSpeed (9175371613322562934) -->
- <skip />
- <!-- no translation found for permdesc_setPointerSpeed (137436038503379864) -->
- <skip />
- <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
- <skip />
+ <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"verander wyserspoed"</string>
+ <string name="permdesc_setPointerSpeed" msgid="137436038503379864">"Laat \'n program toe om die spoed van die muis of stuurpaneelwyser te enige tyd te verander. Behoort nooit vir gewone programme nodig te wees nie."</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"stuur Linux-seine na programme"</string>
<string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Laat program toe om te versoek dat die voorsiende materiaal aan alle aanhoudende prosesse gestuur word."</string>
- <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
- <skip />
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"laat program altyd loop"</string>
<string name="permdesc_persistentActivity" msgid="5037199778265006008">"Laat \'n program toe om dele van homself permanent te maak, sodat die stelsel dit nie vir ander programme kan gebruik nie."</string>
- <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
- <skip />
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"vee programme uit"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"Laat \'n program toe om Android-pakkette uit te vee. Kwaadwillige programme kan dit gebruik om belangrike programme uit te vee."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"vee ander programme se data uit"</string>
- <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
- <skip />
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Laat program toe om gebruikerdata skoon te maak."</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"vee ander programme se kasgeheues uit"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Laat \'n program toe om kaslêers uit te vee."</string>
- <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
- <skip />
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"meet programbergingspasie"</string>
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"Laat \'n program toe om sy kode, data, en kasgroottes op te haal"</string>
- <!-- no translation found for permlab_installPackages (335800214119051089) -->
- <skip />
+ <string name="permlab_installPackages" msgid="335800214119051089">"Installeer programme direk"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"Laat \'n program toe om nuwe of opgedateerde Android-pakkette te installeer. Kwaadwillige programme kan dit gebruik om nuwe programme met arbitrêr kragtige regte by te voeg."</string>
- <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
- <skip />
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"Vee alle programkasdata uit"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Laat \'n program toe om tabletberging beskikbaar te stel deur lêers in die programkasgids uit te vee. Toegang tot stelselprosesse is gewoonlik baie beperk."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Laat \'n program toe om foonstoorspasie skoon te maak deur lêers in die programkasgids uit te vee. Toegang tot stelselprosesse is gewoonlik baie beperk."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"Skuif programhulpbronne"</string>
@@ -435,38 +300,29 @@
<string name="permlab_readLogs" msgid="6615778543198967614">"lees sensitiewe logdata"</string>
<string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Laat \'n program toe om die stelsel se verskeie loglêers te lees. Dit maak dit moontlik om algemene inligting te ontdek oor wat jy met die tablet doen en bevat potensieel persoonlike of private inligting."</string>
<string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Laat \'n program toe om van die stelsel se verskillende loglêers te lees. Dit maak dit moontlik om algemene inligting te ontdek oor wat jy met die foon doen, wat potensieel persoonlike of private inligting kan bevat."</string>
- <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
- <skip />
+ <string name="permlab_diagnostic" msgid="8076743953908000342">"lees/skryf na bronne wat diag besit"</string>
<string name="permdesc_diagnostic" msgid="3121238373951637049">"Laat \'n program toe om enige hulpbron te lees en na toe te skryf wat deur die diag-groep besit word; byvoorbeeld lêers in /dev. Dit kan potensieel stelselstabiliteit en -sekuriteit beïnvloed. Dit behoort net gebruik word vir hardewarespesifieke diagnose deur die vervaardiger of operateur."</string>
- <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
- <skip />
+ <string name="permlab_changeComponentState" msgid="79425198834329406">"aktiveer of deaktiveer programkomponente"</string>
<string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Laat \'n program toe om te verander of \'n ander programkomponent geaktiveer is of nie. Kwaadwillige programme kan dit gebruik om belangrike tabletvermoëns te deaktiveer. Wees versigtig met dié toestemming, want dit is moontlik om programkomponente onbruikbaar, inkonsekwent, of onstabiel te maak."</string>
<string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Laat \'n program toe om te verander of \'n ander programkomponent geaktiveer is of nie. Kwaadwillige programme kan dit gebruik om belangrike foonvermoëns te deaktiveer. Wees versigtig met dié toestemming, want dit is moontlik om programkomponente onbruikbaar, inkonsekwent, of onstabiel te maak."</string>
- <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
- <skip />
+ <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"stel voorkeurprogramme"</string>
<string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Laat \'n program toe om jou voorkeurprogramme te verander. Dit kan kwaadwillige programme in staat stel om die programme wat loop, stilletjies te verander, en bestaande programme na te maak, sodat dit private data oor jou insamel."</string>
- <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
- <skip />
+ <string name="permlab_writeSettings" msgid="1365523497395143704">"verander globale stelselinstellings"</string>
<string name="permdesc_writeSettings" msgid="838789419871034696">"Laat \'n program toe om die stelsel se instellingdata te wysig. Kwaadwillige programme kan jou stelsel se opstelling beskadig."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"wysig beveiligde stelselinstellings"</string>
<string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Laat \'n program toe om die stelsel se beveiligde instellingdata te wysig. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
- <skip />
+ <string name="permlab_writeGservices" msgid="2149426664226152185">"verander die Google-dienstekaart"</string>
<string name="permdesc_writeGservices" msgid="6602362746516676175">"Laat \'n program toe om Google se dienstekaart te verander. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
- <skip />
+ <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"begin outomaties sodra aansit"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Laat \'n program toe om self te begin sodra die stelsel klaar geselflaai het. Dit kan maak dat dit langer vir die tablet neem om te begin en die program toelaat om die algehele tablet stadiger te maak deurdat dit altyd loop."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Laat \'n program toe om homself te laat begin sodra die stelsel klaar geselflaai het. Dit kan maak dat dit langer vir die foon neem om te begin, en die program kan die foon stadiger maak omdat dit altyd aan die gang is."</string>
- <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
- <skip />
+ <string name="permlab_broadcastSticky" msgid="7919126372606881614">"Stuur klewerige uitsending"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Laat \'n program toe om klewerige uitsendings te stuur, wat bly voortbestaan nadat die uitsending klaar is. Kwaadwillige programme kan die tablet stadig of onstabiel maak deur te veroorsaak dat dit te veel geheue gebruik."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Laat \'n program toe om taai uitsendings te stuur, wat bly voortbestaan nadat die uitsending klaar is. Kwaadwillige programme kan die foon stadig of onstabiel maak deur te veel geheue te gebruik."</string>
- <!-- no translation found for permlab_readContacts (6219652189510218240) -->
- <skip />
+ <string name="permlab_readContacts" msgid="6219652189510218240">"lees kontakdata"</string>
<string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Laat \'n program toe om al die kontak- (adres) data te lees wat op jou tablet gestoor is. Kwaadwillige programme kan dit gebruik om jou data na ander mense te stuur."</string>
<string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Laat \'n program toe om al die kontakdata (adresse) te lees wat op jou foon gestoor is. Kwaadwillige programme kan dit gebruik om jou data na ander mense te stuur."</string>
- <!-- no translation found for permlab_writeContacts (644616215860933284) -->
- <skip />
+ <string name="permlab_writeContacts" msgid="644616215860933284">"skryf kontakdata"</string>
<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>
<string name="permlab_readProfile" msgid="6824681438529842282">"lees jou profieldata"</string>
@@ -478,46 +334,37 @@
<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="permlab_accessMockLocation" msgid="8688334974036823330">"kamma liggingbronne vir toetsing"</string>
<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>
- <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
- <skip />
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"Kry toegang tot ekstra liggingverskaffer-bevele"</string>
<string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Verkry toegang tot ekstra liggingverskaffer-bevele. Kwaadwillige programme kan dit gebruik om met die werking van GPS of ander liggingbronne in te meng."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"toestemming om \'n liggingverskaffer te installeer"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Skep skynligging-bronne vir toetsing. Kwaadwillige programme kan dit gebruik om die plek en/of status te oorheers wat opgegee word deur regteligging-hulpbronne soos GPS of netwerkverskaffers, of om jou ligging te kontroleer en dit dan by \'n eksterne bron aan te gee."</string>
- <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
- <skip />
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"goeie (GPS) ligging"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Verkry toegang tot fyn liggingsbronne soos die Global Positioning System op die tablet, waar beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal waar jy is, en dit kan bykomende batterykrag gebruik."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Verkry toegang tot liggingbronne soos die wêreldwye posisioneerstelsel op die foon, waar beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal waar jy is, en dit kan bykomende batterykrag gebruik."</string>
- <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
- <skip />
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"rowwe (netwerk-gebaseerde) ligging"</string>
<string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Gebruik growwe liggingsbronne soos die sellulêre netwerk se databasis om \'n geskatte tabletligging te bepaal, indien beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal min of meer waar jy is."</string>
<string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Gebruik growwe liggingbronne soos die sellulêre netwerk se databasis om \'n geskatte foonligging te bepaal, indien beskikbaar. Kwaadwillige programme kan dit gebruik om te bepaal min of meer waar jy is."</string>
- <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
- <skip />
+ <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"kry toegang tot SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Laat program toe om SurfaceFlinger-laevlakkenmerke te gebruik."</string>
- <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
- <skip />
+ <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lees raambuffer"</string>
<string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Laat program toe om die inhoud van die raambuffer te lees."</string>
- <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
- <skip />
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"verander jou klankinstellings"</string>
<string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Laat program toe om globale klankinstellings te wysig, soos volume en roetering."</string>
- <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
- <skip />
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"neem klank op"</string>
<string name="permdesc_recordAudio" msgid="6493228261176552356">"Laat program toe om die klankopneem-pad te verkry."</string>
<string name="permlab_camera" msgid="3616391919559751192">"neem foto\'s en video\'s"</string>
<string name="permdesc_camera" msgid="6004878235852154239">"Laat program toe om foto\'s en video\'s met die kamera te neem. Dit laat die program toe om te enige tyd foto\'s te neem van wat die kamera sien."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"deaktiveer tablet permanent"</string>
- <!-- outdated translation 2961292205764488304 --> <string name="permlab_brick" product="default" msgid="8337817093326370537">"deaktiveer tablet permanent"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"deaktiveer foon permanent"</string>
<string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Laat die program toe om die hele tablet permanent te deaktiveer. Dit is baie gevaarlik."</string>
<string name="permdesc_brick" product="default" msgid="5569526552607599221">"Laat die program toe om die hele foon permanent te deaktiveer. Dit is baie gevaarlik."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"dwing tablet om te herselflaai"</string>
- <!-- outdated translation 3436634972561795002 --> <string name="permlab_reboot" product="default" msgid="2898560872462638242">"dwing tablet om te herselflaai"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"forseer foonherlaai"</string>
<string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Laat die program toe om die tablet te dwing om te herselflaai."</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Laat die program toe om die foon te dwing om te herselflaai."</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"Heg en ontheg lêerstelsels"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Laat die program toe om lêerstelsels te heg of te ontheg vir verwyderbare berging."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"formateer eksterne berging"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Laat die program toe om die verwyderbare geheue te formateer."</string>
@@ -531,75 +378,59 @@
<string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Laat die program toe om interne berging te heg/ontheg."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"herbenoem interne berging"</string>
<string name="permdesc_asec_rename" msgid="2152829985238876790">"Laat die program toe om interne berging te hernoem."</string>
- <!-- no translation found for permlab_vibrate (7768356019980849603) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7768356019980849603">"beheer vibreerfunksie"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Laat die program toe om die vibrator te beheer."</string>
- <!-- no translation found for permlab_flashlight (2155920810121984215) -->
- <skip />
+ <string name="permlab_flashlight" msgid="2155920810121984215">"beheer flitslig"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"Laat die program toe om die flitslig te beheer."</string>
- <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
- <skip />
- <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
- <skip />
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"bestuur voorkeure en toestemmings vir USB-toestelle"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"Laat \'n program toe om voorkeure en toestemmings vir USB-toestelle te bestuur."</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"implementeer MTP-protokol"</string>
<string name="permdesc_accessMtp" msgid="6532961200486791570">"Laat toegang tot die kern-MTP-drywer toe om die MTP-USB-protokol te implementeer."</string>
- <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
- <skip />
+ <string name="permlab_hardware_test" msgid="4148290860400659146">"toets hardeware"</string>
<string name="permdesc_hardware_test" msgid="3668894686500081699">"Laat die program toe om verskeie randapparatuur te beheer, eksklusief vir hardewaretoetse."</string>
- <!-- no translation found for permlab_callPhone (3925836347681847954) -->
- <skip />
+ <string name="permlab_callPhone" msgid="3925836347681847954">"skakel foonnommers direk"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"Laat die program toe om enige foonnommers te bel sonder jou inmenging. Kwaadwillige programme kan onverwagse oproepe op jou foonrekening veroorsaak. Let daarop dat dit nie toelaat dat die program noodnommers bel nie."</string>
- <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
- <skip />
+ <string name="permlab_callPrivileged" msgid="4198349211108497879">"skakel enige foonnommers direk"</string>
<string name="permdesc_callPrivileged" msgid="244405067160028452">"Laat die program toe om enige foonnommer te bel, insluitend noodnommers, sonder jou inmenging. Kwaadwillige programme kan onnodige en onwettige oproepe na nooddienste maak."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"begin direk met CDMA-tabletopstelling"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"begin dadelik met CDMA-foonopstelling"</string>
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Laat die program toe om CDMA-voorsiening te begin. Kwaadwillige programme kan CDMA-voorsiening onnodig laat begin"</string>
- <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
- <skip />
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"bestuur kennisgewings vir liggingopdatering"</string>
<string name="permdesc_locationUpdates" msgid="2300018303720930256">"Laat toe dat ligging-opdateerkennisgewings van die radio af geaktiveer/gedeaktiveer word. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
- <skip />
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"kry toegang tot insleutel-eienskappe"</string>
<string name="permdesc_checkinProperties" msgid="7150307006141883832">"Laat lees/skryf-toegang tot eienskappe wat deur die checkin-diens opgelaai is. Nie vir gebruik deur normale programme nie."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"kies legstukke"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"Laat die program toe om die stelsel in te lig oor watter legstukke deur die program gebruik kan word. Met hierdie toestemming kan programme toegang tot persoonlike inligting aan ander programme verleen. Nie vir gebruik deur normale programme nie."</string>
- <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
- <skip />
+ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"verander foonstatus"</string>
<string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Laat die program toe om die foonkenmerke van die toestel te beheer. \'n Program met hierdie toestemming kan van netwerk verwissel, die foonradio aan en af skakel, en dies meer, sonder om jou ooit in kennis te stel."</string>
<string name="permlab_readPhoneState" msgid="2326172951448691631">"lees foon se staat en identiteit"</string>
<string name="permdesc_readPhoneState" msgid="188877305147626781">"Laat die program toe om die foonkenmerke van die toestel te gebruik. \'n Program met hierdie toestemming kan die foonnommer en reeksnommer van hierdie foon bepaal, asook of \'n oproep aktief is, aan watter nommer die oproep gekoppel is, en so aan."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"verhoed dat tablet slaap"</string>
- <!-- outdated translation 1531731435011495015 --> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"verhoed dat tablet slaap"</string>
+ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"verhoed foon om te slaap"</string>
<string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Laat \'n program toe om te voorkom dat die tablet aan die slaap raak."</string>
<string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Laat \'n program toe om te voorkom dat die foon slaap."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"skakel tablet aan of af"</string>
- <!-- outdated translation 2787034722616350417 --> <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"skakel tablet aan of af"</string>
+ <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"Sit foon aan of af"</string>
<string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Laat die program toe om die tablet aan of af te skakel."</string>
<string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Laat die program toe om die foon aan of af te skakel."</string>
- <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
- <skip />
+ <string name="permlab_factoryTest" msgid="3715225492696416187">"laat loop in fabriekstoetsmodus"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Laat loop as \'n laevlak-vervaardigertoets, sodat volle toegang tot die tablethardeware verkry word. Net beskikbaar wanneer \'n tablet in vervaardigertoetsmodus loop."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Laat loop as \'n laevlak-vervaardigertoets, sodat volle toegang tot die foonhardeware verkry word. Net beskikbaar wanneer \'n foon in vervaardigertoets-modus loop."</string>
- <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
- <skip />
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"stel muurpapier"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"Laat die program toe om die stelsel se muurpapier te stel."</string>
- <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"stel wenke vir muurpapiergrootte"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Laat die program toe om die stelsel se muurpapier-grootte-wenke te stel."</string>
- <!-- no translation found for permlab_masterClear (2315750423139697397) -->
- <skip />
+ <string name="permlab_masterClear" msgid="2315750423139697397">"stel stelsel terug na fabrieksverstek"</string>
<string name="permdesc_masterClear" msgid="5033465107545174514">"Laat \'n program toe om die stelsel heeltemal terug te laai na die oorspronklike instellings, en alle data, opstellings en geïnstalleerde programme uit te vee."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"stel tyd"</string>
<string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"Laat \'n program toe om die tablet se horlosietyd te verander."</string>
<string name="permdesc_setTime" product="default" msgid="667294309287080045">"Laat \'n program toe om die foon se horlosietyd te verander."</string>
- <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
- <skip />
+ <string name="permlab_setTimeZone" msgid="2945079801013077340">"stel tydsone"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Laat \'n program toe om die tablet se tydsone te verander."</string>
<string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Laat \'n program toe om die foon se tydsone te verander."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"tree op as die AccountManagerService"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"Laat \'n program toe om oproepe na AccountAuthenticators te maak"</string>
- <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
- <skip />
+ <string name="permlab_getAccounts" msgid="4549918644233460103">"ontdek bekende rekeninge"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Laat \'n program toe om die lys van rekeninge wat aan die tablet bekend is, te kry."</string>
<string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Laat \'n program toe om die lys rekeninge te kry wat aan die foon bekend is."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"dien as rekeningstawer"</string>
@@ -608,57 +439,43 @@
<string name="permdesc_manageAccounts" msgid="8804114016661104517">"Laat \'n program toe om dinge te doen soos om rekeninge by te voeg of te verwyder, of wagwoorde uit te vee."</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"gebruik die stawingeiebewyse van \'n rekening"</string>
<string name="permdesc_useCredentials" msgid="7416570544619546974">"Laat \'n program toe om stawingstokens te versoek."</string>
- <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"bekyk netwerkstatus"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Laat \'n program toe om die status van alle netwerke te sien."</string>
- <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
- <skip />
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Volledige internettoegang"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Laat \'n program toe om netwerksokke te skep."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"verander/onderskep netwerkinstellings en die verkeer"</string>
<string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Laat \'n program toe om netwerkinstellings te verander en om die hele netwerkverkeer te onderskep en te inspekteer, bv. om die instaanbediener en poort van enige APN te verander. Skadelike programme kan netwerkpakkies monitor, herlei of verander sonder jou medewete."</string>
- <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
- <skip />
+ <string name="permlab_changeNetworkState" msgid="958884291454327309">"verander netwerkverbinding"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Laat \'n program toe om die status van netwerk-konnektiwiteit te verander."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Verander verbinde konnektiwiteit"</string>
<string name="permdesc_changeTetherState" msgid="8905815579146349568">"Laat \'n program toe om die status van verbinde netwerk-konnektiwiteit te verander."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"verander agtergronddata-gebruik-instelling"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Laat \'n program toe om die instelling oor agtergronddatagebruik te verander."</string>
- <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="8100926650211034400">"bekyk Wi-Fi-status"</string>
<string name="permdesc_accessWifiState" msgid="485796529139236346">"Laat \'n program toe om die inligting oor die status van Wi-Fi te sien."</string>
- <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
- <skip />
+ <string name="permlab_changeWifiState" msgid="7280632711057112137">"verander Wi-Fi-status"</string>
<string name="permdesc_changeWifiState" msgid="2950383153656873267">"Laat \'n program toe om aan Wi-Fi-toegangspunte te koppel of van te ontkoppel, en om wysigings aan opgestelde Wi-Fi-netwerke aan te bring."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"laat Wi-Fi-multisendontvangs toe"</string>
<string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Laat \'n program toe om pakkies te ontvang wat nie direk aan jou toestel gestuur is nie. Dit kan handig wees wanneer jy dienste wat naby is, wil opspoor. Dit gebruik meer krag as die niemultisaai-modus."</string>
- <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"bluetooth-administrasie"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Laat \'n program toe om die plaaslike Bluetooth-tablet op te stel en om afgeleë toestelle te ontdek en daarmee saam te bind."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Laat \'n program toe om die plaaslike Bluetooth-foon op te stel, en om afgeleë toestelle te ontdek en daarmee saam te bind."</string>
- <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"skep Bluetooth-verbindings"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Laat \'n program toe om die plaaslike Bluetooth-tablet se opstelling te sien en om verbindings met saamgebinde toestelle te maak en te aanvaar."</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Laat \'n program toe om die plaaslike Bluetooth-foon se opstelling te sien, en om verbindings met saamgebinde toestelle te bewerkstellig en te aanvaar."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"beheer kortveldkommunikasie"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"Laat \'n program toe om te kommunikeer met kortveldkommunikasie- (NFC) merkers, kaarte en lesers."</string>
- <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"deaktiveer sleutelslot"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Laat \'n program toe om die sleutelslot te deaktiveer asook enige gepaardgaande wagwoordsekuriteit. \'n Legitieme voorbeeld hiervan is wanneer die foon die sleutelslot deaktiveer wanneer \'n inkomende oproep ontvang word, dan dit weer te aktiveer wanneer die oproep verby is."</string>
- <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
- <skip />
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"lees sinkroniseer-instellings"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Laat \'n program toe om die sinkroniseerinstellings te lees, soos of sinkronisering vir kontakte geaktiveer is."</string>
- <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"skryf sinkronisasie-instellings"</string>
<string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Laat \'n program toe om die sinkroniseerinstellings te wysig, soos of sinkronisering vir kontakte geaktiveer is."</string>
- <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
- <skip />
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"lees sinkroniseerstatistiek"</string>
<string name="permdesc_readSyncStats" msgid="7511448343374465000">"Laat \'n program toe om die sinkroniseringstatistieke te lees, bv. die geskiedenis van sinkroniserings wat plaasgevind het."</string>
- <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
- <skip />
- <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
- <skip />
- <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
- <skip />
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lees ingetekende nuus"</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"Laat program toe om inligting oor onlangs gesinkroniseerde nuus te verkry."</string>
+ <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"skryf ingetekende strome"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Laat \'n program toe om jou huidig gesinkroniseerde strome te wysig. Dit kan daartoe lei dat \'n kwaadwillige program jou gesinkroniseerde strome wysig."</string>
<string name="permlab_readDictionary" msgid="432535716804748781">"lees gebruikergedefinieerde woordeboek"</string>
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Laat \'n program toe om enige private woorde, name en frases wat die gebruiker in die gebruikerwoordeboek gestoor het, te lees."</string>
@@ -674,18 +491,12 @@
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Laat \'n program toe om die kaslêerstelsel te lees en te skryf."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"maak/ontvang internetoproepe"</string>
<string name="permdesc_use_sip" msgid="6320376185606661843">"Laat \'n program toe om die SIP-diens te gebruik om internetoproepe te maak/te ontvang."</string>
- <!-- no translation found for permlab_readNetworkUsageHistory (7862593283611493232) -->
- <skip />
- <!-- no translation found for permdesc_readNetworkUsageHistory (6040738474779135653) -->
- <skip />
- <!-- no translation found for permlab_manageNetworkPolicy (2562053592339859990) -->
- <skip />
- <!-- no translation found for permdesc_manageNetworkPolicy (3723795285132803958) -->
- <skip />
- <!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
- <skip />
- <!-- no translation found for permdesc_modifyNetworkAccounting (8702285686629184404) -->
- <skip />
+ <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"lees netwerkgebruik-geskiedenis"</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"Laat \'n program toe om netwerkgebruik-geskiedenis te lees vir spesifieke netwerke en programme."</string>
+ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"bestuur netwerkbeleid"</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"Laat \'n program toe om netwerkbeleide te bestuur en reëls spesifiek vir programme te spesifiseer."</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"verander verrekening van netwerkgebruik"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"Laat verandering toe van hoe netwerkgebruik teen programme verreken word. Nie vir gebruik deur gewone programme nie."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"Stel wagwoordreëls"</string>
<string name="policydesc_limitPassword" msgid="9083400080861728056">"Beheer die lengte van en watter karakters in skermontsluit-wagwoorde gebruik kan word"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Monitor pogings om skerm te ontsluit"</string>
@@ -700,14 +511,12 @@
<string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Vee die foon se data sonder waarskuwing uit deur \'n fabrieksterugstelling uit te voer"</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Stel die toestel se globale instaan"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Stel die toestel se globale instaan wat gebruik moet word terwyl die beleid geaktiveer is. Net die eerste toesteladministrateur stel die effektiewe globale instaan op."</string>
- <!-- outdated translation 2314569545488269564 --> <string name="policylab_expirePassword" msgid="885279151847254056">"Stel wagwoord se vervaldatum"</string>
- <!-- outdated translation 7276906351852798814 --> <string name="policydesc_expirePassword" msgid="4844430354224822074">"Beheer hoe lank voordat wagwoord vir skermsluit verander moet word"</string>
+ <string name="policylab_expirePassword" msgid="885279151847254056">"Stel skermslotwagwoord se vervaldatum"</string>
+ <string name="policydesc_expirePassword" msgid="4844430354224822074">"Beheer hoe gereeld die skermslotwagwoord verander moet word"</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Stel bergingsenkripsie"</string>
<string name="policydesc_encryptedStorage" msgid="2504984732631479399">"Vereis dat gestoorde programdata geënkripteer word"</string>
- <!-- no translation found for policylab_disableCamera (6395301023152297826) -->
- <skip />
- <!-- no translation found for policydesc_disableCamera (5680054212889413366) -->
- <skip />
+ <string name="policylab_disableCamera" msgid="6395301023152297826">"Deaktiveer kameras"</string>
+ <string name="policydesc_disableCamera" msgid="5680054212889413366">"Voorkom gebruik van alle toestelkamera\'s"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Tuis"</item>
<item msgid="869923650527136615">"Mobiel"</item>
@@ -822,61 +631,41 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Werk"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Ander"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Voer PIN-kode in"</string>
- <!-- no translation found for keyguard_password_enter_puk_code (5965173481572346878) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_pin_prompt (2987350144349051286) -->
- <skip />
- <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
- <skip />
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"Voer PUK en nuwe PIN-kode in"</string>
+ <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"Nuwe PIN-kode"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Raak om wagwoord in te voer"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Voer wagwoord in om te ontsluit"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Voer PIN in om te ontsluit"</string>
- <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
- <skip />
- <!-- no translation found for keyguard_label_text (861796461028298424) -->
- <skip />
- <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
- <skip />
+ <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Verkeerde PIN-kode!"</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"Om te ontsluit, druk Kieslys dan 0."</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Noodnommer"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Geen diens nie."</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Skerm gesluit."</string>
- <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
- <skip />
- <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
- <skip />
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Druk kieslys om oop te sluit of maak noodoproep."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Druk kieslys om oop te maak."</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Teken patroon om te ontsluit"</string>
- <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
- <skip />
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Noodoproep"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Keer terug na oproep"</string>
- <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
- <skip />
+ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Reg!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Jammer, probeer weer"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"Jammer, probeer weer"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Laai, (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Gehef."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
- <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
- <skip />
+ <string name="lockscreen_low_battery" msgid="1482873981919249740">"Koppel jou herlaaier."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Geen SIM-kaart."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Geen SIM-kaart in tablet nie."</string>
- <!-- outdated translation 151659196095791474 --> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in tablet nie."</string>
- <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_instructions_long (7138450788301444298) -->
- <skip />
- <!-- no translation found for lockscreen_permanent_disabled_sim_instructions (1631853574702335453) -->
- <skip />
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in foon nie."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sit asseblief \'n SIM-kaart in."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Die SIM-kaart is weg of onleesbaar. Steek asseblief \'n SIM-kaart in."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Jou SIM-kaart is permanent gedeaktiveer."\n" Kontak asseblief jou draadlosediens-verskaffer om \'n ander SIM-kaart te kry."</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Net noodoproepe"</string>
- <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
- <skip />
- <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
- <skip />
+ <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netwerk gesluit"</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart is PUK-geslote."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Sien asseblief die gebruikergids of kontak kliëntesorg."</string>
- <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
- <skip />
- <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
- <skip />
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-kaart is gesluit."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Ontsluit tans SIM-kaart…"</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd geteken. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"Jy het jou wagwoord <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingevoer. "\n\n"Probeer asseblief weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingevoer. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
@@ -886,24 +675,16 @@
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer probeer om die foon verkeerde te ontsluit. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle poging sal die foon terug gestel word na die fabrieksverstek en alle gebruikerdata sal verlore wees."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Jy het die tablet <xliff:g id="NUMBER">%d</xliff:g> keer verkeerd probeer ontsluit. Die tablet sal nou terug gestel word na die fabrieksverstek."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Jy <xliff:g id="NUMBER">%d</xliff:g> keer probeer om die foon verkeerd te ontsluit. Die foon sal nou terug gestel word na die fabrieksvertek."</string>
- <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
- <skip />
- <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
- <skip />
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Probeer weer oor <xliff:g id="NUMBER">%d</xliff:g> sekondes."</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Patroon vergeet?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ontsluit rekening"</string>
- <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
- <skip />
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Te veel patroonprobeerslae!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Om te ontsluit, meld aan met jou Google-rekening"</string>
- <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
- <skip />
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Gebruikernaam (e-pos)"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Wagwoord"</string>
+ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Meld aan"</string>
+ <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Ongeldige gebruikernaam of wagwoord."</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Jou gebruikernaam of wagwoord vergeet?"\n"Besoek "<b>"google. com/accounts/recovery"</b></string>
<string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Kontroleer tans..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Ontsluit"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Klank aan"</string>
@@ -913,17 +694,14 @@
<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>
- <!-- no translation found for factorytest_failed (5410270329114212041) -->
- <skip />
+ <string name="factorytest_failed" msgid="5410270329114212041">"Fabriektoets het gefaal"</string>
<string name="factorytest_not_system" msgid="4435201656767276723">"Die FACTORY_TEST-handeling word net ondersteun vir pakkette wat in /system/app geïnstalleer is."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Geen pakket is gevind wat die FACTORY_TEST-handeling bied nie."</string>
- <!-- no translation found for factorytest_reboot (6320168203050791643) -->
- <skip />
+ <string name="factorytest_reboot" msgid="6320168203050791643">"Herlaai"</string>
<string name="js_dialog_title" msgid="8143918455087008109">"Die bladsy by \'<xliff:g id="TITLE">%s</xliff:g> sê:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">"Navigeer weg van hierdie bladsy?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Kies OK om voort te gaan, of Kanselleer om op die huidige bladsy te bly."</string>
- <!-- no translation found for save_password_label (6860261758665825069) -->
- <skip />
+ <string name="save_password_label" msgid="6860261758665825069">"Bevestig"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"Wenk: dubbeltik om in en uit te zoem."</string>
<string name="autofill_this_form" msgid="1272247532604569872">"Outo-invul"</string>
<string name="setup_autofill" msgid="8154593408885654044">"Stel outo-invul op"</string>
@@ -931,30 +709,18 @@
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <!-- no translation found for autofill_province (2231806553863422300) -->
- <skip />
- <!-- no translation found for autofill_postal_code (4696430407689377108) -->
- <skip />
- <!-- no translation found for autofill_state (6988894195520044613) -->
- <skip />
- <!-- no translation found for autofill_zip_code (8697544592627322946) -->
- <skip />
- <!-- no translation found for autofill_county (237073771020362891) -->
- <skip />
- <!-- no translation found for autofill_island (4020100875984667025) -->
- <skip />
- <!-- no translation found for autofill_district (8400735073392267672) -->
- <skip />
- <!-- no translation found for autofill_department (5343279462564453309) -->
- <skip />
- <!-- no translation found for autofill_prefecture (2028499485065800419) -->
- <skip />
- <!-- no translation found for autofill_parish (8202206105468820057) -->
- <skip />
- <!-- no translation found for autofill_area (3547409050889952423) -->
- <skip />
- <!-- no translation found for autofill_emirate (2893880978835698818) -->
- <skip />
+ <string name="autofill_province" msgid="2231806553863422300">"Provinsie"</string>
+ <string name="autofill_postal_code" msgid="4696430407689377108">"Poskode"</string>
+ <string name="autofill_state" msgid="6988894195520044613">"Deelstaat"</string>
+ <string name="autofill_zip_code" msgid="8697544592627322946">"Poskode"</string>
+ <string name="autofill_county" msgid="237073771020362891">"Land"</string>
+ <string name="autofill_island" msgid="4020100875984667025">"Eiland"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"Distrik"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"Departement"</string>
+ <string name="autofill_prefecture" msgid="2028499485065800419">"Prefektuur"</string>
+ <string name="autofill_parish" msgid="8202206105468820057">"Gemeente"</string>
+ <string name="autofill_area" msgid="3547409050889952423">"Area"</string>
+ <string name="autofill_emirate" msgid="2893880978835698818">"Emiraat"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"lees blaaier se geskiedenis en boekmerke"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Laat die program toe om al die URL\'e te lees wat die blaaier besoek het, asook al die blaaier se boekmerke."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"skryf blaaier se geskiedenis en boekmerke"</string>
@@ -970,37 +736,24 @@
<string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Laat die program toe om te verifieer of \'n pakkie installeerbaar is."</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bind aan \'n pakkieverifieerder"</string>
<string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Laat die houer toe om versoeke te rig aan pakkieverifieerders. Behoort nooit nodig te wees vir normale programme nie."</string>
- <!-- no translation found for save_password_message (767344687139195790) -->
- <skip />
- <!-- no translation found for save_password_notnow (6389675316706699758) -->
- <skip />
- <!-- no translation found for save_password_remember (6491879678996749466) -->
- <skip />
- <!-- no translation found for save_password_never (8274330296785855105) -->
- <skip />
- <!-- no translation found for open_permission_deny (5661861460947222274) -->
- <skip />
- <!-- no translation found for text_copied (4985729524670131385) -->
- <skip />
- <!-- no translation found for more_item_label (4650918923083320495) -->
- <skip />
- <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
- <skip />
- <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
- <skip />
- <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
- <skip />
- <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
- <skip />
- <!-- no translation found for search_go (8298016669822141719) -->
- <skip />
+ <string name="save_password_message" msgid="767344687139195790">"Wil jy hê die blaaier moet hierdie wagwoord onthou?"</string>
+ <string name="save_password_notnow" msgid="6389675316706699758">"Nie nou nie"</string>
+ <string name="save_password_remember" msgid="6491879678996749466">"Onthou"</string>
+ <string name="save_password_never" msgid="8274330296785855105">"Nooit"</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"Jy het nie toestemming om hierdie bladsy oop te maak nie."</string>
+ <string name="text_copied" msgid="4985729524670131385">"Teks na knipbord gekopieër."</string>
+ <string name="more_item_label" msgid="4650918923083320495">"Meer"</string>
+ <string name="prepend_shortcut_label" msgid="2572214461676015642">"Kieslys+"</string>
+ <string name="menu_space_shortcut_label" msgid="2410328639272162537">"spasie"</string>
+ <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
+ <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"vee uit"</string>
+ <string name="search_go" msgid="8298016669822141719">"Soek"</string>
<string name="searchview_description_search" msgid="6749826639098512120">"Soek"</string>
<string name="searchview_description_query" msgid="5911778593125355124">"Soeknavraag"</string>
<string name="searchview_description_clear" msgid="1330281990951833033">"Maak navraag skoon"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Dien navraag in"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Stemsoektog"</string>
- <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
- <skip />
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 maand gelede"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"1 sekonde gelede"</item>
@@ -1074,37 +827,22 @@
<string name="preposition_for_date" msgid="9093949757757445117">"op <xliff:g id="DATE">%s</xliff:g>"</string>
<string name="preposition_for_time" msgid="5506831244263083793">"by <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="preposition_for_year" msgid="5040395640711867177">"in <xliff:g id="YEAR">%s</xliff:g>"</string>
- <!-- no translation found for day (8144195776058119424) -->
- <skip />
- <!-- no translation found for days (4774547661021344602) -->
- <skip />
- <!-- no translation found for hour (2126771916426189481) -->
- <skip />
- <!-- no translation found for hours (894424005266852993) -->
- <skip />
- <!-- no translation found for minute (9148878657703769868) -->
- <skip />
- <!-- no translation found for minutes (5646001005827034509) -->
- <skip />
- <!-- no translation found for second (3184235808021478) -->
- <skip />
- <!-- no translation found for seconds (3161515347216589235) -->
- <skip />
- <!-- no translation found for week (5617961537173061583) -->
- <skip />
- <!-- no translation found for weeks (6509623834583944518) -->
- <skip />
- <!-- no translation found for year (4001118221013892076) -->
- <skip />
- <!-- no translation found for years (6881577717993213522) -->
- <skip />
- <!-- no translation found for VideoView_error_title (3359437293118172396) -->
- <skip />
+ <string name="day" msgid="8144195776058119424">"dag"</string>
+ <string name="days" msgid="4774547661021344602">"dae"</string>
+ <string name="hour" msgid="2126771916426189481">"uur"</string>
+ <string name="hours" msgid="894424005266852993">"uur"</string>
+ <string name="minute" msgid="9148878657703769868">"min."</string>
+ <string name="minutes" msgid="5646001005827034509">"minute"</string>
+ <string name="second" msgid="3184235808021478">"sek."</string>
+ <string name="seconds" msgid="3161515347216589235">"sekondes"</string>
+ <string name="week" msgid="5617961537173061583">"week"</string>
+ <string name="weeks" msgid="6509623834583944518">"weke"</string>
+ <string name="year" msgid="4001118221013892076">"jaar"</string>
+ <string name="years" msgid="6881577717993213522">"jaar"</string>
+ <string name="VideoView_error_title" msgid="3359437293118172396">"Kan nie video speel nie"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Jammer, hierdie video is nie geldig vir stroming na hierdie toestel nie."</string>
- <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
- <skip />
- <!-- no translation found for VideoView_error_button (2822238215100679592) -->
- <skip />
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"Jammer, hierdie video kan nie gespeel word nie."</string>
+ <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</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">"twaalfuur in die middag"</string>
<string name="Noon" msgid="3342127745230013127">"Twaalfuur in die middag"</string>
@@ -1112,53 +850,36 @@
<string name="Midnight" msgid="5630806906897892201">"Middernag"</string>
<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>
- <!-- no translation found for selectAll (6876518925844129331) -->
- <skip />
- <!-- no translation found for cut (3092569408438626261) -->
- <skip />
- <!-- no translation found for copy (2681946229533511987) -->
- <skip />
- <!-- no translation found for paste (5629880836805036433) -->
- <skip />
+ <string name="selectAll" msgid="6876518925844129331">"Kies alle"</string>
+ <string name="cut" msgid="3092569408438626261">"Sny"</string>
+ <string name="copy" msgid="2681946229533511987">"Kopieer"</string>
+ <string name="paste" msgid="5629880836805036433">"Plak"</string>
<string name="replace" msgid="5781686059063148930">"Vervang???"</string>
<string name="delete" msgid="6098684844021697789">"Vee uit"</string>
- <!-- no translation found for copyUrl (2538211579596067402) -->
- <skip />
+ <string name="copyUrl" msgid="2538211579596067402">"Kopieer URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Kies teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekskeuse"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+voeg by woordeboek"</string>
+ <string name="addToDictionary" msgid="9090375111134433012">"voeg by woordeboek"</string>
+ <string name="deleteText" msgid="7070985395199629156">"vee uit"</string>
<string name="inputMethod" msgid="1653630062304567879">"Invoermetode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksaksies"</string>
- <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
- <skip />
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Min spasie oor"</string>
<string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Tabletbergingspasie raak nou min."</string>
- <!-- outdated translation 4231085657068852042 --> <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Tabletbergingspasie raak nou min."</string>
- <!-- no translation found for ok (5970060430562524910) -->
- <skip />
- <!-- no translation found for cancel (6442560571259935130) -->
- <skip />
- <!-- no translation found for yes (5362982303337969312) -->
- <skip />
- <!-- no translation found for no (5141531044935541497) -->
- <skip />
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Foon bergingspasie raak laag."</string>
+ <string name="ok" msgid="5970060430562524910">"OK"</string>
+ <string name="cancel" msgid="6442560571259935130">"Kanselleer"</string>
+ <string name="yes" msgid="5362982303337969312">"OK"</string>
+ <string name="no" msgid="5141531044935541497">"Kanselleer"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Aandag"</string>
<string name="loading" msgid="1760724998928255250">"Laai tans..."</string>
- <!-- no translation found for capital_on (1544682755514494298) -->
- <skip />
- <!-- no translation found for capital_off (6815870386972805832) -->
- <skip />
- <!-- no translation found for whichApplication (4533185947064773386) -->
- <skip />
- <!-- no translation found for alwaysUse (4583018368000610438) -->
- <skip />
- <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
- <skip />
- <!-- no translation found for chooseActivity (1009246475582238425) -->
- <skip />
- <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
- <skip />
- <!-- no translation found for noApplications (1691104391758345586) -->
- <skip />
+ <string name="capital_on" msgid="1544682755514494298">"AAN"</string>
+ <string name="capital_off" msgid="6815870386972805832">"AF"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"Voltooi handeling met"</string>
+ <string name="alwaysUse" msgid="4583018368000610438">"Gebruik hierdie aksie by verstek."</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Maak verstek skoon in Tuisinstellings &gt; Programme &gt; Bestuur programme."</string>
+ <string name="chooseActivity" msgid="1009246475582238425">"Kies \'n handeling"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"Kies \'n program vir die USB-toestel"</string>
+ <string name="noApplications" msgid="1691104391758345586">"Geen programme kan hierdie aksie uitvoer nie."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"Ongelukkig het <xliff:g id="APPLICATION">%1$s</xliff:g> gestop."</string>
<string name="aerr_process" msgid="4507058997035697579">"Ongelukkig het die proses <xliff:g id="PROCESS">%1$s</xliff:g> gestop."</string>
@@ -1169,17 +890,13 @@
<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 />
+ <string name="wait" msgid="7147118217226317732">"Wag"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Program is herlei"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> loop nou."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> is oorspronklik laat loop."</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">"Skaal"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Wys altyd"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Heraktiveer dit met Instellings &gt; Programme &gt; Bestuur programme."</string>
<string name="smv_application" msgid="295583804361236288">"Die program <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) het die selfopgelegde StrictMode-beleid geskend."</string>
<string name="smv_process" msgid="5120397012047462446">"Die proses <xliff:g id="PROCESS">%1$s</xliff:g> het die selfopgelegde StrictMode-beleid geskend."</string>
<string name="android_upgrading_title" msgid="378740715658358071">"Android gradeer tans op..."</string>
@@ -1194,35 +911,26 @@
<string name="old_app_description" msgid="942967900237208466">"Moenie die nuwe program begin nie."</string>
<string name="new_app_action" msgid="5472756926945440706">"Begin <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="6830398339826789493">"Stop die ou program sonder om te stoor."</string>
- <!-- no translation found for sendText (5132506121645618310) -->
- <skip />
- <!-- no translation found for volume_ringtone (6885421406845734650) -->
- <skip />
+ <string name="sendText" msgid="5132506121645618310">"Kies \'n handeling vir teks"</string>
+ <string name="volume_ringtone" msgid="6885421406845734650">"Luiervolume"</string>
<string name="volume_music" msgid="5421651157138628171">"Mediavolume"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Speel deur Bluetooth"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Stil luitoon gekies"</string>
- <!-- no translation found for volume_call (3941680041282788711) -->
- <skip />
+ <string name="volume_call" msgid="3941680041282788711">"Oproepvolume"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth-inoproep-volume"</string>
- <!-- no translation found for volume_alarm (1985191616042689100) -->
- <skip />
+ <string name="volume_alarm" msgid="1985191616042689100">"Alarmvolume"</string>
<string name="volume_notification" msgid="2422265656744276715">"Kennisgewing-volume"</string>
- <!-- no translation found for volume_unknown (1400219669770445902) -->
- <skip />
+ <string name="volume_unknown" msgid="1400219669770445902">"Volume"</string>
<string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth-volume"</string>
<string name="volume_icon_description_ringer" msgid="3326003847006162496">"Luitoon se volume"</string>
<string name="volume_icon_description_incall" msgid="8890073218154543397">"Oproepvolume"</string>
<string name="volume_icon_description_media" msgid="4217311719665194215">"Mediavolume"</string>
<string name="volume_icon_description_notification" msgid="7044986546477282274">"Kennisgewing-volume"</string>
- <!-- no translation found for ringtone_default (3789758980357696936) -->
- <skip />
- <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
- <skip />
- <!-- no translation found for ringtone_silent (4440324407807468713) -->
- <skip />
+ <string name="ringtone_default" msgid="3789758980357696936">"Verstek luitoon"</string>
+ <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Verstek luitoon (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_silent" msgid="4440324407807468713">"Stil"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Luitone"</string>
- <!-- no translation found for ringtone_unknown (5477919988701784788) -->
- <skip />
+ <string name="ringtone_unknown" msgid="5477919988701784788">"Onbekende luitoon"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"Wi-Fi-netwerk beskikbaar"</item>
<item quantity="other" msgid="4192424489168397386">"Wi-Fi-netwerke beskikbaar"</item>
@@ -1233,64 +941,42 @@
</plurals>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kon nie aan Wi-Fikoppel nie"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" 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 />
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Begin Wi-Fi Direct-handeling. Dit sal Wi-Fi-kliënt/warmkol-werking afskakel."</string>
<string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Kon nie Wi-Fi Direct begin nie"</string>
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct-verbindingsopstel-versoek van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK om te aanvaar."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct-verbindingsopstel-versoek van <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Voer PIN in om voort te gaan."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-PIN<xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> moet ingevoer word in die eweknietoestel <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> sodat verbindingsopstelling kan voortgaan"</string>
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direk is aan"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Raak vir instellings"</string>
<string name="select_character" msgid="3365550120617701745">"Voeg karakter in"</string>
- <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
- <skip />
- <!-- no translation found for sms_control_title (7296612781128917719) -->
- <skip />
+ <string name="sms_control_default_app_name" msgid="7630529934366549163">"Onbekende program"</string>
+ <string name="sms_control_title" msgid="7296612781128917719">"Stuur SMS-boodskappe"</string>
<string name="sms_control_message" msgid="1289331457999236205">"\'n Groot aantal SMS-boodskappe word gestuur. Kies \"OK\" om voort te gaan, of \"Kanselleer\" om op te hou stuur."</string>
- <!-- no translation found for sms_control_yes (2532062172402615953) -->
- <skip />
- <!-- no translation found for sms_control_no (1715320703137199869) -->
- <skip />
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
+ <string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
+ <string name="sms_control_no" msgid="1715320703137199869">"Kanselleer"</string>
+ <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kaart verwyder"</string>
<string name="sim_removed_message" msgid="2333164559970958645">"Die mobielnetwerk sal nie beskikbaar wees nie totdat jy weer begin met \'n geldige SIM-kaart."</string>
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_done_button" msgid="827949989369963775">"Klaar"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"SIM-kaart bygevoeg"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Jy moet jou toestel weer aanskakel om toegang tot die mobielnetwerk te kry."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Herbegin"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Stel tyd"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Stel datum"</string>
- <!-- no translation found for date_time_set (5777075614321087758) -->
- <skip />
- <!-- no translation found for default_permission_group (2690160991405646128) -->
- <skip />
- <!-- no translation found for no_permissions (7283357728219338112) -->
- <skip />
+ <string name="date_time_set" msgid="5777075614321087758">"Stel"</string>
+ <string name="default_permission_group" msgid="2690160991405646128">"Verstek"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Geen toestemmings benodig nie"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Versteek"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Wys alle"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"USB-massaberging"</string>
- <!-- no translation found for usb_storage_title (5901459041398751495) -->
- <skip />
+ <string name="usb_storage_title" msgid="5901459041398751495">"USB gekoppel"</string>
<string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Jy het aan jou rekenaar gekoppel via USB. Raak die knoppie hier onder as jy lêers tussen jou rekenaar en jou Android se USB-berging wil kopieer."</string>
<string name="usb_storage_message" product="default" msgid="4510858346516069238">"Jy het aan jou rekenaar gekoppel via USB. Raak die knoppie hier onder as jy lêers tussen jou rekenaar en jou Android SD-kaart wil kopieer."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Skakel USB-berging aan"</string>
<string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Kon nie jou USB-berging vir USB-massaberging gebruik nie."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Kon nie jou SD-kaart vir USB-massaberging gebruik nie."</string>
- <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
- <skip />
- <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
- <skip />
+ <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB gekoppel"</string>
+ <string name="usb_storage_notification_message" msgid="7380082404288219341">"Kies om lêers na/van jou rekenaar te kopieer."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Skakel USB-geheue af"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Kies om USB-geheue af te skakel."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB-berging in gebruik"</string>
@@ -1302,16 +988,11 @@
<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="7323658469626514207">"USB-handeling was onsuksesvol"</string>
<string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
- <!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
- <skip />
- <!-- no translation found for usb_ptp_notification_title (1960817192216064833) -->
- <skip />
- <!-- no translation found for usb_cd_installer_notification_title (6774712827892090754) -->
- <skip />
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
- <!-- no translation found for usb_notification_message (4447869605109736382) -->
- <skip />
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Gekoppel as \'n mediatoestel"</string>
+ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Gekoppel as \'n kamera"</string>
+ <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Gekoppel as \'n installeerder"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Gekoppel aan \'n USB-toebehoorsel"</string>
+ <string name="usb_notification_message" msgid="4447869605109736382">"Raak vir ander USB-opsies"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Formateer USB-berging"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Formateer SD-kaart"</string>
<string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Vee USB-berging uit, wat alle lêers wat daar gestoor word, sal uitvee? Handeling kan nie omgekeer word nie!"</string>
@@ -1320,8 +1001,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB-ontfouter gekoppel"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Kies om USB-ontfouting te deaktiveer."</string>
<string name="select_input_method" msgid="6865512749462072765">"Kies invoermetode"</string>
- <!-- no translation found for configure_input_methods (6324843080254191535) -->
- <skip />
+ <string name="configure_input_methods" msgid="6324843080254191535">"Stel invoermetodes op"</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>"kandidate"</u></string>
@@ -1376,14 +1056,10 @@
<string name="accessibility_binding_label" msgid="4148120742096474641">"Toeganklikheid"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Muurpapier"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Verander muurpapier"</string>
- <!-- no translation found for vpn_title (8219003246858087489) -->
- <skip />
- <!-- no translation found for vpn_title_long (6400714798049252294) -->
- <skip />
- <!-- no translation found for vpn_text (1610714069627824309) -->
- <skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
- <skip />
+ <string name="vpn_title" msgid="8219003246858087489">"VPN is geaktiveer."</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"VPN is geaktiveer deur <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="vpn_text" msgid="1610714069627824309">"Tik om netwerk te bestuur."</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"Gekoppel aan <xliff:g id="SESSION">%s</xliff:g>. Tik om die netwerk te bestuur."</string>
<string name="upload_file" msgid="2897957172366730416">"Kies lêer"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Geen lêer gekies nie"</string>
<string name="reset" msgid="2448168080964209908">"Stel terug"</string>
@@ -1432,12 +1108,15 @@
<string name="sync_really_delete" msgid="8933566316059338692">"Vee die items uit."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"Ontdoen die uitvee."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Doen vir eers niks."</string>
- <!-- no translation found for choose_account_label (4191313562041125787) -->
+ <string name="choose_account_label" msgid="4191313562041125787">"Kies \'n rekening"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Verhoging"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Verminder"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tik en hou."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Skuif op om by te tel en af om af te trek."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Tel \'n minuut by"</string>
@@ -1477,30 +1156,18 @@
<string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string>
<string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Sleutel. Kopstuk nodig om sleutels te hoor, tydens tik van \'n wagwoord."</string>
- <!-- no translation found for action_bar_home_description (5293600496601490216) -->
- <skip />
- <!-- no translation found for action_bar_up_description (2237496562952152589) -->
- <skip />
- <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
- <skip />
- <!-- no translation found for storage_internal (7556050805474115618) -->
- <skip />
- <!-- no translation found for storage_sd_card (8921771478629812343) -->
- <skip />
- <!-- no translation found for storage_usb (3017954059538517278) -->
- <skip />
- <!-- no translation found for extract_edit_menu_button (302060189057163906) -->
- <skip />
- <!-- no translation found for data_usage_warning_title (1955638862122232342) -->
- <skip />
- <!-- no translation found for data_usage_warning_body (3354394590936526648) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_title (7636489436819470761) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
- <skip />
+ <string name="action_bar_home_description" msgid="5293600496601490216">"Navigeer tuis"</string>
+ <string name="action_bar_up_description" msgid="2237496562952152589">"Navigeer op"</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">"Meer opsies"</string>
+ <string name="storage_internal" msgid="7556050805474115618">"Interne berging"</string>
+ <string name="storage_sd_card" msgid="8921771478629812343">"SD-kaart"</string>
+ <string name="storage_usb" msgid="3017954059538517278">"USB-berging"</string>
+ <string name="extract_edit_menu_button" msgid="302060189057163906">"Redigeer tans..."</string>
+ <string name="data_usage_warning_title" msgid="1955638862122232342">"Dataverbruik-waarskuwing"</string>
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Raak om gebruik en instellings te bekyk"</string>
+ <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-data gedeaktiveer"</string>
+ <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-data gedeaktiveer"</string>
+ <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobieldata gedeaktiveer"</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi-data gedeaktiveer"</string>
<string name="data_usage_limit_body" msgid="4313857592916426843">"Raak om te aktiveer"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G-datalimiet oorskry"</string>
@@ -1510,41 +1177,23 @@
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> meer as gespesifiseerde limiet"</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Agtergronddata is beperk"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"Raak om beperking te verwyder"</string>
- <!-- no translation found for ssl_certificate (6510040486049237639) -->
- <skip />
- <!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
- <skip />
- <!-- no translation found for issued_to (454239480274921032) -->
- <skip />
- <!-- no translation found for common_name (2233209299434172646) -->
- <skip />
- <!-- no translation found for org_name (6973561190762085236) -->
- <skip />
- <!-- no translation found for org_unit (7265981890422070383) -->
- <skip />
- <!-- no translation found for issued_by (2647584988057481566) -->
- <skip />
- <!-- no translation found for validity_period (8818886137545983110) -->
- <skip />
- <!-- no translation found for issued_on (5895017404361397232) -->
- <skip />
- <!-- no translation found for expires_on (3676242949915959821) -->
- <skip />
- <!-- no translation found for serial_number (758814067660862493) -->
- <skip />
- <!-- no translation found for fingerprints (4516019619850763049) -->
- <skip />
- <!-- no translation found for sha256_fingerprint (4391271286477279263) -->
- <skip />
- <!-- no translation found for sha1_fingerprint (7930330235269404581) -->
- <skip />
- <!-- no translation found for activity_chooser_view_see_all (180268188117163072) -->
- <skip />
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="ssl_certificate" msgid="6510040486049237639">"Sekuriteitsertifikaat"</string>
+ <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Die sertifikaat is geldig."</string>
+ <string name="issued_to" msgid="454239480274921032">"Uitgereik aan:"</string>
+ <string name="common_name" msgid="2233209299434172646">"Gewone naam:"</string>
+ <string name="org_name" msgid="6973561190762085236">"Organisasie:"</string>
+ <string name="org_unit" msgid="7265981890422070383">"Organisatoriese eenheid:"</string>
+ <string name="issued_by" msgid="2647584988057481566">"Uitgereik deur:"</string>
+ <string name="validity_period" msgid="8818886137545983110">"Geldigheid:"</string>
+ <string name="issued_on" msgid="5895017404361397232">"Uitgereik op:"</string>
+ <string name="expires_on" msgid="3676242949915959821">"Verval op:"</string>
+ <string name="serial_number" msgid="758814067660862493">"Reeksnommer:"</string>
+ <string name="fingerprints" msgid="4516019619850763049">"Vingerafdrukke:"</string>
+ <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256-vingerafdruk:"</string>
+ <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1-vingerafdruk:"</string>
+ <string name="activity_chooser_view_see_all" msgid="180268188117163072">"Sien alle..."</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Kies aktiwiteit"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Deel met..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Toestel gesluit."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 42063c013842..ddb1bafa2e26 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -20,93 +20,54 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for byteShort (8340973892742019101) -->
- <skip />
- <!-- no translation found for kilobyteShort (5973789783504771878) -->
- <skip />
- <!-- no translation found for megabyteShort (6355851576770428922) -->
- <skip />
- <!-- no translation found for gigabyteShort (3259882455212193214) -->
- <skip />
- <!-- no translation found for terabyteShort (231613018159186962) -->
- <skip />
- <!-- no translation found for petabyteShort (5637816680144990219) -->
- <skip />
+ <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="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>
- <!-- no translation found for untitled (6071602020171759109) -->
- <skip />
- <!-- no translation found for ellipsis (7899829516048813237) -->
- <skip />
- <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
- <skip />
- <!-- no translation found for unknownName (2277556546742746522) -->
- <skip />
- <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
- <skip />
- <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
- <skip />
- <!-- no translation found for mmiError (5154499457739052907) -->
- <skip />
+ <string name="untitled" msgid="6071602020171759109">"&lt;ርዕስ አልባ&gt;"</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="mmiFdnError" msgid="5224398216385316471">"ክዋኔ ለቋሚ መደወያ ቁጥሮች ብቻ ተገድቧል።"</string>
- <!-- no translation found for serviceEnabled (8147278346414714315) -->
- <skip />
- <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
- <skip />
- <!-- no translation found for serviceDisabled (1937553226592516411) -->
- <skip />
- <!-- no translation found for serviceRegistered (6275019082598102493) -->
- <skip />
- <!-- no translation found for serviceErased (1288584695297200972) -->
- <skip />
- <!-- no translation found for passwordIncorrect (7612208839450128715) -->
- <skip />
- <!-- no translation found for mmiComplete (8232527495411698359) -->
- <skip />
- <!-- no translation found for badPin (5085454289896032547) -->
- <skip />
- <!-- no translation found for badPuk (5702522162746042460) -->
- <skip />
- <!-- no translation found for mismatchPin (3695902225843339274) -->
- <skip />
- <!-- no translation found for invalidPin (3850018445187475377) -->
- <skip />
- <!-- no translation found for invalidPuk (8761456210898036513) -->
- <skip />
+ <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="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="invalidPin" msgid="3850018445187475377">"ከ4 እስከ 8 ቁጥሮች የያዘ PIN ተይብ"</string>
+ <string name="invalidPuk" msgid="8761456210898036513">"8 ወይም ከዛ በላይ የሆኑ ቁጥሮችንPUK ተይብ።"</string>
<string name="needPuk" msgid="919668385956251611">"SIM ካርድዎ PUK-የተቆለፈ ነው።የPUK ኮዱን በመተየብ ይክፈቱት።"</string>
- <!-- no translation found for needPuk2 (4526033371987193070) -->
- <skip />
- <!-- no translation found for ClipMmi (6952821216480289285) -->
- <skip />
- <!-- no translation found for ClirMmi (7784673673446833091) -->
- <skip />
- <!-- no translation found for CfMmi (5123218989141573515) -->
- <skip />
- <!-- no translation found for CwMmi (9129678056795016867) -->
- <skip />
- <!-- no translation found for BaMmi (455193067926770581) -->
- <skip />
- <!-- no translation found for PwdMmi (7043715687905254199) -->
- <skip />
- <!-- no translation found for PinMmi (3113117780361190304) -->
- <skip />
+ <string name="needPuk2" msgid="4526033371987193070">" SIM ለመክፈት PUK2 ተይብ።"</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"የገቢ ደዋይID"</string>
+ <string name="ClirMmi" msgid="7784673673446833091">"የወጪ ጥሪID"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"ጥሪ ማስተላለፍ"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"ጥሪ በመጠበቅ ላይ"</string>
+ <string name="BaMmi" msgid="455193067926770581">"ጥሪ ከልክል"</string>
+ <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="ThreeWCMmi" msgid="9051047170321190368">"የሦስትዮሽ ጥሪ"</string>
<string name="RuacMmi" msgid="7827887459138308886">"የሚያበሳጭ የማይፈለጉ ጥሪዎች አለመቀበል።"</string>
<string name="CndMmi" msgid="3116446237081575808">"መደወያ ቁጥር አስረከበ"</string>
<string name="DndMmi" msgid="1265478932418334331">"አትረብሽ"</string>
- <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
- <skip />
- <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
- <skip />
- <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
- <skip />
- <!-- no translation found for CLIRPermanent (5460892159398802465) -->
- <skip />
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"የደዋይ ID ወደ ተከልክሏል ነባሪዎች።ቀጥሎ ጥሪ፡ ተከልክሏል"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"የደዋይ ID ወደ ተከልክሏል ነባሪዎች።ቀጥሎ ጥሪ፡ አልተከለከለም"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"የደዋይ ID ወደ አልተከለከለም ነባሪዎች።ቀጥሎ ጥሪ፡ ተከልክሏል"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"የደዋይ ID ነባሪዎች ወደአልተከለከለም። ቀጥሎ ጥሪ፡አልተከለከለም"</string>
+ <string name="serviceNotProvisioned" msgid="8614830180508686666">"አገልግሎት አልቀረበም።"</string>
+ <string name="CLIRPermanent" msgid="5460892159398802465">"የደዋዩID ቅንብር መለወጥ አይችልም።"</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"ክልክል ድረስተለውጧል"</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"የውሂብ አገልግሎት የታገደ ነው።"</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"የአደጋ ጊዜአገልግሎት የታገደ ነው።"</string>
@@ -116,22 +77,14 @@
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"ድምፅ/ውሂብ አገልግሎቶች ታግደዋል።"</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"ድምፅ/SMS አገልግሎቶች ታግደዋል።"</string>
<string name="RestrictedOnAll" msgid="2714924667937117304">"ሁሉም ድምጽ/ውሂብ/SMS አገልግሎቶች ታግደዋል።"</string>
- <!-- no translation found for serviceClassVoice (1258393812335258019) -->
- <skip />
- <!-- no translation found for serviceClassData (872456782077937893) -->
- <skip />
- <!-- no translation found for serviceClassFAX (5566624998840486475) -->
- <skip />
- <!-- no translation found for serviceClassSMS (2015460373701527489) -->
- <skip />
- <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
- <skip />
- <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
- <skip />
- <!-- no translation found for serviceClassPacket (6991006557993423453) -->
- <skip />
- <!-- no translation found for serviceClassPAD (3235259085648271037) -->
- <skip />
+ <string name="serviceClassVoice" msgid="1258393812335258019">"ድምፅ"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"ውሂብ"</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="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"በዝውውር ላይ አመላካች በርቷል"</string>
<string name="roamingText1" msgid="5314861519752538922">"በዝውውር ላይ አመልካች ጠፍቷል"</string>
<string name="roamingText2" msgid="8969929049081268115">"በዝውውር ላይ አመልካች ብልጭ ብልጭ ይላል"</string>
@@ -153,171 +106,114 @@
<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>
- <!-- no translation found for httpErrorOk (1191919378083472204) -->
- <skip />
+ <string name="httpErrorOk" msgid="1191919378083472204">"እሺ"</string>
<string name="httpError" msgid="6603022914760066338">"የአውታረ መረብ ስህተት ተከስቷል።"</string>
- <!-- no translation found for httpErrorLookup (4517085806977851374) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
- <skip />
- <!-- no translation found for httpErrorAuth (7293960746955020542) -->
- <skip />
- <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
- <skip />
- <!-- no translation found for httpErrorConnect (7623096283505770433) -->
- <skip />
+ <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="4270874999047767599">"አገልጋዩ መገናኘት አልቻለም፡፡ ኋላ ላይ እንደገና ሞክር፡፡"</string>
- <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
- <skip />
- <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
- <skip />
- <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
- <skip />
- <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
- <skip />
- <!-- no translation found for httpErrorFile (8250549644091165175) -->
- <skip />
- <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
- <skip />
- <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
- <skip />
+ <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">" URL ትክክል ስላልሆነ ገፁ መከፈት አልቻለም።"</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>
- <!-- no translation found for contentServiceSync (8353523060269335667) -->
- <skip />
- <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
- <skip />
+ <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>
- <!-- outdated translation 2292820184396262278 --> <string name="low_memory" product="default" msgid="6632412458436461203">"የጡባዊ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
- <!-- no translation found for me (6545696007631404292) -->
- <skip />
+ <string name="low_memory" product="default" msgid="6632412458436461203">"የስልክ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
+ <string name="me" msgid="6545696007631404292">"እኔ"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"የጡባዊ አማራጮች"</string>
- <!-- outdated translation 8545351420865202853 --> <string name="power_dialog" product="default" msgid="1319919075463988638">"የጡባዊ አማራጮች"</string>
- <!-- no translation found for silent_mode (7167703389802618663) -->
- <skip />
- <!-- no translation found for turn_on_radio (3912793092339962371) -->
- <skip />
- <!-- no translation found for turn_off_radio (8198784949987062346) -->
- <skip />
- <!-- no translation found for screen_lock (799094655496098153) -->
- <skip />
- <!-- no translation found for power_off (4266614107412865048) -->
- <skip />
- <!-- no translation found for shutdown_progress (2281079257329981203) -->
- <skip />
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"የስልክ አማራጮች"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"የፀጥታ ሁነታ"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"ገመድ አልባ አብራ"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"ገመድ አልባ አጥፋ"</string>
+ <string name="screen_lock" msgid="799094655496098153">"ማያ ቆልፍ"</string>
+ <string name="power_off" msgid="4266614107412865048">"ኃይል አጥፋ"</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"በመዝጋት ላይ..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"ጡባዊዎ ይዘጋል።"</string>
- <!-- outdated translation 3385745179555731470 --> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ጡባዊዎ ይዘጋል።"</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>
- <!-- no translation found for no_recent_tasks (279702952298056674) -->
- <skip />
+ <string name="no_recent_tasks" msgid="279702952298056674">"ምንም የቅርብ ጊዜ ትግበራዎች የሉም።"</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"የጡባዊ አማራጮች"</string>
- <!-- outdated translation 408477140088053665 --> <string name="global_actions" product="default" msgid="2406416831541615258">"የጡባዊ አማራጮች"</string>
- <!-- no translation found for global_action_lock (2844945191792119712) -->
- <skip />
- <!-- no translation found for global_action_power_off (4471879440839879722) -->
- <skip />
- <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
- <skip />
+ <string name="global_actions" product="default" msgid="2406416831541615258">"የስልክ አማራጮች"</string>
+ <string name="global_action_lock" msgid="2844945191792119712">"ማያ ቆልፍ"</string>
+ <string name="global_action_power_off" msgid="4471879440839879722">"ኃይል አጥፋ"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"የፀጥታ ሁነታ"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ድምፅ ጠፍቷል"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ድምፅ በርቷል"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"የአውሮፕላን ሁነታ"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"የአውሮፕላንሁነታ በርቷል"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"የአውሮፕላንሁነታ ጠፍቷል"</string>
- <!-- outdated translation 5833510281787786290 --> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"100+"</string>
- <!-- no translation found for safeMode (2788228061547930246) -->
- <skip />
+ <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>
- <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
- <skip />
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"ገንዘብ የሚያስወጥዎ አገልግሎቶች"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"ትግበራዎች ገንዘብ የሚያስወጣዎትን ነገሮች ለማድረግ ይፍቀዱ።"</string>
- <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
- <skip />
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"መልዕክቶችዎ"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"SMS ዎን፣ ኢሜይልዎን እና ሌላ መልዕክቶችዎን ያንብቡ እና ይፃፉ።"</string>
- <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
- <skip />
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"በጡባዊዎ ላይ የተከማቹ እውቂያዎች እና ቀን መቁጠሪያጋ ቀጥታ ይድረሱ።"</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"በስልኩ ላይ ወደ ተከማቸው ዕውቂያዎችዎ እና የቀን መቁጠሪያዎበቀጥታ ይድረሱ"</string>
- <!-- no translation found for permgrouplab_location (635149742436692049) -->
- <skip />
- <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
- <skip />
- <!-- no translation found for permgrouplab_network (5808983377727109831) -->
- <skip />
+ <string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"ያሉበትን ስፍራ ይቆጣጠሩ"</string>
+ <string name="permgrouplab_network" msgid="5808983377727109831">"የአውታረ መረብ ግኑኙነት"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"ትግበራዎች የተለያዩ የአውታረ መረብ ባህሪያት ለመድረስ ፍቀድ።"</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
- <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
- <skip />
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"የሃርድዌር ቁጥጥሮች"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"ወደስልኩ ቀፎ ሀርድዌርላይ በቀጥታ ድረስ።"</string>
- <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
- <skip />
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"የስልክ ጥሪዎች"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"ማሳያ፣መዝገብ እና የስልክ ጥሪዎች ሂደት"</string>
- <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
- <skip />
+ <string name="permgrouplab_systemTools" msgid="4652191644082714048">"የስርዓት መሳሪያዎች"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"የስርዓቱ ዝቅተኛ-ደረጃ ድረስ እና ጠብቅ"</string>
- <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
- <skip />
+ <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"የግንባታ መሣሪያዎች"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"ባህሪያትለትግበራ ገንቢዎችብቻ ያስፈልጋሉ።"</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>
- <!-- no translation found for permlab_statusBar (7417192629601890791) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
- <skip />
+ <string name="permlab_expandStatusBar" msgid="1148198785937489264">"የሁኔታ አሞሌ ዘርጋ/ሰብስብ"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"ትግበራ የሁኔታ አሞሌን ለመዝረጋት እና ለመሰብሰብ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"ወጪ ጥሪዎችአቋርጥ"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"ትግበራ ወጪ ጥሪዎችን ለማስኬድ እና ቁጥሩ እንዲደወል ለመለወጥ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ወጪ ጥሪዎችን ለመከታተል፣ለማዛወር ወይም ለመከላከል ይችላሉ።"</string>
- <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"SMS ተቀበል"</string>
<string name="permdesc_receiveSms" msgid="6298292335965966117">"ትግበራ የSMS መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
- <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"MMS ተቀበል"</string>
<string name="permdesc_receiveMms" msgid="4563346832000174373">"ትግበራ የMMS መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
- <!-- no translation found for permlab_receiveEmergencyBroadcast (1803477660846288089) -->
- <skip />
- <!-- no translation found for permdesc_receiveEmergencyBroadcast (7118393393716546131) -->
- <skip />
- <!-- no translation found for permlab_sendSms (5600830612147671529) -->
- <skip />
+ <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_sendSmsNoConfirmation" msgid="4781483105951730228">"ያለ ምንም ማረጋገጫ የSMS መልዕክቶች ላክ"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"SMS መልዕክቶች ለመላክ ትግበራ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ያለእርስዎ ማረጋገጫ ገንዘብ የሚያስወጣዎትን መልዕክቶች እየላኩ ነው።"</string>
- <!-- no translation found for permlab_readSms (4085333708122372256) -->
- <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>
- <!-- no translation found for permlab_writeSms (6881122575154940744) -->
- <skip />
+ <string name="permlab_writeSms" msgid="6881122575154940744">"SMS ወይም MMS አርትዕ"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"ትግበራ በጡባዊዎ SIM ካርድ ላይ የተከማቹ የSMS መልዕክቶች ለመፃፍ ይፈቅዳል። ተንኮል አዘል ትግበራዎች መልዕክቶችዎን ሰርዘው ይሆናል።"</string>
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">" ትግበራ በስልክዎ SIM ካርድ ላይ የተከማቹ የSMS መልዕክቶች ለመፃፍ ይፈቅዳል። ተንኮል አዘል ትግበራዎች መልዕክቶችዎን ሰርዘው ይሆናል።"</string>
- <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="8258226427716551388">"WAP ተቀበል"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"ትግበራ የWAP መልዕክቶችን ለማስኬድ እና ለመቀበል ይፈቅዳል።ተንኮል አዘም ትግበራዎች መልዕክቶን ይከታተላሉ ወይም ለእርስዎ ሳያሳዩ ይሰርዛሉ።"</string>
- <!-- no translation found for permlab_getTasks (5005277531132573353) -->
- <skip />
+ <string name="permlab_getTasks" msgid="5005277531132573353">"አሂድ ትግበራዎችን ሰርስረህ አውጣ"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"ትግበራ ስለአሁን እና ቅርብ ጊዜ አሂድ ክንውኖች መረጃ ሰርስረህ ለማውጣት ይፈቅደል።"</string>
- <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
- <skip />
+ <string name="permlab_reorderTasks" msgid="5669588525059921549">"አሂድ ትግበራዎችን ድጋሚ ደርድር"</string>
<string name="permdesc_reorderTasks" msgid="126252774270522835">"ትግበራ ክንውንን ወደ ቅድመገፅ እና ዳራ ለማንቀሳቀስ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ከእርስዎ ቁጥጥር ውጪ ራሳቸውን ወደ ፊት ማውጣት ይችላሉ።"</string>
- <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
- <skip />
- <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
- <skip />
- <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"የUI ቅንብሮችን ለውጥ"</string>
<string name="permdesc_changeConfiguration" msgid="3465121501528064399">"ትግበራ እንደ አካባቢው ሁኔታ ወይም ማጠቃለያ ቅርፀ ቁምፊ መጠን የአሁኑን ውቅር ለመለወጥ ይፈቅዳል።"</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"የመኪና ሁነታ አንቃ"</string>
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"ትግበራ የመኪና ሁነታ ለማንቃት ይፈቅዳል።"</string>
@@ -325,109 +221,78 @@
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"ትግበራ ምንም እንኳ ማህደረ ትውስታ አነስተኛ ባይሆንም ሌላ ትግበራዎች የዳራ ሂደታቸውን ለማቆም ይፈቅዳል።"</string>
<string name="permlab_forceStopPackages" msgid="1447830113260156236">"ሌላ ትግበራዎችን በኃይል አቁም"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"ትግበራ ሌሎች ትግበራዎችን በኃይል ለማስቆም ይፈቅዳል።"</string>
- <!-- no translation found for permlab_forceBack (1804196839880393631) -->
- <skip />
+ <string name="permlab_forceBack" msgid="1804196839880393631">"ትግበራ እንዲዘጋአስገድድ"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"ትግበራ ማንኛውም ቅድመገፅ እንቅስቃሴ በግድ ለመዝጋት እና ለመመለስ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
- <!-- no translation found for permlab_dump (1681799862438954752) -->
- <skip />
+ <string name="permlab_dump" msgid="1681799862438954752">"የስርዓት የውስጥ ሁኔታን ሰርስረህ አውጣ"</string>
<string name="permdesc_dump" msgid="2198776174276275220">"ትግበራ የስረዓት ውስጣዊ ሁኔታ ሰርስረው ሊያወጡ ይፈቅዳል። ተንኮል አዘል ትግበራዎች በፍፁም የማያስፈልጋቸውን የተለያዩ ሰፋ ያለ የግል እና የተጠበቀ መረጃ ሰርስረ ው ሊያወጡይችላሉ።"</string>
- <!-- no translation found for permlab_retrieve_window_content (8022588608994589938) -->
- <skip />
- <!-- no translation found for permdesc_retrieve_window_content (3390962289797156152) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
- <skip />
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"ሁሉንም የትግበራ ማስነሳቶች አሳይ እና ተቆጣጠር"</string>
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"ትግበራ ስርዓት እንዴት እንቅስቃሴዎችን እንደሚያስነሳ ለመቆጣጠር እና ለመከታተል ይፈቅዳል።ተንኮል አዘል ትግበራዎች ስርዓቱን ሙሉ ለሙሉ ማመቻቸት ይችላል።ይህ ፈቃድ ለግንባታ ብቻ ያስፈልጋል፣በፍፁም ለመደበኛ ስልክ አጠቃቀም አያስፈልግም።"</string>
- <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
- <skip />
+ <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="permlab_broadcastWapPush" msgid="3145347413028582371">"የWAP-PUSH ደርስዋል ስርጭት ላክ"</string>
<string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"ትግበራ የWAP PUSH ሲቀበለው የቆየውን መልዕክት ማሳወቂያ ለማሰራጨት ይፈቅዳል።ተንኮል አዘል ትግበራዎች የMMS የደረሰመልዕክት አስመስለው ወይምበተንኮል የተሞላ ማንኛውም ድረ ገፅ ይዘትበፀጥታ ለመተካትይጠቀማሉ።"</string>
- <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
- <skip />
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"የአሂድ ሂደቶችን ቁጥር ወስን"</string>
<string name="permdesc_setProcessLimit" msgid="7824786028557379539">" ከፍተኛ ቁጥርያለውንየአሂድ ሂደትለመቆጣጠር ትግበራ ይፈቅዳል።ለመደበኛ ትግበራዎች በፍፁም አላስፈለገም።"</string>
- <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"ሁሉንም የዳራ ትግበራዎች ዝጋ"</string>
<string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"ትግበራዎች እንቅስቃሴዎች ሁልጊዜ ወደ ዳራ ከሄዱ በኋላ ወዲያው እንደሚጨርሱና እንደማይጨርሱ ለመቆጣጠር ይፈቅዳሉ።ለመደበኛ ትግበራዎች በፍፁም አላስፈለገም።"</string>
- <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
- <skip />
+ <string name="permlab_batteryStats" msgid="7863923071360031652">"የባትሪ ስታስቲክስ ቀይር"</string>
<string name="permdesc_batteryStats" msgid="5847319823772230560">"የተሰበሰበ ባትሪ አጠቃቀም ስታስቲክስ መቀየሪያ ይፈቅዳል።በመደበኛ ትግበራዎች ለመጠቀም አይደለም።"</string>
<string name="permlab_backup" msgid="470013022865453920">"የስርዓት መጠባበቂያን ተቆጣጠር እናእነበረበት መልስ"</string>
<string name="permdesc_backup" msgid="4837493065154256525">"ትግበራው በስርዓተ መጠባበቅ እና እነበረበት መልስ አሰራር ለመቆጣጠር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
- <skip />
- <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
- <skip />
- <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
- <skip />
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"የሙሉ መጠበቂያ ወይም እነበረበት መልስ ከዋኝ አረጋግጥ"</string>
+ <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"ትግበራ ሙሉ የመጠባበቂያ ማረጋገጫ UI ለማስነሳት ይፈቅዳል። በሌላ በማንኛውም እንዳይገለገል።"</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"ያልተፈቀደ ዊንዶውዝ አሳይ"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"በውስጥ ስርዓት ተጠቃሚ በየነገፅ ለመጠቀም የሚታሰብ ዊንዶውዝ መፍጠር ይፈቅዳል። ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"የስርዓት-ደረጃ ማንቂያ አሳይ"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"ትግበ ራ የስርዓት ማንቂያ ዊንዶውዝ ለማሳየት ይፈቅዳል። ተንኮል አዘል ትግበራዎች የስልኩን ጠቅላላ ማያ ሊቆጣጠሩት ይችላሉ።"</string>
- <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
- <skip />
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"የሁሉንም እነማ ፍጥነት ቀይር"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"ትግበራ የአለም አቀፍ እነማ ፍጥነት(ፈጣን ወይም ቀርፋፋ እነማዎችን) በማንኛውም ጊዜ ለመለወጥ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
- <skip />
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"የትግበራ ቶከን አደራጅ"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"ትግበራዎች የራሳቸውን ቶከኖች ለመፍጠር እና ለማደራጀት፣መደበኛ ፐ- አሰላለፋቸውን በጎን ለማለፍ ይፈቅዳሉ።ለመደበኛ ትግበራዎች በፍፁም አያስፈልጉም።"</string>
- <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_readInputState (469428900041249234) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <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">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<string name="permlab_bindWallpaper" msgid="8716400279937856462">"በልጣፍ ጠርዝ"</string>
<string name="permdesc_bindWallpaper" msgid="5287754520361915347">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
- <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
- <skip />
- <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
- <skip />
+ <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ወደ ፍርግም አገልግሎት አያይዝ"</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"ያዡ ግቤት ሜተዱን ወደ ከፍተኛ-ደረጃ ፍርግም አገልግሎት ለመጠረዝ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ከመሣሪያ አስተዳደር ጋር ተገናኝ"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"የትግበራ ያዢው ሀሳቡን ወደ መሣሪያ አስተዳዳሪው ለመላክ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም ነበር።"</string>
- <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
- <skip />
+ <string name="permlab_setOrientation" msgid="3365947717163866844">"የማያ ገፀ አቀማመጥን ለውጥ"</string>
<string name="permdesc_setOrientation" msgid="6335814461615851863">"ትግበራው በማንኛውም ሰዓት የማያንማሽከርከሪያለመለወጥ ይፈቅዳል።ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
- <!-- no translation found for permlab_setPointerSpeed (9175371613322562934) -->
- <skip />
- <!-- no translation found for permdesc_setPointerSpeed (137436038503379864) -->
- <skip />
- <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
- <skip />
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"ትግበራ ሁልጊዜ አሂድ ላይ አድርግ"</string>
<string name="permdesc_persistentActivity" msgid="5037199778265006008">"ትግበራ ራሱንአካል የማያቋርጥ በማድረግ፣ ስርዓት ለሌላ ትግበራዎች መጠቀም አለመቻልን ይፈቅዳል"</string>
- <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
- <skip />
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"ትግበራዎችን ሰርዝ"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"የአንድሮይድ አካታቾችን ለመሰረዝ ትግበራ ይፈቅዳል።ተንኮል አዘል ትግበራዎች ይህን በመጠቀም አስፈላጊ ትግበራዎችን ለመሰረዝ ይችላሉ።"</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"የሌላ ትግበራዎችን ውሂብ ሰርዝ"</string>
- <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
- <skip />
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"ትግበራ የተጠቃሚን ውሂብ ለማጥራት ይፈቅዳል።"</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"የሌላ ትግበራዎችን መሸጎጫዎች ሰርዝ"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"መሸጎጫ ፋይሎችን ለመሰረዝ ትግበራዎች ይፈቅዳሉ።"</string>
- <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
- <skip />
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"የትግበራ ማከማቻ ቦታ ለካ"</string>
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"ትግበራ የራሱን ኮድ፣ውሂብ እና መሸጎጫ መጠኖች ሰርስሮ ለማውጣት ይፈቅዳል።"</string>
- <!-- no translation found for permlab_installPackages (335800214119051089) -->
- <skip />
+ <string name="permlab_installPackages" msgid="335800214119051089">"በቀጥታ ትግበራዎች ጫን"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"ትግበራ አዲስ ወይም የዘመነ የAndroid አካታቾች ለመጫን ይፈቅዳል። ተንኮል አዘል ትግበራዎች አዲስ ትግበራዎች በዘፈቀደ ኃይል ፈቃድ ለማከል ይህን መጠቀም ይችላሉ።"</string>
- <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
- <skip />
+ <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>
@@ -435,38 +300,29 @@
<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>
- <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
- <skip />
+ <string name="permlab_diagnostic" msgid="8076743953908000342">"በdiag ባለቤትነት ያሉ ንብረቶችን አንብብ/ፃፍ"</string>
<string name="permdesc_diagnostic" msgid="3121238373951637049">"ትግበራ በዲያግ ቡድን ባለቤትነት ወደ አለማንኛውም ንብረት ለምሳሌ በ/dev ያሉ ፋይሎች ለማንበብ እና ለመፃፍ ይፈቅዳል። ይህ በመሰረቱ የስርዓት መረጋጋትን እና ደህንነትን ሊጎዳ ይችላል። ይህ ውስን የሀርድዌር-ተኮር ዲያግኖስቲክስ በአምራቹ ወይም ከዋኙ ብቻ መሆን አለበት።"</string>
- <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
- <skip />
+ <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"ተመራጭ ትግበራዎች አዘጋጅ"</string>
<string name="permdesc_setPreferredApplications" msgid="760008293501937546">" ትግበራ የእርስዎ ተመራጭ ትግበራዎችን ለቀይር ይፈቅዳል። ይህ ተንኮል አዘል ትግበራዎች በፀጥታ አሂድ ትግበራዎችን ለመለወጥ፣ያሉ ትግበራዎች የግል ውሂብ ከእርስዎ በማነፍነፍ ለመሰብሰብ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
- <skip />
+ <string name="permlab_writeGservices" msgid="2149426664226152185">"የGoogle አገልግሎቶች ካርታን ቀይር"</string>
<string name="permdesc_writeGservices" msgid="6602362746516676175">"ትግበራ የGoogle ካርታ አገልግሎቶችን ለመቀየር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_readContacts (6219652189510218240) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_writeContacts (644616215860933284) -->
- <skip />
+ <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="6824681438529842282">"የመገለጫ ውሂብዎን ያንብቡ"</string>
@@ -478,46 +334,37 @@
<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="permlab_accessMockLocation" msgid="8688334974036823330">"ለሙከራ ጊዜያዊ ሥፍራ ፍጠር።"</string>
<string name="permdesc_accessMockLocation" msgid="7648286063459727252">"ለሙከራ አስቂኝ ሥፍራፍጠር። ተንኮል አዘል ትግበራዎች ሥፍራውን ለማገድ እና/ወይም በGPS ወይም የአውታረ መረብ አቅራቢዎች የእውነተኛውን ሥፍራ ሁኔታ ይዘው ከተመለሱ መጠቀም ይችላሉ።"</string>
- <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
- <skip />
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"ጥሩየ(GPS) ሥፍራ"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"በአለምአቀፍ የመሬት አቀማመጥ ስርዓት(GPS) ጥሩ የሥፍራ ምንጮችን በጡባዊ ላይ፣ያለበት ሥፍራ፣ድረስ። ተንኮል አዘል ትግበራዎች የትእንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ፣ እና ተጨማሪ የባትሪ ኃይል ሊፈጁ ይችላሉ።"</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"በአለምአቀፍ አቀማመጥ ስርዓት ጥሩ ስፍራ ምንጮችን በስልክ ላይ፣ያለበት ቦታ ዽረስ። ተንኮል አዘል ትግበራዎች የትእንዳሉ ለማወቅ ይህን መጠቀም ይችላሉ፣ እና ተጨማሪ የባትሪ ኃይል ሊፈጁ ይችላሉ።"</string>
- <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
- <skip />
+ <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger ድረስ።"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"ትግበራ የSurfaceFlinger ዝቅተኛ ደረጃ ባህሪያትን ለመጠቀም ይፈቅዳል።"</string>
- <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
- <skip />
+ <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"የንዑስ ክፈፍ ቋት አንብብ"</string>
<string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"ትግበራ የክፈፍ ቋት ይዘት ለማንበብ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
- <skip />
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"የድምፅ ቅንብሮችን ለውጥ"</string>
<string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"ትግበራ የዓለም አቀፍ ኦዲዮ ቅንብሮች እንደ ድምፅ እና ፈለግ ለቀይርይፈቅዳል።"</string>
- <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
- <skip />
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"ኦዲዮ ቅዳ"</string>
<string name="permdesc_recordAudio" msgid="6493228261176552356">"ትግበራ የድምፅ መዝገብ ዱካን ለመድረስ ይፈቅዳል።"</string>
<string name="permlab_camera" msgid="3616391919559751192">"ፎቶዎች እና ቪዲዮዎች አንሳ"</string>
<string name="permdesc_camera" msgid="6004878235852154239">"ትግበራ በካሜራ ቪዲዮዎችን እና ምስሎችን ለመውሰድ ይፈቅዳል። ይህ ካሜራውን የሚታየውን ምስል በማንኛውም ጊዜ ለመሰብሰብ ይፈቅዳል።"</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"በቋሚነት ጡባዊ አቦዝን"</string>
- <!-- outdated translation 2961292205764488304 --> <string name="permlab_brick" product="default" msgid="8337817093326370537">"በቋሚነት ጡባዊ አቦዝን"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"በቋሚነት ስልኩን አቦዝን"</string>
<string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"ትግበራው ጡባዊውን በቋሚነት ማቦዘን ይፈቅዳል። ይህ በጣም አደገኛ ነው።"</string>
<string name="permdesc_brick" product="default" msgid="5569526552607599221">"ትግበራው ስልኩን በቋሚነት አለማስቻል ይፈቅዳል። ይህ በጣም አደገኛ ነው።"</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"ጡባዊ ዳግም እንዲነሳ አስገድድ"</string>
- <!-- outdated translation 3436634972561795002 --> <string name="permlab_reboot" product="default" msgid="2898560872462638242">"ጡባዊ ዳግም እንዲነሳ አስገድድ"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"የስልክ በግድ ዳግም አስነሳ"</string>
<string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"ትግበራ ጡባዊውን በዳግም አስነሳ ለማስገደድ ይፈቅዳል።"</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"ትግበራ ስልኩ በዳግም አስነሳ ለማስገደድ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"ስርዓተፋይል ሰካ/ንቀል"</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>
@@ -531,75 +378,59 @@
<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>
- <!-- no translation found for permlab_vibrate (7768356019980849603) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7768356019980849603">"ነዛሪ ተቆጣጠር"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"ትግበራ ነዛሪውንለመቆጣጠር ይፈቅዳል።"</string>
- <!-- no translation found for permlab_flashlight (2155920810121984215) -->
- <skip />
+ <string name="permlab_flashlight" msgid="2155920810121984215">"የብርሃንብልጭታ ተቆጣጠር"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"ትግበራው የብልጭታብርሃኑን ለመቆጣጠር ይፈቅዳል።"</string>
- <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
- <skip />
- <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
- <skip />
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"ለUSB መሣሪያዎች ምርጫዎችን እና ፈቃዶችን አደራጅ"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"ትግበራ ምርጫዎችን እና ፈቃዶችን ለUSB መሣሪያዎች ለማደራጀት ይፈቅዳል።"</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"MTP ፕሮቶኮል ተግብር"</string>
<string name="permdesc_accessMtp" msgid="6532961200486791570">"መድረስ የMTP USB ፕሮቶኮልንወደ ከርነልMTP አንቀሳቃሽ ለመተግበር ይፈቅዳል።"</string>
- <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
- <skip />
+ <string name="permlab_hardware_test" msgid="4148290860400659146">"ሀርድዌር ፈትሽ"</string>
<string name="permdesc_hardware_test" msgid="3668894686500081699">"ትግበራው ለተለያዩ ፔሪፈራልስ ሃርድዌር ሙከራ ለመቆጣጠር ኣላማ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_callPhone (3925836347681847954) -->
- <skip />
+ <string name="permlab_callPhone" msgid="3925836347681847954">"በቀጥታ ስልክ ቁጥሮች ደውል"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"ያለእርስዎ ጣልቃ ገብነትትግበራው ወደ ስልክ ቁጥሮችለመደወልይፈቅዳል።ተንኮል አዘል ትግበራዎችበስልክዎ ሒሳብ ላይ ያልተጠበቁ ጥሪዎች ሊያስከትሉ ይችላሉ። ያስታውሱ ትግበራው ወደ አደጋ ጊዜ ቁጥሮች ለመደወል ይህ አይፈቅድም።"</string>
- <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
- <skip />
+ <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="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"ትግበራው የCDMA ፕሮቪዥን ለመጀመር ይፈቅዳል ። ተንኮል አዘል ትግበራዎች አላስፈላጊ የCDMA ፕሮቪዥን ይጀምራሉ።"</string>
- <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
- <skip />
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"የሥፍራ አዘምን ማሳወቂያዎችን ተቆጣጠር"</string>
<string name="permdesc_locationUpdates" msgid="2300018303720930256">"ከሬዲዮው የስፍራ ዝመና ማሳወቂያ ማስቻል/አለማስቻል ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
- <skip />
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"የድረስባህሪያት ምልከታ"</string>
<string name="permdesc_checkinProperties" msgid="7150307006141883832">"በምልከታ አገልግሎት የገቡ ባህሪያት አንብብ/ፃፍ ድረስ ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"ፍርግሞች ምረጥ"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"ትግበራው የትኛው ፍርግም ከየትኛው ትግበራ ጋር እንዲሚጠቀም ለስርዓት መንገር ይፈቅዳል። በዚህ ፈቃድ፣ ትግበራዎች የግል ውሂብን ለሌላ ትግበራዎች ድረስ መስጠት ይችላሉ። ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
- <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
- <skip />
+ <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="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ጡባዊ ከማንቀላፋት ተከላከል"</string>
- <!-- outdated translation 1531731435011495015 --> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ጡባዊ ከማንቀላፋት ተከላከል"</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>
- <!-- outdated translation 2787034722616350417 --> <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>
- <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
- <skip />
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"ልጣፍአዘጋጅ"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"ትግበራ የስረዓት ልጥፍን ለማዘጋጀት ይፈቅዳል።"</string>
- <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"የልጣፍአዘጋጅ መጠን ፍንጮች"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"ትግበራ የስረዓት ልጥፍ መጠንን ለማዘጋጀት ይፈቅዳል።"</string>
- <!-- no translation found for permlab_masterClear (2315750423139697397) -->
- <skip />
+ <string name="permlab_masterClear" msgid="2315750423139697397">"ስርዓትን ወደ ፋብሪካ ነባሪዎች ዳግም አስጀምር"</string>
<string name="permdesc_masterClear" msgid="5033465107545174514">"ትግበራ ስርዓቱንሙሉ ለሙሉ ወደ ፋብሪካ ቅንብሮች ፣ ሁሉንም ውሂቦች ማጥፋት፣ማዋቀር፣ እና የተጫኑ ትግበራዎችን ድጋሚ ማስጀመር ይፈቅዳል።"</string>
<string name="permlab_setTime" msgid="2021614829591775646">"ሰዓት ሙላ"</string>
<string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"ትግበራ የጡባዊን ሰዓት ለመለወጥ ይፈቅዳል።"</string>
<string name="permdesc_setTime" product="default" msgid="667294309287080045">"ትግበራ የስልኩን ሰዓት ለመለወጥ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
- <skip />
+ <string name="permlab_setTimeZone" msgid="2945079801013077340">"ሰዓት ሰቅ አዘጋጅ"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">" ትግበራየጡባዊን ሰዓት ሰቅ ለመለወጥ ይፈቅዳል።"</string>
<string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"የስልኩን ሰዓት ሰቅ ለመለወጥ ትግበራ ይፈቅዳል።"</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"እንደ አውርድአዸራጅአገልግሎት"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"ወደመለያ አረጋጋጮች ጥሪለማድረግ ትግበራ ይፈቅዳል"</string>
- <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
- <skip />
+ <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="permlab_authenticateAccounts" msgid="3940505577982882450">"እንደ መለያ አረጋጋጭ"</string>
@@ -608,57 +439,43 @@
<string name="permdesc_manageAccounts" msgid="8804114016661104517">"ትግበራ መለያዎችንእንደ ማከል እና ማስወገድ ክወናዎችን እና የይለፍ ቃልን መሰረዝ ለማከናወን ይፈቅዳል።"</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"የመለያ መረጃዎች ማረጋገጫ ተጠቀም"</string>
<string name="permdesc_useCredentials" msgid="7416570544619546974">"ትግበራ የማረጋገጫ ቶከን ለመጠየቅ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"የአውታረ መረብ ሁኔታ እይ"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">" ትግበራ የሁሉንም አውታረመረቦች ሁኔታ ለማየት ይፈቅዳል።"</string>
- <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
- <skip />
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"ሙሉ በይነመረብ ድረስ"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"የአውታረመረብ ሶኬቶችን ለመፍጠር ትግበራይፈቅዳል።"</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"የአውታረ መረብ ቅንብሮች እና ትራፊክ ለውጥ/ አቋርጥ"</string>
<string name="permdesc_writeApnSettings" msgid="2369786339323021771">"ትግበራ የአውታረ መረብ ቅንብሮችን ለመለወጥ እና ሁሉንም የአውታረ መረብ ትራፊክ ለማቋረጥ እና ለመመርመር፣ ለምሳሌ የእጅ አዙሩን እና ማንኛውም የAPN ወደብ ለመለወጥ ይፈቅዳል። ተንኮል አዘል ትግበራዎች ያለእርስዎ እውቅና የአውታረ መረብ ፓኬቶችን ለመቆጣጠር፣ ለማዟዟር ወይም ለመቀየር ይችላሉ።"</string>
- <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
- <skip />
+ <string name="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>
- <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="8100926650211034400">"የWi-Fi ሁኔታ እይ"</string>
<string name="permdesc_accessWifiState" msgid="485796529139236346">"ትግበራ ስለWi-Fi ሁኔታ መረጃን ለማየት ይፈቅዳል።"</string>
- <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
- <skip />
+ <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>
- <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"የብሉቱዝ አስተዳደር"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"ትግበራየአካባቢውን ብሉቱዝ ጡባዊ ለማዋቀር እናአግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ይፈቅዳል።"</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"የአካባቢውን ብሉቱዝ ስልክ ለማዋቀር እናአግኝቶ ከሩቅ መሣሪያዎች ጋር ለማጣመር ትግበራ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"የብሉቱዝ ተያያዦችን ፍጠር"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"ትግበራ የአካባቢውን ብሉቱዝጡባዊ ውቅር ለማየት፣ እና ከተጣመረው መሣሪያ ጋር ትይይዝ ለማድረግ እና ለመቀበልይፈቅዳል።"</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"ትግበራ የአካባቢውን ብሉቱዝ ስልክ ውቅር ለማየት፣ እና ከተጣመረው መሣሪያ ጋር ትይይዝ ለመቀበል እና ለማድረግ ይፈቅዳል።"</string>
<string name="permlab_nfc" msgid="4423351274757876953">"ቅርብ የግኑኙነትመስክ (NFC) ተቆጣጠር"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"ትግበራ የቅርብ ግኑኙነትመስክ (NFC) መለያዎች፣ ካርዶች እና አንባቢ ጋር ለማገናኘትይፈቅዳል።"</string>
- <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"ቁልፍመቆለፊያአቦዝን"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"ትግበራ የቁልፍሽንጉር እና ማንኛውም ተያያዥ የይለፍ ቃል ደህንነት ላለማስቻል ይፈቅዳል። ለዚህ ህጋዊ ምሳሌ የገቢ ስልክ ጥሪ ሲቀበሉ የቁልፍሽንጉርአለማስቻል፣ ከዛም ጥሪው ሲጨርስ የቁልፍሽንጉሩን ድጋሚ ማስቻል።"</string>
- <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
- <skip />
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"የአሳምር ቅንብሮች አንብብ"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለማንበብ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"የአሳምር ቅንብሮች ፃፍ"</string>
<string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"ትግበራ የአሳምር ቅንብሮች እንደ አየር ሁኔታ አሳምር ለዕውቆች መንቃቱን ለመቀየር ይፈቅዳል።"</string>
- <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
- <skip />
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"የአሳምር ስታስቲክስ አንብብ"</string>
<string name="permdesc_readSyncStats" msgid="7511448343374465000">"ትግበራ የአሳምር ስታስቲክ ለምሳሌ የተከሰተ የአሳምር ታሪክ ለማንበብ ይፈቅዳል።"</string>
- <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
- <skip />
- <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
- <skip />
- <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
- <skip />
+ <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_readDictionary" msgid="1082972603576360690">"ትግበራተጠቃሚው በተጠቃሚ መዝገበ ቃላት ሊያከማች የቻለውን ማንኛውም የግል ቃላት፣ስሞች፣እና ሀረጎች ለማንበብ ይፈቅዳል።"</string>
@@ -674,18 +491,12 @@
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"ትግበራ የመሸጎጫ ስርዓተፋይል ለማንበብ እና ለመፃፍ ይፈቅዳል።"</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"የበይነ መረብ ጥሪዎች አድርግ/ተቀበል"</string>
<string name="permdesc_use_sip" msgid="6320376185606661843">" ትግበራ ለ ግልጋሎት ለ የበይነ መረብ ጥሪዎች አድርግ/ተቀበል።"</string>
- <!-- no translation found for permlab_readNetworkUsageHistory (7862593283611493232) -->
- <skip />
- <!-- no translation found for permdesc_readNetworkUsageHistory (6040738474779135653) -->
- <skip />
- <!-- no translation found for permlab_manageNetworkPolicy (2562053592339859990) -->
- <skip />
- <!-- no translation found for permdesc_manageNetworkPolicy (3723795285132803958) -->
- <skip />
- <!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
- <skip />
- <!-- no translation found for permdesc_modifyNetworkAccounting (8702285686629184404) -->
- <skip />
+ <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"የታሪካዊ አውታረመረብ አጠቃቀም አንብብ"</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"ትግበራ የተወሰኑ የአውታረ መረቦች እና ትግበራዎችን ታሪካዊ የአውታረመረብ አጠቃቀም ለማንበብ ይፈቅዳል።"</string>
+ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"የአውታረ መረብ ፖሊሲ አደራጅ"</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"ትግበራ የአውታረመረብ ፖሊሲዎችን እና ትግበራ ተኮር ደንቦችን ለማደራጀት ይፈቅዳል።"</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"የአውታረ መረብ አጠቃቀም"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"የአውታረ መረብ አጠቃቀም ከትግበራበተቃራኒእንዴት ተጠያቂ እንደሚሆን ለመቀየር ይፈቅዳል።ለመደበኛ ትግበራዎች ጥቅም አይደለም።"</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"የይለፍ ቃል ድንቦች አዘጋጅ"</string>
<string name="policydesc_limitPassword" msgid="9083400080861728056">"በማያ-መክፈት የተፈቀዱ የይለፍ ቃል ርዝመት እና ቁምፊዎች ተቆጣጠር።"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"የማሳያ-ክፈት ሙከራዎችን አሳይ"</string>
@@ -700,14 +511,12 @@
<string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"የፋብሪካ ውሂብ ድጋሚ አስጀምር በማከናወን ያለ ማሰጠንቀቂያ የስልኩን ውሂብ ደምስስ።"</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"የመሣሪያውን ሁሉንም ፕሮክሲ አዘጋጅ"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"ፖሊሲ እስኪነቃ ድረስ ለመጠቀም የመሣሪያውን ሁሉንም ፕሮክሲ አዘጋጅ። የመጀመሪያው የመሣሪያ አስተዳደር ብቻ የሁሉንም ፕሮክሲ ያዘጋጃል።"</string>
- <!-- outdated translation 2314569545488269564 --> <string name="policylab_expirePassword" msgid="885279151847254056">"የይለፍ ቃል ጊዜ ማለፊያአዘጋጅ"</string>
- <!-- outdated translation 7276906351852798814 --> <string name="policydesc_expirePassword" msgid="4844430354224822074">"የማያቆልፍ ይለፍ ቃል ለመለወጥ ምንያ ህል ጊዜእስደሚያስፈልገው ተቆጣጠር"</string>
+ <string name="policylab_expirePassword" msgid="885279151847254056">"የማያቆልፍ ይለፍ ቃል ማብቂያ ጊዜ አዘጋጅ"</string>
+ <string name="policydesc_expirePassword" msgid="4844430354224822074">"የማያቆልፍ ይለፍ ቃል በምንያህል ጊዜተደጋግሞ መለወለወጥ እንዳለበት ተቆጣጠር"</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"ማከማቻ ማመስጠር አዘጋጅ"</string>
<string name="policydesc_encryptedStorage" msgid="2504984732631479399">"የተከማቸ ትግበራ ውሂብ መመስጠሩን ጠይቅ"</string>
- <!-- no translation found for policylab_disableCamera (6395301023152297826) -->
- <skip />
- <!-- no translation found for policydesc_disableCamera (5680054212889413366) -->
- <skip />
+ <string name="policylab_disableCamera" msgid="6395301023152297826">"ካሜራዎችን አቦዝን"</string>
+ <string name="policydesc_disableCamera" msgid="5680054212889413366">"የሁሉንም መሣሪያ ካሜራዎች ጥቅም ተከላከል"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"መነሻ"</item>
<item msgid="869923650527136615">"ተንቀሳቃሽ"</item>
@@ -822,61 +631,41 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"ስራ"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"ሌላ"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"PIN ኮድ አስገባ"</string>
- <!-- no translation found for keyguard_password_enter_puk_code (5965173481572346878) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_pin_prompt (2987350144349051286) -->
- <skip />
- <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
- <skip />
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"PUK እና አዲስ PIN ኮድ አስገባ"</string>
+ <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"የPUK ኮድ"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"አዲስ Pin ኮድ"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"ይለፍቃል ለማስገባት ንካ"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"ለመክፈት የይለፍ ቃል አስገባ"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"ለመክፈት PIN አስገባ"</string>
- <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
- <skip />
- <!-- no translation found for keyguard_label_text (861796461028298424) -->
- <skip />
- <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
- <skip />
+ <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"ትክክል ያልሆነ PIN ኮድ!"</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"ለመክፈት፣ምናሌ ተጫን ከዛ 0"</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"የአደጋ ጊዜቁጥር"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"ከአገልግሎት መስጫ ክልል ውጪ"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"ማሳያ ተቆልፏል።"</string>
- <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
- <skip />
- <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
- <skip />
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"ለመክፈት ምናሌ ተጫንወይም የአደጋ ጊዜ ጥሪ አድርግ።"</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"ለመክፈት ምናሌ ተጫን"</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"ለመክፈት ስርዓተ ጥለት ሳል"</string>
- <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
- <skip />
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"የአደጋ ጊዜ ጥሪ"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"ወደ ጥሪ ተመለስ"</string>
- <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
- <skip />
+ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"ትክክል!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"ይቅርታ፣ እንደገና ይሞክሩ"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"ይቅርታ፣ እንደገና ሞክር"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"ኃይል በመሙላት ላይ፣ <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"ኃይል ሞልቷል።"</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
- <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
- <skip />
+ <string name="lockscreen_low_battery" msgid="1482873981919249740">"ኃይል መሙያዎን ያያይዙ"</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"ምንም SIM ካርድ የለም"</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"በጡባዊ ውስጥ ምንም SIM ካርድ የለም።"</string>
- <!-- outdated translation 151659196095791474 --> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"በጡባዊ ውስጥ ምንም SIM ካርድ የለም።"</string>
- <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_instructions_long (7138450788301444298) -->
- <skip />
- <!-- no translation found for lockscreen_permanent_disabled_sim_instructions (1631853574702335453) -->
- <skip />
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"በስልክ ውስጥ ምንም SIM ካርድ የለም።"</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"እባክዎ SIM ካርድ ያስገቡ"</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"SIM ካርዱ ጠፍቷል ወይም መነበብ አይችልም።እባክዎ SIM ካርድ ያስገቡ።"</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"SIM ካርድዎ በቋሚነት ቦዝኗል።"\n" እባክዎ ሌላ SIM ካርድ ለማግኘት የገመድ አልባ አገልግሎት አቅራቢዎን ያግኙ።"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"የአደጋ ጊዜ ጥሪ ብቻ"</string>
- <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
- <skip />
- <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
- <skip />
+ <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_instructions" msgid="635967534992394321">"እባክዎ የተጠቃሚ መመሪያን ይመልከቱ ወይም የደንበኞች አገልግሎት ያግኙ።"</string>
- <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
- <skip />
- <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
- <skip />
+ <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_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">"የእርስዎን PIN<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>
@@ -886,24 +675,16 @@
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"ይህን ስልክ <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ከ <xliff:g id="NUMBER_1">%d</xliff:g> በላይ ያልተሳኩ ሙከራዎች በኋላ፣ ይህ ስልክ በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበርና ሁሉም የተጠቃሚው ውሂብ ይጠፋል፡፡"</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"ይህን tablet <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ይህ tablet አሁን በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበራል፡፡"</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ያህል በስህተት ለማስከፈት ሞክረሃል፡፡ ስልኩ አሁን በፋብሪካ ነባሪ ቅንጅት ዳግም ይቀናበራል፡፡"</string>
- <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
- <skip />
- <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
- <skip />
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"በ<xliff:g id="NUMBER">%d</xliff:g> ሰከንዶች ውስጥ እንደገና ሞክር።"</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"ስርዓተ ጥለት ረሱ?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"መለያ ክፈት"</string>
- <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
- <skip />
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"በጣም ብዙ የስርዓተ ጥለት ሙከራዎች!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"ለመክፈት በGoogle መለያዎ ይግቡ"</string>
- <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
- <skip />
+ <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>
+ <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"ትክክል ያልሆነየተጠቃሚ ሰም ወይም ይለፍቃል።"</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"የተጠቃሚ ስምዎን እና የይለፍ ቃልዎን ረሱ?"\n"google.com/accounts/recovery"<b>"ይጎብኙ"</b></string>
<string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"በፍተሻ ላይ..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"ክፈት"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ድምፅ አብራ"</string>
@@ -913,17 +694,14 @@
<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>
- <!-- no translation found for factorytest_failed (5410270329114212041) -->
- <skip />
+ <string name="factorytest_failed" msgid="5410270329114212041">"የፋብሪካሙከራ ተስኗል"</string>
<string name="factorytest_not_system" msgid="4435201656767276723">"የፋብሪካ_ ሙከራ ርምጃበ/system/app አካታች ውስጥ የተጫነ ብቻ ተደግፏል።"</string>
<string name="factorytest_no_action" msgid="872991874799998561">"የፋብሪካ_ሙከራ ርምጃ የሚያቀርብምንም አካታች አልተገኘም።"</string>
- <!-- no translation found for factorytest_reboot (6320168203050791643) -->
- <skip />
+ <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_default" msgid="6961903213729667573">"ጃቫስክሪፕት"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">" ከዚህ ገፅ ወጣ ብሎ ይዳስ?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n" ለመቀጠል እሺ ፣ወይም የአሁኑ ገፅ ላይ ለመቆየት ይቅር ምረጥ።"</string>
- <!-- no translation found for save_password_label (6860261758665825069) -->
- <skip />
+ <string name="save_password_label" msgid="6860261758665825069">"አረጋግጥ"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"ጠቃሚ ምክር፡ለማጉላት እና ለማሳነስ ነካ ነካ አድርግ።"</string>
<string name="autofill_this_form" msgid="1272247532604569872">"ራስ ሰር ሙላ"</string>
<string name="setup_autofill" msgid="8154593408885654044">"በራስሙላአዋቅር"</string>
@@ -931,30 +709,18 @@
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">"፣ "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <!-- no translation found for autofill_province (2231806553863422300) -->
- <skip />
- <!-- no translation found for autofill_postal_code (4696430407689377108) -->
- <skip />
- <!-- no translation found for autofill_state (6988894195520044613) -->
- <skip />
- <!-- no translation found for autofill_zip_code (8697544592627322946) -->
- <skip />
- <!-- no translation found for autofill_county (237073771020362891) -->
- <skip />
- <!-- no translation found for autofill_island (4020100875984667025) -->
- <skip />
- <!-- no translation found for autofill_district (8400735073392267672) -->
- <skip />
- <!-- no translation found for autofill_department (5343279462564453309) -->
- <skip />
- <!-- no translation found for autofill_prefecture (2028499485065800419) -->
- <skip />
- <!-- no translation found for autofill_parish (8202206105468820057) -->
- <skip />
- <!-- no translation found for autofill_area (3547409050889952423) -->
- <skip />
- <!-- no translation found for autofill_emirate (2893880978835698818) -->
- <skip />
+ <string name="autofill_province" msgid="2231806553863422300">"ክልል"</string>
+ <string name="autofill_postal_code" msgid="4696430407689377108">"የፖስታ ኮድ"</string>
+ <string name="autofill_state" msgid="6988894195520044613">"ክልል፡"</string>
+ <string name="autofill_zip_code" msgid="8697544592627322946">"ዚፕ ኮድ"</string>
+ <string name="autofill_county" msgid="237073771020362891">"ወረዳ"</string>
+ <string name="autofill_island" msgid="4020100875984667025">"ደሴት"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"ወረዳ"</string>
+ <string name="autofill_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>
+ <string name="autofill_emirate" msgid="2893880978835698818">"ኢሚሬት"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"የአሳሽ ታሪኮች እና ዕልባቶች አንብብ።"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"ትግበራው ማሰሻው የጎበኛቸውን ሁሉ URL ኦች፣ እና የማሰሻውን ዕልባቶች ሁሉ ለማንበብ ይፈቅዳል።"</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"የአሳሾች ታሪክ እና ዕልባቶች ፃፍ"</string>
@@ -970,37 +736,24 @@
<string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"ትግበራ ፓኬጅ መጫን የሚችል መሆኑን ለማረጋገጥ ይፈቅዳል።"</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"በፓኬጅ አረጋጋጭ የተወሰነ"</string>
<string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"የፓኬጅ አረጋጋጮችን ጥየቃ ለማድረግ ያዡ ይፈቅዳል። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
- <!-- no translation found for save_password_message (767344687139195790) -->
- <skip />
- <!-- no translation found for save_password_notnow (6389675316706699758) -->
- <skip />
- <!-- no translation found for save_password_remember (6491879678996749466) -->
- <skip />
- <!-- no translation found for save_password_never (8274330296785855105) -->
- <skip />
- <!-- no translation found for open_permission_deny (5661861460947222274) -->
- <skip />
- <!-- no translation found for text_copied (4985729524670131385) -->
- <skip />
- <!-- no translation found for more_item_label (4650918923083320495) -->
- <skip />
- <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
- <skip />
- <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
- <skip />
- <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
- <skip />
- <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
- <skip />
- <!-- no translation found for search_go (8298016669822141719) -->
- <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>
+ <string name="save_password_never" msgid="8274330296785855105">"በፍፁም"</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">"አሰገባ"</string>
+ <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"ሰርዝ"</string>
+ <string name="search_go" msgid="8298016669822141719">" ፈልግ"</string>
<string name="searchview_description_search" msgid="6749826639098512120">"ፈልግ"</string>
<string name="searchview_description_query" msgid="5911778593125355124">"ጥያቄ ፍለጋ"</string>
<string name="searchview_description_clear" msgid="1330281990951833033">"ጥያቄ አጥራ"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"ጥያቄ አስረክብ"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"የድምፅ ፍለጋ"</string>
- <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
- <skip />
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"ከ1 ወር በፊት"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"ከ1 ሰከንድ በፊት"</item>
@@ -1074,37 +827,22 @@
<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>
- <!-- no translation found for day (8144195776058119424) -->
- <skip />
- <!-- no translation found for days (4774547661021344602) -->
- <skip />
- <!-- no translation found for hour (2126771916426189481) -->
- <skip />
- <!-- no translation found for hours (894424005266852993) -->
- <skip />
- <!-- no translation found for minute (9148878657703769868) -->
- <skip />
- <!-- no translation found for minutes (5646001005827034509) -->
- <skip />
- <!-- no translation found for second (3184235808021478) -->
- <skip />
- <!-- no translation found for seconds (3161515347216589235) -->
- <skip />
- <!-- no translation found for week (5617961537173061583) -->
- <skip />
- <!-- no translation found for weeks (6509623834583944518) -->
- <skip />
- <!-- no translation found for year (4001118221013892076) -->
- <skip />
- <!-- no translation found for years (6881577717993213522) -->
- <skip />
- <!-- no translation found for VideoView_error_title (3359437293118172396) -->
- <skip />
+ <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="minutes" msgid="5646001005827034509">" ደቂቃዎች"</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>
- <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
- <skip />
- <!-- no translation found for VideoView_error_button (2822238215100679592) -->
- <skip />
+ <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>
<string name="Noon" msgid="3342127745230013127">"ቀትር"</string>
@@ -1112,53 +850,40 @@
<string name="Midnight" msgid="5630806906897892201">"እኩለ ሌሊት"</string>
<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>
- <!-- no translation found for selectAll (6876518925844129331) -->
- <skip />
- <!-- no translation found for cut (3092569408438626261) -->
- <skip />
- <!-- no translation found for copy (2681946229533511987) -->
- <skip />
- <!-- no translation found for paste (5629880836805036433) -->
- <skip />
+ <string name="selectAll" msgid="6876518925844129331">"ሁሉንም ምረጥ"</string>
+ <string name="cut" msgid="3092569408438626261">"ቁረጥ"</string>
+ <string name="copy" msgid="2681946229533511987">"ግላባጭ"</string>
+ <string name="paste" msgid="5629880836805036433">"ለጥፍ"</string>
<string name="replace" msgid="5781686059063148930">"ተካ???"</string>
<string name="delete" msgid="6098684844021697789">"ሰርዝ"</string>
- <!-- no translation found for copyUrl (2538211579596067402) -->
- <skip />
+ <string name="copyUrl" msgid="2538211579596067402">"የURL ቅጂ"</string>
<string name="selectTextMode" msgid="6738556348861347240">"ፅሁፍ ምረጥ"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"የፅሁፍ ምርጫ"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"ወደ መዝገበ ቃላት አክል"</string>
- <string name="inputMethod" msgid="1653630062304567879">"ግቤት ሜተድ"</string>
- <string name="editTextMenuTitle" msgid="4909135564941815494">"የፅሁፍ እርምጃዎች"</string>
- <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+ <!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"የጡባዊ ማከማቻ ቦታ እያነሰ ነው።"</string>
- <!-- outdated translation 4231085657068852042 --> <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"የጡባዊ ማከማቻ ቦታ እያነሰ ነው።"</string>
- <!-- no translation found for ok (5970060430562524910) -->
- <skip />
- <!-- no translation found for cancel (6442560571259935130) -->
- <skip />
- <!-- no translation found for yes (5362982303337969312) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
<skip />
- <!-- no translation found for no (5141531044935541497) -->
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
+ <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_text" product="tablet" msgid="4231085657068852042">"የጡባዊ ማከማቻ ቦታ እያነሰ ነው።"</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>
- <!-- no translation found for capital_on (1544682755514494298) -->
- <skip />
- <!-- no translation found for capital_off (6815870386972805832) -->
- <skip />
- <!-- no translation found for whichApplication (4533185947064773386) -->
- <skip />
- <!-- no translation found for alwaysUse (4583018368000610438) -->
- <skip />
- <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
- <skip />
- <!-- no translation found for chooseActivity (1009246475582238425) -->
- <skip />
- <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
- <skip />
- <!-- no translation found for noApplications (1691104391758345586) -->
- <skip />
+ <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>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"በመነሻ ቅንብሮች&gt; ትግበራዎች &gt; ትግበራዎች አደራጅ ውስጥ ነባሪዎችን አጥራ።"</string>
+ <string name="chooseActivity" msgid="1009246475582238425">"ድርጊት ምረጥ"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"ለUSB መሣሪያው ትግበራ ምረጥ።"</string>
+ <string name="noApplications" msgid="1691104391758345586">"ምንም ትግበራዎች ይህን ድርጊት ማከናወን አይችሉም።"</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"መጥፎ ዕድል ሆኖ፣ <xliff:g id="APPLICATION">%1$s</xliff:g> አቁሞዋል፡፡"</string>
<string name="aerr_process" msgid="4507058997035697579">"መጥፎ ዕድል ሆኖ፣ ይሄ ሂደት <xliff:g id="PROCESS">%1$s</xliff:g> ቆሞዋል፡፡"</string>
@@ -1169,17 +894,13 @@
<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 />
+ <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="android_upgrading_title" msgid="378740715658358071">"Android እያሻሻለ ነው..."</string>
@@ -1194,35 +915,26 @@
<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>
- <!-- no translation found for sendText (5132506121645618310) -->
- <skip />
- <!-- no translation found for volume_ringtone (6885421406845734650) -->
- <skip />
+ <string name="sendText" msgid="5132506121645618310">"ለፅሁፍ ድርጊት ምረጥ"</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">"በብሉቱዝ በኩል ማጫወት"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"የፀጥታ ጥሪድምፆች ተመርጠዋል"</string>
- <!-- no translation found for volume_call (3941680041282788711) -->
- <skip />
+ <string name="volume_call" msgid="3941680041282788711">"የጥሪ ላይ ድም ፅ መጨመሪያ/መቀነሻ"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"የብሉቱዝ የጥሪ ድምፅ"</string>
- <!-- no translation found for volume_alarm (1985191616042689100) -->
- <skip />
+ <string name="volume_alarm" msgid="1985191616042689100">"የማንቂያ ድምፅ መጠን"</string>
<string name="volume_notification" msgid="2422265656744276715">"ማሳወቂያ ክፍልፍል"</string>
- <!-- no translation found for volume_unknown (1400219669770445902) -->
- <skip />
+ <string name="volume_unknown" msgid="1400219669770445902">"የድምፅመጠን"</string>
<string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"የብሉቱዝ ድምፅ መጠን"</string>
<string name="volume_icon_description_ringer" msgid="3326003847006162496">"የስልክ ጥሪ ድምፅ መጠን"</string>
<string name="volume_icon_description_incall" msgid="8890073218154543397">"የስልክ ጥሪ ድምፅ መጠን"</string>
<string name="volume_icon_description_media" msgid="4217311719665194215">"የማህደረ መረጃ ክፍልፍል"</string>
<string name="volume_icon_description_notification" msgid="7044986546477282274">"የማሳወቂያ ክፍልፍል"</string>
- <!-- no translation found for ringtone_default (3789758980357696936) -->
- <skip />
- <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
- <skip />
- <!-- no translation found for ringtone_silent (4440324407807468713) -->
- <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>
+ <string name="ringtone_silent" msgid="4440324407807468713">"ፀጥታ"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"ጥሪ ድምፆች"</string>
- <!-- no translation found for ringtone_unknown (5477919988701784788) -->
- <skip />
+ <string name="ringtone_unknown" msgid="5477919988701784788">"ያልታወቀ የስልክ ጥሪ ድምፅ"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"የWi-Fi አውታረ መረብ አለ"</item>
<item quantity="other" msgid="4192424489168397386">"የWiFi አውታረ መረቦች አሉ"</item>
@@ -1233,64 +945,42 @@
</plurals>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ወደ Wi-Fi ለማያያዝ አልተቻለም"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" ደካማ የበይነመረብ ግንኙነት ኣለው፡፡"</string>
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
+ <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="1820097493844848281">"በቀጥታ Wi-Fi ማስጀመር አልተቻለም"</string>
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"ከ<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> የWi-Fi ቀጥታ ተያያዥ አዋቅር ጠይቅ። ለመቀበል እሺ ጠቅ አድርግ።"</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"ከ<xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g> የWi-Fi ቀጥታ አያይዝ አዋቅር ጠይቅ።ለመቀጠል 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>
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"የWi-Fi ቀጥታ በርቷል"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"ለቅንብሮች ንካ"</string>
<string name="select_character" msgid="3365550120617701745">"ቁምፊ አስገባ"</string>
- <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
- <skip />
- <!-- no translation found for sms_control_title (7296612781128917719) -->
- <skip />
+ <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>
- <!-- no translation found for sms_control_yes (2532062172402615953) -->
- <skip />
- <!-- no translation found for sms_control_no (1715320703137199869) -->
- <skip />
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
+ <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="2333164559970958645">"በትክክል የገባ SIM ካርድ ድጋሚ እስኪያስጀምሩ የተንቀሳቃሽ ስልክ አውታረመረብ አይገኝም።"</string>
- <!-- 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_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>
- <!-- no translation found for date_time_set (5777075614321087758) -->
- <skip />
- <!-- no translation found for default_permission_group (2690160991405646128) -->
- <skip />
- <!-- no translation found for no_permissions (7283357728219338112) -->
- <skip />
+ <string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
+ <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>
- <!-- no translation found for usb_storage_title (5901459041398751495) -->
- <skip />
+ <string name="usb_storage_title" msgid="5901459041398751495">"USB ተያይዟል"</string>
<string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"ኮምፒዩተርዎን በUSB በኩል አያይዘዋል።በኮምፒዩተርዎ እና በAndroid SD ማከማቻዎ መካከል ፋይሎች ለመቅዳት ከፈለጉከስርአዝራሩን ይንኩ።"</string>
<string name="usb_storage_message" product="default" msgid="4510858346516069238">"ኮምፒዩተርዎን በUSB በኩል አያይዘዋል።በኮምፒዩተርዎ እና በAndroid 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>
- <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
- <skip />
- <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
- <skip />
+ <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>
@@ -1302,16 +992,11 @@
<string name="dlg_confirm_kill_storage_users_text" msgid="3202838234780505886">"የUSB ማከማቻዎን ካበሩ፣ እየተጠቀሙባቸው ያሉ አንዳንድ ትግበራዎች ይቆማሉ እና የUSB ማከማቻ እስኪያጠፉ ድረስ ላይገኝ ይችላል።"</string>
<string name="dlg_error_title" msgid="7323658469626514207">"USB ክወና ስኬታማ አልነበረም"</string>
<string name="dlg_ok" msgid="7376953167039865701">"እሺ"</string>
- <!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
- <skip />
- <!-- no translation found for usb_ptp_notification_title (1960817192216064833) -->
- <skip />
- <!-- no translation found for usb_cd_installer_notification_title (6774712827892090754) -->
- <skip />
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
- <!-- no translation found for usb_notification_message (4447869605109736382) -->
- <skip />
+ <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_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>
@@ -1320,8 +1005,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"USB አድስ ተያይዟል"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"USB ማረሚያ ላለማንቃት ምረጥ።"</string>
<string name="select_input_method" msgid="6865512749462072765">"የግቤት ሜተድ ምረጥ"</string>
- <!-- no translation found for configure_input_methods (6324843080254191535) -->
- <skip />
+ <string name="configure_input_methods" msgid="6324843080254191535">"ግቤት ሜተዶችንአዋቀር"</string>
<string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="candidates_style" msgid="4333913089637062257"><u>"ዕጩዎች"</u></string>
@@ -1376,14 +1060,10 @@
<string name="accessibility_binding_label" msgid="4148120742096474641">"ተደራሽነት"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"ልጣፍ"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"ልጣፍ ለውጥ"</string>
- <!-- no translation found for vpn_title (8219003246858087489) -->
- <skip />
- <!-- no translation found for vpn_title_long (6400714798049252294) -->
- <skip />
- <!-- no translation found for vpn_text (1610714069627824309) -->
- <skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
- <skip />
+ <string name="vpn_title" msgid="8219003246858087489">"VPN ገብሯል።"</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"VPN በ<xliff:g id="APP">%s</xliff:g>ገብሯል"</string>
+ <string name="vpn_text" msgid="1610714069627824309">"አውታረመረብ ለማደራጀት ሁለቴ ንካ።"</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"ለ<xliff:g id="SESSION">%s</xliff:g> የተገናኘ። አውታረመረቡን ለማደራጀት ሁለቴ ንካ።"</string>
<string name="upload_file" msgid="2897957172366730416">"ፋይል ምረጥ"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"ምንም ፋይል አልተመረጠም"</string>
<string name="reset" msgid="2448168080964209908">"ዳግም አስጀምር"</string>
@@ -1432,12 +1112,15 @@
<string name="sync_really_delete" msgid="8933566316059338692">"አይነቶቹን ሰርዝ"</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"ስርዞቹን ቀልብስ።"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"ለአሁን ምንም አታድርግ።"</string>
- <!-- no translation found for choose_account_label (4191313562041125787) -->
+ <string name="choose_account_label" msgid="4191313562041125787">"መለያ ምረጥ"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"ጨምር"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"ቀንስ"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> አንዴ ንካ እና ያዝ"</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"ለመጨመር ወደላይ ለመቀነስ ወደታች አንሸራት"</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"ደቂቃዎች ጨምር"</string>
@@ -1477,30 +1160,21 @@
<string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string>
<string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string>
<string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"አዝራር፡፡ ይለፍቃል እየተየብክ አዝራሮችን ለመስማት ማዳመጫ መሳሪያ ያስፈልጋል፡፡"</string>
- <!-- no translation found for action_bar_home_description (5293600496601490216) -->
- <skip />
- <!-- no translation found for action_bar_up_description (2237496562952152589) -->
- <skip />
- <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
- <skip />
- <!-- no translation found for storage_internal (7556050805474115618) -->
- <skip />
- <!-- no translation found for storage_sd_card (8921771478629812343) -->
- <skip />
- <!-- no translation found for storage_usb (3017954059538517278) -->
- <skip />
- <!-- no translation found for extract_edit_menu_button (302060189057163906) -->
- <skip />
- <!-- no translation found for data_usage_warning_title (1955638862122232342) -->
- <skip />
- <!-- no translation found for data_usage_warning_body (3354394590936526648) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_title (7636489436819470761) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
- <skip />
+ <string name="action_bar_home_description" msgid="5293600496601490216">"መነሻ ዳስስ"</string>
+ <string name="action_bar_up_description" msgid="2237496562952152589">"አስስ"</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">"ተጨማሪ አማራጮች"</string>
+ <string name="storage_internal" msgid="7556050805474115618">"የውስጥ ማከማቻ"</string>
+ <string name="storage_sd_card" msgid="8921771478629812343">"የSD ካርድ"</string>
+ <string name="storage_usb" msgid="3017954059538517278">"የUSB ማከማቻ"</string>
+ <string name="extract_edit_menu_button" msgid="302060189057163906">"አርትእ..."</string>
+ <string name="data_usage_warning_title" msgid="1955638862122232342">"የውሂብ አጠቃቀም ማስጠንቀቂየ"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
+ <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_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi ውሂብ ቦዝኗል"</string>
<string name="data_usage_limit_body" msgid="4313857592916426843">"ለማንቃት ንካ"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G የውሂብ ወሰን አልፏል"</string>
@@ -1510,41 +1184,23 @@
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ከተወሰነለት በላይ"</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"በስተጀርባ ውሂብ የተገደበ ነው"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"ገደብ ለማስወገድ ንካ"</string>
- <!-- no translation found for ssl_certificate (6510040486049237639) -->
- <skip />
- <!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
- <skip />
- <!-- no translation found for issued_to (454239480274921032) -->
- <skip />
- <!-- no translation found for common_name (2233209299434172646) -->
- <skip />
- <!-- no translation found for org_name (6973561190762085236) -->
- <skip />
- <!-- no translation found for org_unit (7265981890422070383) -->
- <skip />
- <!-- no translation found for issued_by (2647584988057481566) -->
- <skip />
- <!-- no translation found for validity_period (8818886137545983110) -->
- <skip />
- <!-- no translation found for issued_on (5895017404361397232) -->
- <skip />
- <!-- no translation found for expires_on (3676242949915959821) -->
- <skip />
- <!-- no translation found for serial_number (758814067660862493) -->
- <skip />
- <!-- no translation found for fingerprints (4516019619850763049) -->
- <skip />
- <!-- no translation found for sha256_fingerprint (4391271286477279263) -->
- <skip />
- <!-- no translation found for sha1_fingerprint (7930330235269404581) -->
- <skip />
- <!-- no translation found for activity_chooser_view_see_all (180268188117163072) -->
- <skip />
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="ssl_certificate" msgid="6510040486049237639">"የደህንነት ዕውቅና ማረጋገጫ"</string>
+ <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"ይህ የዐዕውቅና ማረጋገጫ ትክክል ነው።"</string>
+ <string name="issued_to" msgid="454239480274921032">"ለ፡ ተዘጋጀ"</string>
+ <string name="common_name" msgid="2233209299434172646">"መጠሪያ ስም፡"</string>
+ <string name="org_name" msgid="6973561190762085236">"መስርያ ቤት:"</string>
+ <string name="org_unit" msgid="7265981890422070383">"ድርጅታዊ አሃድ፡"</string>
+ <string name="issued_by" msgid="2647584988057481566">"በ፡ የተዘጋጀ"</string>
+ <string name="validity_period" msgid="8818886137545983110">"ትክክለኝነት፡"</string>
+ <string name="issued_on" msgid="5895017404361397232">"በ፡ ተዘጋጀ"</string>
+ <string name="expires_on" msgid="3676242949915959821">"በ፡ ጊዜው ያልፋል"</string>
+ <string name="serial_number" msgid="758814067660862493">"መለያ ቁጥር"</string>
+ <string name="fingerprints" msgid="4516019619850763049">"የጣት አሻራዎች፡"</string>
+ <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 የጣት አሻራ፡"</string>
+ <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 የጣት አሻራ፡"</string>
+ <string name="activity_chooser_view_see_all" msgid="180268188117163072">"ሁሉንም ይዩ..."</string>
+ <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="list_delimeter" msgid="3975117572185494152">"፣ "</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 1f5940b8d79d..0386ab484634 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"تحديد نص..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ إضافة إلى القاموس"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"طريقة الإرسال"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"إجراءات النص"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"المساحة منخفضة"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"تم تشغيل اتصال Wi-Fi المباشر"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"المس للحصول على الإعدادات"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"التراجع عن عمليات الحذف"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"عدم تنفيذ أي شيء الآن"</string>
<string name="choose_account_label" msgid="4191313562041125787">"حدد حسابًا."</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"زيادة"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"تناقص"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> انقر مع الاستمرار."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"وحدة تخزين USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"تعديل..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"تحذير استخدام البيانات"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"يتجاوز الاستخدام <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 49f13b3680a4..c55322be1eff 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -861,7 +861,9 @@
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избиране на текст"</string>
<!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <!-- no translation found for addToDictionary (2839899368418071843) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
<string name="inputMethod" msgid="1653630062304567879">"Метод на въвеждане"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Действия с текста"</string>
@@ -949,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct е включено"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Докоснете за настройки"</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>
@@ -1113,36 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Отмяна на изтриванията."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Да не се прави нищо засега."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор на профил"</string>
- <string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличаване"</string>
- <string name="number_picker_decrement_button" msgid="2576606679160067262">"Намаляване"</string>
- <!-- no translation found for number_picker_increment_scroll_mode (1343063395404990189) -->
- <skip />
- <!-- no translation found for number_picker_increment_scroll_action (4628981789985093179) -->
- <skip />
- <!-- no translation found for time_picker_increment_minute_button (2843066823236250329) -->
- <skip />
- <!-- no translation found for time_picker_decrement_minute_button (4357907223628449595) -->
- <skip />
- <!-- no translation found for time_picker_increment_hour_button (2484204991937119057) -->
- <skip />
- <!-- no translation found for time_picker_decrement_hour_button (4659353501775842780) -->
- <skip />
- <!-- no translation found for time_picker_increment_set_pm_button (4147590696151230863) -->
- <skip />
- <!-- no translation found for time_picker_decrement_set_am_button (8302140353539486752) -->
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for date_picker_increment_month_button (6324978841467899081) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for date_picker_decrement_month_button (7304349355000398077) -->
- <skip />
- <!-- no translation found for date_picker_increment_day_button (4397040141921413183) -->
- <skip />
- <!-- no translation found for date_picker_decrement_day_button (2427816793443629131) -->
- <skip />
- <!-- no translation found for date_picker_increment_year_button (3058553394722295105) -->
- <skip />
- <!-- no translation found for date_picker_decrement_year_button (5193062846559743823) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличаване"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Намаляване"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Докоснете <xliff:g id="VALUE">%s</xliff:g> път/и и задръжте."</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Плъзнете нагоре за увеличаване и надолу за намаляване."</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Увеличаване на минутите"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Намаляване на минутите"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"Увеличаване на часа"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"Намаляване на часа"</string>
+ <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Задаване на PM"</string>
+ <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Задаване на AM"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"Увеличаване на месеца"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"Намаляване на месеца"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"Увеличаване на деня"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"Намаляване на деня"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"Увеличаване на годината"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"Намаляване на годината"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"отметнато"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"не е отметнато"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"избрано"</string>
@@ -1159,14 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Плъзгаща се дръжка. Докоснете и задръжте."</string>
- <!-- no translation found for description_direction_up (1983114130441878529) -->
- <skip />
- <!-- no translation found for description_direction_down (4294993639091088240) -->
- <skip />
- <!-- no translation found for description_direction_left (6814008463839915747) -->
- <skip />
- <!-- no translation found for description_direction_right (4296057241963012862) -->
- <skip />
+ <string name="description_direction_up" msgid="1983114130441878529">"Нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"Надолу за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"Наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"Надясно за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_target_unlock" msgid="2228524900439801453">"Отключване"</string>
<string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
<string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string>
@@ -1180,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB хранилище"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Редактиране..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Предупрежд. за ползване на данни"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"използването надвишава <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index dd6363833f70..1ee5c74eea8e 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -859,7 +859,8 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ afegeix al diccionari"</string>
+ <string name="addToDictionary" msgid="9090375111134433012">"afegeix al diccionari"</string>
+ <string name="deleteText" msgid="7070985395199629156">"suprimeix"</string>
<string name="inputMethod" msgid="1653630062304567879">"Mètode d\'entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Accions de text"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Queda poc espai"</string>
@@ -1108,6 +1109,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Desfés les supressions."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No facis res de moment."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecciona un compte"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminueix"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> mantén premut."</string>
@@ -1157,7 +1164,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Emmagatzematge USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edita..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advertiment d\'ús de dades"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"l\'ús supera <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Toca per veure l\'ús i la configuració"</string>
<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>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index ba0454e1fc9e..2190b7ec2e7f 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ přidat do slovníku"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Metoda zadávání dat"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Operace s textem"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Málo paměti"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Přímé připojení sítě Wi-Fi je zapnuto"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Nastavení otevřete dotykem"</string>
<string name="select_character" msgid="3365550120617701745">"Vkládání znaků"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Neznámá aplikace"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Odesílání zpráv SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Vrátit mazání zpět."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Neprovádět akci."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrat účet"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšení"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Snížení"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> – Klepněte a podržte."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Úložiště USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Upravit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozornění na využití dat"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"Objem přenesených dat přesahuje <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 1fd9de5f7e8e..f5a984630c25 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopier webadresse"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstmarkering"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ føj til ordbog"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Inputmetode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksthandlinger"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Der er ikke så meget plads tilbage"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct er slået til"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tryk for indstillinger"</string>
<string name="select_character" msgid="3365550120617701745">"Indsæt tegn"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ukendt applikation"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Sender sms-beskeder"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Fortryd sletningerne."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Gør ikke noget lige nu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vælg en konto"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Optælling"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Nedtælling"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tryk og hold <xliff:g id="VALUE">%s</xliff:g> nede."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lager"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediger..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advarsel om dataforbrug"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"forbruget overstiger <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index fb837a89f5e2..d376fd92bfb3 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -229,7 +229,7 @@
<string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"Ermöglicht einer App, den Inhalt des aktiven Fensters abzurufen. Schädliche Apps können den gesamten Fensterinhalt abrufen und mit Ausnahme von Passwörtern den gesamten Text auswerten."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"partielles Herunterfahren"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Versetzt den Aktivitätsmanager in einen heruntergefahrenen Zustand. Führt kein vollständiges Herunterfahren aus."</string>
- <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"Anwendungswechsel verhindern"</string>
+ <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"App-Wechsel verhindern"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Hindert den Nutzer daran, zu einer anderen Anwendung zu wechseln"</string>
<string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"Start von Apps überwachen und steuern"</string>
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Ermöglicht der App, den Start von Systemaktivitäten zu überwachen und zu steuern. Schädliche Anwendungen können so das gesamte System beeinträchtigen. Diese Berechtigung wird nur zu Entwicklungszwecken und nie für die normale Nutzung benötigt."</string>
@@ -373,7 +373,7 @@
<string name="permlab_asec_create" msgid="6414757234789336327">"Internen Speicher erstellen"</string>
<string name="permdesc_asec_create" msgid="2621346764995731250">"Ermöglicht der App, einen internen Speicher zu erstellen."</string>
<string name="permlab_asec_destroy" msgid="526928328301618022">"Internen Speicher vernichten"</string>
- <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Ermöglicht der App, den internen Speicher zu vernichten."</string>
+ <string name="permdesc_asec_destroy" msgid="2746706889208066256">"Ermöglicht der App, den internen Speicher zu vernichten"</string>
<string name="permlab_asec_mount_unmount" msgid="2456287623689029744">"Internen Speicher bereitstellen/trennen"</string>
<string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Ermöglicht der App, internen Speicher bereitzustellen bzw. zu trennen."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"Internen Speicher umbenennen"</string>
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"URL kopieren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Text auswählen..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textauswahl"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"Zum Wörterbuch hinzufügen"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Eingabemethode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Textaktionen"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Geringer Speicher"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct ist aktiviert."</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Zum Aufrufen der Einstellungen berühren"</string>
<string name="select_character" msgid="3365550120617701745">"Zeichen einfügen"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Unbekannte App"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Kurznachrichten werden gesendet"</string>
@@ -1110,22 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Löschen rückgängig machen"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Im Moment nichts unternehmen"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Konto auswählen"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Erhöhen"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Verringern"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tippen und halten"</string>
- <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Zum Erhöhen nach oben und zum Verringern nach unten ziehen"</string>
- <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Minute erhöhen"</string>
- <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Minute verringern"</string>
- <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"Stunde erhöhen"</string>
- <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"Stunde verringern"</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Zum Vorstellen nach oben und zum Zurückstellen nach unten ziehen"</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Minute vorstellen"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Minute zurückstellen"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"Stunde vorstellen"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"Stunde zurückstellen"</string>
<string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Zeit festlegen"</string>
<string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Zeit festlegen (Vormittag)"</string>
- <string name="date_picker_increment_month_button" msgid="6324978841467899081">"Monat erhöhen"</string>
- <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"Monat verringern"</string>
- <string name="date_picker_increment_day_button" msgid="4397040141921413183">"Tag erhöhen"</string>
- <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"Tag verringern"</string>
- <string name="date_picker_increment_year_button" msgid="3058553394722295105">"Jahr erhöhen"</string>
- <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"Jahr verringern"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"Monat vorstellen"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"Monat zurückstellen"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"Tag vorstellen"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"Tag zurückstellen"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"Jahr vorstellen"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"Jahr zurückstellen"</string>
<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>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-Speicher"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Bearbeiten..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Warnung zu Datennutzung"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"Datennutzung liegt über <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index bcbf8fe1a8cb..601a0545f425 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Αντιγραφή διεύθυνσης URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Επιλογή κειμένου..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Επιλογή κειμένου"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ προσθήκη στο λεξικό"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Μέθοδος εισόδου"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Ενέργειες κειμένου"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Απομένει λίγος ελεύθερος χώρος"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Το Wi-Fi Direct έχει ενεργοποιηθεί"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Αγγίξτε για ρυθμίσεις"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Αναίρεση των διαγραφών."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Να μην γίνει καμία ενέργεια τώρα."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Επιλογή λογαριασμού"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Αύξηση"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Μείωση"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Πατήστε και κρατήστε πατημένο το <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Χώρος αποθήκευσης USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Επεξεργασία..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Προειδοποίηση χρήσης δεδομένων"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"η χρήση υπερβαίνει τα <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 261983efaa0e..82e97e00a0e4 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -859,7 +859,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copy URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Select text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Text selection"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ add to dictionary"</string>
+ <string name="addToDictionary" msgid="9090375111134433012">"add to dictionary"</string>
+ <string name="deleteText" msgid="7070985395199629156">"delete"</string>
<string name="inputMethod" msgid="1653630062304567879">"Input method"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Text actions"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Low on space"</string>
@@ -1108,6 +1109,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Undo the deletions."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Do nothing for now."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Select an account"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Increment"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrement"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tap and hold."</string>
@@ -1157,7 +1164,7 @@
<string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Data usage warning"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"usage exceeds <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Touch to view usage and settings"</string>
<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>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 76cde96c8089..721b0c722f90 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ agregar al diccionario"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acciones de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Poco espacio de almacenamiento"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Haz clic en Aceptar."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Solicitud de configuración de conexión de Wi-Fi Direct desde <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ingresa el PIN para continuar."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Debes introducir el PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> en el otro dispositivo <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> para continuar con la configuración de conexión."</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Se activó Wi-Fi Direct."</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tocar para ajustar los parámetros de configuració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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Deshacer eliminaciones."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No hagas nada por el momento."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Decremento"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Mantenga presionado <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1142,10 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayúscula"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingresar"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Asidero deslizante (tocar y mantener la presión)"</string>
- <string name="description_direction_up" msgid="1983114130441878529">"Hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
- <string name="description_direction_down" msgid="4294993639091088240">"Hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
- <string name="description_direction_left" msgid="6814008463839915747">"Hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
- <string name="description_direction_right" msgid="4296057241963012862">"Hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_up" msgid="1983114130441878529">"Hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"Hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"Hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"Hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
<string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string>
<string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advertencia de uso de datos"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"el uso supera <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 8c88ccab346d..dc3a630a6ae3 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ añadir al diccionario"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Método de introducción de texto"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acciones de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Poco espacio"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct activado"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Toca para acceder a Ajustes"</string>
<string name="select_character" msgid="3365550120617701745">"Insertar carácter"</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>
@@ -1110,9 +1113,15 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Deshacer las eliminaciones"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"No hacer nada por ahora"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar una cuenta"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Disminuir"</string>
- <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Mantén pulsado <xliff:g id="VALUE">%s</xliff:g>."</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Mantén pulsado <xliff:g id="VALUE">%s</xliff:g>"</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Desliza el dedo hacia arriba para aumentar y hacia abajo para disminuir."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Aumentar minuto"</string>
<string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Disminuir minuto"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Almacenamiento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advertencia de uso de datos"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"uso supera <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 49dab5689395..d40c6d777671 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"انتخاب متن..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ افزودن به فرهنگ لغت"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"روش ورودی"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"عملکردهای متنی"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"فضا کم است"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct روشن است"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"لمس کردن برای تنظیمات"</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>
@@ -1110,22 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"لغو موارد حذف شده."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"اکنون هیچ کاری انجام نشود."</string>
<string name="choose_account_label" msgid="4191313562041125787">"انتخاب یک حساب"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"افزایش"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"کاهش"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ضربه بزنید و نگه دارید."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"برای افزایش به بالا و برای کاهش به پایین بلغزانید."</string>
- <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"دقیقه افزایشی"</string>
- <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"دقیقه کاهشی"</string>
- <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"ساعت افزایشی"</string>
- <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"ساعت کاهشی"</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">" افزایش دقیقه"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"کاهش دقیقه"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"افزایش ساعت"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"کاهش ساعت"</string>
<string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"تنظیم ب.ظ"</string>
<string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"تنظیم ق.ظ"</string>
<string name="date_picker_increment_month_button" msgid="6324978841467899081">"ماه افزایشی"</string>
- <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"ماه کاهشی"</string>
- <string name="date_picker_increment_day_button" msgid="4397040141921413183">"روز افزایشی"</string>
- <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"روز کاهشی"</string>
- <string name="date_picker_increment_year_button" msgid="3058553394722295105">"سال افزایشی"</string>
- <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"سال کاهشی"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"کاهش ماه"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"افزایش روز"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"کاهش روز"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"افزایش سال"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"کاهش سال"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"علامت زده"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"بدون علامت"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"انتخاب شد"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"حافظه USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"ویرایش..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"هشدار میزان استفاده از داده"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"استفاده از <xliff:g id="SIZE">%s</xliff:g> بیشتر شده است"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 9d8c0a882ac8..1462df4b1eec 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ lisää sanakirjaan"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Syöttötapa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tekstitoiminnot"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Tila vähissä"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Hyväksy valitsemalla OK."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Suoran wifi-yhteyden muodostuspyyntö osoitteesta <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Jatka antamalla PIN-koodi."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"WPS-PIN-koodi <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> tulee merkitä vertaislaitteeseen <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>, jotta yhteyden muodostamista voidaan jatkaa"</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct on käytössä"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tarkastele asetuksia koskettamalla"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Kumoa poistot."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Älä tee mitään."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Valitse tili"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Lisää"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Vähennä"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> kosketa pitkään."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-tallennustila"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Muokkaa..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Tiedonsiirtovaroitus"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"käyttö ylittää <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 96b2a7ab2457..c5e692b9013f 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ ajouter au dictionnaire"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Mode de saisie"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Actions sur le texte"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Espace disponible faible"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct activé"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Appuyez pour accéder aux paramètres."</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Annuler les suppressions"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ne rien faire pour l\'instant"</string>
<string name="choose_account_label" msgid="4191313562041125787">"Sélectionner un compte"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Augmenter"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuer"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> appuyez de manière prolongée."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Mémoire de stockage USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Modifier..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Avertissement utilisation données"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"plus de <xliff:g id="SIZE">%s</xliff:g> utilisés"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 69c77f47ddb3..ab6eb932d471 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Odabir teksta..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Odabir teksta"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ dodaj u rječnik"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Način unosa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Radnje s tekstom"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Prostora ima sve manje"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Zahtjev za postavljanje izravne Wi-Fi veze od <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknite \"U redu\" za potvrdu."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Zahtjev za postavljanje izravne Wi-Fi veze s <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Unesite PIN da biste nastavili."</string>
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct uključen"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Dodirnite za postavke"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Poništi brisanja."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Za sad nemoj ništa učiniti."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Odaberite račun"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povećaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Smanji"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> dotaknite i držite."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB pohrana"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Uređivanje..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozorenje o upotrebi podataka"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"upotreba prelazi <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index b377f667bad3..3e2ae7f35324 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ hozzáadás a szótárhoz"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Beviteli mód"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Műveletek szöveggel"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Kevés a hely"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Wi-Fi Direct kapcsolódási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Az elfogadáshoz kattintson az OK gombra."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Wi-Fi Direct csatlakoztatási kérés a következőtől: <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Adja meg a PIN-kódot a folytatáshoz."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"A csatlakoztatás folytatásához be kell írni a(z) <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> WPS PIN-kódot a partnereszközön (<xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>)"</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"A Wi-Fi Direct be van kapcsolva"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"A beállításokhoz érintse meg"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Törlés visszavonása."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Most nem."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Fiók kiválasztása"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Növelés"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Csökkentés"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> érintse meg és tartsa"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-tár"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Szerkesztés..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Adathasználati figyelmeztetés"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"Túllépte ezt a méretet: <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index bcf14d3ce66c..aea1a4c6f8f8 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -344,8 +344,8 @@
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Sumber lokasi kualitas tinggi akses seperti Sistem Penentuan Posisi Global pada tablet, jika tersedia. Aplikasi berbahaya dapat menggunakan ini untuk menentukan perkiraan lokasi Anda, dan dapat menyedot daya baterai."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Akses sumber lokasi detail seperti GPS pada ponsel, jika tersedia. Aplikasi hasad dapat menggunakan ini untuk menentukan lokasi Anda, dapat menguras daya baterai."</string>
<string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"lokasi sementara (berdasarkan jaringan)"</string>
- <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Sumber lokasi sementara akses seperti database jaringan seluler untuk menentukan perkiraan lokasi tablet, jika tersedia. Aplikasi berbahaya dapat menggunakan ini untuk menentukan perkiraan lokasi Anda."</string>
- <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Akses sumber lokasi sementara seperti database jaringan seluler untuk menentukan lokasi ponsel terdekat, jika ada. Aplikasi hasad dapat menggunakan ini untuk memperkirakan lokasi Anda."</string>
+ <string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Sumber lokasi sementara akses seperti basis data jaringan seluler untuk menentukan perkiraan lokasi tablet, jika tersedia. Aplikasi berbahaya dapat menggunakan ini untuk menentukan perkiraan lokasi Anda."</string>
+ <string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Akses sumber lokasi sementara seperti basis data jaringan seluler untuk menentukan lokasi ponsel terdekat, jika ada. Aplikasi hasad dapat menggunakan ini untuk memperkirakan lokasi Anda."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"akses SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Izinkan aplikasi menggunakan fitur tingkat rendah SurfaceFlinger."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca buffer frame"</string>
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ tambahkan ke kamus"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Metode masukan"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tindakan teks"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Ruang penyimpanan tinggal sedikit"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Langsung aktif"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Sentuh untuk setelan"</string>
<string name="select_character" msgid="3365550120617701745">"Sisipkan huruf"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenal"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Mengirim pesan SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Urungkan penghapusan."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Jangan lakukan apa pun untuk saat ini."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akun"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Penambahan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Pengurangan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ketuk dan tahan."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Penyimpanan USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Peringatan penggunaan data"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"penggunaan melebihi <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d7c923721c74..419caf40e09e 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -859,7 +859,8 @@
<string name="copyUrl" msgid="2538211579596067402">"Copia URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Seleziona testo..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selezione testo"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ aggiungi al dizionario"</string>
+ <string name="addToDictionary" msgid="9090375111134433012">"aggiungi al dizionario"</string>
+ <string name="deleteText" msgid="7070985395199629156">"elimina"</string>
<string name="inputMethod" msgid="1653630062304567879">"Metodo inserimento"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Azioni testo"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Spazio in esaurimento"</string>
@@ -1108,6 +1109,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Annulla le eliminazioni."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Non fare nulla per ora."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleziona un account"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumenta"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuisci"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tocca e tieni premuto il numero <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1157,7 +1164,7 @@
<string name="storage_usb" msgid="3017954059538517278">"Archivio USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Modifica..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Avviso sull\'utilizzo dei dati"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"l\'utilizzo supera <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <string name="data_usage_warning_body" msgid="7217480745540055170">"Mostra utilizzo e impostazioni"</string>
<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>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 08f84c0863d8..c0c1695a4bc1 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
<string name="selectTextMode" msgid="6738556348861347240">"בחר טקסט..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"בחירת טקסט"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ הוסף למילון"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"שיטת קלט"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"פעולות טקסט"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"חסר שטח"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi ישיר מופעל"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"גע עבור הגדרות"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"בטל את המחיקות."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"אל תעשה דבר בינתיים."</string>
<string name="choose_account_label" msgid="4191313562041125787">"בחר חשבון"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"הגדל"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"הפחת"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> הקש והחזק."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"אמצעי אחסון מסוג USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"ערוך..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"אזהרת שימוש בנתונים"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"השימוש חורג מ-<xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index f5a30e84740f..793e947822db 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -861,7 +861,9 @@
<string name="textSelectionCABTitle" msgid="5236850394370820357">"テキスト選択"</string>
<!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <!-- no translation found for addToDictionary (2839899368418071843) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
<string name="inputMethod" msgid="1653630062304567879">"入力方法"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"テキスト操作"</string>
@@ -949,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi DirectはONです"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"設定を表示するにはタップしてください"</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>
@@ -1113,36 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"削除を元に戻す"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"今は何もしない"</string>
<string name="choose_account_label" msgid="4191313562041125787">"アカウントを選択"</string>
- <string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
- <string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
- <!-- no translation found for number_picker_increment_scroll_mode (1343063395404990189) -->
- <skip />
- <!-- no translation found for number_picker_increment_scroll_action (4628981789985093179) -->
- <skip />
- <!-- no translation found for time_picker_increment_minute_button (2843066823236250329) -->
- <skip />
- <!-- no translation found for time_picker_decrement_minute_button (4357907223628449595) -->
- <skip />
- <!-- no translation found for time_picker_increment_hour_button (2484204991937119057) -->
- <skip />
- <!-- no translation found for time_picker_decrement_hour_button (4659353501775842780) -->
- <skip />
- <!-- no translation found for time_picker_increment_set_pm_button (4147590696151230863) -->
- <skip />
- <!-- no translation found for time_picker_decrement_set_am_button (8302140353539486752) -->
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for date_picker_increment_month_button (6324978841467899081) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for date_picker_decrement_month_button (7304349355000398077) -->
- <skip />
- <!-- no translation found for date_picker_increment_day_button (4397040141921413183) -->
- <skip />
- <!-- no translation found for date_picker_decrement_day_button (2427816793443629131) -->
- <skip />
- <!-- no translation found for date_picker_increment_year_button (3058553394722295105) -->
- <skip />
- <!-- no translation found for date_picker_decrement_year_button (5193062846559743823) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"増やす"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"減らす"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g>回タップして押し続けます。"</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"上にスライドで大きく、下にスライドで小さくなります。"</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"1分進める"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"1分戻す"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"1時間進める"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"1時間戻す"</string>
+ <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"午後に設定"</string>
+ <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"午前に設定"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"1か月進める"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"1か月戻す"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"1日進める"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"1日戻す"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"1年進める"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"1年戻す"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"ON"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"OFF"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"ON"</string>
@@ -1159,14 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"スライダーハンドルです。タップして押し続けます。"</string>
- <!-- no translation found for description_direction_up (1983114130441878529) -->
- <skip />
- <!-- no translation found for description_direction_down (4294993639091088240) -->
- <skip />
- <!-- no translation found for description_direction_left (6814008463839915747) -->
- <skip />
- <!-- no translation found for description_direction_right (4296057241963012862) -->
- <skip />
+ <string name="description_direction_up" msgid="1983114130441878529">"上は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"下は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"左は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"右は<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>です。"</string>
<string name="description_target_unlock" msgid="2228524900439801453">"ロックを解除"</string>
<string name="description_target_camera" msgid="969071997552486814">"カメラ"</string>
<string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string>
@@ -1180,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USBストレージ"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"編集..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"データ使用の警告"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"使用が<xliff:g id="SIZE">%s</xliff:g>を超えています"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 73ddd03580ff..42a6e3715c91 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"URL 복사"</string>
<string name="selectTextMode" msgid="6738556348861347240">"텍스트 선택..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"텍스트 선택"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"사전에 추가"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"입력 방법"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"텍스트 작업"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"저장공간 부족"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct 켜짐"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"설정으로 이동하려면 터치하세요."</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"삭제 실행취소"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"나중에 작업"</string>
<string name="choose_account_label" msgid="4191313562041125787">"계정 선택"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"올리기"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"줄이기"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> 길게 탭하세요."</string>
@@ -1142,10 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 키"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 키"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"슬라이딩 핸들을 길게 탭하세요."</string>
- <string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> 방향으로 위"</string>
- <string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> 방향으로 아래"</string>
- <string name="description_direction_left" msgid="6814008463839915747">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> 방향으로 왼쪽"</string>
- <string name="description_direction_right" msgid="4296057241963012862">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> 방향으로 오른쪽"</string>
+ <string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 아래로 슬라이드"</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 오른쪽으로 슬라이드"</string>
<string name="description_target_unlock" msgid="2228524900439801453">"잠금 해제"</string>
<string name="description_target_camera" msgid="969071997552486814">"카메라"</string>
<string name="description_target_silent" msgid="893551287746522182">"무음"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 저장소"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"수정..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"데이터 사용 경고"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"사용량이 <xliff:g id="SIZE">%s</xliff:g>을(를) 초과했습니다."</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index a366b6077909..3a3011437444 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopijuoti URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pasirinkti tekstą..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksto pasirinkimas"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ pridėti prie žodyno"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Įvesties būdas"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksto veiksmai"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mažai vietos"</string>
@@ -1108,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anuliuoti ištrynimus."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Kol kas nieko nedaryti."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pasirinkti paskyrą"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Padidinti"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Sumažinti"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Palieskite <xliff:g id="VALUE">%s</xliff:g> ir laikykite palietę."</string>
@@ -1157,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB atmintis"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Redaguoti..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Įspėjimas dėl duomenų naudojimo"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"naudojimas viršija <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index efedb8625d17..e9a01e99d86a 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ pievienot vārdnīcai"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Ievades metode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksta darbības"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Maz brīvas vietas"</string>
@@ -1108,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Atsauciet dzēšanu."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Pagaidām neveiciet nekādas darbības."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Atlasīt kontu"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Palielināt"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Samazināt"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g>: pieskarieties un turiet nospiestu."</string>
@@ -1157,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB atmiņa"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediģēt..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Datu izmantošanas brīdinājums"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"izmant. datu apj. pārsniedz <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-mcc204/strings.xml b/core/res/res/values-mcc204/strings.xml
index c3fff3d6df81..134e9d2007cb 100644
--- a/core/res/res/values-mcc204/strings.xml
+++ b/core/res/res/values-mcc204/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">nl_nl</string>
</resources>
diff --git a/core/res/res/values-mcc230/strings.xml b/core/res/res/values-mcc230/strings.xml
index 559b858cbde0..3078bf8cf1cd 100644
--- a/core/res/res/values-mcc230/strings.xml
+++ b/core/res/res/values-mcc230/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">cs_cz</string>
</resources>
diff --git a/core/res/res/values-mcc232/strings.xml b/core/res/res/values-mcc232/strings.xml
index 494770f213dd..809e4a08be4a 100644
--- a/core/res/res/values-mcc232/strings.xml
+++ b/core/res/res/values-mcc232/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">de_at</string>
</resources>
diff --git a/core/res/res/values-mcc234/strings.xml b/core/res/res/values-mcc234/strings.xml
index 2e6a3f327528..676defee3001 100644
--- a/core/res/res/values-mcc234/strings.xml
+++ b/core/res/res/values-mcc234/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">en_gb</string>
</resources>
diff --git a/core/res/res/values-mcc260/strings.xml b/core/res/res/values-mcc260/strings.xml
index 20c19ddb0f7e..90f25218fe30 100644
--- a/core/res/res/values-mcc260/strings.xml
+++ b/core/res/res/values-mcc260/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">pl_pl</string>
</resources>
diff --git a/core/res/res/values-mcc262/strings.xml b/core/res/res/values-mcc262/strings.xml
index 8ca0e31e603a..ae323b85533f 100644
--- a/core/res/res/values-mcc262/strings.xml
+++ b/core/res/res/values-mcc262/strings.xml
@@ -20,6 +20,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- A string used to replace %s in a URL to fill in the locale for countries -->
- <!-- whose locale we don't natively support. A 0 length string triggers no replacement -->
+ <!-- whose locale we don't natively support. A 0 length string triggers no replacement. Do not translate -->
<string name="locale_replacement">de_de</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 281363f3a188..bdb43eebac5b 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -751,7 +751,7 @@
<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_submit" msgid="2688450133297983542">"Serah 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>
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Pilih teks..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ tambah ke kamus"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Kaedah input"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tindakan teks"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Kekurangan ruang"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klik OK untuk menerima."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Permintaan persediaan sambungan Wi-Fi Langsung dari <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Masukkan pin untuk meneruskan."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> perlu dimasukkan pada peranti rakan <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> untuk penyediaan sambungan untuk meneruskan"</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct dihidupkan"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Sentuh untuk tetapan"</string>
<string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplikasi tidak dikenali"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Menghantar mesej SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Buat asal pemadaman."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Jangan lakukan apa-apa sekarang."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pilih akaun"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Kenaikan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Penyusutan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> ketik dan tahan."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Storan USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Amaran penggunaan data"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"penggunaan melebihi <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 8f0435015647..e879f9b228fd 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopier URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Marker tekst"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Merket tekst"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ legg til i ordlisten"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Inndatametode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Teksthandlinger"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Lite plass"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Klikk på OK for å godta."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Forespørsel om tilkoblingskonfigurasjon for Wi-Fi Direct fra <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Oppgi personlig kode for å fortsette."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Personlig WPS-kode <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> må oppgis på mottakerenheten <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> for å fortsette tilkoblingskonfigurasjonen"</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct er slått på"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Berør for å se innstillinger"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Opphev slettinger."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ikke gjør noe nå."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Velg en konto"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Øke"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Senke"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> trykk og hold inne."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Rediger"</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Advarsel for høyt dataforbruk"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"bruken overstiger <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 2711f0bc8ce3..5d22f64631ca 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"URL kopiëren"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Tekst selecteren..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Tekstselectie"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ toev. aan woordenboek"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Invoermethode"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tekstacties"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Weinig ruimte"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct is actief"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Aanraken voor instellingen"</string>
<string name="select_character" msgid="3365550120617701745">"Teken invoegen"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Onbekende app"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS-berichten verzenden"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Verwijderingen ongedaan maken."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nu niets doen."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecteer een account"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Hoger"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Lager"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tik <xliff:g id="VALUE">%s</xliff:g> keer en blijf aanraken."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-opslag"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Bewerken..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Waarschuwing v. gegevensgebruik"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"gebruik hoger dan <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 702cba667126..56553cd4e7b5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ dodaj do słownika"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Sposób wprowadzania tekstu"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Działania na tekście"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mało miejsca"</string>
@@ -946,10 +951,8 @@
<string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Kliknij OK, aby zaakceptować."</string>
<string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Otrzymano żądanie konfiguracji połączenia Wi-Fi Direct z urządzenia <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Wpisz kod PIN, aby kontynuować."</string>
<string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Aby kontynuować konfigurowanie połączenia, na drugim urządzeniu <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> wpisz kod PIN WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g>."</string>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct włączone"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Dotknij, aby zmienić ustawienia"</string>
<string name="select_character" msgid="3365550120617701745">"Wstaw znak"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Nieznana aplikacja"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Wysyłanie wiadomości SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Cofnij usunięcie."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nie wykonuj teraz żadnych czynności."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Wybierz konto"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zwiększ"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmniejsz"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> dotknij i przytrzymaj."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Nośnik USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Edytuj..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Ostrzeżenie o transmisji danych"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"ilość danych przekracza <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 8e1386a669b4..e60a3c8788ad 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ adicionar ao dicionário"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acções de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Pouco espaço livre"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"O Wi-Fi Direct está ativado"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Toque para aceder às definições"</string>
<string name="select_character" msgid="3365550120617701745">"Introduzir carácter"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicação desconhecida"</string>
<string name="sms_control_title" msgid="7296612781128917719">"A enviar mensagens SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anular as eliminações."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Não fazer nada por agora."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Seleccionar conta"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Aumentar"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Diminuir"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Toque sem soltar em <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Aviso de utilização de dados"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"a utilização excede <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index f5784632f6e1..de8266b8463d 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ adicionar ao dicionário"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Método de entrada"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Ações de texto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Pouco espaço"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct ativado"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tocar para acessar configurações"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Desfazer as exclusões."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Não fazer nada por enquanto."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Selecione uma conta"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Incremento"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Redução"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> toque e mantenha pressionado."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Armazenamento USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editar..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Aviso sobre uso de dados"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"o uso excede <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 2dc5ce831e32..b8c525477711 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -977,7 +977,9 @@
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selecziun da text"</string>
<!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <!-- no translation found for addToDictionary (2839899368418071843) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
<string name="inputMethod" msgid="1653630062304567879">"Metoda d\'endataziun"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acziuns da text"</string>
@@ -1306,6 +1308,12 @@
<skip />
<!-- no translation found for choose_account_label (4191313562041125787) -->
<skip />
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<!-- no translation found for number_picker_increment_button (4830170763103463443) -->
<skip />
<!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
@@ -1404,7 +1412,7 @@
<skip />
<!-- no translation found for data_usage_warning_title (1955638862122232342) -->
<skip />
- <!-- no translation found for data_usage_warning_body (3354394590936526648) -->
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
<skip />
<!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
<skip />
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 2a069f3e3864..c5384507c7f7 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -861,7 +861,9 @@
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Selectare text"</string>
<!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <!-- no translation found for addToDictionary (2839899368418071843) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
<string name="inputMethod" msgid="1653630062304567879">"Metodă de intrare"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Acţiuni pentru text"</string>
@@ -949,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct este activat"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Atingeţi pentru setări"</string>
<string name="select_character" msgid="3365550120617701745">"Introduceţi caracterul"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Aplicaţie necunoscută"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Se trimit mesaje SMS"</string>
@@ -1113,36 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Anulaţi aceste ştergeri."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Pentru moment, nu efectuaţi nicio acţiune."</string>
<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 number_picker_increment_scroll_mode (1343063395404990189) -->
- <skip />
- <!-- no translation found for number_picker_increment_scroll_action (4628981789985093179) -->
- <skip />
- <!-- no translation found for time_picker_increment_minute_button (2843066823236250329) -->
- <skip />
- <!-- no translation found for time_picker_decrement_minute_button (4357907223628449595) -->
- <skip />
- <!-- no translation found for time_picker_increment_hour_button (2484204991937119057) -->
- <skip />
- <!-- no translation found for time_picker_decrement_hour_button (4659353501775842780) -->
- <skip />
- <!-- no translation found for time_picker_increment_set_pm_button (4147590696151230863) -->
- <skip />
- <!-- no translation found for time_picker_decrement_set_am_button (8302140353539486752) -->
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for date_picker_increment_month_button (6324978841467899081) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for date_picker_decrement_month_button (7304349355000398077) -->
- <skip />
- <!-- no translation found for date_picker_increment_day_button (4397040141921413183) -->
- <skip />
- <!-- no translation found for date_picker_decrement_day_button (2427816793443629131) -->
- <skip />
- <!-- no translation found for date_picker_increment_year_button (3058553394722295105) -->
- <skip />
- <!-- no translation found for date_picker_decrement_year_button (5193062846559743823) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Incrementaţi"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Decrementaţi"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Apăsaţi şi ţineţi apăsat <xliff:g id="VALUE">%s</xliff:g>."</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Glisaţi în sus pentru incrementare şi în jos pentru decrementare."</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Incrementaţi valoarea pentru minut"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Decrementaţi valoarea pentru minut"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"Incrementaţi valoarea pentru oră"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"Decrementaţi valoarea pentru oră"</string>
+ <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Setaţi valoarea PM"</string>
+ <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Setaţi valoarea AM"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"Incrementaţi valoarea pentru lună"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"Decrementaţi valoarea pentru lună"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"Incrementaţi valoarea pentru zi"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"Decrementaţi valoarea pentru zi"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"Incrementaţi valoarea pentru an"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"Decrementaţi valoarea pentru an"</string>
<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>
@@ -1159,14 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Mâner glisant. Apăsaţi şi ţineţi apăsat."</string>
- <!-- no translation found for description_direction_up (1983114130441878529) -->
- <skip />
- <!-- no translation found for description_direction_down (4294993639091088240) -->
- <skip />
- <!-- no translation found for description_direction_left (6814008463839915747) -->
- <skip />
- <!-- no translation found for description_direction_right (4296057241963012862) -->
- <skip />
+ <string name="description_direction_up" msgid="1983114130441878529">"În sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"În jos pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"La stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"La dreapta pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
<string name="description_target_unlock" msgid="2228524900439801453">"Deblocaţi"</string>
<string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string>
<string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string>
@@ -1180,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Dsipozitiv de stocare USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Editaţi..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Avertisment de utiliz. a datelor"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"utilizarea depăşeşte <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 2a475315d339..2ca256ff88a6 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Копировать URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Выбрать текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Выбор текста"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"Добавить в словарь"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Способ ввода"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Операции с текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Недостаточно места"</string>
@@ -1108,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Отменить удаления."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ничего не делать сейчас."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Выберите аккаунт"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Увеличить"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Уменьшить"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Нажмите и удерживайте <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1157,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-накопитель"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Изменить..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Осталось мало трафика"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"израсходовано больше <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 213487963b93..9cf846f03cb7 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ pridať do slovníka"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Metóda vstupu"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Operácie s textom"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Nedostatok pamäte"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Priame pripojenie siete Wi-Fi je zapnuté"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Nastavenia otvoríte dotykom"</string>
<string name="select_character" msgid="3365550120617701745">"Vkladanie znakov"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Neznáma aplikácia"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Odosielanie správ SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Vrátiť späť odstránenia."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Nevykonať akciu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Vybrať účet"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Zvýšenie"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zníženie"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Klepnite a podržte <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Ukladací priestor USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Upraviť..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Upozornenie o využití dát"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"Objem prenes. dát prekrač. <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 994ff7ba1577..5aa14486f2e6 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiraj URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Izbiranje besedila ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Izbrano besedilo"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"in dodaj v slovar"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Način vnosa"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Besedilna dejanja"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Zmanjkuje pomnilnika"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct je vklopljen"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Dotaknite se za nastavitve"</string>
<string name="select_character" msgid="3365550120617701745">"Vstavljanje znaka"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Neznan program"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Pošiljanje sporočil SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Razveljavi brisanje."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Zaenkrat ne naredi ničesar."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Izberite račun"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Povečaj"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Zmanjšaj"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Tapnite in pridržite <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Pomnilnik USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Urejanje ..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Opozorilo o uporabi podatkov"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"poraba presega <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index eedd93b6d5eb..f60e212d2d8e 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Копирај URL адресу"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Изабери текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Избор текста"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ додај у речник"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Метод уноса"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Радње у вези са текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Мало простора"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct је укључен"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Додирните за подешавања"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Опозови брисања."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Не ради ништа за сада."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Избор налога"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Повећање"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Смањење"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> додирните и задржите."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB меморија"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Измени..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Упозорење о потрошњи података"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"потрошња премашује <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 34b08b193158..9a42ff33afab 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Kopiera webbadress"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Markera text..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Textmarkering"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ lägg till i ordlista"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Indatametod"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Textåtgärder"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Dåligt med utrymme"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct är aktiverat"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tryck om du vill visa inställningar"</string>
<string name="select_character" msgid="3365550120617701745">"Infoga tecken"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Okänd app"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Skickar SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Ångra borttagningarna."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Gör ingenting just nu."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Välj ett konto"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Öka"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Minska"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> knacka lätt och håll kvar."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB-lagring"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Redigera..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Varning angående dataanvändning"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"användning överstiger <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index e32e85165786..f0f90c63f261 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -20,93 +20,54 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for byteShort (8340973892742019101) -->
- <skip />
- <!-- no translation found for kilobyteShort (5973789783504771878) -->
- <skip />
- <!-- no translation found for megabyteShort (6355851576770428922) -->
- <skip />
- <!-- no translation found for gigabyteShort (3259882455212193214) -->
- <skip />
- <!-- no translation found for terabyteShort (231613018159186962) -->
- <skip />
- <!-- no translation found for petabyteShort (5637816680144990219) -->
- <skip />
+ <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="terabyteShort" msgid="231613018159186962">"TB"</string>
+ <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"Kishika nafasi<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
- <!-- no translation found for untitled (6071602020171759109) -->
- <skip />
- <!-- no translation found for ellipsis (7899829516048813237) -->
- <skip />
- <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
- <skip />
- <!-- no translation found for unknownName (2277556546742746522) -->
- <skip />
- <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
- <skip />
- <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
- <skip />
- <!-- no translation found for mmiError (5154499457739052907) -->
- <skip />
+ <string name="untitled" msgid="6071602020171759109">"&lt;untitled&gt;"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+ <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Hakuna nambari ya simu)"</string>
+ <string name="unknownName" msgid="2277556546742746522">"(Haijulikani)"</string>
+ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Barua ya sauti"</string>
+ <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+ <string name="mmiError" msgid="5154499457739052907">"Tatizo la muunganisho au msimbo batili MMI."</string>
<string name="mmiFdnError" msgid="5224398216385316471">"Uendeshaji umepunguzwa kwa namba za upigaji simu za kudumu pekee."</string>
- <!-- no translation found for serviceEnabled (8147278346414714315) -->
- <skip />
- <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
- <skip />
- <!-- no translation found for serviceDisabled (1937553226592516411) -->
- <skip />
- <!-- no translation found for serviceRegistered (6275019082598102493) -->
- <skip />
- <!-- no translation found for serviceErased (1288584695297200972) -->
- <skip />
- <!-- no translation found for passwordIncorrect (7612208839450128715) -->
- <skip />
- <!-- no translation found for mmiComplete (8232527495411698359) -->
- <skip />
- <!-- no translation found for badPin (5085454289896032547) -->
- <skip />
- <!-- no translation found for badPuk (5702522162746042460) -->
- <skip />
- <!-- no translation found for mismatchPin (3695902225843339274) -->
- <skip />
- <!-- no translation found for invalidPin (3850018445187475377) -->
- <skip />
- <!-- no translation found for invalidPuk (8761456210898036513) -->
- <skip />
+ <string name="serviceEnabled" msgid="8147278346414714315">"Huduma iliwezeshwa"</string>
+ <string name="serviceEnabledFor" msgid="6856228140453471041">"Huduma iliwezesha kwa:"</string>
+ <string name="serviceDisabled" msgid="1937553226592516411">"Hitilafu ya huduma!"</string>
+ <string name="serviceRegistered" msgid="6275019082598102493">"Usajili ulifaulu."</string>
+ <string name="serviceErased" msgid="1288584695297200972">"Ufutaji ulifanikiwa"</string>
+ <string name="passwordIncorrect" msgid="7612208839450128715">"Nenosiri si sahihi."</string>
+ <string name="mmiComplete" msgid="8232527495411698359">"MMI imekamilika."</string>
+ <string name="badPin" msgid="5085454289896032547">"Nenosiri la zamani ulilochapisha sio sahihi"</string>
+ <string name="badPuk" msgid="5702522162746042460">"PUK ulioichapisha sio sahihi."</string>
+ <string name="mismatchPin" msgid="3695902225843339274">"PINs ulizoziingiza hazifanani."</string>
+ <string name="invalidPin" msgid="3850018445187475377">"Chapisha PIN ambayo ina nambari 4 hadi 8."</string>
+ <string name="invalidPuk" msgid="8761456210898036513">"Andika PUK ambayo ina urefu wa nambari 8 au zaidi."</string>
<string name="needPuk" msgid="919668385956251611">"Kadi yako ya SIM imefungwa na PUK. Anika msimbo wa PUK ili kuifungua."</string>
- <!-- no translation found for needPuk2 (4526033371987193070) -->
- <skip />
- <!-- no translation found for ClipMmi (6952821216480289285) -->
- <skip />
- <!-- no translation found for ClirMmi (7784673673446833091) -->
- <skip />
- <!-- no translation found for CfMmi (5123218989141573515) -->
- <skip />
- <!-- no translation found for CwMmi (9129678056795016867) -->
- <skip />
- <!-- no translation found for BaMmi (455193067926770581) -->
- <skip />
- <!-- no translation found for PwdMmi (7043715687905254199) -->
- <skip />
- <!-- no translation found for PinMmi (3113117780361190304) -->
- <skip />
+ <string name="needPuk2" msgid="4526033371987193070">"Chapisha PUK2 ili kufungua kadi ya SIM."</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"ID ya Mpigaji simu Inayoingia"</string>
+ <string name="ClirMmi" msgid="7784673673446833091">"ID ya Mpigaji simu Inayotoka nje"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"Kusambaza simu"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"Simu inasubiriwa"</string>
+ <string name="BaMmi" msgid="455193067926770581">"Kuzuia upigaji simu"</string>
+ <string name="PwdMmi" msgid="7043715687905254199">"Badilisho la nenosiri"</string>
+ <string name="PinMmi" msgid="3113117780361190304">"Badilisha PIN"</string>
<string name="CnipMmi" msgid="3110534680557857162">"Nambari ya kupiga iliyopo"</string>
<string name="CnirMmi" msgid="3062102121430548731">"Kupiga nambari kumezuiwa"</string>
<string name="ThreeWCMmi" msgid="9051047170321190368">"Upigaji simu kwa njia tatu"</string>
<string name="RuacMmi" msgid="7827887459138308886">"Ukataaji wa simu zinazokera zisizohitajika"</string>
<string name="CndMmi" msgid="3116446237081575808">"Uwasilishaji nambari ya kupiga simu"</string>
<string name="DndMmi" msgid="1265478932418334331">"Usisumbue"</string>
- <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
- <skip />
- <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
- <skip />
- <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
- <skip />
- <!-- no translation found for CLIRPermanent (5460892159398802465) -->
- <skip />
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Imezuiliwa"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Chaguo-msingi za kitambulisho cha mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo:Imezuiliwa"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string>
+ <string name="serviceNotProvisioned" msgid="8614830180508686666">"Huduma haitathminiwi."</string>
+ <string name="CLIRPermanent" msgid="5460892159398802465">"Mipangilio ya mpigaji simu haiwezi kubadilishwa"</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ufikiaji uliozuiwa umebadilishwa"</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"Huduma ya data imezuiwa."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Huduma ya dharura imezuiwa."</string>
@@ -116,22 +77,14 @@
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Huduma za Sauti/Data zimezuiwa."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Huduma za Sauti/Ujumbe mfupi zimezuiwa."</string>
<string name="RestrictedOnAll" msgid="2714924667937117304">"Huduma zote za Sauti/data?ujumbe mfupi zimezuiwa."</string>
- <!-- no translation found for serviceClassVoice (1258393812335258019) -->
- <skip />
- <!-- no translation found for serviceClassData (872456782077937893) -->
- <skip />
- <!-- no translation found for serviceClassFAX (5566624998840486475) -->
- <skip />
- <!-- no translation found for serviceClassSMS (2015460373701527489) -->
- <skip />
- <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
- <skip />
- <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
- <skip />
- <!-- no translation found for serviceClassPacket (6991006557993423453) -->
- <skip />
- <!-- no translation found for serviceClassPAD (3235259085648271037) -->
- <skip />
+ <string name="serviceClassVoice" msgid="1258393812335258019">"Sauti"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"Data"</string>
+ <string name="serviceClassFAX" msgid="5566624998840486475">"PEPESI"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"Ujumbe mfupi"</string>
+ <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"Sawazisha"</string>
+ <string name="serviceClassPacket" msgid="6991006557993423453">"Pakiti"</string>
+ <string name="serviceClassPAD" msgid="3235259085648271037">"PADI"</string>
<string name="roamingText0" msgid="7170335472198694945">"Kiashiria Uzururaji Kimewashwa"</string>
<string name="roamingText1" msgid="5314861519752538922">"Zima Kiashiria Kuzurura"</string>
<string name="roamingText2" msgid="8969929049081268115">"Kiashiria Uzururaji Kinamweka"</string>
@@ -153,171 +106,114 @@
<string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Haijatumiwa mwingine"</string>
<string name="fcComplete" msgid="3118848230966886575">"Msimbo wa kipengele umekamilika."</string>
<string name="fcError" msgid="3327560126588500777">"Tatizo la muunganisho au msimbo batili wa kipengele."</string>
- <!-- no translation found for httpErrorOk (1191919378083472204) -->
- <skip />
+ <string name="httpErrorOk" msgid="1191919378083472204">"Sawa"</string>
<string name="httpError" msgid="6603022914760066338">"Kosa la mtandao limetokea."</string>
- <!-- no translation found for httpErrorLookup (4517085806977851374) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
- <skip />
- <!-- no translation found for httpErrorAuth (7293960746955020542) -->
- <skip />
- <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
- <skip />
- <!-- no translation found for httpErrorConnect (7623096283505770433) -->
- <skip />
+ <string name="httpErrorLookup" msgid="4517085806977851374">"URL haikuweza kupatikana."</string>
+ <string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Mpango wa uhalalishaji wa wavuti hauhamiliwi."</string>
+ <string name="httpErrorAuth" msgid="7293960746955020542">"Uhalalisho haukufanikiwa."</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Uhalalisho kupitia seva ya proksi ulifanikiwa."</string>
+ <string name="httpErrorConnect" msgid="7623096283505770433">"Muunganisho kwenye seva haikufaulu."</string>
<string name="httpErrorIO" msgid="4270874999047767599">"Seva haikuweza kuwasiliana. Jaribu tena baadaye."</string>
- <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
- <skip />
- <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
- <skip />
- <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
- <skip />
- <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
- <skip />
- <!-- no translation found for httpErrorFile (8250549644091165175) -->
- <skip />
- <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
- <skip />
- <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
- <skip />
+ <string name="httpErrorTimeout" msgid="4743403703762883954">"Muunganisho kwenye seva imeisha."</string>
+ <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Ukurasa unajumlisha mielekezo mingi ya seva."</string>
+ <string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Itifaki haihamiliwi."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Muunganisho salama hukuweza kuzinduliwa."</string>
+ <string name="httpErrorBadUrl" msgid="6088183159988619736">"Ukurasa hauwezi kufunguliwa kwa sababu URL ni batili."</string>
+ <string name="httpErrorFile" msgid="8250549644091165175">"Faili haikuweza kufikiwa."</string>
+ <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Faili iliyoombwa haikupatikana."</string>
+ <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Maombi mengi sana yanashughulikiwa. Jaribu tena baadaye."</string>
<string name="notification_title" msgid="1259940370369187045">"Hitilafu ya kuingia ya <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <!-- no translation found for contentServiceSync (8353523060269335667) -->
- <skip />
- <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
- <skip />
+ <string name="contentServiceSync" msgid="8353523060269335667">"Sawazisha"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sawazisha"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Ufutaji mwingi sana <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
<string name="low_memory" product="tablet" msgid="2292820184396262278">"Hifadhi ya kompyuta ndogo imejaa! Futa baadhi ya faili ili uweze kupata nafasi."</string>
- <!-- outdated translation 2292820184396262278 --> <string name="low_memory" product="default" msgid="6632412458436461203">"Hifadhi ya kompyuta ndogo imejaa! Futa baadhi ya faili ili uweze kupata nafasi."</string>
- <!-- no translation found for me (6545696007631404292) -->
- <skip />
+ <string name="low_memory" product="default" msgid="6632412458436461203">"Hifadhi ya simu imejaa! Futa baadhi ya faili ili uweze kupata nafasi."</string>
+ <string name="me" msgid="6545696007631404292">"Mimi"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Chaguo za kompyuta ndogo"</string>
- <!-- outdated translation 8545351420865202853 --> <string name="power_dialog" product="default" msgid="1319919075463988638">"Chaguo za kompyuta ndogo"</string>
- <!-- no translation found for silent_mode (7167703389802618663) -->
- <skip />
- <!-- no translation found for turn_on_radio (3912793092339962371) -->
- <skip />
- <!-- no translation found for turn_off_radio (8198784949987062346) -->
- <skip />
- <!-- no translation found for screen_lock (799094655496098153) -->
- <skip />
- <!-- no translation found for power_off (4266614107412865048) -->
- <skip />
- <!-- no translation found for shutdown_progress (2281079257329981203) -->
- <skip />
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"Machaguo ya simu"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"Muundo wa kimya"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"Fungua bila waya"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"Zima pasiwaya"</string>
+ <string name="screen_lock" msgid="799094655496098153">"Funga skrini"</string>
+ <string name="power_off" msgid="4266614107412865048">"Nishati imezimwa"</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"Inafunga..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Kompyuta yako ndogo itazima."</string>
- <!-- outdated translation 3385745179555731470 --> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Kompyuta yako ndogo itazima."</string>
+ <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Simu yako itazima."</string>
<string name="shutdown_confirm_question" msgid="6656441286856415014">"Je, ungependa kuzima?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Za hivi karibuni"</string>
- <!-- no translation found for no_recent_tasks (279702952298056674) -->
- <skip />
+ <string name="no_recent_tasks" msgid="279702952298056674">"Hakuna programu za hivi karibuni."</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"Chaguo za kompyuta ndogo"</string>
- <!-- outdated translation 408477140088053665 --> <string name="global_actions" product="default" msgid="2406416831541615258">"Chaguo za kompyuta ndogo"</string>
- <!-- no translation found for global_action_lock (2844945191792119712) -->
- <skip />
- <!-- no translation found for global_action_power_off (4471879440839879722) -->
- <skip />
- <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
- <skip />
+ <string name="global_actions" product="default" msgid="2406416831541615258">"Chaguo za simu"</string>
+ <string name="global_action_lock" msgid="2844945191792119712">"Funga skrini"</string>
+ <string name="global_action_power_off" msgid="4471879440839879722">"Nishati imezimwa"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mtindo wa kimya"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Sauti Imezimwa"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Sauti imefunguliwa"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"gumzo ya ndege"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Hali ya ndege IMEWASHWA"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"gumzo ya ndege IMEZIMWA"</string>
- <!-- outdated translation 5833510281787786290 --> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"100+"</string>
- <!-- no translation found for safeMode (2788228061547930246) -->
- <skip />
+ <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+ <string name="safeMode" msgid="2788228061547930246">"Mtindo salama"</string>
<string name="android_system_label" msgid="6577375335728551336">"Mfumo wa Android"</string>
- <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
- <skip />
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Huduma ambazo zinakugharimu pesa"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Ruhusu programu za kompyuta kufanya vitu ambavyo vinaweza kukugharimu pesa."</string>
- <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
- <skip />
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"Ujumbe wako"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"Soma na andika SMS yako, barua pepe, na ujumbe mwingine."</string>
- <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
- <skip />
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maelezo yako ya kibinafsi"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda iliyohifadhiwa kwenye kompyuta ndogo."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ufikiaji wa moja kwa moja wa anwani zako na kalenda zilizohifadhiwa kwenye simu."</string>
- <!-- no translation found for permgrouplab_location (635149742436692049) -->
- <skip />
- <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
- <skip />
- <!-- no translation found for permgrouplab_network (5808983377727109831) -->
- <skip />
+ <string name="permgrouplab_location" msgid="635149742436692049">"Mahali pako"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"Fuatilia mahali pako pa mwili"</string>
+ <string name="permgrouplab_network" msgid="5808983377727109831">"Mawasiliano ya mtandao"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Ruhusu programu za kompyuta kufikia vipengele mbalimbali vya mtandao."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
- <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
- <skip />
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Vidhibiti vya maunzi"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Ufikiaji wa moja kwa moja wa maunzi kwenye kifaa cha mkononi."</string>
- <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
- <skip />
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Simu"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Simamia, rekodi, na chakata simu."</string>
- <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
- <skip />
+ <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Zana za mfumo"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ufikiaji wa kiwango cha chini na udhibiti wa mfumo."</string>
- <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
- <skip />
+ <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Zana za utengenezaji"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Vipengele vinahitaji tu kwa watengenezaji programu."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Hifadhi"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Fikia hifadhi ya USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Fikia kadi ya SD."</string>
- <!-- no translation found for permlab_statusBar (7417192629601890791) -->
- <skip />
+ <string name="permlab_statusBar" msgid="7417192629601890791">"lemaza au rekebisha mwambaa hali"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Huruhusu programu kulemaza mwambaa wa hali au kuongeza na kuondoa ikoni za mfumo."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"mwamba hali"</string>
<string name="permdesc_statusBarService" msgid="4097605867643520920">"Huruhusu programu kuwa mwamba hali"</string>
- <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
- <skip />
+ <string name="permlab_expandStatusBar" msgid="1148198785937489264">"panua/kunja mwambaa hali"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Huruhusu programu kupanua au kukunja mwambaa wa hali."</string>
- <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"ingilia simu zinazotoka"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Huruhusu programu kuchakata simu zinazotoka na kubadilisha namba za kupigwa. Huenda programu mbaya za kompyuta zikasimamia, kuelekeza upya, au kuzuia simu zinazotoka."</string>
- <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"pokea SMS"</string>
<string name="permdesc_receiveSms" msgid="6298292335965966117">"Huruhusu programu kupokea na kuchakata ujumbe wa SMS. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
- <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"pokea MMS"</string>
<string name="permdesc_receiveMms" msgid="4563346832000174373">"Huruhusu programu kupokea na kuchakata ujumbe wa MMS. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
- <!-- no translation found for permlab_receiveEmergencyBroadcast (1803477660846288089) -->
- <skip />
- <!-- no translation found for permdesc_receiveEmergencyBroadcast (7118393393716546131) -->
- <skip />
- <!-- no translation found for permlab_sendSms (5600830612147671529) -->
- <skip />
+ <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"Pokea matangazo ya dharura"</string>
+ <string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Hurusu programu kupokea na kuchakata ujumbe dharura wa matangazo. Idhini hii inapatikana tu kwa programu za mfumo."</string>
+ <string name="permlab_sendSms" msgid="5600830612147671529">"tuma ujumbe wa SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Huruhusu programu kutuma ujumbe wa SMS. Programu hasidi huenda zikakugharimu pesa kwa kutuma ujumbe bila uthibitisho wako."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"Tuma ujumbe wa SMS bila ya thibitisho"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Huruhusu programu kutuma ujumbe wa SMS. Programu hatari huenda zikagharimu pesa kwa kutuma ujumbe bila ya uthibitishaji wako."</string>
- <!-- no translation found for permlab_readSms (4085333708122372256) -->
- <skip />
+ <string name="permlab_readSms" msgid="4085333708122372256">"soma SMS au MMS"</string>
<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>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Huruhusu programu kusoma ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikasoma ujumbe wako wa siri."</string>
- <!-- no translation found for permlab_writeSms (6881122575154940744) -->
- <skip />
+ <string name="permlab_writeSms" msgid="6881122575154940744">"hariri SMS au MMS"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Huruhusu programu kuandika ujumbe wa SMS uliohifadhiwa kwenye kompyuta yako au kadi ya SIM. Huenda programu hasidi zikafuta ujumbe wako."</string>
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Huruhusu programu kuandika kwa ujumbe wa SMS uliohifadhiwa kwenye simu yako au kadi ya SIM. Programu mbaya za kompyuta huenda zikafuta ujumbe wako."</string>
- <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="8258226427716551388">"pokea WAP"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Huruhusu programu kupokea na kuchakata ujumbe wa WAP. Programu mbaya za kompyuta huenda zikafuatilia ujumbe wako au kuzifuta bila kukuonyesha."</string>
- <!-- no translation found for permlab_getTasks (5005277531132573353) -->
- <skip />
+ <string name="permlab_getTasks" msgid="5005277531132573353">"epua programu zinazoendeshwa"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"Huruhusu programu kuepua maelezo kuhusu kazi zinazoendeshwa kwa sasa na karibuni. Huenda ikaruhusu programu mbaya za kompyuta kutambua maelezo ya siri kuhusu programu zingine za kompyuta."</string>
- <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
- <skip />
+ <string name="permlab_reorderTasks" msgid="5669588525059921549">"panga upya programu zinazoendeshwa"</string>
<string name="permdesc_reorderTasks" msgid="126252774270522835">"Huruhusu programu kusogeza kazi kwa mandharimbele au mandhari nyuma. Programu mbaya zinaweza kujilazimisha mbele bila udhibiti wako."</string>
- <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
- <skip />
- <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
- <skip />
- <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
- <skip />
+ <string name="permlab_removeTasks" msgid="4802740047161700683">"komesha kuendesha programu"</string>
+ <string name="permdesc_removeTasks" msgid="2000332928514575461">"Huruhusu programu kuondoa kazi na kumaliza programu zake. Programu hatari zinaweza kutatiza tabia ya programu nyingine."</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"wezesha utatuaji programu"</string>
<string name="permdesc_setDebugApp" msgid="5584310661711990702">"Huruhusu programu kuwasha utatuaji wa programu nyingine ya kompyuta. Programu mbaya za kompyuta zinaweza kutumia hii ili kuua programu zingine za kompyuta."</string>
- <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"badilisha mipangilio yako ya onyesho"</string>
<string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Huruhusu programu kubadilisha usanidi wa sasa, kama vile mahali au ukubwa wa jumla wa fonti."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"Wezesha mtindo wa gari"</string>
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"Huruhu programu kuwezesha programu ya mtindo wa gari."</string>
@@ -325,109 +221,78 @@
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Huruhusu programu kwa kufifiza shughuli za maandhari nyuma za programu, hata kama kumbukumbu haliko chini."</string>
<string name="permlab_forceStopPackages" msgid="1447830113260156236">"lazimisha kukomesha programu nyingine"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Huruhusu programu kwa kukomesha kwa lazima programu zingine."</string>
- <!-- no translation found for permlab_forceBack (1804196839880393631) -->
- <skip />
+ <string name="permlab_forceBack" msgid="1804196839880393631">"lazimisha programu kufunga"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"Huruhusu programu kulazimisha shughuli yoyote ambayo iko katika mandharimbele kufunga na kurudi nyuma. Haipaswi kamwe kuhitajika kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_dump (1681799862438954752) -->
- <skip />
+ <string name="permlab_dump" msgid="1681799862438954752">"epua hali ya ndani ya mfumo"</string>
<string name="permdesc_dump" msgid="2198776174276275220">"Huruhusu programu kuepua hali ya ndani ya mfumo. Programu mbaya za kompyuta huenda zikaepua viwango vikubwa vya maelezo ya kibinafsi na salama ambayo kwa kawaida hazipaswi kuhitaji."</string>
- <!-- no translation found for permlab_retrieve_window_content (8022588608994589938) -->
- <skip />
- <!-- no translation found for permdesc_retrieve_window_content (3390962289797156152) -->
- <skip />
+ <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"epua maudhui ya skrini"</string>
+ <string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"Huruhusu programu kurejesha upya maudhui ya dirisha amailifu. Programu hatari inaweza kurejesha upya maudhui yote ya dirisha na kutathmini majaribio yake yote isipokuwa manenosiri."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"Zima nusu"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Huweka kisimamia shughuli katika hali ya kuzima. Haiadhiri uzimaji kamili"</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zuia swichi za app"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Humzuia mtumiaji dhidi ya kubadilisha kwa programu nyingine ya kompyuta."</string>
- <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
- <skip />
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"fuatilia na dhibiti uzinduzi wote wa programu"</string>
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Huruhusu programu kufuatilia na kudhibiti jinsi mfumo unavyozindua shughuli. Huenda programu hasidi zikahatarisha mfumo kabisa. Kibali hiki kinahitajika tu kwa utengenezaji, sio kwa matumizi ya kawaida."</string>
- <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
- <skip />
+ <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"furushi lililotumwa limeondoa tangazo"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Huruhusu programu kutangaza notisi kwamba furushi la programu imeondolewa. Programu mbaya za kompyuta huenda zikatumia hii ili kuua programu nyingine ya kompyuta."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"tuma matanazo yaliyopokewa ya SMS"</string>
<string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Huruhusu programu kutangaza notisi kwamba ujumbe wa SMS umepokewa. Programu mbaya za kompyuta huenda zikatumia hii ili kughushi ujumbe wa SMS unaoingia."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"tuma tangazo lililopokewa la MSUKUMO WA WAP"</string>
<string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Huruhusu programu kutangaza notisi kwamba ujumbe wa MSUKUMO WA WAP umepokewa. Programu mbaya za kompyuta huenda zikatumia hii ili kughushi ripoti ya ujumbe wa MMS au kubadilisha polepole maudhui ya ukurasa wowote wa wavuti na vibadala vibaya."</string>
- <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
- <skip />
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"zuia idadi ya michakato inayoendeshwa"</string>
<string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Huruhusu programu kudhibiti nambari ya juu ya michakato ambayo itaendeshwa. Haihitajiki kamwe kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"fanya programu zote za usuli zifunge"</string>
<string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Huruhusu programu kudhibiti kama shughuli hukamilishwa kila wakati punde tu zinapoenda kwenye mandharinyuma. Haipaswi kamwe kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
- <skip />
+ <string name="permlab_batteryStats" msgid="7863923071360031652">"rekebisha takwimu za betri"</string>
<string name="permdesc_batteryStats" msgid="5847319823772230560">"Huruhusu urekebishaji wa takwimu zilizokusanywa za betri. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
<string name="permlab_backup" msgid="470013022865453920">"Dhibiti chelezo la mfumo na rejesha"</string>
<string name="permdesc_backup" msgid="4837493065154256525">"Huruhusu programu kudhibiti chelezo ya mfumo na kurejesha utaratibu. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
- <skip />
- <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
- <skip />
- <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
- <skip />
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"thibitisha chelezo kamilifu au rejesha upya uendeshaji"</string>
+ <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Huruhusu programu kuzindua chelezo nzima ya kuthibitisha UI. Sio ya kutumika na programu yoyote."</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"onyesha madirisha yasiyoidhinishwa"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Huruhusu uundaji wa madirisha ambayo yamekusudiwa kutumiwa na kiolesura cha mtumiaji cha mfumo wa ndani. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"onyesha tahadhari za kiwango cha mfumo"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Huruhusu programu kuonyesha madirisha ya tahadhari ya mfumo. Programu hasidi zinaweza kuchukua skrini nzima."</string>
- <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
- <skip />
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"rekebisha kasi ya jumla ya uhuisho"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Huruhusu programu kubadilisha kasi ya jumla ya uhuishaji (Uhuisho wa haraka zaidi au polepole zaidi) wakati wowote."</string>
- <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
- <skip />
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"dhibiti vyeti vya programu"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"Huruhusu programu za kompyuta kuunda na kusimamia alama mbadala zao, kwa hivyo kupita mpangilio wao wa kawaida wa Z. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
- <skip />
+ <string name="permlab_injectEvents" msgid="1378746584023586600">"bonyeza vitufe na vitufe vya kudhibiti"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Huruhusu programu kuwasilisha matukio yake yenyewe ya uingizaji (vibonyezo vya vitufe, nk.) kwa programu zingine. Programu hasidi zinaweza kutumia hii ili kuchukua husukani mwa kompyuta ndogo."</string>
<string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Huruhusu programu kuwasilisha matukio yake yenyewe ya uingizaji (ubofyaji kitufe, n.k.) kwa programu zingine za kompyuta. Programu mbaya za kompyuta zinaweza kutumia hii ili kudhibiti simu."</string>
- <!-- no translation found for permlab_readInputState (469428900041249234) -->
- <skip />
+ <string name="permlab_readInputState" msgid="469428900041249234">"rekodi unachochapa na hatua unazochukua"</string>
<string name="permdesc_readInputState" msgid="5132879321450325445">"Huruhusu programu kutazama vitufe unavyobofya hata wakati unaingiliana na programu nyingine ya kompyuta (kama vile kuingiza nenosiri). Haipaswi kuhitajika kwa programu za kawaida."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"funganisha kwa mbinu ya uingizaji"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha mbinu ya uingizaji. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"Imefungwa kwa huduma ya maandishi"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha pazia cha huduma ya maandishi (k.m.SpellCheckerService). Haipaswi kuhitajika kwa programu za kawaida."</string>
<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) -->
- <skip />
- <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
- <skip />
+ <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"funga kwenye huduma ya widget"</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"Huruhusu kishikiliaji kufunga kiolesura cha kiwango cha juu cha huduma ya wiji. Haipaswi kuhitajika kwa programu za kawaida."</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"jiunge na msimamizi wa kifaa"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Hurusu mshiriki kwa kutuma jongezo kwa msimamizi wa kifaa. haiwezi kuhitajika kwa programu za kawaida."</string>
- <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
- <skip />
+ <string name="permlab_setOrientation" msgid="3365947717163866844">"badilisha uelekezo wa skrini"</string>
<string name="permdesc_setOrientation" msgid="6335814461615851863">"Huruhusu programu kubadilisha uzungukaji wa skrini wakati wowote. Haipaswi kuhitajika kwa programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_setPointerSpeed (9175371613322562934) -->
- <skip />
- <!-- no translation found for permdesc_setPointerSpeed (137436038503379864) -->
- <skip />
- <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
- <skip />
+ <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"Badilisha kasi ya pointa"</string>
+ <string name="permdesc_setPointerSpeed" msgid="137436038503379864">"Huruhusu programu kubadilisha kasi ya kipanya na pointa ya padi ya kifuatilizi wakati wowote. Haipaswi kuhitajika kwa programu za kawaida."</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"tuma mawimbi ya Linux kwa programu"</string>
<string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Huruhusu programu kuomba kwamba mawimbi yaliyotolewa yatumwe kwa michakato yote isiyokoma."</string>
- <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
- <skip />
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"fanya programu kuendeshwa kila wakati"</string>
<string name="permdesc_persistentActivity" msgid="5037199778265006008">"Huruhusu programu kufanya sehemu zake kuendelea, kwa hivyo mfumo hauwezi kuzitumia kwa programu zingine za kompyuta"</string>
- <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
- <skip />
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"futa programu"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"Huruhusu programu kufuta furushi za Android. Programu mbaya za kompyuta zinaweza kutumia hii ili kufuta programu muhimu za kompyuta."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"futa data ya programu nyingine ya kompyuta"</string>
- <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
- <skip />
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Huruhusu programu kufuta data ya mtumiaji."</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"futa kashe ya programu zingine za kompyuta"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Huruhusu programu kufuta faili za kache."</string>
- <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
- <skip />
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"pima nafasi ya hifadhi ya programu"</string>
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"Huruhusu programu kuepua msimbo wake, na ukubwa wa kache"</string>
- <!-- no translation found for permlab_installPackages (335800214119051089) -->
- <skip />
+ <string name="permlab_installPackages" msgid="335800214119051089">"sakinisha moja kwa moja programu"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"Huruhusu programu kusakinisha furushi mpya au zilizosasishwa za Android. Programu mbaya za kompyuta zinaweza kusababisha hii kuongeza programu mpya za kompyuta na vibali visivyo na mpangilio vyenye nguvu."</string>
- <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
- <skip />
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"futa data yote ya kache ya programu"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Huruhusu programu kupata nafasi ya kuhifadhi ya kompyuta ndogo kwa kufuta faili katika saraka ya kache ya programu. Ufikiaji kwa kawaida huwa umezuiliwa kwa mchakato wa mfumo."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Huruhusu programu kuwezesha nafasi kwenye simu kwa kufuta faili katika saraka ya kache ya programu. Kwa kawaida ufikiaji umezuiwa sana kwa mchakato wa mfumo."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"Sogeza rasilimali za programu"</string>
@@ -435,38 +300,29 @@
<string name="permlab_readLogs" msgid="6615778543198967614">"soma kumbukumbu ya data muhimu"</string>
<string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Huruhusu programu kusoma kutoka kwa faili mbalimbali za kumbukumbu za mfumo. Hii huiruhusu kutambua maelezo ya jumla kuhusu unachofanya na kompyuta ndogo, kwa hivyo kujumuisha maelezo ya kibinafsi na ya siri."</string>
<string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Huruhusu programu kusoma kutoka kwa mfiumo wa faili tofauti za kumbukumbu. Hii inairuhusu kugundua habari ya jumla kuhusu kile unachokifanya kwa simu, kwa kawaida ikijumlisha habari binafsi au faragha."</string>
- <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
- <skip />
+ <string name="permlab_diagnostic" msgid="8076743953908000342">"soma/andika kwa vyanzo vinavyomilikiwa na diag"</string>
<string name="permdesc_diagnostic" msgid="3121238373951637049">"Huruhusu programu kusoma na kuandika kwa nyenzo yoyote inayomilikiwa na kikundi cha diag; kwa mfano, faili katika/dev. Huenda hii ikaathiri udhabiti na usalama wa mfumo. Hii inapaswa kutumia TU na vikagua matatizo mahsusi vya maunzi na mtengenezaji au opereta."</string>
- <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
- <skip />
+ <string name="permlab_changeComponentState" msgid="79425198834329406">"wezesha au lemaza vijenzi vya programu"</string>
<string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Huruhusu programu kubadilisha kama kijenzi cha programu nyingine kimewezeshwa au la. Programu hasidi zinaweza kutumia hii ili kulemaza uwezo muhimu wa kompyuta ndogo. Umakini lazima utumike na kibali hiki, kwa kuwa kuna uwezekano wa kupata vijenzi vya programu katika hali isiyoweza kutumiwa, isiyolingana, au isiyodhabiti."</string>
<string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Huruhusu programu kubadilisha kama kijenzi cha programu nyingine kimewezeshwa au la. Programu hasidi zinaweza kutumia hii ili kulemaza uwezo muhimu wa simu. Umakini lazima utumike na kibali hiki, kwa kuwa kuna uwezekano wa kupata vijenzi vya programu katika hali isiyoweza kutumiwa, isiyolingana, au isiyodhabiti."</string>
- <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
- <skip />
+ <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"weka programu inayopendelewa"</string>
<string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Huruhusu programu kurekebisha programu zako za kompyuta unazopendelea. Hii inaweza kuruhusu programu mbaya za kompyuta kubadilisha polepole programu za kompyuta ambazo zinaendeshwa, kwa hivyo kughushi programu zako zilizopo za kompyuta ili kukusanya data za kibinafsi kutoka kwako."</string>
- <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
- <skip />
+ <string name="permlab_writeSettings" msgid="1365523497395143704">"rekebisha mipangilio ya mfumo jumla"</string>
<string name="permdesc_writeSettings" msgid="838789419871034696">"Huruhusu programu kurekebisha data za mipangilio ya mfumo. Programu mbaya zinaweza kuharibu usanidi wa mfumo wako."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"rekebisha mipangilio ya mfumo salama"</string>
<string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Huruhusu programu kurekebisha data ya mipangilio salama ya mfumo. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
- <skip />
+ <string name="permlab_writeGservices" msgid="2149426664226152185">"rekebisha ramani ya Google services"</string>
<string name="permdesc_writeGservices" msgid="6602362746516676175">"Huruhusu programu kurekebisha ramani ya huduma za Google. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
- <skip />
+ <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"anzisha kiotomatiki inapowashwa"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Huruhusu programu kujianzisha yenyewe punde tu mfumo unapokamilisha kuwaka. Hii inaweza kuifanya ichukue muda mrefu zaidi kuanzisha kompyuta ndogo na kuruhusu programu kupunguza kasi ya kifaa kwa jumla kwa kuendeshwa kila wakati."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Huruhusu programu kujiwasha upya punde tu mfumo unapokamilisha kuwasha. Hii inaweza kuifanya ichukue muda mrefu zaidi kuanzisha simu na kuruhusu programu kupunguza kasi ya simu kwa jumla kwa kuendesha kila wakati."</string>
- <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
- <skip />
+ <string name="permlab_broadcastSticky" msgid="7919126372606881614">"tuma tangazo la kulanata"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Huruhusu programu kutuma matangazo ya kunata, ambayo hubaki baada ya tangazo kuisha. Programu hasidi zinaweza kufanya kompyuta ndogo kuwa polepole au kutokuwa dhabiti kwa kukisababisha kutumia kumbukumbu kupita kiasi."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Huruhusu programu kutuma matangazo ya kunata, ambayo hubaki baada ya matangazo kuisha. Programu mbaya za kompyuta zinaweza kufanya simu kuwa polepole au kutokuwa dhabiti kwa kuisababisha itumie kumbukumbu nyingi sana."</string>
- <!-- no translation found for permlab_readContacts (6219652189510218240) -->
- <skip />
+ <string name="permlab_readContacts" msgid="6219652189510218240">"soma data ya anwani"</string>
<string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Huruhusu programu kusoma data yote ya anwani (anwani) iliyohifadhiwa kwenye kompyuta yako ndogo. Programu hasidi zinaweza kutumia hii ili kutuma data yako kwa watu wengine."</string>
<string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Huruhusu programu kusoma data zote za anwani zilizohifadhiwa kwenye simu yako. Programu mbaya za kompyuta zinaweza kutumia hii kutuma data yako kwa watu wengine."</string>
- <!-- no translation found for permlab_writeContacts (644616215860933284) -->
- <skip />
+ <string name="permlab_writeContacts" msgid="644616215860933284">"andika data ya anwani"</string>
<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>
<string name="permlab_readProfile" msgid="6824681438529842282">"soma data ya maelezo yako mafupi"</string>
@@ -478,46 +334,37 @@
<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="permlab_accessMockLocation" msgid="8688334974036823330">"vyanzo vya jaribio la mahali kwa lengo la majaribio"</string>
<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>
- <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
- <skip />
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"fikia amri za ziada za mtoa huduma ya mahali"</string>
<string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Fikia amri za ziada za mtoa huduma ya mahali. Programu mbaya za kompyuta zinaweza kutumia hii ili kutatiza utendaji wa GPS au vyanzo vingine vya mahali."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"kibali ili kusakinisha mtoa huduma ya mahali"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"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 au kusimamia na kuripoti mahali pako kwa chanzo cha nje."</string>
- <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
- <skip />
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"mahali laini (GPS)"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Fikia vyanzo vizuri vya mahali kama vile Mfumo wa Kugundua Mahali Ulimwenguni kwenye kompyuta ndogo, unapopatikana. Programu hasidi zinaweza kutumia hili kubainisha mahali ulipo, na huenda ikatumia nishati zaidi ya betri."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Fikia vyanzo bora vya mahali kama vile Mfumo wa Mkao Ulimwengu kote kwenye simu, mahali popote inapopatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo, na huenda ikatumia nguvu zaidi ya betri."</string>
- <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
- <skip />
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"mahali kwa kutegemea mtandao) pasipo shwari"</string>
<string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Fikia vyanzo vya mahali pasipo laini kama vile hifadhidata ya mtandao wa simu za mkononi ili kubainisha mahali karibu pa kompyuta ndogo, inapopatikana. Programu hasidi zinaweza kutumia hii ili kubainisha ukaribu wa mahali ulipo."</string>
<string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Fikia vyanzo vya mahali kama vile hifadhidata ya mtandao wa simu za mkononi ili kubainisha mahali pa simu palipokaribu, kama panapatikana. Programu mbaya za kompyuta zinaweza kutumia hii ili kubainisha mahali ulipo pa karibu."</string>
- <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
- <skip />
+ <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"fikia SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Huruhusu programu kutumia vipengele vya kiwango cha chini ya KivurumizaUso"</string>
- <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
- <skip />
+ <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"soma bafa ya fremu"</string>
<string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Huruhusu programu kusoma maudhui ya bafa ya fremu"</string>
- <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
- <skip />
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"badilisha mipangilio yako ya sauti"</string>
<string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Huruhusu programu kurekebisha mipangilio ya jumla ya kusikiika kama vile sauti na njia."</string>
- <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
- <skip />
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"rekodi sauti"</string>
<string name="permdesc_recordAudio" msgid="6493228261176552356">"Huruhusu programu kufikia njia ya rekodi ya sikika."</string>
<string name="permlab_camera" msgid="3616391919559751192">"chukua picha na video"</string>
<string name="permdesc_camera" msgid="6004878235852154239">"Huruhusu programu kuchukua picha na video kwa kamera. Hii huruhusu programu kwa wakati wowote kukusanya taswira ambazo kamera inaona."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"lemaza kompyuta ndogo kabisa"</string>
- <!-- outdated translation 2961292205764488304 --> <string name="permlab_brick" product="default" msgid="8337817093326370537">"lemaza kompyuta ndogo kabisa"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"simu iliyolemazwa kabisa"</string>
<string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Huruhusu programu kulemaza kompyuta yote ndogo kabisa. Hii ni hatari sana."</string>
<string name="permdesc_brick" product="default" msgid="5569526552607599221">"Huruhusu programu kulemaza simu yote kabisa. Hii ni hatari sana."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"lazimisha kompyuta ndogo kuwaka upya"</string>
- <!-- outdated translation 3436634972561795002 --> <string name="permlab_reboot" product="default" msgid="2898560872462638242">"lazimisha kompyuta ndogo kuwaka upya"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"lazimisha kwasha upya simu"</string>
<string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Huruhusu programu kulazimisha kompyuta ndogo kuwashwa upya."</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Huruhusu programu kulazimisha simu kuwasha."</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"weka na ondoa mifumo ya faili"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Huruhusu programu kuweka na kuondoa mifumo ya faili ya hifadhi inayoweza kuondolewa."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"fomati hifadhi ya nje"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Huruhusu programu kufomati hifadhi inayoweza kuondolewa."</string>
@@ -531,75 +378,59 @@
<string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Huruhusu programu kuweka / kuondoa hifadhi ya ndani."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"ipe hifadhi ya ndani jina jipya"</string>
<string name="permdesc_asec_rename" msgid="2152829985238876790">"Huruhusu programu kubadilisha jina la hifadhi ya ndani."</string>
- <!-- no translation found for permlab_vibrate (7768356019980849603) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7768356019980849603">"dhibiti kitingishi"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Huruhusu programu kudhibiti kitetemeshi."</string>
- <!-- no translation found for permlab_flashlight (2155920810121984215) -->
- <skip />
+ <string name="permlab_flashlight" msgid="2155920810121984215">"dhibiti tochi"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"Huruhusu programu kudhibiti tochi."</string>
- <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
- <skip />
- <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
- <skip />
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"dhibiti mapendekezo na vibali vya vifaa vya USB"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"Huruhusu programu kudhibiti mapendekezo na vibali vya vifaa vya USB."</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"tekeleza itifaki ya MTP"</string>
<string name="permdesc_accessMtp" msgid="6532961200486791570">"Huruhusu ufikiaji wa kiendeshaji cha kernel MTP ili kutekeleza itifaki ya USB ya MTP."</string>
- <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
- <skip />
+ <string name="permlab_hardware_test" msgid="4148290860400659146">"jaribu maunzi"</string>
<string name="permdesc_hardware_test" msgid="3668894686500081699">"Huruhusu programu kudhibiti vifaa mbalimbali kwa lengo la kujaribu maunzi."</string>
- <!-- no translation found for permlab_callPhone (3925836347681847954) -->
- <skip />
+ <string name="permlab_callPhone" msgid="3925836347681847954">"piga simu moja kwa moja kwa nambari za simu"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"Huruhusu programu kupiga nambari za simu bila mwingiliano wako. Programu mbaya za kompyuta huenda zikasababisha simu zisizotarajiwa kwenye bili yako ya simu. Kumbuka kwamba hii hairuhusu programu kupiga simu kwa nambari za dharura."</string>
- <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
- <skip />
+ <string name="permlab_callPrivileged" msgid="4198349211108497879">"piga simu moja kwa moja kwa nambari zozote za simu"</string>
<string name="permdesc_callPrivileged" msgid="244405067160028452">"Huruhusu programu kupiga simu kwa nambari yoyote ya simu, pamoja na nambari za dharura, bila mwingiliano wako. Programu mbaya za kompyuta huenda zikaweka simu zisizofaa kinyume cha sheria kwa huduma za dharura."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"anzisha usanidi wa kompyuta ndogo ya CDMA moja kwa moja"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"anzisha moja kwa moja usanidi wa simu ya CDMA"</string>
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Huruhusu programu kuanzisha utoaji CDMA. Huenda programu mbaya zikaanzisha utoaji CDMA isivyohitajika."</string>
- <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
- <skip />
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"dhibiti arifa za usasishaji mahali"</string>
<string name="permdesc_locationUpdates" msgid="2300018303720930256">"Huruhusu uwezeshaji/ulemezaji wa arifa za sasisho la mahali kutoka kwa redio. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
- <skip />
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"fikia mipangilio ya ukaguzi"</string>
<string name="permdesc_checkinProperties" msgid="7150307006141883832">"Huruhusu mfiko wa kusoma/kuandika kwa sifa zilizopakiwa na huduma ya ukaguzi. Haipaswi kutumiwa na programu za kawaida."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"chagua wijeti"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"Huruhusu programu kuelezea mfumo ni wijeti gani inayoweza kutumiwa na programu gani ya kompyuta. Ukiwa na kibali hiki, programu za kompyuta zinaweza kukupa ufikiaji wa data za kibinafsi za programu zingine za kompyuta. Haipaswi kutumiwa na programu za kawaida za kompyuta."</string>
- <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
- <skip />
+ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"badiliisha hali ya simu"</string>
<string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Huruhusu programu kudhibiti vipengele vya simu vya kifaa. programu yenye kibali hiki inaweza kubadili mitandao, kuwasha na kuzima redio ya simu na mambo kama hayo bila kukuarifu hata kamwe."</string>
<string name="permlab_readPhoneState" msgid="2326172951448691631">"soma hali ya simu na itambue"</string>
<string name="permdesc_readPhoneState" msgid="188877305147626781">"Huruhusu programu kufikia vipengele vya simu vya kifaa. programu yenye kibali hiki inaweza kubaini nambari ya simu na nambari tambulishi ya simu hii, kama simu inatumika, nambari ambayo inapiga imeunganishwa na mambo kama hayo."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zuia kompyuta ndogo dhidi ya kulala"</string>
- <!-- outdated translation 1531731435011495015 --> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zuia kompyuta ndogo dhidi ya kulala"</string>
+ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zuia simu dhidi ya kulala"</string>
<string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Huruhusu programu kuzuia kompyuta ndogo dhidi ya kwenda kulala."</string>
<string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Huruhusu programu kuzuia simu dhidi ya kuenda kulala."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"Washa au zima kompyuta ndogo"</string>
- <!-- outdated translation 2787034722616350417 --> <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"Washa au zima kompyuta ndogo"</string>
+ <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"washa au zima simu"</string>
<string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Huruhusu programu kuwasha au kuzima kompyuta ndogo."</string>
<string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Huruhusu programu kuwasha au kuzima."</string>
- <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
- <skip />
+ <string name="permlab_factoryTest" msgid="3715225492696416187">"endesha katika hali ya jaribio ya kiwanda"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Endesha kama jaribio la mtengenezaji la kiwango cha chini, kwa hivyo kuruhusu ufikiaji kamili wa maunzi ya kompyuta ndogo. Inapatikana tu wakati kompyuta ndogo inaendeshwa katika hali ya jaribio la mtengenezaji."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Endesha kama jaribio la kiwango cha chini cha mtengenezaji, kwa hivyo kuruhusu ufikiaji kamili wa maunzi ya simu. Inapatikana tu wakati simu inaendeshwa katika gumzo ya jaribio ya mtengenezaji."</string>
- <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
- <skip />
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"weka pazia"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"Huruhusu programu kuweka pazia ya mfumo."</string>
- <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"weka vidokezo vya ukubwa wa pazia"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Huruhusu programu kuweka vidokezo vya ukubwa wa pazia ya mfumo."</string>
- <!-- no translation found for permlab_masterClear (2315750423139697397) -->
- <skip />
+ <string name="permlab_masterClear" msgid="2315750423139697397">"weka upya mfumo kwa chaguo-msingi za kiwanda"</string>
<string name="permdesc_masterClear" msgid="5033465107545174514">"Huruhusu programu kuweka upya kabisa mfumo kwa mipangilio yake ya kiwanda, kwa hivyo kufuta data zote, usanidi, na programu za kompyuta zilizosanidiwa."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"weka muda"</string>
<string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"Huruhusu programu kubadilisha muda wa saa ya kompyuta ndogo."</string>
<string name="permdesc_setTime" product="default" msgid="667294309287080045">"Huruhusu programu kwa kubadilisha muda wa saa ya simu."</string>
- <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
- <skip />
+ <string name="permlab_setTimeZone" msgid="2945079801013077340">"weka ukanda wa saa"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Huruhusu programu kubadilisha ukanda saa wa kompyuta ndogo."</string>
<string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Huruhusu programu kubadilisha ukunda wa saa wa simu."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"tenda kama Huduma ya Meneja wa Akaunti"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"Huruhusu programu kupiga simu kwa Wahalalishaji Akaunti"</string>
- <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
- <skip />
+ <string name="permlab_getAccounts" msgid="4549918644233460103">"tambua akaunti zinazojulikana"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Huruhusu programu kupata orodha ya akaunti inayojulikana na kompyuta ndogo."</string>
<string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Huruhusu programu kupata orodha ya akaunti zinazojulikana na simu."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"tenda kama mhalalishaji"</string>
@@ -608,57 +439,43 @@
<string name="permdesc_manageAccounts" msgid="8804114016661104517">"Huruhusu programu kutekeleza utendaji kama vile kuongeza, na kuondoa akaunti na kufuta manenosiri ya akaunti hizo."</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"tumia hati-tambulishi za uhalalishaji akaunti"</string>
<string name="permdesc_useCredentials" msgid="7416570544619546974">"Huruhusu programu kuomba alama mbadala za uhalalishaji."</string>
- <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"angalia hali ya mtandao"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Huruhusu programu kuangalia hali ya mitandao yote."</string>
- <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
- <skip />
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"ufikiaji kamili wa mtandao"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Huruhusu programu kuunda soketi za mtandao."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"mabadiliko / kuingilia mipangilio ya mtandao/msonmgamano"</string>
<string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Inaruhusu programu kubadilisha mipangilio ya mtandao na kukatiza na kukagua msongamano wa mtandao, kwa mfano ili kubadilisha proksi nakituo tayarishi chochote cha APN. Programu hatari zinaweza kuchunguza, kuonyesha upya, au kubadilisha pakiti za mtandao bila ya elimu yako."</string>
- <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
- <skip />
+ <string name="permlab_changeNetworkState" msgid="958884291454327309">"badilisha muunganisho wa mtandao"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Huruhusu programu kubadilisha hali ya uunganishaji wa mtandao."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Badilisha muunganisho ulioskizwa"</string>
<string name="permdesc_changeTetherState" msgid="8905815579146349568">"Huruhusu programu kubadilisha hali ya kuzuia uunganishaji wa mtandao."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"badilisha mpangilio wa utumiaji data ya mandharinyuma"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Huruhusu programu kubadilisha mpangilio wa utumiaji data ya mandharinyuma."</string>
- <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="8100926650211034400">"ona hali ya mtandao-hewa"</string>
<string name="permdesc_accessWifiState" msgid="485796529139236346">"Huruhusu programu kuangalia maelezo kuhusu hali ya Wi-Fi."</string>
- <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
- <skip />
+ <string name="permlab_changeWifiState" msgid="7280632711057112137">"badilisha hali ya Wi-Fi"</string>
<string name="permdesc_changeWifiState" msgid="2950383153656873267">"Huruhusu programu kuunganisha na kutenganisha kutoka kwa pointi za ufikivu za Wi-Fi, na kufanya mabadiliko kwa mitandao ya Wi-Fi iliyosanidiwa."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ruhusu upokeaji wa Wi-Fi Multicast"</string>
<string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Huruhusu programu kupokea paketi zisizoelekezwa moja kwa moja kwa kifaa chako. Hii inawezakuwa muhimu wakati wa kutambua huduma zinazotambuliwa karibu na eneo hilo. Hutumia nguvu zaidi kuliko midi isiyo ya matangazo anuwai."</string>
- <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"usimamiaji bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Huruhusu programu kusanidi kompyuta ndogo ya karibu ya Bluetooth na kutambua na kulinganisha na vifaa vya mbali."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Huruhusu programu kusanidi simu ya ndani ya Bluetooth, na kutambua na kulinganisha na vifaa vya mbali."</string>
- <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"unda muunganisho wa Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Huruhusu programu kuona usanidi wa kompyuta ndogo ya karibu ya Bluetooth, na kuwezesha na kukubali miunganisho na vifaa vilivyolinganishwa."</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Huruhusu programu kuangalia usanidi wa simu ya ndani ya Bluetooth, na kufanya na kukubali maunganisho na vifaa vilivyolinganishwa."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"dhibiti Mawasiliano Karibu na Uga"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"Huruhusu programu kuwasiliana na lebo za Mawasiliano ya Karibu na Uga (NFC), kadi, na visomaji."</string>
- <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"lemaza ufunguo wa vitufe"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Huruhusu programu kulemaza kifunga vitufe na usalama wowote unaohusishwa na nenosiri. Mfano halisi wa hii ni simu kulemaza kifunga vitufe wakati wa kupokea simu inayoingia, kisha kuiwezesha upya kifunga vitufe wakati simu imemalizika."</string>
- <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
- <skip />
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"soma mipangilio ya usawazishaji"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Huruhusu programu kusoma mipangilio ya usawazishaji, kama vile kama usawazishaji umewezeshwa kwa Anwani."</string>
- <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"andika mipangilio ya usawazishaji"</string>
<string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Huruhusu programu kurekebisha mipangilio ya usawazishaji, kama vile kama usawazishaji umewezeshwa kwa Anwani."</string>
- <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
- <skip />
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"soma takwimu za usawazishaji"</string>
<string name="permdesc_readSyncStats" msgid="7511448343374465000">"Huruhusu programu kusoma takwimu zilizosawazishwa; k.v., historia ya usawazishaji ambao umetokea."</string>
- <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
- <skip />
- <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
- <skip />
- <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
- <skip />
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"soma milisho ya kujiunga"</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"Huruhusu programu kupata maelezo kuhusu milisho iliyosawazishwa kwa sasa."</string>
+ <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"andika milisho ya kujiunga"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Huruhusu programu kurekebisha milisho yako ya sasa iliyosawazishwa. Hii huenda ikaruhusu programu mbaya ya kompyuta kubadilisha milisho yako iliyosawazishwa."</string>
<string name="permlab_readDictionary" msgid="432535716804748781">"soma kamusi iliyobainishwa na mtumiaji"</string>
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Huruhusu programu kusoma maneno yoyote ya kibinafsi, majina na vifungu ambavyo huenda mtumiaji amevihifadhi katika kamusi ya mtumiaji."</string>
@@ -674,18 +491,12 @@
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Huruhusu programu kusoma na kuandika mfumo wa faili ya kache."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"piga/pokea simu za mtandao"</string>
<string name="permdesc_use_sip" msgid="6320376185606661843">"Huruhusu programu kutumia huduma ya SIP ili kupiga/kupokea simu za wavuti."</string>
- <!-- no translation found for permlab_readNetworkUsageHistory (7862593283611493232) -->
- <skip />
- <!-- no translation found for permdesc_readNetworkUsageHistory (6040738474779135653) -->
- <skip />
- <!-- no translation found for permlab_manageNetworkPolicy (2562053592339859990) -->
- <skip />
- <!-- no translation found for permdesc_manageNetworkPolicy (3723795285132803958) -->
- <skip />
- <!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
- <skip />
- <!-- no translation found for permdesc_modifyNetworkAccounting (8702285686629184404) -->
- <skip />
+ <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"soma matumizi ya historia ya mtandao"</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"Huruhusu programu kusoma matumizi ya historia ya mtandao kwa mitandao bainifu na programu."</string>
+ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"dhibiti sera ya mtandao"</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"Huruhusu programu kudhibiti sera za mtandao na kufafanua sheria bainifu za programu."</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"badilisha uthibitishaji wa matumizi ya mtandao"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"Huruhusu maelezo ya jinsi gain matumizi ya mtandao yanahisabiwa kulingana na matumizi. Sio matumizi ya programu za kawaida."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"Weka kanuni za nenosiri"</string>
<string name="policydesc_limitPassword" msgid="9083400080861728056">"Dhibiti urefu na vibambo vilivyoruhusiwa kwenye manenosiri ya kufungua skrini"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Chunguza majaribio ya kutofun gua skrini"</string>
@@ -700,14 +511,12 @@
<string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Futa data ya simu bila ya ilani, kwa utendakazi wa kuweka data kwa ujumla"</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Weka mbadala wa kifaa cha ulimwengu"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Weka kifaa mbadala cha ulimwengu kitakachotumiwa wakati wa kuwezesha sera. Msimamizi wa kwanza wa kifaa pekee anaweka matekelezo mbadala ya ulimwengu."</string>
- <!-- outdated translation 2314569545488269564 --> <string name="policylab_expirePassword" msgid="885279151847254056">"Weka muda wa kuisha wa nenosiri"</string>
- <!-- outdated translation 7276906351852798814 --> <string name="policydesc_expirePassword" msgid="4844430354224822074">"Dhibiti muda kabla ya nenosiri la kufunga skrini kuhitajika kubadilishwa"</string>
+ <string name="policylab_expirePassword" msgid="885279151847254056">"Weka muda wa kuisha wa nenosiri"</string>
+ <string name="policydesc_expirePassword" msgid="4844430354224822074">"Dhibiti jinsi kila mara nenosiri la kufunga skrini linafaa libadilishwe"</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Weka msimbo fiche wa hifadhi"</string>
<string name="policydesc_encryptedStorage" msgid="2504984732631479399">"Inahitaji kwamba data ya programu iliyohifadhiwa ifichamishwe"</string>
- <!-- no translation found for policylab_disableCamera (6395301023152297826) -->
- <skip />
- <!-- no translation found for policydesc_disableCamera (5680054212889413366) -->
- <skip />
+ <string name="policylab_disableCamera" msgid="6395301023152297826">"Lemaza kamera"</string>
+ <string name="policydesc_disableCamera" msgid="5680054212889413366">"Zuia matumizi yote ya kifaa cha kamera"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Nyumbani"</item>
<item msgid="869923650527136615">"Simu ya mkononi"</item>
@@ -822,61 +631,41 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Kazi"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Nyinginezo"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Ingiza msimbo wa PIN"</string>
- <!-- no translation found for keyguard_password_enter_puk_code (5965173481572346878) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_pin_prompt (2987350144349051286) -->
- <skip />
- <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
- <skip />
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"Ingiza PUK na msimbo mpya wa PIN"</string>
+ <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Msimbo wa PUK"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"Msimbo mpya wa PIN"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"VPN imetenganishwa"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Ingiza nenosiri kwa kufungua"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Ingiza PIN ili kufungua"</string>
- <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
- <skip />
- <!-- no translation found for keyguard_label_text (861796461028298424) -->
- <skip />
- <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
- <skip />
+ <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Msimbo wa PIN sio sahihi!"</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"Ili kufungua, bofya Menyu kisha 0."</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Nambari ya dharura"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Hakuna huduma"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"skrini imefungwa."</string>
- <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
- <skip />
- <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
- <skip />
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Bonyeza Menyu ili kufungua au kupiga simu ya dharura."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Bonyeza Menyu ili kufungua."</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Chora ruwaza ili kufungua"</string>
- <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
- <skip />
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Simu ya dharura"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Rudi kwa kupiga simu"</string>
- <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
- <skip />
+ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Sahihi!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Samahani, jaribu tena"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"Samahani, jaribu tena"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Inachaji <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Imechajiwa."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"Kishika nafasi<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
- <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
- <skip />
+ <string name="lockscreen_low_battery" msgid="1482873981919249740">"Unganisha chaja yako"</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Hakuna kadi ya SIM."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Hakuna kadi ya SIM katika kompyuta ndogo."</string>
- <!-- outdated translation 151659196095791474 --> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Hakuna kadi ya SIM katika kompyuta ndogo."</string>
- <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_instructions_long (7138450788301444298) -->
- <skip />
- <!-- no translation found for lockscreen_permanent_disabled_sim_instructions (1631853574702335453) -->
- <skip />
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Hakuna kadi ya SIM kwenye simu."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Tafadhali ingiza kadi ya SIM."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Kadi ya SIM inakosekana au haisomekani. Tafadhali ingiza kadi ya SIM."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Kadi yako ya SIM imelemazwa kabisa. "\n" tafadhali wasiliana na mtoa huduma wako wa psiwaya ili kupata kadi nyingine ya SIM."</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Simu za dharura pekee"</string>
- <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
- <skip />
- <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
- <skip />
+ <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Mtandao umefungwa"</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kadi ya SIM imefungwana PUK."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Tafadhali angalia Mwongozo wa Mtumiaji au wasiliana na Huduma kwa Wateja."</string>
- <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
- <skip />
- <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
- <skip />
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Kadi ya SIM imefungwa."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Inafungua kadi ya SIM..."</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Umechora vibaya ruwaza yako ya kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Tafadhali jaribu tena kati ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"Haujaingiza nenosiri yako kwa usahihi mara<xliff:g id="NUMBER_0">%d</xliff:g>Tafadhali jaribu tena. "\n\n"baada ya sekunde<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Haujaingiza PIN yako kwa usahihi mara<xliff:g id="NUMBER_0">%d</xliff:g>tafadhali jaribu tena. "\n\n"baada ya sekunde<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
@@ -886,24 +675,16 @@
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Umejaribu kufungua simu kwa njia isiyo sahihi mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> zaidi yasiyofanikiwa, simu itawekwa upya kwa kiwanda chaguo-msingi na data yote ya mtumiaji itapotea."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Kompyuta ndogo haitaweza kuwekwa upya kwa kiwanda chaguo-msingi."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Umejaribu kufungua kompyuta ndogo kwa njia isiyo sahihi mara <xliff:g id="NUMBER">%d</xliff:g>. Kompyuta ndogo haitaweza kuwekwa upya kwa kiwanda chaguo-msingi."</string>
- <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
- <skip />
- <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
- <skip />
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Jaribu tena kwa sekunde <xliff:g id="NUMBER">%d</xliff:g>."</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Umesahau mchoro?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Fungua akaunti"</string>
- <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
- <skip />
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Majaribio mengi ya mchoro!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Kufungua, ingia na akaunti yako ya Google"</string>
- <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
- <skip />
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Jina la mtumiaji/Barua pepe)"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Nenosiri"</string>
+ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Ingia"</string>
+ <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Jina batili la mtumiaji au nywila"</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Je, umesahau jina lako la mtumiaji au nenosiri?"\n"Tembela "<b>"google.com/accounts/recovery"</b></string>
<string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Inakagua..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Fungua"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sauti imewezeshwa"</string>
@@ -913,17 +694,14 @@
<string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
<string name="hour_ampm" msgid="4329881288269772723">"Kishika nafasi<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
<string name="hour_cap_ampm" msgid="1829009197680861107">"Kishika nafasi<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
- <!-- no translation found for factorytest_failed (5410270329114212041) -->
- <skip />
+ <string name="factorytest_failed" msgid="5410270329114212041">"Jaribio la kiwanda limeshindikana"</string>
<string name="factorytest_not_system" msgid="4435201656767276723">"Tendo la JARIBIO_LA KIWANDA linahimiliwa tu kwa furushi zilizosakinishwa katika /system/app."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Hakuna furushi lililopatikana ambalo linatoa tendo la JARIBIO_LA KIWANDA."</string>
- <!-- no translation found for factorytest_reboot (6320168203050791643) -->
- <skip />
+ <string name="factorytest_reboot" msgid="6320168203050791643">"Fungua upya"</string>
<string name="js_dialog_title" msgid="8143918455087008109">"Ukurasa ulio \'<xliff:g id="TITLE">%s</xliff:g>\' unasema:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"HatiJava"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">"Toka kwa ukurasa huu?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Chagua Sawa ili kuendelea, au Ghairi ili kubaki kwenye ukurasa wa sasa."</string>
- <!-- no translation found for save_password_label (6860261758665825069) -->
- <skip />
+ <string name="save_password_label" msgid="6860261758665825069">"Thibitisha"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"Dokezo: gonga mara mbili ili kukuza ndani na nje."</string>
<string name="autofill_this_form" msgid="1272247532604569872">"Mjazo-Atomatiki"</string>
<string name="setup_autofill" msgid="8154593408885654044">"Sanidi Mjazo-Atomatiki"</string>
@@ -931,30 +709,18 @@
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <!-- no translation found for autofill_province (2231806553863422300) -->
- <skip />
- <!-- no translation found for autofill_postal_code (4696430407689377108) -->
- <skip />
- <!-- no translation found for autofill_state (6988894195520044613) -->
- <skip />
- <!-- no translation found for autofill_zip_code (8697544592627322946) -->
- <skip />
- <!-- no translation found for autofill_county (237073771020362891) -->
- <skip />
- <!-- no translation found for autofill_island (4020100875984667025) -->
- <skip />
- <!-- no translation found for autofill_district (8400735073392267672) -->
- <skip />
- <!-- no translation found for autofill_department (5343279462564453309) -->
- <skip />
- <!-- no translation found for autofill_prefecture (2028499485065800419) -->
- <skip />
- <!-- no translation found for autofill_parish (8202206105468820057) -->
- <skip />
- <!-- no translation found for autofill_area (3547409050889952423) -->
- <skip />
- <!-- no translation found for autofill_emirate (2893880978835698818) -->
- <skip />
+ <string name="autofill_province" msgid="2231806553863422300">"Mkoa"</string>
+ <string name="autofill_postal_code" msgid="4696430407689377108">"Msimbo wa posta"</string>
+ <string name="autofill_state" msgid="6988894195520044613">"Jimbo"</string>
+ <string name="autofill_zip_code" msgid="8697544592627322946">"Msimbo wa posta"</string>
+ <string name="autofill_county" msgid="237073771020362891">"Nchi"</string>
+ <string name="autofill_island" msgid="4020100875984667025">"Kisiwa"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"Wilaya"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"Kitengo"</string>
+ <string name="autofill_prefecture" msgid="2028499485065800419">"Prefecture"</string>
+ <string name="autofill_parish" msgid="8202206105468820057">"Mtaa"</string>
+ <string name="autofill_area" msgid="3547409050889952423">"Eneo"</string>
+ <string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"soma historia na alamisho za Kivinjari"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Huruhusu programu kusoma URL zote ambazo Kivinjari imetembelea, na alamisho zile zingine zote za Kivinjari."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"andika historia ya Kivinjari na alamisho"</string>
@@ -970,37 +736,24 @@
<string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Inaruhusu programu kuthibitisha kuwa furushi linaweza kusakinishwa."</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"Funga kwa kithibitishaji cha furushi"</string>
<string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Inaruhusu mmiliki kufanya maombi ya furushi la vibainishi. Kamwe hazitaitajika kwa programu za kawaida."</string>
- <!-- no translation found for save_password_message (767344687139195790) -->
- <skip />
- <!-- no translation found for save_password_notnow (6389675316706699758) -->
- <skip />
- <!-- no translation found for save_password_remember (6491879678996749466) -->
- <skip />
- <!-- no translation found for save_password_never (8274330296785855105) -->
- <skip />
- <!-- no translation found for open_permission_deny (5661861460947222274) -->
- <skip />
- <!-- no translation found for text_copied (4985729524670131385) -->
- <skip />
- <!-- no translation found for more_item_label (4650918923083320495) -->
- <skip />
- <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
- <skip />
- <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
- <skip />
- <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
- <skip />
- <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
- <skip />
- <!-- no translation found for search_go (8298016669822141719) -->
- <skip />
+ <string name="save_password_message" msgid="767344687139195790">"Unataka kuvinjari ili ukumbuke nenosiri hili?"</string>
+ <string name="save_password_notnow" msgid="6389675316706699758">"Si Sasa"</string>
+ <string name="save_password_remember" msgid="6491879678996749466">"Kumbuka"</string>
+ <string name="save_password_never" msgid="8274330296785855105">"Katu"</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"Huna idhini ya kuona ukurasa huu."</string>
+ <string name="text_copied" msgid="4985729524670131385">"Maandishi yamenakiliwa kwenye ubao klipu."</string>
+ <string name="more_item_label" msgid="4650918923083320495">"Zaidi"</string>
+ <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menyu+"</string>
+ <string name="menu_space_shortcut_label" msgid="2410328639272162537">"mwanya"</string>
+ <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ingiza"</string>
+ <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"futa"</string>
+ <string name="search_go" msgid="8298016669822141719">"Tafuta"</string>
<string name="searchview_description_search" msgid="6749826639098512120">"Tafuta"</string>
<string name="searchview_description_query" msgid="5911778593125355124">"Hoja ya utafutaji"</string>
<string name="searchview_description_clear" msgid="1330281990951833033">"Futa swali"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Wasilisha hoja"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Utafutaji wa sauti"</string>
- <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
- <skip />
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"Mwezi 1 uliopita"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Kabla ya mwezi 1 uliopita"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"Sekunde 1 iliopita"</item>
@@ -1074,37 +827,22 @@
<string name="preposition_for_date" msgid="9093949757757445117">"mnamo <xliff:g id="DATE">%s</xliff:g>"</string>
<string name="preposition_for_time" msgid="5506831244263083793">"Saa <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="preposition_for_year" msgid="5040395640711867177">"ndani ya <xliff:g id="YEAR">%s</xliff:g>"</string>
- <!-- no translation found for day (8144195776058119424) -->
- <skip />
- <!-- no translation found for days (4774547661021344602) -->
- <skip />
- <!-- no translation found for hour (2126771916426189481) -->
- <skip />
- <!-- no translation found for hours (894424005266852993) -->
- <skip />
- <!-- no translation found for minute (9148878657703769868) -->
- <skip />
- <!-- no translation found for minutes (5646001005827034509) -->
- <skip />
- <!-- no translation found for second (3184235808021478) -->
- <skip />
- <!-- no translation found for seconds (3161515347216589235) -->
- <skip />
- <!-- no translation found for week (5617961537173061583) -->
- <skip />
- <!-- no translation found for weeks (6509623834583944518) -->
- <skip />
- <!-- no translation found for year (4001118221013892076) -->
- <skip />
- <!-- no translation found for years (6881577717993213522) -->
- <skip />
- <!-- no translation found for VideoView_error_title (3359437293118172396) -->
- <skip />
+ <string name="day" msgid="8144195776058119424">"siku"</string>
+ <string name="days" msgid="4774547661021344602">"siku"</string>
+ <string name="hour" msgid="2126771916426189481">"saa"</string>
+ <string name="hours" msgid="894424005266852993">"saa"</string>
+ <string name="minute" msgid="9148878657703769868">"dakika"</string>
+ <string name="minutes" msgid="5646001005827034509">"Dakika"</string>
+ <string name="second" msgid="3184235808021478">"sekunde"</string>
+ <string name="seconds" msgid="3161515347216589235">"Sekunde"</string>
+ <string name="week" msgid="5617961537173061583">"wiki"</string>
+ <string name="weeks" msgid="6509623834583944518">"wiki"</string>
+ <string name="year" msgid="4001118221013892076">"mwaka"</string>
+ <string name="years" msgid="6881577717993213522">"miaka"</string>
+ <string name="VideoView_error_title" msgid="3359437293118172396">"Haiwezi kucheza video"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Samahani, video hii sio halali kwa mfululizo kwa kifaa hiki."</string>
- <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
- <skip />
- <!-- no translation found for VideoView_error_button (2822238215100679592) -->
- <skip />
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"Samahani, video hii haiwezi kuchezwa."</string>
+ <string name="VideoView_error_button" msgid="2822238215100679592">"Sawa"</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">"adhuhuri"</string>
<string name="Noon" msgid="3342127745230013127">"Adhuhuri"</string>
@@ -1112,53 +850,40 @@
<string name="Midnight" msgid="5630806906897892201">"Usiku wa manane"</string>
<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>
- <!-- no translation found for selectAll (6876518925844129331) -->
- <skip />
- <!-- no translation found for cut (3092569408438626261) -->
- <skip />
- <!-- no translation found for copy (2681946229533511987) -->
- <skip />
- <!-- no translation found for paste (5629880836805036433) -->
- <skip />
+ <string name="selectAll" msgid="6876518925844129331">"Chagua zote"</string>
+ <string name="cut" msgid="3092569408438626261">"Kata"</string>
+ <string name="copy" msgid="2681946229533511987">"Nakala"</string>
+ <string name="paste" msgid="5629880836805036433">"Bandika"</string>
<string name="replace" msgid="5781686059063148930">"Badilisha???"</string>
<string name="delete" msgid="6098684844021697789">"Futa"</string>
- <!-- no translation found for copyUrl (2538211579596067402) -->
- <skip />
+ <string name="copyUrl" msgid="2538211579596067402">"Nakili URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Chagua maandishi"</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Uchaguzi wa maandishi?"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"Ongeza kwenye kamusi"</string>
- <string name="inputMethod" msgid="1653630062304567879">"Mbinu ya uingizaji"</string>
- <string name="editTextMenuTitle" msgid="4909135564941815494">"Vitendo vya maandishi"</string>
- <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+ <!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">" Nafasi ya hifadhi ya kompyuta ndogo inaisha."</string>
- <!-- outdated translation 4231085657068852042 --> <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">" Nafasi ya hifadhi ya kompyuta ndogo inaisha."</string>
- <!-- no translation found for ok (5970060430562524910) -->
- <skip />
- <!-- no translation found for cancel (6442560571259935130) -->
- <skip />
- <!-- no translation found for yes (5362982303337969312) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
<skip />
- <!-- no translation found for no (5141531044935541497) -->
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
+ <string name="inputMethod" msgid="1653630062304567879">"Mbinu ya uingizaji"</string>
+ <string name="editTextMenuTitle" msgid="4909135564941815494">"Vitendo vya maandishi"</string>
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Nafasi kidogo"</string>
+ <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">" Nafasi ya hifadhi ya kompyuta ndogo inaisha."</string>
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Nafasi ya hifadhi ya simu inaisha."</string>
+ <string name="ok" msgid="5970060430562524910">"Sawa"</string>
+ <string name="cancel" msgid="6442560571259935130">"Ghairi"</string>
+ <string name="yes" msgid="5362982303337969312">"Sawa"</string>
+ <string name="no" msgid="5141531044935541497">"Ghairi"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Zingatia"</string>
<string name="loading" msgid="1760724998928255250">"Inapakia..."</string>
- <!-- no translation found for capital_on (1544682755514494298) -->
- <skip />
- <!-- no translation found for capital_off (6815870386972805832) -->
- <skip />
- <!-- no translation found for whichApplication (4533185947064773386) -->
- <skip />
- <!-- no translation found for alwaysUse (4583018368000610438) -->
- <skip />
- <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
- <skip />
- <!-- no translation found for chooseActivity (1009246475582238425) -->
- <skip />
- <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
- <skip />
- <!-- no translation found for noApplications (1691104391758345586) -->
- <skip />
+ <string name="capital_on" msgid="1544682755514494298">"Mnamo"</string>
+ <string name="capital_off" msgid="6815870386972805832">"ZIMA"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"Kamilisha kitendo kwa kutumia"</string>
+ <string name="alwaysUse" msgid="4583018368000610438">"Tumia kama chaguo-msingi la kitendo hiki."</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Futa chaguo-msingi kwenye Mipangilio ya Nyumbani &gt; Programu &gt; Dhibiti programu."</string>
+ <string name="chooseActivity" msgid="1009246475582238425">"Chagua kitendo"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"Fungua mipangilio kw akifaacha USB"</string>
+ <string name="noApplications" msgid="1691104391758345586">"Hakuna programu zinazoweza kufanya kitendo hiki."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"Kwa bahati mbaya, <xliff:g id="APPLICATION">%1$s</xliff:g> imekoma."</string>
<string name="aerr_process" msgid="4507058997035697579">"Kwa bahati mbaya, mchakato <xliff:g id="PROCESS">%1$s</xliff:g> umekoma."</string>
@@ -1169,17 +894,13 @@
<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 />
+ <string name="wait" msgid="7147118217226317732">"Subiri"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Programu imeelekezwa upya"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g>inaendesha sasa."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilizinduliwa mwanzoni."</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">"Kipimo"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Onyesha kila wakati"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Wezesha upya hii kwa Mipangilio &gt; Programu &gt; Simamia programu."</string>
<string name="smv_application" msgid="295583804361236288">"Shughuli ya <xliff:g id="APPLICATION">%1$s</xliff:g> (programu <xliff:g id="PROCESS">%2$s</xliff:g>) imeenda kinyume na sera yake ya StrictMode."</string>
<string name="smv_process" msgid="5120397012047462446">"Shughuli ya <xliff:g id="PROCESS">%1$s</xliff:g> imeenda kinyume na kulazimisha sera yake ya StrictMode."</string>
<string name="android_upgrading_title" msgid="378740715658358071">"Android inapandishwa gredi..."</string>
@@ -1194,35 +915,26 @@
<string name="old_app_description" msgid="942967900237208466">"Usianze programu mpya"</string>
<string name="new_app_action" msgid="5472756926945440706">"Anza <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="6830398339826789493">"Komesha programu nzee bila ya kuhifadhi."</string>
- <!-- no translation found for sendText (5132506121645618310) -->
- <skip />
- <!-- no translation found for volume_ringtone (6885421406845734650) -->
- <skip />
+ <string name="sendText" msgid="5132506121645618310">"Chagua kitendo cha jaribio"</string>
+ <string name="volume_ringtone" msgid="6885421406845734650">"Sauti ya mlio"</string>
<string name="volume_music" msgid="5421651157138628171">"Sauti ya media"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Inacheza kupitia Bluetooth"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Toni ya mlio iliyokimya imechaguliwa"</string>
- <!-- no translation found for volume_call (3941680041282788711) -->
- <skip />
+ <string name="volume_call" msgid="3941680041282788711">"Sauti ya simu inayoendelea"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Sauti ya simu inayoendelea ya Bluetooth"</string>
- <!-- no translation found for volume_alarm (1985191616042689100) -->
- <skip />
+ <string name="volume_alarm" msgid="1985191616042689100">"Sauti ya kengele"</string>
<string name="volume_notification" msgid="2422265656744276715">"Sauti ya notisi"</string>
- <!-- no translation found for volume_unknown (1400219669770445902) -->
- <skip />
+ <string name="volume_unknown" msgid="1400219669770445902">"Kiwango"</string>
<string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Sauti ya Bluetooth"</string>
<string name="volume_icon_description_ringer" msgid="3326003847006162496">"Sauti ya toni mlio"</string>
<string name="volume_icon_description_incall" msgid="8890073218154543397">"Sauti ya simu"</string>
<string name="volume_icon_description_media" msgid="4217311719665194215">"Sauti ya midia"</string>
<string name="volume_icon_description_notification" msgid="7044986546477282274">"Sauti ya arifa"</string>
- <!-- no translation found for ringtone_default (3789758980357696936) -->
- <skip />
- <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
- <skip />
- <!-- no translation found for ringtone_silent (4440324407807468713) -->
- <skip />
+ <string name="ringtone_default" msgid="3789758980357696936">"Toni mlio chaguo-msingi"</string>
+ <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Toni mlio chaguo-msingi (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+ <string name="ringtone_silent" msgid="4440324407807468713">"Kimya"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Toni za mlio"</string>
- <!-- no translation found for ringtone_unknown (5477919988701784788) -->
- <skip />
+ <string name="ringtone_unknown" msgid="5477919988701784788">"Mkirizo amabo haujulikani"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"Mtandao wa Wi-Fi unapatikana"</item>
<item quantity="other" msgid="4192424489168397386">"Mitandao ya Wi-Fi inapatikana"</item>
@@ -1233,64 +945,42 @@
</plurals>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Haikuweza kuunganisha kwa Mtandao-Hewa"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" inao muunganisho duni wa wavuti."</string>
- <!-- no translation found for wifi_p2p_dialog_title (97611782659324517) -->
- <skip />
- <!-- no translation found for wifi_p2p_turnon_message (2804722042556269129) -->
- <skip />
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Mtandao hewa Moja kwa moja"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Anza uendeshaji wa Moja kwa moja wa Mtando hewa. Hii inazima uendeshaji wa Mtandao hewa wa mteja/hotspot (umejaa)."</string>
<string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Haikuweza kuanza Mtandao hewa Moja kwa moja"</string>
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Ombi la usanidi wa Mtandao hewa kutoka <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Bofya SAWA ili kukubali."</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Ombi la usanidi wa Mtandao hewa kutoka <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Ingiza nenosiri ili kuendelea."</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"Pin ya WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> inahitaji kuingizwa kwenye kifaa cha piya <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g>ili usanidi wa muunganisho kuendelea."</string>
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi ya Moja kwa Moja imewashwa"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Gusa kwa ajili ya mipangilio"</string>
<string name="select_character" msgid="3365550120617701745">"Ingiza kibambo"</string>
- <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
- <skip />
- <!-- no translation found for sms_control_title (7296612781128917719) -->
- <skip />
+ <string name="sms_control_default_app_name" msgid="7630529934366549163">"Programu haijulikani"</string>
+ <string name="sms_control_title" msgid="7296612781128917719">"Inatuma ujumbe wa SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Kiwango kikubwa cha ujumbe wa SMS kinatumwa. Chagua \"Sawa\" ili kuendelea, au \"Ghairi\" ili kukomesha kutuma."</string>
- <!-- no translation found for sms_control_yes (2532062172402615953) -->
- <skip />
- <!-- no translation found for sms_control_no (1715320703137199869) -->
- <skip />
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
+ <string name="sms_control_yes" msgid="2532062172402615953">"Sawa"</string>
+ <string name="sms_control_no" msgid="1715320703137199869">"Ghairi"</string>
+ <string name="sim_removed_title" msgid="6227712319223226185">"Kadi ya SIM imeondolewa"</string>
<string name="sim_removed_message" msgid="2333164559970958645">"mtandao wa simu hutapatika hadi uanzishe upya na kadi ya SIM halali iliyoingizwa."</string>
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_done_button" msgid="827949989369963775">"Kwisha"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Kadi ya SIM imeongezwa"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Lazima uwashe upya kifaa chako ili kufikia mtandao wa simu."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Anza upya"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Weka muda"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Weka tarehe"</string>
- <!-- no translation found for date_time_set (5777075614321087758) -->
- <skip />
- <!-- no translation found for default_permission_group (2690160991405646128) -->
- <skip />
- <!-- no translation found for no_permissions (7283357728219338112) -->
- <skip />
+ <string name="date_time_set" msgid="5777075614321087758">"Weka"</string>
+ <string name="default_permission_group" msgid="2690160991405646128">"Chaguo-msingi"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Hakuna vibali vinavyohitajika"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Ficha"</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Onyesha zote"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Hifadhi Kubwa ya USB"</string>
- <!-- no translation found for usb_storage_title (5901459041398751495) -->
- <skip />
+ <string name="usb_storage_title" msgid="5901459041398751495">"USB imeunganishwa"</string>
<string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Umeunganisha kwenye kompyuta yako kupitia USB. Gusa kitufe hapa chini kama unataka kunakili faili kati ya kompyuta yako na hifadhi yako ya USB ya Android."</string>
<string name="usb_storage_message" product="default" msgid="4510858346516069238">"Umeunganisha kwenye kompyuta yako kupitia USB. Gusa kitufe hapa chini kama unataka kunakili faili kati ya kompyuta yako na kadi yako ya SD ya Android."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Wezesha hifadhi ya USB"</string>
<string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Kuna tatizo la kutumia hifadhi yako ya USB kwa kihifadhi vitu vingi cha USB."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Kuna tatizo la kutumia kadi yako ya SD kwa kihifadhi vitu vingi cha USB."</string>
- <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
- <skip />
- <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
- <skip />
+ <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB imeunganishwa"</string>
+ <string name="usb_storage_notification_message" msgid="7380082404288219341">"Chagua ili kunakili faili kwa/kutoka kwenye kompyuta yako"</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Zima hifadhi ya USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Chagua ili kuzima hifadhi ya USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"USB ya kuhifadhi inatumika"</string>
@@ -1302,16 +992,11 @@
<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="7323658469626514207">"Uendeshaji wa USB hujafanikiwa"</string>
<string name="dlg_ok" msgid="7376953167039865701">"Sawa"</string>
- <!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
- <skip />
- <!-- no translation found for usb_ptp_notification_title (1960817192216064833) -->
- <skip />
- <!-- no translation found for usb_cd_installer_notification_title (6774712827892090754) -->
- <skip />
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
- <!-- no translation found for usb_notification_message (4447869605109736382) -->
- <skip />
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Imeunganishwa kama kifaa cha midia"</string>
+ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Imeunganishwa kama kamera"</string>
+ <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Imeunganishwa kama kisakinishi"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Imeunganishwa kwa kifuasi cha USB"</string>
+ <string name="usb_notification_message" msgid="4447869605109736382">"Gusa kwa machaguo mengine ya USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Fomati hifadhi ya USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Fomati kadi ya SD"</string>
<string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Fomati hifadhi ya USB, unafuta faili zote zilizohifadhiwa hapo? Hatua hii haiwezi kugeuzwa!"</string>
@@ -1320,8 +1005,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji USB umeunganishwa"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Chagua ili kulemaza utatuaji USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Chagua mbinu ya uingizaji"</string>
- <!-- no translation found for configure_input_methods (6324843080254191535) -->
- <skip />
+ <string name="configure_input_methods" msgid="6324843080254191535">"Sanidi mbinu za uingizaji"</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>"wagombeaji"</u></string>
@@ -1376,14 +1060,10 @@
<string name="accessibility_binding_label" msgid="4148120742096474641">"Ufikiaji"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Pazia"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Badilisha pazia"</string>
- <!-- no translation found for vpn_title (8219003246858087489) -->
- <skip />
- <!-- no translation found for vpn_title_long (6400714798049252294) -->
- <skip />
- <!-- no translation found for vpn_text (1610714069627824309) -->
- <skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
- <skip />
+ <string name="vpn_title" msgid="8219003246858087489">"VPN imeamilishwa."</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"VPN imeamilishwa na <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="vpn_text" msgid="1610714069627824309">"Gonga ili kudhibiti mtandao."</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"Imeunganishwa kwa <xliff:g id="SESSION">%s</xliff:g>. Gonga ili kudhibiti mtandao"</string>
<string name="upload_file" msgid="2897957172366730416">"Chagua faili"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Hakuna faili iliyochaguliwa"</string>
<string name="reset" msgid="2448168080964209908">"Weka upya"</string>
@@ -1432,12 +1112,15 @@
<string name="sync_really_delete" msgid="8933566316059338692">"Futa vipengee."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"Tendua ufutaji."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Usifanye chochote kwa sasa."</string>
- <!-- no translation found for choose_account_label (4191313562041125787) -->
+ <string name="choose_account_label" msgid="4191313562041125787">"Chagua akaunti"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Ongezeko"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Punguza"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> gonga na shikilia"</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Nyiririsha juu kuongeza na chini kupunguza."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Dakika ya nyongeza"</string>
@@ -1477,30 +1160,21 @@
<string name="description_target_silent" msgid="893551287746522182">"Kimya"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string>
<string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Muhimu. Kifaa cha kuskiza kilihitaji kusikiliza vichupo wakati wa kucharaza nenosiri."</string>
- <!-- no translation found for action_bar_home_description (5293600496601490216) -->
- <skip />
- <!-- no translation found for action_bar_up_description (2237496562952152589) -->
- <skip />
- <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
- <skip />
- <!-- no translation found for storage_internal (7556050805474115618) -->
- <skip />
- <!-- no translation found for storage_sd_card (8921771478629812343) -->
- <skip />
- <!-- no translation found for storage_usb (3017954059538517278) -->
- <skip />
- <!-- no translation found for extract_edit_menu_button (302060189057163906) -->
- <skip />
- <!-- no translation found for data_usage_warning_title (1955638862122232342) -->
- <skip />
- <!-- no translation found for data_usage_warning_body (3354394590936526648) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_title (7636489436819470761) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
- <skip />
+ <string name="action_bar_home_description" msgid="5293600496601490216">"Abiri nyumbani"</string>
+ <string name="action_bar_up_description" msgid="2237496562952152589">"Ongoza"</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">"Chaguo zaidi"</string>
+ <string name="storage_internal" msgid="7556050805474115618">"Hifadhi ya Ndani"</string>
+ <string name="storage_sd_card" msgid="8921771478629812343">"Kadi ya SD"</string>
+ <string name="storage_usb" msgid="3017954059538517278">"Hifadhi ya USB"</string>
+ <string name="extract_edit_menu_button" msgid="302060189057163906">"Hariri..."</string>
+ <string name="data_usage_warning_title" msgid="1955638862122232342">"Onyo la matumizi ya data"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
+ <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data ya 2G-3G imelemazwa"</string>
+ <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data ya 4G imelemazwa"</string>
+ <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data ya simu imelemazwa"</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Taarifa za Wi-fi zimefichwa"</string>
<string name="data_usage_limit_body" msgid="4313857592916426843">"Gusa ili kuwezesha"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Kikomo cha data ya 2G-3G kimezidishwa"</string>
@@ -1510,41 +1184,23 @@
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> juu ya kikomo kilichobainishwa"</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Data ya mandhari nyuma imezuiwa"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"Gusa ili kuondoa kizuizi"</string>
- <!-- no translation found for ssl_certificate (6510040486049237639) -->
- <skip />
- <!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
- <skip />
- <!-- no translation found for issued_to (454239480274921032) -->
- <skip />
- <!-- no translation found for common_name (2233209299434172646) -->
- <skip />
- <!-- no translation found for org_name (6973561190762085236) -->
- <skip />
- <!-- no translation found for org_unit (7265981890422070383) -->
- <skip />
- <!-- no translation found for issued_by (2647584988057481566) -->
- <skip />
- <!-- no translation found for validity_period (8818886137545983110) -->
- <skip />
- <!-- no translation found for issued_on (5895017404361397232) -->
- <skip />
- <!-- no translation found for expires_on (3676242949915959821) -->
- <skip />
- <!-- no translation found for serial_number (758814067660862493) -->
- <skip />
- <!-- no translation found for fingerprints (4516019619850763049) -->
- <skip />
- <!-- no translation found for sha256_fingerprint (4391271286477279263) -->
- <skip />
- <!-- no translation found for sha1_fingerprint (7930330235269404581) -->
- <skip />
- <!-- no translation found for activity_chooser_view_see_all (180268188117163072) -->
- <skip />
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="ssl_certificate" msgid="6510040486049237639">"Cheti cha usalama"</string>
+ <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Cheti hiki ni halali."</string>
+ <string name="issued_to" msgid="454239480274921032">"Kimetolewa kwa:"</string>
+ <string name="common_name" msgid="2233209299434172646">"Jina la kawaida:"</string>
+ <string name="org_name" msgid="6973561190762085236">"Shirika:"</string>
+ <string name="org_unit" msgid="7265981890422070383">"Sehemu ya shirika:"</string>
+ <string name="issued_by" msgid="2647584988057481566">"Kimetolewa na:"</string>
+ <string name="validity_period" msgid="8818886137545983110">"Uhalali:"</string>
+ <string name="issued_on" msgid="5895017404361397232">"Kilitolewa mnamo:"</string>
+ <string name="expires_on" msgid="3676242949915959821">"Inaisha muda mnamo:"</string>
+ <string name="serial_number" msgid="758814067660862493">"Nambari ya ufuatiliaji:"</string>
+ <string name="fingerprints" msgid="4516019619850763049">"Alazama za Vidole:"</string>
+ <string name="sha256_fingerprint" msgid="4391271286477279263">"Alama ya kidole ya SHA-256:"</string>
+ <string name="sha1_fingerprint" msgid="7930330235269404581">"Alama ya kidole ya SHA-1:"</string>
+ <string name="activity_chooser_view_see_all" msgid="180268188117163072">"Tazama zote..."</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Chagua shughuli"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Shiriki na..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Kifaa kimefungwa."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 13bbac60f5c8..7fa76589957d 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -32,5 +32,8 @@
<!-- see comment in values/config.xml -->
<dimen name="config_prefDialogWidth">580dp</dimen>
+ <!-- If true, the screen can be rotated via the accelerometer in all 4
+ rotations as the default behavior. -->
+ <bool name="config_allowAllRotations">true</bool>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index c63eaf7c51a1..f535cae510f5 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"คัดลอก URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"เลือกข้อความ..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"การเลือกข้อความ"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+เพิ่มลงในพจนานุกรม"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"วิธีป้อนข้อมูล"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"การทำงานของข้อความ"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"เหลือที่ว่างน้อย"</string>
@@ -1108,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"เลิกทำการลบ"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"ไม่ต้องทำอะไรในขณะนี้"</string>
<string name="choose_account_label" msgid="4191313562041125787">"เลือกบัญชี"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"การเพิ่ม"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"การลด"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"แตะ <xliff:g id="VALUE">%s</xliff:g> ค้างไว้"</string>
@@ -1157,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"ที่เก็บข้อมูล USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"แก้ไข..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"คำเตือนการใช้ข้อมูล"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"การใช้งานเกิน <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 68ae9dd0be27..3803181b2a9b 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ idagdag sa diksyunaryo"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Pamamaraan ng pag-input"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Pagkilos ng teksto"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Mababa sa espasyo"</string>
@@ -1108,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"I-undo ang mga pagtanggal."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Walang gawin sa ngayon."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Pumili ng account"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Taasan"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Babaan"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> tapikin at pindutin nang matagal."</string>
@@ -1157,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB storage"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"I-edit..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Babala sa paggamit ng data"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"lumampas sa paggamit ng <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index b58b02d25542..637cbd6f75d3 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -854,14 +854,16 @@
<string name="cut" msgid="3092569408438626261">"Kes"</string>
<string name="copy" msgid="2681946229533511987">"Kopyala"</string>
<string name="paste" msgid="5629880836805036433">"Yapıştır"</string>
- <string name="replace" msgid="5781686059063148930">"Değiştir???"</string>
+ <string name="replace" msgid="5781686059063148930">"Değiştir..."</string>
<string name="delete" msgid="6098684844021697789">"Sil"</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>
<!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <!-- no translation found for addToDictionary (2839899368418071843) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
<string name="inputMethod" msgid="1653630062304567879">"Giriş yöntemi"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Metin eylemleri"</string>
@@ -949,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Kablosuz Doğrudan özelliği açık"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Ayarlar için dokunun"</string>
<string name="select_character" msgid="3365550120617701745">"Karakter ekle"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Bilinmeyen uygulama"</string>
<string name="sms_control_title" msgid="7296612781128917719">"SMS mesajları gönderiliyor"</string>
@@ -1113,36 +1113,28 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Silme işlemlerini geri alın."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Şimdilik bir şey yapma."</string>
<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 number_picker_increment_scroll_mode (1343063395404990189) -->
- <skip />
- <!-- no translation found for number_picker_increment_scroll_action (4628981789985093179) -->
- <skip />
- <!-- no translation found for time_picker_increment_minute_button (2843066823236250329) -->
- <skip />
- <!-- no translation found for time_picker_decrement_minute_button (4357907223628449595) -->
- <skip />
- <!-- no translation found for time_picker_increment_hour_button (2484204991937119057) -->
- <skip />
- <!-- no translation found for time_picker_decrement_hour_button (4659353501775842780) -->
- <skip />
- <!-- no translation found for time_picker_increment_set_pm_button (4147590696151230863) -->
- <skip />
- <!-- no translation found for time_picker_decrement_set_am_button (8302140353539486752) -->
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for date_picker_increment_month_button (6324978841467899081) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for date_picker_decrement_month_button (7304349355000398077) -->
- <skip />
- <!-- no translation found for date_picker_increment_day_button (4397040141921413183) -->
- <skip />
- <!-- no translation found for date_picker_decrement_day_button (2427816793443629131) -->
- <skip />
- <!-- no translation found for date_picker_increment_year_button (3058553394722295105) -->
- <skip />
- <!-- no translation found for date_picker_decrement_year_button (5193062846559743823) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Artır"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"Azalt"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> hafifçe vurun ve basılı tutun."</string>
+ <string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Artırmak için yukarı, azaltmak için aşağı kaydırın."</string>
+ <string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Dakika değerini artır"</string>
+ <string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"Dakika değerini azalt"</string>
+ <string name="time_picker_increment_hour_button" msgid="2484204991937119057">"Saat değerini artır"</string>
+ <string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"Saat değerini azalt"</string>
+ <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"ÖS değerini ayarla"</string>
+ <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"ÖÖ değerini ayarla"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"Ay değerini artır"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"Ay değerini azalt"</string>
+ <string name="date_picker_increment_day_button" msgid="4397040141921413183">"Gün değerini artır"</string>
+ <string name="date_picker_decrement_day_button" msgid="2427816793443629131">"Gün değerini azalt"</string>
+ <string name="date_picker_increment_year_button" msgid="3058553394722295105">"Yıl değerini artır"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"Yıl değerini azalt"</string>
<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>
@@ -1159,14 +1151,10 @@
<string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ÜstKrkt"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Giriş"</string>
<string name="content_description_sliding_handle" msgid="7311938669217173870">"Kayar tutma yeri. Hafifçe vurun ve basılı tutun."</string>
- <!-- no translation found for description_direction_up (1983114130441878529) -->
- <skip />
- <!-- no translation found for description_direction_down (4294993639091088240) -->
- <skip />
- <!-- no translation found for description_direction_left (6814008463839915747) -->
- <skip />
- <!-- no translation found for description_direction_right (4296057241963012862) -->
- <skip />
+ <string name="description_direction_up" msgid="1983114130441878529">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı."</string>
+ <string name="description_direction_down" msgid="4294993639091088240">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için aşağı."</string>
+ <string name="description_direction_left" msgid="6814008463839915747">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola."</string>
+ <string name="description_direction_right" msgid="4296057241963012862">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sağa."</string>
<string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
<string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
<string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string>
@@ -1180,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB depolama birimi"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Düzenle..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Veri kullanım uyarısı"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"kullanım <xliff:g id="SIZE">%s</xliff:g> boyutunu aşıyor"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 6364990661e2..1eb5ed0558f5 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"Копіюв. URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Вибрати текст..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Вибір тексту"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ додати в словник"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Метод введення"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Дії з текстом"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Недост. місця"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct увімкнено"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Торкніться, щоб побачити налаштування"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Скасувати видалення."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Наразі нічого не робіть."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Вибрати обліковий запис"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Додати"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Відняти"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> – торкніться й утримуйте."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Носій USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Редагувати..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Застереження про використ. даних"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"використання перевищує <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index f40f14585cef..e4d342325159 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -859,7 +859,12 @@
<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>
- <string name="addToDictionary" msgid="2839899368418071843">"+ thêm vào từ điển"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"Phương thức nhập"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"Tác vụ văn bản"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"Còn ít dung lượng"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct được bật"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Chạm để cài đặt"</string>
<string name="select_character" msgid="3365550120617701745">"Chèn ký tự"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Ứng dụng không xác định"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Đang gửi tin nhắn SMS"</string>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"Hoàn tác các tác vụ xóa."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ngay bây giờ bạn không cần làm gì cả."</string>
<string name="choose_account_label" msgid="4191313562041125787">"Chọn tài khoản"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"Tăng dần"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"Giảm dần"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"Bấm và giữ <xliff:g id="VALUE">%s</xliff:g>."</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"Bộ lưu trữ USB"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"Chỉnh sửa..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"Cảnh báo sử dụng dữ liệu"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"sử dụng vượt quá <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index b729bb50b49e..a306d6794dda 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"复制网址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"选择文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"文字选择"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"+ 添加到词典"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"输入法"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"文字操作"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"存储空间不足"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"已启用 Wi-Fi Direct"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"通过触摸进行设置"</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>
@@ -1110,6 +1113,12 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"撤消删除。"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"目前不进行任何操作。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"选择帐户"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"减少"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"点按 <xliff:g id="VALUE">%s</xliff:g> 次并按住。"</string>
@@ -1120,12 +1129,12 @@
<string name="time_picker_decrement_hour_button" msgid="4659353501775842780">"减少小时数"</string>
<string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"设置下午时间"</string>
<string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"设置上午时间"</string>
- <string name="date_picker_increment_month_button" msgid="6324978841467899081">"增加月数"</string>
- <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"减少月数"</string>
+ <string name="date_picker_increment_month_button" msgid="6324978841467899081">"增加月份值"</string>
+ <string name="date_picker_decrement_month_button" msgid="7304349355000398077">"减少月份值"</string>
<string name="date_picker_increment_day_button" msgid="4397040141921413183">"增加天数"</string>
<string name="date_picker_decrement_day_button" msgid="2427816793443629131">"减少天数"</string>
<string name="date_picker_increment_year_button" msgid="3058553394722295105">"增加年数"</string>
- <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"减少年数"</string>
+ <string name="date_picker_decrement_year_button" msgid="5193062846559743823">"减少年份值"</string>
<string name="checkbox_checked" msgid="7222044992652711167">"已选中"</string>
<string name="checkbox_not_checked" msgid="5174639551134444056">"未选中"</string>
<string name="radiobutton_selected" msgid="8603599808486581511">"已选择"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 存储器"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"编辑..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"数据使用情况警告"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"使用量超过 <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-zh-rTW/donottranslate-cldr.xml b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
index 06c9bccc5c27..a43f8572850b 100644
--- a/core/res/res/values-zh-rTW/donottranslate-cldr.xml
+++ b/core/res/res/values-zh-rTW/donottranslate-cldr.xml
@@ -61,21 +61,21 @@
<string name="day_of_week_long_friday">星期五</string>
<string name="day_of_week_long_saturday">星期六</string>
- <string name="day_of_week_medium_sunday">周日</string>
- <string name="day_of_week_medium_monday">周一</string>
- <string name="day_of_week_medium_tuesday">周二</string>
- <string name="day_of_week_medium_wednesday">周三</string>
- <string name="day_of_week_medium_thursday">周四</string>
- <string name="day_of_week_medium_friday">周五</string>
- <string name="day_of_week_medium_saturday">周六</string>
+ <string name="day_of_week_medium_sunday">週日</string>
+ <string name="day_of_week_medium_monday">週一</string>
+ <string name="day_of_week_medium_tuesday">週二</string>
+ <string name="day_of_week_medium_wednesday">週三</string>
+ <string name="day_of_week_medium_thursday">週四</string>
+ <string name="day_of_week_medium_friday">週五</string>
+ <string name="day_of_week_medium_saturday">週六</string>
- <string name="day_of_week_short_sunday">周日</string>
- <string name="day_of_week_short_monday">周一</string>
- <string name="day_of_week_short_tuesday">周二</string>
- <string name="day_of_week_short_wednesday">周三</string>
- <string name="day_of_week_short_thursday">周四</string>
- <string name="day_of_week_short_friday">周五</string>
- <string name="day_of_week_short_saturday">周六</string>
+ <string name="day_of_week_short_sunday">週日</string>
+ <string name="day_of_week_short_monday">週一</string>
+ <string name="day_of_week_short_tuesday">週二</string>
+ <string name="day_of_week_short_wednesday">週三</string>
+ <string name="day_of_week_short_thursday">週四</string>
+ <string name="day_of_week_short_friday">週五</string>
+ <string name="day_of_week_short_saturday">週六</string>
<string name="day_of_week_shortest_sunday">日</string>
<string name="day_of_week_shortest_monday">一</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index a27f90481199..6b13a9500d65 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -859,7 +859,12 @@
<string name="copyUrl" msgid="2538211579596067402">"複製網址"</string>
<string name="selectTextMode" msgid="6738556348861347240">"選取文字..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"選取文字"</string>
- <string name="addToDictionary" msgid="2839899368418071843">" + 新增至字典"</string>
+ <!-- unknown placeholder WORD in addToDictionary -->
+ <skip />
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
+ <skip />
+ <!-- no translation found for deleteText (7070985395199629156) -->
+ <skip />
<string name="inputMethod" msgid="1653630062304567879">"輸入方式"</string>
<string name="editTextMenuTitle" msgid="4909135564941815494">"文字動作"</string>
<string name="low_internal_storage_view_title" msgid="1399732408701697546">"儲存空間即將不足"</string>
@@ -946,10 +951,8 @@
<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>
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct 已開啟"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"輕觸即可設定"</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>
@@ -1110,9 +1113,15 @@
<string name="sync_undo_deletes" msgid="8610996708225006328">"復原刪除。"</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"暫不執行。"</string>
<string name="choose_account_label" msgid="4191313562041125787">"選取帳戶"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
+ <skip />
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
+ <skip />
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
+ <skip />
<string name="number_picker_increment_button" msgid="4830170763103463443">"增加"</string>
<string name="number_picker_decrement_button" msgid="2576606679160067262">"減少"</string>
- <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> 輕按並按住。"</string>
+ <string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> 持續輕按。"</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"向上滑動即可增加,向下滑動即可減少。"</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"增加分鐘數"</string>
<string name="time_picker_decrement_minute_button" msgid="4357907223628449595">"減少分鐘數"</string>
@@ -1159,7 +1168,10 @@
<string name="storage_usb" msgid="3017954059538517278">"USB 儲存裝置"</string>
<string name="extract_edit_menu_button" msgid="302060189057163906">"編輯..."</string>
<string name="data_usage_warning_title" msgid="1955638862122232342">"資料用量警告"</string>
- <string name="data_usage_warning_body" msgid="3354394590936526648">"用量超過 <xliff:g id="SIZE">%s</xliff:g>"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
<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>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index d1bdeae9eefb..f7dde4f3444c 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -20,93 +20,54 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for byteShort (8340973892742019101) -->
- <skip />
- <!-- no translation found for kilobyteShort (5973789783504771878) -->
- <skip />
- <!-- no translation found for megabyteShort (6355851576770428922) -->
- <skip />
- <!-- no translation found for gigabyteShort (3259882455212193214) -->
- <skip />
- <!-- no translation found for terabyteShort (231613018159186962) -->
- <skip />
- <!-- no translation found for petabyteShort (5637816680144990219) -->
- <skip />
+ <string name="byteShort" msgid="8340973892742019101">"B"</string>
+ <string name="kilobyteShort" msgid="5973789783504771878">"I-KB"</string>
+ <string name="megabyteShort" msgid="6355851576770428922">"I-MB"</string>
+ <string name="gigabyteShort" msgid="3259882455212193214">"I-GB"</string>
+ <string name="terabyteShort" msgid="231613018159186962">"I-TB"</string>
+ <string name="petabyteShort" msgid="5637816680144990219">"I-PB"</string>
<string name="fileSizeSuffix" msgid="7670819340156489359">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
- <!-- no translation found for untitled (6071602020171759109) -->
- <skip />
- <!-- no translation found for ellipsis (7899829516048813237) -->
- <skip />
- <!-- no translation found for emptyPhoneNumber (7694063042079676517) -->
- <skip />
- <!-- no translation found for unknownName (2277556546742746522) -->
- <skip />
- <!-- no translation found for defaultVoiceMailAlphaTag (2660020990097733077) -->
- <skip />
- <!-- no translation found for defaultMsisdnAlphaTag (2850889754919584674) -->
- <skip />
- <!-- no translation found for mmiError (5154499457739052907) -->
- <skip />
+ <string name="untitled" msgid="6071602020171759109">"&lt;untitled&gt;"</string>
+ <string name="ellipsis" msgid="7899829516048813237">"..."</string>
+ <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Ayikho inombolo yocingo)"</string>
+ <string name="unknownName" msgid="2277556546742746522">"(Akwaziwa)"</string>
+ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Umyalezo wezwi"</string>
+ <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+ <string name="mmiError" msgid="5154499457739052907">"Inkinga yoxhumano noma ikhadi ye-MMI engalungile."</string>
<string name="mmiFdnError" msgid="5224398216385316471">"Umsebenzi uvinjelwe ekudayeleni izinombolo ezingaguquki kuphela."</string>
- <!-- no translation found for serviceEnabled (8147278346414714315) -->
- <skip />
- <!-- no translation found for serviceEnabledFor (6856228140453471041) -->
- <skip />
- <!-- no translation found for serviceDisabled (1937553226592516411) -->
- <skip />
- <!-- no translation found for serviceRegistered (6275019082598102493) -->
- <skip />
- <!-- no translation found for serviceErased (1288584695297200972) -->
- <skip />
- <!-- no translation found for passwordIncorrect (7612208839450128715) -->
- <skip />
- <!-- no translation found for mmiComplete (8232527495411698359) -->
- <skip />
- <!-- no translation found for badPin (5085454289896032547) -->
- <skip />
- <!-- no translation found for badPuk (5702522162746042460) -->
- <skip />
- <!-- no translation found for mismatchPin (3695902225843339274) -->
- <skip />
- <!-- no translation found for invalidPin (3850018445187475377) -->
- <skip />
- <!-- no translation found for invalidPuk (8761456210898036513) -->
- <skip />
+ <string name="serviceEnabled" msgid="8147278346414714315">"Insizakalo ivaliwe."</string>
+ <string name="serviceEnabledFor" msgid="6856228140453471041">"Isevisi ivulelwe:"</string>
+ <string name="serviceDisabled" msgid="1937553226592516411">"Isevisi ivaliwe."</string>
+ <string name="serviceRegistered" msgid="6275019082598102493">"Ukubhalisa kuphumelele."</string>
+ <string name="serviceErased" msgid="1288584695297200972">"Ukusula kuphumelele"</string>
+ <string name="passwordIncorrect" msgid="7612208839450128715">"Iphasiwedi engalungile."</string>
+ <string name="mmiComplete" msgid="8232527495411698359">"I-MMI iqedile."</string>
+ <string name="badPin" msgid="5085454289896032547">"I-PIN yakudala oyifakile ayilungile."</string>
+ <string name="badPuk" msgid="5702522162746042460">"I-PUK oyithayiphile ayilungile."</string>
+ <string name="mismatchPin" msgid="3695902225843339274">"Ama-PIN owafakile awafani."</string>
+ <string name="invalidPin" msgid="3850018445187475377">"Thayipha i-PIN enezinombolo ezingu-4 kuya kwezingu-8."</string>
+ <string name="invalidPuk" msgid="8761456210898036513">"Thayipha i-PUK enezinombolo ezingu-8 noma ngaphezu."</string>
<string name="needPuk" msgid="919668385956251611">"Ikhadi lakho le-SIM livalwe nge-PUK. Thayipha ikhodi ye-PUK ukulivula."</string>
- <!-- no translation found for needPuk2 (4526033371987193070) -->
- <skip />
- <!-- no translation found for ClipMmi (6952821216480289285) -->
- <skip />
- <!-- no translation found for ClirMmi (7784673673446833091) -->
- <skip />
- <!-- no translation found for CfMmi (5123218989141573515) -->
- <skip />
- <!-- no translation found for CwMmi (9129678056795016867) -->
- <skip />
- <!-- no translation found for BaMmi (455193067926770581) -->
- <skip />
- <!-- no translation found for PwdMmi (7043715687905254199) -->
- <skip />
- <!-- no translation found for PinMmi (3113117780361190304) -->
- <skip />
+ <string name="needPuk2" msgid="4526033371987193070">"Thayipha i-PUK2 ukuze uvule ikhadi le-SIM."</string>
+ <string name="ClipMmi" msgid="6952821216480289285">"I-ID Yocingo Olungenayo"</string>
+ <string name="ClirMmi" msgid="7784673673446833091">"I-ID Yomshayeli Ephumayo"</string>
+ <string name="CfMmi" msgid="5123218989141573515">"Ukudlulisa ucingo"</string>
+ <string name="CwMmi" msgid="9129678056795016867">"Ucingo lulindile"</string>
+ <string name="BaMmi" msgid="455193067926770581">"Ukuvima ucingo"</string>
+ <string name="PwdMmi" msgid="7043715687905254199">"Shintsha iphasiwedi"</string>
+ <string name="PinMmi" msgid="3113117780361190304">"shintsha i-PIN"</string>
<string name="CnipMmi" msgid="3110534680557857162">"Ukushayela inombolo kukhona"</string>
<string name="CnirMmi" msgid="3062102121430548731">"Ukushayela inombolo kuvinjelwe"</string>
<string name="ThreeWCMmi" msgid="9051047170321190368">"Ukushayela kwezindlela ezintathu"</string>
<string name="RuacMmi" msgid="7827887459138308886">"Ukwenqabela amakholi acikayo"</string>
<string name="CndMmi" msgid="3116446237081575808">"Ishayela ukuthumela inombolo"</string>
<string name="DndMmi" msgid="1265478932418334331">"Ungaphazamisi"</string>
- <!-- no translation found for CLIRDefaultOnNextCallOn (429415409145781923) -->
- <skip />
- <!-- no translation found for CLIRDefaultOnNextCallOff (3092918006077864624) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOn (6179425182856418465) -->
- <skip />
- <!-- no translation found for CLIRDefaultOffNextCallOff (2567998633124408552) -->
- <skip />
- <!-- no translation found for serviceNotProvisioned (8614830180508686666) -->
- <skip />
- <!-- no translation found for CLIRPermanent (5460892159398802465) -->
- <skip />
+ <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Luvinjelwe"</string>
+ <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"i-ID yomshayeli ishintshela kokuvinjiwe. Ucingo olulandelayo: Aluvinjelwe"</string>
+ <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Luvinjelwe"</string>
+ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Aluvinjelwe"</string>
+ <string name="serviceNotProvisioned" msgid="8614830180508686666">"Isevisi ayilungiselelwe."</string>
+ <string name="CLIRPermanent" msgid="5460892159398802465">"Ilungiselelo le-ID yomshayeli alikwazi ukushintshwa."</string>
<string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ukufinyelela okuvinjelwe kushintshiwe"</string>
<string name="RestrictedOnData" msgid="8653794784690065540">"Insizakalo yedatha ivaliwe."</string>
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Insizakalo ephuthumayo ivimbelwe."</string>
@@ -116,22 +77,14 @@
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Izinsizakalo Zezwi/Idatha zivimbelwe."</string>
<string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Izinsizakalo Zezwi/SMS zivimbelwe."</string>
<string name="RestrictedOnAll" msgid="2714924667937117304">"Zonke izinsizakalo Zezwi/Idatha/SMS zivimbelwe."</string>
- <!-- no translation found for serviceClassVoice (1258393812335258019) -->
- <skip />
- <!-- no translation found for serviceClassData (872456782077937893) -->
- <skip />
- <!-- no translation found for serviceClassFAX (5566624998840486475) -->
- <skip />
- <!-- no translation found for serviceClassSMS (2015460373701527489) -->
- <skip />
- <!-- no translation found for serviceClassDataAsync (4523454783498551468) -->
- <skip />
- <!-- no translation found for serviceClassDataSync (7530000519646054776) -->
- <skip />
- <!-- no translation found for serviceClassPacket (6991006557993423453) -->
- <skip />
- <!-- no translation found for serviceClassPAD (3235259085648271037) -->
- <skip />
+ <string name="serviceClassVoice" msgid="1258393812335258019">"Izwi"</string>
+ <string name="serviceClassData" msgid="872456782077937893">"Idatha"</string>
+ <string name="serviceClassFAX" msgid="5566624998840486475">"Ifeksi"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"I-SMS"</string>
+ <string name="serviceClassDataAsync" msgid="4523454783498551468">"Vumelanisa"</string>
+ <string name="serviceClassDataSync" msgid="7530000519646054776">"Vumelanisa"</string>
+ <string name="serviceClassPacket" msgid="6991006557993423453">"Iphakethe"</string>
+ <string name="serviceClassPAD" msgid="3235259085648271037">"I-PAD"</string>
<string name="roamingText0" msgid="7170335472198694945">"Isikhombisi Sokuzulazula Sivuliwe"</string>
<string name="roamingText1" msgid="5314861519752538922">"Isibonisi Sokuzulazula Sivaliwe"</string>
<string name="roamingText2" msgid="8969929049081268115">"Isikhombisi Sokuzulazula Siyafulesha"</string>
@@ -153,171 +106,114 @@
<string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: akudlulisiwe"</string>
<string name="fcComplete" msgid="3118848230966886575">"Ikhodi yesici iqedile."</string>
<string name="fcError" msgid="3327560126588500777">"Inkinga yoxhumano noma ikhodi yesici engalungile."</string>
- <!-- no translation found for httpErrorOk (1191919378083472204) -->
- <skip />
+ <string name="httpErrorOk" msgid="1191919378083472204">"KULUNGILE"</string>
<string name="httpError" msgid="6603022914760066338">"Iphutha lenethiwekhi livelile."</string>
- <!-- no translation found for httpErrorLookup (4517085806977851374) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedAuthScheme (2781440683514730227) -->
- <skip />
- <!-- no translation found for httpErrorAuth (7293960746955020542) -->
- <skip />
- <!-- no translation found for httpErrorProxyAuth (1788207010559081331) -->
- <skip />
- <!-- no translation found for httpErrorConnect (7623096283505770433) -->
- <skip />
+ <string name="httpErrorLookup" msgid="4517085806977851374">"I-URL ayitholakalanga"</string>
+ <string name="httpErrorUnsupportedAuthScheme" msgid="2781440683514730227">"Ingosi yeqembu lokufakazela ubuqiniso ayisekelwe."</string>
+ <string name="httpErrorAuth" msgid="7293960746955020542">"Ukufakazela ubuqiniso akuphumelelanga."</string>
+ <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Ukufakazela ubuqiniso ngommeleli weseva akuphumelelanga."</string>
+ <string name="httpErrorConnect" msgid="7623096283505770433">"Uxhumano kwiseva aluphumelelanga."</string>
<string name="httpErrorIO" msgid="4270874999047767599">"Iseva ayikwazanga ukwenza isithombe sakho. Sicela uzame futhi emuva kwesikhathi."</string>
- <!-- no translation found for httpErrorTimeout (4743403703762883954) -->
- <skip />
- <!-- no translation found for httpErrorRedirectLoop (8679596090392779516) -->
- <skip />
- <!-- no translation found for httpErrorUnsupportedScheme (5257172771607996054) -->
- <skip />
- <!-- no translation found for httpErrorFailedSslHandshake (3088290300440289771) -->
- <skip />
- <!-- no translation found for httpErrorBadUrl (6088183159988619736) -->
- <skip />
- <!-- no translation found for httpErrorFile (8250549644091165175) -->
- <skip />
- <!-- no translation found for httpErrorFileNotFound (5588380756326017105) -->
- <skip />
- <!-- no translation found for httpErrorTooManyRequests (1235396927087188253) -->
- <skip />
+ <string name="httpErrorTimeout" msgid="4743403703762883954">"Uxhumano kwiseva luphelelwe yisikhathi."</string>
+ <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Ikhasi liqukethe amaseva amaningi kakhulu okuqondisa kabusha."</string>
+ <string name="httpErrorUnsupportedScheme" msgid="5257172771607996054">"Iziphakamiso eziyisisekelo azisekelwe."</string>
+ <string name="httpErrorFailedSslHandshake" msgid="3088290300440289771">"Uxhumano oluvikelekile alutholwanga."</string>
+ <string name="httpErrorBadUrl" msgid="6088183159988619736">"Ikhasi alikwazanga ukuvulwa ngoba i-URL ayilungile."</string>
+ <string name="httpErrorFile" msgid="8250549644091165175">"Ifayela ayifinyelelwanga"</string>
+ <string name="httpErrorFileNotFound" msgid="5588380756326017105">"Ifayela eceliwe ayitholakalanga."</string>
+ <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Kunezicelo eziningi ezenziwayo. Zama futhi emva kwesikhathi"</string>
<string name="notification_title" msgid="1259940370369187045">"Iphutha lokungena ngemvume le-<xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <!-- no translation found for contentServiceSync (8353523060269335667) -->
- <skip />
- <!-- no translation found for contentServiceSyncNotificationTitle (397743349191901458) -->
- <skip />
+ <string name="contentServiceSync" msgid="8353523060269335667">"Vumelanisa"</string>
+ <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Vumelanisa"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Kunokususa <xliff:g id="CONTENT_TYPE">%s</xliff:g> okuningi kakhulu."</string>
<string name="low_memory" product="tablet" msgid="2292820184396262278">"Isitoreji sethebhulethi sigcwele! Susa amanye amafayela ukukhulula isikhala."</string>
- <!-- outdated translation 2292820184396262278 --> <string name="low_memory" product="default" msgid="6632412458436461203">"Isitoreji sethebhulethi sigcwele! Susa amanye amafayela ukukhulula isikhala."</string>
- <!-- no translation found for me (6545696007631404292) -->
- <skip />
+ <string name="low_memory" product="default" msgid="6632412458436461203">"Isilondolozi sefoni sigcwele! Susa amanye amafayela ukukhulula isikhala."</string>
+ <string name="me" msgid="6545696007631404292">"Mina"</string>
<string name="power_dialog" product="tablet" msgid="8545351420865202853">"Okukhethwa kukho kwethebhulethi"</string>
- <!-- outdated translation 8545351420865202853 --> <string name="power_dialog" product="default" msgid="1319919075463988638">"Okukhethwa kukho kwethebhulethi"</string>
- <!-- no translation found for silent_mode (7167703389802618663) -->
- <skip />
- <!-- no translation found for turn_on_radio (3912793092339962371) -->
- <skip />
- <!-- no translation found for turn_off_radio (8198784949987062346) -->
- <skip />
- <!-- no translation found for screen_lock (799094655496098153) -->
- <skip />
- <!-- no translation found for power_off (4266614107412865048) -->
- <skip />
- <!-- no translation found for shutdown_progress (2281079257329981203) -->
- <skip />
+ <string name="power_dialog" product="default" msgid="1319919075463988638">"Okukhethwa kukho kwefoni"</string>
+ <string name="silent_mode" msgid="7167703389802618663">"Imodi ethulile"</string>
+ <string name="turn_on_radio" msgid="3912793092339962371">"Vula okungenantambo"</string>
+ <string name="turn_off_radio" msgid="8198784949987062346">"Vala okungenantambo"</string>
+ <string name="screen_lock" msgid="799094655496098153">"Ukuvala isikrini"</string>
+ <string name="power_off" msgid="4266614107412865048">"Amandla avaliwe"</string>
+ <string name="shutdown_progress" msgid="2281079257329981203">"Ivala shaqa..."</string>
<string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Ithebhulethi yakho izocima."</string>
- <!-- outdated translation 3385745179555731470 --> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ithebhulethi yakho izocima."</string>
+ <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ifoni yakho izocima."</string>
<string name="shutdown_confirm_question" msgid="6656441286856415014">"Ungathanda ukuvala shaqa?"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Okwakamuva"</string>
- <!-- no translation found for no_recent_tasks (279702952298056674) -->
- <skip />
+ <string name="no_recent_tasks" msgid="279702952298056674">"Azikho izinhlelo zokusebenza zamanje."</string>
<string name="global_actions" product="tablet" msgid="408477140088053665">"Okukhethwa konke kwethebhulethi"</string>
- <!-- outdated translation 408477140088053665 --> <string name="global_actions" product="default" msgid="2406416831541615258">"Okukhethwa konke kwethebhulethi"</string>
- <!-- no translation found for global_action_lock (2844945191792119712) -->
- <skip />
- <!-- no translation found for global_action_power_off (4471879440839879722) -->
- <skip />
- <!-- no translation found for global_action_toggle_silent_mode (8219525344246810925) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_on_status (3289841937003758806) -->
- <skip />
- <!-- no translation found for global_action_silent_mode_off_status (1506046579177066419) -->
- <skip />
+ <string name="global_actions" product="default" msgid="2406416831541615258">"Okukhethwa kukho kwefoni"</string>
+ <string name="global_action_lock" msgid="2844945191792119712">"Ukuvala isikrini"</string>
+ <string name="global_action_power_off" msgid="4471879440839879722">"Amandla avaliwe"</string>
+ <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Imodi ethulile"</string>
+ <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Umsindo UVALIWE"</string>
+ <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Umsindo UVULIWE"</string>
<string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Imodi yendiza"</string>
<string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Imodi yendiza IVULIWE"</string>
<string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Imodi yendiza IVALIWE"</string>
- <!-- outdated translation 5833510281787786290 --> <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"100+"</string>
- <!-- no translation found for safeMode (2788228061547930246) -->
- <skip />
+ <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+ <string name="safeMode" msgid="2788228061547930246">"Imodi ephephile"</string>
<string name="android_system_label" msgid="6577375335728551336">"Uhlelo lwe-Android"</string>
- <!-- no translation found for permgrouplab_costMoney (5429808217861460401) -->
- <skip />
+ <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Amasevisi abiza imali"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Ivumela uhlelo lokusebenza ukwenza izinto ezingakubiza imali."</string>
- <!-- no translation found for permgrouplab_messages (7521249148445456662) -->
- <skip />
+ <string name="permgrouplab_messages" msgid="7521249148445456662">"Imiyalezo yakho"</string>
<string name="permgroupdesc_messages" msgid="7045736972019211994">"Funda futhi ubale i-SMS yakho, i-imeyili, neminye imiyalezo."</string>
- <!-- no translation found for permgrouplab_personalInfo (3519163141070533474) -->
- <skip />
+ <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Ukwaziswa kwakho komuntu siqu"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe kwithebhulethi yakho."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Ukufinyelela okuqondile othintana nabo nekhalenda egcinwe efonini yakho."</string>
- <!-- no translation found for permgrouplab_location (635149742436692049) -->
- <skip />
- <!-- no translation found for permgroupdesc_location (2430258821648348660) -->
- <skip />
- <!-- no translation found for permgrouplab_network (5808983377727109831) -->
- <skip />
+ <string name="permgrouplab_location" msgid="635149742436692049">"Indawo yakho"</string>
+ <string name="permgroupdesc_location" msgid="2430258821648348660">"Gada indawo yakho yokuhlala"</string>
+ <string name="permgrouplab_network" msgid="5808983377727109831">"Uxhumano lwenethiwekhi"</string>
<string name="permgroupdesc_network" msgid="5035763698958415998">"Ivumela izinhlelo zokusebenza ukufinyelela kuzici ezihlukene zenethiwekhi."</string>
<string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
<string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
- <!-- no translation found for permgrouplab_hardwareControls (7998214968791599326) -->
- <skip />
+ <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Izilawuli zezingxenyekazi zekhompyutha"</string>
<string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Ukufinyelela okuqondile ihadiwe nehendsethi."</string>
- <!-- no translation found for permgrouplab_phoneCalls (9067173988325865923) -->
- <skip />
+ <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Izincingo zefoni"</string>
<string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Qapha, bhala, futhi wenze amakholi wefoni."</string>
- <!-- no translation found for permgrouplab_systemTools (4652191644082714048) -->
- <skip />
+ <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Amathuluzi esistimu"</string>
<string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ukufinyelela kwezinga eliphansi nokulawula uhlelo."</string>
- <!-- no translation found for permgrouplab_developmentTools (3446164584710596513) -->
- <skip />
+ <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Amathuluzi okuthuthukisa"</string>
<string name="permgroupdesc_developmentTools" msgid="9056431193893809814">"Izici zidingeka kuphela konjiniyela bohlelo lokusebenza."</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Isitoreji"</string>
<string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Finyelela kwisitoreji se-USB."</string>
<string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Finyelela ikhadi le-SD."</string>
- <!-- no translation found for permlab_statusBar (7417192629601890791) -->
- <skip />
+ <string name="permlab_statusBar" msgid="7417192629601890791">"vimbela noma guqula ibha yomumo"</string>
<string name="permdesc_statusBar" msgid="1365473595331989732">"Ivumela uhlelo lokusebenza ukuvimbela umudwa ochaza ngesimo noma ukufaka noma ukukhipha izithonjana zohlelo."</string>
<string name="permlab_statusBarService" msgid="7247281911387931485">"umudwa ochaza ngesimo"</string>
<string name="permdesc_statusBarService" msgid="4097605867643520920">"Ivumela uhlelo lokusebenza ukuba umudwa ochaza ngesimo."</string>
- <!-- no translation found for permlab_expandStatusBar (1148198785937489264) -->
- <skip />
+ <string name="permlab_expandStatusBar" msgid="1148198785937489264">"khulisa/nciphisa ibha yomumo"</string>
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Ivumela uhlelo lokusebenza ukukhulisa noma ukunciphisa umudwa ochaza ngesimo."</string>
- <!-- no translation found for permlab_processOutgoingCalls (1136262550878335980) -->
- <skip />
+ <string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"Vimbela izincingo eziphumayo"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Ivumela uhlelo lokusebenza ukwenza izincingo eziphumayo nokushintsha izinombolo okumele zidayelwe. Izinhlelo ezinonya zingase zigade, ziqondise futhi, noma zigweme izincingo eziphumayo"</string>
- <!-- no translation found for permlab_receiveSms (2697628268086208535) -->
- <skip />
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"thola i-SMS"</string>
<string name="permdesc_receiveSms" msgid="6298292335965966117">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-SMS. Izinhlelo zokusebenza ezinonya zingase zigade imiyalezo yakho noma ziyisuse ngaphandle kokukubonisa zona."</string>
- <!-- no translation found for permlab_receiveMms (8894700916188083287) -->
- <skip />
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"thola i-MMS"</string>
<string name="permdesc_receiveMms" msgid="4563346832000174373">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-MMS. Izinhlelo ezinonya zingase zigade imiyalezo yakho noma ziyisuse ngaphandle kokukubonisa yona."</string>
- <!-- no translation found for permlab_receiveEmergencyBroadcast (1803477660846288089) -->
- <skip />
- <!-- no translation found for permdesc_receiveEmergencyBroadcast (7118393393716546131) -->
- <skip />
- <!-- no translation found for permlab_sendSms (5600830612147671529) -->
- <skip />
+ <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"yamukela ukusakazwa okuphuthumayo"</string>
+ <string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Ivumela uhlelo lokusebenza ukwamukela nokusebenzisa imilayezo ephuthumayo yokusakaza. Lemvume ikhona kuphela kuzinhlelo zokusebenza zesistimu."</string>
+ <string name="permlab_sendSms" msgid="5600830612147671529">"thumela imiyalezo ye-SMS"</string>
<string name="permdesc_sendSms" msgid="1946540351763502120">"Ivumela uhlelo lokusebenza ukuthumela imiyalezo ye-SMS. Izinhlelo zokusebenza ezinonya zingakubiza imali ngokukuthumela imiyalezo ngaphandle kwesiqinisekiso."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"thumela i-SMS engenakuqinisekiswa"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Ivumela uhlelo lokusebenza ukuthumela imilayezo ye-SMS. Izinhlelo zokusebenza ezinonya zingakubiza imali ngokukuthumela imiyalezo ngaphandle kwesiqinisekiso."</string>
- <!-- no translation found for permlab_readSms (4085333708122372256) -->
- <skip />
+ <string name="permlab_readSms" msgid="4085333708122372256">"funda i-SMS noma i-MMS"</string>
<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>
<string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Ivumela uhlelo lokusebena ukufunda imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zifunde imiyalezo eyimfihlo."</string>
- <!-- no translation found for permlab_writeSms (6881122575154940744) -->
- <skip />
+ <string name="permlab_writeSms" msgid="6881122575154940744">"hlela i-SMS noma i-MMS"</string>
<string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Ivumela uhlelo lokusebenza ukubhala imiyalezo ye-SMS egcinwe kwithebhulethi yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zisuse imiyalezo yakho."</string>
<string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Ivumela uhlelo lokusebenza ukubhala imiyalezo ye-SMS egcinwe efonini yakho noma ekhadini le-SIM. Izinhlelo ezinonya zingase zisuse imiyalezo yakho."</string>
- <!-- no translation found for permlab_receiveWapPush (8258226427716551388) -->
- <skip />
+ <string name="permlab_receiveWapPush" msgid="8258226427716551388">"thola i-WAP"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Ivumela uhlelo lokusebenza ukuthola nokwenza imiyalezo ye-WAP. Uhlelo lokusebenza olunonya lungase lugade imiyalezo yakho noma iyisuse ngaphandle kokukubonisa yona."</string>
- <!-- no translation found for permlab_getTasks (5005277531132573353) -->
- <skip />
+ <string name="permlab_getTasks" msgid="5005277531132573353">"thola izinhlelo ezisebenzayo"</string>
<string name="permdesc_getTasks" msgid="7048711358713443341">"Ivumela uhlelo lokusebenza ukuthola ukwaziswa manyelana nemisebenzi yamanje futhi yamaduze esebenzayo. Ingase ivumele izinhlelo zokusebenza ezinonya ukuthola ulwazi oluyimfihlo mayelana nezinye izinhlelo zokusebenza."</string>
- <!-- no translation found for permlab_reorderTasks (5669588525059921549) -->
- <skip />
+ <string name="permlab_reorderTasks" msgid="5669588525059921549">"misa kabusha izinhlelo ezisebenzayo"</string>
<string name="permdesc_reorderTasks" msgid="126252774270522835">"Ivumela uhlelo lokusebenza ukukhipha imisebenzi phambili nasemuva. Izinhlelo ezinonya zingase ziziphoqelele phambili ngaphandle kokulawula kwakho."</string>
- <!-- no translation found for permlab_removeTasks (4802740047161700683) -->
- <skip />
- <!-- no translation found for permdesc_removeTasks (2000332928514575461) -->
- <skip />
- <!-- no translation found for permlab_setDebugApp (4339730312925176742) -->
- <skip />
+ <string name="permlab_removeTasks" msgid="4802740047161700683">"yekisa ukusebenza kwezinhlelo zokusebenza"</string>
+ <string name="permdesc_removeTasks" msgid="2000332928514575461">"Ivumela uhlolo lokusebenza ukususa imisebenzi nokubulala izinhlelo zazo zokusebenza. Izinhlelo zokusebenza ezinonya zingaphazamisa ukuziphatha kwezinye izinhlelo ezisebenzayo."</string>
+ <string name="permlab_setDebugApp" msgid="4339730312925176742">"vula ukulungisa inkinga yohlelo lokusebenza"</string>
<string name="permdesc_setDebugApp" msgid="5584310661711990702">"Ivumela izinhlelo ukuvula ukulungisa iphutha kolunye uhlelo lokusebenza. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukubulala ezinye izinhlelo zokusebenza."</string>
- <!-- no translation found for permlab_changeConfiguration (8214475779521218295) -->
- <skip />
+ <string name="permlab_changeConfiguration" msgid="8214475779521218295">"shintsha izilungiselelo zakho ze-UI"</string>
<string name="permdesc_changeConfiguration" msgid="3465121501528064399">"Ivumela uhlelo lokusebenza ukushintsha ukumisa kwamanje, njengezici zakhona noma usayizi wefonti."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"vumela imodi yemoto"</string>
<string name="permdesc_enableCarMode" msgid="5673461159384850628">"Ivumela uhlelo lokusebenza ukuvumela imodi yemoto."</string>
@@ -325,109 +221,78 @@
<string name="permdesc_killBackgroundProcesses" msgid="2908829602869383753">"Ivumela uhlelo lokusebenza ukubulala izinqubo zasemuva zezinye izinhlelo zokusebenza, ngisho noma imemori iphansi kakhulu."</string>
<string name="permlab_forceStopPackages" msgid="1447830113260156236">"phoqelela ukumisa ezinye izinhlelo zokusebenza"</string>
<string name="permdesc_forceStopPackages" msgid="7263036616161367402">"Ivumela uhlelo lokusebenza ukumisa ngokuphoqelela ezinye izinhlelo zokusebenza."</string>
- <!-- no translation found for permlab_forceBack (1804196839880393631) -->
- <skip />
+ <string name="permlab_forceBack" msgid="1804196839880393631">"phoqelela uhlelo lokusebenza ukuba luvale"</string>
<string name="permdesc_forceBack" msgid="6534109744159919013">"Ivumela uhlelo lokusebenza ukuphoqelela noma yimuphi umsebenzi osemuva ukuba uvale futhi ubuyele emuva. Akusoze kwadingeka izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_dump (1681799862438954752) -->
- <skip />
+ <string name="permlab_dump" msgid="1681799862438954752">"thola isimo sangaphakathi sesistimu"</string>
<string name="permdesc_dump" msgid="2198776174276275220">"Ivumela uhlelo lokusebenza ukuthola isimo sangaphakathi sohlelo. Izinhlelo zokusebenza ezinonya zingase zithole ukwaziswa okwehlukahlukene okuyimfihlo noma okuphephile lokho ngokuvamile ezingeke zikudinge."</string>
- <!-- no translation found for permlab_retrieve_window_content (8022588608994589938) -->
- <skip />
- <!-- no translation found for permdesc_retrieve_window_content (3390962289797156152) -->
- <skip />
+ <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"letha okuqukethwe kwesikrini"</string>
+ <string name="permdesc_retrieve_window_content" msgid="3390962289797156152">"Ivumela uhlelo lokusebenza ukuletha okuqukethwe kwewindi esebenzayo. Izinhlelo zokusebenza ezinonya zingaletha okuqukethwe konke kwewindi bese ihlolisisa imibhalo yonke yayo ngaphandle kwe-password."</string>
<string name="permlab_shutdown" msgid="7185747824038909016">"ukuvala shaqa kwengxenye"</string>
<string name="permdesc_shutdown" msgid="7046500838746291775">"Ibeka imeneja yomsebenzi kwisimo sokuvala shaqa. Ayenzi ukuvala shaqa okuphelele."</string>
<string name="permlab_stopAppSwitches" msgid="4138608610717425573">"gwema ukushintsha kohlelo lokusebenza"</string>
<string name="permdesc_stopAppSwitches" msgid="3857886086919033794">"Igwema umsebenzisi ukuba ashintshele kolunye uhlelo lokusebenza."</string>
- <!-- no translation found for permlab_runSetActivityWatcher (7811586187574696296) -->
- <skip />
+ <string name="permlab_runSetActivityWatcher" msgid="7811586187574696296">"gada futhi ulawule ukuqalisa zonke izinhlelo zokusebenza"</string>
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Ivumela uhlelo lokusebenza ukugada nokulawula indlela uhlelo oluqalisa ngayo imisebenzi. Izinhlelo ezinonya zingase zonakalise ngokuphelele uhlelo. Le mvume idingeka kuphela ekuthuthukiseni, hayi ekusebenziseni ifoni okuvamile."</string>
- <!-- no translation found for permlab_broadcastPackageRemoved (2576333434893532475) -->
- <skip />
+ <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"thumela iphakheji yomsakazo okhishiwe"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi iphakheji yohlelo lokusebenza ikhishiwe. Izinhlelo ezinonya zingasebenzisa lokhu ukubulala olunye uhlelo lokusebenza olusebenzayo."</string>
<string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"thumela umsakazo otholwe nge-SMS"</string>
<string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi umyalezo we-SMS utholiwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukukopisha imiyalezo ye-SMS engenayo."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"thumela umsakazo otholwe nge-WAP-PUSH"</string>
<string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi i-WAP PUSH itholiwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukukophisha ukutholakala komyalezo we-MMS noma ukubuyisela ngokuthulile okuqukethwe kwanoma yiliphi ikhasi lewebhu ngezimo ezahlukeneyo ezinonya."</string>
- <!-- no translation found for permlab_setProcessLimit (2451873664363662666) -->
- <skip />
+ <string name="permlab_setProcessLimit" msgid="2451873664363662666">"khawula inani lezinqubo ezisebenzayo"</string>
<string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Ivumela uhlelo lokusebenza ukulawula inani eliphezulu lwezinqubo ezizosebenza. Aludingwa izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_setAlwaysFinish (5342837862439543783) -->
- <skip />
+ <string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"yenza ukuba zonke izinhlelo zokusebenza zasemuva zivale"</string>
<string name="permdesc_setAlwaysFinish" msgid="8773936403987091620">"Ivumela uhlelo lokusebenza ukulawula ukuba imisebenzi iphela njalo yini ngokushesha njengoba ziya emuva. Ayidingeki izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_batteryStats (7863923071360031652) -->
- <skip />
+ <string name="permlab_batteryStats" msgid="7863923071360031652">"guqula izibalo zebhetri"</string>
<string name="permdesc_batteryStats" msgid="5847319823772230560">"Ivumela ukuguqulwa kwezibala zebhethri eziqoqiwe. Hayi ukusebenziswa izinhlelo zokusebenza ezivamile."</string>
<string name="permlab_backup" msgid="470013022865453920">"lawula ukusekela ngokulondoloza uhlelo bese ubuyisela esimweni"</string>
<string name="permdesc_backup" msgid="4837493065154256525">"Ivumela uhlelo lokusebenza ukulawula ukusekela ngokulondoloza kohlelo nokubuyisela nendlela yokubuyisela. Ayisebenziswa izinhlelo ezivamile."</string>
- <!-- no translation found for permlab_confirm_full_backup (5557071325804469102) -->
- <skip />
- <!-- no translation found for permdesc_confirm_full_backup (9005017754175897954) -->
- <skip />
- <!-- no translation found for permlab_internalSystemWindow (2148563628140193231) -->
- <skip />
+ <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"qinisekisa isipele sonke noma buyisela futhi ukusebenza"</string>
+ <string name="permdesc_confirm_full_backup" msgid="9005017754175897954">"Ivumela uhlelo lokusebenza ukuqalisa ukuqinisekisw okuphelele kwesipele kwe-UI. Akumelwe kusetshenziswe noma yiluphi uhlelo lokusebenza."</string>
+ <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"bonisa amawindi angavunyelwe"</string>
<string name="permdesc_internalSystemWindow" msgid="5895082268284998469">"Ivumela ukwenziwa kwemawindi ehloselwe ukusebenziswa uxhumano lomsebenzisi wohlelo lwangaphakathi. Ayisebenziswa izinhlelo zokusebenza ezivamile"</string>
- <!-- no translation found for permlab_systemAlertWindow (3372321942941168324) -->
- <skip />
+ <string name="permlab_systemAlertWindow" msgid="3372321942941168324">"bonisa izexwayiso zezinga lesistimu"</string>
<string name="permdesc_systemAlertWindow" msgid="2884149573672821318">"Ivumela uhlelo lokusebenza ukubonisa amawindi okuxwayisa ohlelo. Izinhlelo zokusebenza ezinonya zingase zithathe isikrini sonke."</string>
- <!-- no translation found for permlab_setAnimationScale (2805103241153907174) -->
- <skip />
+ <string name="permlab_setAnimationScale" msgid="2805103241153907174">"guqula isivinini sokugqwayiza jikelele"</string>
<string name="permdesc_setAnimationScale" msgid="7181522138912391988">"Ivumela uhlelo lokusebenza ukushintsha isivinini sokugqwayiza jikelele (ukugqwayiza okusheshayo noma okulengayo) nganoma isiphi isikhathi."</string>
- <!-- no translation found for permlab_manageAppTokens (17124341698093865) -->
- <skip />
+ <string name="permlab_manageAppTokens" msgid="17124341698093865">"phatha amathokeni ohlelo lokusebenza"</string>
<string name="permdesc_manageAppTokens" msgid="977127907524195988">"Ivumela izinhlelo zokusebenza ukwenza nokuphatha amathokhini awo, ngokudlula ukuhleleka kuka-Z. Akusoze kwadingeka ezinhlelweni ezivamile."</string>
- <!-- no translation found for permlab_injectEvents (1378746584023586600) -->
- <skip />
+ <string name="permlab_injectEvents" msgid="1378746584023586600">"cindizela okhiye nezinkinobho zokulawula"</string>
<string name="permdesc_injectEvents" product="tablet" msgid="7200014808195664505">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebenza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ithebhulethi."</string>
<string name="permdesc_injectEvents" product="default" msgid="3946098050410874715">"Ivumela uhlelo lokusebenza ukuthumela izenzakalo zawo zokufakwayo (ukucindezela ukhiye, nokunye) kwezinye izihlelo zokusebeza. Izinhlelo ezinonya zingasebenzisa lokhu ukuthatha ifoni."</string>
- <!-- no translation found for permlab_readInputState (469428900041249234) -->
- <skip />
+ <string name="permlab_readInputState" msgid="469428900041249234">"qopha lokho okuthayiphayo nezinyathelo ozithathayo"</string>
<string name="permdesc_readInputState" msgid="5132879321450325445">"Ivumela izinhlelo zokusebenza ukufunda izinkinobho ozicindezela ngisho noma uxhumana nolunye uhlelo lokusebenza (njengokufaka iphasiwedi). Akusoze kwadingeka ezinhlelweni zokusebenza ezivamile."</string>
<string name="permlab_bindInputMethod" msgid="3360064620230515776">"hlanganisa indlela yokufakwayo"</string>
<string name="permdesc_bindInputMethod" msgid="3734838321027317228">"Ivumela isimeli ukuhlanganisa uxhumano nomsebenzisi wezinga eliphezulu lendlela yokufaka. Ayisoze yadingeka kwizinhlelo ezivamile."</string>
- <!-- no translation found for permlab_bindTextService (7358378401915287938) -->
- <skip />
- <!-- no translation found for permdesc_bindTextService (172508880651909350) -->
- <skip />
+ <string name="permlab_bindTextService" msgid="7358378401915287938">"bophezela kunsizakalo yombhalo"</string>
+ <string name="permdesc_bindTextService" msgid="172508880651909350">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwesixhumi esibonakalayo sensizakalo yombhalo(isb. InsizakaloYokuhlolaUkubhala). Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
<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) -->
- <skip />
- <!-- no translation found for permdesc_bindRemoteViews (2930855984822926963) -->
- <skip />
+ <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bophezela kube insizakalo yesinqunjana"</string>
+ <string name="permdesc_bindRemoteViews" msgid="2930855984822926963">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lensizakalo yesinqunjwana. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
<string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"xhumana nomphathi wedivaysi"</string>
<string name="permdesc_bindDeviceAdmin" msgid="8714424333082216979">"Ivumela umphathi ukuthumela okuqukethwe kumphathi wedivaysi. Akusoze kwadingeka izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_setOrientation (3365947717163866844) -->
- <skip />
+ <string name="permlab_setOrientation" msgid="3365947717163866844">"shintsha ukujikeleza kwesikrini"</string>
<string name="permdesc_setOrientation" msgid="6335814461615851863">"Ivumela uhlelo lokusebenza ukushintsha ukujikeleleza kwesikrini nganoma isiphi isikhathi. Ayisoze yadingeka izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_setPointerSpeed (9175371613322562934) -->
- <skip />
- <!-- no translation found for permdesc_setPointerSpeed (137436038503379864) -->
- <skip />
- <!-- no translation found for permlab_signalPersistentProcesses (4255467255488653854) -->
- <skip />
+ <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"guqula isivinini sesikhombi"</string>
+ <string name="permdesc_setPointerSpeed" msgid="137436038503379864">"Ivumela uhlelo lokusebenza ukushintsha i-mouse noma isivinini sesikhompi se-trackpad nganoma isiphi isikhathi. Ayisoze yadingeka izinhlelo zokusebenza ezivamile."</string>
+ <string name="permlab_signalPersistentProcesses" msgid="4255467255488653854">"Thumela amasignali kwizinhlelo zokusebenza"</string>
<string name="permdesc_signalPersistentProcesses" msgid="3565530463215015289">"Ivumela uhlelo lokusebenza ukucela ukuthi isiginali enikeziwe ithunyelwe kuzo zonke izinqubo eziphikelelayo"</string>
- <!-- no translation found for permlab_persistentActivity (8659652042401085862) -->
- <skip />
+ <string name="permlab_persistentActivity" msgid="8659652042401085862">"yenza uhlelo lusebenze njalo"</string>
<string name="permdesc_persistentActivity" msgid="5037199778265006008">"Ivumela uhlelo lokusebenza ukwenza izingxenye zayo zibe eziphishelelayo, ukuze isistimu ingakwazi ukuyisebenzisela ezinye iznhlelo zokusebenza."</string>
- <!-- no translation found for permlab_deletePackages (3343439331576348805) -->
- <skip />
+ <string name="permlab_deletePackages" msgid="3343439331576348805">"susa izinhlelo zokusebenza"</string>
<string name="permdesc_deletePackages" msgid="3634943677518723314">"Ivumela izinhlelo zokusebenza ukususa amaphakheji e-Android. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukususa izinhlelo zokusebenza ezibalulekile."</string>
<string name="permlab_clearAppUserData" msgid="2192134353540277878">"susa enye idatha yezinhlelo zokusebenza"</string>
- <!-- no translation found for permdesc_clearAppUserData (7546345080434325456) -->
- <skip />
+ <string name="permdesc_clearAppUserData" msgid="7546345080434325456">"Ivumela uhlelo lokusebenza ukuba lisule idatha yomsebenzisi."</string>
<string name="permlab_deleteCacheFiles" msgid="1518556602634276725">"susa ezinye izilondolozi zesikhashana zezinhlelo zokusebenza"</string>
<string name="permdesc_deleteCacheFiles" msgid="2283074077168165971">"Ivumela uhlelo lokusebenza ukususa amafayela okulondoloza okwesikhashana."</string>
- <!-- no translation found for permlab_getPackageSize (4799785352306641460) -->
- <skip />
+ <string name="permlab_getPackageSize" msgid="4799785352306641460">"linganisa isikhala sokugcina uhlelo lokusebenza"</string>
<string name="permdesc_getPackageSize" msgid="5557253039670753437">"Ivume uhlelo lokusebenza ukuthola ikhodi yayo, namasayizi okulondoloza okwesikhashana."</string>
- <!-- no translation found for permlab_installPackages (335800214119051089) -->
- <skip />
+ <string name="permlab_installPackages" msgid="335800214119051089">"ngokuqondile faka izinhlelo zokusebenza"</string>
<string name="permdesc_installPackages" msgid="526669220850066132">"Ivumela uhlelo lokusebenza ukufaka amaphakheji amasha noma abuyekeziwe. Izinhlelo ezinonya zingasebenzisa lokhu ukufaka izinhelo zokusebenza ezintsha ngezimvume zomthetho onamandla."</string>
- <!-- no translation found for permlab_clearAppCache (4747698311163766540) -->
- <skip />
+ <string name="permlab_clearAppCache" msgid="4747698311163766540">"susa yonke idatha yenqolobane yohlelo lokusebenza"</string>
<string name="permdesc_clearAppCache" product="tablet" msgid="3097119797652477973">"Ivumela uhlelo lokusebenza ukukhulula isitoreji sethebhulethi ngokususa amafayela kwisiqondiso sesilondolozi sesikhashana sohlelo lokusebenza. Ukufinyelele ngokuvamile kuvinjelwe enqubweni yesistimu."</string>
<string name="permdesc_clearAppCache" product="default" msgid="7740465694193671402">"Ivumela uhlelo lokusebenza ukukhulula isitoreji sefoni ngokususa amafayela kwisiqondiso sesilondolozi sesikhashana sohlelo lokusebenza. Ukufinyelele ngokuvamile kuvinjelwe enqutshweni yesitimu."</string>
<string name="permlab_movePackage" msgid="728454979946503926">"Hambisa izinsiza zohlelo lokusebenza"</string>
@@ -435,38 +300,29 @@
<string name="permlab_readLogs" msgid="6615778543198967614">"funda idatha yefayela lokungena ebucayi"</string>
<string name="permdesc_readLogs" product="tablet" msgid="4077356893924755294">"Ivumela uhlelo lokusebenza ukufunda umafayela okungena ohlelo oluhlukene. Lokhu kuvumela ukuthola ukwaziswa okuvamile mayelana nokuthi wenzani ngethebhulethi, kodwa akumele kuqukethe ukwaziswa komuntu siqu noma okuyimfihlo."</string>
<string name="permdesc_readLogs" product="default" msgid="8896449437464867766">"Ivumela uhlelo lokusebenza ukufunda kumafayela okungena ahlukene esistimu. Lokhu kuvumela ukuthola ukwaziswa okuvamile mayelana nokuthi wenzani ngefoni, kuhlanganise ukwaziswa komuntu siqu noma kwangasese."</string>
- <!-- no translation found for permlab_diagnostic (8076743953908000342) -->
- <skip />
+ <string name="permlab_diagnostic" msgid="8076743953908000342">"funda/bhalela emithombweni ephethwe idayegi"</string>
<string name="permdesc_diagnostic" msgid="3121238373951637049">"Ivumela uhlolo lokusebenza ukufunda nokubhala kunoma yimuphi umthombo weqembu ledayegi; ngokwesibonle, amafayela akwi/dev. Lokhu kungase kuthinte kakhulu ukuba nokuphepha kohlelo. Lokhu kumele kusebenziselwe KUPHELA ukuhlola ihadiwe okucacile ngumkhiqizi noma u-opheretha."</string>
- <!-- no translation found for permlab_changeComponentState (79425198834329406) -->
- <skip />
+ <string name="permlab_changeComponentState" msgid="79425198834329406">"vumela noma vimbela izingxenye zohlelo lokusebenza"</string>
<string name="permdesc_changeComponentState" product="tablet" msgid="4647419365510068321">"Ivumela uhlelo lokusebenza ukushintsha ukuba ingabe ingxenye yolunye uhlelo lokusebenza ivuliwe noma cha. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvimbela amakhono abalulekile ethebhulethi. Ukunakekela kumele kusetshenziswe ngemvume, njengoba kungenzeka ukuthola izingxenye zohlelo lokusebenza kusimo esingasebenziseki, esingefani, noma esingahlaliseki."</string>
<string name="permdesc_changeComponentState" product="default" msgid="3443473726140080761">"Ivumela uhlelo lokusebenza ukushintsha ukuba ingabe ingxenye yolunye uhlelo lokusebenza ivuliwe noma cha. Izinhlelo ezinonya zingase zisebenzise lokhu ukuvimbela amakhono abalulekile ethebhulethi. Ukunakekela kumele kusetshenziswe ngemvume, njengoba kungenzeka ukuthola izingxenye zohlelo lokusebenza kusimo esingasebenziseki, esingefani, noma esingahlaliseki."</string>
- <!-- no translation found for permlab_setPreferredApplications (3393305202145172005) -->
- <skip />
+ <string name="permlab_setPreferredApplications" msgid="3393305202145172005">"setha izinhlelo zokusebenza ezifiselekayo"</string>
<string name="permdesc_setPreferredApplications" msgid="760008293501937546">"Ivumela uhlelo lokusebenza ukuguqula izinhlelo zakho ezikhethwayo. Lokhu kungavumela izinhlelo ezinonya ukushintsha ngokuthulile izinhlelo zokusebenza ezisebenziswayo, ukushintsha izinhlelo zakho zokusebenza ezikhona kakade ukuqoqa idatha yangasese kuwe."</string>
- <!-- no translation found for permlab_writeSettings (1365523497395143704) -->
- <skip />
+ <string name="permlab_writeSettings" msgid="1365523497395143704">"guqula izilungiselelo zohlelo jikelele"</string>
<string name="permdesc_writeSettings" msgid="838789419871034696">"Ivumela uhlelo lokusebenza ukuguqula idatha yezilungiselelo zohlelo. Izinhlelo zokusebenza ezinonya zingase zonakalise ukumiswa kohlelo lwakho."</string>
<string name="permlab_writeSecureSettings" msgid="204676251876718288">"guqula izilungiselelo zohlelo oluphephile"</string>
<string name="permdesc_writeSecureSettings" msgid="5497873143539034724">"Ivumela izinhlelo zokusebenza ukuguqula idatha yezilungiselelo eziphephile zohlelo. Akuyona eyokusebenziswa izinhlelo zokusebenza izivamile."</string>
- <!-- no translation found for permlab_writeGservices (2149426664226152185) -->
- <skip />
+ <string name="permlab_writeGservices" msgid="2149426664226152185">"guqula ibalazwe lesevisi ye-Google"</string>
<string name="permdesc_writeGservices" msgid="6602362746516676175">"Ivumela uhlelo lokusebenza ukuguqula imephu yezinsizakalo ze-Google. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_receiveBootCompleted (7776779842866993377) -->
- <skip />
+ <string name="permlab_receiveBootCompleted" msgid="7776779842866993377">"Ngokuzenzakalelayo qalisa"</string>
<string name="permdesc_receiveBootCompleted" product="tablet" msgid="7530977064379338199">"Ivumela uhlelo lokusebenza ukuba luziqalele ngokushesha nje emva kokuba uhlelo luqede ukuqala. Lokhu kungenza kuthathe isikhathi ukuqalisa ithebhulethi futhi kuvumele uhlelo lokusebenza ukwehlisa ithebhulethi yonke ngokusebenza njalo."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="698336728415008796">"Ivumela uhlelo lokusebenza ukuba luziqalele ngokushesha nje emva kokuba uhlelo luqede ukuqala. Lokhu kungenza kuthathe isikhathi ukuqalisa ifoni futhi kuvumele uhlelo lokusebenza ukwehlisa ifoni yonke ngokusebenza njalo."</string>
- <!-- no translation found for permlab_broadcastSticky (7919126372606881614) -->
- <skip />
+ <string name="permlab_broadcastSticky" msgid="7919126372606881614">"thumela ukusakaza okunamathelayo"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="6322249605930062595">"Ivumela uhlelo lokusebenza ukuthumela imisakazo enamathelayo, esala emva kokuba ukusakaza kuphelile. Izinhlelo zokusebenza ezinonya zingenza ithebhulethii ingasheshi futhi ingahlaliseki ngokuyibangela ukuba isebenzise inkumbulo eningi kakhulu."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="1920045289234052219">"Ivumela uhlelo lokusebenza ukuthumela imisakazo engazwakali kahle, esala emuva kokuthi ukusakaza kuphelile. Izinhlelo zokusebenza ezinonya zingenza ifoni ingasheshi futhi ingasebenzi kahle ngokuyibangela ukuthi isebenzise imemori eningi kakhulu."</string>
- <!-- no translation found for permlab_readContacts (6219652189510218240) -->
- <skip />
+ <string name="permlab_readContacts" msgid="6219652189510218240">"funda idatha yothintana naye"</string>
<string name="permdesc_readContacts" product="tablet" msgid="7596158687301157686">"Ivumela uhlelo lokusebenza ukufunda yonke idatha yothintana naye (ikheli) egcinwe kwithebhulethi yakho. Izinhlelo zokusebenza ezinonya zingase zisebenzise lokhu ukuthumela idatha yakho kwabanye abantu."</string>
<string name="permdesc_readContacts" product="default" msgid="3371591512896545975">"Ivumela uhlelo lokusebenza ukufunda yonke idatha yothintana naye (ikheli) egcinwe efonini yakho. Izinhlelo zokusebenza zonya zingase zisebenzise lokhu ukuthumela idatha yakho kwabanye abantu."</string>
- <!-- no translation found for permlab_writeContacts (644616215860933284) -->
- <skip />
+ <string name="permlab_writeContacts" msgid="644616215860933284">"bhala idatha yothintana naye"</string>
<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>
<string name="permlab_readProfile" msgid="6824681438529842282">"bhala imininingo yemininingwane yakho"</string>
@@ -478,46 +334,37 @@
<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="permlab_accessMockLocation" msgid="8688334974036823330">"lungisela imithombo yendawo ukuhlolwa"</string>
<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>
- <!-- no translation found for permlab_accessLocationExtraCommands (2836308076720553837) -->
- <skip />
+ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"finyelela eminye imiyalo yokunikeza indawo"</string>
<string name="permdesc_accessLocationExtraCommands" msgid="1948144701382451721">"Finyelela kweminye imiyalo yendawo eyengeziwe. Izinhlelo ezinonya zingase zisebenzise lokhu ukuphazamaisa ukusebenza kwe-GPS noma eminye imithombo yezinye izindawo."</string>
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"imvume yokufaka umhlinzeki wendawo"</string>
<string name="permdesc_installLocationProvider" msgid="5449175116732002106">"Yenza imithombo yokudlala ukuhlola. Izinhlelo ezinonya zingase zisebenzise lokhu ukukhipha indawo futhi/noma isimo esibuyiswe imithombo yendawo yangempela njenge-GPS noma abahlinzeki Benethiwekhi noma zigade futhi zibike indawo yakho njengomthombo wangaphandle."</string>
- <!-- no translation found for permlab_accessFineLocation (8116127007541369477) -->
- <skip />
+ <string name="permlab_accessFineLocation" msgid="8116127007541369477">"indawo (GPS) elungile"</string>
<string name="permdesc_accessFineLocation" product="tablet" msgid="243973693233359681">"Finyelela kwimithombo ecocekile Njegesistimu Yokumisa Jikelele kwithebhulethi, lapho itholakala. Izinhlelo ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi, futhi ingadonsa amandla angeziwe ebhetri."</string>
<string name="permdesc_accessFineLocation" product="default" msgid="7411213317434337331">"Finyelela kumithombo ecocekile Njegesistimu Yokumisa Jikelele efonini, lapho itholakala. Izinhlelo ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi, futhi ingadonsa amandla angeziwe ebhetri."</string>
- <!-- no translation found for permlab_accessCoarseLocation (4642255009181975828) -->
- <skip />
+ <string name="permlab_accessCoarseLocation" msgid="4642255009181975828">"indawo (kusekelwe kwinethiwekhi) emaholoholo"</string>
<string name="permdesc_accessCoarseLocation" product="tablet" msgid="3704633168985466045">"Finyelela indawo yamaholohola njengesizinda semininingwane somakhalekhukhwini ukuthola endaweni elungile yethebhulethi, lapho itholakala khona. Izinhlelo zokusebenza ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi."</string>
<string name="permdesc_accessCoarseLocation" product="default" msgid="8235655958070862293">"Finyelela kundawo yamaholohola njengesizinda semininingwane somakhalekhukhwini ukuthola indawo elungile yefoni, lapho itholakala khona. Izinhlelo zokusebenza ezinonya zingasebenzisa lokhu ukuthola ukuthi ukuphi."</string>
- <!-- no translation found for permlab_accessSurfaceFlinger (2363969641792388947) -->
- <skip />
+ <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"finyelela i-SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="6805241830020733025">"Ivumela uhlelo lokusebenza ukusebenzisa izici zezinga eliphansi le-SurfaceFlinger"</string>
- <!-- no translation found for permlab_readFrameBuffer (6690504248178498136) -->
- <skip />
+ <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"funda isikhumbuli sesikhashana sendikimba"</string>
<string name="permdesc_readFrameBuffer" msgid="7530020370469942528">"Ivumela uhlelo lokusebenza ukufunda okuqukethwe kwesikhumbulo sesikhashana sendikimba."</string>
- <!-- no translation found for permlab_modifyAudioSettings (6095859937069146086) -->
- <skip />
+ <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"shintsha izilungiselelo zakho zomsindo"</string>
<string name="permdesc_modifyAudioSettings" msgid="5793461287365991922">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo zomsindo jikelele njengevolumu nomzila."</string>
- <!-- no translation found for permlab_recordAudio (3876049771427466323) -->
- <skip />
+ <string name="permlab_recordAudio" msgid="3876049771427466323">"qopha umsindo"</string>
<string name="permdesc_recordAudio" msgid="6493228261176552356">"Ivumela uhlelo lokusebenza ukufinyelela indlela yokurekhoda umsindo."</string>
<string name="permlab_camera" msgid="3616391919559751192">"thatha izithombe namavidiyo"</string>
<string name="permdesc_camera" msgid="6004878235852154239">"Ivumela uhlelo lokusebenza ukuthatha izithombe ngekhamera. Lokhu kuvumela uhlelo lokusebenza nganoma isiphi isikhathi ukuqoqa imifanekiso leyo ikhamera ezibonayo."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"vimbela ngokuphelele ithebhulethi"</string>
- <!-- outdated translation 2961292205764488304 --> <string name="permlab_brick" product="default" msgid="8337817093326370537">"vimbela ngokuphelele ithebhulethi"</string>
+ <string name="permlab_brick" product="default" msgid="8337817093326370537">"ngokwaphakade vimbela ifoni"</string>
<string name="permdesc_brick" product="tablet" msgid="7379164636920817963">"Ivumela uhlelo lokusebenza ukuvimbela yonke ithebhulethi ngokuphelele. Lokhu kuyingozi kakhulu."</string>
<string name="permdesc_brick" product="default" msgid="5569526552607599221">"Ivumela uhlelo lokusebenza ukuvimbela yonke ifoni ngokuphelele. Lokhu kuyingozi kakhulu."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"phoqelela ukuqalisa phansi ithebhulethi"</string>
- <!-- outdated translation 3436634972561795002 --> <string name="permlab_reboot" product="default" msgid="2898560872462638242">"phoqelela ukuqalisa phansi ithebhulethi"</string>
+ <string name="permlab_reboot" product="default" msgid="2898560872462638242">"phoqelela ifoni ukuba iqalise kabusha"</string>
<string name="permdesc_reboot" product="tablet" msgid="4555793623560701557">"Ivumela uhlelo lokusebenza ukuphoqelela ithebhulethi ukuqalisa phansi."</string>
<string name="permdesc_reboot" product="default" msgid="7914933292815491782">"Ivumela uhlelo lokusebenza ukuphoqelela ifoni ukuqalisa phansi."</string>
- <!-- no translation found for permlab_mount_unmount_filesystems (1761023272170956541) -->
- <skip />
+ <string name="permlab_mount_unmount_filesystems" msgid="1761023272170956541">"khuphula futhi wehlise izinhlelo zefayela"</string>
<string name="permdesc_mount_unmount_filesystems" msgid="6253263792535859767">"Ivumela izinhlelo ukukhweza nokukwehlisa amasistimu wefayela lesitoreji esikhiphekayo."</string>
<string name="permlab_mount_format_filesystems" msgid="5523285143576718981">"fometha isitoreji sangaphandle"</string>
<string name="permdesc_mount_format_filesystems" msgid="574060044906047386">"Ivumela uhlelo lokusebenza ukufometha isitoreji esikhiphekayo."</string>
@@ -531,75 +378,59 @@
<string name="permdesc_asec_mount_unmount" msgid="5934375590189368200">"Ivumela uhlelo lokusebenza ukukhweza / ukwehlisa isitoreji sangaphakathi."</string>
<string name="permlab_asec_rename" msgid="7496633954080472417">"yetha kabusha isitoreji sangaphakathi"</string>
<string name="permdesc_asec_rename" msgid="2152829985238876790">"Ivumela uhlelo lokusebenza ukwetha kabusha isitoreji sangaphakathi."</string>
- <!-- no translation found for permlab_vibrate (7768356019980849603) -->
- <skip />
+ <string name="permlab_vibrate" msgid="7768356019980849603">"lawula isidlidliza"</string>
<string name="permdesc_vibrate" msgid="2886677177257789187">"Ivumela uhlelo lokusebenza ukulawula isidlidlizi."</string>
- <!-- no translation found for permlab_flashlight (2155920810121984215) -->
- <skip />
+ <string name="permlab_flashlight" msgid="2155920810121984215">"lawula ukukhanya kwefulashi"</string>
<string name="permdesc_flashlight" msgid="6433045942283802309">"Ivumela uhlelo lokusebenza ukulawula ukukhanya kwefuleshi."</string>
- <!-- no translation found for permlab_manageUsb (1113453430645402723) -->
- <skip />
- <!-- no translation found for permdesc_manageUsb (6148489202092166164) -->
- <skip />
+ <string name="permlab_manageUsb" msgid="1113453430645402723">"phatha izintandokazi nezimvume zamadivayisi e-USB"</string>
+ <string name="permdesc_manageUsb" msgid="6148489202092166164">"Vumela uhlelo lokusebenza luphathe izintandokazi nezimvume zedivayisi ye-USB."</string>
<string name="permlab_accessMtp" msgid="4953468676795917042">"sebenzisa imithetho elandelwayo ye-MTP"</string>
<string name="permdesc_accessMtp" msgid="6532961200486791570">"Ivumela ukufinyelela umshayeli we-kernel MTP ukusebenzisa umthetho olandelwayo we-MTP USB"</string>
- <!-- no translation found for permlab_hardware_test (4148290860400659146) -->
- <skip />
+ <string name="permlab_hardware_test" msgid="4148290860400659146">"hlola izingxenyekazi zekhompyutha"</string>
<string name="permdesc_hardware_test" msgid="3668894686500081699">"Ivumela uhlelo lokusebenza ukulawula okuphathelene nomngcele ngenjongo yokuhlola ihadiwe."</string>
- <!-- no translation found for permlab_callPhone (3925836347681847954) -->
- <skip />
+ <string name="permlab_callPhone" msgid="3925836347681847954">"ngokuqondile shayela izinombolo zocingo"</string>
<string name="permdesc_callPhone" msgid="3369867353692722456">"Ivumela uhlelo lokusebenza ukushayela izinombolo zocingo ngaphandle kokungenela kwakho. Izinhlelo zokusebenza ezinonya zingase zibangele izincingo ezingalindelekile kwibhili yakho yefoni. Qaphela lokhu akuvumeli uhlelo lokusebenza ukushayela izinombolo zocingo."</string>
- <!-- no translation found for permlab_callPrivileged (4198349211108497879) -->
- <skip />
+ <string name="permlab_callPrivileged" msgid="4198349211108497879">"ngokuqondile shayela noma iziphi izinombolo zocingo."</string>
<string name="permdesc_callPrivileged" msgid="244405067160028452">"Ivumela uhlelo lokusebenza ukushayela noma iyiphi inombolo yocingo, kuhlanganise izinombolo eziphuthumayo, ngaphandle kokungenela kwakho. Izinhlelo zokusebenza ezinonya zingase zenze izincingo ezingadingeki nezingekho ezimthethweni kwizinsizakalo eziphuthumayo."</string>
<string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"ngokuqondile qalisa ukumisa ithebhulethi nge-CDMA"</string>
<string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"ngokuqondile qalisa ukumisa ifoni nge-CDMA"</string>
<string name="permdesc_performCdmaProvisioning" msgid="6457447676108355905">"Ivumela uhlelo lokusebenza ukuqalisa amalungiselelo e-CDMA. Izinhlelo ezinonya ngokungadingekile zingaqalisa amalungiselelo e-CDMA."</string>
- <!-- no translation found for permlab_locationUpdates (7785408253364335740) -->
- <skip />
+ <string name="permlab_locationUpdates" msgid="7785408253364335740">"lawula izaziso zokubuyekeza indawo"</string>
<string name="permdesc_locationUpdates" msgid="2300018303720930256">"Ivumela ukuvula/ukuvimbela izaziso zesibuyekezo sendawo kusuka emsakazweni. Akumele isebenziswe izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_checkinProperties (7855259461268734914) -->
- <skip />
+ <string name="permlab_checkinProperties" msgid="7855259461268734914">"finyelela izakhiwo zokuhlola"</string>
<string name="permdesc_checkinProperties" msgid="7150307006141883832">"Ivumela ukufinyelela kokufunda/ukubhalela ezicini ezilayishwe insizakalo zokuhlola. Akuyona eyokusebenziswa izinhlelo zokusebenza ezivamile."</string>
<string name="permlab_bindGadget" msgid="776905339015863471">"khetha izinqunjwana"</string>
<string name="permdesc_bindGadget" msgid="2098697834497452046">"Ivumela uhlelo lokusebenza ukutshela isistimu ukuthi yimaphi amawijethi angasebenziswa yiziphi izinhlelo zokusebenza. Ngalemvume, izinhlelo zokusebenza zinganikeza ukufinyelela idatha yomuntu siqu kwezinye izinhlelo zokusebenza. Ayisebenziswa izinhlelo zokusebenza ezivamile."</string>
- <!-- no translation found for permlab_modifyPhoneState (8423923777659292228) -->
- <skip />
+ <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"guqula isimo sefoni"</string>
<string name="permdesc_modifyPhoneState" msgid="3302284561346956587">"Ivumela uhlelo lokusebenza ukulawula izici zefoni zedivaysi. Uhlelo lokusebenza olunalemvume lungashintsha amanethiwekhi, luvule futhi luvale umsakazo wefoni futhi ngaphandle kokukwazisa."</string>
<string name="permlab_readPhoneState" msgid="2326172951448691631">"funda isimo sefoni nokuhlonza"</string>
<string name="permdesc_readPhoneState" msgid="188877305147626781">"Ivumela uhlelo lokusebenza ukufinyelela izici zefoni zedivaysi. Uhlelo lokusebenza olunemvume lungathola inombolo yocingo nenombolo yomkhiqizo yalefoni, kungaba ukuthi ucingo luyasebenza, inombolo leyo ucingo oluxhume kuyo ngisho nokufanayo."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"gwema ithebhulethi ukuba ingalali"</string>
- <!-- outdated translation 1531731435011495015 --> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"gwema ithebhulethi ukuba ingalali"</string>
+ <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"gwema ifoni ukuba ingalali"</string>
<string name="permdesc_wakeLock" product="tablet" msgid="4032181488045338551">"Ivumela uhlelo lokusebenza ukugwema ithebhulethi ukuthi ingalali."</string>
<string name="permdesc_wakeLock" product="default" msgid="7584036471227467099">"Ivumela uhlelo lokusebenza ukugwema ifoni ukuba ingalali."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"amandla efoni avuliwe noma avaliwe"</string>
- <!-- outdated translation 2787034722616350417 --> <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"amandla efoni avuliwe noma avaliwe"</string>
+ <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"amandla efoni avuliwe noma avaliwe"</string>
<string name="permdesc_devicePower" product="tablet" msgid="3853773100100451905">"Ivumela uhlelo lokusebenza ukuvala noma ukuvula ithebhulethi."</string>
<string name="permdesc_devicePower" product="default" msgid="4577331933252444818">"Ivumela uhlelo lokusebenza ukuvula noma ukuvala ifoni."</string>
- <!-- no translation found for permlab_factoryTest (3715225492696416187) -->
- <skip />
+ <string name="permlab_factoryTest" msgid="3715225492696416187">"sebenzisa kwimodi yokuhlola yemboni"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yethebhulethi. Itholakala kuphela lapho ithebhulethi isebenza kwimodi yokuhlola yomkhiqizi."</string>
<string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Sebenzise njengokuhlola komkhiqizi wezinga eliphansi, uvumela ukufinyelela okugcwele ihadiwe yefoni. Itholakala kuphela lapho ifoni isebenza kwimodi yokuhlola yomkhiqizi."</string>
- <!-- no translation found for permlab_setWallpaper (6627192333373465143) -->
- <skip />
+ <string name="permlab_setWallpaper" msgid="6627192333373465143">"setha iphepha donga"</string>
<string name="permdesc_setWallpaper" msgid="6417041752170585837">"Ivumela uhlelo lokusebenza ukuhlela iphephadonga lesistimu."</string>
- <!-- no translation found for permlab_setWallpaperHints (3600721069353106851) -->
- <skip />
+ <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"setha izixwayiso zosayizi wephephadonga"</string>
<string name="permdesc_setWallpaperHints" msgid="6019479164008079626">"Ivumela uhlelo lokusebenza ukuhlela izihlawumbisela zosayizi wephephadonga lohlelo."</string>
- <!-- no translation found for permlab_masterClear (2315750423139697397) -->
- <skip />
+ <string name="permlab_masterClear" msgid="2315750423139697397">"setha kabusha kube okumisiwe kwemboni"</string>
<string name="permdesc_masterClear" msgid="5033465107545174514">"Ivumela uhlelo loksuebenza ukuhlela kabusha ngokuphelele isistimu kuzilungiselelo zalo zasembonini, ukusula yonke idatha, ukumisa, nezinhlelo zokusebenza ezifakiwe."</string>
<string name="permlab_setTime" msgid="2021614829591775646">"Hlela isikhathi"</string>
<string name="permdesc_setTime" product="tablet" msgid="209693136361006073">"Ivumela uhlelo lokusebenza ukushintsha isikhathi sewashi lethebhulethi."</string>
<string name="permdesc_setTime" product="default" msgid="667294309287080045">"Ivumela uhlelo lokusebenza ukushintsha isikhathi sewashi sefoni."</string>
- <!-- no translation found for permlab_setTimeZone (2945079801013077340) -->
- <skip />
+ <string name="permlab_setTimeZone" msgid="2945079801013077340">"setha umkhawulo wesikhathi"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="2522877107613885139">"Ivumela uhlelo lokusebenza ukushintsha umkhawulo wesikhathi wethebhulethi."</string>
<string name="permdesc_setTimeZone" product="default" msgid="1902540227418179364">"Ivumela uhlelo lokusebenza ukushintsha umkhawulo wesikhathi wefoni."</string>
<string name="permlab_accountManagerService" msgid="4829262349691386986">"yenza njenge Nsizakalo Yemeneja ye-Akhawunti"</string>
<string name="permdesc_accountManagerService" msgid="6056903274106394752">"Ivumela uhlelo lokusebenza ukwenza amakholi Kwiziqinisekisi ze-Akhawunti"</string>
- <!-- no translation found for permlab_getAccounts (4549918644233460103) -->
- <skip />
+ <string name="permlab_getAccounts" msgid="4549918644233460103">"thola ama-akhawunti aziwayo"</string>
<string name="permdesc_getAccounts" product="tablet" msgid="857622793935544694">"Ivumela uhlelo lokusebenza ukuthola uhlu lwama-akhawunti aziwa ithebhulethi."</string>
<string name="permdesc_getAccounts" product="default" msgid="6839262446413155394">"Ivumela uhlelo lokusebenza ukuthola uhlu lwama-akhawunti aziwa ifoni."</string>
<string name="permlab_authenticateAccounts" msgid="3940505577982882450">"izenza umqinisekisi we-akhawunti"</string>
@@ -608,57 +439,43 @@
<string name="permdesc_manageAccounts" msgid="8804114016661104517">"Ivumela uhlelo lokusebenza ukwenza imisebenzi enjengokufaka, nokukhipha ama-akhawunti nokususa iphasiwedi yawo."</string>
<string name="permlab_useCredentials" msgid="6401886092818819856">"sebenzisa iziqinisekiso zokufakazela ubuqiniso ze-akhawunti"</string>
<string name="permdesc_useCredentials" msgid="7416570544619546974">"Ivumela uhlelo lokusebenza ukucela amathokhini okuqinisekisa."</string>
- <!-- no translation found for permlab_accessNetworkState (6865575199464405769) -->
- <skip />
+ <string name="permlab_accessNetworkState" msgid="6865575199464405769">"buka isimo senethiwekhi"</string>
<string name="permdesc_accessNetworkState" msgid="558721128707712766">"Ivumela uhlelo lokusebenza ukubuka isimo sawo wonke amanethiwekhi."</string>
- <!-- no translation found for permlab_createNetworkSockets (9121633680349549585) -->
- <skip />
+ <string name="permlab_createNetworkSockets" msgid="9121633680349549585">"Ukufinyelela i-Inthanethi ngokugcwele"</string>
<string name="permdesc_createNetworkSockets" msgid="4593339106921772192">"Ivumela uhlelo lokusebenza ukwenza izimbobo zenethiwekhi."</string>
<string name="permlab_writeApnSettings" msgid="505660159675751896">"shintsha/ngenelela izilungiselelo kanye nokuhamba kuhleloxhumano"</string>
<string name="permdesc_writeApnSettings" msgid="2369786339323021771">"Ivumela isisetshenziswa ukuthi sishintshe okulungiselelwe kohleloxhumano kanye nokungenelela kanye nokuhlola konke okuhamba ngohleloxhumano, isibonelo ukushintsha imvume noma ukufaka noma eyiphi i-APN. Izisetshenziswa ezingafanele zingaqapha, zihambise kwenye indawo, noma zishintshe amaphakethe ohleloxhumano ngaphandle kokwazi kwakho."</string>
- <!-- no translation found for permlab_changeNetworkState (958884291454327309) -->
- <skip />
+ <string name="permlab_changeNetworkState" msgid="958884291454327309">"shintsha uxhumano lwenethiwekhi"</string>
<string name="permdesc_changeNetworkState" msgid="4199958910396387075">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi."</string>
<string name="permlab_changeTetherState" msgid="2702121155761140799">"Shintsha uxhumano lokusebenzisa njengemodemu"</string>
<string name="permdesc_changeTetherState" msgid="8905815579146349568">"Ivumela uhlelo lokusebenza ukushintsha isimo soxhumano lwenethiwekhi lokusebenzisa ifoni njengemodemu."</string>
<string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"shintsha idatha yasemuva yelungiselelo lokusebenzisa"</string>
<string name="permdesc_changeBackgroundDataSetting" msgid="1001482853266638864">"Ivumela uhlelo lokusebenza ukushintsha isilungiselelo lokusebenzisa idatha yasemuva."</string>
- <!-- no translation found for permlab_accessWifiState (8100926650211034400) -->
- <skip />
+ <string name="permlab_accessWifiState" msgid="8100926650211034400">"buka isimo se-Wi-Fi"</string>
<string name="permdesc_accessWifiState" msgid="485796529139236346">"Ivumela uhlelo lokusebenza ukubuka ukwaziswa mayelana nesimo se-Wi-Fi."</string>
- <!-- no translation found for permlab_changeWifiState (7280632711057112137) -->
- <skip />
+ <string name="permlab_changeWifiState" msgid="7280632711057112137">"shintsha isimo se-WiFi"</string>
<string name="permdesc_changeWifiState" msgid="2950383153656873267">"Ivumela uhlelo lokusebena ukuxhuma futhi ingaxhumeki kumaphoyinti e-Wi-Fi, nokwenza izinguquko kumanethiwekhi e-Wi-Fi amisiwe."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"ivumela isamukeli se-Wi-Fi Multicast"</string>
<string name="permdesc_changeWifiMulticastState" msgid="8199464507656067553">"Ivumela uhlelo lokusebenza ukuthola amaphakhethe ngokungaqondile angeyona awedivaysi yakho. Lokhu kungaba usizo lapho uthola izinsizakalo ezinikezwa eduze. Kusebenzisa amandla amaninigi kunemodi yokungajikijeli okuningi."</string>
- <!-- no translation found for permlab_bluetoothAdmin (1092209628459341292) -->
- <skip />
+ <string name="permlab_bluetoothAdmin" msgid="1092209628459341292">"ukubhalisela i-bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="3511795757324345837">"Ivumela uhlelo lokusebenza ukumisa ithebhulethi ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="7256289774667054555">"Ivumela uhlelo lokusebenza ukumisa ifoni ye-Bluetooth yasendawni, nokuthola nokubhanqanisa namadivaysi okulawula okukude."</string>
- <!-- no translation found for permlab_bluetooth (8361038707857018732) -->
- <skip />
+ <string name="permlab_bluetooth" msgid="8361038707857018732">"Yenza uxhumano lwe-Bluetooth"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="4191941825910543803">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni yethebhulethi ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
<string name="permdesc_bluetooth" product="default" msgid="762515380679392945">"Ivumela uhlelo lokusebenza ukubuka ukumisa ifoni ye-Bluetooth yasendaweni, nokwenza futhi nokwamukela uxhumano ngamadivaysi abhangqene."</string>
<string name="permlab_nfc" msgid="4423351274757876953">"lawula Uxhumano Lwenkambu Eseduze"</string>
<string name="permdesc_nfc" msgid="9171401851954407226">"Ivumela uhlelo lokusebenza ukuxhumana nezilengisi, amakhadi, nabafundi Bokuxhumana Nenkambu Eseduze (NFC)."</string>
- <!-- no translation found for permlab_disableKeyguard (4977406164311535092) -->
- <skip />
+ <string name="permlab_disableKeyguard" msgid="4977406164311535092">"vimbela ukuvala ukhiye"</string>
<string name="permdesc_disableKeyguard" msgid="3189763479326302017">"Ivumela uhlelo lokusebenza ukuvimbela ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo esisemthethweni salokhu ukuba ifoni ivimbele ukuvala ukhiye laphi ithola ikholi engenayo, bese ivumela futhi ukuvala ukhiye lapho ucingo seluqedile."</string>
- <!-- no translation found for permlab_readSyncSettings (6201810008230503052) -->
- <skip />
+ <string name="permlab_readSyncSettings" msgid="6201810008230503052">"funda izilungiselelo zokuvumelanisa"</string>
<string name="permdesc_readSyncSettings" msgid="5315925706353341823">"Ivumela uhlelo lokusebenza ukufunda izilungiselelo zokuvumelanisa, njengokuthi ingabe ukuvumelanisa kuvulelwe yini Othintana nabo."</string>
- <!-- no translation found for permlab_writeSyncSettings (6297138566442486462) -->
- <skip />
+ <string name="permlab_writeSyncSettings" msgid="6297138566442486462">"bhala izilungiselelo zokuvumelanisa"</string>
<string name="permdesc_writeSyncSettings" msgid="2498201614431360044">"Ivumela uhlelo lokusebenza ukuguqula izilungiselelo zokuvumelanisa, njengokuthi ingabe ukuvumelanisa kuvunyelwe Othintana nabo."</string>
- <!-- no translation found for permlab_readSyncStats (7396577451360202448) -->
- <skip />
+ <string name="permlab_readSyncStats" msgid="7396577451360202448">"funda izibalo zokuvumelanisa"</string>
<string name="permdesc_readSyncStats" msgid="7511448343374465000">"Ivumela uhlelo lokusebenza ukufunda izibalo zokuvumelanisa; isb., umlando wokuvumelanisa ovelile."</string>
- <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
- <skip />
- <!-- no translation found for permdesc_subscribedFeedsRead (3622200625634207660) -->
- <skip />
- <!-- no translation found for permlab_subscribedFeedsWrite (9015246325408209296) -->
- <skip />
+ <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"funda izifunzo ezikhokhelwayo"</string>
+ <string name="permdesc_subscribedFeedsRead" msgid="3622200625634207660">"Ivumela uhlelo lokusebenza ukuba luthole imininingwane mayelana nezifunzo ezisanda kuvumalaniswa."</string>
+ <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"bhala izifunzo ezikhokhelwayo"</string>
<string name="permdesc_subscribedFeedsWrite" msgid="8121607099326533878">"Ivumela uhlelo lokusebenza ukuguqula izifunzo zakho ezisanda kuvumelaniswa. Lokhu kungase kuvumele uhlelo lokusebenza olunonya ukushintsha izifunzo ezivumelanisiwe."</string>
<string name="permlab_readDictionary" msgid="432535716804748781">"funda isichazamazwi ezicacisiwe somsebenzisi"</string>
<string name="permdesc_readDictionary" msgid="1082972603576360690">"Ivumela uhlelo lokusebenza ukufunda noma yimaphi amagama ayimfihlo, amagama nemisho leyo umsebenzisi ayigcine kwisichazamazwi somsebenzisi."</string>
@@ -674,18 +491,12 @@
<string name="permdesc_cache_filesystem" msgid="1624734528435659906">"Ivumela uhlelo lokusebenza ukufunda nokubhala uhlelo lwesistimu lwenqolobane."</string>
<string name="permlab_use_sip" msgid="5986952362795870502">"yena/thola amakholi e-Inthanethi"</string>
<string name="permdesc_use_sip" msgid="6320376185606661843">"Ivumela uhlelo lokusebenza ukusebenzisa insizakalo ye-SIP ukwenza/ukuthola amakholi e-Inthanethi."</string>
- <!-- no translation found for permlab_readNetworkUsageHistory (7862593283611493232) -->
- <skip />
- <!-- no translation found for permdesc_readNetworkUsageHistory (6040738474779135653) -->
- <skip />
- <!-- no translation found for permlab_manageNetworkPolicy (2562053592339859990) -->
- <skip />
- <!-- no translation found for permdesc_manageNetworkPolicy (3723795285132803958) -->
- <skip />
- <!-- no translation found for permlab_modifyNetworkAccounting (5088217309088729650) -->
- <skip />
- <!-- no translation found for permdesc_modifyNetworkAccounting (8702285686629184404) -->
- <skip />
+ <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"funda ukusetshenziswa komlando wohleloxhumano"</string>
+ <string name="permdesc_readNetworkUsageHistory" msgid="6040738474779135653">"Ivumela uhlelo lokusebenza ukufunda umlando wokusebenza kohleloxhumano kwezinhleloxhumano eziqondile nezinhlelo zokusebenza."</string>
+ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"phatha uhleloxhumano lwenqubomgomo"</string>
+ <string name="permdesc_manageNetworkPolicy" msgid="3723795285132803958">"Ivumela uhlelo lokusebenza ukuthi liphathe amapholisi wohleloxhumano kanye nokuchaza imithetho eqondile yohlelo lokusebenza."</string>
+ <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"lungisa ukubala kokusebenza kohleloxhumano"</string>
+ <string name="permdesc_modifyNetworkAccounting" msgid="8702285686629184404">"Ivumela ukulungisa kokuthi ukusebenza kohleloxhumano aluvumelwe kuhlelo lokusebenza. Ayisetshenziswa izinhlelo zokusebenza ezivamile."</string>
<string name="policylab_limitPassword" msgid="4497420728857585791">"Misa imithetho yephasiwedi"</string>
<string name="policydesc_limitPassword" msgid="9083400080861728056">"Lawula ubude nezinhlamvu ezivunyelwe kumaphasiwedi okuvula isikrini"</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Gaka imizamo yokuvula isikrini"</string>
@@ -700,14 +511,12 @@
<string name="policydesc_wipeData" product="default" msgid="7669895333814222586">"Sula idatha yefoni ngaphandle kwesixwayiso, ngokwenza ukuhlela kabusha idatha yemboni"</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Misa ummelelii jikelele yedivaysi"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Misa iphrokzi jikelele yedivaysi ukusebenzisa ngenkathi inqumbomgomo ivunyelwa. Idivaysi yokuqala kuphela yokuphatha emisa ummeleli jikelele esebenzayo."</string>
- <!-- outdated translation 2314569545488269564 --> <string name="policylab_expirePassword" msgid="885279151847254056">"Hlela ukuphelelwa isikhathi kwephasiwedi."</string>
- <!-- outdated translation 7276906351852798814 --> <string name="policydesc_expirePassword" msgid="4844430354224822074">"Lawula ukuthi iphasiwedi yokuvala isikrini kumele ishintshwe nini"</string>
+ <string name="policylab_expirePassword" msgid="885279151847254056">"Hlela ukuphelelwa isikhathi sokuvala-isikrini."</string>
+ <string name="policydesc_expirePassword" msgid="4844430354224822074">"Phatha ukuthi i-password yokuvala isikrini isintshwe kangakanani"</string>
<string name="policylab_encryptedStorage" msgid="8901326199909132915">"Setha umbhalo wemfihlo yesitoreji"</string>
<string name="policydesc_encryptedStorage" msgid="2504984732631479399">"Idinga ukuba idatha yohlelo lokusebenza olugciniwe ibhalwe ngokufihlekileyo"</string>
- <!-- no translation found for policylab_disableCamera (6395301023152297826) -->
- <skip />
- <!-- no translation found for policydesc_disableCamera (5680054212889413366) -->
- <skip />
+ <string name="policylab_disableCamera" msgid="6395301023152297826">"Khubaza amakhamera"</string>
+ <string name="policydesc_disableCamera" msgid="5680054212889413366">"Vimbela ukusetshenziswa kwamadivaysi wonke wamakhamera"</string>
<string-array name="phoneTypes">
<item msgid="8901098336658710359">"Ekhaya"</item>
<item msgid="869923650527136615">"Iselula"</item>
@@ -822,61 +631,41 @@
<string name="sipAddressTypeWork" msgid="6920725730797099047">"Umsebenzi"</string>
<string name="sipAddressTypeOther" msgid="4408436162950119849">"Okunye"</string>
<string name="keyguard_password_enter_pin_code" msgid="3731488827218876115">"Faka ikhodi ye-PIN"</string>
- <!-- no translation found for keyguard_password_enter_puk_code (5965173481572346878) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
- <skip />
- <!-- no translation found for keyguard_password_enter_pin_prompt (2987350144349051286) -->
- <skip />
- <!-- no translation found for keyguard_password_entry_touch_hint (7906561917570259833) -->
- <skip />
+ <string name="keyguard_password_enter_puk_code" msgid="5965173481572346878">"Faka i-PUK nephinikhodi entsha"</string>
+ <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Ikhodi le-PUK"</string>
+ <string name="keyguard_password_enter_pin_prompt" msgid="2987350144349051286">"Iphinikhodi entsha"</string>
+ <string name="keyguard_password_entry_touch_hint" msgid="7906561917570259833"><font size="17">"Cindezela ukufaka i-password"</font></string>
<string name="keyguard_password_enter_password_code" msgid="9138158344813213754">"Faka iphasiwedi ukuvula"</string>
<string name="keyguard_password_enter_pin_password_code" msgid="638347075625491514">"Faka i-PIN ukuvula"</string>
- <!-- no translation found for keyguard_password_wrong_pin_code (1295984114338107718) -->
- <skip />
- <!-- no translation found for keyguard_label_text (861796461028298424) -->
- <skip />
- <!-- no translation found for emergency_call_dialog_number_for_display (696192103195090970) -->
- <skip />
+ <string name="keyguard_password_wrong_pin_code" msgid="1295984114338107718">"Ikhodi ye-PIN engalungile!"</string>
+ <string name="keyguard_label_text" msgid="861796461028298424">"Ukuvula, cindezela Menyu bese 0."</string>
+ <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Inombolo ephuthumayo"</string>
<string name="lockscreen_carrier_default" msgid="8963839242565653192">"Ayikho isevisi"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Isikrini sivaliwe."</string>
- <!-- no translation found for lockscreen_instructions_when_pattern_enabled (46154051614126049) -->
- <skip />
- <!-- no translation found for lockscreen_instructions_when_pattern_disabled (686260028797158364) -->
- <skip />
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Cindezela Menyu ukuvula noma ukwenza ucingo oluphuthumayo."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Cindezela Menyu ukuvula."</string>
<string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Dweba iphathini ukuvula"</string>
- <!-- no translation found for lockscreen_emergency_call (5347633784401285225) -->
- <skip />
+ <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Ucingo oluphuthumayo"</string>
<string name="lockscreen_return_to_call" msgid="5244259785500040021">"Buyela ekholini"</string>
- <!-- no translation found for lockscreen_pattern_correct (9039008650362261237) -->
- <skip />
+ <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Lungile!"</string>
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Uxolo, zama futhi"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"Uxolo, zama futhi"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Iyashaja (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
<string name="lockscreen_charged" msgid="4938930459620989972">"Kushajiwe."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
- <!-- no translation found for lockscreen_low_battery (1482873981919249740) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_message_short (7381499217732227295) -->
- <skip />
+ <string name="lockscreen_low_battery" msgid="1482873981919249740">"Xhuma ishaja yakho."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Alikho ikhadi le-SIM."</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Alikho ikhadi le-SIM efonini."</string>
- <!-- outdated translation 151659196095791474 --> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Alikho ikhadi le-SIM efonini."</string>
- <!-- no translation found for lockscreen_missing_sim_instructions (8874620818937719067) -->
- <skip />
- <!-- no translation found for lockscreen_missing_sim_instructions_long (7138450788301444298) -->
- <skip />
- <!-- no translation found for lockscreen_permanent_disabled_sim_instructions (1631853574702335453) -->
- <skip />
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Alikho ikhadi le-SIM efonini."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sicela ufake ikhadi le-SIM."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"Ikhadi le-SIM alitholakali noma alifundeki. Sicela ufake ikhadi le-SIM."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Ikhadi lakho lwe-SIM lukhubazekhisiwe ngokuphelele. "\n" Sicela uthintane nomhlinzeki wosizo ongenantambo ukuthola elinye ikhadi le-SIM."</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Amakholi aphuthumayo kuphela"</string>
- <!-- no translation found for lockscreen_network_locked_message (143389224986028501) -->
- <skip />
- <!-- no translation found for lockscreen_sim_puk_locked_message (7441797339976230) -->
- <skip />
+ <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Inethiwekhi ivaliwe"</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Ikhadi le-SIM livalwe nge-PUK."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Sicela ubone Isiqondisi Somsebenzisi noma xhumana Nokunakekela Ikhasimende"</string>
- <!-- no translation found for lockscreen_sim_locked_message (8066660129206001039) -->
- <skip />
- <!-- no translation found for lockscreen_sim_unlock_progress_dialog_message (595323214052881264) -->
- <skip />
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Ikhadi le-SIM livaliwe."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Ivula ikhadi le-SIM..."</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"Ufake ngokungalungile iphasiwedi yakho izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"Ufake ngokungalungile i-PIN yakho izikhathi ezingu- <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Sicela uzame futhi emasekhondini angu- <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
@@ -886,24 +675,16 @@
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Uzame ngokusebenzisa indlela engafanele ukuvula izikhathi <xliff:g id="NUMBER_0">%d</xliff:g> zocingo. Ngemuva <xliff:g id="NUMBER_1">%d</xliff:g> kokuzama kaningana ngaphandle kwempumelelo, ucingo luzobiyiselwa kwizimiso zasembonini futhi yonke imininingo yomsebenzisi izolahleka."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> ze-tablet. I-tablet manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Uzame ukuvula ngendlela engafanele izikhathi <xliff:g id="NUMBER">%d</xliff:g> zocingo. Ucingo manje seyizosethwa kabusha ibe yizimiso zasembonini."</string>
- <!-- no translation found for lockscreen_too_many_failed_attempts_countdown (6251480343394389665) -->
- <skip />
- <!-- no translation found for lockscreen_forgot_pattern_button_text (2626999449610695930) -->
- <skip />
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Zama futhi emizuzwini engu <xliff:g id="NUMBER">%d</xliff:g>."</string>
+ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Ukhohlwe iphethini?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Ukuvulwa kwe-akhawunti"</string>
- <!-- no translation found for lockscreen_glogin_too_many_attempts (2446246026221678244) -->
- <skip />
+ <string name="lockscreen_glogin_too_many_attempts" msgid="2446246026221678244">"Kunemizama eminingi kakhulu yephathini!"</string>
<string name="lockscreen_glogin_instructions" msgid="1816635201812207709">"Ukuvula, ngena ngemvumekwi-akhawunti ye-Google"</string>
- <!-- no translation found for lockscreen_glogin_username_hint (8846881424106484447) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_password_hint (5958028383954738528) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_submit_button (7130893694795786300) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_invalid_input (1364051473347485908) -->
- <skip />
- <!-- no translation found for lockscreen_glogin_account_recovery_hint (8253152905532900548) -->
- <skip />
+ <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Igama lomsebenzisi (i-imeyli)"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"I-password"</string>
+ <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Ngena ngemvume"</string>
+ <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Igama lomsebezisi elingalungile noma iphasiwedi."</string>
+ <string name="lockscreen_glogin_account_recovery_hint" msgid="8253152905532900548">"Ukhohlwe igama lomsebenzisi noma i-password?"\n"Vakashela"<b>"google.com/accounts/recovery"</b></string>
<string name="lockscreen_glogin_checking_password" msgid="6758890536332363322">"Iyahlola..."</string>
<string name="lockscreen_unlock_label" msgid="737440483220667054">"Vula"</string>
<string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Umsindo uvuliwe"</string>
@@ -913,17 +694,14 @@
<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>
- <!-- no translation found for factorytest_failed (5410270329114212041) -->
- <skip />
+ <string name="factorytest_failed" msgid="5410270329114212041">"Ukuhlola kwemboni kwehlulekile"</string>
<string name="factorytest_not_system" msgid="4435201656767276723">"Isenzo SOKUHLOLA_KWASEMBONINI sisekelwa kuphela amaphakheji afakwe kwisistimu/uhlelokusebenza."</string>
<string name="factorytest_no_action" msgid="872991874799998561">"Ayikho iphakheji etholakele enikeze isenzo SOKUHLOLA KWASEMBONINI."</string>
- <!-- no translation found for factorytest_reboot (6320168203050791643) -->
- <skip />
+ <string name="factorytest_reboot" msgid="6320168203050791643">"Qalisa kabusha"</string>
<string name="js_dialog_title" msgid="8143918455087008109">"Ikhasi eliku \'<xliff:g id="TITLE">%s</xliff:g>\' lithi:"</string>
<string name="js_dialog_title_default" msgid="6961903213729667573">"i-JavaScript"</string>
<string name="js_dialog_before_unload" msgid="1901675448179653089">"Phuma kuleli khasi?"\n\n"<xliff:g id="MESSAGE">%s</xliff:g>"\n\n"Khetha KULUNGILE ukuqhubeka, noma Khansela ukuhlala kuleli khasi."</string>
- <!-- no translation found for save_password_label (6860261758665825069) -->
- <skip />
+ <string name="save_password_label" msgid="6860261758665825069">"Qinisekisa"</string>
<string name="double_tap_toast" msgid="1068216937244567247">"Ithiphu; thepha kabili ukusondeza ngaphandle nangaphakathi."</string>
<string name="autofill_this_form" msgid="1272247532604569872">"Ukugcwalisa Okuzenzakalelayo"</string>
<string name="setup_autofill" msgid="8154593408885654044">"Misa Ukugcwalisa Okuzenzakalelayo"</string>
@@ -931,30 +709,18 @@
<string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
<string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
<string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
- <!-- no translation found for autofill_province (2231806553863422300) -->
- <skip />
- <!-- no translation found for autofill_postal_code (4696430407689377108) -->
- <skip />
- <!-- no translation found for autofill_state (6988894195520044613) -->
- <skip />
- <!-- no translation found for autofill_zip_code (8697544592627322946) -->
- <skip />
- <!-- no translation found for autofill_county (237073771020362891) -->
- <skip />
- <!-- no translation found for autofill_island (4020100875984667025) -->
- <skip />
- <!-- no translation found for autofill_district (8400735073392267672) -->
- <skip />
- <!-- no translation found for autofill_department (5343279462564453309) -->
- <skip />
- <!-- no translation found for autofill_prefecture (2028499485065800419) -->
- <skip />
- <!-- no translation found for autofill_parish (8202206105468820057) -->
- <skip />
- <!-- no translation found for autofill_area (3547409050889952423) -->
- <skip />
- <!-- no translation found for autofill_emirate (2893880978835698818) -->
- <skip />
+ <string name="autofill_province" msgid="2231806553863422300">"Isifunda"</string>
+ <string name="autofill_postal_code" msgid="4696430407689377108">"Ikhodi yeposi"</string>
+ <string name="autofill_state" msgid="6988894195520044613">"Izwe"</string>
+ <string name="autofill_zip_code" msgid="8697544592627322946">"Ikhodi ye-ZIP"</string>
+ <string name="autofill_county" msgid="237073771020362891">"Izwe"</string>
+ <string name="autofill_island" msgid="4020100875984667025">"Island"</string>
+ <string name="autofill_district" msgid="8400735073392267672">"Isifunda"</string>
+ <string name="autofill_department" msgid="5343279462564453309">"Umnyango"</string>
+ <string name="autofill_prefecture" msgid="2028499485065800419">"Isifunda"</string>
+ <string name="autofill_parish" msgid="8202206105468820057">"Parish"</string>
+ <string name="autofill_area" msgid="3547409050889952423">"Indawo"</string>
+ <string name="autofill_emirate" msgid="2893880978835698818">"Emirate"</string>
<string name="permlab_readHistoryBookmarks" msgid="1284843728203412135">"funda umlando Wesiphequluli namabhukimakhi"</string>
<string name="permdesc_readHistoryBookmarks" msgid="4981489815467617191">"Ivumela uhlelo lokusebenza ukufunda wonke ama-URL lawo Isiphequluli esiwavakashele, ngisho nawo wonke amabhukimakhi Esiphequluli."</string>
<string name="permlab_writeHistoryBookmarks" msgid="9009434109836280374">"bhala umlando Wesiphequluli namabhukhimaki"</string>
@@ -970,37 +736,24 @@
<string name="permdesc_packageVerificationAgent" msgid="6033195477325381106">"Vumela ukuthi isisetshenziswa siqinisekise ukuthi ngabe iphakheji iyafakeka."</string>
<string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"bopha okokuqinisekisa iphakheji"</string>
<string name="permdesc_bindPackageVerifier" msgid="2409521927385789318">"Ivumela umnikazi ukuthi enze izicelo zezinsiza eziqinisekisa iphakheji. Akumele kudingeke ekusetshenzisweni okujwayelekile."</string>
- <!-- no translation found for save_password_message (767344687139195790) -->
- <skip />
- <!-- no translation found for save_password_notnow (6389675316706699758) -->
- <skip />
- <!-- no translation found for save_password_remember (6491879678996749466) -->
- <skip />
- <!-- no translation found for save_password_never (8274330296785855105) -->
- <skip />
- <!-- no translation found for open_permission_deny (5661861460947222274) -->
- <skip />
- <!-- no translation found for text_copied (4985729524670131385) -->
- <skip />
- <!-- no translation found for more_item_label (4650918923083320495) -->
- <skip />
- <!-- no translation found for prepend_shortcut_label (2572214461676015642) -->
- <skip />
- <!-- no translation found for menu_space_shortcut_label (2410328639272162537) -->
- <skip />
- <!-- no translation found for menu_enter_shortcut_label (2743362785111309668) -->
- <skip />
- <!-- no translation found for menu_delete_shortcut_label (3658178007202748164) -->
- <skip />
- <!-- no translation found for search_go (8298016669822141719) -->
- <skip />
+ <string name="save_password_message" msgid="767344687139195790">"Ingabe ufuna ukuba isiphequluli sikhumbule lephasiwedi?"</string>
+ <string name="save_password_notnow" msgid="6389675316706699758">"Hha yi manje"</string>
+ <string name="save_password_remember" msgid="6491879678996749466">"Khumbula"</string>
+ <string name="save_password_never" msgid="8274330296785855105">"Akusoze"</string>
+ <string name="open_permission_deny" msgid="5661861460947222274">"Awunayo imvume yokuvula leli khasi."</string>
+ <string name="text_copied" msgid="4985729524670131385">"Umbhalo ukopishwe ebhodini lokunamathisela."</string>
+ <string name="more_item_label" msgid="4650918923083320495">"Okungaphezulu"</string>
+ <string name="prepend_shortcut_label" msgid="2572214461676015642">"Imenyu+"</string>
+ <string name="menu_space_shortcut_label" msgid="2410328639272162537">"isikhala"</string>
+ <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"faka"</string>
+ <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"susa"</string>
+ <string name="search_go" msgid="8298016669822141719">"Sesha"</string>
<string name="searchview_description_search" msgid="6749826639098512120">"Cinga"</string>
<string name="searchview_description_query" msgid="5911778593125355124">"Cinga umbuzo"</string>
<string name="searchview_description_clear" msgid="1330281990951833033">"xazulula umbuzo"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Thumela umbuzo"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Ukucinga ngezwi"</string>
- <!-- no translation found for oneMonthDurationPast (7396384508953779925) -->
- <skip />
+ <string name="oneMonthDurationPast" msgid="7396384508953779925">"inyanga eyi-1 edlule"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string>
<plurals name="num_seconds_ago">
<item quantity="one" msgid="4869870056547896011">"isekhondi elingu-1 eledlule"</item>
@@ -1074,37 +827,22 @@
<string name="preposition_for_date" msgid="9093949757757445117">"Ngomhla ka <xliff:g id="DATE">%s</xliff:g>"</string>
<string name="preposition_for_time" msgid="5506831244263083793">"e-<xliff:g id="TIME">%s</xliff:g>"</string>
<string name="preposition_for_year" msgid="5040395640711867177">"phakathi- <xliff:g id="YEAR">%s</xliff:g>"</string>
- <!-- no translation found for day (8144195776058119424) -->
- <skip />
- <!-- no translation found for days (4774547661021344602) -->
- <skip />
- <!-- no translation found for hour (2126771916426189481) -->
- <skip />
- <!-- no translation found for hours (894424005266852993) -->
- <skip />
- <!-- no translation found for minute (9148878657703769868) -->
- <skip />
- <!-- no translation found for minutes (5646001005827034509) -->
- <skip />
- <!-- no translation found for second (3184235808021478) -->
- <skip />
- <!-- no translation found for seconds (3161515347216589235) -->
- <skip />
- <!-- no translation found for week (5617961537173061583) -->
- <skip />
- <!-- no translation found for weeks (6509623834583944518) -->
- <skip />
- <!-- no translation found for year (4001118221013892076) -->
- <skip />
- <!-- no translation found for years (6881577717993213522) -->
- <skip />
- <!-- no translation found for VideoView_error_title (3359437293118172396) -->
- <skip />
+ <string name="day" msgid="8144195776058119424">"usuku"</string>
+ <string name="days" msgid="4774547661021344602">"izinsuku"</string>
+ <string name="hour" msgid="2126771916426189481">"ihora"</string>
+ <string name="hours" msgid="894424005266852993">"amahora"</string>
+ <string name="minute" msgid="9148878657703769868">"Okuncane"</string>
+ <string name="minutes" msgid="5646001005827034509">"imizuzu"</string>
+ <string name="second" msgid="3184235808021478">"umzuzwana"</string>
+ <string name="seconds" msgid="3161515347216589235">"amasekhondi"</string>
+ <string name="week" msgid="5617961537173061583">"iviki"</string>
+ <string name="weeks" msgid="6509623834583944518">"amaviki"</string>
+ <string name="year" msgid="4001118221013892076">"unyaka"</string>
+ <string name="years" msgid="6881577717993213522">"iminyaka"</string>
+ <string name="VideoView_error_title" msgid="3359437293118172396">"Ayikwazi ukudlala ividiyo"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="897920883624437033">"Uxolo, levidiyo ayilungele ukusakaza bukhomo kwale divaysi."</string>
- <!-- no translation found for VideoView_error_text_unknown (710301040038083944) -->
- <skip />
- <!-- no translation found for VideoView_error_button (2822238215100679592) -->
- <skip />
+ <string name="VideoView_error_text_unknown" msgid="710301040038083944">"Uxolo, levidiyo ayikwazi ukudlalwa."</string>
+ <string name="VideoView_error_button" msgid="2822238215100679592">"KULUNGILE"</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">"mini"</string>
<string name="Noon" msgid="3342127745230013127">"Emini"</string>
@@ -1112,53 +850,40 @@
<string name="Midnight" msgid="5630806906897892201">"Ebusuku"</string>
<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>
- <!-- no translation found for selectAll (6876518925844129331) -->
- <skip />
- <!-- no translation found for cut (3092569408438626261) -->
- <skip />
- <!-- no translation found for copy (2681946229533511987) -->
- <skip />
- <!-- no translation found for paste (5629880836805036433) -->
- <skip />
+ <string name="selectAll" msgid="6876518925844129331">"Khetha konke"</string>
+ <string name="cut" msgid="3092569408438626261">"Nqamula"</string>
+ <string name="copy" msgid="2681946229533511987">"Kopisha"</string>
+ <string name="paste" msgid="5629880836805036433">"Namathisela"</string>
<string name="replace" msgid="5781686059063148930">"Buyisela"</string>
<string name="delete" msgid="6098684844021697789">"Susa"</string>
- <!-- no translation found for copyUrl (2538211579596067402) -->
- <skip />
+ <string name="copyUrl" msgid="2538211579596067402">"Kopisha i-URL"</string>
<string name="selectTextMode" msgid="6738556348861347240">"Khetha umbhalo..."</string>
<string name="textSelectionCABTitle" msgid="5236850394370820357">"Inketho yombhalo"</string>
- <string name="addToDictionary" msgid="2839899368418071843">"Faka esichazinimazwi"</string>
- <string name="inputMethod" msgid="1653630062304567879">"Indlela yokufakwayo"</string>
- <string name="editTextMenuTitle" msgid="4909135564941815494">"Izenzo zombhalo"</string>
- <!-- no translation found for low_internal_storage_view_title (1399732408701697546) -->
+ <!-- unknown placeholder WORD in addToDictionary -->
<skip />
- <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Isitoreji sethebhulethi siya ngokuphela."</string>
- <!-- outdated translation 4231085657068852042 --> <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Isitoreji sethebhulethi siya ngokuphela."</string>
- <!-- no translation found for ok (5970060430562524910) -->
- <skip />
- <!-- no translation found for cancel (6442560571259935130) -->
- <skip />
- <!-- no translation found for yes (5362982303337969312) -->
+ <!-- no translation found for addToDictionary (9090375111134433012) -->
<skip />
- <!-- no translation found for no (5141531044935541497) -->
+ <!-- no translation found for deleteText (7070985395199629156) -->
<skip />
+ <string name="inputMethod" msgid="1653630062304567879">"Indlela yokufakwayo"</string>
+ <string name="editTextMenuTitle" msgid="4909135564941815494">"Izenzo zombhalo"</string>
+ <string name="low_internal_storage_view_title" msgid="1399732408701697546">"Isikhala sincane"</string>
+ <string name="low_internal_storage_view_text" product="tablet" msgid="4231085657068852042">"Isitoreji sethebhulethi siya ngokuphela."</string>
+ <string name="low_internal_storage_view_text" product="default" msgid="635106544616378836">"Isikhala sokugcina sefoni siya ngokuphela."</string>
+ <string name="ok" msgid="5970060430562524910">"KULUNGILE"</string>
+ <string name="cancel" msgid="6442560571259935130">"Khansela"</string>
+ <string name="yes" msgid="5362982303337969312">"KULUNGILE"</string>
+ <string name="no" msgid="5141531044935541497">"Khansela"</string>
<string name="dialog_alert_title" msgid="2049658708609043103">"Ukunaka"</string>
<string name="loading" msgid="1760724998928255250">"Iyalayisha..."</string>
- <!-- no translation found for capital_on (1544682755514494298) -->
- <skip />
- <!-- no translation found for capital_off (6815870386972805832) -->
- <skip />
- <!-- no translation found for whichApplication (4533185947064773386) -->
- <skip />
- <!-- no translation found for alwaysUse (4583018368000610438) -->
- <skip />
- <!-- no translation found for clearDefaultHintMsg (4815455344600932173) -->
- <skip />
- <!-- no translation found for chooseActivity (1009246475582238425) -->
- <skip />
- <!-- no translation found for chooseUsbActivity (7892597146032121735) -->
- <skip />
- <!-- no translation found for noApplications (1691104391758345586) -->
- <skip />
+ <string name="capital_on" msgid="1544682755514494298">"Ngomhla ka"</string>
+ <string name="capital_off" msgid="6815870386972805832">"VALIWE"</string>
+ <string name="whichApplication" msgid="4533185947064773386">"Qedela isenzo usebenzisa"</string>
+ <string name="alwaysUse" msgid="4583018368000610438">"Sebenzisa ngokuzenzakalelayo kulesenzo."</string>
+ <string name="clearDefaultHintMsg" msgid="4815455344600932173">"Sula okuzenzakalelayo Emalungiselelweni Asekhaya &gt; Uhlelo Lokusebenza &gt; Phatha izinhlelo zokusebenza"</string>
+ <string name="chooseActivity" msgid="1009246475582238425">"Khetha isenzo"</string>
+ <string name="chooseUsbActivity" msgid="7892597146032121735">"Khethela idivayisi ye-USB uhlelolokusebenza"</string>
+ <string name="noApplications" msgid="1691104391758345586">"Azikho izinhlelo zokusebenza ezingenza lesi sinyathelo."</string>
<string name="aerr_title" msgid="1905800560317137752"></string>
<string name="aerr_application" msgid="932628488013092776">"Ngeshwa, <xliff:g id="APPLICATION">%1$s</xliff:g> kumile."</string>
<string name="aerr_process" msgid="4507058997035697579">"Ngeshwa, uhlelo <xliff:g id="PROCESS">%1$s</xliff:g> luvele lwama."</string>
@@ -1169,17 +894,13 @@
<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 />
+ <string name="wait" msgid="7147118217226317732">"Linda"</string>
<string name="launch_warning_title" msgid="8323761616052121936">"Uhlelo lokusebenza luqondisiwe futhi"</string>
<string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> iyasebenza."</string>
<string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> iqalisiwe."</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">"Isilinganisi"</string>
+ <string name="screen_compat_mode_show" msgid="4013878876486655892">"Bonisa njalo"</string>
+ <string name="screen_compat_mode_hint" msgid="2953716574198046484">"Nika lokhu amandla futhi ngezilungiselelo &gt; izinhlelo zokusebenza &gt; Phatha izinhlelo zokusebenza."</string>
<string name="smv_application" msgid="295583804361236288">"Inqubo <xliff:g id="APPLICATION">%1$s</xliff:g> (yohlelo lokusebenza <xliff:g id="PROCESS">%2$s</xliff:g>) iphule inqubomgomo oziphoqelela yona Yemodi Ebukhali."</string>
<string name="smv_process" msgid="5120397012047462446">"Inqubo <xliff:g id="PROCESS">%1$s</xliff:g> yephule inqubomgomo yokuziphoqelela Yemodi Ebukhali."</string>
<string name="android_upgrading_title" msgid="378740715658358071">"I-Android ifaka ezakamuva..."</string>
@@ -1194,35 +915,26 @@
<string name="old_app_description" msgid="942967900237208466">"Ungaqalisi uhlelo lokusebenza olusha."</string>
<string name="new_app_action" msgid="5472756926945440706">"Qala <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="6830398339826789493">"Misa uhlelo lokusebenza lakudala ngaphadle kokugcina."</string>
- <!-- no translation found for sendText (5132506121645618310) -->
- <skip />
- <!-- no translation found for volume_ringtone (6885421406845734650) -->
- <skip />
+ <string name="sendText" msgid="5132506121645618310">"Khetha isenzo sombhalo"</string>
+ <string name="volume_ringtone" msgid="6885421406845734650">"Ivolumu yesishayeli"</string>
<string name="volume_music" msgid="5421651157138628171">"Ivolumu yemidiya"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Idlala nge-Bluetooth"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="6158339745293431194">"Iringithoni ethulile ikhethiwe"</string>
- <!-- no translation found for volume_call (3941680041282788711) -->
- <skip />
+ <string name="volume_call" msgid="3941680041282788711">"Ivolumu yocingo olungenayo"</string>
<string name="volume_bluetooth_call" msgid="2002891926351151534">"Ivolumu ye-Bluetooth maphakathi nekholi"</string>
- <!-- no translation found for volume_alarm (1985191616042689100) -->
- <skip />
+ <string name="volume_alarm" msgid="1985191616042689100">"Ivolumu ye-alamu"</string>
<string name="volume_notification" msgid="2422265656744276715">"Ivolumu yesaziso"</string>
- <!-- no translation found for volume_unknown (1400219669770445902) -->
- <skip />
+ <string name="volume_unknown" msgid="1400219669770445902">"Ivolumu"</string>
<string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Ivolumu ye-Bluetooth"</string>
<string name="volume_icon_description_ringer" msgid="3326003847006162496">"Ivolumu yethoni yokukhala"</string>
<string name="volume_icon_description_incall" msgid="8890073218154543397">"Ivolumi yocingo"</string>
<string name="volume_icon_description_media" msgid="4217311719665194215">"Ivolumu yemidiya"</string>
<string name="volume_icon_description_notification" msgid="7044986546477282274">"Ivolumu yesaziso"</string>
- <!-- no translation found for ringtone_default (3789758980357696936) -->
- <skip />
- <!-- no translation found for ringtone_default_with_actual (8129563480895990372) -->
- <skip />
- <!-- no translation found for ringtone_silent (4440324407807468713) -->
- <skip />
+ <string name="ringtone_default" msgid="3789758980357696936">"Iringithoni emisiwe"</string>
+ <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Iringithoni ezenzakalelayo <xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>"</string>
+ <string name="ringtone_silent" msgid="4440324407807468713">"Thulile"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Amaringithoni"</string>
- <!-- no translation found for ringtone_unknown (5477919988701784788) -->
- <skip />
+ <string name="ringtone_unknown" msgid="5477919988701784788">"Iringithoni engaziwa"</string>
<plurals name="wifi_available">
<item quantity="one" msgid="6654123987418168693">"Inethiwekhi ye-Wi-Fi iyatholakala"</item>
<item quantity="other" msgid="4192424489168397386">"Amanethiwekhi e-Wi-Fi ayatholakala"</item>
@@ -1233,64 +945,42 @@
</plurals>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ayikwazanga ukuxhuma kwi-Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" 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 />
+ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"I-WiFi Eqondile"</string>
+ <string name="wifi_p2p_turnon_message" msgid="2804722042556269129">"Qala ukusebenza kwe-WiFi Okuqondile. Lokhu kuzocima ikhasimende le-WiFi/Ukusebenza okwe-hotspot"</string>
<string name="wifi_p2p_failed_message" msgid="1820097493844848281">"Yehlulekile ukuqala i-Wi-Fi Ngqo"</string>
- <!-- no translation found for wifi_p2p_pbc_go_negotiation_request_message (3170321684621420428) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_go_negotiation_request_message (5177412094633377308) -->
- <skip />
- <!-- no translation found for wifi_p2p_pin_display_message (2834049169114922902) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_title (2068321881673734886) -->
- <skip />
- <!-- no translation found for wifi_p2p_enabled_notification_message (1638949953993894335) -->
- <skip />
+ <string name="wifi_p2p_pbc_go_negotiation_request_message" msgid="3170321684621420428">"Isicelo sesethaphu yoxhumano se-Wi-Fi Eqondile <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Cindezela KULUNGILE ukuze uvumele"</string>
+ <string name="wifi_p2p_pin_go_negotiation_request_message" msgid="5177412094633377308">"Isethaphu yoheloxhumano oluqondile lwe-WiFi lwesicelo kusuka ku <xliff:g id="P2P_DEVICE_ADDRESS">%1$s</xliff:g>. Faka i-pin ukuze uqhubeke"</string>
+ <string name="wifi_p2p_pin_display_message" msgid="2834049169114922902">"i-pin ye-WPS <xliff:g id="P2P_WPS_PIN">%1$s</xliff:g> idinga ukufakiwa kudivayisi ye-peer <xliff:g id="P2P_CLIENT_ADDRESS">%2$s</xliff:g> ukuze isethaphu yohleloxhumano iqhubeke"</string>
+ <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"I-Wi-Fi Direct ivulekile"</string>
+ <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Thinta ze uthole izisetho"</string>
<string name="select_character" msgid="3365550120617701745">"Faka uhlamvu"</string>
- <!-- no translation found for sms_control_default_app_name (7630529934366549163) -->
- <skip />
- <!-- no translation found for sms_control_title (7296612781128917719) -->
- <skip />
+ <string name="sms_control_default_app_name" msgid="7630529934366549163">"Uhlelo lokusebenza olungaziwa"</string>
+ <string name="sms_control_title" msgid="7296612781128917719">"Ithumela imiyalezo ye-SMS"</string>
<string name="sms_control_message" msgid="1289331457999236205">"Inani eliphezulu lwama-SMS liyathunyelwa. Khetha \"OK\" ukuqhubeka, noma \"Khansela\" ukumisa ukuthumela."</string>
- <!-- no translation found for sms_control_yes (2532062172402615953) -->
- <skip />
- <!-- no translation found for sms_control_no (1715320703137199869) -->
- <skip />
- <!-- no translation found for sim_removed_title (6227712319223226185) -->
- <skip />
+ <string name="sms_control_yes" msgid="2532062172402615953">"KULUNGILE"</string>
+ <string name="sms_control_no" msgid="1715320703137199869">"Khansela"</string>
+ <string name="sim_removed_title" msgid="6227712319223226185">"Ikhadi le-SIM likhishiwe"</string>
<string name="sim_removed_message" msgid="2333164559970958645">"Uhleloxhumano lweselula aluzutholakala kuwena kuze kube uqala kabusha ufake i-SIM card efanele."</string>
- <!-- no translation found for sim_done_button (827949989369963775) -->
- <skip />
- <!-- no translation found for sim_added_title (3719670512889674693) -->
- <skip />
- <!-- no translation found for sim_added_message (1209265974048554242) -->
- <skip />
- <!-- no translation found for sim_restart_button (4722407842815232347) -->
- <skip />
+ <string name="sim_done_button" msgid="827949989369963775">"Kwenziwe"</string>
+ <string name="sim_added_title" msgid="3719670512889674693">"Ikhadi le-SIM lengeziwe"</string>
+ <string name="sim_added_message" msgid="1209265974048554242">"Kufanele uqalise kabusha idivaysi yakho ukuze ungene kuhleloxhumano yeselula."</string>
+ <string name="sim_restart_button" msgid="4722407842815232347">"Qala phansi"</string>
<string name="time_picker_dialog_title" msgid="8349362623068819295">"Hlela isikhathi"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"Setha idethi"</string>
- <!-- no translation found for date_time_set (5777075614321087758) -->
- <skip />
- <!-- no translation found for default_permission_group (2690160991405646128) -->
- <skip />
- <!-- no translation found for no_permissions (7283357728219338112) -->
- <skip />
+ <string name="date_time_set" msgid="5777075614321087758">"Hlela"</string>
+ <string name="default_permission_group" msgid="2690160991405646128">"Okuzenzakalelayo"</string>
+ <string name="no_permissions" msgid="7283357728219338112">"Ayikho imvume edingekayo"</string>
<string name="perms_hide" msgid="7283915391320676226"><b>"Fihla "</b></string>
<string name="perms_show_all" msgid="2671791163933091180"><b>"Bonisa konke"</b></string>
<string name="usb_storage_activity_title" msgid="2399289999608900443">"Isitoreji Sokukhulu se-USB"</string>
- <!-- no translation found for usb_storage_title (5901459041398751495) -->
- <skip />
+ <string name="usb_storage_title" msgid="5901459041398751495">"I-USB ixhunyiwe"</string>
<string name="usb_storage_message" product="nosdcard" msgid="6631094834151575841">"Uxhumeke kwikhompyutha yakho nge-USB. Thinta inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nesitoreji se-Android USB yakho."</string>
<string name="usb_storage_message" product="default" msgid="4510858346516069238">"Uxhume kwikhompyutha yakho nge-USB. Thinta inkinobho engenzansi uma ufuna ukukopisha amafayela phakathi kwekhompyutha yakho nekhadi lakho le-SD."</string>
<string name="usb_storage_button_mount" msgid="1052259930369508235">"Vula isitoreji se-USB"</string>
<string name="usb_storage_error_message" product="nosdcard" msgid="3276413764430468454">"Kunenkinga yokusebenzisa ikhadi lakho le-SD njengesitoreji se-USB."</string>
<string name="usb_storage_error_message" product="default" msgid="120810397713773275">"Kunenkinga yokusebenzisa ikhadi lakho le-SD njengesitoreji se-USB."</string>
- <!-- no translation found for usb_storage_notification_title (8175892554757216525) -->
- <skip />
- <!-- no translation found for usb_storage_notification_message (7380082404288219341) -->
- <skip />
+ <string name="usb_storage_notification_title" msgid="8175892554757216525">"I-USB ixhunyiwe"</string>
+ <string name="usb_storage_notification_message" msgid="7380082404288219341">"Khetha ukukopisha amafayela kuya/kusuka ekhompyutheni yakho."</string>
<string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Vala isitoreji se-USB"</string>
<string name="usb_storage_stop_notification_message" msgid="2591813490269841539">"Khetha ukuvala isitoreji se-USB."</string>
<string name="usb_storage_stop_title" msgid="660129851708775853">"Isitoreji se-USB siyasebenza"</string>
@@ -1302,16 +992,11 @@
<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="7323658469626514207">"Ukusebenza kwe-USB kwehlulekile"</string>
<string name="dlg_ok" msgid="7376953167039865701">"KULUNGILE"</string>
- <!-- no translation found for usb_mtp_notification_title (3699913097391550394) -->
- <skip />
- <!-- no translation found for usb_ptp_notification_title (1960817192216064833) -->
- <skip />
- <!-- no translation found for usb_cd_installer_notification_title (6774712827892090754) -->
- <skip />
- <!-- no translation found for usb_accessory_notification_title (7848236974087653666) -->
- <skip />
- <!-- no translation found for usb_notification_message (4447869605109736382) -->
- <skip />
+ <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Ixhunyiwe njengedivayisi yemidiya"</string>
+ <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Ixhunywe njengekhamera"</string>
+ <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ixhunywe njengesifaki"</string>
+ <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ixhunywe ku-accessory ye-USB"</string>
+ <string name="usb_notification_message" msgid="4447869605109736382">"Cindezela ukuze ubone ezinye izinketho ze-USB"</string>
<string name="extmedia_format_title" product="nosdcard" msgid="7980995592595097841">"Fometha isitoreji se-USB"</string>
<string name="extmedia_format_title" product="default" msgid="8663247929551095854">"Fometha ikhadi le=SD"</string>
<string name="extmedia_format_message" product="nosdcard" msgid="8296908079722897772">"Fometha isitoreji se-USB, usule wonke amafayela agcinwe lapho? Isinyathelo asikwazi ukuguqulwa?"</string>
@@ -1320,8 +1005,7 @@
<string name="adb_active_notification_title" msgid="6729044778949189918">"Ukulungisa iphutha le-USB kuxhunyiwe"</string>
<string name="adb_active_notification_message" msgid="8470296818270110396">"Khetha ukuvimbela ukulungisa iphutha le-USB."</string>
<string name="select_input_method" msgid="6865512749462072765">"Khetha indlela yokufaka"</string>
- <!-- no translation found for configure_input_methods (6324843080254191535) -->
- <skip />
+ <string name="configure_input_methods" msgid="6324843080254191535">"Misa izindlela zokufakwayo"</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>"abahlanganyeli"</u></string>
@@ -1376,14 +1060,10 @@
<string name="accessibility_binding_label" msgid="4148120742096474641">"Ukufinyeleleka"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Iphephadonga"</string>
<string name="chooser_wallpaper" msgid="7873476199295190279">"Shintsha iphephadonga"</string>
- <!-- no translation found for vpn_title (8219003246858087489) -->
- <skip />
- <!-- no translation found for vpn_title_long (6400714798049252294) -->
- <skip />
- <!-- no translation found for vpn_text (1610714069627824309) -->
- <skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
- <skip />
+ <string name="vpn_title" msgid="8219003246858087489">"i-VPN ivuselelwe"</string>
+ <string name="vpn_title_long" msgid="6400714798049252294">"i-VPN ivuswe ngu <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="vpn_text" msgid="1610714069627824309">"Thepha ukuphatha uhleloxhumano."</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"Ixhume ku-<xliff:g id="SESSION">%s</xliff:g>. Thepha ukuphatha uhleloxhumano."</string>
<string name="upload_file" msgid="2897957172366730416">"Khetha ifayela"</string>
<string name="no_file_chosen" msgid="6363648562170759465">"Ayikho ifayela ekhethiwe"</string>
<string name="reset" msgid="2448168080964209908">"Setha kabusha"</string>
@@ -1432,12 +1112,15 @@
<string name="sync_really_delete" msgid="8933566316059338692">"Susa izintwana."</string>
<string name="sync_undo_deletes" msgid="8610996708225006328">"Guqula okususiwe."</string>
<string name="sync_do_nothing" msgid="8717589462945226869">"Ungenzi lutho okwamanje."</string>
- <!-- no translation found for choose_account_label (4191313562041125787) -->
+ <string name="choose_account_label" msgid="4191313562041125787">"Khetha i-akhawunti"</string>
+ <!-- no translation found for add_account_label (2935267344849993553) -->
<skip />
- <!-- no translation found for number_picker_increment_button (4830170763103463443) -->
+ <!-- no translation found for choose_account_text (6891230675141555481) -->
<skip />
- <!-- no translation found for number_picker_decrement_button (2576606679160067262) -->
+ <!-- no translation found for add_account_button_label (3611982894853435874) -->
<skip />
+ <string name="number_picker_increment_button" msgid="4830170763103463443">"Nciphisa"</string>
+ <string name="number_picker_decrement_button" msgid="2576606679160067262">"i-Descrement"</string>
<string name="number_picker_increment_scroll_mode" msgid="1343063395404990189">"<xliff:g id="VALUE">%s</xliff:g> chofoza bese ucindezela."</string>
<string name="number_picker_increment_scroll_action" msgid="4628981789985093179">"Shishilizisa kwenyuke kuye ekwenyusweni kwehle kuye ekwehlisweni."</string>
<string name="time_picker_increment_minute_button" msgid="2843066823236250329">"Umzuzu wokwenyusa."</string>
@@ -1477,30 +1160,21 @@
<string name="description_target_silent" msgid="893551287746522182">"Thulile"</string>
<string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string>
<string name="keyboard_headset_required_to_hear_password" msgid="4407722573911224960">"Izinkinobho. I-Headset edingeka ukuze kuzwakale izinkinobho ngesikhathi uthayipha i-password."</string>
- <!-- no translation found for action_bar_home_description (5293600496601490216) -->
- <skip />
- <!-- no translation found for action_bar_up_description (2237496562952152589) -->
- <skip />
- <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
- <skip />
- <!-- no translation found for storage_internal (7556050805474115618) -->
- <skip />
- <!-- no translation found for storage_sd_card (8921771478629812343) -->
- <skip />
- <!-- no translation found for storage_usb (3017954059538517278) -->
- <skip />
- <!-- no translation found for extract_edit_menu_button (302060189057163906) -->
- <skip />
- <!-- no translation found for data_usage_warning_title (1955638862122232342) -->
- <skip />
- <!-- no translation found for data_usage_warning_body (3354394590936526648) -->
- <skip />
- <!-- no translation found for data_usage_3g_limit_title (7093334419518706686) -->
- <skip />
- <!-- no translation found for data_usage_4g_limit_title (7636489436819470761) -->
- <skip />
- <!-- no translation found for data_usage_mobile_limit_title (7869402519391631884) -->
- <skip />
+ <string name="action_bar_home_description" msgid="5293600496601490216">"Zulazulela ekhaya"</string>
+ <string name="action_bar_up_description" msgid="2237496562952152589">"Zulazulela phezulu"</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">"Izinketho ezingaphezulu"</string>
+ <string name="storage_internal" msgid="7556050805474115618">"Isitoreji sangaphakathi"</string>
+ <string name="storage_sd_card" msgid="8921771478629812343">"Ikhadi le-SD"</string>
+ <string name="storage_usb" msgid="3017954059538517278">"Isitoreji se-USB"</string>
+ <string name="extract_edit_menu_button" msgid="302060189057163906">"Hlela..."</string>
+ <string name="data_usage_warning_title" msgid="1955638862122232342">"Isexwayiso sokusetshenziswa kwedatha"</string>
+ <!-- unknown placeholder SIZE in data_usage_warning_body -->
+ <skip />
+ <!-- no translation found for data_usage_warning_body (7217480745540055170) -->
+ <skip />
+ <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Idatha ye-2G-3G ikhubasekisiwe"</string>
+ <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Idatha ye-4G ikhubazekisiwe"</string>
+ <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Idatha yeselula ikhubazekile"</string>
<string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Umkhawulo wemininingwane ye-Wi-Fi ukhubaziwe"</string>
<string name="data_usage_limit_body" msgid="4313857592916426843">"Cindezela ukuze isebenze"</string>
<string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"umkhawulo wedatha ye-2G-3G ufinyelelwe"</string>
@@ -1510,41 +1184,23 @@
<string name="data_usage_limit_snoozed_body" msgid="2932736326652880660">"<xliff:g id="SIZE">%s</xliff:g> ngaphezu komkhawulo ocacisiwe"</string>
<string name="data_usage_restricted_title" msgid="5965157361036321914">"Imininingo egciniwe ivinjelwe"</string>
<string name="data_usage_restricted_body" msgid="5087354814839059798">"Cindezela ukuze ususe izivimbelo"</string>
- <!-- no translation found for ssl_certificate (6510040486049237639) -->
- <skip />
- <!-- no translation found for ssl_certificate_is_valid (6825263250774569373) -->
- <skip />
- <!-- no translation found for issued_to (454239480274921032) -->
- <skip />
- <!-- no translation found for common_name (2233209299434172646) -->
- <skip />
- <!-- no translation found for org_name (6973561190762085236) -->
- <skip />
- <!-- no translation found for org_unit (7265981890422070383) -->
- <skip />
- <!-- no translation found for issued_by (2647584988057481566) -->
- <skip />
- <!-- no translation found for validity_period (8818886137545983110) -->
- <skip />
- <!-- no translation found for issued_on (5895017404361397232) -->
- <skip />
- <!-- no translation found for expires_on (3676242949915959821) -->
- <skip />
- <!-- no translation found for serial_number (758814067660862493) -->
- <skip />
- <!-- no translation found for fingerprints (4516019619850763049) -->
- <skip />
- <!-- no translation found for sha256_fingerprint (4391271286477279263) -->
- <skip />
- <!-- no translation found for sha1_fingerprint (7930330235269404581) -->
- <skip />
- <!-- no translation found for activity_chooser_view_see_all (180268188117163072) -->
- <skip />
- <!-- no translation found for activity_chooser_view_dialog_title_default (3325054276356556835) -->
- <skip />
- <!-- no translation found for share_action_provider_share_with (1791316789651185229) -->
- <skip />
- <!-- no translation found for status_bar_device_locked (3092703448690669768) -->
- <skip />
+ <string name="ssl_certificate" msgid="6510040486049237639">"Isitifiketi sokuvikeleka"</string>
+ <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Lesi sitifiketi silungile."</string>
+ <string name="issued_to" msgid="454239480274921032">"Ikhishelwe u:"</string>
+ <string name="common_name" msgid="2233209299434172646">"Igama elijwayelekile:"</string>
+ <string name="org_name" msgid="6973561190762085236">"Inhlangano:"</string>
+ <string name="org_unit" msgid="7265981890422070383">"Iyunithi yenhlangano:"</string>
+ <string name="issued_by" msgid="2647584988057481566">"Ikhishwe ngu:"</string>
+ <string name="validity_period" msgid="8818886137545983110">"Ukuhlola ngokuqinisekisa:"</string>
+ <string name="issued_on" msgid="5895017404361397232">"Ikhishwe ngezi:"</string>
+ <string name="expires_on" msgid="3676242949915959821">"Iphelelwa yisikhathi ngezi:"</string>
+ <string name="serial_number" msgid="758814067660862493">"Inombolo ye-serial:"</string>
+ <string name="fingerprints" msgid="4516019619850763049">"Izigxivizo zeminwe:"</string>
+ <string name="sha256_fingerprint" msgid="4391271286477279263">"i-SHA-256 Izigxivizo zeminwe"</string>
+ <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 Izigxivizo zeminwe"</string>
+ <string name="activity_chooser_view_see_all" msgid="180268188117163072">"Buka konke..."</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="3325054276356556835">"Khetha umsebenzi"</string>
+ <string name="share_action_provider_share_with" msgid="1791316789651185229">"Yabelana no..."</string>
+ <string name="status_bar_device_locked" msgid="3092703448690669768">"Idivayisi ivaliwe."</string>
<string name="list_delimeter" msgid="3975117572185494152">", "</string>
</resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 847afa051440..727c6ea36d58 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -710,11 +710,12 @@
<enum name="preferExternal" value="2" />
</attr>
- <!-- Extra options for an activity's UI. If specified on the application
+ <!-- Extra options for an activity's UI. Applies to either the {@code &lt;activity&gt;} or
+ {@code &lt;application&gt;} tag. If specified on the {@code &lt;application&gt;}
tag these will be considered defaults for all activities in the
application. -->
<attr name="uiOptions">
- <!-- No extra UI options. -->
+ <!-- No extra UI options. This is the default. -->
<flag name="none" value="0" />
<!-- Split the options menu into a separate bar at the bottom of
the screen when severely constrained for horizontal space.
@@ -1561,8 +1562,21 @@
<enum name="xhdpi" value="320" />
</attr>
</declare-styleable>
-
-
+
+ <!-- The attribute that holds a Base64-encoded public key. -->
+ <attr name="publicKey" format="string" />
+
+ <!-- Attributes relating to a package verifier -->
+ <declare-styleable name="AndroidManifestPackageVerifier" parent="AndroidManifest">
+ <!-- Specifies the Java-style package name that defines this
+ package verifier. -->
+ <attr name="name" />
+
+ <!-- The Base64 encoded public key of the package verifier's
+ signature. -->
+ <attr name="publicKey" />
+ </declare-styleable>
+
<!-- Declaration of an {@link android.content.Intent} object in XML. May
also include zero or more {@link #IntentCategory <category> and
{@link #Extra <extra>} tags. -->
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index ddb99426c56e..f0c6d09acc0c 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -112,6 +112,9 @@
<color name="lockscreen_clock_am_pm">#ff9a9a9a</color>
<color name="lockscreen_owner_info">#ff9a9a9a</color>
+ <!-- FaceLock -->
+ <color name="facelock_color_background">#000000</color>
+
<!-- For holo theme -->
<drawable name="screen_background_holo_light">#fff3f3f3</drawable>
<drawable name="screen_background_holo_dark">#ff000000</drawable>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 1e5358e20dcb..ae39760a2a01 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -138,6 +138,18 @@
<item>"0,1"</item>
</string-array>
+ <!-- Set of NetworkInfo.getType() that reflect data usage. -->
+ <integer-array translatable="false" name="config_data_usage_network_types">
+ <item>0</item> <!-- TYPE_MOBILE -->
+ <item>2</item> <!-- TYPE_MOBILE_MMS -->
+ <item>3</item> <!-- TYPE_MOBILE_SUPL -->
+ <item>4</item> <!-- TYPE_MOBILE_DUN -->
+ <item>5</item> <!-- TYPE_MOBILE_HIPRI -->
+ <item>10</item> <!-- TYPE_MOBILE_FOTA -->
+ <item>11</item> <!-- TYPE_MOBILE_IMS -->
+ <item>12</item> <!-- TYPE_MOBILE_CBS -->
+ </integer-array>
+
<!-- The maximum duration (in milliseconds) we expect a network transition to take -->
<integer name="config_networkTransitionTimeout">60000</integer>
@@ -231,7 +243,7 @@
<!-- If true, the screen can be rotated via the accelerometer in all 4
rotations as the default behavior. -->
- <bool name="config_allowAllRotations">true</bool>
+ <bool name="config_allowAllRotations">false</bool>
<!-- If true, the direction rotation is applied to get to an application's requested
orientation is reversed. Normally, the model is that landscape is
@@ -400,9 +412,9 @@
<!-- Diable lockscreen rotation by default -->
<bool name="config_enableLockScreenRotation">false</bool>
- <!-- Diable puk unlockscreen by default.
+ <!-- Enable puk unlockscreen by default.
If unlock screen is disabled, the puk should be unlocked through Emergency Dialer -->
- <bool name="config_enable_puk_unlock_screen">false</bool>
+ <bool name="config_enable_puk_unlock_screen">true</bool>
<!-- Control the behavior when the user long presses the home button.
0 - Nothing
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index f1fc42c60db9..1cd39117c450 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -158,7 +158,10 @@
<dimen name="keyguard_lockscreen_status_line_font_size">14sp</dimen>
<!-- Size of right margin on Unsecure unlock LockScreen -->
- <dimen name="keyguard_lockscreen_status_line_font_right_margin">45dip</dimen>
+ <dimen name="keyguard_lockscreen_status_line_font_right_margin">42dip</dimen>
+
+ <!-- Size of top margin on Clock font to edge on unlock LockScreen -->
+ <dimen name="keyguard_lockscreen_status_line_clockfont_top_margin">24dip</dimen>
<!-- Minimum popup width for selecting an activity in ActivityChooserDialog/ActivityChooserView. -->
<dimen name="activity_chooser_popup_min_width">200dip</dimen>
@@ -178,4 +181,6 @@
<!-- Default width for a textview error popup -->
<dimen name="textview_error_popup_default_width">240dip</dimen>
+ <!-- Volume panel y offset -->
+ <dimen name="volume_panel_top">80dp</dimen>
</resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index ba8be2e1ddfd..97d5afe8cfdf 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1702,305 +1702,277 @@
<public type="style" name="TextAppearance.Holo.DialogWindowTitle" id="0x01030117" />
<!-- ===============================================================
- Resources added in version 14 of the platform (Ice Cream Sandwich)
+ Resources added in version 14 of the platform (Ice Cream Sandwich / 4.0)
=============================================================== -->
<eat-comment />
- <public type="attr" name="state_hovered" />
- <public type="attr" name="state_drag_can_accept" />
- <public type="attr" name="state_drag_hovered" />
- <public type="attr" name="stopWithTask" />
-
- <public type="attr" name="switchTextOn" />
- <public type="attr" name="switchTextOff" />
- <public type="attr" name="switchPreferenceStyle" />
- <public type="attr" name="switchTextAppearance" />
- <public type="attr" name="track" />
- <public type="attr" name="switchMinWidth" />
- <public type="attr" name="switchPadding" />
- <public type="attr" name="thumbTextPadding" />
-
- <public type="attr" name="textSuggestionsWindowStyle" />
- <public type="attr" name="textEditSuggestionItemLayout" />
-
- <public type="attr" name="rowCount" />
- <public type="attr" name="rowOrderPreserved" />
- <public type="attr" name="columnCount" />
- <public type="attr" name="columnOrderPreserved" />
- <public type="attr" name="useDefaultMargins" />
- <public type="attr" name="alignmentMode" />
-
- <public type="attr" name="layout_row" />
- <public type="attr" name="layout_rowSpan" />
-
- <public type="attr" name="layout_columnSpan" />
-
- <public type="attr" name="actionModeSelectAllDrawable" />
-
- <public type="attr" name="isAuxiliary" />
-
- <public type="attr" name="accessibilityEventTypes" />
- <public type="attr" name="packageNames" />
- <public type="attr" name="accessibilityFeedbackType" />
- <public type="attr" name="notificationTimeout" />
- <public type="attr" name="accessibilityFlags" />
- <public type="attr" name="canRetrieveWindowContent" />
-
- <public type="attr" name="listPreferredItemHeightLarge" />
- <public type="attr" name="listPreferredItemHeightSmall" />
-
- <public type="attr" name="actionBarSplitStyle" />
-
- <public type="attr" name="actionProviderClass" />
-
- <public type="attr" name="backgroundStacked" />
- <public type="attr" name="backgroundSplit" />
-
- <public type="attr" name="textAllCaps" />
-
- <public type="attr" name="colorPressedHighlight" />
- <public type="attr" name="colorLongPressedHighlight" />
- <public type="attr" name="colorFocusedHighlight" />
- <public type="attr" name="colorActivatedHighlight" />
- <public type="attr" name="colorMultiSelectHighlight" />
-
- <public type="attr" name="drawableStart" />
- <public type="attr" name="drawableEnd" />
-
- <public type="attr" name="actionModeStyle" />
-
- <public type="attr" name="minResizeWidth" />
- <public type="attr" name="minResizeHeight" />
-
- <public type="attr" name="actionBarWidgetTheme" />
- <public type="attr" name="uiOptions" />
-
- <public type="attr" name="subtypeLocale" />
- <public type="attr" name="subtypeExtraValue" />
-
- <public type="attr" name="actionBarDivider" />
- <public type="attr" name="actionBarItemBackground" />
- <public type="attr" name="actionModeSplitBackground" />
-
- <public type="attr" name="textAppearanceListItem" />
- <public type="attr" name="textAppearanceListItemSmall" />
-
- <public type="attr" name="targetDescriptions" />
- <public type="attr" name="directionDescriptions" />
-
- <public type="attr" name="overridesImplicitlyEnabledSubtype" />
-
- <public type="attr" name="listPreferredItemPaddingLeft" />
- <public type="attr" name="listPreferredItemPaddingRight" />
-
- <public type="attr" name="requiresFadingEdge" />
-
- <public type="style" name="TextAppearance.SuggestionHighlight" />
-
- <public type="style" name="Theme.Holo.Light.DarkActionBar" />
- <public type="style" name="Widget.Holo.Button.Borderless.Small" />
- <public type="style" name="Widget.Holo.Light.Button.Borderless.Small" />
- <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Title.Inverse" />
- <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Title.Inverse" />
- <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Menu" />
- <public type="style" name="Widget.Holo.ActionBar.Solid" />
- <public type="style" name="Widget.Holo.Light.ActionBar.Solid" />
- <public type="style" name="Widget.Holo.Light.ActionBar.Solid.Inverse" />
- <public type="style" name="Widget.Holo.Light.ActionBar.TabBar.Inverse" />
- <public type="style" name="Widget.Holo.Light.ActionBar.TabView.Inverse" />
- <public type="style" name="Widget.Holo.Light.ActionBar.TabText.Inverse" />
- <public type="style" name="Widget.Holo.Light.ActionMode.Inverse" />
-
- <public type="style" name="Theme.DeviceDefault" />
- <public type="style" name="Theme.DeviceDefault.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.NoActionBar.Fullscreen" />
- <public type="style" name="Theme.DeviceDefault.Light" />
- <public type="style" name="Theme.DeviceDefault.Light.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" />
- <public type="style" name="Theme.DeviceDefault.Dialog" />
- <public type="style" name="Theme.DeviceDefault.Dialog.MinWidth" />
- <public type="style" name="Theme.DeviceDefault.Dialog.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" />
- <public type="style" name="Theme.DeviceDefault.Light.Dialog" />
- <public type="style" name="Theme.DeviceDefault.Light.Dialog.MinWidth" />
- <public type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" />
- <public type="style" name="Theme.DeviceDefault.DialogWhenLarge" />
- <public type="style" name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge" />
- <public type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" />
- <public type="style" name="Theme.DeviceDefault.Panel" />
- <public type="style" name="Theme.DeviceDefault.Light.Panel" />
- <public type="style" name="Theme.DeviceDefault.Wallpaper" />
- <public type="style" name="Theme.DeviceDefault.Wallpaper.NoTitleBar" />
- <public type="style" name="Theme.DeviceDefault.InputMethod" />
- <public type="style" name="Theme.DeviceDefault.Light.DarkActionBar" />
-
- <public type="style" name="Widget.DeviceDefault" />
- <public type="style" name="Widget.DeviceDefault.Button" />
- <public type="style" name="Widget.DeviceDefault.Button.Small" />
- <public type="style" name="Widget.DeviceDefault.Button.Inset" />
- <public type="style" name="Widget.DeviceDefault.Button.Toggle" />
- <public type="style" name="Widget.DeviceDefault.Button.Borderless.Small" />
- <public type="style" name="Widget.DeviceDefault.TextView" />
- <public type="style" name="Widget.DeviceDefault.AutoCompleteTextView" />
- <public type="style" name="Widget.DeviceDefault.CompoundButton.CheckBox" />
- <public type="style" name="Widget.DeviceDefault.ListView.DropDown" />
- <public type="style" name="Widget.DeviceDefault.EditText" />
- <public type="style" name="Widget.DeviceDefault.ExpandableListView" />
- <public type="style" name="Widget.DeviceDefault.GridView" />
- <public type="style" name="Widget.DeviceDefault.ImageButton" />
- <public type="style" name="Widget.DeviceDefault.ListView" />
- <public type="style" name="Widget.DeviceDefault.PopupWindow" />
- <public type="style" name="Widget.DeviceDefault.ProgressBar" />
- <public type="style" name="Widget.DeviceDefault.ProgressBar.Horizontal" />
- <public type="style" name="Widget.DeviceDefault.ProgressBar.Small" />
- <public type="style" name="Widget.DeviceDefault.ProgressBar.Small.Title" />
- <public type="style" name="Widget.DeviceDefault.ProgressBar.Large" />
- <public type="style" name="Widget.DeviceDefault.SeekBar" />
- <public type="style" name="Widget.DeviceDefault.RatingBar" />
- <public type="style" name="Widget.DeviceDefault.RatingBar.Indicator" />
- <public type="style" name="Widget.DeviceDefault.RatingBar.Small" />
- <public type="style" name="Widget.DeviceDefault.CompoundButton.RadioButton" />
- <public type="style" name="Widget.DeviceDefault.ScrollView" />
- <public type="style" name="Widget.DeviceDefault.HorizontalScrollView" />
- <public type="style" name="Widget.DeviceDefault.Spinner" />
- <public type="style" name="Widget.DeviceDefault.CompoundButton.Star" />
- <public type="style" name="Widget.DeviceDefault.TabWidget" />
- <public type="style" name="Widget.DeviceDefault.WebTextView" />
- <public type="style" name="Widget.DeviceDefault.WebView" />
- <public type="style" name="Widget.DeviceDefault.DropDownItem" />
- <public type="style" name="Widget.DeviceDefault.DropDownItem.Spinner" />
- <public type="style" name="Widget.DeviceDefault.TextView.SpinnerItem" />
- <public type="style" name="Widget.DeviceDefault.ListPopupWindow" />
- <public type="style" name="Widget.DeviceDefault.PopupMenu" />
- <public type="style" name="Widget.DeviceDefault.ActionButton" />
- <public type="style" name="Widget.DeviceDefault.ActionButton.Overflow" />
- <public type="style" name="Widget.DeviceDefault.ActionButton.TextButton" />
- <public type="style" name="Widget.DeviceDefault.ActionMode" />
- <public type="style" name="Widget.DeviceDefault.ActionButton.CloseMode" />
- <public type="style" name="Widget.DeviceDefault.ActionBar" />
- <public type="style" name="Widget.DeviceDefault.Button.Borderless" />
- <public type="style" name="Widget.DeviceDefault.Tab" />
- <public type="style" name="Widget.DeviceDefault.CalendarView" />
- <public type="style" name="Widget.DeviceDefault.DatePicker" />
- <public type="style" name="Widget.DeviceDefault.ActionBar.TabView" />
- <public type="style" name="Widget.DeviceDefault.ActionBar.TabText" />
- <public type="style" name="Widget.DeviceDefault.ActionBar.TabBar" />
- <public type="style" name="Widget.DeviceDefault.ActionBar.Solid" />
- <public type="style" name="Widget.DeviceDefault.Light" />
- <public type="style" name="Widget.DeviceDefault.Light.Button" />
- <public type="style" name="Widget.DeviceDefault.Light.Button.Small" />
- <public type="style" name="Widget.DeviceDefault.Light.Button.Inset" />
- <public type="style" name="Widget.DeviceDefault.Light.Button.Toggle" />
- <public type="style" name="Widget.DeviceDefault.Light.Button.Borderless.Small" />
- <public type="style" name="Widget.DeviceDefault.Light.TextView" />
- <public type="style" name="Widget.DeviceDefault.Light.AutoCompleteTextView" />
- <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" />
- <public type="style" name="Widget.DeviceDefault.Light.ListView.DropDown" />
- <public type="style" name="Widget.DeviceDefault.Light.EditText" />
- <public type="style" name="Widget.DeviceDefault.Light.ExpandableListView" />
- <public type="style" name="Widget.DeviceDefault.Light.GridView" />
- <public type="style" name="Widget.DeviceDefault.Light.ImageButton" />
- <public type="style" name="Widget.DeviceDefault.Light.ListView" />
- <public type="style" name="Widget.DeviceDefault.Light.PopupWindow" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Large" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.SeekBar" />
- <public type="style" name="Widget.DeviceDefault.Light.RatingBar" />
- <public type="style" name="Widget.DeviceDefault.Light.RatingBar.Indicator" />
- <public type="style" name="Widget.DeviceDefault.Light.RatingBar.Small" />
- <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" />
- <public type="style" name="Widget.DeviceDefault.Light.ScrollView" />
- <public type="style" name="Widget.DeviceDefault.Light.HorizontalScrollView" />
- <public type="style" name="Widget.DeviceDefault.Light.Spinner" />
- <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.Star" />
- <public type="style" name="Widget.DeviceDefault.Light.TabWidget" />
- <public type="style" name="Widget.DeviceDefault.Light.WebTextView" />
- <public type="style" name="Widget.DeviceDefault.Light.WebView" />
- <public type="style" name="Widget.DeviceDefault.Light.DropDownItem" />
- <public type="style" name="Widget.DeviceDefault.Light.DropDownItem.Spinner" />
- <public type="style" name="Widget.DeviceDefault.Light.TextView.SpinnerItem" />
- <public type="style" name="Widget.DeviceDefault.Light.ListPopupWindow" />
- <public type="style" name="Widget.DeviceDefault.Light.PopupMenu" />
- <public type="style" name="Widget.DeviceDefault.Light.Tab" />
- <public type="style" name="Widget.DeviceDefault.Light.CalendarView" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionButton" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionButton.Overflow" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionMode" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionButton.CloseMode" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabView" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabText" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabBar" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.Solid" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.Solid.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabView.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabText.Inverse" />
- <public type="style" name="Widget.DeviceDefault.Light.ActionMode.Inverse" />
-
- <public type="style" name="TextAppearance.DeviceDefault" />
- <public type="style" name="TextAppearance.DeviceDefault.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Large" />
- <public type="style" name="TextAppearance.DeviceDefault.Large.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Medium" />
- <public type="style" name="TextAppearance.DeviceDefault.Medium.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Small" />
- <public type="style" name="TextAppearance.DeviceDefault.Small.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.SearchResult.Title" />
- <public type="style" name="TextAppearance.DeviceDefault.SearchResult.Subtitle" />
- <public type="style" name="TextAppearance.DeviceDefault.WindowTitle" />
- <public type="style" name="TextAppearance.DeviceDefault.DialogWindowTitle" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.Button" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.TabWidget" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.DropDownHint" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.DropDownItem" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.EditText" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" />
- <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" />
-
- <public type="style" name="DeviceDefault.ButtonBar" />
- <public type="style" name="DeviceDefault.ButtonBar.AlertDialog" />
- <public type="style" name="DeviceDefault.SegmentedButton" />
- <public type="style" name="DeviceDefault.Light.ButtonBar" />
- <public type="style" name="DeviceDefault.Light.ButtonBar.AlertDialog" />
- <public type="style" name="DeviceDefault.Light.SegmentedButton" />
-
- <public type="integer" name="status_bar_notification_info_maxnum" />
- <public type="string" name="status_bar_notification_info_overflow" />
-
- <public type="color" name="holo_blue_light" />
- <public type="color" name="holo_blue_dark" />
- <public type="color" name="holo_green_light" />
- <public type="color" name="holo_green_dark" />
- <public type="color" name="holo_red_light" />
- <public type="color" name="holo_red_dark" />
- <public type="color" name="holo_orange_light" />
- <public type="color" name="holo_orange_dark" />
- <public type="color" name="holo_purple" />
- <public type="color" name="holo_blue_bright" />
+ <public type="attr" name="state_hovered" id="0x01010367" />
+ <public type="attr" name="state_drag_can_accept" id="0x01010368" />
+ <public type="attr" name="state_drag_hovered" id="0x01010369" />
+ <public type="attr" name="stopWithTask" id="0x0101036a" />
+ <public type="attr" name="switchTextOn" id="0x0101036b" />
+ <public type="attr" name="switchTextOff" id="0x0101036c" />
+ <public type="attr" name="switchPreferenceStyle" id="0x0101036d" />
+ <public type="attr" name="switchTextAppearance" id="0x0101036e" />
+ <public type="attr" name="track" id="0x0101036f" />
+ <public type="attr" name="switchMinWidth" id="0x01010370" />
+ <public type="attr" name="switchPadding" id="0x01010371" />
+ <public type="attr" name="thumbTextPadding" id="0x01010372" />
+ <public type="attr" name="textSuggestionsWindowStyle" id="0x01010373" />
+ <public type="attr" name="textEditSuggestionItemLayout" id="0x01010374" />
+ <public type="attr" name="rowCount" id="0x01010375" />
+ <public type="attr" name="rowOrderPreserved" id="0x01010376" />
+ <public type="attr" name="columnCount" id="0x01010377" />
+ <public type="attr" name="columnOrderPreserved" id="0x01010378" />
+ <public type="attr" name="useDefaultMargins" id="0x01010379" />
+ <public type="attr" name="alignmentMode" id="0x0101037a" />
+ <public type="attr" name="layout_row" id="0x0101037b" />
+ <public type="attr" name="layout_rowSpan" id="0x0101037c" />
+ <public type="attr" name="layout_columnSpan" id="0x0101037d" />
+ <public type="attr" name="actionModeSelectAllDrawable" id="0x0101037e" />
+ <public type="attr" name="isAuxiliary" id="0x0101037f" />
+ <public type="attr" name="accessibilityEventTypes" id="0x01010380" />
+ <public type="attr" name="packageNames" id="0x01010381" />
+ <public type="attr" name="accessibilityFeedbackType" id="0x01010382" />
+ <public type="attr" name="notificationTimeout" id="0x01010383" />
+ <public type="attr" name="accessibilityFlags" id="0x01010384" />
+ <public type="attr" name="canRetrieveWindowContent" id="0x01010385" />
+ <public type="attr" name="listPreferredItemHeightLarge" id="0x01010386" />
+ <public type="attr" name="listPreferredItemHeightSmall" id="0x01010387" />
+ <public type="attr" name="actionBarSplitStyle" id="0x01010388" />
+ <public type="attr" name="actionProviderClass" id="0x01010389" />
+ <public type="attr" name="backgroundStacked" id="0x0101038a" />
+ <public type="attr" name="backgroundSplit" id="0x0101038b" />
+ <public type="attr" name="textAllCaps" id="0x0101038c" />
+ <public type="attr" name="colorPressedHighlight" id="0x0101038d" />
+ <public type="attr" name="colorLongPressedHighlight" id="0x0101038e" />
+ <public type="attr" name="colorFocusedHighlight" id="0x0101038f" />
+ <public type="attr" name="colorActivatedHighlight" id="0x01010390" />
+ <public type="attr" name="colorMultiSelectHighlight" id="0x01010391" />
+ <public type="attr" name="drawableStart" id="0x01010392" />
+ <public type="attr" name="drawableEnd" id="0x01010393" />
+ <public type="attr" name="actionModeStyle" id="0x01010394" />
+ <public type="attr" name="minResizeWidth" id="0x01010395" />
+ <public type="attr" name="minResizeHeight" id="0x01010396" />
+ <public type="attr" name="actionBarWidgetTheme" id="0x01010397" />
+ <public type="attr" name="uiOptions" id="0x01010398" />
+ <public type="attr" name="subtypeLocale" id="0x01010399" />
+ <public type="attr" name="subtypeExtraValue" id="0x0101039a" />
+ <public type="attr" name="actionBarDivider" id="0x0101039b" />
+ <public type="attr" name="actionBarItemBackground" id="0x0101039c" />
+ <public type="attr" name="actionModeSplitBackground" id="0x0101039d" />
+ <public type="attr" name="textAppearanceListItem" id="0x0101039e" />
+ <public type="attr" name="textAppearanceListItemSmall" id="0x0101039f" />
+ <public type="attr" name="targetDescriptions" id="0x010103a0" />
+ <public type="attr" name="directionDescriptions" id="0x010103a1" />
+ <public type="attr" name="overridesImplicitlyEnabledSubtype" id="0x010103a2" />
+ <public type="attr" name="listPreferredItemPaddingLeft" id="0x010103a3" />
+ <public type="attr" name="listPreferredItemPaddingRight" id="0x010103a4" />
+ <public type="attr" name="requiresFadingEdge" id="0x010103a5" />
+ <public type="attr" name="publicKey" id="0x010103a6" />
+
+ <public type="style" name="TextAppearance.SuggestionHighlight" id="0x01030118" />
+ <public type="style" name="Theme.Holo.Light.DarkActionBar" id="0x01030119" />
+ <public type="style" name="Widget.Holo.Button.Borderless.Small" id="0x0103011a" />
+ <public type="style" name="Widget.Holo.Light.Button.Borderless.Small" id="0x0103011b" />
+ <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Title.Inverse" id="0x0103011c" />
+ <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse" id="0x0103011d" />
+ <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Title.Inverse" id="0x0103011e" />
+ <public type="style" name="TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse" id="0x0103011f" />
+ <public type="style" name="TextAppearance.Holo.Widget.ActionBar.Menu" id="0x01030120" />
+ <public type="style" name="Widget.Holo.ActionBar.Solid" id="0x01030121" />
+ <public type="style" name="Widget.Holo.Light.ActionBar.Solid" id="0x01030122" />
+ <public type="style" name="Widget.Holo.Light.ActionBar.Solid.Inverse" id="0x01030123" />
+ <public type="style" name="Widget.Holo.Light.ActionBar.TabBar.Inverse" id="0x01030124" />
+ <public type="style" name="Widget.Holo.Light.ActionBar.TabView.Inverse" id="0x01030125" />
+ <public type="style" name="Widget.Holo.Light.ActionBar.TabText.Inverse" id="0x01030126" />
+ <public type="style" name="Widget.Holo.Light.ActionMode.Inverse" id="0x01030127" />
+ <public type="style" name="Theme.DeviceDefault" id="0x01030128" />
+ <public type="style" name="Theme.DeviceDefault.NoActionBar" id="0x01030129" />
+ <public type="style" name="Theme.DeviceDefault.NoActionBar.Fullscreen" id="0x0103012a" />
+ <public type="style" name="Theme.DeviceDefault.Light" id="0x0103012b" />
+ <public type="style" name="Theme.DeviceDefault.Light.NoActionBar" id="0x0103012c" />
+ <public type="style" name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" id="0x0103012d" />
+ <public type="style" name="Theme.DeviceDefault.Dialog" id="0x0103012e" />
+ <public type="style" name="Theme.DeviceDefault.Dialog.MinWidth" id="0x0103012f" />
+ <public type="style" name="Theme.DeviceDefault.Dialog.NoActionBar" id="0x01030130" />
+ <public type="style" name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" id="0x01030131" />
+ <public type="style" name="Theme.DeviceDefault.Light.Dialog" id="0x01030132" />
+ <public type="style" name="Theme.DeviceDefault.Light.Dialog.MinWidth" id="0x01030133" />
+ <public type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar" id="0x01030134" />
+ <public type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" id="0x01030135" />
+ <public type="style" name="Theme.DeviceDefault.DialogWhenLarge" id="0x01030136" />
+ <public type="style" name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" id="0x01030137" />
+ <public type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge" id="0x01030138" />
+ <public type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" id="0x01030139" />
+ <public type="style" name="Theme.DeviceDefault.Panel" id="0x0103013a" />
+ <public type="style" name="Theme.DeviceDefault.Light.Panel" id="0x0103013b" />
+ <public type="style" name="Theme.DeviceDefault.Wallpaper" id="0x0103013c" />
+ <public type="style" name="Theme.DeviceDefault.Wallpaper.NoTitleBar" id="0x0103013d" />
+ <public type="style" name="Theme.DeviceDefault.InputMethod" id="0x0103013e" />
+ <public type="style" name="Theme.DeviceDefault.Light.DarkActionBar" id="0x0103013f" />
+ <public type="style" name="Widget.DeviceDefault" id="0x01030140" />
+ <public type="style" name="Widget.DeviceDefault.Button" id="0x01030141" />
+ <public type="style" name="Widget.DeviceDefault.Button.Small" id="0x01030142" />
+ <public type="style" name="Widget.DeviceDefault.Button.Inset" id="0x01030143" />
+ <public type="style" name="Widget.DeviceDefault.Button.Toggle" id="0x01030144" />
+ <public type="style" name="Widget.DeviceDefault.Button.Borderless.Small" id="0x01030145" />
+ <public type="style" name="Widget.DeviceDefault.TextView" id="0x01030146" />
+ <public type="style" name="Widget.DeviceDefault.AutoCompleteTextView" id="0x01030147" />
+ <public type="style" name="Widget.DeviceDefault.CompoundButton.CheckBox" id="0x01030148" />
+ <public type="style" name="Widget.DeviceDefault.ListView.DropDown" id="0x01030149" />
+ <public type="style" name="Widget.DeviceDefault.EditText" id="0x0103014a" />
+ <public type="style" name="Widget.DeviceDefault.ExpandableListView" id="0x0103014b" />
+ <public type="style" name="Widget.DeviceDefault.GridView" id="0x0103014c" />
+ <public type="style" name="Widget.DeviceDefault.ImageButton" id="0x0103014d" />
+ <public type="style" name="Widget.DeviceDefault.ListView" id="0x0103014e" />
+ <public type="style" name="Widget.DeviceDefault.PopupWindow" id="0x0103014f" />
+ <public type="style" name="Widget.DeviceDefault.ProgressBar" id="0x01030150" />
+ <public type="style" name="Widget.DeviceDefault.ProgressBar.Horizontal" id="0x01030151" />
+ <public type="style" name="Widget.DeviceDefault.ProgressBar.Small" id="0x01030152" />
+ <public type="style" name="Widget.DeviceDefault.ProgressBar.Small.Title" id="0x01030153" />
+ <public type="style" name="Widget.DeviceDefault.ProgressBar.Large" id="0x01030154" />
+ <public type="style" name="Widget.DeviceDefault.SeekBar" id="0x01030155" />
+ <public type="style" name="Widget.DeviceDefault.RatingBar" id="0x01030156" />
+ <public type="style" name="Widget.DeviceDefault.RatingBar.Indicator" id="0x01030157" />
+ <public type="style" name="Widget.DeviceDefault.RatingBar.Small" id="0x01030158" />
+ <public type="style" name="Widget.DeviceDefault.CompoundButton.RadioButton" id="0x01030159" />
+ <public type="style" name="Widget.DeviceDefault.ScrollView" id="0x0103015a" />
+ <public type="style" name="Widget.DeviceDefault.HorizontalScrollView" id="0x0103015b" />
+ <public type="style" name="Widget.DeviceDefault.Spinner" id="0x0103015c" />
+ <public type="style" name="Widget.DeviceDefault.CompoundButton.Star" id="0x0103015d" />
+ <public type="style" name="Widget.DeviceDefault.TabWidget" id="0x0103015e" />
+ <public type="style" name="Widget.DeviceDefault.WebTextView" id="0x0103015f" />
+ <public type="style" name="Widget.DeviceDefault.WebView" id="0x01030160" />
+ <public type="style" name="Widget.DeviceDefault.DropDownItem" id="0x01030161" />
+ <public type="style" name="Widget.DeviceDefault.DropDownItem.Spinner" id="0x01030162" />
+ <public type="style" name="Widget.DeviceDefault.TextView.SpinnerItem" id="0x01030163" />
+ <public type="style" name="Widget.DeviceDefault.ListPopupWindow" id="0x01030164" />
+ <public type="style" name="Widget.DeviceDefault.PopupMenu" id="0x01030165" />
+ <public type="style" name="Widget.DeviceDefault.ActionButton" id="0x01030166" />
+ <public type="style" name="Widget.DeviceDefault.ActionButton.Overflow" id="0x01030167" />
+ <public type="style" name="Widget.DeviceDefault.ActionButton.TextButton" id="0x01030168" />
+ <public type="style" name="Widget.DeviceDefault.ActionMode" id="0x01030169" />
+ <public type="style" name="Widget.DeviceDefault.ActionButton.CloseMode" id="0x0103016a" />
+ <public type="style" name="Widget.DeviceDefault.ActionBar" id="0x0103016b" />
+ <public type="style" name="Widget.DeviceDefault.Button.Borderless" id="0x0103016c" />
+ <public type="style" name="Widget.DeviceDefault.Tab" id="0x0103016d" />
+ <public type="style" name="Widget.DeviceDefault.CalendarView" id="0x0103016e" />
+ <public type="style" name="Widget.DeviceDefault.DatePicker" id="0x0103016f" />
+ <public type="style" name="Widget.DeviceDefault.ActionBar.TabView" id="0x01030170" />
+ <public type="style" name="Widget.DeviceDefault.ActionBar.TabText" id="0x01030171" />
+ <public type="style" name="Widget.DeviceDefault.ActionBar.TabBar" id="0x01030172" />
+ <public type="style" name="Widget.DeviceDefault.ActionBar.Solid" id="0x01030173" />
+ <public type="style" name="Widget.DeviceDefault.Light" id="0x01030174" />
+ <public type="style" name="Widget.DeviceDefault.Light.Button" id="0x01030175" />
+ <public type="style" name="Widget.DeviceDefault.Light.Button.Small" id="0x01030176" />
+ <public type="style" name="Widget.DeviceDefault.Light.Button.Inset" id="0x01030177" />
+ <public type="style" name="Widget.DeviceDefault.Light.Button.Toggle" id="0x01030178" />
+ <public type="style" name="Widget.DeviceDefault.Light.Button.Borderless.Small" id="0x01030179" />
+ <public type="style" name="Widget.DeviceDefault.Light.TextView" id="0x0103017a" />
+ <public type="style" name="Widget.DeviceDefault.Light.AutoCompleteTextView" id="0x0103017b" />
+ <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" id="0x0103017c" />
+ <public type="style" name="Widget.DeviceDefault.Light.ListView.DropDown" id="0x0103017d" />
+ <public type="style" name="Widget.DeviceDefault.Light.EditText" id="0x0103017e" />
+ <public type="style" name="Widget.DeviceDefault.Light.ExpandableListView" id="0x0103017f" />
+ <public type="style" name="Widget.DeviceDefault.Light.GridView" id="0x01030180" />
+ <public type="style" name="Widget.DeviceDefault.Light.ImageButton" id="0x01030181" />
+ <public type="style" name="Widget.DeviceDefault.Light.ListView" id="0x01030182" />
+ <public type="style" name="Widget.DeviceDefault.Light.PopupWindow" id="0x01030183" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar" id="0x01030184" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" id="0x01030185" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small" id="0x01030186" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" id="0x01030187" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Large" id="0x01030188" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Inverse" id="0x01030189" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" id="0x0103018a" />
+ <public type="style" name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" id="0x0103018b" />
+ <public type="style" name="Widget.DeviceDefault.Light.SeekBar" id="0x0103018c" />
+ <public type="style" name="Widget.DeviceDefault.Light.RatingBar" id="0x0103018d" />
+ <public type="style" name="Widget.DeviceDefault.Light.RatingBar.Indicator" id="0x0103018e" />
+ <public type="style" name="Widget.DeviceDefault.Light.RatingBar.Small" id="0x0103018f" />
+ <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" id="0x01030190" />
+ <public type="style" name="Widget.DeviceDefault.Light.ScrollView" id="0x01030191" />
+ <public type="style" name="Widget.DeviceDefault.Light.HorizontalScrollView" id="0x01030192" />
+ <public type="style" name="Widget.DeviceDefault.Light.Spinner" id="0x01030193" />
+ <public type="style" name="Widget.DeviceDefault.Light.CompoundButton.Star" id="0x01030194" />
+ <public type="style" name="Widget.DeviceDefault.Light.TabWidget" id="0x01030195" />
+ <public type="style" name="Widget.DeviceDefault.Light.WebTextView" id="0x01030196" />
+ <public type="style" name="Widget.DeviceDefault.Light.WebView" id="0x01030197" />
+ <public type="style" name="Widget.DeviceDefault.Light.DropDownItem" id="0x01030198" />
+ <public type="style" name="Widget.DeviceDefault.Light.DropDownItem.Spinner" id="0x01030199" />
+ <public type="style" name="Widget.DeviceDefault.Light.TextView.SpinnerItem" id="0x0103019a" />
+ <public type="style" name="Widget.DeviceDefault.Light.ListPopupWindow" id="0x0103019b" />
+ <public type="style" name="Widget.DeviceDefault.Light.PopupMenu" id="0x0103019c" />
+ <public type="style" name="Widget.DeviceDefault.Light.Tab" id="0x0103019d" />
+ <public type="style" name="Widget.DeviceDefault.Light.CalendarView" id="0x0103019e" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionButton" id="0x0103019f" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionButton.Overflow" id="0x010301a0" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionMode" id="0x010301a1" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionButton.CloseMode" id="0x010301a2" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar" id="0x010301a3" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabView" id="0x010301a4" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabText" id="0x010301a5" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabBar" id="0x010301a6" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.Solid" id="0x010301a7" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.Solid.Inverse" id="0x010301a8" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse" id="0x010301a9" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabView.Inverse" id="0x010301aa" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionBar.TabText.Inverse" id="0x010301ab" />
+ <public type="style" name="Widget.DeviceDefault.Light.ActionMode.Inverse" id="0x010301ac" />
+ <public type="style" name="TextAppearance.DeviceDefault" id="0x010301ad" />
+ <public type="style" name="TextAppearance.DeviceDefault.Inverse" id="0x010301ae" />
+ <public type="style" name="TextAppearance.DeviceDefault.Large" id="0x010301af" />
+ <public type="style" name="TextAppearance.DeviceDefault.Large.Inverse" id="0x010301b0" />
+ <public type="style" name="TextAppearance.DeviceDefault.Medium" id="0x010301b1" />
+ <public type="style" name="TextAppearance.DeviceDefault.Medium.Inverse" id="0x010301b2" />
+ <public type="style" name="TextAppearance.DeviceDefault.Small" id="0x010301b3" />
+ <public type="style" name="TextAppearance.DeviceDefault.Small.Inverse" id="0x010301b4" />
+ <public type="style" name="TextAppearance.DeviceDefault.SearchResult.Title" id="0x010301b5" />
+ <public type="style" name="TextAppearance.DeviceDefault.SearchResult.Subtitle" id="0x010301b6" />
+ <public type="style" name="TextAppearance.DeviceDefault.WindowTitle" id="0x010301b7" />
+ <public type="style" name="TextAppearance.DeviceDefault.DialogWindowTitle" id="0x010301b8" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget" id="0x010301b9" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.Button" id="0x010301ba" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" id="0x010301bb" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.TabWidget" id="0x010301bc" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView" id="0x010301bd" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" id="0x010301be" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.DropDownHint" id="0x010301bf" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.DropDownItem" id="0x010301c0" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" id="0x010301c1" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.EditText" id="0x010301c2" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu" id="0x010301c3" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" id="0x010301c4" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" id="0x010301c5" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" id="0x010301c6" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" id="0x010301c7" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" id="0x010301c8" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" id="0x010301c9" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" id="0x010301ca" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" id="0x010301cb" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" id="0x010301cc" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" id="0x010301cd" />
+ <public type="style" name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" id="0x010301ce" />
+ <public type="style" name="DeviceDefault.ButtonBar" id="0x010301cf" />
+ <public type="style" name="DeviceDefault.ButtonBar.AlertDialog" id="0x010301d0" />
+ <public type="style" name="DeviceDefault.SegmentedButton" id="0x010301d1" />
+ <public type="style" name="DeviceDefault.Light.ButtonBar" id="0x010301d2" />
+ <public type="style" name="DeviceDefault.Light.ButtonBar.AlertDialog" id="0x010301d3" />
+ <public type="style" name="DeviceDefault.Light.SegmentedButton" id="0x010301d4" />
+
+ <public type="integer" name="status_bar_notification_info_maxnum" id="0x010e0003" />
+
+ <public type="string" name="status_bar_notification_info_overflow" id="0x01040017" />
+
+ <public type="color" name="holo_blue_light" id="0x01060012" />
+ <public type="color" name="holo_blue_dark" id="0x01060013" />
+ <public type="color" name="holo_green_light" id="0x01060014" />
+ <public type="color" name="holo_green_dark" id="0x01060015" />
+ <public type="color" name="holo_red_light" id="0x01060016" />
+ <public type="color" name="holo_red_dark" id="0x01060017" />
+ <public type="color" name="holo_orange_light" id="0x01060018" />
+ <public type="color" name="holo_orange_dark" id="0x01060019" />
+ <public type="color" name="holo_purple" id="0x0106001a" />
+ <public type="color" name="holo_blue_bright" id="0x0106001b" />
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 87cfa38f3cf7..2d5d4cc8ff29 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -41,9 +41,13 @@
<string name="untitled">&lt;untitled&gt;</string>
<!-- Used to replace a range of characters in text that is too wide
- for the space allocated to it. -->
+ for the space allocated to it (three dots). -->
<string name="ellipsis">\u2026</string>
+ <!-- Used to replace a range of characters in text that is too wide
+ for the space allocated to it (two dots). -->
+ <string name="ellipsis_two_dots">\u2025</string>
+
<!-- How to display the lack of a phone number -->
<string name="emptyPhoneNumber">(No phone number)</string>
@@ -3094,6 +3098,12 @@
<!-- Choose Account Activity label -->
<string name="choose_account_label">Select an account</string>
+ <string name="add_account_label">"Add an account"</string>
+ <string name="choose_account_text">"Which account would you like to use?"</string>
+
+ <!-- Button label to add an account [CHAR LIMIT=20] -->
+ <string name="add_account_button_label">Add account</string>
+
<!-- NumberPicker - accessibility support -->
<!-- Description of the button to increment the NumberPicker value. [CHAR LIMIT=NONE] -->
<string name="number_picker_increment_button">Increment</string>
@@ -3296,4 +3306,4 @@
<!-- Delimeter used between each item in a textual list; for example "Alpha, Beta". [CHAR LIMIT=3] -->
<string name="list_delimeter">", "</string>
-</resources>
+</resources> \ No newline at end of file
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 346a3d299f5c..b6e213c79f27 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -250,7 +250,7 @@ please see styles_device_defaults.xml.
</style>
<style name="TextAppearance.EasyCorrectSuggestion" parent="TextAppearance.Suggestion">
- <item name="android:textUnderlineColor">@color/holo_blue_dark</item>
+ <item name="android:textUnderlineColor">#ff888888</item>
</style>
<style name="TextAppearance.MisspelledSuggestion" parent="TextAppearance.Suggestion">
@@ -524,10 +524,14 @@ please see styles_device_defaults.xml.
<style name="Widget.ImageButton.NumberPickerUpButton">
<item name="android:background">@android:drawable/numberpicker_up_btn</item>
+ <item name="android:paddingTop">22dip</item>
+ <item name="android:paddingBottom">22dip</item>
</style>
<style name="Widget.ImageButton.NumberPickerDownButton">
<item name="android:background">@android:drawable/numberpicker_down_btn</item>
+ <item name="android:paddingTop">22dip</item>
+ <item name="android:paddingBottom">22dip</item>
</style>
<style name="Widget.EditText.NumberPickerInputText">
@@ -1651,15 +1655,15 @@ please see styles_device_defaults.xml.
<style name="Widget.Holo.ImageButton.NumberPickerUpButton">
<item name="android:background">@null</item>
<item name="android:src">@android:drawable/numberpicker_up_btn_holo_dark</item>
- <item name="android:paddingTop">26dip</item>
- <item name="android:paddingBottom">26dip</item>
+ <item name="android:paddingTop">16dip</item>
+ <item name="android:paddingBottom">36dip</item>
</style>
<style name="Widget.Holo.ImageButton.NumberPickerDownButton">
<item name="android:background">@null</item>
<item name="android:src">@android:drawable/numberpicker_down_btn_holo_dark</item>
- <item name="android:paddingTop">26dip</item>
- <item name="android:paddingBottom">26dip</item>
+ <item name="android:paddingTop">36dip</item>
+ <item name="android:paddingBottom">16dip</item>
</style>
<style name="Widget.Holo.EditText.NumberPickerInputText">
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 3378dc85f7c2..1987d999d9a7 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -94,7 +94,7 @@ please see themes_device_defaults.xml.
<item name="textAppearanceButton">@android:style/TextAppearance.Widget.Button</item>
- <item name="editTextColor">?android:attr/textColorPrimaryInverse</item>
+ <item name="editTextColor">@android:color/primary_text_light</item>
<item name="editTextBackground">@android:drawable/edit_text</item>
<item name="candidatesTextStyleSpans">@android:string/candidates_style</item>
@@ -410,7 +410,7 @@ please see themes_device_defaults.xml.
<item name="textColorLink">@android:color/link_text_light</item>
<item name="textColorLinkInverse">@android:color/link_text_dark</item>
- <item name="editTextColor">?android:attr/textColorPrimary</item>
+ <item name="editTextColor">@android:color/primary_text_light</item>
<item name="listChoiceBackgroundIndicator">@android:drawable/list_selector_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
diff --git a/core/tests/bandwidthtests/Android.mk b/core/tests/bandwidthtests/Android.mk
index 3d56141afd43..6871efd7dc01 100644
--- a/core/tests/bandwidthtests/Android.mk
+++ b/core/tests/bandwidthtests/Android.mk
@@ -27,4 +27,4 @@ LOCAL_PACKAGE_NAME := BandwidthTests
include $(BUILD_PACKAGE)
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(call all-makefiles-under,$(LOCAL_PATH)) \ No newline at end of file
diff --git a/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java b/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
index be740d3ec529..9eee2f0f1a99 100644
--- a/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
+++ b/core/tests/bandwidthtests/src/com/android/bandwidthtest/BandwidthTest.java
@@ -120,6 +120,42 @@ public class BandwidthTest extends InstrumentationTestCase {
}
/**
+ * Ensure that downloading on wifi reports reasonable stats.
+ */
+ @LargeTest
+ public void testWifiUpload() {
+ assertTrue(setDeviceWifiAndAirplaneMode(mSsid));
+ // Download a file from the server.
+ String ts = Long.toString(System.currentTimeMillis());
+ String targetUrl = BandwidthTestUtil.buildDownloadUrl(
+ mTestServer, FILE_SIZE, mDeviceId, ts);
+ File tmpSaveFile = new File(BASE_DIR + File.separator + TMP_FILENAME);
+ assertTrue(BandwidthTestUtil.DownloadFromUrl(targetUrl, tmpSaveFile));
+
+ ts = Long.toString(System.currentTimeMillis());
+ NetworkStats pre_test_stats = fetchDataFromProc(mUid);
+ TrafficStats.startDataProfiling(mContext);
+ assertTrue(BandwidthTestUtil.postFileToServer(mTestServer, mDeviceId, ts, 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);
+
+ // Output measurements to instrumentation out, so that it can be compared to that of
+ // the server.
+ Bundle results = new Bundle();
+ results.putString("device_id", mDeviceId);
+ results.putString("timestamp", ts);
+ results.putInt("size", FILE_SIZE);
+ AddStatsToResults(PROF_LABEL, prof_stats, results);
+ AddStatsToResults(PROC_LABEL, proc_stats, results);
+ getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, results);
+
+ // Clean up.
+ assertTrue(cleanUpFile(tmpSaveFile));
+ }
+
+ /**
* We want to make sure that if we use the Download Manager to download stuff,
* accounting still goes to the app making the call and that the numbers still make sense.
*/
diff --git a/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/BandwidthTestUtil.java b/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/BandwidthTestUtil.java
index d850169bbad8..577767c4871c 100644
--- a/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/BandwidthTestUtil.java
+++ b/core/tests/bandwidthtests/src/com/android/bandwidthtest/util/BandwidthTestUtil.java
@@ -18,6 +18,15 @@ package com.android.bandwidthtest.util;
import android.util.Log;
+import com.android.internal.http.multipart.FilePart;
+import com.android.internal.http.multipart.MultipartEntity;
+import com.android.internal.http.multipart.Part;
+import com.android.internal.http.multipart.StringPart;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.ByteArrayBuffer;
import java.io.BufferedInputStream;
@@ -80,7 +89,7 @@ public class BandwidthTestUtil {
* Download a given file from a target url to a given destination file.
* @param targetUrl the url to download
* @param file the {@link File} location where to save to
- * @return true if it succeeded.
+ * @return true if it succeeded
*/
public static boolean DownloadFromUrl(String targetUrl, File file) {
try {
@@ -106,4 +115,39 @@ public class BandwidthTestUtil {
return true;
}
+ /**
+ * Post a given file for a given device and timestamp to the server.
+ * @param server {@link String} url of test server
+ * @param deviceId {@link String} device id that is uploading
+ * @param timestamp {@link String} timestamp
+ * @param file {@link File} to upload
+ * @return true if it succeeded
+ */
+ public static boolean postFileToServer(String server, String deviceId, String timestamp,
+ File file) {
+ try {
+ Log.d(LOG_TAG, "Uploading begining");
+ HttpClient httpClient = new DefaultHttpClient();
+ String uri = server;
+ if (!uri.endsWith("/")) {
+ uri += "/";
+ }
+ uri += "upload";
+ Log.d(LOG_TAG, "Upload url:" + uri);
+ HttpPost postRequest = new HttpPost(uri);
+ Part[] parts = {
+ new StringPart("device_id", deviceId),
+ new StringPart("timestamp", timestamp),
+ new FilePart("file", file)
+ };
+ MultipartEntity reqEntity = new MultipartEntity(parts, postRequest.getParams());
+ postRequest.setEntity(reqEntity);
+ HttpResponse res = httpClient.execute(postRequest);
+ res.getEntity().getContent().close();
+ } catch (IOException e) {
+ Log.e(LOG_TAG, "Could not upload file with error: " + e);
+ return false;
+ }
+ return true;
+ }
}
diff --git a/core/tests/coretests/apks/install_verifier_bad/Android.mk b/core/tests/coretests/apks/install_verifier_bad/Android.mk
new file mode 100644
index 000000000000..b50cfd0410d1
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_bad/Android.mk
@@ -0,0 +1,11 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_verifier_bad
+
+include $(BUILD_PACKAGE)
+
diff --git a/core/tests/coretests/apks/install_verifier_bad/AndroidManifest.xml b/core/tests/coretests/apks/install_verifier_bad/AndroidManifest.xml
new file mode 100644
index 000000000000..0170cdd01c03
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_bad/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+ 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.frameworks.coretests.install_verifier_bad">
+
+ <package-verifier android:name="com.android.frameworks.coretests.nonexistent" android:publicKey="Zm9vYmFy" />
+
+ <application android:hasCode="false">
+ </application>
+</manifest>
diff --git a/core/tests/coretests/apks/install_verifier_bad/res/values/strings.xml b/core/tests/coretests/apks/install_verifier_bad/res/values/strings.xml
new file mode 100644
index 000000000000..3b8b3b1af9b5
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_bad/res/values/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Just need this dummy file to have something to build. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dummy">dummy</string>
+</resources>
diff --git a/core/tests/coretests/apks/install_verifier_good/Android.mk b/core/tests/coretests/apks/install_verifier_good/Android.mk
new file mode 100644
index 000000000000..a48a80e2c92e
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_good/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := FrameworkCoreTests_install_verifier_good
+
+include $(BUILD_PACKAGE)
diff --git a/core/tests/coretests/apks/install_verifier_good/AndroidManifest.xml b/core/tests/coretests/apks/install_verifier_good/AndroidManifest.xml
new file mode 100644
index 000000000000..90135a5c01e7
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_good/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+ 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.frameworks.coretests.install_verifier_bad">
+
+ <package-verifier android:name="com.android.frameworks.coretests" android:publicKey="MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAnHgFkqwNXTgc3qpl7MimAG42SAxtcgexIBG+UIY6q+K1XQCa33FG1vIgIoDHzU172yYkO4qAbCazSxN1I6SSaCJJBNwBST58Cs8aBch09psDe2AwnZB00kKA4WutKoc0NhlR6vcqSC0JsgSxh14SrJjBqnc9aAC56v3lbVi+2OjaFvmjYAmcN6g0pt/tt7a0SgSeB6Jp/M8sVJbyzzbWTfkKO42PNKO6q0z1M3GrJ3GbO6WHVK0MU/wU4dtF1R4jT7vpPJuk7fnOVCYTUOxTVge/aaL/SqB9tffqIA0JpsG0niFAL4ntEZCJOqtakYDxUugvhaRXU89fwZBxxe7IJwIBAw==" />
+
+ <application android:hasCode="false">
+ </application>
+</manifest>
diff --git a/core/tests/coretests/apks/install_verifier_good/res/values/strings.xml b/core/tests/coretests/apks/install_verifier_good/res/values/strings.xml
new file mode 100644
index 000000000000..3b8b3b1af9b5
--- /dev/null
+++ b/core/tests/coretests/apks/install_verifier_good/res/values/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Just need this dummy file to have something to build. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dummy">dummy</string>
+</resources>
diff --git a/core/tests/coretests/src/android/content/pm/VerifierDeviceIdentityTest.java b/core/tests/coretests/src/android/content/pm/VerifierDeviceIdentityTest.java
index e6a6a2658ca4..cb13eb7c846e 100644
--- a/core/tests/coretests/src/android/content/pm/VerifierDeviceIdentityTest.java
+++ b/core/tests/coretests/src/android/content/pm/VerifierDeviceIdentityTest.java
@@ -25,6 +25,8 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
private static final String TEST_1_ENCODED = "HUXY-A75N-FLKV-F";
+ private static final String TEST_1_ENCODED_LOWERCASE = "huxy-a75n-flkv-f";
+
private static final long TEST_2 = 0x5A05FF5A05F0A555L;
private static final long TEST_MAXVALUE = Long.MAX_VALUE;
@@ -45,6 +47,10 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
private static final String TEST_OVERFLOW_ENCODED = "QAAA-AAAA-AAAA-A";
+ private static final String TEST_SUBSTITUTION_CORRECTED = "OIIO-IIOO-IOOI-I";
+
+ private static final String TEST_SUBSTITUTION_UNCORRECTED = "0110-1100-1001-1";
+
public void testVerifierDeviceIdentity_Equals_Success() {
VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
VerifierDeviceIdentity id2 = new VerifierDeviceIdentity(TEST_1);
@@ -125,6 +131,7 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
assertEquals("Original identity and parceled identity should be the same", id1, id2);
}
+ @SuppressWarnings("serial")
private static class MockRandom extends Random {
private long mNextLong;
@@ -181,7 +188,7 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
public void testVerifierDeviceIdentity_Parse_TooShort() {
try {
- VerifierDeviceIdentity id = VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-");
+ VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-");
fail("Parsing should fail when device identifier is too short");
} catch (IllegalArgumentException e) {
// success
@@ -190,7 +197,7 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
public void testVerifierDeviceIdentity_Parse_WayTooShort() {
try {
- VerifierDeviceIdentity id = VerifierDeviceIdentity.parse("----------------");
+ VerifierDeviceIdentity.parse("----------------");
fail("Parsing should fail when device identifier is too short");
} catch (IllegalArgumentException e) {
// success
@@ -199,7 +206,7 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
public void testVerifierDeviceIdentity_Parse_TooLong() {
try {
- VerifierDeviceIdentity id = VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-AA");
+ VerifierDeviceIdentity.parse("AAAA-AAAA-AAAA-AA");
fail("Parsing should fail when device identifier is too long");
} catch (IllegalArgumentException e) {
// success
@@ -208,10 +215,32 @@ public class VerifierDeviceIdentityTest extends android.test.AndroidTestCase {
public void testVerifierDeviceIdentity_Parse_Overflow() {
try {
- VerifierDeviceIdentity id = VerifierDeviceIdentity.parse(TEST_OVERFLOW_ENCODED);
+ VerifierDeviceIdentity.parse(TEST_OVERFLOW_ENCODED);
fail("Parsing should fail when the value will overflow");
} catch (IllegalArgumentException e) {
// success
}
}
+
+ public void testVerifierDeviceIdentity_Parse_SquashToUppercase() {
+ VerifierDeviceIdentity id1 = new VerifierDeviceIdentity(TEST_1);
+
+ VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_1_ENCODED_LOWERCASE);
+
+ assertEquals("Lowercase should parse to be the same as uppercase", id1, id2);
+
+ assertEquals("Substituted identity should render to the same string",
+ id1.toString(), id2.toString());
+ }
+
+ public void testVerifierDeviceIdentity_Parse_1I_And_0O_Substitution() {
+ VerifierDeviceIdentity id1 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_CORRECTED);
+
+ VerifierDeviceIdentity id2 = VerifierDeviceIdentity.parse(TEST_SUBSTITUTION_UNCORRECTED);
+
+ assertEquals("Substitution should replace 0 with O and 1 with I", id1, id2);
+
+ assertEquals("Substituted identity should render to the same string",
+ id1.toString(), id2.toString());
+ }
}
diff --git a/core/tests/coretests/src/android/net/http/AbstractProxyTest.java b/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
index ee4ce95202fd..48912329438d 100644
--- a/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
+++ b/core/tests/coretests/src/android/net/http/AbstractProxyTest.java
@@ -219,6 +219,23 @@ public abstract class AbstractProxyTest extends TestCase {
assertEquals("GET /bar HTTP/1.1", recordedRequest.getRequestLine());
}
+ // http://b/5372438
+ public void testRetryWithProxy() throws Exception {
+ server.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.DISCONNECT_AT_START));
+ server.play();
+
+ HttpClient httpProxyClient = newHttpClient();
+ HttpGet request = new HttpGet("http://android.com/foo");
+ ProxyConfig.REQUEST_PARAMETER.configure(server, httpProxyClient, request);
+
+ try {
+ httpProxyClient.execute(request);
+ fail();
+ } catch (IOException expected) {
+ }
+ }
+
enum ProxyConfig {
PROXY_SYSTEM_PROPERTY() {
@Override void configure(MockWebServer server, HttpClient client, HttpRequest request) {
diff --git a/data/fonts/AndroidClock.ttf b/data/fonts/AndroidClock.ttf
index 6e0932e9e7e1..3fa6d8867770 100644
--- a/data/fonts/AndroidClock.ttf
+++ b/data/fonts/AndroidClock.ttf
Binary files differ
diff --git a/data/fonts/AndroidClock_Highlight.ttf b/data/fonts/AndroidClock_Highlight.ttf
index 6e0932e9e7e1..3fa6d8867770 100644
--- a/data/fonts/AndroidClock_Highlight.ttf
+++ b/data/fonts/AndroidClock_Highlight.ttf
Binary files differ
diff --git a/data/fonts/AndroidClock_Solid.ttf b/data/fonts/AndroidClock_Solid.ttf
index 6e0932e9e7e1..3fa6d8867770 100644
--- a/data/fonts/AndroidClock_Solid.ttf
+++ b/data/fonts/AndroidClock_Solid.ttf
Binary files differ
diff --git a/data/fonts/Lohit_Hindi.ttf b/data/fonts/Lohit_Hindi.ttf
deleted file mode 100644
index 73caae34aac0..000000000000
--- a/data/fonts/Lohit_Hindi.ttf
+++ /dev/null
Binary files differ
diff --git a/data/fonts/Roboto-Bold.ttf b/data/fonts/Roboto-Bold.ttf
index f9311fbdaa92..e5d828d8b43d 100644
--- a/data/fonts/Roboto-Bold.ttf
+++ b/data/fonts/Roboto-Bold.ttf
Binary files differ
diff --git a/data/fonts/Roboto-BoldItalic.ttf b/data/fonts/Roboto-BoldItalic.ttf
index ae9269707ff8..d8fa3ae88d83 100644
--- a/data/fonts/Roboto-BoldItalic.ttf
+++ b/data/fonts/Roboto-BoldItalic.ttf
Binary files differ
diff --git a/data/fonts/Roboto-Italic.ttf b/data/fonts/Roboto-Italic.ttf
index 109b6420c8d1..6682d17b0bae 100644
--- a/data/fonts/Roboto-Italic.ttf
+++ b/data/fonts/Roboto-Italic.ttf
Binary files differ
diff --git a/data/fonts/Roboto-Regular.ttf b/data/fonts/Roboto-Regular.ttf
index 2568835ac912..153c60882bb8 100644
--- a/data/fonts/Roboto-Regular.ttf
+++ b/data/fonts/Roboto-Regular.ttf
Binary files differ
diff --git a/data/fonts/fallback_fonts.xml b/data/fonts/fallback_fonts.xml
index e4685589f834..881233a1eb5a 100644
--- a/data/fonts/fallback_fonts.xml
+++ b/data/fonts/fallback_fonts.xml
@@ -56,7 +56,7 @@
</family>
<family>
<fileset>
- <file>Lohit_Hindi.ttf</file>
+ <file>Lohit-Devanagari.ttf</file>
</fileset>
</family>
<family>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index 5bac8f00e479..67d04c914745 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -30,7 +30,6 @@ 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/DroidSansArmenian.ttf:system/fonts/DroidSansArmenian.ttf \
frameworks/base/data/fonts/DroidSansGeorgian.ttf:system/fonts/DroidSansGeorgian.ttf \
frameworks/base/data/fonts/Clockopia.ttf:system/fonts/Clockopia.ttf \
diff --git a/data/sounds/AudioPackage7.mk b/data/sounds/AudioPackage7.mk
index 4f237161af35..16171dccf7b4 100755
--- a/data/sounds/AudioPackage7.mk
+++ b/data/sounds/AudioPackage7.mk
@@ -9,21 +9,18 @@ LOCAL_PATH:= frameworks/base/data/sounds
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/alarms/ogg/Cesium.ogg:system/media/audio/alarms/Cesium.ogg \
- $(LOCAL_PATH)/alarms/ogg/Plutonium.ogg:system/media/audio/alarms/Plutonium.ogg \
- $(LOCAL_PATH)/alarms/ogg/Scandium.ogg:system/media/audio/alarms/Scandium.ogg \
- $(LOCAL_PATH)/alarms/ogg/Curium.ogg:system/media/audio/alarms/Curium.ogg \
$(LOCAL_PATH)/alarms/ogg/Fermium.ogg:system/media/audio/alarms/Fermium.ogg \
- $(LOCAL_PATH)/alarms/ogg/Nobelium.ogg:system/media/audio/alarms/Nobelium.ogg \
- $(LOCAL_PATH)/alarms/ogg/Copernicium.ogg:system/media/audio/alarms/Copernicium.ogg \
$(LOCAL_PATH)/alarms/ogg/Hassium.ogg:system/media/audio/alarms/Hassium.ogg \
$(LOCAL_PATH)/alarms/ogg/Neptunium.ogg:system/media/audio/alarms/Neptunium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Nobelium.ogg:system/media/audio/alarms/Nobelium.ogg \
+ $(LOCAL_PATH)/alarms/ogg/Plutonium.ogg:system/media/audio/alarms/Plutonium.ogg \
$(LOCAL_PATH)/effects/ogg/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg \
- $(LOCAL_PATH)/effects/ogg/KeypressStandard_24.ogg:system/media/audio/ui/KeypressStandard.ogg \
- $(LOCAL_PATH)/effects/ogg/KeypressSpacebar_24.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
- $(LOCAL_PATH)/effects/ogg/KeypressDelete_24.ogg:system/media/audio/ui/KeypressDelete.ogg \
- $(LOCAL_PATH)/effects/ogg/KeypressReturn_24.ogg:system/media/audio/ui/KeypressReturn.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressStandard_49.ogg:system/media/audio/ui/KeypressStandard.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressSpacebar_49.ogg:system/media/audio/ui/KeypressSpacebar.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressDelete_49.ogg:system/media/audio/ui/KeypressDelete.ogg \
+ $(LOCAL_PATH)/effects/ogg/KeypressReturn_49.ogg:system/media/audio/ui/KeypressReturn.ogg \
$(LOCAL_PATH)/effects/ogg/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
- $(LOCAL_PATH)/effects/ogg/CameraShutter.ogg:system/media/audio/ui/camera_click.ogg \
+ $(LOCAL_PATH)/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
$(LOCAL_PATH)/effects/ogg/LowBattery.ogg:system/media/audio/ui/LowBattery.ogg \
$(LOCAL_PATH)/effects/ogg/Dock.ogg:system/media/audio/ui/Dock.ogg \
$(LOCAL_PATH)/effects/ogg/Undock.ogg:system/media/audio/ui/Undock.ogg \
@@ -41,15 +38,12 @@ PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/ringtones/ogg/Andromeda.ogg:system/media/audio/ringtones/Andromeda.ogg \
$(LOCAL_PATH)/ringtones/ogg/Aquila.ogg:system/media/audio/ringtones/Aquila.ogg \
$(LOCAL_PATH)/ringtones/ogg/ArgoNavis.ogg:system/media/audio/ringtones/ArgoNavis.ogg \
- $(LOCAL_PATH)/ringtones/ogg/Bootes.ogg:system/media/audio/ringtones/Bootes.ogg \
- $(LOCAL_PATH)/ringtones/ogg/CanisMajor.ogg:system/media/audio/ringtones/CanisMajor.ogg \
$(LOCAL_PATH)/ringtones/ogg/Carina.ogg:system/media/audio/ringtones/Carina.ogg \
$(LOCAL_PATH)/ringtones/ogg/Cassiopeia.ogg:system/media/audio/ringtones/Cassiopeia.ogg \
$(LOCAL_PATH)/ringtones/ogg/Centaurus.ogg:system/media/audio/ringtones/Centaurus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Cygnus.ogg:system/media/audio/ringtones/Cygnus.ogg \
$(LOCAL_PATH)/ringtones/ogg/Draco.ogg:system/media/audio/ringtones/Draco.ogg \
$(LOCAL_PATH)/ringtones/ogg/Hydra.ogg:system/media/audio/ringtones/Hydra.ogg \
- $(LOCAL_PATH)/ringtones/ogg/Lyra.ogg:system/media/audio/ringtones/Lyra.ogg \
$(LOCAL_PATH)/ringtones/ogg/Machina.ogg:system/media/audio/ringtones/Machina.ogg \
$(LOCAL_PATH)/ringtones/ogg/Orion.ogg:system/media/audio/ringtones/Orion.ogg \
$(LOCAL_PATH)/ringtones/ogg/Pegasus.ogg:system/media/audio/ringtones/Pegasus.ogg \
diff --git a/data/sounds/alarms/ogg/Fermium.ogg b/data/sounds/alarms/ogg/Fermium.ogg
index 6940442e3411..fecc2ba264a4 100644
--- a/data/sounds/alarms/ogg/Fermium.ogg
+++ b/data/sounds/alarms/ogg/Fermium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Hassium.ogg b/data/sounds/alarms/ogg/Hassium.ogg
index 86b2b71e4e3c..260bf7da22e4 100644
--- a/data/sounds/alarms/ogg/Hassium.ogg
+++ b/data/sounds/alarms/ogg/Hassium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Neptunium.ogg b/data/sounds/alarms/ogg/Neptunium.ogg
index 1a99141501a6..b1ea74158f2c 100644
--- a/data/sounds/alarms/ogg/Neptunium.ogg
+++ b/data/sounds/alarms/ogg/Neptunium.ogg
Binary files differ
diff --git a/data/sounds/alarms/ogg/Nobelium.ogg b/data/sounds/alarms/ogg/Nobelium.ogg
index 4309bc679d6e..1f94d1e9dfe7 100644
--- a/data/sounds/alarms/ogg/Nobelium.ogg
+++ b/data/sounds/alarms/ogg/Nobelium.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/CameraShutter.ogg b/data/sounds/effects/ogg/CameraShutter.ogg
deleted file mode 100644
index 1b67daccdcfe..000000000000
--- a/data/sounds/effects/ogg/CameraShutter.ogg
+++ /dev/null
Binary files differ
diff --git a/data/sounds/effects/ogg/Dock.ogg b/data/sounds/effects/ogg/Dock.ogg
index caa8eeb0fac9..cfe4405a945f 100644
--- a/data/sounds/effects/ogg/Dock.ogg
+++ b/data/sounds/effects/ogg/Dock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Effect_Tick.ogg b/data/sounds/effects/ogg/Effect_Tick.ogg
index a997fe164ee4..c8a5c36e9550 100644
--- a/data/sounds/effects/ogg/Effect_Tick.ogg
+++ b/data/sounds/effects/ogg/Effect_Tick.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressSpacebar_24.ogg b/data/sounds/effects/ogg/KeypressDelete_14.ogg
index 9f17dd263fda..0baea25cb756 100644
--- a/data/sounds/effects/ogg/KeypressSpacebar_24.ogg
+++ b/data/sounds/effects/ogg/KeypressDelete_14.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressDelete_49.ogg b/data/sounds/effects/ogg/KeypressDelete_49.ogg
new file mode 100644
index 000000000000..f5e9deb5c8cd
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressDelete_49.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressReturn_24.ogg b/data/sounds/effects/ogg/KeypressReturn_14.ogg
index 342eb123f76f..86a5a0e9a2dc 100644
--- a/data/sounds/effects/ogg/KeypressReturn_24.ogg
+++ b/data/sounds/effects/ogg/KeypressReturn_14.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressReturn_49.ogg b/data/sounds/effects/ogg/KeypressReturn_49.ogg
new file mode 100644
index 000000000000..b0ddee5b7692
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressReturn_49.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressStandard_24.ogg b/data/sounds/effects/ogg/KeypressSpacebar_14.ogg
index 80d7d6d14dcd..058534a28dd6 100644
--- a/data/sounds/effects/ogg/KeypressStandard_24.ogg
+++ b/data/sounds/effects/ogg/KeypressSpacebar_14.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressSpacebar_49.ogg b/data/sounds/effects/ogg/KeypressSpacebar_49.ogg
new file mode 100644
index 000000000000..3866e0e91cc2
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressSpacebar_49.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressDelete_24.ogg b/data/sounds/effects/ogg/KeypressStandard_14.ogg
index 2503c3e68142..317c8f3ab42e 100644
--- a/data/sounds/effects/ogg/KeypressDelete_24.ogg
+++ b/data/sounds/effects/ogg/KeypressStandard_14.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/KeypressStandard_49.ogg b/data/sounds/effects/ogg/KeypressStandard_49.ogg
new file mode 100644
index 000000000000..893bb522cc7b
--- /dev/null
+++ b/data/sounds/effects/ogg/KeypressStandard_49.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Lock.ogg b/data/sounds/effects/ogg/Lock.ogg
index 471258a39b15..ed845bee50e3 100644
--- a/data/sounds/effects/ogg/Lock.ogg
+++ b/data/sounds/effects/ogg/Lock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/LowBattery.ogg b/data/sounds/effects/ogg/LowBattery.ogg
index 370c86c67f32..710e3856471c 100755..100644
--- a/data/sounds/effects/ogg/LowBattery.ogg
+++ b/data/sounds/effects/ogg/LowBattery.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Media_Volume.ogg b/data/sounds/effects/ogg/Media_Volume.ogg
index b06656fd308b..2248e492bbcd 100644
--- a/data/sounds/effects/ogg/Media_Volume.ogg
+++ b/data/sounds/effects/ogg/Media_Volume.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Undock.ogg b/data/sounds/effects/ogg/Undock.ogg
index 28918f70cbe5..f00fa76a65a0 100644
--- a/data/sounds/effects/ogg/Undock.ogg
+++ b/data/sounds/effects/ogg/Undock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/Unlock.ogg b/data/sounds/effects/ogg/Unlock.ogg
index 1cd537b1a254..0a47b5c23095 100644
--- a/data/sounds/effects/ogg/Unlock.ogg
+++ b/data/sounds/effects/ogg/Unlock.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/VideoRecord.ogg b/data/sounds/effects/ogg/VideoRecord.ogg
index 28455c907768..d2dee035eb08 100644
--- a/data/sounds/effects/ogg/VideoRecord.ogg
+++ b/data/sounds/effects/ogg/VideoRecord.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/VideoStop.ogg b/data/sounds/effects/ogg/VideoStop.ogg
new file mode 100644
index 000000000000..f16ed13fb630
--- /dev/null
+++ b/data/sounds/effects/ogg/VideoStop.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/VolumeIncremental.ogg b/data/sounds/effects/ogg/VolumeIncremental.ogg
new file mode 100644
index 000000000000..c540607e1853
--- /dev/null
+++ b/data/sounds/effects/ogg/VolumeIncremental.ogg
Binary files differ
diff --git a/data/sounds/effects/ogg/camera_click.ogg b/data/sounds/effects/ogg/camera_click.ogg
index bfb2a6828034..44b668381f2e 100755..100644
--- a/data/sounds/effects/ogg/camera_click.ogg
+++ b/data/sounds/effects/ogg/camera_click.ogg
Binary files differ
diff --git a/data/sounds/effects/wav/CameraClick.wav b/data/sounds/effects/wav/CameraClick.wav
index 9fe75f2d8f72..1077f410512a 100644
--- a/data/sounds/effects/wav/CameraClick.wav
+++ b/data/sounds/effects/wav/CameraClick.wav
Binary files differ
diff --git a/data/sounds/effects/wav/CameraFocus.wav b/data/sounds/effects/wav/CameraFocus.wav
new file mode 100644
index 000000000000..cbe6b37c2616
--- /dev/null
+++ b/data/sounds/effects/wav/CameraFocus.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Dock.wav b/data/sounds/effects/wav/Dock.wav
index 7ec64a81c4e5..864a7dd87598 100644
--- a/data/sounds/effects/wav/Dock.wav
+++ b/data/sounds/effects/wav/Dock.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Effect_Tick.wav b/data/sounds/effects/wav/Effect_Tick.wav
index 6af2dc160bf7..6a56ad71b734 100644
--- a/data/sounds/effects/wav/Effect_Tick.wav
+++ b/data/sounds/effects/wav/Effect_Tick.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Lock.wav b/data/sounds/effects/wav/Lock.wav
index fead37f24cb6..1655a8902f5f 100644
--- a/data/sounds/effects/wav/Lock.wav
+++ b/data/sounds/effects/wav/Lock.wav
Binary files differ
diff --git a/data/sounds/effects/wav/LowBattery.wav b/data/sounds/effects/wav/LowBattery.wav
index 5d8b48d61e0d..876a564e5f4a 100644
--- a/data/sounds/effects/wav/LowBattery.wav
+++ b/data/sounds/effects/wav/LowBattery.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Media_Volume.wav b/data/sounds/effects/wav/Media_Volume.wav
new file mode 100644
index 000000000000..54eb63868a86
--- /dev/null
+++ b/data/sounds/effects/wav/Media_Volume.wav
Binary files differ
diff --git a/data/sounds/effects/wav/NFCFailure.wav b/data/sounds/effects/wav/NFCFailure.wav
new file mode 100644
index 000000000000..8715f8740ebc
--- /dev/null
+++ b/data/sounds/effects/wav/NFCFailure.wav
Binary files differ
diff --git a/data/sounds/effects/wav/NFCInitiated.wav b/data/sounds/effects/wav/NFCInitiated.wav
new file mode 100644
index 000000000000..2f2086922ecf
--- /dev/null
+++ b/data/sounds/effects/wav/NFCInitiated.wav
Binary files differ
diff --git a/data/sounds/effects/wav/NFCSuccess.wav b/data/sounds/effects/wav/NFCSuccess.wav
new file mode 100644
index 000000000000..39e5da7d24bb
--- /dev/null
+++ b/data/sounds/effects/wav/NFCSuccess.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Undock.wav b/data/sounds/effects/wav/Undock.wav
index 79abb4e45b4e..3696a2488f74 100644
--- a/data/sounds/effects/wav/Undock.wav
+++ b/data/sounds/effects/wav/Undock.wav
Binary files differ
diff --git a/data/sounds/effects/wav/Unlock.wav b/data/sounds/effects/wav/Unlock.wav
index 33b80ff41189..2229d03b5fed 100644
--- a/data/sounds/effects/wav/Unlock.wav
+++ b/data/sounds/effects/wav/Unlock.wav
Binary files differ
diff --git a/data/sounds/effects/wav/VideoRecord.wav b/data/sounds/effects/wav/VideoRecord.wav
index f431023369d6..b2ca16a6df3c 100644
--- a/data/sounds/effects/wav/VideoRecord.wav
+++ b/data/sounds/effects/wav/VideoRecord.wav
Binary files differ
diff --git a/data/sounds/effects/wav/VideoStop.wav b/data/sounds/effects/wav/VideoStop.wav
new file mode 100644
index 000000000000..8ff2f6d3bab1
--- /dev/null
+++ b/data/sounds/effects/wav/VideoStop.wav
Binary files differ
diff --git a/data/sounds/effects/wav/VideoTransmitBegin.wav b/data/sounds/effects/wav/VideoTransmitBegin.wav
new file mode 100644
index 000000000000..0ed14de35644
--- /dev/null
+++ b/data/sounds/effects/wav/VideoTransmitBegin.wav
Binary files differ
diff --git a/data/sounds/effects/wav/VideoTransmitEnd.wav b/data/sounds/effects/wav/VideoTransmitEnd.wav
new file mode 100644
index 000000000000..3c8523ed91b8
--- /dev/null
+++ b/data/sounds/effects/wav/VideoTransmitEnd.wav
Binary files differ
diff --git a/data/sounds/effects/wav/VolumeIncremental.wav b/data/sounds/effects/wav/VolumeIncremental.wav
new file mode 100644
index 000000000000..0a649813f4d0
--- /dev/null
+++ b/data/sounds/effects/wav/VolumeIncremental.wav
Binary files differ
diff --git a/data/sounds/notifications/ogg/Antares.ogg b/data/sounds/notifications/ogg/Antares.ogg
index 409c68462e90..92e9d09a9166 100644
--- a/data/sounds/notifications/ogg/Antares.ogg
+++ b/data/sounds/notifications/ogg/Antares.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Betelgeuse.ogg b/data/sounds/notifications/ogg/Betelgeuse.ogg
index 488d1e8290e8..aca85e925234 100644
--- a/data/sounds/notifications/ogg/Betelgeuse.ogg
+++ b/data/sounds/notifications/ogg/Betelgeuse.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Deneb.ogg b/data/sounds/notifications/ogg/Deneb.ogg
index b84eae3dab31..aac686a5630e 100644
--- a/data/sounds/notifications/ogg/Deneb.ogg
+++ b/data/sounds/notifications/ogg/Deneb.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Hojus.ogg b/data/sounds/notifications/ogg/Hojus.ogg
index 65b780cde872..5bc12657db09 100644
--- a/data/sounds/notifications/ogg/Hojus.ogg
+++ b/data/sounds/notifications/ogg/Hojus.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Lalande.ogg b/data/sounds/notifications/ogg/Lalande.ogg
index eda9c9d286de..42c6271222e4 100644
--- a/data/sounds/notifications/ogg/Lalande.ogg
+++ b/data/sounds/notifications/ogg/Lalande.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Mira.ogg b/data/sounds/notifications/ogg/Mira.ogg
index f5a6e945175d..c66dae11c494 100644
--- a/data/sounds/notifications/ogg/Mira.ogg
+++ b/data/sounds/notifications/ogg/Mira.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Proxima.ogg b/data/sounds/notifications/ogg/Proxima.ogg
index 53bf899fed0d..a9e5a80fac43 100644
--- a/data/sounds/notifications/ogg/Proxima.ogg
+++ b/data/sounds/notifications/ogg/Proxima.ogg
Binary files differ
diff --git a/data/sounds/notifications/ogg/Upsilon.ogg b/data/sounds/notifications/ogg/Upsilon.ogg
index e970422876c5..e3ac386eac15 100644
--- a/data/sounds/notifications/ogg/Upsilon.ogg
+++ b/data/sounds/notifications/ogg/Upsilon.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Carina.ogg b/data/sounds/ringtones/ogg/Carina.ogg
index aeb9b36bb6cd..e8a66b463b41 100644
--- a/data/sounds/ringtones/ogg/Carina.ogg
+++ b/data/sounds/ringtones/ogg/Carina.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Cassiopeia.ogg b/data/sounds/ringtones/ogg/Cassiopeia.ogg
index b871940bde0c..c8e2fe218746 100644
--- a/data/sounds/ringtones/ogg/Cassiopeia.ogg
+++ b/data/sounds/ringtones/ogg/Cassiopeia.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Sceptrum.ogg b/data/sounds/ringtones/ogg/Sceptrum.ogg
index e94abe01d294..f2d3ed445c21 100644
--- a/data/sounds/ringtones/ogg/Sceptrum.ogg
+++ b/data/sounds/ringtones/ogg/Sceptrum.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Solarium.ogg b/data/sounds/ringtones/ogg/Solarium.ogg
index 8dac71e768a6..8c9d3073b8ce 100644
--- a/data/sounds/ringtones/ogg/Solarium.ogg
+++ b/data/sounds/ringtones/ogg/Solarium.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/UrsaMinor.ogg b/data/sounds/ringtones/ogg/UrsaMinor.ogg
index a90d1debab2f..30d2cd1d1763 100644
--- a/data/sounds/ringtones/ogg/UrsaMinor.ogg
+++ b/data/sounds/ringtones/ogg/UrsaMinor.ogg
Binary files differ
diff --git a/data/sounds/ringtones/ogg/Vespa.ogg b/data/sounds/ringtones/ogg/Vespa.ogg
index f6378319f2c1..692a7f9a8e1f 100644
--- a/data/sounds/ringtones/ogg/Vespa.ogg
+++ b/data/sounds/ringtones/ogg/Vespa.ogg
Binary files differ
diff --git a/data/videos/Disco.240p.mp4 b/data/videos/Disco.240p.mp4
new file mode 100644
index 000000000000..c9078b736f90
--- /dev/null
+++ b/data/videos/Disco.240p.mp4
Binary files differ
diff --git a/data/videos/Disco.480p.lq.mp4 b/data/videos/Disco.480p.lq.mp4
new file mode 100644
index 000000000000..411e0d5dacd5
--- /dev/null
+++ b/data/videos/Disco.480p.lq.mp4
Binary files differ
diff --git a/data/videos/Disco.480p.mq.mp4 b/data/videos/Disco.480p.mq.mp4
new file mode 100644
index 000000000000..3dc495764b82
--- /dev/null
+++ b/data/videos/Disco.480p.mq.mp4
Binary files differ
diff --git a/data/videos/VideoPackage1.mk b/data/videos/VideoPackage1.mk
index 1e7096ac1730..407a76ee38f2 100644
--- a/data/videos/VideoPackage1.mk
+++ b/data/videos/VideoPackage1.mk
@@ -23,5 +23,6 @@ PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/AndroidInSpace.240p.mp4:$(TARGET_PATH)/AndroidInSpace.240p.mp4 \
$(LOCAL_PATH)/AndroidInSpace.480p.lq.mp4:$(TARGET_PATH)/AndroidInSpace.480p.mp4 \
$(LOCAL_PATH)/Sunset.240p.mp4:$(TARGET_PATH)/Sunset.240p.mp4 \
- $(LOCAL_PATH)/Sunset.480p.lq.mp4:$(TARGET_PATH)/Sunset.480p.mp4
-
+ $(LOCAL_PATH)/Sunset.480p.lq.mp4:$(TARGET_PATH)/Sunset.480p.mp4 \
+ $(LOCAL_PATH)/Disco.240p.mp4:$(TARGET_PATH)/Disco.240p.mp4 \
+ $(LOCAL_PATH)/Disco.480p.lq.mp4:$(TARGET_PATH)/Disco.480p.mp4
diff --git a/data/videos/VideoPackage2.mk b/data/videos/VideoPackage2.mk
index cb77b3ecc7e5..c256a2de7abb 100644
--- a/data/videos/VideoPackage2.mk
+++ b/data/videos/VideoPackage2.mk
@@ -23,5 +23,6 @@ PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/AndroidInSpace.240p.mp4:$(TARGET_PATH)/AndroidInSpace.240p.mp4 \
$(LOCAL_PATH)/AndroidInSpace.480p.mq.mp4:$(TARGET_PATH)/AndroidInSpace.480p.mp4 \
$(LOCAL_PATH)/Sunset.240p.mp4:$(TARGET_PATH)/Sunset.240p.mp4 \
- $(LOCAL_PATH)/Sunset.480p.mq.mp4:$(TARGET_PATH)/Sunset.480p.mp4
-
+ $(LOCAL_PATH)/Sunset.480p.mq.mp4:$(TARGET_PATH)/Sunset.480p.mp4 \
+ $(LOCAL_PATH)/Disco.240p.mp4:$(TARGET_PATH)/Disco.240p.mp4 \
+ $(LOCAL_PATH)/Disco.480p.mq.mp4:$(TARGET_PATH)/Disco.480p.mp4
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index e128a1cc0347..ccc63a214a64 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -37,11 +37,16 @@ page.title=Android Supported Media Formats
<ul>
<li>RTSP (RTP, SDP)</li>
- <li>HTTP progressive streaming</li>
- <li>HTTP live streaming <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-05">draft protocol</a> (Android 3.0 and above)</li>
+ <li>HTTP/HTTPS progressive streaming</li>
+ <li>HTTP/HTTPS live streaming <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming">draft protocol</a>: <ul>
+ <li>MPEG-2 TS media files only</li>
+ <li>Protocol version 3 (Android 4.0 and above)</li>
+ <li>Protocol version 2 (Android 3.x)</li>
+ <li>Not supported before Android 3.0</li>
+ </ul></li>
</ul>
-<p class="note"><strong>Note:</strong> HTTPS is not supported at this time.</p>
+<p class="note"><strong>Note:</strong> HTTPS is not supported before Android 3.1.</p>
<h2 id="core">Core Media Formats</h2>
@@ -71,7 +76,11 @@ page.title=Android Supported Media Formats
<td style="text-align: center;"><big>&bull;</big></td>
<td rowspan="3">Mono/Stereo content in any combination of standard bit
rates up to 160 kbps and sampling rates from 8 to 48kHz</td>
-<td rowspan="3">3GPP (.3gp), and MPEG-4 (.mp4, .m4a). ADTS raw AAC (.aac, decode only, ADIF not supported, Android 3.1+). </td>
+<td rowspan="3">
+ &bull; 3GPP (.3gp)<br>
+ &bull; MPEG-4 (.mp4, .m4a)<br>
+ &bull; ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)<br>
+ &bull; MPEG-TS (.ts, not seekable, Android 3.0+)</td>
</tr>
<tr>
@@ -91,8 +100,8 @@ rates up to 160 kbps and sampling rates from 8 to 48kHz</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>4.75 to 12.2 kbps sampled @ 8kHz</td>
-<td>3GPP (.3gp)
-</td>
+<td>
+ 3GPP (.3gp)</td>
</tr>
<tr>
@@ -100,19 +109,21 @@ rates up to 160 kbps and sampling rates from 8 to 48kHz</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz</td>
-<td>3GPP (.3gp)</td>
+<td>
+ 3GPP (.3gp)</td>
</tr>
<tr>
<td>FLAC</td>
<td>&nbsp;</td>
-<td style="text-align: center;"><big>&bull;</big><br><small>(Android 3.1+)</small></td>
+<td style="text-align: center;" nowrap><big>&bull;</big><br><small>(Android 3.1+)</small></td>
<td>Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1
kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz
downsampler does not include a low-pass filter). 16-bit recommended;
no dither applied for 24-bit.
</td>
-<td>FLAC (.flac) only</td>
+<td>
+ FLAC (.flac) only</td>
</tr>
<tr>
@@ -121,7 +132,8 @@ no dither applied for 24-bit.
<td style="text-align: center;"><big>&bull;</big></td>
<td>Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)
</td>
-<td>MP3 (.mp3)</td>
+<td>
+ MP3 (.mp3)</td>
</tr>
<tr>
@@ -129,15 +141,21 @@ no dither applied for 24-bit.
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody </td>
-<td>Type 0 and 1 (.mid, .xmf, .mxmf). Also RTTTL/RTX (.rtttl, .rtx), OTA (.ota), and iMelody (.imy)</td>
+<td>
+ &bull; Type 0 and 1 (.mid, .xmf, .mxmf)<br>
+ &bull; RTTTL/RTX (.rtttl, .rtx)<br>
+ &bull; OTA (.ota)<br>
+ &bull; iMelody (.imy)</td>
</tr>
<tr>
-<td>Ogg Vorbis</td>
+<td>Vorbis</td>
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>Ogg (.ogg)</td>
+<td>
+ &bull; Ogg (.ogg)<br>
+ &bull; Matroska (.mkv, Android 4.0+)</td>
</tr>
<tr>
@@ -145,16 +163,18 @@ no dither applied for 24-bit.
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>8- and 16-bit linear PCM (rates up to limit of hardware)</td>
-<td>WAVE (.wav)</td>
+<td>
+ WAVE (.wav)</td>
</tr>
<tr>
-<td rowspan="4">Image</td>
+<td rowspan="5">Image</td>
<td>JPEG</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>Base+progressive</td>
-<td>JPEG (.jpg)</td>
+<td>
+ JPEG (.jpg)</td>
</tr>
<tr>
@@ -162,7 +182,8 @@ no dither applied for 24-bit.
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>GIF (.gif)</td>
+<td>
+ GIF (.gif)</td>
</tr>
<tr>
@@ -170,7 +191,8 @@ no dither applied for 24-bit.
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>PNG (.png)</td>
+<td>
+ PNG (.png)</td>
</tr>
<tr>
@@ -178,7 +200,17 @@ no dither applied for 24-bit.
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>BMP (.bmp)</td>
+<td>
+ BMP (.bmp)</td>
+</tr>
+
+<tr>
+<td>WEBP</td>
+<td style="text-align: center;" nowrap><big>&bull;</big><br><small>(Android 4.0+)</small></td>
+<td style="text-align: center;" nowrap><big>&bull;</big><br><small>(Android 4.0+)</small></td>
+<td>&nbsp;</td>
+<td>
+ WebP (.webp)</td>
</tr>
@@ -188,15 +220,20 @@ no dither applied for 24-bit.
<td style="text-align: center;"><big>&bull;</big></td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>3GPP (.3gp) and MPEG-4 (.mp4)</td>
+<td>
+ &bull; 3GPP (.3gp)<br>
+ &bull; MPEG-4 (.mp4)</td>
</tr>
<tr>
<td>H.264 AVC</td>
<td style="text-align: center;" nowrap><big>&bull;</big><br><small>(Android 3.0+)</small></td>
-<td style="text-align: center;"><big>&bull;</big></td>
+<td style="text-align: center;" nowrap><big>&bull;</big></td>
<td>Baseline Profile (BP)</td>
-<td>3GPP (.3gp) and MPEG-4 (.mp4). MPEG-TS (.ts, AAC audio only, not seekable, Android 3.0+)</td>
+<td>
+ &bull; 3GPP (.3gp)<br>
+ &bull; MPEG-4 (.mp4)<br>
+ &bull; MPEG-TS (.ts, AAC audio only, not seekable, Android 3.0+)</td>
</tr>
<tr>
@@ -204,15 +241,18 @@ no dither applied for 24-bit.
<td>&nbsp;</td>
<td style="text-align: center;"><big>&bull;</big></td>
<td>&nbsp;</td>
-<td>3GPP (.3gp)</td>
+<td>
+ 3GPP (.3gp)</td>
</tr>
<tr>
<td>VP8</td>
<td>&nbsp;</td>
-<td style="text-align: center;"><big>&bull;</big><br><small>(Android 2.3.3+)</small></td>
-<td>&nbsp;</td>
-<td><a href="http://www.webmproject.org/">WebM</a> (.webm)</td>
+<td style="text-align: center;" nowrap><big>&bull;</big><br><small>(Android 2.3.3+)</small></td>
+<td>Streamable only in Android 4.0 and above</td>
+<td>
+ &bull; <a href="http://www.webmproject.org/">WebM</a> (.webm)<br>
+ &bull; Matroska (.mkv, Android 4.0+)</td>
</tr>
</tbody></table>
@@ -220,7 +260,7 @@ no dither applied for 24-bit.
<h2 id="recommendations">Video Encoding Recommendations</h2>
-<p>Table 2, below, lists examples of video encoding profiles and parameters that the Android media framework supports for playback. In addition to these encoding parameter recommendations, a device's available video recording profiles can be used as a proxy for media playback capabilities. These profiles can be inspected using the {@link android.media.CamcorderProfile CamcorderProfile} class, which is available since API level 8.</p>
+<p>Table 2, below, lists examples of video encoding profiles and parameters that the Android media framework supports for playback. In addition to these encoding parameter recommendations, a device's available <em>video recording</em> profiles can be used as a proxy for media playback capabilities. These profiles can be inspected using the {@link android.media.CamcorderProfile CamcorderProfile} class, which is available since API level 8.</p>
<p class="table-caption" id="encoding-recommendations-table"><strong>Table 2.</strong> Examples of supported video encoding parameters.</p>
@@ -228,45 +268,53 @@ no dither applied for 24-bit.
<thead>
<tr>
<th>&nbsp;</th>
- <th style="background-color:#f3f3f3;font-weight:normal">Lower quality</th>
- <th style="background-color:#f3f3f3;font-weight:normal">Higher quality</th>
+ <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (Low quality)</th>
+ <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (High quality)</th>
+ <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="High definition">HD</a> (Not available on all devices)</th>
</tr>
</thead>
<tbody>
<tr>
<th>Video codec</th>
- <td>H.264 Baseline Profile</th>
- <td>H.264 Baseline Profile</th>
+ <td>H.264 Baseline Profile</td>
+ <td>H.264 Baseline Profile</td>
+ <td>H.264 Baseline Profile</td>
</tr>
<tr>
<th>Video resolution</th>
- <td>176 x 144 px</th>
- <td>480 x 360 px</th>
+ <td>176 x 144 px</td>
+ <td>480 x 360 px</td>
+ <td>1280 x 720 px</td>
</tr>
<tr>
<th>Video frame rate</th>
- <td>12 fps</th>
- <td>30 fps</th>
+ <td>12 fps</td>
+ <td>30 fps</td>
+ <td>30 fps</td>
</tr>
<tr>
<th>Video bitrate</th>
- <td>56 Kbps</th>
- <td>500 Kbps</th>
+ <td>56 Kbps</td>
+ <td>500 Kbps</td>
+ <td>2 Mbps</td>
</tr>
<tr>
<th>Audio codec</th>
- <td>AAC-LC</th>
- <td>AAC-LC</th>
+ <td>AAC-LC</td>
+ <td>AAC-LC</td>
+ <td>AAC-LC</td>
</tr>
<tr>
<th>Audio channels</th>
- <td>1 (mono)</th>
- <td>2 (stereo)</th>
+ <td>1 (mono)</td>
+ <td>2 (stereo)</td>
+ <td>2 (stereo)</td>
</tr>
<tr>
<th>Audio bitrate</th>
- <td>24 Kbps</th>
- <td>128 Kbps</th>
+ <td>24 Kbps</td>
+ <td>128 Kbps</td>
+ <td>192 Kbps</td>
</tr>
</tbody>
</table>
@@ -274,7 +322,8 @@ no dither applied for 24-bit.
<p style="margin-top: 2em">For video content that is streamed over HTTP or RTSP, there are additional requirements:</p>
<ul>
- <li>For 3GPP and MPEG-4 containers, the <code>moov</code> atom must precede any <code>mdat</code> atoms.</li>
+ <li>For 3GPP and MPEG-4 containers, the <code>moov</code> atom must precede any <code>mdat</code> atoms, but must succeed the
+ <code>ftyp</code> atom.</li>
<li>For 3GPP, MPEG-4, and WebM containers, audio and video samples corresponding to the same time offset may be no more than 500 KB apart.
To minimize this audio/video drift, consider interleaving audio and video in smaller chunk sizes.</li>
</ul>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 9c3a0bea18e8..5f74e50fcbc4 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -222,8 +222,7 @@
<li><a href="<?cs var:toroot ?>guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/service-element.html">&lt;service&gt;</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></li>
- <li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a>
- <span class="new">updated</span></li> <!-- ##api level 4## -->
+ <li><a href="<?cs var:toroot ?>guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></li><!-- ##api level 4## -->
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></li> <!-- ##api level 4## -->
<li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></li>
@@ -244,7 +243,7 @@
</a></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/opengl.html">
<span class="en">3D with OpenGL</span>
- </a><span class="new">updated</span></li>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
<span class="en">Property Animation</span>
</a></li>
@@ -271,7 +270,7 @@
<li><a href="<?cs var:toroot ?>guide/topics/media/index.html">
<span class="en">Media</span>
- </a><span class="new">updated</span></li>
+ </a></li>
<li>
<a href="<?cs var:toroot ?>guide/topics/clipboard/copy-paste.html">
<span class="en">Copy and Paste</span>
@@ -408,7 +407,6 @@
</li>
<li><a href="<?cs var:toroot ?>guide/market/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
- <span class="new">new!</span>
</li>
</ul>
</li>
@@ -569,7 +567,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/adt.html">ADT</a></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>
@@ -672,14 +670,14 @@
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/screens_support.html">
<span class="en">Supporting Multiple Screens</span>
- </a> <span class="new">updated</span></div>
+ </a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/practices/screens-distribution.html">
<span class="en">Distributing to Specific Screens</span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/practices/screen-compat-mode.html">
<span class="en">Screen Compatibility Mode</span>
- </a> <span class="new">new!</span></li>
+ </a></li>
<li><a href="<?cs var:toroot ?>guide/practices/screens-support-1.5.html">
<span class="en">Strategies for Android 1.5</span>
</a></li>
@@ -719,7 +717,7 @@
</ul>
</li>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/widget_design.html">
- <span class="en">App Widget Design</span>
+ <span class="en">App Widget Design <span class="new">updated</span></span>
</a></li>
<li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/activity_task_design.html">
<span class="en">Activity and Task Design</span>
@@ -737,11 +735,11 @@
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>guide/practices/design/performance.html">
<span class="en">Designing for Performance</span>
- </a> <span class="new-child">new!</span></div>
+ </a></div>
<ul>
<li><a href="<?cs var:toroot ?>guide/practices/design/jni.html">
<span class="en">JNI Tips</span>
- </a> <span class="new">new!</span></li>
+ </a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>guide/practices/design/responsiveness.html">
diff --git a/docs/html/guide/practices/design/jni.jd b/docs/html/guide/practices/design/jni.jd
index 6e984b00a881..9980efdf0c3f 100644
--- a/docs/html/guide/practices/design/jni.jd
+++ b/docs/html/guide/practices/design/jni.jd
@@ -26,9 +26,9 @@ page.title=JNI Tips
</div>
</div>
-<p>JNI is the Java Native Interface. It defines a way for code written in the
-Java programming language to interact with native
-code: functions written in C/C++. It's VM-neutral, has support for loading code from
+<p>JNI is the Java Native Interface. It defines a way for managed code
+(written in the Java programming language) to interact with native
+code (written in C/C++). It's vendor-neutral, has support for loading code from
dynamic shared libraries, and while cumbersome at times is reasonably efficient.</p>
<p>You really should read through the
@@ -46,13 +46,13 @@ There's a more detailed <a href="http://java.sun.com/docs/books/jni/html/jniTOC.
pointers to pointers to function tables. (In the C++ version, they're classes with a
pointer to a function table and a member function for each JNI function that indirects through
the table.) The JavaVM provides the "invocation interface" functions,
-which allow you to create and destroy the VM. In theory you can have multiple VMs per process,
-but Android's VM only allows one.</p>
+which allow you to create and destroy a JavaVM. In theory you can have multiple JavaVMs per process,
+but Android only allows one.</p>
<p>The JNIEnv provides most of the JNI functions. Your native functions all receive a JNIEnv as
the first argument.</p>
-<p>On some VMs, the JNIEnv is used for thread-local storage. For this reason, <strong>you cannot share a JNIEnv between threads</strong>.
+<p>The JNIEnv is used for thread-local storage. For this reason, <strong>you cannot share a JNIEnv between threads</strong>.
If a piece of code has no other way to get its JNIEnv, you should share
the JavaVM, and use <code>GetEnv</code> to discover the thread's JNIEnv. (Assuming it has one; see <code>AttachCurrentThread</code> below.)</p>
@@ -66,23 +66,22 @@ that header refers to JNIEnv.)</p>
<a name="threads" id="threads"></a>
<h2>Threads</h2>
-<p>All VM threads are Linux threads, scheduled by the kernel. They're usually
-started using Java language features (notably <code>Thread.start</code>),
-but they can also be created elsewhere and then attached to the VM. For
+<p>All threads are Linux threads, scheduled by the kernel. They're usually
+started from managed code (using <code>Thread.start</code>),
+but they can also be created elsewhere and then attached to the JavaVM. For
example, a thread started with <code>pthread_create</code> can be attached
with the JNI <code>AttachCurrentThread</code> or
<code>AttachCurrentThreadAsDaemon</code> functions. Until a thread is
-attached to the VM, it has no JNIEnv, and
-<strong>cannot make JNI calls</strong>.</p>
+attached, it has no JNIEnv, and <strong>cannot make JNI calls</strong>.</p>
-<p>Attaching a natively-created thread causes the VM to allocate and initialize
-a <code>Thread</code> object, add it to the "main" <code>ThreadGroup</code>,
-and add the thread to the set that is visible to the debugger. Calling
-<code>AttachCurrentThread</code> on an already-attached thread is a no-op.</p>
+<p>Attaching a natively-created thread causes a <code>java.lang.Thread</code>
+object to be constructed and added to the "main" <code>ThreadGroup</code>,
+making it visible to the debugger. Calling <code>AttachCurrentThread</code>
+on an already-attached thread is a no-op.</p>
-<p>The Dalvik VM does not suspend threads executing native code. If
+<p>Android does not suspend threads executing native code. If
garbage collection is in progress, or the debugger has issued a suspend
-request, the VM will pause the thread the next time it makes a JNI call.</p>
+request, Android will pause the thread the next time it makes a JNI call.</p>
<p>Threads attached through JNI <strong>must call
<code>DetachCurrentThread</code> before they exit</strong>.
@@ -108,12 +107,12 @@ the argument.)</p>
</ul>
<p>Similarly, to call a method, you'd first get a class object reference and then a method ID. The IDs are often just
-pointers to internal VM data structures. Looking them up may require several string
+pointers to internal runtime data structures. Looking them up may require several string
comparisons, but once you have them the actual call to get the field or invoke the method
is very quick.</p>
<p>If performance is important, it's useful to look the values up once and cache the results
-in your native code. Because there is a limit of one VM per process, it's reasonable
+in your native code. Because there is a limit of one JavaVM per process, it's reasonable
to store this data in a static local structure.</p>
<p>The class references, field IDs, and method IDs are guaranteed valid until the class is unloaded. Classes
@@ -145,13 +144,17 @@ then reloaded, it will be executed again.</p>
<a name="local_and_global_references" id="local_and_global_references"></a>
<h2>Local and Global References</h2>
-<p>Every object that JNI returns is a "local reference". This means that it's valid for the
+<p>Every argument passed to a native method, and almost every object returned
+by a JNI function is a "local reference". This means that it's valid for the
duration of the current native method in the current thread.
-<strong>Even if the object itself continues to live on after the native method returns, the reference is not valid.</strong>
-This applies to all sub-classes of <code>jobject</code>, including
+<strong>Even if the object itself continues to live on after the native method
+returns, the reference is not valid.</strong>
+<p>This applies to all sub-classes of <code>jobject</code>, including
<code>jclass</code>, <code>jstring</code>, and <code>jarray</code>.
-(Dalvik VM will warn you about most reference mis-uses when extended JNI
+(The runtime will warn you about most reference mis-uses when extended JNI
checks are enabled.)</p>
+<p>The only way to get non-local references is via the functions
+<code>NewGlobalRef</code> and <code>NewWeakGlobalRef</code>.
<p>If you want to hold on to a reference for a longer period, you must use
a "global" reference. The <code>NewGlobalRef</code> function takes the
@@ -159,7 +162,7 @@ local reference as an argument and returns a global one.
The global reference is guaranteed to be valid until you call
<code>DeleteGlobalRef</code>.</p>
-<p>This pattern is commonly used when caching copies of class objects obtained
+<p>This pattern is commonly used when caching a jclass returned
from <code>FindClass</code>, e.g.:</p>
<pre>jclass localClass = env-&gt;FindClass("MyClass");
jclass globalClass = reinterpret_cast&lt;jclass&gt;(env-&gt;NewGlobalRef(localClass));</pre>
@@ -181,22 +184,25 @@ not use <code>jobject</code> values as keys.</p>
<p>Programmers are required to "not excessively allocate" local references. In practical terms this means
that if you're creating large numbers of local references, perhaps while running through an array of
-Objects, you should free them manually with
+objects, you should free them manually with
<code>DeleteLocalRef</code> instead of letting JNI do it for you. The
-VM is only required to reserve slots for
+implementation is only required to reserve slots for
16 local references, so if you need more than that you should either delete as you go or use
-<code>EnsureLocalCapacity</code> to reserve more.</p>
+<code>EnsureLocalCapacity</code>/<code>PushLocalFrame</code> to reserve more.</p>
-<p>Note that <code>jfieldID</code>s and <code>jmethodID</code>s are just integers, not object
-references, and should not be passed to <code>NewGlobalRef</code>. The raw data
+<p>Note that <code>jfieldID</code>s and <code>jmethodID</code>s are opaque
+types, not object references, and should not be passed to
+<code>NewGlobalRef</code>. The raw data
pointers returned by functions like <code>GetStringUTFChars</code>
-and <code>GetByteArrayElements</code> are also not objects.</p>
+and <code>GetByteArrayElements</code> are also not objects. (They may be passed
+between threads, and are valid until the matching Release call.)</p>
<p>One unusual case deserves separate mention. If you attach a native
-thread to the VM with <code>AttachCurrentThread</code>, the code you are running will
-never "return" to the VM until the thread detaches from the VM. Any local
-references you create will have to be deleted manually unless you're going
-to detach the thread soon.</p>
+thread with <code>AttachCurrentThread</code>, the code you are running will
+never automatically free local references until the thread detaches. Any local
+references you create will have to be deleted manually. In general, any native
+code that creates local references in a loop probably needs to do some manual
+deletion.</p>
<a name="UTF_8_and_UTF_16_strings" id="UTF_8_and_UTF_16_strings"></a>
<h2>UTF-8 and UTF-16 Strings</h2>
@@ -205,14 +211,15 @@ to detach the thread soon.</p>
modified encoding is useful for C code because it encodes \u0000 as 0xc0 0x80 instead of 0x00.
The nice thing about this is that you can count on having C-style zero-terminated strings,
suitable for use with standard libc string functions. The down side is that you cannot pass
-arbitrary UTF-8 data into the VM and expect it to work correctly.</p>
+arbitrary UTF-8 data to JNI and expect it to work correctly.</p>
-<p>It's usually best to operate with UTF-16 strings. With Android's current VMs, the
-<code>GetStringChars</code> method
-does not require a copy, whereas <code>GetStringUTFChars</code> requires a malloc and a UTF conversion. Note that
+<p>If possible, it's usually faster to operate with UTF-16 strings. Android
+currently does not require a copy in <code>GetStringChars</code>, whereas
+<code>GetStringUTFChars</code> requires an allocation and a conversion to
+UTF-8. Note that
<strong>UTF-16 strings are not zero-terminated</strong>, and \u0000 is allowed,
so you need to hang on to the string length as well as
-the string pointer.</p>
+the jchar pointer.</p>
<p><strong>Don't forget to <code>Release</code> the strings you <code>Get</code></strong>. The
string functions return <code>jchar*</code> or <code>jbyte*</code>, which
@@ -237,9 +244,8 @@ While arrays of objects must be accessed one entry at a time, arrays of
primitives can be read and written directly as if they were declared in C.</p>
<p>To make the interface as efficient as possible without constraining
-the VM implementation,
-the <code>Get&lt;PrimitiveType&gt;ArrayElements</code> family of calls
-allows the VM to either return a pointer to the actual elements, or
+the VM implementation, the <code>Get&lt;PrimitiveType&gt;ArrayElements</code>
+family of calls allows the runtime to either return a pointer to the actual elements, or
allocate some memory and make a copy. Either way, the raw pointer returned
is guaranteed to be valid until the corresponding <code>Release</code> call
is issued (which implies that, if the data wasn't copied, the array object
@@ -253,7 +259,7 @@ non-NULL pointer for the <code>isCopy</code> argument. This is rarely
useful.</p>
<p>The <code>Release</code> call takes a <code>mode</code> argument that can
-have one of three values. The actions performed by the VM depend upon
+have one of three values. The actions performed by the runtime depend upon
whether it returned a pointer to the actual data or a copy of it:</p>
<ul>
@@ -312,8 +318,9 @@ to do is copy data in or out. Consider the following:</p>
}</pre>
<p>This grabs the array, copies the first <code>len</code> byte
-elements out of it, and then releases the array. Depending upon the VM
-policies the <code>Get</code> call will either pin or copy the array contents.
+elements out of it, and then releases the array. Depending upon the
+implementation, the <code>Get</code> call will either pin or copy the array
+contents.
The code copies the data (for perhaps a second time), then calls <code>Release</code>; in this case
<code>JNI_ABORT</code> ensures there's no chance of a third copy.</p>
@@ -335,7 +342,7 @@ to copy data into an array, and <code>GetStringRegion</code> or
<a name="exceptions" id="exceptions"></a>
-<h2>Exception</h2>
+<h2>Exceptions</h2>
<p><strong>You must not call most JNI functions while an exception is pending.</strong>
Your code is expected to notice the exception (via the function's return value,
@@ -369,11 +376,11 @@ you call a method (using a function like <code>CallObjectMethod</code>),
you must always check for an exception, because the return value is not
going to be valid if an exception was thrown.</p>
-<p>Note that exceptions thrown by interpreted code do not "leap over" native code,
-and C++ exceptions thrown by native code are not handled by Dalvik.
+<p>Note that exceptions thrown by interpreted code do not unwind native stack
+frames, and Android does not yet support C++ exceptions.
The JNI <code>Throw</code> and <code>ThrowNew</code> instructions just
-set an exception pointer in the current thread. Upon returning to the VM from
-native code, the exception will be noted and handled appropriately.</p>
+set an exception pointer in the current thread. Upon returning to managed
+from native code, the exception will be noted and handled appropriately.</p>
<p>Native code can "catch" an exception by calling <code>ExceptionCheck</code> or
<code>ExceptionOccurred</code>, and clear it with
@@ -476,23 +483,19 @@ written in C++:</p>
shared library. For Android apps, you may find it useful to get the full
path to the application's private data storage area from the context object.</p>
-<p>This is the recommended approach, but not the only approach. The VM does
-not require explicit registration, nor that you provide a
+<p>This is the recommended approach, but not the only approach. Explicit
+registration is not required, nor is it necessary that you provide a
<code>JNI_OnLoad</code> function.
You can instead use "discovery" of native methods that are named in a
-specific way (see <a href="http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp615">
- the JNI spec</a> for details), though this is less desirable.
-It requires more space in the shared object symbol table,
-loading is slower because it requires string searches through all of the
-loaded shared libraries, and if a method signature is wrong you won't know
+specific way (see <a href="http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp615">the JNI spec</a> for details), though this is less desirable because if a method signature is wrong you won't know
about it until the first time the method is actually used.</p>
<p>One other note about <code>JNI_OnLoad</code>: any <code>FindClass</code>
calls you make from there will happen in the context of the class loader
that was used to load the shared library. Normally <code>FindClass</code>
uses the loader associated with the method at the top of the interpreted
-stack, or if there isn't one (because the thread was just attached to
-the VM) it uses the "system" class loader. This makes
+stack, or if there isn't one (because the thread was just attached) it uses
+the "system" class loader. This makes
<code>JNI_OnLoad</code> a convenient place to look up and cache class
object references.</p>
@@ -515,10 +518,9 @@ that use 64-bit pointers, <strong>you need to stash your native pointers in a
<p>All JNI 1.6 features are supported, with the following exceptions:</p>
<ul>
- <li><code>DefineClass</code> is not implemented. Dalvik does not use
+ <li><code>DefineClass</code> is not implemented. Android does not use
Java bytecodes or class files, so passing in binary class data
- doesn't work. Translation facilities may be added in a future
- version of the VM.</li>
+ doesn't work.</li>
<li>"Weak global" references are implemented, but may only be passed
to <code>NewLocalRef</code>, <code>NewGlobalRef</code>, and
<code>DeleteWeakGlobalRef</code>. (The spec strongly encourages
@@ -536,12 +538,16 @@ that use 64-bit pointers, <strong>you need to stash your native pointers in a
around this requires using explicit registration or moving the
native methods out of inner classes.
<li>Until Android 2.0 (Eclair), it was not possible to use a <code>pthread_key_create</code>
- destructor function to avoid the VM's "thread must be detached before
- exit" check. (The VM also uses a pthread key destructor function,
+ destructor function to avoid the "thread must be detached before
+ exit" check. (The runtime also uses a pthread key destructor function,
so it'd be a race to see which gets called first.)
<li>Until Android 2.2 (Froyo), weak global references were not implemented.
- Older VMs will vigorously reject attempts to use them. You can use
+ Older versions will vigorously reject attempts to use them. You can use
the Android platform version constants to test for support.
+ <li>Until Android 4.0 (Ice Cream Sandwich), JNI local references were
+ actually direct pointers. Ice Cream Sandwich added the indirection
+ necessary to support better garbage collectors, but this means that lots
+ of JNI bugs are undetectable on older releases.
</ul>
@@ -572,8 +578,8 @@ the details of the failure can be found in the exception's detail message.</p>
<p>In logcat, you'll see:</p>
<pre>W/dalvikvm( 880): No implementation found for native LFoo;.myfunc ()V</pre>
-<p>This means that the VM tried to find a matching method but was unsuccessful.
-Some common reasons for this are:</p>
+<p>This means that the runtime tried to find a matching method but was
+unsuccessful. Some common reasons for this are:</p>
<ul>
<li>The library isn't getting loaded. Check the logcat output for
messages about library loading.
@@ -581,10 +587,15 @@ Some common reasons for this are:</p>
is commonly caused by:
<ul>
<li>For lazy method lookup, failing to declare C++ functions
- with <code>extern "C"</code>. You can use <code>arm-eabi-nm</code>
+ with <code>extern "C"</code> and appropriate
+ visibility (<code>JNIEXPORT</code>). Note that prior to Ice Cream
+ Sandwich, the JNIEXPORT macro was incorrect, so using a new GCC with
+ an old <code>jni.h</code> won't work.
+ You can use <code>arm-eabi-nm</code>
to see the symbols as they appear in the library; if they look
mangled (something like <code>_Z15Java_Foo_myfuncP7_JNIEnvP7_jclass</code>
- rather than <code>Java_Foo_myfunc</code>) then you need to
+ rather than <code>Java_Foo_myfunc</code>), or if the symbol type is
+ a lowercase 't' rather than an uppercase 'T', then you need to
adjust the declaration.
<li>For explicit registration, minor errors when entering the
method signature. Make sure that what you're passing to the
@@ -612,7 +623,7 @@ must also wrap the class with 'L' and ';', so a one-dimensional array of
<p>If the class name looks right, you could be running into a class loader
issue. <code>FindClass</code> wants to start the class search in the
-class loader associated with your code. It examines the VM call stack,
+class loader associated with your code. It examines the call stack,
which will look something like:
<pre> Foo.myfunc(Native Method)
Foo.main(Foo.java:10)
@@ -623,14 +634,14 @@ finds the <code>ClassLoader</code> object associated with the <code>Foo</code>
class and uses that.</p>
<p>This usually does what you want. You can get into trouble if you
-create a thread outside the VM (perhaps by calling <code>pthread_create</code>
-and then attaching it to the VM with <code>AttachCurrentThread</code>).
+create a thread yourself (perhaps by calling <code>pthread_create</code>
+and then attaching it with <code>AttachCurrentThread</code>).
Now the stack trace looks like this:</p>
<pre> dalvik.system.NativeStart.run(Native Method)</pre>
<p>The topmost method is <code>NativeStart.run</code>, which isn't part of
your application. If you call <code>FindClass</code> from this thread, the
-VM will start in the "system" class loader instead of the one associated
+JavaVM will start in the "system" class loader instead of the one associated
with your application, so attempts to find app-specific classes will fail.</p>
<p>There are a few ways to work around this:</p>
@@ -656,12 +667,12 @@ with your application, so attempts to find app-specific classes will fail.</p>
<h2>FAQ: How do I share raw data with native code?</h2>
<p>You may find yourself in a situation where you need to access a large
-buffer of raw data from code written in Java and C/C++. Common examples
+buffer of raw data from both managed and native code. Common examples
include manipulation of bitmaps or sound samples. There are two
basic approaches.</p>
<p>You can store the data in a <code>byte[]</code>. This allows very fast
-access from code written in Java. On the native side, however, you're
+access from managed code. On the native side, however, you're
not guaranteed to be able to access the data without having to copy it. In
some implementations, <code>GetByteArrayElements</code> and
<code>GetPrimitiveArrayCritical</code> will return actual pointers to the
@@ -674,8 +685,8 @@ the JNI <code>NewDirectByteBuffer</code> function. Unlike regular
byte buffers, the storage is not allocated on the managed heap, and can
always be accessed directly from native code (get the address
with <code>GetDirectBufferAddress</code>). Depending on how direct
-byte buffer access is implemented in the VM, accessing the data from code
-written in Java can be very slow.</p>
+byte buffer access is implemented, accessing the data from managed code
+can be very slow.</p>
<p>The choice of which to use depends on two factors:</p>
<ol>
@@ -688,5 +699,4 @@ written in Java can be very slow.</p>
</ol>
<p>If there's no clear winner, use a direct byte buffer. Support for them
-is built directly into JNI, and access to them from code written in
-Java can be made faster with VM improvements.</p>
+is built directly into JNI, and performance should improve in future releases.</p>
diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd
index 49aa4981c581..f11139467e7b 100644
--- a/docs/html/guide/practices/ui_guidelines/widget_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd
@@ -9,268 +9,322 @@ parent.link=index.html
<h2>Quickview</h2>
<ul>
-<li>Widgets have six standard sizes on the Home screen</li>
-<li>Widgets have standards for size, frames, shadows, and file format, which you can copy</li>
-<li>A few tricks make it easier to design widgets that fit graphically on the Home screen</li>
+ <li>App Widget layouts should be flexible, resizing to fit their parent container</li>
+ <li>As of Android 3.0, app widgets can depict collections of items and provide a representative
+ preview image for the widget gallery</li>
+ <li>As of Android 3.1, app widgets can be resizable horizontally and/or vertically</li>
+ <li>As of Android 4.0, app widgets have margins automatically applied</li>
</ul>
<h2>In this document</h2>
<ol>
-<li><a href="#anatomy">Standard widget anatomy</a></li>
-<li><a href="#design">Designing a widget</a></li>
-<li><a href="#sizes">Standard widget sizes</a></li>
-<li><a href="#frames">Standard widget frames</a></li>
-<li><a href="#shadows">Standard widget shadows</a></li>
-<li><a href="#tricks">Widget graphics tips and tricks</a></li>
-<li><a href="#file">Widget graphics file format</a></li>
+<li><a href="#anatomy">Standard Widget Anatomy</a></li>
+<li><a href="#design">Designing Widget Layouts and Background Graphics</a></li>
+<li><a href="#templates">Using the App Widget Templates Pack</a></li>
+</ol>
+
+<h2>Downloads</h2>
+
+<ol>
+<li><a href="{@docRoot}shareables/app_widget_templates-v4.0.zip">App Widget Templates Pack,
+ v4.0 &raquo;</a></li>
</ol>
<h2>See also</h2>
<ol>
<li><a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a></li>
-<li><a href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html">AppWidgets blog post</a></li>
+<li>
+ <a href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html">
+ AppWidgets blog post</a></li>
</ol>
</div>
</div>
-<p>Widgets are a feature introduced in Android 1.5. A widget displays an
-application's most important or timely information at a glance, on a user's Home
-screen. The standard Android system image includes several examples of widgets,
-including widgets for Analog Clock, Music, and other applications.</p>
-
-<p>Users pick the widgets they want to display on their Home screens by touching
-&amp; holding an empty area of the Home screen, selecting Widgets from the menu,
-and then selecting the widget they want.</p>
-
-<p><img src="{@docRoot}images/widget_design/widget_examples.png" alt="Example
-Widgets"></p>
-
-<p>This document describes how to design a widget so it fits graphically with
-other widgets and with the other elements of the Android Home screen. It also
-describes some standards for widget artwork and some widget graphics tips and
-tricks from the Android team.<p>
-
-<p>For information about developing widgets, see the <a
-href="{@docRoot}guide/topics/appwidgets/index.html">AppWidgets</a> section of
-the <em>Developer's Guide</em> and the <a
-href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html">AppWidgets</a> blog post.</p>
-
-
-<h2 id="anatomy">Standard widget anatomy</h2>
+<p>App widgets (sometimes just "widgets") are a feature introduced in Android 1.5 and vastly
+improved in Android 3.0 and 3.1. A widget can display an application's most timely or otherwise
+relevant information at a glance, on a user's Home screen. The standard Android system image
+includes several widgets, including a widget for the Analog Clock, Music, and other
+applications.</p>
-<p>Typical Android widgets have three main components: A bounding box, a frame,
-and the widget's graphical controls and other elements. Well-designed widgets
-leave some padding between the edges of the bounding box and the frame, and
-between the inner edges of the frame and the widget's controls. Widgets designed
-to fit visually with other widgets on the Home screen take cues from the other
-elements on the Home screen for alignment; they also use standard shading
-effects. All of these details are described in this document.
-<p><strong>Standard Widget Sizes in Portrait Orientation</strong><br/>
-<img src="{@docRoot}images/widget_design/widget_sizes_portrait.png"
-alt="Standard Widget Sizes in Portrait Orientation"></p>
+<img src="{@docRoot}images/widget_design/widget_examples.png"
+ alt="Example app widgets in Android 4.0" id="widget_examples">
-<p>&nbsp;</p>
+<p class="img-caption"><strong>Figure 1.</strong> Example app widgets in Android 4.0.</p>
-<p><strong>Standard Widget Sizes in Landscape Orientation</strong><br/>
-<img src="{@docRoot}images/widget_design/widget_sizes_landscape.png"
-alt="Standard Widget Sizes in Landscape Orientation"></p>
-
-<h2 id="design">Designing a widget</h2>
+<p>This document describes how to design a widget so that it fits graphically with other widgets and
+with the other elements of the Android Home screen such as launcher icons and shortcuts. It also
+describes some standards for widget artwork and some widget graphics tips and tricks.<p>
-<ol>
-<li><strong>Select a bounding box size for your widget.</strong></li>
+<p>For information about developing widgets, see the <a
+href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a> section of the <em>Developer's
+Guide</em>.</p>
+
+
+<h2 id="anatomy">Standard Widget Anatomy</h2>
+
+<p>Typical Android app widgets have three main components: A bounding box, a frame, and the widget's
+graphical controls and other elements. App widgets can contain a subset of the View widgets in
+Android; supported controls include text labels, buttons, and images. For a full list of available
+Views, see the <a href="{@docRoot}guide/topics/appwidgets/index.html#CreatingLayout">Creating the
+App Widget Layout</a> section in the <em>Developer's Guide</em>. Well-designed widgets leave some
+margins between the edges of the bounding box and the frame, and padding between the inner edges of
+the frame and the widget's controls.</p>
+
+
+<img src="{@docRoot}images/widget_design/widget_terms.png"
+ alt="Widgets generally have margins and padding between bounding box, frame, and controls"
+ id="widget_terms">
+
+<p class="img-caption"><strong>Figure 2.</strong> Widgets generally have margins between the
+bounding box and frame, and padding between the frame and widget controls.</p>
+
+
+<p class="note"><strong>Note: </strong> As of Android 4.0, app widgets are automatically given
+margins between the widget frame and the app widget's bounding box to provide better alignment with
+other widgets and icons on the user's home screen. To take advantage of this strongly recommended
+behavior, set your application's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a> to 14 or
+greater.</p>
+
+<p>Widgets designed to fit visually with other widgets on the Home screen take cues from the other
+elements on the Home screen for alignment; they also use standard shading effects. All of these
+details are described in this document.</p>
+
+
+<h3 id="anatomy_determining_size">Determining a size for your widget</h3>
+
+<p>Each widget must define a <code>minWidth</code> and <code>minHeight</code>, indicating the
+minimum amount of space it should consume by default. When users add a widget to their Home screen,
+it will generally occupy more than the minimum width and height you specify. Android Home screens
+offer users a grid of available spaces into which they can place widgets and icons. This grid can
+vary by device; for example, many handsets offer a 4x4 grid, and tablets can offer a larger, 8x7
+grid. <strong>When your widget is added, it will be stretched to occupy the minimum number of cells,
+horizontally and vertically, required to satisfy its <code>minWidth</code> and
+<code>minHeight</code> constraints.</strong> As we discuss in <a href="#design">Designing Widget
+Layouts and Background Graphics</a> below, using nine-patch backgrounds and flexible layouts for app
+widgets will allow your widget to gracefully adapt to the device's Home screen grid and remain
+usable and aesthetically awesome.</p>
+
+<p>While the width and height of a cell&mdash;as well as the amount of automatic margins applied to
+widgets&mdash;may vary across devices, you can use the table below to roughly estimate your widget's
+minimum dimensions, given the desired number of occupied grid cells:</p>
+
+<table id="cellstable">
+ <thead>
+ <tr>
+ <th># of Cells<br><small style="font-weight:normal">(Columns or Rows)</small></th>
+ <th>Available Size (dp)<br><small style="font-weight:normal">(<code>minWidth</code> or
+ <code>minHeight</code>)</small></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>1</td>
+ <td>40dp</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>110dp</td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>180dp</td>
+ </tr>
+ <tr>
+ <td>4</td>
+ <td>250dp</td>
+ </tr>
+ <tr>
+ <td>&hellip;</td>
+ <td>&hellip;</td>
+ </tr>
+ <tr>
+ <td><em>n</em></td>
+ <td>70 &times; <em>n</em> &minus; 30</td>
+ </tr>
+ </tbody>
+</table>
-<p>The most effective widgets display your application's most useful or timely
-data in the smallest widget size. Users will weigh the usefulness or your widget
-against the portion of the Home screen it covers, so the smaller the better.</p>
+<p>It is a good practice to be conservative with <code>minWidth</code> and <code>minHeight</code>,
+specifying the minimum size that renders the widget in a good default state. For an example of how
+to provide a <code>minWidth</code> and <code>minHeight</code>, suppose you have a music player
+widget that shows the currently playing song artist and title (vertically stacked), a
+<strong>Play</strong> button, and a <strong>Next</strong> button:</p>
-<p>All widgets must fit within the bounding box of one of the six supported
-widget sizes, or better yet, within a pair of portrait and landscape orientation
-sizes, so your widget looks good when the user switches screen
-orientations.</p>
-<p><a href="#sizes">Standard widget sizes</a> illustrates the bounding
-dimensions of the six widget sizes (three in portrait and three in landscape
-orientation).</p>
+<img src="{@docRoot}images/widget_design/music_example.png"
+ alt="An example music player widget" id="music_example">
+<p class="img-caption"><strong>Figure 3.</strong> An example music player widget.</p>
-<li><strong>Select a matching frame.</strong></li>
-<p><a href="#frames">Standard widget frames</a> illustrates the standard frames
-for the six widget sizes, with links so you can download copies for your own
-use. You don't have to use these frames for your widget, but if you do, your
-widgets are more likely to fit visually with other widgets.</p>
+<p>Your minimum height should be the height of your two TextViews for the artist and title, plus
+some text margins. Your minimum width should be the minimum usable widths of the
+<strong>Play</strong> and <strong>Next</strong> buttons, plus the minimum text width (say, the width
+of 10 characters), plus any horizontal text margins.</p>
-<li><strong>Apply standard shadow effect to your graphics.</strong></li>
-<p>Again, you don't have to use this effect, but <a href="#shadows">Standard
-widget shadows</a> shows the Photoshop settings used for standard widgets.</p>
+<img src="{@docRoot}images/widget_design/music_example_redline.png"
+alt="Example sizes and margins for minimum width/height calculations" id="music_example_redline">
-<li><strong>If your widget includes buttons, draw them in three states
-(default, pressed, and selected).</strong></li>
+<p class="img-caption"><strong>Figure 4.</strong> Example sizes and margins for
+<code>minWidth</code>/<code>minHeight</code> calculations. We chose 144dp as an example good minimum
+width for the text labels.</p>
-<p>You can <a
-href="{@docRoot}images/widget_design/Music_widget_button_states.psd">download a
-Photoshop file that contains the three states of the Play button</a>, taken from
-the Music widget, to analyze the Photoshop settings used for the three standard
-button effects.</p>
-<p><a href="{@docRoot}images/widget_design/Music_widget_button_states.psd"> <img
-src="{@docRoot}images/widget_design/buttons.png" alt="Click to download
-Photoshop template"></a></p>
-
-<li><strong>Finish drawing your artwork and then scale and align it to
-fit.</strong></li>
+<p>Example calculations are below:</p>
-<p><a href="#tricks">Widget alignment tips and tricks</a> describes some
-techniques for aligning your widget's graphics inside the standard frames, along
-with a few other widget graphics tricks.</p>
+<ul>
+ <li><code>minWidth</code> = 144dp + (2 &times; 8dp) + (2 &times; 56dp) =
+ <strong>272dp</strong></li>
+ <li><code>minHeight</code> = 48dp + (2 &times; 4dp) = <strong>56dp</strong></li>
+</ul>
-<li><strong>Save your widget with the correct graphics file
-settings.</strong></li>
+<p>If there is any inherent content padding in your widget background nine-patch, you should add to
+<code>minWidth</code> and <code>minHeight</code> accordingly.</p>
-<p><a href="#file">Windows graphics file format</a> describes the correct
-settings for your widget graphics files.</p>
-</ol>
+<h3 id="anatomy_resizable_widgets">Resizable widgets</h3>
+<p>Widgets can be resized horizontally and/or vertically as of Android 3.1, meaning that
+<code>minWidth</code> and <code>minHeight</code> effectively become the <em>default</em> size for
+the widget. You can specify the minimum widget size using <code>minResizeWidth</code> and
+<code>minResizeHeight</code>; these values should specify the size below which the widget would be
+illegible or otherwise unusable.</p>
-<h2 id="sizes">Standard widget sizes</h2>
+<p>This is generally a preferred feature for collection widgets such as those based on {@link
+android.widget.ListView} or {@link android.widget.GridView}.</p>
-<p>There are six standard widget sizes, based on a Home screen grid of 4 x 4
-(portrait) or 4 x 4 (landscape) cells. These dimensions are the bounding boxes
-for the six standard widget sizes. The contents of typical widgets don't draw to
-the edge of these dimensions, but fit inside a frame withing the bounding box,
-as described in <a href="#design">Designing a widget</a>.</p>
-<p>In portrait orientation, each cell is 80 pixels wide by 100 pixels tall (the
-diagram shows a cell in portrait orientation). The three supported widget sizes
-in portrait orientation are:<p>
+<h3 id="anatomy_adding_margins">Adding margins to your app widget</h3>
-<table>
-<tr><th>Cells</th><th>Pixels</th></tr>
-<tr><td>4 x 1</td><td>320 x 100</td></tr>
-<tr><td>3 x 3</td><td>240 x 300</td></tr>
-<tr><td>2 x 2</td><td>160 x 200</td></tr>
-</table>
+<p>As previously mentioned, Android 4.0 will automatically add small, standard margins to each edge
+of widgets on the Home screen, for applications that specify a <code>targetSdkVersion</code> of 14
+or greater. This helps to visually balance the Home screen, and thus <strong>we recommend that you
+do not add any extra margins outside of your app widget's background shape in Android
+4.0</strong>.</p>
-<p><img src="{@docRoot}images/widget_design/portrait_sizes.png" alt="Widget
-dimensions in portrait orientation"></p>
+<p>It's easy to write a single layout that has custom margins applied for earlier versions of the
+platform, and has no extra margins for Android 4.0 and greater. See <a
+href="{@docRoot}guide/topics/appwidgets/index.html#AddingMargins">Adding Margins to App Widgets</a>
+in the <em>Developer's Guide</em> for information on how to achieve this with layout XML.</p>
-<p>In landscape orientation, each cell is 106 pixels wide by 74 pixels tall. The
-three supported widget sizes in landscape orientation are:</p>
-<table>
-<tr><th>Cells</th><th>Pixels</th></tr>
-<tr><td>4 x 1</td><td>424 x 74</td></tr>
-<tr><td>3 x 3</td><td>318 x 222</td></tr>
-<tr><td>2 x 2</td><td>212 x 148</td></tr>
-</table>
+<h2 id="design">Designing Widget Layouts and Background Graphics</h2>
-<p><img src="{@docRoot}images/widget_design/landscape_sizes.png" alt="Widget
-dimensions in landscape orientation"></p>
+<p>Most widgets will have a solid background rectangle or rounded rectangle shape. It is a best
+practice to define this shape using nine patches; one for each screen density (see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> for details).
+Nine-patches can be created with the <a
+href="{@docRoot}guide/developing/tools/draw9patch.html">draw9patch</a> tool, or simply with a
+graphics editing program such as Adobe&reg; Photoshop. This will allow the widget background shape
+to take up the entire available space. The nine-patch should be edge-to-edge with no transparent
+pixels providing extra margins, save for perhaps a few border pixels for <strong>subtle</strong>
+drop shadows or other subtle effects.</p>
+<p class="note"><strong>Note: </strong> Just like with controls in activities, you should ensure
+that interactive controls have distinct visual focused and pressed states using <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state list
+drawables</a>.</p>
-<h2 id="frames">Standard widget frames</h2>
-<p>For each of the six standard widget sizes there is a standard frame. You can
-click the images of the frames in this section to download a Photoshop file for
-that frame, which you can use for your own widgets.<p>
+<img src="{@docRoot}images/ninepatch_raw.png" alt="Nine-patch border pixels" id="ninepatch_raw">
-<p><a href="{@docRoot}images/widget_design/4x1_Widget_Frame_Portrait.psd"> <img
-src="{@docRoot}images/widget_design/4x1_Widget_Frame_Portrait.png" alt="Click to
-download"></a><br>4x1_Widget_Frame_Portrait.psd</p>
+<p class="img-caption"><strong>Figure 5.</strong> Nine-patch border pixels indicating stretchable
+regions and content padding.</p>
-<p><a href="{@docRoot}images/widget_design/3x3_Widget_Frame_Portrait.psd"> <img
-src="{@docRoot}images/widget_design/3x3_Widget_Frame_Portrait.png" alt="Click to
-download"></a><br>3x3_Widget_Frame_Portrait.psd</p>
-<p><a href="{@docRoot}images/widget_design/2x2_Widget_Frame_Portrait.psd"> <img
-src="{@docRoot}images/widget_design/2x2_Widget_Frame_Portrait.png" alt="Click to
-download"></a><br>2x2_Widget_Frame_Portrait.psd</p>
+<p>Some app widgets, such as those using a {@link android.widget.StackView}, have a transparent
+background. For this case, each individual item in the StackView should use a nine-patch background
+that is edge-to-edge with little or no border transparent pixels for margins.</p>
-<p><a href="{@docRoot}images/widget_design/4x1_Widget_Frame_Landscape.psd"> <img
-src="{@docRoot}images/widget_design/4x1_Widget_Frame_Landscape.png" alt="Click
-to download"></a><br>4x1_Widget_Frame_Landscape.psd</p>
+<p>For the contents of the widget, you should use flexible layouts such as {@link
+android.widget.RelativeLayout}, {@link android.widget.LinearLayout}, or {@link
+android.widget.FrameLayout}. Just as your activity layouts must adapt to different physical screen
+sizes, widget layouts must adapt to different Home screen grid cell sizes.</p>
-<p><a href="{@docRoot}images/widget_design/3x3_Widget_Frame_Landscape.psd"> <img
-src="{@docRoot}images/widget_design/3x3_Widget_Frame_Landscape.png" alt="Click
-to download"></a><br>3x3_Widget_Frame_Landscape.psd</p>
+<p>Below is an example layout that a music widget showing text information and two buttons can use.
+It builds upon the previous discussion of adding margins depending on OS version.</p>
-<p><a href="{@docRoot}images/widget_design/2x2_Widget_Frame_Landscape.psd"> <img
-src="{@docRoot}images/widget_design/2x2_Widget_Frame_Landscape.png" alt="Click
-to download"></a><br>2x2_Widget_Frame_Landscape.psd</p>
+<pre>
+&lt;FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_margin="@dimen/widget_margin"&gt;
+ &lt;LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:background="@drawable/my_widget_background"&gt;
-<h2 id="shadows">Standard widget shadows</h2>
+ &lt;TextView
+ android:id="@+id/song_info"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1" /&gt;
-<p>You can apply a shadow effect to your widget's artwork, so it matches other
-standard Android widgets, using the following settings in the Photoshop Layer
-Style dialog box.</p>
+ &lt;Button
+ android:id="@+id/play_button"
+ android:layout_width="@dimen/my_button_width"
+ android:layout_height="match_parent" /&gt;
-<p><img src="{@docRoot}images/widget_design/Layer_Style.png" alt="Layer Style
-settings for standard shadows"></p>
+ &lt;Button
+ android:id="@+id/skip_button"
+ android:layout_width="@dimen/my_button_width"
+ android:layout_height="match_parent" /&gt;
+ &lt;/LinearLayout&gt;
+&lt;/FrameLayout&gt;
+</pre>
+<p>If you now take a look at the example music widget from the previous section, you can begin to
+use flexible layouts attributes like so:</p>
-<h2 id="tricks">Widget graphics tips and tricks</h2>
-<p>The Android team has developed a few tricks for aligning widget artwork
-within standard widget bounding boxes and frames, so the widget aligns visually
-with other widgets and the other elements of the Home screen, as well as other
-techniques for creating widgets.
+<img src="{@docRoot}images/widget_design/music_example_layouts.png"
+ alt="Excerpt flexible layouts and attributes for an example music widget"
+ id="music_example_layouts">
-<ul>
+<p class="img-caption"><strong>Figure 6.</strong> Excerpt flexible layouts and attributes.</p>
-<li>Use a screen shot from the Android SDK emulator to align both the shapes and
-shadows of your widget controls with the Search widget and with other elements
-on the Home screen.</li>
-<p>Cut the widget artwork asset" based on the full size of a cell, including any
-padding you want. (That is, for a 4 x 1 widget, cut the asset at 320 by 100
-pixels.)</p>
+<p>When a user adds the widget to their home screen, on an example Android 4.0 device where each
+grid cell is 80dp &times; 100dp in size and 16dp of margins are automatically applied on all sizes,
+the widget will be stretched, like so:</p>
-<p><img src="{@docRoot}images/widget_design/alignment.png" alt="Aligning widget
-graphics" ></p>
-<li>To reduce banding when exporting a widget, apply the following Photoshop Add
-Noise setting to your graphic.</li>
+<img src="{@docRoot}images/widget_design/music_example_stretched.png"
+ alt="Music widget sitting on an example 80dp x 100dp grid with 16dp of automatic margins
+ added by the system" id="music_example_stretched">
-<p><img src="{@docRoot}images/widget_design/Add_Noise.png" alt="Add Noise
-settings for widget graphics" ></p>
+<p class="img-caption"><strong>Figure 7.</strong> Music widget sitting on an example 80dp x 100dp
+grid with 16dp of automatic margins added by the system.</p>
-<li>Apply 9-patch techniques to shrink the graphic and set the padding of the
-content area. (<a href="{@docRoot}guide/developing/tools/draw9patch.html">See
-the detailed guide here.</a>)</li>
-<p><strong>Note:</strong> The current Android widget templates were designed
-using a custom gradient angle, which means the 9-patch techniques can't be used
-to optimize the size of the asset. However, 9-patch techniques were used to set
-the content area padding.</p>
+<h2 id="templates">Using the App Widget Templates Pack</h2>
-<li>In some cases, devices have low pixel depths that can cause visual banding
-and dithering issues. To solve this, application developers should pass assets
-through a "proxy" drawable defined as <code>XML:<nine-patch
-android:src="@drawable/background" android:dither="true" /></code>. This
-technique references the original artwork, in this case
-<code>"background.9.png"</code>, and instructs the device to dither it as
-needed.</li>
-
-</ul>
+<p>When starting to design a new widget, or updating an existing widget, it's a good idea to first
+look at the widget design templates below. The downloadable package below includes nine-patch
+background graphics, XML, and source Adobe&reg; Photoshop files for multiple screen densities, OS
+version widget styles, and widget colors. The template package also contains graphics useful for
+making your entire widget or parts of your widget (e.g. buttons) interactive.</p>
-<h2 id="file">Widget graphics file format</h2>
-<p>Save your widget artwork using the appropriate bounding box size in PNG-24
-format on a transparent background and in 8-bit color.</p>
+<img src="{@docRoot}images/widget_design/widget_template_excerpts.png"
+ alt="Widget template excerpts" id="widget_template_excerpts">
-<p><img src="{@docRoot}images/widget_design/file_format.png" alt="Widget graphics file format" ></p>
+<p class="img-caption"><strong>Figure 8.</strong> Excerpts from the App Widget Templates Pack
+(medium-density, dark, Android 4.0/previous styles, default/focused/pressed states).</p>
-
+<p>You can obtain the latest App Widget Templates Pack archive using the link below:</p>
+<p style="margin-left:2em"><a href="{@docRoot}shareables/app_widget_templates-v4.0.zip">
+ Download the App Widget Templates Pack for Android 4.0 &raquo;</a></p>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index 78b5b511b603..22283cdc306b 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -327,6 +327,49 @@ following layout classes:</p>
<p>Descendants of these classes are not supported.</p>
+<h3 id="AddingMargins">Adding margins to App Widgets</h3>
+
+<p>Widgets should not generally extend to screen edges and should not visually be flush with other widgets, so you should add margins on all sides around your widget frame.</p>
+
+<p>As of Android 4.0, app widgets are automatically given padding between the widget frame and the app widget's bounding box to provide better alignment with other widgets and icons on the user's home screen. To take advantage of this strongly recommended behavior, set your application's <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">targetSdkVersion</a> to 14 or greater.</p>
+
+<p>It's easy to write a single layout that has custom margins applied for earlier versions of the platform, and has no extra margins for Android 4.0 and greater:</p>
+
+<ol>
+ <li>Set your application's <code>targetSdkVersion</code> to 14 or greater.</li>
+ <li>Create a layout such as the one below, that references a <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">dimension resource</a> for its margins:
+
+<pre>
+&lt;FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ <strong>android:layout_margin="@dimen/widget_margin"&gt;</strong>
+
+ &lt;LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:background="@drawable/my_widget_background"&gt;
+ &hellip;
+ &lt;/LinearLayout&gt;
+
+&lt;/FrameLayout&gt;
+</pre>
+
+ </li>
+ <li>Create two dimensions resources, one in <code>res/values/</code> to provide the pre-Android 4.0 custom margins, and one in <code>res/values-v14/</code> to provide no extra padding for Android 4.0 widgets:
+
+ <p><strong>res/values/dimens.xml</strong>:<br>
+ <pre>&lt;dimen name="widget_margin"&gt;15dp&lt;/dimen&gt;</pre></p>
+
+ <p><strong>res/values-v14/dimens.xml</strong>:<br>
+ <pre>&lt;dimen name="widget_margin"&gt;0dp&lt;/dimen&gt;</pre></p>
+ </li>
+</ol>
+
+<p>Another option is to simply build extra margins into your <a href="{@docRoot}guide/topics/graphics/2d-graphics.html#nine-patch">nine-patch</a> background assets by default, and provide different nine-patches with no margins for API level 14 or later.</p>
+
+
<h2 id="AppWidgetProvider">Using the AppWidgetProvider Class</h2>
<div class="sidebox-wrapper">
diff --git a/docs/html/guide/topics/resources/more-resources.jd b/docs/html/guide/topics/resources/more-resources.jd
index 5f4d5c2cace5..972eab97526c 100644
--- a/docs/html/guide/topics/resources/more-resources.jd
+++ b/docs/html/guide/topics/resources/more-resources.jd
@@ -698,7 +698,7 @@ Resources res = {@link android.content.Context#getResources()};
TypedArray icons = res.{@link android.content.res.Resources#obtainTypedArray(int) obtainTypedArray}(R.array.icons);
Drawable drawable = icons.{@link android.content.res.TypedArray#getDrawable(int) getDrawable}(0);
-TypedArray colors = res.{@link android.content.res.Resources#obtainTypedArray(int) obtainTypedArray}(R.array.icons);
+TypedArray colors = res.{@link android.content.res.Resources#obtainTypedArray(int) obtainTypedArray}(R.array.colors);
int color = colors.{@link android.content.res.TypedArray#getColor(int,int) getColor}(0,0);
</pre>
</dd> <!-- end example -->
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index abc945ab6c36..f12c5eefc950 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -12,7 +12,7 @@ without interupting their current activity</li>
<li>You can attach an intent to your notification that the system will initiate when the
user clicks it</li>
</ul>
-
+
<h2>In this document</h2>
<ol>
<li><a href="#Basics">The Basics</a></li>
@@ -26,7 +26,7 @@ user clicks it</li>
<li><a href="#More">More features</a></li>
</ol>
</li>
- <li><a href="#CustomExpandedView">Creating a Custom Expanded View</a></li>
+ <li><a href="#CustomExpandedView">Creating a Custom Notification Layout</a></li>
</ol>
<h2>Key classes</h2>
<ol>
@@ -36,57 +36,63 @@ user clicks it</li>
</div>
</div>
-<p>A status bar notification adds an icon to the system's status bar
-(with an optional ticker-text message) and an expanded message in the "Notifications" window.
-When the user selects the expanded message, Android fires an
-{@link android.content.Intent} that is defined by the notification (usually to launch an
-{@link android.app.Activity}).
+<p>A status bar notification adds an icon to the system's status bar
+(with an optional ticker-text message) and a notification message in the notifications window.
+When the user selects the notification, Android fires an
+{@link android.content.Intent} that is defined by the {@link android.app.Notification} (usually to
+launch an {@link android.app.Activity}).
You can also configure the notification to alert the user with a sound, a vibration, and flashing
lights on the device.</p>
<p>A status bar notification should be used for any case in
-which a background Service needs to alert the user about an event that requires a response. A background Service
-<strong>should never</strong> launch an Activity on its own in order to receive user interaction.
-The Service should instead create a status bar notification that will launch the Activity
+which a background service needs to alert the user about an event that requires a response. A
+background service
+<strong>should never</strong> launch an activity on its own in order to receive user interaction.
+The service should instead create a status bar notification that will launch the activity
when selected by the user.</p>
-<p>The screenshot below shows the status bar with a notification icon on the left side.</p>
+<p>Figure 1 shows the status bar with a notification icon on the left side.</p>
<img src="{@docRoot}images/status_bar.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> Status bar with a notification.</p>
+
+<p>Figure 2 shows the notification's message in the notifications window.</p>
-<p>The next screenshot shows the notification's expanded message in the "Notifications" window.
-The user can reveal the Notifications window by pulling down the status bar
-(or selecting <em>Notifications</em> from the Home options menu).</p>
<img src="{@docRoot}images/notifications_window.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The notifications window.</p>
<h2 id="Basics">The Basics</h2>
-<p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status bar
-notification. Because an Activity can perform actions only while it is
-active and in focus, you should create your status bar notifications from a
-Service. This way, the notification can be created from the background,
+<p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status bar
+notification. Because an activity can perform actions only while it is
+running in the foreground and its window has focus, you will usually create status bar notifications
+from a
+service. This way, the notification can be created from the background,
while the user is using another application or
while the device is asleep. To create a notification, you must use two
classes: {@link android.app.Notification} and {@link android.app.NotificationManager}.</p>
-<p>Use an instance of the {@link android.app.Notification} class to define the properties of your
-status bar notification, such as the status bar icon, the expanded message, and extra settings such
-as a sound to play. The {@link android.app.NotificationManager} is an Android system service that
-executes and manages all Notifications. You do not instantiate the NotificationManager. In order
-to give it your Notification, you must retrieve a reference to the NotificationManager with
-{@link android.app.Activity#getSystemService(String) getSystemService()} and
-then, when you want to notify the user, pass it your Notification object with
+<p>Use an instance of the {@link android.app.Notification} class to define the properties of your
+status bar notification, such as the status bar icon, the notification message, and extra settings
+such as a sound to play. The {@link android.app.NotificationManager} is an Android system service
+that executes and manages all status bar notifications. You do not instantiate the
+{@link android.app.NotificationManager} directly. In order
+to give it your {@link android.app.Notification}, you must retrieve a reference to the
+{@link android.app.NotificationManager} with
+{@link android.app.Activity#getSystemService(String) getSystemService()} and
+then, when you want to notify the user, pass it your {@link android.app.Notification} with
{@link android.app.NotificationManager#notify(int,Notification) notify()}. </p>
<p>To create a status bar notification:</p>
<ol>
- <li>Get a reference to the NotificationManager:
+ <li>Get a reference to the {@link android.app.NotificationManager}:
<pre>
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
</pre>
</li>
- <li>Instantiate the Notification:
+ <!-- use Notification.Builder in 3.0 -->
+ <li>Instantiate the {@link android.app.Notification}:
<pre>
int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
@@ -95,7 +101,7 @@ long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
</pre>
</li>
- <li>Define the Notification's expanded message and Intent:
+ <li>Define the notification's message and {@link android.app.PendingIntent}:
<pre>
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
@@ -106,7 +112,7 @@ PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationInt
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
</pre>
</li>
- <li>Pass the Notification to the NotificationManager:
+ <li>Pass the {@link android.app.Notification} to the {@link android.app.NotificationManager}:
<pre>
private static final int HELLO_ID = 1;
@@ -121,38 +127,41 @@ mNotificationManager.notify(HELLO_ID, notification);
<p>The {@link android.app.NotificationManager} is a system service that manages all
notifications. You must retrieve a reference to it with the
-{@link android.app.Activity#getSystemService(String) getSystemService()} method.
+{@link android.app.Activity#getSystemService(String) getSystemService()} method.
For example:</p>
<pre>
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
</pre>
-<p>When you want to send your status bar notification, pass the Notification object
-to the NotificationManager with {@link android.app.NotificationManager#notify(int,Notification)}.
-The first parameter is the unique ID for the Notification and the second is the Notification object.
-The ID uniquely identifies the Notification from within your
-application. This is necessary if you need to update the Notification or (if
-your application manages different kinds of Notifications) select the appropriate action
-when the user returns to your application via the Intent defined in the Notification.</p>
+<p>When you want to deliver your status bar notification, pass the {@link android.app.Notification}
+to the {@link android.app.NotificationManager} with {@link
+android.app.NotificationManager#notify(int,Notification)}.
+The first parameter is the unique ID for the notification and the second is the {@link
+android.app.Notification} object.
+The ID uniquely identifies the notification from within your
+application. The ID is necessary if you need to update the notification or (if
+your application manages different kinds of notifications) select the appropriate action
+when the user returns to your application via the intent defined in the notification.</p>
-<p>To clear the status bar notification when the user selects it from the Notifications
-window, add the "FLAG_AUTO_CANCEL" flag to your Notification object. You can also clear it
-manually with {@link android.app.NotificationManager#cancel(int)}, passing it the notification ID,
-or clear all your Notifications with {@link android.app.NotificationManager#cancelAll()}.</p>
+<p>To clear the status bar notification when the user selects it from the notifications
+window, add the "FLAG_AUTO_CANCEL" flag to your {@link android.app.Notification}. You can
+also clear it manually with {@link android.app.NotificationManager#cancel(int)}, passing it the
+notification ID, or clear all your notifications with {@link
+android.app.NotificationManager#cancelAll()}.</p>
<h2 id="CreateANotification">Creating a Notification</h2>
<p>A {@link android.app.Notification} object defines the details of the notification
-message that is displayed in the status bar and "Notifications" window, and any other
+message that is displayed in the status bar and notifications window, and any other
alert settings, such as sounds and blinking lights.</p>
<p>A status bar notification <em>requires</em> all of the following:</p>
<ul>
<li>An icon for the status bar</li>
- <li>A title and expanded message for the expanded view (unless you define a
- <a href="#CustomExpandedView">custom expanded view</a>)</li>
+ <li>A title and message, unless you define a
+ <a href="#CustomExpandedView">custom notification layout</a></li>
<li>A {@link android.app.PendingIntent}, to be fired when the notification is selected</li>
</ul>
<p>Optional settings for the status bar notification include:</p>
@@ -163,18 +172,18 @@ alert settings, such as sounds and blinking lights.</p>
<li>A flashing LED setting</li>
</ul>
-<p>The starter-kit for a new Notification includes the
-{@link android.app.Notification#Notification(int,CharSequence,long)} constructor and the
-{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)}
-method. These define all the required settings for a Notification.
-The following snippet demonstrates a basic Notification setup:</p>
+<p>The starter-kit for a new notification includes the
+{@link android.app.Notification#Notification(int,CharSequence,long)} constructor and the
+{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)}
+method. These define all the required settings for a notification.
+The following snippet demonstrates a basic notification setup:</p>
<pre>
int icon = R.drawable.notification_icon; // icon from resources
CharSequence tickerText = "Hello"; // ticker-text
long when = System.currentTimeMillis(); // notification time
Context context = getApplicationContext(); // application Context
-CharSequence contentTitle = "My notification"; // expanded message title
-CharSequence contentText = "Hello World!"; // expanded message text
+CharSequence contentTitle = "My notification"; // message title
+CharSequence contentText = "Hello World!"; // message text
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
@@ -187,32 +196,33 @@ notification.setLatestEventInfo(context, contentTitle, contentText, contentInten
<h3 id="Updating">Updating the notification</h3>
-<p>You can update the information in your status bar notification as events
-continue to occur in your application. For example, when a new SMS text message arrives
-before previous messages have been read, the Messaging application updates the existing
+<p>You can update the information in your status bar notification as events
+continue to occur in your application. For example, when a new SMS text message arrives
+before previous messages have been read, the Messaging application updates the existing
notification to display the total number of new messages received.
-This practice of updating an existing Notification is much better than adding new Notifications
-to the NotificationManager because it avoids clutter in the Notifications window.</p>
+This practice of updating an existing notification is much better than adding new
+notifications, because it avoids clutter in the notifications window.</p>
<p>Because each notification is uniquely identified
-by the NotificationManager with an integer ID, you can revise the notification by calling
-{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} with new values, change some field values of the Notification, and then call
+by the {@link android.app.NotificationManager} with an integer ID, you can revise the notification
+by calling {@link
+android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
+setLatestEventInfo()} with new values, change some field values of the notification, and then call
{@link android.app.NotificationManager#notify(int,Notification) notify()} again.</p>
<p>You can revise each property with the object member fields
-(except for the Context and the expanded message title and text). You should always
-revise the text message when you update the notification by calling
+(except for the {@link android.content.Context} and the notification title and text). You
+should always revise the text message when you update the notification by calling
{@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} with new values for <var>contentTitle</var> and <var>contentText</var>.
-Then call {@link android.app.NotificationManager#notify(int,Notification) notify()} to update the
-notification. (Of course, if you've created a <a href="#CustomExpandedView">custom expanded
-view</a>, then updating these title and text values has no effect.)</p>
+setLatestEventInfo()} with new values for <var>contentTitle</var> and <var>contentText</var>.
+Then call {@link android.app.NotificationManager#notify(int,Notification) notify()} to update the
+notification. (Of course, if you've created a <a href="#CustomExpandedView">custom notification
+layout</a>, then updating these title and text values has no effect.)</p>
<h3 id="Sound">Adding a sound</h3>
-<p>You can alert the user with the default notification sound
+<p>You can alert the user with the default notification sound
(which is defined by the user) or with a sound specified by your application.</p>
<p>To use the user's default sound, add "DEFAULT_SOUND" to the <var>defaults</var> field:</p>
@@ -227,31 +237,35 @@ The following example uses a known audio file saved to the device SD card:</p>
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
</pre>
-<p>In the next example, the audio file is chosen from the internal
+<p>In the next example, the audio file is chosen from the internal
{@link android.provider.MediaStore.Audio.Media MediaStore}'s {@link android.content.ContentProvider}:</p>
<pre>
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
</pre>
-<p>In this case, the exact ID of the media file ("6") is known and appended to the content
+<p>In this case, the exact ID of the media file ("6") is known and appended to the content
{@link android.net.Uri}. If you don't know the exact ID, you must query all the
-media available in the MediaStore with a {@link android.content.ContentResolver}.
+media available in the {@link android.provider.MediaStore} with a {@link
+android.content.ContentResolver}.
See the <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
documentation for more information on using a ContentResolver.</p>
<p>If you want the sound to continuously repeat until the user responds to the notification
-or the notification is cancelled, add "FLAG_INSISTENT" to the <var>flags</var> field.</p>
+or the notification is cancelled, add {@link android.app.Notification#FLAG_INSISTENT} to the
+<var>flags</var> field.</p>
-<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
-"DEFAULT_SOUND", then the default sound overrides any sound defined by the <var>sound</var> field.</p>
+<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
+{@link android.app.Notification#DEFAULT_SOUND}, then the default sound overrides any sound defined
+by the <var>sound</var> field.</p>
<h3 id="Vibration">Adding vibration</h3>
-<p>You can alert the user with the the default
+<p>You can alert the user with the the default
vibration pattern or with a vibration pattern defined by your application.</p>
-<p>To use the default pattern, add "DEFAULT_VIBRATE" to the <var>defaults</var> field:</p>
+<p>To use the default pattern, add {@link android.app.Notification#DEFAULT_VIBRATE} to the
+<var>defaults</var> field:</p>
<pre>
notification.defaults |= Notification.DEFAULT_VIBRATE;
</pre>
@@ -264,30 +278,32 @@ notification.vibrate = vibrate;
</pre>
<p>The long array defines the alternating pattern for the length of vibration off and on
-(in milliseconds). The first value is how long to wait (off) before beginning, the second
-value is the length of the first vibration, the third is the next length off, and so on.
+(in milliseconds). The first value is how long to wait (off) before beginning, the second
+value is the length of the first vibration, the third is the next length off, and so on.
The pattern can be as long as you like, but it can't be set to repeat.
</p>
-<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
-"DEFAULT_VIBRATE", then the default vibration overrides any vibration defined by the
+<p class="note"><strong>Note:</strong> If the <var>defaults</var> field includes
+{@link android.app.Notification#DEFAULT_VIBRATE}, then the default vibration overrides any vibration
+defined by the
<var>vibrate</var> field.</p>
<h3 id="Lights">Adding flashing lights</h3>
-<p>To alert the user by flashing LED lights, you can implement the default
+<p>To alert the user by flashing LED lights, you can implement the default
light pattern (if available), or define your own color and pattern for the lights.</p>
-<p>To use the default light setting, add "DEFAULT_LIGHTS" to the <var>defaults</var> field:</p>
+<p>To use the default light setting, add {@link android.app.Notification#DEFAULT_LIGHTS} to the
+<var>defaults</var> field:</p>
<pre>
notification.defaults |= Notification.DEFAULT_LIGHTS;
</pre>
<p>To define your own color and pattern, define a value for the <var>ledARGB</var> field
-(for the color), the <var>ledOffMS</var> field (length of time, in milliseconds, to
-keep the light off), the <var>ledOnMS</var> (length of time, in milliseconds, to keep the light on),
-and also add "FLAG_SHOW_LIGHTS" to the <var>flags</var> field:</p>
+(for the color), the <var>ledOffMS</var> field (length of time, in milliseconds, to
+keep the light off), the <var>ledOnMS</var> (length of time, in milliseconds, to keep the light on),
+and also add {@link android.app.Notification#FLAG_SHOW_LIGHTS} to the <var>flags</var> field:</p>
<pre>
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
@@ -295,114 +311,161 @@ notification.ledOffMS = 1000;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
</pre>
-<p>In this example, the green light repeatedly flashes on for 300 milliseconds and
-turns off for one second. Not every color in the spectrum is supported by the
-device LEDs, and not every device supports the same colors, so the hardware
+<p>In this example, the green light repeatedly flashes on for 300 milliseconds and
+turns off for one second. Not every color in the spectrum is supported by the
+device LEDs, and not every device supports the same colors, so the hardware
estimates to the best of its ability. Green is the most common notification color.</p>
<h3 id="More">More features</h3>
<p>You can add several more features to your notifications
-using Notification fields and flags. Some useful features include the following:</p>
+using {@link android.app.Notification} fields and flags. Some useful features include the
+following:</p>
<dl>
- <dt>"FLAG_AUTO_CANCEL" flag</dt>
+ <dt>{@link android.app.Notification#FLAG_AUTO_CANCEL} flag</dt>
<dd>Add this to the <var>flags</var> field to automatically cancel the notification
- after it is selected from the Notifications window.</dd>
- <dt>"FLAG_INSISTENT" flag</dt>
+ after it is selected from the notifications window.</dd>
+ <dt>{@link android.app.Notification#FLAG_INSISTENT} flag</dt>
<dd>Add this to the <var>flags</var> field to repeat the audio until the
user responds.</dd>
- <dt>"FLAG_ONGOING_EVENT" flag</dt>
+ <dt>{@link android.app.Notification#FLAG_ONGOING_EVENT} flag</dt>
<dd>Add this to the <var>flags</var> field to group the notification under the "Ongoing"
- title in the Notifications window. This indicates that the application is on-going &mdash;
- its processes is still running in the background, even when the application is not
+ title in the notifications window. This indicates that the application is on-going &mdash;
+ its processes are still running in the background, even when the application is not
visible (such as with music or a phone call).</dd>
- <dt>"FLAG_NO_CLEAR" flag</dt>
- <dd>Add this to the <var>flags</var> field to indicate that the notification should
- <em>not</em> be cleared by the "Clear notifications" button. This is particularly useful if
+ <dt>{@link android.app.Notification#FLAG_NO_CLEAR} flag</dt>
+ <dd>Add this to the <var>flags</var> field to indicate that the notification should
+ <em>not</em> be cleared by the "Clear notifications" button. This is particularly useful if
your notification is on-going.</dd>
- <dt><var>number</var> field</dt>
+ <dt>{@link android.app.Notification#number} field</dt>
<dd>This value indicates the current number of events represented by the notification.
The appropriate number is overlaid on top of the status bar icon.
If you intend to use this field, then you must start with "1" when the Notification is first
created. (If you change the value from zero to anything greater during an update, the number
is not shown.)</dd>
- <dt><var>iconLevel</var> field</dt>
- <dd>This value indicates the current level of a
+ <dt>{@link android.app.Notification#iconLevel} field</dt>
+ <dd>This value indicates the current level of a
{@link android.graphics.drawable.LevelListDrawable} that is used for the notification icon.
- You can animate the icon in the status bar by changing this value to correlate with the
+ You can animate the icon in the status bar by changing this value to correlate with the
drawable's defined in a LevelListDrawable. See the {@link android.graphics.drawable.LevelListDrawable}
reference for more information.</dd>
</dl>
-<p>See the {@link android.app.Notification} class reference for more information about additional
+<p>See the {@link android.app.Notification} class reference for more information about additional
features that you can customize for your application.</p>
-<h2 id="CustomExpandedView">Creating a Custom Expanded View</h2>
+<h2 id="CustomExpandedView">Creating a Custom Notification Layout</h2>
-<img src="{@docRoot}images/custom_message.png" alt="" style="float:right;" />
+<div class="figure" style="width:200px;margin-top:0">
+<img src="{@docRoot}images/custom_message.png" alt="" />
+<p class="img-caption"><strong>Figure 3.</strong> Notification with a custom layout.</p>
+</div>
-<p>By default, the expanded view used in the "Notifications" window includes a basic title and text
-message. These are defined by the <var>contentTitle</var> and <var>contentText</var>
+<p>By default, the notification that appears in the notifications window includes a title
+and the message text.
+These are defined by the <var>contentTitle</var> and <var>contentText</var>
parameters of the {@link android.app.Notification#setLatestEventInfo(Context,CharSequence,CharSequence,PendingIntent)
-setLatestEventInfo()} method. However, you can also define a custom layout for the expanded view using
-{@link android.widget.RemoteViews}. The screenshot to the right shows an example of a
-custom expanded view that uses an ImageView and TextView in a LinearLayout.</p>
+setLatestEventInfo()} method. However, you can also define a custom layout for the
+notification using
+{@link android.widget.RemoteViews}. Figure 3 shows an example of a
+custom notification layout. It looks similar to the default notification, but is
+actually created with a custom XML layout.</p>
-<p>To define your own layout for the expanded message,
-instantiate a {@link android.widget.RemoteViews} object and
-pass it to the <var>contentView</var> field of your Notification. Pass the
-{@link android.app.PendingIntent} to the <var>contentIntent</var> field.</p>
+<p>To define your own layout for the notification,
+instantiate a {@link android.widget.RemoteViews} object that inflates a custom layout file, then
+pass the {@link android.widget.RemoteViews} to the <var>contentView</var> field of your
+Notification.</p>
-<p>Creating a custom expanded view is best understood with an example:</p>
+<p>Creating a custom notification layout is best understood with an example:</p>
<ol>
- <li>Create the XML layout for the expanded view.
- For example, create a layout file called <code>custom_notification_layout.xml</code> and
- build it like so:
+ <li>Create the XML layout for the notification.
+ For example, the following layout is called <code>custom_notification.xml</code>:
<pre>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:padding="3dp"
- >
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/layout"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:padding="10dp" >
&lt;ImageView android:id="@+id/image"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_marginRight="10dp"
- />
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:layout_alignParentLeft="true"
+ android:layout_marginRight="10dp" />
+ &lt;TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/image"
+ style="@style/NotificationTitle" />
&lt;TextView android:id="@+id/text"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:textColor="#000"
- />
-&lt;/LinearLayout>
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/image"
+ android:layout_below="@id/title"
+ style="@style/NotificationText" />
+&lt;/RelativeLayout>
</pre>
- <p>This layout is used for the expanded view,
- but the content of the ImageView and TextView still needs to be defined by the application.
- RemoteViews offers some convenient methods that allow you to define this content...</p>
+ <p>Notice that the two {@link android.widget.TextView} elements include the {@code style}
+attribute. It's important that you use style resources for the text in your custom
+notifications, because the background color of the notification can vary across different
+devices and platform versions. Beginning with Android 2.3 (API level 9), the system defines a
+style for the text it uses for the default notification layouts. Thus, you should apply
+that style when running on Android 2.3 or higher to ensure that your text is visible against
+the background.</p>
+
+ <p>For example, to use the standard text colors on versions of Android lower than 2.3, you
+should use the following styles for {@code res/values/styles.xml}:</p>
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;resources>
+ &lt;style name="NotificationText">
+ &lt;item name="android:textColor">?android:attr/textColorPrimary&lt;/item>
+ &lt;/style>
+ &lt;style name="NotificationTitle">
+ &lt;item name="android:textColor">?android:attr/textColorPrimary&lt;/item>
+ &lt;item name="android:textStyle">bold&lt;/item>
+ &lt;/style>
+ &lt;!-- If you want a slightly different color for some text,
+ consider using ?android:attr/textColorSecondary -->
+&lt;/resources>
+</pre>
+ <p>Then, to apply the system's default colors for notifications on Android
+2.3 and higher, use the following styles for {@code res/values-v9/styles.xml}:</p>
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;resources>
+ &lt;style name="NotificationText" parent="android:TextAppearance.StatusBar.EventContent" />
+ &lt;style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />
+&lt;/resources>
+</pre>
+ <p>Now, when running on Android 2.3 (API level 9) or higher, the text in your custom view will
+use the same colors that the system does for default notifications. This is important because later
+versions of Android actually change the background color of the notifications to be dark. Inheriting
+the system's styles ensures that your text will be light in such cases, but also if the background
+is some other unexpected color, your text will also change as appropriate.</p>
</li>
- <li>In the application code, use the RemoveViews
+ <li>Now, in the application code, use the RemoveViews
methods to define the image and text. Then pass the RemoteViews object to the <var>contentView</var>
field of the Notification, as shown in this example:
<pre>
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.notification_image);
-contentView.setTextViewText(R.id.text, "Hello, this message is in a custom expanded view");
+contentView.setTextViewText(R.id.title, "Custom notification");
+contentView.setTextViewText(R.id.text, "This is a custom layout");
notification.contentView = contentView;
</pre>
- <p>As shown here, pass the application's package name and the layout
+ <p>As shown here, pass the application's package name and the layout
resource ID to the RemoteViews constructor. Then, define the content for the ImageView and TextView,
using the {@link android.widget.RemoteViews#setImageViewResource(int, int) setImageViewResource()}
and {@link android.widget.RemoteViews#setTextViewText(int, CharSequence) setTextViewText()}.
In each case, pass the reference ID of the appropriate View object that you want to set, along with
- the value for that View. Finally, the RemoteViews object is passed to the Notification in the
+ the value for that View. Finally, the RemoteViews object is passed to the Notification in the
<var>contentView</var> field.</p>
</li>
@@ -416,23 +479,23 @@ PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationInt
notification.contentIntent = contentIntent;
</pre>
</li>
-
+
<li>The notification can now be sent as usual:
<pre>mNotificationManager.notify(CUSTOM_VIEW_ID, notification);</pre>
</li>
</ol>
-<p>The RemoteViews class also includes methods that you can use to easily add a
-{@link android.widget.Chronometer} or {@link android.widget.ProgressBar}
-in your notification's expanded view. For more information about creating custom layouts with
-RemoteViews, refer to the {@link android.widget.RemoteViews} class reference.</p>
+<p>The {@link android.widget.RemoteViews} class also includes methods that you can use to easily add
+a {@link android.widget.Chronometer} or {@link android.widget.ProgressBar}
+in your notification's layout. For more information about creating custom layouts for your
+notification, refer to the {@link android.widget.RemoteViews} class reference.</p>
-<p class="warning"><strong>Note:</strong>
-When creating a custom expanded view, you must take special care to ensure that your
-custom layout functions properly in different device orientations and resolutions. While this
+<p class="caution"><strong>Caution:</strong>
+When creating a custom notification layout, you must take special care to ensure that your
+custom layout functions properly in different device orientations and resolutions. While this
advice applies to all View layouts created on Android, it is especially important in this case
-because your layout real estate is very restricted. So don't make your custom layout too
+because your layout real estate is very restricted. So don't make your custom layout too
complex and be sure to test it in various configurations.</p>
diff --git a/docs/html/guide/topics/usb/adk.jd b/docs/html/guide/topics/usb/adk.jd
index 463ec9c2015a..120576bf5bc0 100644
--- a/docs/html/guide/topics/usb/adk.jd
+++ b/docs/html/guide/topics/usb/adk.jd
@@ -77,6 +77,10 @@ page.title=Android Open Accessory Development Kit
DIY Drones</a></li>
<li><a href=
+ "http://mbed.org/order/">
+ mbed</a></li>
+
+ <li><a href=
"http://www.microchip.com/android">
Microchip</a></li>
@@ -130,6 +134,11 @@ page.title=Android Open Accessory Development Kit
Drones</a> provides an Arduino-compatible board geared towards RC (radio controlled) and UAV
(unmanned aerial vehicle) enthusiasts.</li>
+ <li><a href="http://mbed.org/order/">mbed</a> provides a microcontroller and a library
+ to develop accessories that support the Android accessory protocol. For more information, see
+ <a href="http://mbed.org/cookbook/mbed-with-Android-ADK">mbed with the Android ADK</a>.
+ </li>
+
<li><a href="http://www.microchip.com/android">Microchip</a> provides a PIC based USB
microcontroller board.</li>
diff --git a/docs/html/images/custom_message.png b/docs/html/images/custom_message.png
index ea7c7160e020..00b763239c40 100755
--- a/docs/html/images/custom_message.png
+++ b/docs/html/images/custom_message.png
Binary files differ
diff --git a/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.png b/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.png
deleted file mode 100644
index a73a09a61f8d..000000000000
--- a/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.psd b/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.psd
deleted file mode 100644
index cd869b5861f3..000000000000
--- a/docs/html/images/widget_design/2x2_Widget_Frame_Landscape.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.png b/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.png
deleted file mode 100644
index 95ac03118c42..000000000000
--- a/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.psd b/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.psd
deleted file mode 100644
index 9f0a7b0cf3af..000000000000
--- a/docs/html/images/widget_design/2x2_Widget_Frame_Portrait.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.png b/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.png
deleted file mode 100644
index 14013dc0973d..000000000000
--- a/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.psd b/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.psd
deleted file mode 100644
index 50a2b8ca0808..000000000000
--- a/docs/html/images/widget_design/3x3_Widget_Frame_Landscape.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.png b/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.png
deleted file mode 100644
index 22f99f8631b0..000000000000
--- a/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.psd b/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.psd
deleted file mode 100644
index 591e963d6e02..000000000000
--- a/docs/html/images/widget_design/3x3_Widget_Frame_Portrait.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.png b/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.png
deleted file mode 100644
index c6a3f7adea71..000000000000
--- a/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.psd b/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.psd
deleted file mode 100644
index ec811798ba05..000000000000
--- a/docs/html/images/widget_design/4x1_Widget_Frame_Landscape.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.png b/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.png
deleted file mode 100644
index 5cc8665cdb67..000000000000
--- a/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.psd b/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.psd
deleted file mode 100644
index bad7ad126811..000000000000
--- a/docs/html/images/widget_design/4x1_Widget_Frame_Portrait.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/Add_Noise.png b/docs/html/images/widget_design/Add_Noise.png
deleted file mode 100644
index c323bb490c36..000000000000
--- a/docs/html/images/widget_design/Add_Noise.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/Layer_Style.png b/docs/html/images/widget_design/Layer_Style.png
deleted file mode 100644
index 757780314244..000000000000
--- a/docs/html/images/widget_design/Layer_Style.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/Music_widget_button_states.psd b/docs/html/images/widget_design/Music_widget_button_states.psd
deleted file mode 100644
index 17f3573d5097..000000000000
--- a/docs/html/images/widget_design/Music_widget_button_states.psd
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/alignment.png b/docs/html/images/widget_design/alignment.png
deleted file mode 100644
index 2e794dde0ea0..000000000000
--- a/docs/html/images/widget_design/alignment.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/buttons.png b/docs/html/images/widget_design/buttons.png
deleted file mode 100644
index a6d1df275f99..000000000000
--- a/docs/html/images/widget_design/buttons.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/file_format.png b/docs/html/images/widget_design/file_format.png
deleted file mode 100644
index 26f0e562ab67..000000000000
--- a/docs/html/images/widget_design/file_format.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/landscape_sizes.png b/docs/html/images/widget_design/landscape_sizes.png
deleted file mode 100644
index 798bb159fd66..000000000000
--- a/docs/html/images/widget_design/landscape_sizes.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/music_example.png b/docs/html/images/widget_design/music_example.png
new file mode 100644
index 000000000000..885057e0a568
--- /dev/null
+++ b/docs/html/images/widget_design/music_example.png
Binary files differ
diff --git a/docs/html/images/widget_design/music_example_layouts.png b/docs/html/images/widget_design/music_example_layouts.png
new file mode 100644
index 000000000000..31601b94452c
--- /dev/null
+++ b/docs/html/images/widget_design/music_example_layouts.png
Binary files differ
diff --git a/docs/html/images/widget_design/music_example_redline.png b/docs/html/images/widget_design/music_example_redline.png
new file mode 100644
index 000000000000..85794b8936b3
--- /dev/null
+++ b/docs/html/images/widget_design/music_example_redline.png
Binary files differ
diff --git a/docs/html/images/widget_design/music_example_stretched.png b/docs/html/images/widget_design/music_example_stretched.png
new file mode 100644
index 000000000000..28c2fb3cbfaf
--- /dev/null
+++ b/docs/html/images/widget_design/music_example_stretched.png
Binary files differ
diff --git a/docs/html/images/widget_design/portrait_sizes.png b/docs/html/images/widget_design/portrait_sizes.png
deleted file mode 100644
index 9da252a4782c..000000000000
--- a/docs/html/images/widget_design/portrait_sizes.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/widget_examples.png b/docs/html/images/widget_design/widget_examples.png
index e27ffbb24cfe..277b69a8bd53 100644
--- a/docs/html/images/widget_design/widget_examples.png
+++ b/docs/html/images/widget_design/widget_examples.png
Binary files differ
diff --git a/docs/html/images/widget_design/widget_sizes_landscape.png b/docs/html/images/widget_design/widget_sizes_landscape.png
deleted file mode 100644
index 052e28e24925..000000000000
--- a/docs/html/images/widget_design/widget_sizes_landscape.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/widget_sizes_portrait.png b/docs/html/images/widget_design/widget_sizes_portrait.png
deleted file mode 100644
index 31a240c052c4..000000000000
--- a/docs/html/images/widget_design/widget_sizes_portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/widget_design/widget_template_excerpts.png b/docs/html/images/widget_design/widget_template_excerpts.png
new file mode 100644
index 000000000000..aba09e248cd7
--- /dev/null
+++ b/docs/html/images/widget_design/widget_template_excerpts.png
Binary files differ
diff --git a/docs/html/images/widget_design/widget_terms.png b/docs/html/images/widget_design/widget_terms.png
new file mode 100644
index 000000000000..5c4d09d6a24a
--- /dev/null
+++ b/docs/html/images/widget_design/widget_terms.png
Binary files differ
diff --git a/docs/html/resources/articles/speech-input.jd b/docs/html/resources/articles/speech-input.jd
index 736087ecb2f4..0867ff26b023 100644
--- a/docs/html/resources/articles/speech-input.jd
+++ b/docs/html/resources/articles/speech-input.jd
@@ -87,8 +87,8 @@ while the "web search" model is used when users want to search by voice. </p>
regularly. You can use the
{@link android.speech.RecognizerIntent#ACTION_GET_LANGUAGE_DETAILS}
broadcast intent to query for the list of supported languages.
-The web search model is available in all three languages, while free-form has
-primarily been optimized for English. As we work hard to support more models in
+The web search model is available for all languages, while the free-form model
+may not be optimized for all languages. As we work hard to support more models in
more languages, and to improve the accuracy of the speech recognition technology
we use in our products, Android developers who integrate speech capabilities
directly into their applications can reap the benefits as well. </p>
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
index 720e14314c2a..6c5d882908d0 100644
--- a/docs/html/resources/resources-data.js
+++ b/docs/html/resources/resources-data.js
@@ -31,7 +31,8 @@ var ANDROID_TAGS = {
},
misc: {
'external': 'External',
- 'new': 'New'
+ 'new': 'New',
+ 'updated': 'Updated'
}
};
@@ -322,6 +323,16 @@ var ANDROID_RESOURCES = [
}
},
{
+ tags: ['article', 'accountsync', 'data'],
+ path: 'articles/contacts.html',
+ title: {
+ en: 'Using the Contacts API'
+ },
+ description: {
+ en: 'Android provides a Contacts API for managing and integrating contacts from multiple accounts and data sources and allows apps to read various information about individual contacts.'
+ }
+ },
+ {
tags: ['article', 'ui', 'web'],
path: 'articles/using-webviews.html',
title: {
@@ -377,7 +388,7 @@ var ANDROID_RESOURCES = [
///////////////////
{
- tags: ['sample', 'new'],
+ tags: ['sample'],
path: 'samples/AccelerometerPlay/index.html',
title: {
en: 'Accelerometer Play'
@@ -387,7 +398,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'accessibility'],
+ tags: ['sample', 'accessibility'],
path: 'samples/AccessibilityService/index.html',
title: {
en: 'Accessibility Service'
@@ -407,7 +418,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'layout', 'ui', 'fragment', 'loader', 'new'],
+ tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
path: 'samples/Support4Demos/index.html',
title: {
en: 'API 4+ Support Demos'
@@ -417,7 +428,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'layout', 'ui', 'new'],
+ tags: ['sample', 'layout', 'ui'],
path: 'samples/Support13Demos/index.html',
title: {
en: 'API 13+ Support Demos'
@@ -487,13 +498,13 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'newfeature', 'ui'],
+ tags: ['sample', 'updated', 'newfeature', 'ui'],
path: 'samples/HoneycombGallery/index.html',
title: {
en: 'Honeycomb Gallery'
},
description: {
- en: 'An image gallery application using APIs that are new in Android 3.0 (a.k.a. Honeycomb).'
+ en: 'An image gallery application that demonstrates a variety of new APIs in Android 3.0 (Honeycomb). In addition to providing a tablet-optimized design, it also supports handsets running Android 4.0 (Ice Cream Sandwich) and beyond, so is a good example of how to reuse Fragments to support different screen sizes.'
}
},
{
@@ -547,7 +558,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'media' ],
+ tags: ['sample', 'media' ],
path: 'samples/RandomMusicPlayer/index.html',
title: {
en: 'Random Music Player'
@@ -557,7 +568,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'newfeature', 'performance', 'gamedev', 'gl'],
+ tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl'],
path: 'samples/RenderScript/index.html',
title: {
en: 'RenderScript'
@@ -637,7 +648,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'newfeature', 'widgets'],
+ tags: ['sample', 'newfeature', 'widgets'],
path: 'samples/StackWidget/index.html',
title: {
en: 'StackView Widget'
@@ -667,7 +678,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'new', 'newfeature'],
+ tags: ['sample', 'newfeature'],
path: 'samples/USB/index.html',
title: {
en: 'USB'
@@ -683,7 +694,7 @@ var ANDROID_RESOURCES = [
en: 'Voicemail Provider Demo'
},
description: {
- en: 'A sample application to demonstrate how to use voicemail content provider APIs.'
+ en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
}
},
{
@@ -707,7 +718,7 @@ var ANDROID_RESOURCES = [
}
},
{
- tags: ['sample', 'widgets', 'newfeature', 'new'],
+ tags: ['sample', 'widgets', 'newfeature'],
path: 'samples/WeatherListWidget/index.html',
title: {
en: 'Weather List Widget'
@@ -733,7 +744,7 @@ var ANDROID_RESOURCES = [
en: 'Text To Speech Engine'
},
description: {
- en: 'An example Text To Speech engine written using the android text to speech engine API.'
+ en: 'An example Text To Speech engine written using the Android text to speech engine API in Android 4.0.'
}
},
diff --git a/docs/html/sdk/android-3.2.jd b/docs/html/sdk/android-3.2.jd
index 5618eaeb0aff..ea2b4ed6ad2e 100644
--- a/docs/html/sdk/android-3.2.jd
+++ b/docs/html/sdk/android-3.2.jd
@@ -166,7 +166,7 @@ in which the application UI will need to be drawn, not including screen areas
reserved by the system.
</li>
-<li>In constrast, a screen's <em>width</em> and <em>height</em> represent the
+<li>In contrast, a screen's <em>width</em> and <em>height</em> represent the
current horizontal or vertical space available for application layout, measured
in "dp" units, not including screen areas reserved by the system. The width and
height of a screen change when the user switches orientation between landscape
@@ -313,7 +313,7 @@ is designed to run. If the current screen is larger than the value specified,
the system forces the application into screen compatibility mode, to ensure best
display on the current screen.</li>
-<li><code>android:smallestWidthLimitDp="<em>numDp"</em></code> &mdash; This
+<li><code>android:requiresSmallestWidthDp="<em>numDp"</em></code> &mdash; This
attribute lets you specify the minimum smallestWidth on which the application
can run. If the current screen is smaller than the value specified, the system
considers the application incompatible with the device, but does not prevent it
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 5cf37c120233..105c868f835c 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,21 +1,21 @@
page.title=Android SDK
sdk.redirect=0
-sdk.win_installer=installer_r12-windows.exe
-sdk.win_installer_bytes=36531492
-sdk.win_installer_checksum=367f0ed4ecd70aefc290d1f7dcb578ab
+sdk.win_installer=installer_r13-windows.exe
+sdk.win_installer_bytes=36533357
+sdk.win_installer_checksum=cd3a76fe2b8ed62b2d03cf1851692e2d
-sdk.win_download=android-sdk_r12-windows.zip
-sdk.win_bytes=36486190
-sdk.win_checksum=8d6c104a34cd2577c5506c55d981aebf
+sdk.win_download=android-sdk_r13-windows.zip
+sdk.win_bytes=36487911
+sdk.win_checksum=de8a039891e5e65b7742f188f07b992d
-sdk.mac_download=android-sdk_r12-mac_x86.zip
-sdk.mac_bytes=30231118
-sdk.mac_checksum=341544e4572b4b1afab123ab817086e7
+sdk.mac_download=android-sdk_r13-mac_x86.zip
+sdk.mac_bytes=30233944
+sdk.mac_checksum=f4002a0344b48856c09dec796acecd4d
-sdk.linux_download=android-sdk_r12-linux_x86.tgz
-sdk.linux_bytes=30034243
-sdk.linux_checksum=f8485275a8dee3d1929936ed538ee99a
+sdk.linux_download=android-sdk_r13-linux_x86.tgz
+sdk.linux_bytes=30034328
+sdk.linux_checksum=d80d7530a46c665644ae76084a9a0dc4
@jd:body
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
index a00ca125a6cf..8a57312a4690 100644
--- a/docs/html/sdk/sdk_toc.cs
+++ b/docs/html/sdk/sdk_toc.cs
@@ -77,7 +77,7 @@ class="new">new!</span></li>
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-3.2.html">
- <span class="en">Android 3.2 Platform</span></a> <span class="new">new!</span></div>
+ <span class="en">Android 3.2 Platform</span></a></div>
<ul>
<!-- <li><a href="<?cs var:toroot ?>sdk/android-3.2-highlights.html">Platform Highlights</a></li> -->
<li><a href="<?cs var:toroot ?>sdk/api_diff/13/changes.html">API Differences Report &raquo;</a></li>
@@ -142,11 +142,11 @@ class="new">new!</span></li>
</li>
</ul>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r12</a> <span
+ <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r13</a> <span
class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
<li><a href="<?cs var:toroot ?>sdk/compatibility-library.html">Compatibility Package,
-r3</a> <span class="new">new!</span></li>
+r3</a></li>
</ul>
</li>
<li>
@@ -169,7 +169,7 @@ r3</a> <span class="new">new!</span></li>
<span style="display:none" class="ja"></span>
<span style="display:none" class="zh-CN"></span>
<span style="display:none" class="zh-TW"></span></a>
- <span class="new">new!</span></li>
+ </li>
</ul>
</li>
<li>
@@ -183,8 +183,7 @@ r3</a> <span class="new">new!</span></li>
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
- <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r6b</a>
- <span class="new">new!</span>
+ <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r6b</a>
</li>
<li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
</ul>
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
index 8c4d0378e79c..2179cec6036d 100644
--- a/docs/html/sdk/tools-notes.jd
+++ b/docs/html/sdk/tools-notes.jd
@@ -4,7 +4,7 @@ page.title=SDK Tools
<p>SDK Tools is a downloadable component for the Android SDK. It includes the
complete set of development and debugging tools for the Android SDK. </p>
-<p>If you are new to the Android SDK, the <a
+<p>If you are new to the Android SDK, the <a
href="{@docRoot}sdk/index.html">SDK starter package</a> installs the
latest revision of the SDK Tools in the <code>&lt;sdk&gt;/tools</code> directory.</p>
@@ -66,6 +66,35 @@ padding: .25em 1em;
<div class="toggleable opened">
<a href="#" onclick="return toggleDiv(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 13</a> <em>(September 2011)</em>
+ <div class="toggleme">
+ <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r13 is designed for use with
+ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
+href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>General notes:</dt>
+<dd>
+ <ul>
+ <li>Fix compilation issue in Ant (<code>dex</code> step) when paths have spaces.</li>
+ <li>Fix issue in emulator installation when paths have spaces.</li>
+ <li>Fix issue when AVD paths have spaces.</li>
+ <li>Fix rendering issue when using emulator scaling (<a href="http://code.google.com/p/android/issues/detail?id=18299">see more</a>).</li>
+ </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+<div class="toggleable closed">
+ <a href="#" onclick="return toggleDiv(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 12</a> <em>(July 2011)</em>
<div class="toggleme">
<dl>
@@ -396,7 +425,7 @@ install SDK Tools r4 in your SDK. </p></dd>
<dt>General notes:</dt>
<dd>
<ul>
-<li>Launcher script now forces GDK_NATIVE_WINDOW=true (linux only), to fix a
+<li>Launcher script now forces GDK_NATIVE_WINDOW=true (linux only), to fix a
compatibility issue between GTK and SWT.</li>
</ul>
</dd>
@@ -405,7 +434,7 @@ compatibility issue between GTK and SWT.</li>
<dd>
<ul>
<li>AVD Launch dialog now shows scale value.</li>
-<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no
+<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no
skin name specified.</li>
<li>Fixes XML validation issue in on older Java versions.</li>
<li>No longer forces the use of Java 1.5 on Mac OS X.</li>
@@ -470,7 +499,7 @@ display the trace.</li>
<dd>
<ul>
<li>Provides a new UI that lets you set options for controlling
-the emulator skin, screen size/density, and scale factor used when launching
+the emulator skin, screen size/density, and scale factor used when launching
an AVD.</li>
<li>Provides improved AVD creation UI, which lets you customize the hardware
properties of your AVDs.</li>
@@ -481,11 +510,11 @@ between SDK add-ons and platforms.</li>
<dt>Layoutopt, a new tool for optimizing layouts:</dt>
-<dd><p>The SDK Tools r3 package includes <code>layoutopt</code>, a new command-line
-tool that helps you optimize your layout hierarchies. When run against your
-layout files, the tool analyzes their hierarchies and notifies you of
-inefficiencies and other potential issues. The tool also provides simple
-solutions for the issues it finds. For usage, see <a
+<dd><p>The SDK Tools r3 package includes <code>layoutopt</code>, a new command-line
+tool that helps you optimize your layout hierarchies. When run against your
+layout files, the tool analyzes their hierarchies and notifies you of
+inefficiencies and other potential issues. The tool also provides simple
+solutions for the issues it finds. For usage, see <a
href="/guide/developing/tools/layoutopt.html">layoutopt</a>.</p>
</dd>
</dl>
diff --git a/docs/html/shareables/app_widget_templates-v4.0.zip b/docs/html/shareables/app_widget_templates-v4.0.zip
new file mode 100644
index 000000000000..b16ef127c204
--- /dev/null
+++ b/docs/html/shareables/app_widget_templates-v4.0.zip
Binary files differ
diff --git a/drm/drmserver/DrmManager.cpp b/drm/drmserver/DrmManager.cpp
index 3e4fe8c07d23..b2fa05378258 100644
--- a/drm/drmserver/DrmManager.cpp
+++ b/drm/drmserver/DrmManager.cpp
@@ -98,21 +98,27 @@ void DrmManager::removeUniqueId(int uniqueId) {
}
status_t DrmManager::loadPlugIns() {
+
+ String8 vendorPluginDirPath("/vendor/lib/drm");
+ loadPlugIns(vendorPluginDirPath);
+
String8 pluginDirPath("/system/lib/drm");
- return loadPlugIns(pluginDirPath);
+ loadPlugIns(pluginDirPath);
+ return DRM_NO_ERROR;
+
}
status_t DrmManager::loadPlugIns(const String8& plugInDirPath) {
- if (mSupportInfoToPlugInIdMap.isEmpty()) {
- mPlugInManager.loadPlugIns(plugInDirPath);
- Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList();
- for (unsigned int i = 0; i < plugInPathList.size(); ++i) {
- String8 plugInPath = plugInPathList[i];
- DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0);
- if (NULL != info) {
+ mPlugInManager.loadPlugIns(plugInDirPath);
+ Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList();
+ for (unsigned int i = 0; i < plugInPathList.size(); ++i) {
+ String8 plugInPath = plugInPathList[i];
+ DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0);
+ if (NULL != info) {
+ if (mSupportInfoToPlugInIdMap.indexOfKey(*info) < 0) {
mSupportInfoToPlugInIdMap.add(*info, plugInPath);
- delete info;
}
+ delete info;
}
}
return DRM_NO_ERROR;
diff --git a/graphics/java/android/renderscript/ProgramRaster.java b/graphics/java/android/renderscript/ProgramRaster.java
index bc0d928a4b0e..60d9698df411 100644
--- a/graphics/java/android/renderscript/ProgramRaster.java
+++ b/graphics/java/android/renderscript/ProgramRaster.java
@@ -84,14 +84,10 @@ public class ProgramRaster extends BaseObj {
public static class Builder {
RenderScript mRS;
boolean mPointSprite;
- boolean mPointSmooth;
- boolean mLineSmooth;
CullMode mCullMode;
public Builder(RenderScript rs) {
mRS = rs;
- mPointSmooth = false;
- mLineSmooth = false;
mPointSprite = false;
mCullMode = CullMode.BACK;
}
@@ -108,8 +104,7 @@ public class ProgramRaster extends BaseObj {
public ProgramRaster create() {
mRS.validate();
- int id = mRS.nProgramRasterCreate(mPointSmooth, mLineSmooth, mPointSprite,
- 1.f, mCullMode.mID);
+ int id = mRS.nProgramRasterCreate(mPointSprite, mCullMode.mID);
return new ProgramRaster(id, mRS);
}
}
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 571b8952ebd6..e2950d5ed9f2 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -522,13 +522,10 @@ public class RenderScript {
dstMode, depthFunc);
}
- native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth,
- boolean pointSprite, float lineWidth, int cullMode);
- synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth,
- boolean pointSprite, float lineWidth, int cullMode) {
+ native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
+ synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
validate();
- return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth,
- cullMode);
+ return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
}
native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index d7ac5d8269d3..ec1f8dea7c7d 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -1053,12 +1053,10 @@ nProgramVertexCreate(JNIEnv *_env, jobject _this, RsContext con, jstring shader,
// ---------------------------------------------------------------------------
static jint
-nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSmooth,
- jboolean lineSmooth, jboolean pointSprite, jfloat lineWidth, jint cull)
+nProgramRasterCreate(JNIEnv *_env, jobject _this, RsContext con, jboolean pointSprite, jint cull)
{
- LOG_API("nProgramRasterCreate, con(%p), pointSmooth(%i), lineSmooth(%i), pointSprite(%i)",
- con, pointSmooth, lineSmooth, pointSprite);
- return (jint)rsProgramRasterCreate(con, pointSmooth, lineSmooth, pointSprite, lineWidth, (RsCullMode)cull);
+ LOG_API("nProgramRasterCreate, con(%p), pointSprite(%i), cull(%i)", con, pointSprite, cull);
+ return (jint)rsProgramRasterCreate(con, pointSprite, (RsCullMode)cull);
}
@@ -1295,7 +1293,7 @@ static JNINativeMethod methods[] = {
{"rsnProgramBindSampler", "(IIII)V", (void*)nProgramBindSampler },
{"rsnProgramFragmentCreate", "(ILjava/lang/String;[I)I", (void*)nProgramFragmentCreate },
-{"rsnProgramRasterCreate", "(IZZZFI)I", (void*)nProgramRasterCreate },
+{"rsnProgramRasterCreate", "(IZI)I", (void*)nProgramRasterCreate },
{"rsnProgramVertexCreate", "(ILjava/lang/String;[I)I", (void*)nProgramVertexCreate },
{"rsnContextBindRootScript", "(II)V", (void*)nContextBindRootScript },
diff --git a/include/camera/CameraParameters.h b/include/camera/CameraParameters.h
index 4a4bcfb819bc..a520a6a12e53 100644
--- a/include/camera/CameraParameters.h
+++ b/include/camera/CameraParameters.h
@@ -317,18 +317,13 @@ public:
// recalculate exposure values). Changing exposure compensation
// settings will still affect the exposure settings while
// auto-exposure is locked. Stopping preview or taking a still
- // image will release the lock. However, the lock can be
- // re-enabled prior to preview being re-started, to keep the
- // exposure values from the previous lock. In conjunction with
+ // image will not change the lock. In conjunction with
// exposure compensation, this allows for capturing multi-exposure
// brackets with known relative exposure values. Locking
// auto-exposure after open but before the first call to
// startPreview may result in severely over- or under-exposed
- // images. The driver may independently enable the AE lock after
- // auto-focus completes. If it does so, this key must have its
- // value updated to reflect the lock's existence. Applications are
- // free to release such a lock, to re-enable AE without restarting
- // preview.
+ // images. The driver will not change the AE lock after
+ // auto-focus completes.
static const char KEY_AUTO_EXPOSURE_LOCK[];
// Whether locking the auto-exposure is supported. "true" means it is, and
// "false" or this key not existing means it is not supported.
@@ -339,18 +334,13 @@ public:
// change white balance values. If auto-white balance is already
// locked, setting this to true again has no effect (the driver
// will not recalculate white balance values). Stopping preview or
- // taking a still image will release the lock. However, the lock
- // can be re-enabled prior to preview being re-started, to keep
- // the white balance values from the previous lock. In conjunction
+ // taking a still image will not change the lock. In conjunction
// with exposure compensation, this allows for capturing
// multi-exposure brackets with fixed white balance. Locking
// auto-white balance after open but before the first call to
// startPreview may result in severely incorrect color. The
- // driver may independently enable the AWB lock after auto-focus
- // completes. If it does so, this key must have its value updated
- // to reflect the lock's existence. Applications are free to
- // release such a lock, to re-enable AWB without restarting
- // preview.
+ // driver will not change the AWB lock after auto-focus
+ // completes.
static const char KEY_AUTO_WHITEBALANCE_LOCK[];
// Whether locking the auto-white balance is supported. "true"
// means it is, and "false" or this key not existing means it is
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h
index 493993d6d983..926eb9a82c17 100644
--- a/include/gui/SurfaceTexture.h
+++ b/include/gui/SurfaceTexture.h
@@ -25,8 +25,9 @@
#include <ui/GraphicBuffer.h>
-#include <utils/threads.h>
+#include <utils/String8.h>
#include <utils/Vector.h>
+#include <utils/threads.h>
#define ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID "mSurfaceTexture"
@@ -202,6 +203,10 @@ public:
// by OpenGL ES as a texture) then those buffer will remain allocated.
void abandon();
+ // set the name of the SurfaceTexture that will be used to identify it in
+ // log messages.
+ void setName(const String8& name);
+
// dump our state in a String
void dump(String8& result) const;
void dump(String8& result, const char* prefix, char* buffer, size_t SIZE) const;
@@ -444,6 +449,10 @@ private:
// all ISurfaceTexture methods capable of returning an error.
bool mAbandoned;
+ // mName is a string used to identify the SurfaceTexture in log messages.
+ // It is set by the setName method.
+ String8 mName;
+
// mMutex is the mutex used to prevent concurrent access to the member
// variables of SurfaceTexture objects. It must be locked whenever the
// member variables are accessed.
diff --git a/include/media/MediaProfiles.h b/include/media/MediaProfiles.h
index 4b023d146018..eab764807f77 100644
--- a/include/media/MediaProfiles.h
+++ b/include/media/MediaProfiles.h
@@ -32,7 +32,8 @@ enum camcorder_quality {
CAMCORDER_QUALITY_480P = 4,
CAMCORDER_QUALITY_720P = 5,
CAMCORDER_QUALITY_1080P = 6,
- CAMCORDER_QUALITY_LIST_END = 6,
+ CAMCORDER_QUALITY_QVGA = 7,
+ CAMCORDER_QUALITY_LIST_END = 7,
CAMCORDER_QUALITY_TIME_LAPSE_LIST_START = 1000,
CAMCORDER_QUALITY_TIME_LAPSE_LOW = 1000,
@@ -42,7 +43,8 @@ enum camcorder_quality {
CAMCORDER_QUALITY_TIME_LAPSE_480P = 1004,
CAMCORDER_QUALITY_TIME_LAPSE_720P = 1005,
CAMCORDER_QUALITY_TIME_LAPSE_1080P = 1006,
- CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1006,
+ CAMCORDER_QUALITY_TIME_LAPSE_QVGA = 1007,
+ CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1007,
};
/**
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index b7286e537319..5822877217c0 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -113,6 +113,7 @@ private:
Vector<BufferInfo> mBuffers[2];
bool mPortEOS[2];
+ status_t mInputEOSResult;
List<sp<AMessage> > mDeferredQueue;
@@ -150,6 +151,12 @@ private:
OMX_VIDEO_CODINGTYPE compressionFormat);
status_t setupAACDecoder(int32_t numChannels, int32_t sampleRate);
+ status_t setupAMRDecoder(bool isWAMR);
+ status_t setupG711Decoder(int32_t numChannels);
+
+ status_t setupRawAudioFormat(
+ OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels);
+
status_t setMinBufferSize(OMX_U32 portIndex, size_t size);
status_t initNativeWindow();
diff --git a/include/surfaceflinger/ISurfaceComposer.h b/include/surfaceflinger/ISurfaceComposer.h
index 6b31ca4cb8bb..e0f4cf900adf 100644
--- a/include/surfaceflinger/ISurfaceComposer.h
+++ b/include/surfaceflinger/ISurfaceComposer.h
@@ -88,11 +88,6 @@ public:
eElectronBeamAnimationOff = 0x10
};
- // flags for setOrientation
- enum {
- eOrientationAnimationDisable = 0x00000001
- };
-
/* create connection with surface flinger, requires
* ACCESS_SURFACE_FLINGER permission
*/
@@ -112,7 +107,8 @@ public:
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
- /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission */
+ /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission
+ * No flags are currently defined. Set flags to 0. */
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;
/* signal that we're done booting.
diff --git a/include/ui/Rect.h b/include/ui/Rect.h
index 4e65a2d0b9fe..9e98bc562026 100644
--- a/include/ui/Rect.h
+++ b/include/ui/Rect.h
@@ -27,7 +27,7 @@ namespace android {
class Rect : public ARect
{
public:
- typedef int32_t value_type;
+ typedef ARect::value_type value_type;
// we don't provide copy-ctor and operator= on purpose
// because we want the compiler generated versions
diff --git a/include/utils/threads.h b/include/utils/threads.h
index c68562505560..ab3e8cdb638d 100644
--- a/include/utils/threads.h
+++ b/include/utils/threads.h
@@ -143,6 +143,10 @@ extern int androidSetThreadSchedulingGroup(pid_t tid, int grp);
// in either case errno is set. Thread ID zero means current thread.
extern int androidSetThreadPriority(pid_t tid, int prio);
+// Get the current priority of a particular thread. Returns one of the
+// ANDROID_PRIORITY constants or a negative result in case of error.
+extern int androidGetThreadPriority(pid_t tid);
+
// Get the current scheduling group of a particular thread. Normally returns
// one of the ANDROID_TGROUP constants other than ANDROID_TGROUP_DEFAULT.
// Returns ANDROID_TGROUP_DEFAULT if no pthread support (e.g. on host) or if
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index 79a01a35122a..dac9418190c0 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -39,6 +39,12 @@
#define ALLOW_DEQUEUE_CURRENT_BUFFER false
+// Macros for including the SurfaceTexture name in log messages
+#define ST_LOGV(x, ...) LOGV("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGD(x, ...) LOGD("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGI(x, ...) LOGI("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGW(x, ...) LOGW("[%s] "x, mName.string(), ##__VA_ARGS__)
+#define ST_LOGE(x, ...) LOGE("[%s] "x, mName.string(), ##__VA_ARGS__)
namespace android {
@@ -82,6 +88,12 @@ static float mtxRot270[16] = {
static void mtxMul(float out[16], const float a[16], const float b[16]);
+// Get an ID that's unique within this process.
+static int32_t createProcessUniqueId() {
+ static volatile int32_t globalCounter = 0;
+ return android_atomic_inc(&globalCounter);
+}
+
SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) :
mDefaultWidth(1),
mDefaultHeight(1),
@@ -99,15 +111,19 @@ SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) :
mAllowSynchronousMode(allowSynchronousMode),
mConnectedApi(NO_CONNECTED_API),
mAbandoned(false) {
- LOGV("SurfaceTexture::SurfaceTexture");
+ // Choose a name using the PID and a process-unique ID.
+ mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId());
+
+ ST_LOGV("SurfaceTexture::SurfaceTexture");
sp<ISurfaceComposer> composer(ComposerService::getComposerService());
mGraphicBufferAlloc = composer->createGraphicBufferAlloc();
mNextCrop.makeInvalid();
- memcpy(mCurrentTransformMatrix, mtxIdentity, sizeof(mCurrentTransformMatrix));
+ memcpy(mCurrentTransformMatrix, mtxIdentity,
+ sizeof(mCurrentTransformMatrix));
}
SurfaceTexture::~SurfaceTexture() {
- LOGV("SurfaceTexture::~SurfaceTexture");
+ ST_LOGV("SurfaceTexture::~SurfaceTexture");
freeAllBuffersLocked();
}
@@ -151,22 +167,22 @@ status_t SurfaceTexture::setBufferCountServer(int bufferCount) {
}
status_t SurfaceTexture::setBufferCount(int bufferCount) {
- LOGV("SurfaceTexture::setBufferCount");
+ ST_LOGV("SurfaceTexture::setBufferCount");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("setBufferCount: SurfaceTexture has been abandoned!");
+ ST_LOGE("setBufferCount: SurfaceTexture has been abandoned!");
return NO_INIT;
}
if (bufferCount > NUM_BUFFER_SLOTS) {
- LOGE("setBufferCount: bufferCount larger than slots available");
+ ST_LOGE("setBufferCount: bufferCount larger than slots available");
return BAD_VALUE;
}
// Error out if the user has dequeued buffers
for (int i=0 ; i<mBufferCount ; i++) {
if (mSlots[i].mBufferState == BufferSlot::DEQUEUED) {
- LOGE("setBufferCount: client owns some buffers");
+ ST_LOGE("setBufferCount: client owns some buffers");
return -EINVAL;
}
}
@@ -181,7 +197,7 @@ status_t SurfaceTexture::setBufferCount(int bufferCount) {
}
if (bufferCount < minBufferSlots) {
- LOGE("setBufferCount: requested buffer count (%d) is less than "
+ ST_LOGE("setBufferCount: requested buffer count (%d) is less than "
"minimum (%d)", bufferCount, minBufferSlots);
return BAD_VALUE;
}
@@ -200,7 +216,8 @@ status_t SurfaceTexture::setBufferCount(int bufferCount) {
status_t SurfaceTexture::setDefaultBufferSize(uint32_t w, uint32_t h)
{
if (!w || !h) {
- LOGE("setDefaultBufferSize: dimensions cannot be 0 (w=%d, h=%d)", w, h);
+ ST_LOGE("setDefaultBufferSize: dimensions cannot be 0 (w=%d, h=%d)",
+ w, h);
return BAD_VALUE;
}
@@ -211,14 +228,14 @@ status_t SurfaceTexture::setDefaultBufferSize(uint32_t w, uint32_t h)
}
status_t SurfaceTexture::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
- LOGV("SurfaceTexture::requestBuffer");
+ ST_LOGV("SurfaceTexture::requestBuffer");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("requestBuffer: SurfaceTexture has been abandoned!");
+ ST_LOGE("requestBuffer: SurfaceTexture has been abandoned!");
return NO_INIT;
}
if (slot < 0 || mBufferCount <= slot) {
- LOGE("requestBuffer: slot index out of range [0, %d]: %d",
+ ST_LOGE("requestBuffer: slot index out of range [0, %d]: %d",
mBufferCount, slot);
return BAD_VALUE;
}
@@ -229,10 +246,10 @@ status_t SurfaceTexture::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
uint32_t format, uint32_t usage) {
- LOGV("SurfaceTexture::dequeueBuffer");
+ ST_LOGV("SurfaceTexture::dequeueBuffer");
if ((w && !h) || (!w && h)) {
- LOGE("dequeueBuffer: invalid size: w=%u, h=%u", w, h);
+ ST_LOGE("dequeueBuffer: invalid size: w=%u, h=%u", w, h);
return BAD_VALUE;
}
@@ -245,7 +262,7 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
bool tryAgain = true;
while (tryAgain) {
if (mAbandoned) {
- LOGE("dequeueBuffer: SurfaceTexture has been abandoned!");
+ ST_LOGE("dequeueBuffer: SurfaceTexture has been abandoned!");
return NO_INIT;
}
@@ -334,7 +351,8 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
// than allowed.
const int avail = mBufferCount - (dequeuedCount+1);
if (avail < (MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode))) {
- LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded (dequeued=%d)",
+ ST_LOGE("dequeueBuffer: MIN_UNDEQUEUED_BUFFERS=%d exceeded "
+ "(dequeued=%d)",
MIN_UNDEQUEUED_BUFFERS-int(mSynchronousMode),
dequeuedCount);
return -EBUSY;
@@ -391,7 +409,8 @@ status_t SurfaceTexture::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
mGraphicBufferAlloc->createGraphicBuffer(
w, h, format, usage, &error));
if (graphicBuffer == 0) {
- LOGE("dequeueBuffer: SurfaceComposer::createGraphicBuffer failed");
+ ST_LOGE("dequeueBuffer: SurfaceComposer::createGraphicBuffer "
+ "failed");
return error;
}
if (updateFormat) {
@@ -413,7 +432,7 @@ status_t SurfaceTexture::setSynchronousMode(bool enabled) {
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("setSynchronousMode: SurfaceTexture has been abandoned!");
+ ST_LOGE("setSynchronousMode: SurfaceTexture has been abandoned!");
return NO_INIT;
}
@@ -441,29 +460,29 @@ status_t SurfaceTexture::setSynchronousMode(bool enabled) {
status_t SurfaceTexture::queueBuffer(int buf, int64_t timestamp,
uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
- LOGV("SurfaceTexture::queueBuffer");
+ ST_LOGV("SurfaceTexture::queueBuffer");
sp<FrameAvailableListener> listener;
{ // scope for the lock
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("queueBuffer: SurfaceTexture has been abandoned!");
+ ST_LOGE("queueBuffer: SurfaceTexture has been abandoned!");
return NO_INIT;
}
if (buf < 0 || buf >= mBufferCount) {
- LOGE("queueBuffer: slot index out of range [0, %d]: %d",
+ ST_LOGE("queueBuffer: slot index out of range [0, %d]: %d",
mBufferCount, buf);
return -EINVAL;
} else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
- LOGE("queueBuffer: slot %d is not owned by the client (state=%d)",
- buf, mSlots[buf].mBufferState);
+ ST_LOGE("queueBuffer: slot %d is not owned by the client "
+ "(state=%d)", buf, mSlots[buf].mBufferState);
return -EINVAL;
} else if (buf == mCurrentTexture) {
- LOGE("queueBuffer: slot %d is current!", buf);
+ ST_LOGE("queueBuffer: slot %d is current!", buf);
return -EINVAL;
} else if (!mSlots[buf].mRequestBufferCalled) {
- LOGE("queueBuffer: slot %d was enqueued without requesting a "
+ ST_LOGE("queueBuffer: slot %d was enqueued without requesting a "
"buffer", buf);
return -EINVAL;
}
@@ -513,20 +532,20 @@ status_t SurfaceTexture::queueBuffer(int buf, int64_t timestamp,
}
void SurfaceTexture::cancelBuffer(int buf) {
- LOGV("SurfaceTexture::cancelBuffer");
+ ST_LOGV("SurfaceTexture::cancelBuffer");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGW("cancelBuffer: SurfaceTexture has been abandoned!");
+ ST_LOGW("cancelBuffer: SurfaceTexture has been abandoned!");
return;
}
if (buf < 0 || buf >= mBufferCount) {
- LOGE("cancelBuffer: slot index out of range [0, %d]: %d",
+ ST_LOGE("cancelBuffer: slot index out of range [0, %d]: %d",
mBufferCount, buf);
return;
} else if (mSlots[buf].mBufferState != BufferSlot::DEQUEUED) {
- LOGE("cancelBuffer: slot %d is not owned by the client (state=%d)",
+ ST_LOGE("cancelBuffer: slot %d is not owned by the client (state=%d)",
buf, mSlots[buf].mBufferState);
return;
}
@@ -535,10 +554,10 @@ void SurfaceTexture::cancelBuffer(int buf) {
}
status_t SurfaceTexture::setCrop(const Rect& crop) {
- LOGV("SurfaceTexture::setCrop");
+ ST_LOGV("SurfaceTexture::setCrop");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("setCrop: SurfaceTexture has been abandoned!");
+ ST_LOGE("setCrop: SurfaceTexture has been abandoned!");
return NO_INIT;
}
mNextCrop = crop;
@@ -546,10 +565,10 @@ status_t SurfaceTexture::setCrop(const Rect& crop) {
}
status_t SurfaceTexture::setTransform(uint32_t transform) {
- LOGV("SurfaceTexture::setTransform");
+ ST_LOGV("SurfaceTexture::setTransform");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("setTransform: SurfaceTexture has been abandoned!");
+ ST_LOGE("setTransform: SurfaceTexture has been abandoned!");
return NO_INIT;
}
mNextTransform = transform;
@@ -558,11 +577,11 @@ status_t SurfaceTexture::setTransform(uint32_t transform) {
status_t SurfaceTexture::connect(int api,
uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
- LOGV("SurfaceTexture::connect(this=%p, %d)", this, api);
+ ST_LOGV("SurfaceTexture::connect(this=%p, %d)", this, api);
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("connect: SurfaceTexture has been abandoned!");
+ ST_LOGE("connect: SurfaceTexture has been abandoned!");
return NO_INIT;
}
@@ -573,7 +592,7 @@ status_t SurfaceTexture::connect(int api,
case NATIVE_WINDOW_API_MEDIA:
case NATIVE_WINDOW_API_CAMERA:
if (mConnectedApi != NO_CONNECTED_API) {
- LOGE("connect: already connected (cur=%d, req=%d)",
+ ST_LOGE("connect: already connected (cur=%d, req=%d)",
mConnectedApi, api);
err = -EINVAL;
} else {
@@ -591,11 +610,11 @@ status_t SurfaceTexture::connect(int api,
}
status_t SurfaceTexture::disconnect(int api) {
- LOGV("SurfaceTexture::disconnect(this=%p, %d)", this, api);
+ ST_LOGV("SurfaceTexture::disconnect(this=%p, %d)", this, api);
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("connect: SurfaceTexture has been abandoned!");
+ ST_LOGE("disconnect: SurfaceTexture has been abandoned!");
return NO_INIT;
}
@@ -613,7 +632,7 @@ status_t SurfaceTexture::disconnect(int api) {
mNextTransform = 0;
mDequeueCondition.signal();
} else {
- LOGE("disconnect: connected to another api (cur=%d, req=%d)",
+ ST_LOGE("disconnect: connected to another api (cur=%d, req=%d)",
mConnectedApi, api);
err = -EINVAL;
}
@@ -626,7 +645,7 @@ status_t SurfaceTexture::disconnect(int api) {
}
status_t SurfaceTexture::setScalingMode(int mode) {
- LOGV("SurfaceTexture::setScalingMode(%d)", mode);
+ ST_LOGV("SurfaceTexture::setScalingMode(%d)", mode);
switch (mode) {
case NATIVE_WINDOW_SCALING_MODE_FREEZE:
@@ -642,11 +661,11 @@ status_t SurfaceTexture::setScalingMode(int mode) {
}
status_t SurfaceTexture::updateTexImage() {
- LOGV("SurfaceTexture::updateTexImage");
+ ST_LOGV("SurfaceTexture::updateTexImage");
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("calling updateTexImage() on an abandoned SurfaceTexture");
+ ST_LOGE("calling updateTexImage() on an abandoned SurfaceTexture");
return NO_INIT;
}
@@ -661,7 +680,7 @@ status_t SurfaceTexture::updateTexImage() {
if (image == EGL_NO_IMAGE_KHR) {
EGLDisplay dpy = eglGetCurrentDisplay();
if (mSlots[buf].mGraphicBuffer == 0) {
- LOGE("buffer at slot %d is null", buf);
+ ST_LOGE("buffer at slot %d is null", buf);
return BAD_VALUE;
}
image = createImage(dpy, mSlots[buf].mGraphicBuffer);
@@ -676,15 +695,16 @@ status_t SurfaceTexture::updateTexImage() {
GLint error;
while ((error = glGetError()) != GL_NO_ERROR) {
- LOGW("updateTexImage: clearing GL error: %#04x", error);
+ ST_LOGW("updateTexImage: clearing GL error: %#04x", error);
}
glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, (GLeglImageOES)image);
+ glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES,
+ (GLeglImageOES)image);
bool failed = false;
while ((error = glGetError()) != GL_NO_ERROR) {
- LOGE("error binding external texture image %p (slot %d): %#04x",
+ ST_LOGE("error binding external texture image %p (slot %d): %#04x",
image, buf, error);
failed = true;
}
@@ -750,7 +770,7 @@ void SurfaceTexture::getTransformMatrix(float mtx[16]) {
}
void SurfaceTexture::computeCurrentTransformMatrix() {
- LOGV("SurfaceTexture::computeCurrentTransformMatrix");
+ ST_LOGV("SurfaceTexture::computeCurrentTransformMatrix");
float xform[16];
for (int i = 0; i < 16; i++) {
@@ -841,14 +861,14 @@ void SurfaceTexture::computeCurrentTransformMatrix() {
}
nsecs_t SurfaceTexture::getTimestamp() {
- LOGV("SurfaceTexture::getTimestamp");
+ ST_LOGV("SurfaceTexture::getTimestamp");
Mutex::Autolock lock(mMutex);
return mCurrentTimestamp;
}
void SurfaceTexture::setFrameAvailableListener(
const sp<FrameAvailableListener>& listener) {
- LOGV("SurfaceTexture::setFrameAvailableListener");
+ ST_LOGV("SurfaceTexture::setFrameAvailableListener");
Mutex::Autolock lock(mMutex);
mFrameAvailableListener = listener;
}
@@ -892,11 +912,11 @@ status_t SurfaceTexture::drainQueueLocked() {
while (mSynchronousMode && !mQueue.isEmpty()) {
mDequeueCondition.wait(mMutex);
if (mAbandoned) {
- LOGE("drainQueueLocked: SurfaceTexture has been abandoned!");
+ ST_LOGE("drainQueueLocked: SurfaceTexture has been abandoned!");
return NO_INIT;
}
if (mConnectedApi == NO_CONNECTED_API) {
- LOGE("drainQueueLocked: SurfaceTexture is not connected!");
+ ST_LOGE("drainQueueLocked: SurfaceTexture is not connected!");
return NO_INIT;
}
}
@@ -926,7 +946,7 @@ EGLImageKHR SurfaceTexture::createImage(EGLDisplay dpy,
EGL_NATIVE_BUFFER_ANDROID, cbuf, attrs);
if (image == EGL_NO_IMAGE_KHR) {
EGLint error = eglGetError();
- LOGE("error creating EGLImage: %#x", error);
+ ST_LOGE("error creating EGLImage: %#x", error);
}
return image;
}
@@ -956,7 +976,7 @@ int SurfaceTexture::query(int what, int* outValue)
Mutex::Autolock lock(mMutex);
if (mAbandoned) {
- LOGE("query: SurfaceTexture has been abandoned!");
+ ST_LOGE("query: SurfaceTexture has been abandoned!");
return NO_INIT;
}
@@ -991,6 +1011,10 @@ void SurfaceTexture::abandon() {
mDequeueCondition.signal();
}
+void SurfaceTexture::setName(const String8& name) {
+ mName = name;
+}
+
void SurfaceTexture::dump(String8& result) const
{
char buffer[1024];
@@ -1004,8 +1028,8 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
snprintf(buffer, SIZE,
"%smBufferCount=%d, mSynchronousMode=%d, default-size=[%dx%d], "
"mPixelFormat=%d, mTexName=%d\n",
- prefix, mBufferCount, mSynchronousMode, mDefaultWidth, mDefaultHeight,
- mPixelFormat, mTexName);
+ prefix, mBufferCount, mSynchronousMode, mDefaultWidth,
+ mDefaultHeight, mPixelFormat, mTexName);
result.append(buffer);
String8 fifo;
@@ -1024,8 +1048,8 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
prefix, mCurrentCrop.left,
mCurrentCrop.top, mCurrentCrop.right, mCurrentCrop.bottom,
mCurrentTransform, mCurrentTexture,
- prefix, mNextCrop.left, mNextCrop.top, mNextCrop.right, mNextCrop.bottom,
- mNextTransform, fifoSize, fifo.string()
+ prefix, mNextCrop.left, mNextCrop.top, mNextCrop.right,
+ mNextCrop.bottom, mNextTransform, fifoSize, fifo.string()
);
result.append(buffer);
@@ -1048,8 +1072,8 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
"transform=0x%02x, timestamp=%lld",
prefix, (i==mCurrentTexture)?">":" ", i,
stateName(slot.mBufferState),
- slot.mCrop.left, slot.mCrop.top, slot.mCrop.right, slot.mCrop.bottom,
- slot.mTransform, slot.mTimestamp
+ slot.mCrop.left, slot.mCrop.top, slot.mCrop.right,
+ slot.mCrop.bottom, slot.mTransform, slot.mTimestamp
);
result.append(buffer);
@@ -1057,7 +1081,8 @@ void SurfaceTexture::dump(String8& result, const char* prefix,
if (buf != NULL) {
snprintf(buffer, SIZE,
", %p [%4ux%4u:%4u,%3X]",
- buf->handle, buf->width, buf->height, buf->stride, buf->format);
+ buf->handle, buf->width, buf->height, buf->stride,
+ buf->format);
result.append(buffer);
}
result.append("\n");
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index 71951b7a3cc8..edc90e1f052f 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -28,7 +28,19 @@ namespace uirenderer {
// Structs
///////////////////////////////////////////////////////////////////////////////
-struct Rect {
+class Rect {
+ static inline float min(float a, float b) { return (a<b) ? a : b; }
+ static inline float max(float a, float b) { return (a>b) ? a : b; }
+ Rect intersectWith(float l, float t, float r, float b) const {
+ Rect tmp;
+ tmp.left = max(left, l);
+ tmp.top = max(top, t);
+ tmp.right = min(right, r);
+ tmp.bottom = min(bottom, b);
+ return tmp;
+ }
+
+public:
float left;
float top;
float right;
@@ -37,6 +49,9 @@ struct Rect {
// Used by Region
typedef float value_type;
+ // we don't provide copy-ctor and operator= on purpose
+ // because we want the compiler generated versions
+
inline Rect():
left(0),
top(0),
@@ -58,24 +73,6 @@ struct Rect {
bottom(height) {
}
- inline Rect(const Rect& r) {
- set(r);
- }
-
- inline Rect(Rect& r) {
- set(r);
- }
-
- Rect& operator=(const Rect& r) {
- set(r);
- return *this;
- }
-
- Rect& operator=(Rect& r) {
- set(r);
- return *this;
- }
-
friend int operator==(const Rect& a, const Rect& b) {
return !memcmp(&a, &b, sizeof(a));
}
@@ -89,7 +86,9 @@ struct Rect {
}
inline bool isEmpty() const {
- return left >= right || top >= bottom;
+ // this is written in such way this it'll handle NANs to return
+ // true (empty)
+ return !((left < right) && (top < bottom));
}
inline void setEmpty() {
@@ -115,27 +114,18 @@ struct Rect {
return bottom - top;
}
- bool intersects(float left, float top, float right, float bottom) const {
- return left < right && top < bottom &&
- this->left < this->right && this->top < this->bottom &&
- this->left < right && left < this->right &&
- this->top < bottom && top < this->bottom;
+ bool intersects(float l, float t, float r, float b) const {
+ return !intersectWith(l,t,r,b).isEmpty();
}
bool intersects(const Rect& r) const {
return intersects(r.left, r.top, r.right, r.bottom);
}
- bool intersect(float left, float top, float right, float bottom) {
- if (left < right && top < bottom && !this->isEmpty() &&
- this->left < right && left < this->right &&
- this->top < bottom && top < this->bottom) {
-
- if (this->left < left) this->left = left;
- if (this->top < top) this->top = top;
- if (this->right > right) this->right = right;
- if (this->bottom > bottom) this->bottom = bottom;
-
+ bool intersect(float l, float t, float r, float b) {
+ Rect tmp(intersectWith(l,t,r,b));
+ if (!tmp.isEmpty()) {
+ set(tmp);
return true;
}
return false;
@@ -182,7 +172,7 @@ struct Rect {
LOGD("Rect[l=%f t=%f r=%f b=%f]", left, top, right, bottom);
}
-}; // struct Rect
+}; // class Rect
}; // namespace uirenderer
}; // namespace android
diff --git a/libs/hwui/utils/Compare.h b/libs/hwui/utils/Compare.h
index 6531e78ea108..f079a7bf02d8 100644
--- a/libs/hwui/utils/Compare.h
+++ b/libs/hwui/utils/Compare.h
@@ -28,7 +28,7 @@
*/
#define LTE_FLOAT(a) \
if (a < rhs.a) return true; \
- if (ALMOST_EQUAL(a, rhs.a))
+ if (a == rhs.a)
/**
* Compare integers.
diff --git a/libs/rs/driver/rsdCore.cpp b/libs/rs/driver/rsdCore.cpp
index a38fff778011..f8107d9ff633 100644
--- a/libs/rs/driver/rsdCore.cpp
+++ b/libs/rs/driver/rsdCore.cpp
@@ -219,7 +219,7 @@ bool rsdHalInit(Context *rsc, uint32_t version_major, uint32_t version_minor) {
int cpu = sysconf(_SC_NPROCESSORS_ONLN);
- LOGV("RS Launching thread(s), reported CPU count %i", cpu);
+ LOGV("%p Launching thread(s), CPUs %i", rsc, cpu);
if (cpu < 2) cpu = 0;
dc->mWorkers.mCount = (uint32_t)cpu;
diff --git a/libs/rs/driver/rsdGL.cpp b/libs/rs/driver/rsdGL.cpp
index c5b81db6c56a..98d9486a36bd 100644
--- a/libs/rs/driver/rsdGL.cpp
+++ b/libs/rs/driver/rsdGL.cpp
@@ -129,11 +129,8 @@ void rsdGLShutdown(const Context *rsc) {
dc->gl.shaderCache->cleanupAll();
delete dc->gl.shaderCache;
-
delete dc->gl.vertexArrayState;
- LOGV("%p, deinitEGL", rsc);
-
if (dc->gl.egl.context != EGL_NO_CONTEXT) {
RSD_CALL_GL(eglMakeCurrent, dc->gl.egl.display,
EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
@@ -363,7 +360,7 @@ bool rsdGLInit(const Context *rsc) {
dc->gl.vertexArrayState->init(dc->gl.gl.maxVertexAttribs);
dc->gl.currentFrameBuffer = NULL;
- LOGV("initGLThread end %p", rsc);
+ LOGV("%p initGLThread end", rsc);
rsc->setWatchdogGL(NULL, 0, NULL);
return true;
}
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index f27758249a5d..20b1f52104da 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -329,10 +329,7 @@ ProgramStoreCreate {
ProgramRasterCreate {
direct
- param bool pointSmooth
- param bool lineSmooth
param bool pointSprite
- param float lineWidth
param RsCullMode cull
ret RsProgramRaster
}
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp
index 948d51c77a36..53d497004fc6 100644
--- a/libs/rs/rsContext.cpp
+++ b/libs/rs/rsContext.cpp
@@ -37,11 +37,10 @@ pthread_mutex_t Context::gLibMutex = PTHREAD_MUTEX_INITIALIZER;
bool Context::initGLThread() {
pthread_mutex_lock(&gInitMutex);
- LOGV("initGLThread start %p", this);
if (!mHal.funcs.initGraphics(this)) {
pthread_mutex_unlock(&gInitMutex);
- LOGE("%p, initGraphics failed", this);
+ LOGE("%p initGraphics failed", this);
return false;
}
@@ -50,7 +49,6 @@ bool Context::initGLThread() {
}
void Context::deinitEGL() {
- LOGV("%p, deinitEGL", this);
mHal.funcs.shutdownGraphics(this);
}
@@ -284,7 +282,7 @@ void * Context::threadProc(void *vrsc) {
}
}
- LOGV("%p, RS Thread exiting", rsc);
+ LOGV("%p RS Thread exiting", rsc);
if (rsc->mIsGraphicsContext) {
pthread_mutex_lock(&gInitMutex);
@@ -292,7 +290,7 @@ void * Context::threadProc(void *vrsc) {
pthread_mutex_unlock(&gInitMutex);
}
- LOGV("%p, RS Thread exited", rsc);
+ LOGV("%p RS Thread exited", rsc);
return NULL;
}
@@ -426,7 +424,7 @@ bool Context::initContext(Device *dev, const RsSurfaceConfig *sc) {
}
Context::~Context() {
- LOGV("Context::~Context");
+ LOGV("%p Context::~Context", this);
if (!mIsContextLite) {
mIO.coreFlush();
@@ -450,7 +448,7 @@ Context::~Context() {
}
pthread_mutex_unlock(&gInitMutex);
}
- LOGV("Context::~Context done");
+ LOGV("%p Context::~Context done", this);
}
void Context::setSurface(uint32_t w, uint32_t h, RsNativeWindow sur) {
@@ -667,10 +665,10 @@ void rsi_ContextDestroyWorker(Context *rsc) {
}
void rsi_ContextDestroy(Context *rsc) {
- LOGV("rsContextDestroy %p", rsc);
+ LOGV("%p rsContextDestroy", rsc);
rsContextDestroyWorker(rsc);
delete rsc;
- LOGV("rsContextDestroy 2 %p", rsc);
+ LOGV("%p rsContextDestroy done", rsc);
}
@@ -701,7 +699,7 @@ void rsi_ContextDeinitToClient(Context *rsc) {
RsContext rsContextCreate(RsDevice vdev, uint32_t version,
uint32_t sdkVersion) {
- LOGV("rsContextCreate %p", vdev);
+ LOGV("rsContextCreate dev=%p", vdev);
Device * dev = static_cast<Device *>(vdev);
Context *rsc = Context::createContext(dev, NULL);
if (rsc) {
@@ -713,14 +711,14 @@ RsContext rsContextCreate(RsDevice vdev, uint32_t version,
RsContext rsContextCreateGL(RsDevice vdev, uint32_t version,
uint32_t sdkVersion, RsSurfaceConfig sc,
uint32_t dpi) {
- LOGV("rsContextCreateGL %p", vdev);
+ LOGV("rsContextCreateGL dev=%p", vdev);
Device * dev = static_cast<Device *>(vdev);
Context *rsc = Context::createContext(dev, &sc);
if (rsc) {
rsc->setTargetSdkVersion(sdkVersion);
rsc->setDPI(dpi);
}
- LOGV("rsContextCreateGL ret %p ", rsc);
+ LOGV("%p rsContextCreateGL ret", rsc);
return rsc;
}
diff --git a/libs/rs/rsProgramRaster.cpp b/libs/rs/rsProgramRaster.cpp
index 945b5eca68fd..94bfe4275abe 100644
--- a/libs/rs/rsProgramRaster.cpp
+++ b/libs/rs/rsProgramRaster.cpp
@@ -21,19 +21,12 @@ using namespace android;
using namespace android::renderscript;
-ProgramRaster::ProgramRaster(Context *rsc, bool pointSmooth,
- bool lineSmooth, bool pointSprite,
- float lineWidth, RsCullMode cull)
+ProgramRaster::ProgramRaster(Context *rsc, bool pointSprite, RsCullMode cull)
: ProgramBase(rsc) {
memset(&mHal, 0, sizeof(mHal));
-
- mHal.state.pointSmooth = pointSmooth;
- mHal.state.lineSmooth = lineSmooth;
mHal.state.pointSprite = pointSprite;
- mHal.state.lineWidth = lineWidth;
mHal.state.cull = cull;
-
rsc->mHal.funcs.raster.init(rsc, this);
}
@@ -74,8 +67,7 @@ ProgramRasterState::~ProgramRasterState() {
}
void ProgramRasterState::init(Context *rsc) {
- mDefault.set(ProgramRaster::getProgramRaster(rsc, false, false,
- false, 1.f, RS_CULL_BACK).get());
+ mDefault.set(ProgramRaster::getProgramRaster(rsc, false, RS_CULL_BACK).get());
}
void ProgramRasterState::deinit(Context *rsc) {
@@ -84,19 +76,13 @@ void ProgramRasterState::deinit(Context *rsc) {
}
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();
@@ -104,8 +90,7 @@ ObjectBaseRef<ProgramRaster> ProgramRaster::getProgramRaster(Context *rsc,
}
ObjectBase::asyncUnlock();
- ProgramRaster *pr = new ProgramRaster(rsc, pointSmooth,
- lineSmooth, pointSprite, lineWidth, cull);
+ ProgramRaster *pr = new ProgramRaster(rsc, pointSprite, cull);
returnRef.set(pr);
ObjectBase::asyncLock();
@@ -118,10 +103,8 @@ ObjectBaseRef<ProgramRaster> ProgramRaster::getProgramRaster(Context *rsc,
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);
+RsProgramRaster rsi_ProgramRasterCreate(Context * rsc, bool pointSprite, RsCullMode cull) {
+ ObjectBaseRef<ProgramRaster> pr = ProgramRaster::getProgramRaster(rsc, pointSprite, cull);
pr->incUserRef();
return pr.get();
}
diff --git a/libs/rs/rsProgramRaster.h b/libs/rs/rsProgramRaster.h
index 09d7d5432c9a..20af30a1b90b 100644
--- a/libs/rs/rsProgramRaster.h
+++ b/libs/rs/rsProgramRaster.h
@@ -33,19 +33,13 @@ public:
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;
struct State {
- bool pointSmooth;
- bool lineSmooth;
bool pointSprite;
- float lineWidth;
RsCullMode cull;
};
State state;
@@ -58,10 +52,7 @@ protected:
private:
ProgramRaster(Context *rsc,
- bool pointSmooth,
- bool lineSmooth,
bool pointSprite,
- float lineWidth,
RsCullMode cull);
};
diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp
index a5ba57dba78f..3de75bae9404 100644
--- a/libs/ui/Input.cpp
+++ b/libs/ui/Input.cpp
@@ -1020,6 +1020,8 @@ bool VelocityTracker::getVelocity(uint32_t id, float* outVx, float* outVy) const
return true;
}
}
+ *outVx = 0;
+ *outVy = 0;
return false;
}
diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp
index a060a5f39db5..565608889d28 100644
--- a/libs/ui/Region.cpp
+++ b/libs/ui/Region.cpp
@@ -479,6 +479,12 @@ void Region::boolean_operation(int op, Region& dst,
const Region& lhs,
const Rect& rhs, int dx, int dy)
{
+ if (!rhs.isValid()) {
+ LOGE("Region::boolean_operation(op=%d) invalid Rect={%d,%d,%d,%d}",
+ op, rhs.left, rhs.top, rhs.right, rhs.bottom);
+ return;
+ }
+
#if VALIDATE_WITH_CORECG || VALIDATE_REGIONS
boolean_operation(op, dst, lhs, Region(rhs), dx, dy);
#else
diff --git a/libs/utils/Android.mk b/libs/utils/Android.mk
index e4eadbd0046d..638f72f0b66a 100644
--- a/libs/utils/Android.mk
+++ b/libs/utils/Android.mk
@@ -100,12 +100,8 @@ LOCAL_LDLIBS += -lpthread
LOCAL_SHARED_LIBRARIES := \
libz \
liblog \
- libcutils
-
-ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-x86)
-# This is needed on x86 to bring in dl_iterate_phdr for CallStack.cpp
-LOCAL_SHARED_LIBRARIES += libdl
-endif # linux-x86
+ libcutils \
+ libdl
LOCAL_MODULE:= libutils
include $(BUILD_SHARED_LIBRARY)
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index 02c380b0e5de..5dbcb75b0616 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -368,6 +368,14 @@ int androidSetThreadPriority(pid_t tid, int pri)
return rc;
}
+int androidGetThreadPriority(pid_t tid) {
+#if defined(HAVE_PTHREADS)
+ return getpriority(PRIO_PROCESS, tid);
+#else
+ return ANDROID_PRIORITY_NORMAL;
+#endif
+}
+
int androidGetThreadSchedulingGroup(pid_t tid)
{
int ret = ANDROID_TGROUP_DEFAULT;
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index cd8bb1d4b54f..a0881a7ea44f 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -18,8 +18,10 @@ package android.media;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.os.Binder;
@@ -1684,17 +1686,42 @@ public class AudioManager {
* Register a component to be the sole receiver of MEDIA_BUTTON intents.
* @param eventReceiver identifier of a {@link android.content.BroadcastReceiver}
* that will receive the media button intent. This broadcast receiver must be declared
- * in the application manifest.
+ * in the application manifest. The package of the component must match that of
+ * the context you're registering from.
*/
public void registerMediaButtonEventReceiver(ComponentName eventReceiver) {
if (eventReceiver == null) {
return;
}
+ if (!eventReceiver.getPackageName().equals(mContext.getPackageName())) {
+ Log.e(TAG, "registerMediaButtonEventReceiver() error: " +
+ "receiver and context package names don't match");
+ return;
+ }
+ // construct a PendingIntent for the media button and register it
+ Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ // the associated intent will be handled by the component being registered
+ mediaButtonIntent.setComponent(eventReceiver);
+ PendingIntent pi = PendingIntent.getBroadcast(mContext,
+ 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
+ registerMediaButtonIntent(pi, eventReceiver);
+ }
+
+ /**
+ * @hide
+ * no-op if (pi == null) or (eventReceiver == null)
+ */
+ public void registerMediaButtonIntent(PendingIntent pi, ComponentName eventReceiver) {
+ if ((pi == null) || (eventReceiver == null)) {
+ Log.e(TAG, "Cannot call registerMediaButtonIntent() with a null parameter");
+ return;
+ }
IAudioService service = getService();
try {
- service.registerMediaButtonEventReceiver(eventReceiver);
+ // pi != null
+ service.registerMediaButtonIntent(pi, eventReceiver);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in registerMediaButtonEventReceiver"+e);
+ Log.e(TAG, "Dead object in registerMediaButtonIntent"+e);
}
}
@@ -1707,15 +1734,27 @@ public class AudioManager {
if (eventReceiver == null) {
return;
}
+ // construct a PendingIntent for the media button and unregister it
+ Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ // the associated intent will be handled by the component being registered
+ mediaButtonIntent.setComponent(eventReceiver);
+ PendingIntent pi = PendingIntent.getBroadcast(mContext,
+ 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
+ unregisterMediaButtonIntent(pi, eventReceiver);
+ }
+
+ /**
+ * @hide
+ */
+ public void unregisterMediaButtonIntent(PendingIntent pi, ComponentName eventReceiver) {
IAudioService service = getService();
try {
- service.unregisterMediaButtonEventReceiver(eventReceiver);
+ service.unregisterMediaButtonIntent(pi, eventReceiver);
} catch (RemoteException e) {
- Log.e(TAG, "Dead object in unregisterMediaButtonEventReceiver"+e);
+ Log.e(TAG, "Dead object in unregisterMediaButtonIntent"+e);
}
}
-
/**
* Registers the remote control client for providing information to display on the remote
* controls.
@@ -1724,14 +1763,13 @@ public class AudioManager {
* @see RemoteControlClient
*/
public void registerRemoteControlClient(RemoteControlClient rcClient) {
- if ((rcClient == null) || (rcClient.getRcEventReceiver() == null)) {
+ if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
return;
}
IAudioService service = getService();
try {
- service.registerRemoteControlClient(rcClient.getRcEventReceiver(), /* eventReceiver */
+ service.registerRemoteControlClient(rcClient.getRcMediaIntent(), /* mediaIntent */
rcClient.getIRemoteControlClient(), /* rcClient */
- rcClient.toString(), /* clientName */
// used to match media button event receiver and audio focus
mContext.getPackageName()); /* packageName */
} catch (RemoteException e) {
@@ -1746,13 +1784,13 @@ public class AudioManager {
* @see #registerRemoteControlClient(RemoteControlClient)
*/
public void unregisterRemoteControlClient(RemoteControlClient rcClient) {
- if ((rcClient == null) || (rcClient.getRcEventReceiver() == null)) {
+ if ((rcClient == null) || (rcClient.getRcMediaIntent() == null)) {
return;
}
IAudioService service = getService();
try {
- service.unregisterRemoteControlClient(rcClient.getRcEventReceiver(), /* eventReceiver */
- rcClient.getIRemoteControlClient()); /* rcClient */
+ service.unregisterRemoteControlClient(rcClient.getRcMediaIntent(), /* mediaIntent */
+ rcClient.getIRemoteControlClient()); /* rcClient */
} catch (RemoteException e) {
Log.e(TAG, "Dead object in unregisterRemoteControlClient"+e);
}
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index db27cfd110d1..4f4f9297e614 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -18,6 +18,8 @@ package android.media;
import android.app.ActivityManagerNative;
import android.app.KeyguardManager;
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
@@ -35,6 +37,7 @@ import android.database.ContentObserver;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Binder;
+import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
@@ -2084,7 +2087,7 @@ public class AudioService extends IAudioService.Stub {
}
}
- private void persistMediaButtonReceiver(ComponentName receiver) {
+ private void onHandlePersistMediaButtonReceiver(ComponentName receiver) {
Settings.System.putString(mContentResolver, Settings.System.MEDIA_BUTTON_RECEIVER,
receiver == null ? "" : receiver.flattenToString());
}
@@ -2201,7 +2204,7 @@ public class AudioService extends IAudioService.Stub {
break;
case MSG_PERSIST_MEDIABUTTONRECEIVER:
- persistMediaButtonReceiver( (ComponentName) msg.obj );
+ onHandlePersistMediaButtonReceiver( (ComponentName) msg.obj );
break;
case MSG_RCDISPLAY_CLEAR:
@@ -2894,14 +2897,22 @@ public class AudioService extends IAudioService.Stub {
}
synchronized(mRCStack) {
if (!mRCStack.empty()) {
- // create a new intent specifically aimed at the current registered listener
+ // create a new intent to fill in the extras of the registered PendingIntent
Intent targetedIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
- targetedIntent.putExtras(intent.getExtras());
- targetedIntent.setComponent(mRCStack.peek().mReceiverComponent);
- // trap the current broadcast
- abortBroadcast();
- //Log.v(TAG, " Sending intent" + targetedIntent);
- context.sendBroadcast(targetedIntent, null);
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ targetedIntent.putExtras(extras);
+ // trap the current broadcast
+ abortBroadcast();
+ //Log.v(TAG, " Sending intent" + targetedIntent);
+ // send the intent that was registered by the client
+ try {
+ mRCStack.peek().mMediaIntent.send(context, 0, targetedIntent);
+ } catch (CanceledException e) {
+ Log.e(TAG, "Error sending pending intent " + mRCStack.peek());
+ e.printStackTrace();
+ }
+ }
}
}
}
@@ -2936,18 +2947,18 @@ public class AudioService extends IAudioService.Stub {
*/
private class RcClientDeathHandler implements IBinder.DeathRecipient {
private IBinder mCb; // To be notified of client's death
- private ComponentName mRcEventReceiver;
+ private PendingIntent mMediaIntent;
- RcClientDeathHandler(IBinder cb, ComponentName eventReceiver) {
+ RcClientDeathHandler(IBinder cb, PendingIntent pi) {
mCb = cb;
- mRcEventReceiver = eventReceiver;
+ mMediaIntent = pi;
}
public void binderDied() {
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, null/*ignored*/);
+ registerRemoteControlClient(mMediaIntent, null/*rcClient*/, null/*ignored*/);
}
public IBinder getBinder() {
@@ -2956,18 +2967,29 @@ public class AudioService extends IAudioService.Stub {
}
private static class RemoteControlStackEntry {
- /** the target for the ACTION_MEDIA_BUTTON events */
- public ComponentName mReceiverComponent;// always non null
+ /**
+ * The target for the ACTION_MEDIA_BUTTON events.
+ * Always non null.
+ */
+ public PendingIntent mMediaIntent;
+ /**
+ * The registered media button event receiver.
+ * Always non null.
+ */
+ public ComponentName mReceiverComponent;
public String mCallingPackageName;
- public String mRcClientName;
public int mCallingUid;
-
- /** provides access to the information to display on the remote control */
+ /**
+ * Provides access to the information to display on the remote control.
+ * May be null (when a media button event receiver is registered,
+ * but no remote control client has been registered) */
public IRemoteControlClient mRcClient;
public RcClientDeathHandler mRcClientDeathHandler;
- public RemoteControlStackEntry(ComponentName r) {
- mReceiverComponent = r;
+ /** precondition: mediaIntent != null, eventReceiver != null */
+ public RemoteControlStackEntry(PendingIntent mediaIntent, ComponentName eventReceiver) {
+ mMediaIntent = mediaIntent;
+ mReceiverComponent = eventReceiver;
mCallingUid = -1;
mRcClient = null;
}
@@ -3003,7 +3025,8 @@ public class AudioService extends IAudioService.Stub {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
- pw.println(" receiver: " + rcse.mReceiverComponent +
+ pw.println(" pi: " + rcse.mMediaIntent +
+ " -- ercvr: " + rcse.mReceiverComponent +
" -- client: " + rcse.mRcClient +
" -- uid: " + rcse.mCallingUid);
}
@@ -3035,7 +3058,6 @@ public class AudioService extends IAudioService.Stub {
mAudioHandler.sendMessage(
mAudioHandler.obtainMessage(MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0,
null));
- return;
} else if (oldTop != mRCStack.peek()) {
// the top of the stack has changed, save it in the system settings
// by posting a message to persist it
@@ -3049,25 +3071,32 @@ public class AudioService extends IAudioService.Stub {
/**
* Helper function:
- * Restore remote control receiver from the system settings
+ * Restore remote control receiver from the system settings.
*/
private void restoreMediaButtonReceiver() {
String receiverName = Settings.System.getString(mContentResolver,
Settings.System.MEDIA_BUTTON_RECEIVER);
if ((null != receiverName) && !receiverName.isEmpty()) {
- ComponentName receiverComponentName = ComponentName.unflattenFromString(receiverName);
- registerMediaButtonEventReceiver(receiverComponentName);
+ ComponentName eventReceiver = ComponentName.unflattenFromString(receiverName);
+ // construct a PendingIntent targeted to the restored component name
+ // for the media button and register it
+ Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ // the associated intent will be handled by the component being registered
+ mediaButtonIntent.setComponent(eventReceiver);
+ PendingIntent pi = PendingIntent.getBroadcast(mContext,
+ 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
+ registerMediaButtonIntent(pi, eventReceiver);
}
- // upon restoring (e.g. after boot), do we want to refresh all remotes?
}
/**
* Helper function:
- * Set the new remote control receiver at the top of the RC focus stack
+ * Set the new remote control receiver at the top of the RC focus stack.
+ * precondition: mediaIntent != null, target != null
*/
- private void pushMediaButtonReceiver(ComponentName newReceiver) {
+ private void pushMediaButtonReceiver(PendingIntent mediaIntent, ComponentName target) {
// already at top of stack?
- if (!mRCStack.empty() && mRCStack.peek().mReceiverComponent.equals(newReceiver)) {
+ if (!mRCStack.empty() && mRCStack.peek().mMediaIntent.equals(mediaIntent)) {
return;
}
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
@@ -3075,31 +3104,32 @@ public class AudioService extends IAudioService.Stub {
boolean wasInsideStack = false;
while(stackIterator.hasNext()) {
rcse = (RemoteControlStackEntry)stackIterator.next();
- if(rcse.mReceiverComponent.equals(newReceiver)) {
+ if(rcse.mMediaIntent.equals(mediaIntent)) {
wasInsideStack = true;
stackIterator.remove();
break;
}
}
if (!wasInsideStack) {
- rcse = new RemoteControlStackEntry(newReceiver);
+ rcse = new RemoteControlStackEntry(mediaIntent, target);
}
mRCStack.push(rcse);
// post message to persist the default media button receiver
mAudioHandler.sendMessage( mAudioHandler.obtainMessage(
- MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, newReceiver/*obj*/) );
+ MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) );
}
/**
* Helper function:
- * Remove the remote control receiver from the RC focus stack
+ * Remove the remote control receiver from the RC focus stack.
+ * precondition: pi != null
*/
- private void removeMediaButtonReceiver(ComponentName newReceiver) {
+ private void removeMediaButtonReceiver(PendingIntent pi) {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = (RemoteControlStackEntry)stackIterator.next();
- if(rcse.mReceiverComponent.equals(newReceiver)) {
+ if(rcse.mMediaIntent.equals(pi)) {
stackIterator.remove();
break;
}
@@ -3110,8 +3140,8 @@ public class AudioService extends IAudioService.Stub {
* Helper function:
* Called synchronized on mRCStack
*/
- private boolean isCurrentRcController(ComponentName eventReceiver) {
- if (!mRCStack.empty() && mRCStack.peek().mReceiverComponent.equals(eventReceiver)) {
+ private boolean isCurrentRcController(PendingIntent pi) {
+ if (!mRCStack.empty() && mRCStack.peek().mMediaIntent.equals(pi)) {
return true;
}
return false;
@@ -3124,12 +3154,12 @@ public class AudioService extends IAudioService.Stub {
* Update the remote control displays with the new "focused" client generation
*/
private void setNewRcClientOnDisplays_syncRcsCurrc(int newClientGeneration,
- ComponentName newClientEventReceiver, boolean clearing) {
+ PendingIntent newMediaIntent, boolean clearing) {
// NOTE: Only one IRemoteControlDisplay supported in this implementation
if (mRcDisplay != null) {
try {
mRcDisplay.setCurrentClientId(
- newClientGeneration, newClientEventReceiver, clearing);
+ newClientGeneration, newMediaIntent, clearing);
} catch (RemoteException e) {
Log.e(TAG, "Dead display in setNewRcClientOnDisplays_syncRcsCurrc() "+e);
// if we had a display before, stop monitoring its death
@@ -3167,10 +3197,9 @@ public class AudioService extends IAudioService.Stub {
* where the display should be cleared.
*/
private void setNewRcClient_syncRcsCurrc(int newClientGeneration,
- ComponentName newClientEventReceiver, boolean clearing) {
+ PendingIntent newMediaIntent, boolean clearing) {
// send the new valid client generation ID to all displays
- setNewRcClientOnDisplays_syncRcsCurrc(newClientGeneration, newClientEventReceiver,
- clearing);
+ setNewRcClientOnDisplays_syncRcsCurrc(newClientGeneration, newMediaIntent, clearing);
// send the new valid client generation ID to all clients
setNewRcClientGenerationOnClients_syncRcsCurrc(newClientGeneration);
}
@@ -3186,7 +3215,7 @@ public class AudioService extends IAudioService.Stub {
mCurrentRcClientGen++;
// synchronously update the displays and clients with the new client generation
setNewRcClient_syncRcsCurrc(mCurrentRcClientGen,
- null /*event receiver*/, true /*clearing*/);
+ null /*newMediaIntent*/, true /*clearing*/);
}
}
}
@@ -3204,7 +3233,7 @@ public class AudioService extends IAudioService.Stub {
// synchronously update the displays and clients with
// the new client generation
setNewRcClient_syncRcsCurrc(mCurrentRcClientGen,
- rcse.mReceiverComponent /*event receiver*/,
+ rcse.mMediaIntent /*newMediaIntent*/,
false /*clearing*/);
// tell the current client that it needs to send info
@@ -3301,27 +3330,34 @@ public class AudioService extends IAudioService.Stub {
updateRemoteControlDisplay_syncAfRcs(infoChangedFlags);
}
- /** see AudioManager.registerMediaButtonEventReceiver(ComponentName eventReceiver) */
- public void registerMediaButtonEventReceiver(ComponentName eventReceiver) {
- Log.i(TAG, " Remote Control registerMediaButtonEventReceiver() for " + eventReceiver);
+ /**
+ * see AudioManager.registerMediaButtonIntent(PendingIntent pi, ComponentName c)
+ * precondition: mediaIntent != null, target != null
+ */
+ public void registerMediaButtonIntent(PendingIntent mediaIntent, ComponentName eventReceiver) {
+ Log.i(TAG, " Remote Control registerMediaButtonIntent() for " + mediaIntent);
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
- pushMediaButtonReceiver(eventReceiver);
+ pushMediaButtonReceiver(mediaIntent, eventReceiver);
// new RC client, assume every type of information shall be queried
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
}
}
}
- /** see AudioManager.unregisterMediaButtonEventReceiver(ComponentName eventReceiver) */
- public void unregisterMediaButtonEventReceiver(ComponentName eventReceiver) {
- Log.i(TAG, " Remote Control unregisterMediaButtonEventReceiver() for " + eventReceiver);
+ /**
+ * see AudioManager.unregisterMediaButtonIntent(PendingIntent mediaIntent)
+ * precondition: mediaIntent != null, eventReceiver != null
+ */
+ public void unregisterMediaButtonIntent(PendingIntent mediaIntent, ComponentName eventReceiver)
+ {
+ Log.i(TAG, " Remote Control unregisterMediaButtonIntent() for " + mediaIntent);
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
- boolean topOfStackWillChange = isCurrentRcController(eventReceiver);
- removeMediaButtonReceiver(eventReceiver);
+ boolean topOfStackWillChange = isCurrentRcController(mediaIntent);
+ removeMediaButtonReceiver(mediaIntent);
if (topOfStackWillChange) {
// current RC client will change, assume every type of info needs to be queried
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
@@ -3330,9 +3366,14 @@ public class AudioService extends IAudioService.Stub {
}
}
- /** see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...) */
- public void registerRemoteControlClient(ComponentName eventReceiver,
- IRemoteControlClient rcClient, String clientName, String callingPackageName) {
+ /**
+ * see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...)
+ * Note: using this method with rcClient == null is a way to "disable" the IRemoteControlClient
+ * without modifying the RC stack, but while still causing the display to refresh (will
+ * become blank as a result of this)
+ */
+ public void registerRemoteControlClient(PendingIntent mediaIntent,
+ IRemoteControlClient rcClient, String callingPackageName) {
if (DEBUG_RC) Log.i(TAG, "Register remote control client rcClient="+rcClient);
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
@@ -3340,7 +3381,7 @@ public class AudioService extends IAudioService.Stub {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
- if(rcse.mReceiverComponent.equals(eventReceiver)) {
+ if(rcse.mMediaIntent.equals(mediaIntent)) {
// already had a remote control client?
if (rcse.mRcClientDeathHandler != null) {
// stop monitoring the old client's death
@@ -3348,6 +3389,15 @@ public class AudioService extends IAudioService.Stub {
}
// save the new remote control client
rcse.mRcClient = rcClient;
+ rcse.mCallingPackageName = callingPackageName;
+ rcse.mCallingUid = Binder.getCallingUid();
+ if (rcClient == null) {
+ rcse.mRcClientDeathHandler = null;
+ break;
+ }
+
+ // there is a new (non-null) client:
+ // 1/ give the new client the current display (if any)
if (mRcDisplay != null) {
try {
rcse.mRcClient.plugRemoteControlDisplay(mRcDisplay);
@@ -3356,17 +3406,10 @@ public class AudioService extends IAudioService.Stub {
e.printStackTrace();
}
}
- rcse.mCallingPackageName = callingPackageName;
- rcse.mRcClientName = clientName;
- rcse.mCallingUid = Binder.getCallingUid();
- if (rcClient == null) {
- rcse.mRcClientDeathHandler = null;
- break;
- }
- // monitor the new client's death
- IBinder b = rcClient.asBinder();
+ // 2/ monitor the new client's death
+ IBinder b = rcse.mRcClient.asBinder();
RcClientDeathHandler rcdh =
- new RcClientDeathHandler(b, rcse.mReceiverComponent);
+ new RcClientDeathHandler(b, rcse.mMediaIntent);
try {
b.linkToDeath(rcdh, 0);
} catch (RemoteException e) {
@@ -3380,7 +3423,7 @@ public class AudioService extends IAudioService.Stub {
}
// if the eventReceiver is at the top of the stack
// then check for potential refresh of the remote controls
- if (isCurrentRcController(eventReceiver)) {
+ if (isCurrentRcController(mediaIntent)) {
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
}
}
@@ -3388,24 +3431,23 @@ public class AudioService extends IAudioService.Stub {
}
/**
- * see AudioManager.unregisterRemoteControlClient(ComponentName eventReceiver, ...)
+ * see AudioManager.unregisterRemoteControlClient(PendingIntent pi, ...)
* rcClient is guaranteed non-null
*/
- public void unregisterRemoteControlClient(ComponentName eventReceiver,
+ public void unregisterRemoteControlClient(PendingIntent mediaIntent,
IRemoteControlClient rcClient) {
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
- if ((rcse.mReceiverComponent.equals(eventReceiver))
+ if ((rcse.mMediaIntent.equals(mediaIntent))
&& rcClient.equals(rcse.mRcClient)) {
// we found the IRemoteControlClient to unregister
// stop monitoring its death
rcse.unlinkToRcClientDeath();
// reset the client-related fields
rcse.mRcClient = null;
- rcse.mRcClientName = null;
rcse.mRcClientDeathHandler = null;
rcse.mCallingPackageName = null;
}
diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java
index b2234e2c3e7b..51a45cdeca2c 100644
--- a/media/java/android/media/CamcorderProfile.java
+++ b/media/java/android/media/CamcorderProfile.java
@@ -81,6 +81,16 @@ public class CamcorderProfile
public static final int QUALITY_1080P = 6;
/**
+ * Quality level corresponding to the QVGA (320x240) resolution.
+ * {@hide}
+ */
+ public static final int QUALITY_QVGA = 7;
+
+ // Start and end of quality list
+ private static final int QUALITY_LIST_START = QUALITY_LOW;
+ private static final int QUALITY_LIST_END = QUALITY_QVGA;
+
+ /**
* Time lapse quality level corresponding to the lowest available resolution.
*/
public static final int QUALITY_TIME_LAPSE_LOW = 1000;
@@ -116,6 +126,16 @@ public class CamcorderProfile
public static final int QUALITY_TIME_LAPSE_1080P = 1006;
/**
+ * Time lapse quality level corresponding to the QVGA (320 x 240) resolution.
+ * {@hide}
+ */
+ public static final int QUALITY_TIME_LAPSE_QVGA = 1007;
+
+ // Start and end of timelapse quality list
+ private static final int QUALITY_TIME_LAPSE_LIST_START = QUALITY_TIME_LAPSE_LOW;
+ private static final int QUALITY_TIME_LAPSE_LIST_END = QUALITY_TIME_LAPSE_QVGA;
+
+ /**
* Default recording duration in seconds before the session is terminated.
* This is useful for applications like MMS has limited file size requirement.
*/
@@ -238,8 +258,10 @@ public class CamcorderProfile
* @see #QUALITY_TIME_LAPSE_1080P
*/
public static CamcorderProfile get(int cameraId, int quality) {
- if (!((quality >= QUALITY_LOW && quality <= QUALITY_1080P) ||
- (quality >= QUALITY_TIME_LAPSE_LOW && quality <= QUALITY_TIME_LAPSE_1080P))) {
+ if (!((quality >= QUALITY_LIST_START &&
+ quality <= QUALITY_LIST_END) ||
+ (quality >= QUALITY_TIME_LAPSE_LIST_START &&
+ quality <= QUALITY_TIME_LAPSE_LIST_END))) {
String errMessage = "Unsupported quality level: " + quality;
throw new IllegalArgumentException(errMessage);
}
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 7bf981442b27..5294d36ae03b 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -16,6 +16,7 @@
package android.media;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.media.IAudioFocusDispatcher;
import android.media.IRemoteControlClient;
@@ -85,13 +86,12 @@ interface IAudioService {
void unregisterAudioFocusClient(String clientId);
- void registerMediaButtonEventReceiver(in ComponentName eventReceiver);
+ oneway void registerMediaButtonIntent(in PendingIntent pi, in ComponentName c);
+ oneway void unregisterMediaButtonIntent(in PendingIntent pi, in ComponentName c);
- void unregisterMediaButtonEventReceiver(in ComponentName eventReceiver);
-
- oneway void registerRemoteControlClient(in ComponentName eventReceiver,
- in IRemoteControlClient rcClient, in String clientName, in String callingPackageName);
- oneway void unregisterRemoteControlClient(in ComponentName eventReceiver,
+ oneway void registerRemoteControlClient(in PendingIntent mediaIntent,
+ in IRemoteControlClient rcClient, in String callingPackageName);
+ oneway void unregisterRemoteControlClient(in PendingIntent mediaIntent,
in IRemoteControlClient rcClient);
oneway void registerRemoteControlDisplay(in IRemoteControlDisplay rcd);
diff --git a/media/java/android/media/IRemoteControlDisplay.aidl b/media/java/android/media/IRemoteControlDisplay.aidl
index fd50b7e07ef6..204de3c28d7c 100644
--- a/media/java/android/media/IRemoteControlDisplay.aidl
+++ b/media/java/android/media/IRemoteControlDisplay.aidl
@@ -16,6 +16,7 @@
package android.media;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.graphics.Bitmap;
import android.os.Bundle;
@@ -31,17 +32,15 @@ oneway interface IRemoteControlDisplay
/**
* Sets the generation counter of the current client that is displayed on the remote control.
* @param clientGeneration the new RemoteControlClient generation
- * @param clientEventReceiver the media button event receiver associated with the client.
- * May be null, which implies there is no registered media button event receiver. This
- * parameter is supplied as an optimization so a display can directly target media button
- * events to the client.
+ * @param clientMediaIntent the PendingIntent associated with the client.
+ * May be null, which implies there is no registered media button event receiver.
* @param clearing true if the new client generation value maps to a remote control update
* where the display should be cleared.
*/
- void setCurrentClientId(int clientGeneration, in ComponentName clientEventReceiver,
+ void setCurrentClientId(int clientGeneration, in PendingIntent clientMediaIntent,
boolean clearing);
- void setPlaybackState(int generationId, int state);
+ void setPlaybackState(int generationId, int state, long stateChangeTimeMs);
void setTransportControlFlags(int generationId, int transportControlFlags);
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 65818a1b50cc..2d927ad9c583 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -314,14 +314,14 @@ public class MediaScanner
// WARNING: Bulk inserts sounded like a great idea and gave us a good performance improvement,
// but unfortunately it also introduced a number of bugs. Many of those bugs were fixed,
- // but (at least) two problems are still outstanding:
+ // but (at least) one problem is still outstanding:
//
- // 1) Bulk inserts broke the code that sets the default ringtones on first boot
- // 2) Bulk inserts broke file based playlists in the case where the playlist is processed
- // at the same time the files in the playlist are inserted in the database
+ // - Bulk inserts broke the code that sets the default ringtones, notifications, and alarms
+ // on first boot
//
- // These problems might be solvable by moving the logic to the media provider instead,
- // but for now we are disabling bulk inserts until we have solid fixes for these problems.
+ // This problem might be solvable by moving the logic to the media provider or disabling bulk
+ // inserts only for those cases. For now, we are disabling bulk inserts until we have a solid
+ // fix for this problem.
private static final boolean ENABLE_BULK_INSERTS = false;
// used when scanning the image database so we know whether we have to prune
@@ -470,6 +470,8 @@ public class MediaScanner
private int mCompilation;
private boolean mIsDrm;
private boolean mNoMedia; // flag to suppress file from appearing in media tables
+ private int mWidth;
+ private int mHeight;
public FileCacheEntry beginFile(String path, String mimeType, long lastModified,
long fileSize, boolean isDirectory, boolean noMedia) {
@@ -545,6 +547,8 @@ public class MediaScanner
mWriter = null;
mCompilation = 0;
mIsDrm = false;
+ mWidth = 0;
+ mHeight = 0;
return entry;
}
@@ -583,6 +587,10 @@ public class MediaScanner
processFile(path, mimeType, this);
}
+ if (MediaFile.isImageFileType(mFileType)) {
+ processImageFile(path);
+ }
+
result = endFile(entry, ringtones, notifications, alarms, music, podcasts);
}
}
@@ -697,6 +705,18 @@ public class MediaScanner
return genreTagValue;
}
+ private void processImageFile(String path) {
+ try {
+ mBitmapOptions.outWidth = 0;
+ mBitmapOptions.outHeight = 0;
+ BitmapFactory.decodeFile(path, mBitmapOptions);
+ mWidth = mBitmapOptions.outWidth;
+ mHeight = mBitmapOptions.outHeight;
+ } catch (Throwable th) {
+ // ignore;
+ }
+ }
+
public void setMimeType(String mimeType) {
if ("audio/mp4".equals(mMimeType) &&
mimeType.startsWith("video")) {
@@ -725,6 +745,11 @@ public class MediaScanner
map.put(MediaStore.MediaColumns.MIME_TYPE, mMimeType);
map.put(MediaStore.MediaColumns.IS_DRM, mIsDrm);
+ if (mWidth > 0 && mHeight > 0) {
+ map.put(MediaStore.MediaColumns.WIDTH, mWidth);
+ map.put(MediaStore.MediaColumns.HEIGHT, mHeight);
+ }
+
if (!mNoMedia) {
if (MediaFile.isVideoFileType(mFileType)) {
map.put(Video.Media.ARTIST, (mArtist != null && mArtist.length() > 0
@@ -1439,7 +1464,22 @@ public class MediaScanner
}
try {
- // OK, now we need to add this to the database
+ // check rowid is set. Rowid may be missing if it is inserted by bulkInsert().
+ if (bestMatch.mRowId == 0) {
+ Cursor c = mMediaProvider.query(mAudioUri, ID_PROJECTION,
+ MediaStore.Files.FileColumns.DATA + "=?",
+ new String[] { bestMatch.mPath }, null);
+ if (c != null) {
+ if (c.moveToNext()) {
+ bestMatch.mRowId = c.getLong(0);
+ }
+ c.close();
+ }
+ if (bestMatch.mRowId == 0) {
+ return false;
+ }
+ }
+ // OK, now we are ready to add this to the database
values.clear();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(index));
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, Long.valueOf(bestMatch.mRowId));
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index f66f1b028e40..198ae4c8f7f7 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -29,11 +29,13 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.util.Log;
import java.lang.IllegalArgumentException;
/**
+ * TODO javadoc update for ComponentName - PendingIntent change
* RemoteControlClient enables exposing information meant to be consumed by remote controls
* capable of displaying metadata, artwork and media transport control buttons.
* A remote control client object is associated with a media button event receiver. This
@@ -205,50 +207,6 @@ public class RemoteControlClient
public final static int FLAG_INFORMATION_REQUEST_ALBUM_ART = 1 << 3;
/**
- * @hide
- * TODO remove after modifying known (internal) media apps using this API
- * Class constructor.
- * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have
- * been registered with {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)}
- * before this new RemoteControlClient can itself be registered with
- * {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}.
- * @see AudioManager#registerMediaButtonEventReceiver(ComponentName)
- * @see AudioManager#registerRemoteControlClient(RemoteControlClient)
- */
- public RemoteControlClient(ComponentName mediaButtonEventReceiver) {
- mRcEventReceiver = mediaButtonEventReceiver;
-
- Looper looper;
- if ((looper = Looper.myLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else if ((looper = Looper.getMainLooper()) != null) {
- mEventHandler = new EventHandler(this, looper);
- } else {
- mEventHandler = null;
- Log.e(TAG, "RemoteControlClient() couldn't find main application thread");
- }
- }
-
- /**
- * @hide
- * TODO remove after modifying known (internal) media apps using this API
- * Class constructor for a remote control client whose internal event handling
- * happens on a user-provided Looper.
- * @param mediaButtonEventReceiver The receiver for the media button events. It needs to have
- * been registered with {@link AudioManager#registerMediaButtonEventReceiver(ComponentName)}
- * before this new RemoteControlClient can itself be registered with
- * {@link AudioManager#registerRemoteControlClient(RemoteControlClient)}.
- * @param looper The Looper running the event loop.
- * @see AudioManager#registerMediaButtonEventReceiver(ComponentName)
- * @see AudioManager#registerRemoteControlClient(RemoteControlClient)
- */
- public RemoteControlClient(ComponentName mediaButtonEventReceiver, Looper looper) {
- mRcEventReceiver = mediaButtonEventReceiver;
-
- mEventHandler = new EventHandler(this, looper);
- }
-
- /**
* Class constructor.
* @param mediaButtonIntent The intent that will be sent for the media button events sent
* by remote controls.
@@ -262,8 +220,7 @@ public class RemoteControlClient
* @see AudioManager#registerRemoteControlClient(RemoteControlClient)
*/
public RemoteControlClient(PendingIntent mediaButtonIntent) {
- // TODO implement using PendingIntent instead of ComponentName
- mRcEventReceiver = null;
+ mRcMediaIntent = mediaButtonIntent;
Looper looper;
if ((looper = Looper.myLooper()) != null) {
@@ -292,8 +249,7 @@ public class RemoteControlClient
* @see AudioManager#registerRemoteControlClient(RemoteControlClient)
*/
public RemoteControlClient(PendingIntent mediaButtonIntent, Looper looper) {
- // TODO implement using PendingIntent instead of ComponentName
- mRcEventReceiver = null;
+ mRcMediaIntent = mediaButtonIntent;
mEventHandler = new EventHandler(this, looper);
}
@@ -482,7 +438,11 @@ public class RemoteControlClient
synchronized(mCacheLock) {
// assign the edited data
mMetadata = new Bundle(mEditorMetadata);
+ if ((mArtwork != null) && (!mArtwork.equals(mEditorArtwork))) {
+ mArtwork.recycle();
+ }
mArtwork = mEditorArtwork;
+ mEditorArtwork = null;
if (mMetadataChanged & mArtworkChanged) {
// send to remote control display if conditions are met
sendMetadataWithArtwork_syncCacheLock();
@@ -535,11 +495,15 @@ public class RemoteControlClient
*/
public void setPlaybackState(int state) {
synchronized(mCacheLock) {
- // store locally
- mPlaybackState = state;
-
- // send to remote control display if conditions are met
- sendPlaybackState_syncCacheLock();
+ if (mPlaybackState != state) {
+ // store locally
+ mPlaybackState = state;
+ // keep track of when the state change occurred
+ mPlaybackStateChangeTimeMs = SystemClock.elapsedRealtime();
+
+ // send to remote control display if conditions are met
+ sendPlaybackState_syncCacheLock();
+ }
}
}
@@ -575,6 +539,11 @@ public class RemoteControlClient
*/
private int mPlaybackState = PLAYSTATE_NONE;
/**
+ * Time of last play state change
+ * Access synchronized on mCacheLock
+ */
+ private long mPlaybackStateChangeTimeMs = 0;
+ /**
* Cache for the artwork bitmap.
* Access synchronized on mCacheLock
* Artwork and metadata are not kept in one Bundle because the bitmap sometimes needs to be
@@ -610,9 +579,10 @@ public class RemoteControlClient
private int mInternalClientGenId = -2;
/**
- * The media button event receiver associated with this remote control client
+ * The media button intent description associated with this remote control client
+ * (can / should include target component for intent handling)
*/
- private final ComponentName mRcEventReceiver;
+ private final PendingIntent mRcMediaIntent;
/**
* The remote control display to which this client will send information.
@@ -622,10 +592,10 @@ public class RemoteControlClient
/**
* @hide
- * Accessor to media button event receiver
+ * Accessor to media button intent description (includes target component)
*/
- public ComponentName getRcEventReceiver() {
- return mRcEventReceiver;
+ public PendingIntent getRcMediaIntent() {
+ return mRcMediaIntent;
}
/**
* @hide
@@ -756,7 +726,8 @@ public class RemoteControlClient
private void sendPlaybackState_syncCacheLock() {
if ((mCurrentClientGenId == mInternalClientGenId) && (mRcDisplay != null)) {
try {
- mRcDisplay.setPlaybackState(mInternalClientGenId, mPlaybackState);
+ mRcDisplay.setPlaybackState(mInternalClientGenId, mPlaybackState,
+ mPlaybackStateChangeTimeMs);
} catch (RemoteException e) {
Log.e(TAG, "Error in setPlaybackState(), dead display "+e);
detachFromDisplay_syncCacheLock();
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index 0ce35269bf39..8bb52332f82d 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -166,6 +166,9 @@ public class Ringtone {
}
private void openMediaPlayer() throws IOException {
+ if (mAudio != null) {
+ mAudio.release();
+ }
mAudio = new MediaPlayer();
if (mUri != null) {
mAudio.setDataSource(mContext, mUri);
@@ -203,7 +206,22 @@ public class Ringtone {
mUri = uri;
openMediaPlayer();
}
-
+
+ /** @hide */
+ public void setWakeMode(Context context, int mode) {
+ if (mAudio == null) {
+ try {
+ openMediaPlayer();
+ } catch (Exception ex) {
+ Log.e(TAG, "setWakeMode() caught ", ex);
+ mAudio = null;
+ }
+ }
+ if (mAudio != null) {
+ mAudio.setWakeMode(context, mode);
+ }
+ }
+
/**
* Plays the ringtone.
*/
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 5dfbe01396a1..f3174fef2666 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -245,6 +245,20 @@ getVideoSurfaceTexture(JNIEnv* env, jobject thiz) {
}
static void
+decVideoSurfaceRef(JNIEnv *env, jobject thiz)
+{
+ sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
+ if (mp == NULL) {
+ return;
+ }
+
+ sp<ISurfaceTexture> old_st = getVideoSurfaceTexture(env, thiz);
+ if (old_st != NULL) {
+ old_st->decStrong(thiz);
+ }
+}
+
+static void
setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface, jboolean mediaPlayerMustBeAlive)
{
sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
@@ -255,16 +269,15 @@ setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface, jboolean mediaPlaye
return;
}
- sp<ISurfaceTexture> old_st = getVideoSurfaceTexture(env, thiz);
+ decVideoSurfaceRef(env, thiz);
+
sp<ISurfaceTexture> new_st;
if (jsurface) {
sp<Surface> surface(Surface_getSurface(env, jsurface));
new_st = surface->getSurfaceTexture();
new_st->incStrong(thiz);
}
- if (old_st != NULL) {
- old_st->decStrong(thiz);
- }
+
env->SetIntField(thiz, fields.surface_texture, (int)new_st.get());
// This will fail if the media player has not been initialized yet. This
@@ -625,7 +638,7 @@ static void
android_media_MediaPlayer_release(JNIEnv *env, jobject thiz)
{
LOGV("release");
- setVideoSurface(env, thiz, NULL, false /* mediaPlayerMustBeAlive */);
+ decVideoSurfaceRef(env, thiz);
sp<MediaPlayer> mp = setMediaPlayer(env, thiz, 0);
if (mp != NULL) {
// this prevents native callbacks after the object is released
@@ -638,6 +651,10 @@ static void
android_media_MediaPlayer_native_finalize(JNIEnv *env, jobject thiz)
{
LOGV("native_finalize");
+ sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
+ if (mp != NULL) {
+ LOGW("MediaPlayer finalized without being released");
+ }
android_media_MediaPlayer_release(env, thiz);
}
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index e5e688c3268f..7ed005004aa4 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -161,13 +161,19 @@ android_media_MediaProfiles_native_get_audio_encoder_cap(JNIEnv *env, jobject th
return cap;
}
+static bool isCamcorderQualityKnown(int quality)
+{
+ return ((quality >= CAMCORDER_QUALITY_LIST_START &&
+ quality <= CAMCORDER_QUALITY_LIST_END) ||
+ (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LIST_START &&
+ quality <= CAMCORDER_QUALITY_TIME_LAPSE_LIST_END));
+}
+
static jobject
android_media_MediaProfiles_native_get_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality)
{
LOGV("native_get_camcorder_profile: %d %d", id, quality);
- if (!((quality >= CAMCORDER_QUALITY_LOW && quality <= CAMCORDER_QUALITY_1080P) ||
- (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LOW &&
- quality <= CAMCORDER_QUALITY_TIME_LAPSE_1080P))) {
+ if (!isCamcorderQualityKnown(quality)) {
jniThrowException(env, "java/lang/RuntimeException", "Unknown camcorder profile quality");
return NULL;
}
@@ -216,9 +222,7 @@ static jboolean
android_media_MediaProfiles_native_has_camcorder_profile(JNIEnv *env, jobject thiz, jint id, jint quality)
{
LOGV("native_has_camcorder_profile: %d %d", id, quality);
- if (!((quality >= CAMCORDER_QUALITY_LOW && quality <= CAMCORDER_QUALITY_1080P) ||
- (quality >= CAMCORDER_QUALITY_TIME_LAPSE_LOW &&
- quality <= CAMCORDER_QUALITY_TIME_LAPSE_1080P))) {
+ if (!isCamcorderQualityKnown(quality)) {
return false;
}
diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp
index 5a8bc6036463..ad55ff86441b 100644
--- a/media/libmedia/MediaProfiles.cpp
+++ b/media/libmedia/MediaProfiles.cpp
@@ -67,6 +67,7 @@ const MediaProfiles::NameToTagMap MediaProfiles::sCamcorderQualityNameMap[] = {
{"480p", CAMCORDER_QUALITY_480P},
{"720p", CAMCORDER_QUALITY_720P},
{"1080p", CAMCORDER_QUALITY_1080P},
+ {"qvga", CAMCORDER_QUALITY_QVGA},
{"timelapselow", CAMCORDER_QUALITY_TIME_LAPSE_LOW},
{"timelapsehigh", CAMCORDER_QUALITY_TIME_LAPSE_HIGH},
@@ -74,7 +75,8 @@ const MediaProfiles::NameToTagMap MediaProfiles::sCamcorderQualityNameMap[] = {
{"timelapsecif", CAMCORDER_QUALITY_TIME_LAPSE_CIF},
{"timelapse480p", CAMCORDER_QUALITY_TIME_LAPSE_480P},
{"timelapse720p", CAMCORDER_QUALITY_TIME_LAPSE_720P},
- {"timelapse1080p", CAMCORDER_QUALITY_TIME_LAPSE_1080P}
+ {"timelapse1080p", CAMCORDER_QUALITY_TIME_LAPSE_1080P},
+ {"timelapseqvga", CAMCORDER_QUALITY_TIME_LAPSE_QVGA},
};
/*static*/ void
@@ -1139,7 +1141,7 @@ int MediaProfiles::getStartTimeOffsetMs(int cameraId) const {
if (index >= 0) {
offsetTimeMs = mStartTimeOffsets.valueFor(cameraId);
}
- LOGV("%s: offsetTime=%d ms and cameraId=%d", offsetTimeMs, cameraId);
+ LOGV("offsetTime=%d ms and cameraId=%d", offsetTimeMs, cameraId);
return offsetTimeMs;
}
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 0386d4b65987..b5eef94a4c00 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -52,6 +52,7 @@
#include <media/Metadata.h>
#include <media/AudioTrack.h>
#include <media/MemoryLeakTrackUtil.h>
+#include <media/stagefright/MediaErrors.h>
#include <system/audio.h>
@@ -1132,7 +1133,11 @@ sp<IMemory> MediaPlayerService::decode(const char* url, uint32_t *pSampleRate, i
player->start();
LOGV("wait for playback complete");
- if (cache->wait() != NO_ERROR) goto Exit;
+ cache->wait();
+ // in case of error, return what was successfully decoded.
+ if (cache->size() == 0) {
+ goto Exit;
+ }
mem = new MemoryBase(cache->getHeap(), 0, cache->size());
*pSampleRate = cache->sampleRate();
@@ -1175,7 +1180,11 @@ sp<IMemory> MediaPlayerService::decode(int fd, int64_t offset, int64_t length, u
player->start();
LOGV("wait for playback complete");
- if (cache->wait() != NO_ERROR) goto Exit;
+ cache->wait();
+ // in case of error, return what was successfully decoded.
+ if (cache->size() == 0) {
+ goto Exit;
+ }
mem = new MemoryBase(cache->getHeap(), 0, cache->size());
*pSampleRate = cache->sampleRate();
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
index 605d056f3504..079f6fa01952 100644
--- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp
@@ -41,7 +41,7 @@ NuPlayer::HTTPLiveSource::HTTPLiveSource(
mUIDValid(uidValid),
mUID(uid),
mFlags(0),
- mEOS(false),
+ mFinalResult(OK),
mOffset(0) {
if (headers) {
mExtraHeaders = *headers;
@@ -95,9 +95,9 @@ sp<MetaData> NuPlayer::HTTPLiveSource::getFormat(bool audio) {
return source->getFormat();
}
-bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
- if (mEOS) {
- return false;
+status_t NuPlayer::HTTPLiveSource::feedMoreTSData() {
+ if (mFinalResult != OK) {
+ return mFinalResult;
}
sp<LiveDataSource> source =
@@ -110,9 +110,13 @@ bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
if (n == -EWOULDBLOCK) {
break;
} else if (n < 0) {
- LOGI("input data EOS reached.");
+ if (n != ERROR_END_OF_STREAM) {
+ LOGI("input data EOS reached, error %ld", n);
+ } else {
+ LOGI("input data EOS reached.");
+ }
mTSParser->signalEOS(n);
- mEOS = true;
+ mFinalResult = n;
break;
} else {
if (buffer[0] == 0x00) {
@@ -129,7 +133,7 @@ bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
if (err != OK) {
LOGE("TS Parser returned error %d", err);
mTSParser->signalEOS(err);
- mEOS = true;
+ mFinalResult = err;
break;
}
}
@@ -138,7 +142,7 @@ bool NuPlayer::HTTPLiveSource::feedMoreTSData() {
}
}
- return true;
+ return OK;
}
status_t NuPlayer::HTTPLiveSource::dequeueAccessUnit(
@@ -168,7 +172,7 @@ status_t NuPlayer::HTTPLiveSource::getDuration(int64_t *durationUs) {
status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs) {
// We need to make sure we're not seeking until we have seen the very first
// PTS timestamp in the whole stream (from the beginning of the stream).
- while (!mTSParser->PTSTimeDeltaEstablished() && feedMoreTSData()) {
+ while (!mTSParser->PTSTimeDeltaEstablished() && feedMoreTSData() == OK) {
usleep(100000);
}
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.h b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.h
index 36c67c501b38..f22af5bee607 100644
--- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.h
+++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.h
@@ -35,8 +35,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source {
virtual void start();
- // Returns true iff more data was available, false on EOS.
- virtual bool feedMoreTSData();
+ virtual status_t feedMoreTSData();
virtual sp<MetaData> getFormat(bool audio);
virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit);
@@ -59,7 +58,7 @@ private:
bool mUIDValid;
uid_t mUID;
uint32_t mFlags;
- bool mEOS;
+ status_t mFinalResult;
off64_t mOffset;
sp<ALooper> mLiveLooper;
sp<LiveSession> mLiveSession;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
index ee77f474b237..6b40528a160f 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp
@@ -34,17 +34,21 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/ACodec.h>
+#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MetaData.h>
#include <surfaceflinger/Surface.h>
#include <gui/ISurfaceTexture.h>
+#include "avc_utils.h"
+
namespace android {
////////////////////////////////////////////////////////////////////////////////
NuPlayer::NuPlayer()
: mUIDValid(false),
+ mVideoIsAVC(false),
mAudioEOS(false),
mVideoEOS(false),
mScanSourcesPending(false),
@@ -52,7 +56,12 @@ NuPlayer::NuPlayer()
mFlushingAudio(NONE),
mFlushingVideo(NONE),
mResetInProgress(false),
- mResetPostponed(false) {
+ mResetPostponed(false),
+ mSkipRenderingAudioUntilMediaTimeUs(-1ll),
+ mSkipRenderingVideoUntilMediaTimeUs(-1ll),
+ mVideoLateByUs(0ll),
+ mNumFramesTotal(0ll),
+ mNumFramesDropped(0ll) {
}
NuPlayer::~NuPlayer() {
@@ -185,10 +194,14 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
{
LOGV("kWhatStart");
+ mVideoIsAVC = false;
mAudioEOS = false;
mVideoEOS = false;
mSkipRenderingAudioUntilMediaTimeUs = -1;
mSkipRenderingVideoUntilMediaTimeUs = -1;
+ mVideoLateByUs = 0;
+ mNumFramesTotal = 0;
+ mNumFramesDropped = 0;
mSource->start();
@@ -222,11 +235,17 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
instantiateDecoder(true, &mAudioDecoder);
}
- if (!mSource->feedMoreTSData()) {
+ status_t err;
+ if ((err = mSource->feedMoreTSData()) != OK) {
if (mAudioDecoder == NULL && mVideoDecoder == NULL) {
// We're not currently decoding anything (no audio or
// video tracks found) and we just ran out of input data.
- notifyListener(MEDIA_PLAYBACK_COMPLETE, 0, 0);
+
+ if (err == ERROR_END_OF_STREAM) {
+ notifyListener(MEDIA_PLAYBACK_COMPLETE, 0, 0);
+ } else {
+ notifyListener(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, err);
+ }
}
break;
}
@@ -254,12 +273,23 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
audio, codecRequest);
if (err == -EWOULDBLOCK) {
- if (mSource->feedMoreTSData()) {
+ if (mSource->feedMoreTSData() == OK) {
msg->post();
}
}
} else if (what == ACodec::kWhatEOS) {
- mRenderer->queueEOS(audio, ERROR_END_OF_STREAM);
+ int32_t err;
+ CHECK(codecRequest->findInt32("err", &err));
+
+ if (err == ERROR_END_OF_STREAM) {
+ LOGV("got %s decoder EOS", audio ? "audio" : "video");
+ } else {
+ LOGV("got %s decoder EOS w/ error %d",
+ audio ? "audio" : "video",
+ err);
+ }
+
+ mRenderer->queueEOS(audio, err);
} else if (what == ACodec::kWhatFlushCompleted) {
bool needShutdown;
@@ -269,6 +299,8 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
} else {
CHECK(IsFlushingState(mFlushingVideo, &needShutdown));
mFlushingVideo = FLUSHED;
+
+ mVideoLateByUs = 0;
}
LOGV("decoder %s flush completed", audio ? "audio" : "video");
@@ -299,7 +331,12 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
sampleRate, numChannels);
mAudioSink->close();
- CHECK_EQ(mAudioSink->open(sampleRate, numChannels), (status_t)OK);
+ CHECK_EQ(mAudioSink->open(
+ sampleRate,
+ numChannels,
+ AUDIO_FORMAT_PCM_16_BIT,
+ 8 /* bufferCount */),
+ (status_t)OK);
mAudioSink->start();
mRenderer->signalAudioSinkChanged();
@@ -377,7 +414,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
if (finalResult == ERROR_END_OF_STREAM) {
LOGV("reached %s EOS", audio ? "audio" : "video");
} else {
- LOGE("%s track encountered an error (0x%08x)",
+ LOGE("%s track encountered an error (%d)",
audio ? "audio" : "video", finalResult);
notifyListener(
@@ -392,13 +429,18 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {
int64_t positionUs;
CHECK(msg->findInt64("positionUs", &positionUs));
+ CHECK(msg->findInt64("videoLateByUs", &mVideoLateByUs));
+
if (mDriver != NULL) {
sp<NuPlayerDriver> driver = mDriver.promote();
if (driver != NULL) {
driver->notifyPosition(positionUs);
+
+ driver->notifyFrameStats(
+ mNumFramesTotal, mNumFramesDropped);
}
}
- } else {
+ } else if (what == Renderer::kWhatFlushComplete) {
CHECK_EQ(what, (int32_t)Renderer::kWhatFlushComplete);
int32_t audio;
@@ -560,6 +602,12 @@ status_t NuPlayer::instantiateDecoder(bool audio, sp<Decoder> *decoder) {
return -EWOULDBLOCK;
}
+ if (!audio) {
+ const char *mime;
+ CHECK(meta->findCString(kKeyMIMEType, &mime));
+ mVideoIsAVC = !strcasecmp(MEDIA_MIMETYPE_VIDEO_AVC, mime);
+ }
+
sp<AMessage> notify =
new AMessage(audio ? kWhatAudioNotify : kWhatVideoNotify,
id());
@@ -593,53 +641,70 @@ status_t NuPlayer::feedDecoderInputData(bool audio, const sp<AMessage> &msg) {
}
sp<ABuffer> accessUnit;
- status_t err = mSource->dequeueAccessUnit(audio, &accessUnit);
- if (err == -EWOULDBLOCK) {
- return err;
- } else if (err != OK) {
- if (err == INFO_DISCONTINUITY) {
- int32_t type;
- CHECK(accessUnit->meta()->findInt32("discontinuity", &type));
+ bool dropAccessUnit;
+ do {
+ status_t err = mSource->dequeueAccessUnit(audio, &accessUnit);
- bool formatChange =
- type == ATSParser::DISCONTINUITY_FORMATCHANGE;
+ if (err == -EWOULDBLOCK) {
+ return err;
+ } else if (err != OK) {
+ if (err == INFO_DISCONTINUITY) {
+ int32_t type;
+ CHECK(accessUnit->meta()->findInt32("discontinuity", &type));
- LOGV("%s discontinuity (formatChange=%d)",
- audio ? "audio" : "video", formatChange);
+ bool formatChange =
+ type == ATSParser::DISCONTINUITY_FORMATCHANGE;
- if (audio) {
- mSkipRenderingAudioUntilMediaTimeUs = -1;
- } else {
- mSkipRenderingVideoUntilMediaTimeUs = -1;
- }
+ LOGV("%s discontinuity (formatChange=%d)",
+ audio ? "audio" : "video", formatChange);
- sp<AMessage> extra;
- if (accessUnit->meta()->findMessage("extra", &extra)
- && extra != NULL) {
- int64_t resumeAtMediaTimeUs;
- if (extra->findInt64(
- "resume-at-mediatimeUs", &resumeAtMediaTimeUs)) {
- LOGI("suppressing rendering of %s until %lld us",
- audio ? "audio" : "video", resumeAtMediaTimeUs);
+ if (audio) {
+ mSkipRenderingAudioUntilMediaTimeUs = -1;
+ } else {
+ mSkipRenderingVideoUntilMediaTimeUs = -1;
+ }
- if (audio) {
- mSkipRenderingAudioUntilMediaTimeUs =
- resumeAtMediaTimeUs;
- } else {
- mSkipRenderingVideoUntilMediaTimeUs =
- resumeAtMediaTimeUs;
+ sp<AMessage> extra;
+ if (accessUnit->meta()->findMessage("extra", &extra)
+ && extra != NULL) {
+ int64_t resumeAtMediaTimeUs;
+ if (extra->findInt64(
+ "resume-at-mediatimeUs", &resumeAtMediaTimeUs)) {
+ LOGI("suppressing rendering of %s until %lld us",
+ audio ? "audio" : "video", resumeAtMediaTimeUs);
+
+ if (audio) {
+ mSkipRenderingAudioUntilMediaTimeUs =
+ resumeAtMediaTimeUs;
+ } else {
+ mSkipRenderingVideoUntilMediaTimeUs =
+ resumeAtMediaTimeUs;
+ }
}
}
+
+ flushDecoder(audio, formatChange);
}
- flushDecoder(audio, formatChange);
+ reply->setInt32("err", err);
+ reply->post();
+ return OK;
}
- reply->setInt32("err", err);
- reply->post();
- return OK;
- }
+ if (!audio) {
+ ++mNumFramesTotal;
+ }
+
+ dropAccessUnit = false;
+ if (!audio
+ && mVideoLateByUs > 100000ll
+ && mVideoIsAVC
+ && !IsAVCReferenceFrame(accessUnit)) {
+ dropAccessUnit = true;
+ ++mNumFramesDropped;
+ }
+ } while (dropAccessUnit);
// LOGV("returned a valid buffer of %s data", audio ? "audio" : "video");
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h
index cf9185b814d9..a5382b498909 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h
@@ -70,19 +70,19 @@ private:
struct StreamingSource;
enum {
- kWhatSetDataSource,
- kWhatSetVideoNativeWindow,
- kWhatSetAudioSink,
- kWhatMoreDataQueued,
- kWhatStart,
- kWhatScanSources,
- kWhatVideoNotify,
- kWhatAudioNotify,
- kWhatRendererNotify,
- kWhatReset,
- kWhatSeek,
- kWhatPause,
- kWhatResume,
+ kWhatSetDataSource = '=DaS',
+ kWhatSetVideoNativeWindow = '=NaW',
+ kWhatSetAudioSink = '=AuS',
+ kWhatMoreDataQueued = 'more',
+ kWhatStart = 'strt',
+ kWhatScanSources = 'scan',
+ kWhatVideoNotify = 'vidN',
+ kWhatAudioNotify = 'audN',
+ kWhatRendererNotify = 'renN',
+ kWhatReset = 'rset',
+ kWhatSeek = 'seek',
+ kWhatPause = 'paus',
+ kWhatResume = 'rsme',
};
wp<NuPlayerDriver> mDriver;
@@ -92,6 +92,7 @@ private:
sp<NativeWindowWrapper> mNativeWindow;
sp<MediaPlayerBase::AudioSink> mAudioSink;
sp<Decoder> mVideoDecoder;
+ bool mVideoIsAVC;
sp<Decoder> mAudioDecoder;
sp<Renderer> mRenderer;
@@ -119,6 +120,9 @@ private:
int64_t mSkipRenderingAudioUntilMediaTimeUs;
int64_t mSkipRenderingVideoUntilMediaTimeUs;
+ int64_t mVideoLateByUs;
+ int64_t mNumFramesTotal, mNumFramesDropped;
+
status_t instantiateDecoder(bool audio, sp<Decoder> *decoder);
status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg);
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
index 81b41ef32cef..56c2773fa56b 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
@@ -59,8 +59,21 @@ void NuPlayer::Decoder::configure(const sp<MetaData> &meta) {
format->setObject("native-window", mNativeWindow);
}
+ // Current video decoders do not return from OMX_FillThisBuffer
+ // quickly, violating the OpenMAX specs, until that is remedied
+ // we need to invest in an extra looper to free the main event
+ // queue.
+ bool needDedicatedLooper = !strncasecmp(mime, "video/", 6);
+
mCodec = new ACodec;
- looper()->registerHandler(mCodec);
+
+ if (needDedicatedLooper && mCodecLooper == NULL) {
+ mCodecLooper = new ALooper;
+ mCodecLooper->setName("NuPlayerDecoder");
+ mCodecLooper->start(false, false, ANDROID_PRIORITY_AUDIO);
+ }
+
+ (needDedicatedLooper ? mCodecLooper : looper())->registerHandler(mCodec);
mCodec->setNotificationMessage(notifyMsg);
mCodec->initiateSetup(format);
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
index fabc606e69b8..3ab1fcf1765e 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
@@ -43,13 +43,14 @@ protected:
private:
enum {
- kWhatCodecNotify,
+ kWhatCodecNotify = 'cdcN',
};
sp<AMessage> mNotify;
sp<NativeWindowWrapper> mNativeWindow;
sp<ACodec> mCodec;
+ sp<ALooper> mCodecLooper;
Vector<sp<ABuffer> > mCSD;
size_t mCSDIndex;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index c6fca2c0aff0..b1e917d2abea 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -31,6 +31,8 @@ NuPlayerDriver::NuPlayerDriver()
: mResetInProgress(false),
mDurationUs(-1),
mPositionUs(-1),
+ mNumFramesTotal(0),
+ mNumFramesDropped(0),
mLooper(new ALooper),
mState(UNINITIALIZED),
mStartupSeekTimeUs(-1) {
@@ -292,4 +294,30 @@ void NuPlayerDriver::notifySeekComplete() {
sendEvent(MEDIA_SEEK_COMPLETE);
}
+void NuPlayerDriver::notifyFrameStats(
+ int64_t numFramesTotal, int64_t numFramesDropped) {
+ Mutex::Autolock autoLock(mLock);
+ mNumFramesTotal = numFramesTotal;
+ mNumFramesDropped = numFramesDropped;
+}
+
+status_t NuPlayerDriver::dump(int fd, const Vector<String16> &args) const {
+ Mutex::Autolock autoLock(mLock);
+
+ FILE *out = fdopen(dup(fd), "w");
+
+ fprintf(out, " NuPlayer\n");
+ fprintf(out, " numFramesTotal(%lld), numFramesDropped(%lld), "
+ "percentageDropped(%.2f)\n",
+ mNumFramesTotal,
+ mNumFramesDropped,
+ mNumFramesTotal == 0
+ ? 0.0 : (double)mNumFramesDropped / mNumFramesTotal);
+
+ fclose(out);
+ out = NULL;
+
+ return OK;
+}
+
} // namespace android
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
index 1bb7ca23f850..181c37dec4d6 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.h
@@ -60,16 +60,19 @@ struct NuPlayerDriver : public MediaPlayerInterface {
virtual status_t getMetadata(
const media::Metadata::Filter& ids, Parcel *records);
+ virtual status_t dump(int fd, const Vector<String16> &args) const;
+
void notifyResetComplete();
void notifyDuration(int64_t durationUs);
void notifyPosition(int64_t positionUs);
void notifySeekComplete();
+ void notifyFrameStats(int64_t numFramesTotal, int64_t numFramesDropped);
protected:
virtual ~NuPlayerDriver();
private:
- Mutex mLock;
+ mutable Mutex mLock;
Condition mCondition;
// The following are protected through "mLock"
@@ -77,6 +80,8 @@ private:
bool mResetInProgress;
int64_t mDurationUs;
int64_t mPositionUs;
+ int64_t mNumFramesTotal;
+ int64_t mNumFramesDropped;
// <<<
sp<ALooper> mLooper;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index bf838498695d..07e347ee1582 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -47,7 +47,8 @@ NuPlayer::Renderer::Renderer(
mHasVideo(false),
mSyncQueues(false),
mPaused(false),
- mLastPositionUpdateUs(-1ll) {
+ mLastPositionUpdateUs(-1ll),
+ mVideoLateByUs(0ll) {
}
NuPlayer::Renderer::~Renderer() {
@@ -118,9 +119,24 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
mDrainAudioQueuePending = false;
- onDrainAudioQueue();
+ if (onDrainAudioQueue()) {
+ uint32_t numFramesPlayed;
+ CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed),
+ (status_t)OK);
- postDrainAudioQueue();
+ uint32_t numFramesPendingPlayout =
+ mNumFramesWritten - numFramesPlayed;
+
+ // This is how long the audio sink will have data to
+ // play back.
+ int64_t delayUs =
+ mAudioSink->msecsPerFrame()
+ * numFramesPendingPlayout * 1000ll;
+
+ // Let's give it more data after about half that time
+ // has elapsed.
+ postDrainAudioQueue(delayUs / 2);
+ }
break;
}
@@ -182,7 +198,7 @@ void NuPlayer::Renderer::onMessageReceived(const sp<AMessage> &msg) {
}
}
-void NuPlayer::Renderer::postDrainAudioQueue() {
+void NuPlayer::Renderer::postDrainAudioQueue(int64_t delayUs) {
if (mDrainAudioQueuePending || mSyncQueues || mPaused) {
return;
}
@@ -194,19 +210,33 @@ void NuPlayer::Renderer::postDrainAudioQueue() {
mDrainAudioQueuePending = true;
sp<AMessage> msg = new AMessage(kWhatDrainAudioQueue, id());
msg->setInt32("generation", mAudioQueueGeneration);
- msg->post();
+ msg->post(delayUs);
}
void NuPlayer::Renderer::signalAudioSinkChanged() {
(new AMessage(kWhatAudioSinkChanged, id()))->post();
}
-void NuPlayer::Renderer::onDrainAudioQueue() {
- for (;;) {
- if (mAudioQueue.empty()) {
- break;
- }
+bool NuPlayer::Renderer::onDrainAudioQueue() {
+ uint32_t numFramesPlayed;
+ CHECK_EQ(mAudioSink->getPosition(&numFramesPlayed), (status_t)OK);
+
+ ssize_t numFramesAvailableToWrite =
+ mAudioSink->frameCount() - (mNumFramesWritten - numFramesPlayed);
+#if 0
+ if (numFramesAvailableToWrite == mAudioSink->frameCount()) {
+ LOGI("audio sink underrun");
+ } else {
+ LOGV("audio queue has %d frames left to play",
+ mAudioSink->frameCount() - numFramesAvailableToWrite);
+ }
+#endif
+
+ size_t numBytesAvailableToWrite =
+ numFramesAvailableToWrite * mAudioSink->frameSize();
+
+ while (numBytesAvailableToWrite > 0 && !mAudioQueue.empty()) {
QueueEntry *entry = &*mAudioQueue.begin();
if (entry->mBuffer == NULL) {
@@ -216,20 +246,7 @@ void NuPlayer::Renderer::onDrainAudioQueue() {
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;
+ return false;
}
if (entry->mOffset == 0) {
@@ -274,10 +291,14 @@ void NuPlayer::Renderer::onDrainAudioQueue() {
entry = NULL;
}
- mNumFramesWritten += copy / mAudioSink->frameSize();
+ numBytesAvailableToWrite -= copy;
+ size_t copiedFrames = copy / mAudioSink->frameSize();
+ mNumFramesWritten += copiedFrames;
}
notifyPosition();
+
+ return !mAudioQueue.empty();
}
void NuPlayer::Renderer::postDrainVideoQueue() {
@@ -337,15 +358,26 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
mVideoQueue.erase(mVideoQueue.begin());
entry = NULL;
+
+ mVideoLateByUs = 0ll;
+
+ notifyPosition();
return;
}
-#if 0
int64_t mediaTimeUs;
CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));
- LOGI("rendering video at media time %.2f secs", mediaTimeUs / 1E6);
-#endif
+ int64_t realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs;
+ mVideoLateByUs = ALooper::GetNowUs() - realTimeUs;
+
+ bool tooLate = (mVideoLateByUs > 40000);
+
+ if (tooLate) {
+ LOGV("video late by %lld us (%.2f secs)", lateByUs, lateByUs / 1E6);
+ } else {
+ LOGV("rendering video at media time %.2f secs", mediaTimeUs / 1E6);
+ }
entry->mNotifyConsumed->setInt32("render", true);
entry->mNotifyConsumed->post();
@@ -577,6 +609,7 @@ void NuPlayer::Renderer::notifyPosition() {
sp<AMessage> notify = mNotify->dup();
notify->setInt32("what", kWhatPosition);
notify->setInt64("positionUs", positionUs);
+ notify->setInt64("videoLateByUs", mVideoLateByUs);
notify->post();
}
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
index 3a641a22042d..268628bd8c61 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h
@@ -45,9 +45,9 @@ struct NuPlayer::Renderer : public AHandler {
void resume();
enum {
- kWhatEOS,
- kWhatFlushComplete,
- kWhatPosition,
+ kWhatEOS = 'eos ',
+ kWhatFlushComplete = 'fluC',
+ kWhatPosition = 'posi',
};
protected:
@@ -57,14 +57,14 @@ protected:
private:
enum {
- kWhatDrainAudioQueue,
- kWhatDrainVideoQueue,
- kWhatQueueBuffer,
- kWhatQueueEOS,
- kWhatFlush,
- kWhatAudioSinkChanged,
- kWhatPause,
- kWhatResume,
+ kWhatDrainAudioQueue = 'draA',
+ kWhatDrainVideoQueue = 'draV',
+ kWhatQueueBuffer = 'queB',
+ kWhatQueueEOS = 'qEOS',
+ kWhatFlush = 'flus',
+ kWhatAudioSinkChanged = 'auSC',
+ kWhatPause = 'paus',
+ kWhatResume = 'resm',
};
struct QueueEntry {
@@ -101,9 +101,10 @@ private:
bool mPaused;
int64_t mLastPositionUpdateUs;
+ int64_t mVideoLateByUs;
- void onDrainAudioQueue();
- void postDrainAudioQueue();
+ bool onDrainAudioQueue();
+ void postDrainAudioQueue(int64_t delayUs = 0);
void onDrainVideoQueue();
void postDrainVideoQueue();
@@ -118,6 +119,7 @@ private:
void notifyEOS(bool audio, status_t finalResult);
void notifyFlushComplete(bool audio);
void notifyPosition();
+ void notifyVideoLateBy(int64_t lateByUs);
void flushQueue(List<QueueEntry> *queue);
bool dropBufferWhileFlushing(bool audio, const sp<AMessage> &msg);
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerSource.h b/media/libmediaplayerservice/nuplayer/NuPlayerSource.h
index 5e55487ae88a..8a7eece12050 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerSource.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerSource.h
@@ -29,8 +29,9 @@ struct NuPlayer::Source : public RefBase {
virtual void start() = 0;
- // Returns true iff more data was available, false on EOS.
- virtual bool feedMoreTSData() = 0;
+ // Returns OK iff more data was available,
+ // an error or ERROR_END_OF_STREAM if not.
+ virtual status_t feedMoreTSData() = 0;
virtual sp<MetaData> getFormat(bool audio) = 0;
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerStreamListener.h b/media/libmediaplayerservice/nuplayer/NuPlayerStreamListener.h
index df0935d80664..1874d808a4e3 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerStreamListener.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerStreamListener.h
@@ -41,8 +41,8 @@ struct NuPlayer::NuPlayerStreamListener : public BnStreamListener {
private:
enum {
- kNumBuffers = 16,
- kBufferSize = 188 * 20
+ kNumBuffers = 8,
+ kBufferSize = 188 * 10
};
struct QueueEntry {
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
index a741987fc045..f79565425665 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
@@ -34,7 +34,7 @@ namespace android {
NuPlayer::StreamingSource::StreamingSource(const sp<IStreamSource> &source)
: mSource(source),
- mEOS(false) {
+ mFinalResult(OK) {
}
NuPlayer::StreamingSource::~StreamingSource() {
@@ -47,12 +47,12 @@ void NuPlayer::StreamingSource::start() {
mStreamListener->start();
}
-bool NuPlayer::StreamingSource::feedMoreTSData() {
- if (mEOS) {
- return false;
+status_t NuPlayer::StreamingSource::feedMoreTSData() {
+ if (mFinalResult != OK) {
+ return mFinalResult;
}
- for (int32_t i = 0; i < 10; ++i) {
+ for (int32_t i = 0; i < 50; ++i) {
char buffer[188];
sp<AMessage> extra;
ssize_t n = mStreamListener->read(buffer, sizeof(buffer), &extra);
@@ -60,7 +60,7 @@ bool NuPlayer::StreamingSource::feedMoreTSData() {
if (n == 0) {
LOGI("input data EOS reached.");
mTSParser->signalEOS(ERROR_END_OF_STREAM);
- mEOS = true;
+ mFinalResult = ERROR_END_OF_STREAM;
break;
} else if (n == INFO_DISCONTINUITY) {
ATSParser::DiscontinuityType type = ATSParser::DISCONTINUITY_SEEK;
@@ -92,14 +92,14 @@ bool NuPlayer::StreamingSource::feedMoreTSData() {
LOGE("TS Parser returned error %d", err);
mTSParser->signalEOS(err);
- mEOS = true;
+ mFinalResult = err;
break;
}
}
}
}
- return true;
+ return OK;
}
sp<MetaData> NuPlayer::StreamingSource::getFormat(bool audio) {
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.h b/media/libmediaplayerservice/nuplayer/StreamingSource.h
index 7abce84746cc..ca00ef91d2d9 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.h
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.h
@@ -31,8 +31,7 @@ struct NuPlayer::StreamingSource : public NuPlayer::Source {
virtual void start();
- // Returns true iff more data was available, false on EOS.
- virtual bool feedMoreTSData();
+ virtual status_t feedMoreTSData();
virtual sp<MetaData> getFormat(bool audio);
virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit);
@@ -42,7 +41,7 @@ protected:
private:
sp<IStreamSource> mSource;
- bool mEOS;
+ status_t mFinalResult;
sp<NuPlayerStreamListener> mStreamListener;
sp<ATSParser> mTSParser;
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 2ba2273d378c..9cb18de26e24 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -323,6 +323,7 @@ ACodec::ACodec()
mFlushingState = new FlushingState(this);
mPortEOS[kPortIndexInput] = mPortEOS[kPortIndexOutput] = false;
+ mInputEOSResult = OK;
changeState(mUninitializedState);
}
@@ -686,6 +687,8 @@ void ACodec::setComponentRole(
"audio_decoder.amrwb", "audio_encoder.amrwb" },
{ MEDIA_MIMETYPE_AUDIO_AAC,
"audio_decoder.aac", "audio_encoder.aac" },
+ { MEDIA_MIMETYPE_AUDIO_VORBIS,
+ "audio_decoder.vorbis", "audio_encoder.vorbis" },
{ MEDIA_MIMETYPE_VIDEO_AVC,
"video_decoder.avc", "video_encoder.avc" },
{ MEDIA_MIMETYPE_VIDEO_MPEG4,
@@ -749,9 +752,19 @@ void ACodec::configureCodec(
CHECK(msg->findInt32("sample-rate", &sampleRate));
CHECK_EQ(setupAACDecoder(numChannels, sampleRate), (status_t)OK);
- } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_MPEG)) {
- } else {
- TRESPASS();
+ } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)) {
+ CHECK_EQ(setupAMRDecoder(false /* isWAMR */), (status_t)OK);
+ } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_WB)) {
+ CHECK_EQ(setupAMRDecoder(true /* isWAMR */), (status_t)OK);
+ } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_G711_ALAW)
+ || !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_G711_MLAW)) {
+ // These are PCM-like formats with a fixed sample rate but
+ // a variable number of channels.
+
+ int32_t numChannels;
+ CHECK(msg->findInt32("channel-count", &numChannels));
+
+ CHECK_EQ(setupG711Decoder(numChannels), (status_t)OK);
}
int32_t maxInputSize;
@@ -823,6 +836,84 @@ status_t ACodec::setupAACDecoder(int32_t numChannels, int32_t sampleRate) {
return err;
}
+status_t ACodec::setupAMRDecoder(bool isWAMR) {
+ OMX_AUDIO_PARAM_AMRTYPE def;
+ InitOMXParams(&def);
+ def.nPortIndex = kPortIndexInput;
+
+ status_t err =
+ mOMX->getParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def));
+
+ if (err != OK) {
+ return err;
+ }
+
+ def.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatFSF;
+
+ def.eAMRBandMode =
+ isWAMR ? OMX_AUDIO_AMRBandModeWB0 : OMX_AUDIO_AMRBandModeNB0;
+
+ return mOMX->setParameter(mNode, OMX_IndexParamAudioAmr, &def, sizeof(def));
+}
+
+status_t ACodec::setupG711Decoder(int32_t numChannels) {
+ return setupRawAudioFormat(
+ kPortIndexInput, 8000 /* sampleRate */, numChannels);
+}
+
+status_t ACodec::setupRawAudioFormat(
+ OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels) {
+ OMX_PARAM_PORTDEFINITIONTYPE def;
+ InitOMXParams(&def);
+ def.nPortIndex = portIndex;
+
+ status_t err = mOMX->getParameter(
+ mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
+
+ if (err != OK) {
+ return err;
+ }
+
+ def.format.audio.eEncoding = OMX_AUDIO_CodingPCM;
+
+ err = mOMX->setParameter(
+ mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
+
+ if (err != OK) {
+ return err;
+ }
+
+ OMX_AUDIO_PARAM_PCMMODETYPE pcmParams;
+ InitOMXParams(&pcmParams);
+ pcmParams.nPortIndex = portIndex;
+
+ err = mOMX->getParameter(
+ mNode, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams));
+
+ if (err != OK) {
+ return err;
+ }
+
+ pcmParams.nChannels = numChannels;
+ pcmParams.eNumData = OMX_NumericalDataSigned;
+ pcmParams.bInterleaved = OMX_TRUE;
+ pcmParams.nBitPerSample = 16;
+ pcmParams.nSamplingRate = sampleRate;
+ pcmParams.ePCMMode = OMX_AUDIO_PCMModeLinear;
+
+ if (numChannels == 1) {
+ pcmParams.eChannelMapping[0] = OMX_AUDIO_ChannelCF;
+ } else {
+ CHECK_EQ(numChannels, 2);
+
+ pcmParams.eChannelMapping[0] = OMX_AUDIO_ChannelLF;
+ pcmParams.eChannelMapping[1] = OMX_AUDIO_ChannelRF;
+ }
+
+ return mOMX->setParameter(
+ mNode, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams));
+}
+
status_t ACodec::setVideoPortFormatType(
OMX_U32 portIndex,
OMX_VIDEO_CODINGTYPE compressionFormat,
@@ -1347,7 +1438,10 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
case KEEP_BUFFERS:
{
if (buffer == NULL) {
- mCodec->mPortEOS[kPortIndexInput] = true;
+ if (!mCodec->mPortEOS[kPortIndexInput]) {
+ mCodec->mPortEOS[kPortIndexInput] = true;
+ mCodec->mInputEOSResult = err;
+ }
}
break;
}
@@ -1377,8 +1471,13 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
memcpy(info->mData->data(), buffer->data(), buffer->size());
}
- LOGV("[%s] calling emptyBuffer %p",
- mCodec->mComponentName.c_str(), bufferID);
+ if (flags & OMX_BUFFERFLAG_CODECCONFIG) {
+ LOGV("[%s] calling emptyBuffer %p w/ codec specific data",
+ mCodec->mComponentName.c_str(), bufferID);
+ } else {
+ LOGV("[%s] calling emptyBuffer %p w/ time %lld us",
+ mCodec->mComponentName.c_str(), bufferID, timeUs);
+ }
CHECK_EQ(mCodec->mOMX->emptyBuffer(
mCodec->mNode,
@@ -1393,10 +1492,16 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
getMoreInputDataIfPossible();
} else if (!mCodec->mPortEOS[kPortIndexInput]) {
- LOGV("[%s] Signalling EOS on the input port",
- mCodec->mComponentName.c_str());
+ if (err != ERROR_END_OF_STREAM) {
+ LOGV("[%s] Signalling EOS on the input port "
+ "due to error %d",
+ mCodec->mComponentName.c_str(), err);
+ } else {
+ LOGV("[%s] Signalling EOS on the input port",
+ mCodec->mComponentName.c_str());
+ }
- LOGV("[%s] calling emptyBuffer %p",
+ LOGV("[%s] calling emptyBuffer %p signalling EOS",
mCodec->mComponentName.c_str(), bufferID);
CHECK_EQ(mCodec->mOMX->emptyBuffer(
@@ -1411,6 +1516,7 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
info->mStatus = BufferInfo::OWNED_BY_COMPONENT;
mCodec->mPortEOS[kPortIndexInput] = true;
+ mCodec->mInputEOSResult = err;
}
break;
@@ -1457,8 +1563,8 @@ bool ACodec::BaseState::onOMXFillBufferDone(
int64_t timeUs,
void *platformPrivate,
void *dataPtr) {
- LOGV("[%s] onOMXFillBufferDone %p",
- mCodec->mComponentName.c_str(), bufferID);
+ LOGV("[%s] onOMXFillBufferDone %p time %lld us",
+ mCodec->mComponentName.c_str(), bufferID, timeUs);
ssize_t index;
BufferInfo *info =
@@ -1518,6 +1624,7 @@ bool ACodec::BaseState::onOMXFillBufferDone(
if (flags & OMX_BUFFERFLAG_EOS) {
sp<AMessage> notify = mCodec->mNotify->dup();
notify->setInt32("what", ACodec::kWhatEOS);
+ notify->setInt32("err", mCodec->mInputEOSResult);
notify->post();
mCodec->mPortEOS[kPortIndexOutput] = true;
@@ -1686,7 +1793,11 @@ void ACodec::UninitializedState::onSetup(
++matchIndex) {
componentName = matchingCodecs.itemAt(matchIndex).string();
+ pid_t tid = androidGetTid();
+ int prevPriority = androidGetThreadPriority(tid);
+ androidSetThreadPriority(tid, ANDROID_PRIORITY_FOREGROUND);
status_t err = omx->allocateNode(componentName.c_str(), observer, &node);
+ androidSetThreadPriority(tid, prevPriority);
if (err == OK) {
break;
@@ -1712,6 +1823,8 @@ void ACodec::UninitializedState::onSetup(
mCodec->mPortEOS[kPortIndexInput] =
mCodec->mPortEOS[kPortIndexOutput] = false;
+ mCodec->mInputEOSResult = OK;
+
mCodec->configureCodec(mime.c_str(), msg);
sp<RefBase> obj;
@@ -2362,6 +2475,8 @@ void ACodec::FlushingState::changeStateIfWeOwnAllBuffers() {
mCodec->mPortEOS[kPortIndexInput] =
mCodec->mPortEOS[kPortIndexOutput] = false;
+ mCodec->mInputEOSResult = OK;
+
mCodec->changeState(mCodec->mExecutingState);
}
}
diff --git a/media/libstagefright/AVIExtractor.cpp b/media/libstagefright/AVIExtractor.cpp
index 4e464148b090..0be2ca40153d 100644
--- a/media/libstagefright/AVIExtractor.cpp
+++ b/media/libstagefright/AVIExtractor.cpp
@@ -18,6 +18,7 @@
#define LOG_TAG "AVIExtractor"
#include <utils/Log.h>
+#include "include/avc_utils.h"
#include "include/AVIExtractor.h"
#include <binder/ProcessState.h>
@@ -55,11 +56,36 @@ private:
MediaBufferGroup *mBufferGroup;
size_t mSampleIndex;
+ sp<MP3Splitter> mSplitter;
+
DISALLOW_EVIL_CONSTRUCTORS(AVISource);
};
////////////////////////////////////////////////////////////////////////////////
+struct AVIExtractor::MP3Splitter : public RefBase {
+ MP3Splitter();
+
+ void clear();
+ void append(MediaBuffer *buffer);
+ status_t read(MediaBuffer **buffer);
+
+protected:
+ virtual ~MP3Splitter();
+
+private:
+ bool mFindSync;
+ int64_t mBaseTimeUs;
+ int64_t mNumSamplesRead;
+ sp<ABuffer> mBuffer;
+
+ bool resync();
+
+ DISALLOW_EVIL_CONSTRUCTORS(MP3Splitter);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
AVIExtractor::AVISource::AVISource(
const sp<AVIExtractor> &extractor, size_t trackIndex)
: mExtractor(extractor),
@@ -83,6 +109,15 @@ status_t AVIExtractor::AVISource::start(MetaData *params) {
mBufferGroup->add_buffer(new MediaBuffer(mTrack.mMaxSampleSize));
mSampleIndex = 0;
+ const char *mime;
+ CHECK(mTrack.mMeta->findCString(kKeyMIMEType, &mime));
+
+ if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_MPEG)) {
+ mSplitter = new MP3Splitter;
+ } else {
+ mSplitter.clear();
+ }
+
return OK;
}
@@ -92,6 +127,8 @@ status_t AVIExtractor::AVISource::stop() {
delete mBufferGroup;
mBufferGroup = NULL;
+ mSplitter.clear();
+
return OK;
}
@@ -115,39 +152,213 @@ status_t AVIExtractor::AVISource::read(
if (err != OK) {
return ERROR_END_OF_STREAM;
}
+
+ if (mSplitter != NULL) {
+ mSplitter->clear();
+ }
}
- off64_t offset;
- size_t size;
- bool isKey;
- int64_t timeUs;
- status_t err = mExtractor->getSampleInfo(
- mTrackIndex, mSampleIndex, &offset, &size, &isKey, &timeUs);
+ for (;;) {
+ if (mSplitter != NULL) {
+ status_t err = mSplitter->read(buffer);
+
+ if (err == OK) {
+ break;
+ } else if (err != -EAGAIN) {
+ return err;
+ }
+ }
+
+ off64_t offset;
+ size_t size;
+ bool isKey;
+ int64_t timeUs;
+ status_t err = mExtractor->getSampleInfo(
+ mTrackIndex, mSampleIndex, &offset, &size, &isKey, &timeUs);
- ++mSampleIndex;
+ ++mSampleIndex;
- if (err != OK) {
- return ERROR_END_OF_STREAM;
+ if (err != OK) {
+ return ERROR_END_OF_STREAM;
+ }
+
+ MediaBuffer *out;
+ CHECK_EQ(mBufferGroup->acquire_buffer(&out), (status_t)OK);
+
+ ssize_t n = mExtractor->mDataSource->readAt(offset, out->data(), size);
+
+ if (n < (ssize_t)size) {
+ return n < 0 ? (status_t)n : (status_t)ERROR_MALFORMED;
+ }
+
+ out->set_range(0, size);
+
+ out->meta_data()->setInt64(kKeyTime, timeUs);
+
+ if (isKey) {
+ out->meta_data()->setInt32(kKeyIsSyncFrame, 1);
+ }
+
+ if (mSplitter == NULL) {
+ *buffer = out;
+ break;
+ }
+
+ mSplitter->append(out);
+ out->release();
+ out = NULL;
}
- MediaBuffer *out;
- CHECK_EQ(mBufferGroup->acquire_buffer(&out), (status_t)OK);
+ return OK;
+}
- ssize_t n = mExtractor->mDataSource->readAt(offset, out->data(), size);
+////////////////////////////////////////////////////////////////////////////////
- if (n < (ssize_t)size) {
- return n < 0 ? (status_t)n : (status_t)ERROR_MALFORMED;
+AVIExtractor::MP3Splitter::MP3Splitter()
+ : mFindSync(true),
+ mBaseTimeUs(-1ll),
+ mNumSamplesRead(0) {
+}
+
+AVIExtractor::MP3Splitter::~MP3Splitter() {
+}
+
+void AVIExtractor::MP3Splitter::clear() {
+ mFindSync = true;
+ mBaseTimeUs = -1ll;
+ mNumSamplesRead = 0;
+
+ if (mBuffer != NULL) {
+ mBuffer->setRange(0, 0);
+ }
+}
+
+void AVIExtractor::MP3Splitter::append(MediaBuffer *buffer) {
+ size_t prevCapacity = (mBuffer != NULL) ? mBuffer->capacity() : 0;
+
+ if (mBaseTimeUs < 0) {
+ CHECK(mBuffer == NULL || mBuffer->size() == 0);
+ CHECK(buffer->meta_data()->findInt64(kKeyTime, &mBaseTimeUs));
+ mNumSamplesRead = 0;
+ }
+
+ if (mBuffer != NULL && mBuffer->offset() > 0) {
+ memmove(mBuffer->base(), mBuffer->data(), mBuffer->size());
+ mBuffer->setRange(0, mBuffer->size());
+ }
+
+ if (mBuffer == NULL
+ || mBuffer->size() + buffer->range_length() > prevCapacity) {
+ size_t newCapacity =
+ (prevCapacity + buffer->range_length() + 1023) & ~1023;
+
+ sp<ABuffer> newBuffer = new ABuffer(newCapacity);
+ if (mBuffer != NULL) {
+ memcpy(newBuffer->data(), mBuffer->data(), mBuffer->size());
+ newBuffer->setRange(0, mBuffer->size());
+ } else {
+ newBuffer->setRange(0, 0);
+ }
+ mBuffer = newBuffer;
+ }
+
+ memcpy(mBuffer->data() + mBuffer->size(),
+ (const uint8_t *)buffer->data() + buffer->range_offset(),
+ buffer->range_length());
+
+ mBuffer->setRange(0, mBuffer->size() + buffer->range_length());
+}
+
+bool AVIExtractor::MP3Splitter::resync() {
+ if (mBuffer == NULL) {
+ return false;
}
- out->set_range(0, size);
+ bool foundSync = false;
+ for (size_t offset = 0; offset + 3 < mBuffer->size(); ++offset) {
+ uint32_t firstHeader = U32_AT(mBuffer->data() + offset);
+
+ size_t frameSize;
+ if (!GetMPEGAudioFrameSize(firstHeader, &frameSize)) {
+ continue;
+ }
+
+ size_t subsequentOffset = offset + frameSize;
+ size_t i = 3;
+ while (i > 0) {
+ if (subsequentOffset + 3 >= mBuffer->size()) {
+ break;
+ }
+
+ static const uint32_t kMask = 0xfffe0c00;
+
+ uint32_t header = U32_AT(mBuffer->data() + subsequentOffset);
+ if ((header & kMask) != (firstHeader & kMask)) {
+ break;
+ }
+
+ if (!GetMPEGAudioFrameSize(header, &frameSize)) {
+ break;
+ }
+
+ subsequentOffset += frameSize;
+ --i;
+ }
- out->meta_data()->setInt64(kKeyTime, timeUs);
+ if (i == 0) {
+ foundSync = true;
+ memmove(mBuffer->data(),
+ mBuffer->data() + offset,
+ mBuffer->size() - offset);
- if (isKey) {
- out->meta_data()->setInt32(kKeyIsSyncFrame, 1);
+ mBuffer->setRange(0, mBuffer->size() - offset);
+ break;
+ }
}
- *buffer = out;
+ return foundSync;
+}
+
+status_t AVIExtractor::MP3Splitter::read(MediaBuffer **out) {
+ *out = NULL;
+
+ if (mFindSync) {
+ if (!resync()) {
+ return -EAGAIN;
+ }
+
+ mFindSync = false;
+ }
+
+ if (mBuffer->size() < 4) {
+ return -EAGAIN;
+ }
+
+ uint32_t header = U32_AT(mBuffer->data());
+ size_t frameSize;
+ int sampleRate;
+ int numSamples;
+ if (!GetMPEGAudioFrameSize(
+ header, &frameSize, &sampleRate, NULL, NULL, &numSamples)) {
+ return ERROR_MALFORMED;
+ }
+
+ if (mBuffer->size() < frameSize) {
+ return -EAGAIN;
+ }
+
+ MediaBuffer *mbuf = new MediaBuffer(frameSize);
+ memcpy(mbuf->data(), mBuffer->data(), frameSize);
+
+ int64_t timeUs = mBaseTimeUs + (mNumSamplesRead * 1000000ll) / sampleRate;
+ mNumSamplesRead += numSamples;
+
+ mbuf->meta_data()->setInt64(kKeyTime, timeUs);
+
+ mBuffer->setRange(
+ mBuffer->offset() + frameSize, mBuffer->size() - frameSize);
+
+ *out = mbuf;
return OK;
}
@@ -362,6 +573,13 @@ static const char *GetMIMETypeForHandler(uint32_t handler) {
case FOURCC('X', 'V', 'I', 'X'):
return MEDIA_MIMETYPE_VIDEO_MPEG4;
+ // from http://wiki.multimedia.cx/index.php?title=H264
+ case FOURCC('a', 'v', 'c', '1'):
+ case FOURCC('d', 'a', 'v', 'c'):
+ case FOURCC('x', '2', '6', '4'):
+ case FOURCC('v', 's', 's', 'h'):
+ return MEDIA_MIMETYPE_VIDEO_AVC;
+
default:
return NULL;
}
@@ -406,6 +624,14 @@ status_t AVIExtractor::parseStreamHeader(off64_t offset, size_t size) {
return ERROR_MALFORMED;
}
+ if (mime == NULL) {
+ LOGW("Unsupported video format '%c%c%c%c'",
+ (char)(handler >> 24),
+ (char)((handler >> 16) & 0xff),
+ (char)((handler >> 8) & 0xff),
+ (char)(handler & 0xff));
+ }
+
kind = Track::VIDEO;
} else if (type == FOURCC('a', 'u', 'd', 's')) {
if (mime && strncasecmp(mime, "audio/", 6)) {
@@ -433,6 +659,8 @@ status_t AVIExtractor::parseStreamHeader(off64_t offset, size_t size) {
track->mThumbnailSampleSize = 0;
track->mThumbnailSampleIndex = -1;
track->mMaxSampleSize = 0;
+ track->mAvgChunkSize = 1.0;
+ track->mFirstChunkSize = 0;
return OK;
}
@@ -451,8 +679,8 @@ status_t AVIExtractor::parseStreamFormat(off64_t offset, size_t size) {
bool isVideo = (track->mKind == Track::VIDEO);
- if ((isVideo && size < 40) || (!isVideo && size < 18)) {
- // Expected a BITMAPINFO or WAVEFORMATEX structure, respectively.
+ if ((isVideo && size < 40) || (!isVideo && size < 16)) {
+ // Expected a BITMAPINFO or WAVEFORMAT(EX) structure, respectively.
return ERROR_MALFORMED;
}
@@ -473,8 +701,11 @@ status_t AVIExtractor::parseStreamFormat(off64_t offset, size_t size) {
track->mMeta->setInt32(kKeyHeight, height);
} else {
uint32_t format = U16LE_AT(data);
+
if (format == 0x55) {
track->mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+ } else {
+ LOGW("Unsupported audio format = 0x%04x", format);
}
uint32_t numChannels = U16LE_AT(&data[2]);
@@ -632,6 +863,47 @@ status_t AVIExtractor::parseIndex(off64_t offset, size_t size) {
for (size_t i = 0; i < mTracks.size(); ++i) {
Track *track = &mTracks.editItemAt(i);
+ if (track->mBytesPerSample > 0) {
+ // Assume all chunks are roughly the same size for now.
+
+ // Compute the avg. size of the first 128 chunks (if there are
+ // that many), but exclude the size of the first one, since
+ // it may be an outlier.
+ size_t numSamplesToAverage = track->mSamples.size();
+ if (numSamplesToAverage > 256) {
+ numSamplesToAverage = 256;
+ }
+
+ double avgChunkSize = 0;
+ size_t j;
+ for (j = 0; j <= numSamplesToAverage; ++j) {
+ off64_t offset;
+ size_t size;
+ bool isKey;
+ int64_t dummy;
+
+ status_t err =
+ getSampleInfo(
+ i, j,
+ &offset, &size, &isKey, &dummy);
+
+ if (err != OK) {
+ return err;
+ }
+
+ if (j == 0) {
+ track->mFirstChunkSize = size;
+ continue;
+ }
+
+ avgChunkSize += size;
+ }
+
+ avgChunkSize /= numSamplesToAverage;
+
+ track->mAvgChunkSize = avgChunkSize;
+ }
+
int64_t durationUs;
CHECK_EQ((status_t)OK,
getSampleTime(i, track->mSamples.size() - 1, &durationUs));
@@ -646,37 +918,27 @@ status_t AVIExtractor::parseIndex(off64_t offset, size_t size) {
AString mime = tmp;
- if (!strncasecmp("video/", mime.c_str(), 6)
- && track->mThumbnailSampleIndex >= 0) {
- int64_t thumbnailTimeUs;
- CHECK_EQ((status_t)OK,
- getSampleTime(i, track->mThumbnailSampleIndex,
- &thumbnailTimeUs));
+ if (!strncasecmp("video/", mime.c_str(), 6)) {
+ if (track->mThumbnailSampleIndex >= 0) {
+ int64_t thumbnailTimeUs;
+ CHECK_EQ((status_t)OK,
+ getSampleTime(i, track->mThumbnailSampleIndex,
+ &thumbnailTimeUs));
- track->mMeta->setInt64(kKeyThumbnailTime, thumbnailTimeUs);
-
- if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_VIDEO_MPEG4)) {
- status_t err = addMPEG4CodecSpecificData(i);
-
- if (err != OK) {
- return err;
- }
+ track->mMeta->setInt64(kKeyThumbnailTime, thumbnailTimeUs);
}
- }
- if (track->mBytesPerSample != 0) {
- // Assume all chunks are the same size for now.
+ status_t err = OK;
- off64_t offset;
- size_t size;
- bool isKey;
- int64_t sampleTimeUs;
- CHECK_EQ((status_t)OK,
- getSampleInfo(
- i, 0,
- &offset, &size, &isKey, &sampleTimeUs));
+ if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_VIDEO_MPEG4)) {
+ err = addMPEG4CodecSpecificData(i);
+ } else if (!strcasecmp(mime.c_str(), MEDIA_MIMETYPE_VIDEO_AVC)) {
+ err = addH264CodecSpecificData(i);
+ }
- track->mRate *= size / track->mBytesPerSample;
+ if (err != OK) {
+ return err;
+ }
}
}
@@ -781,6 +1043,63 @@ status_t AVIExtractor::addMPEG4CodecSpecificData(size_t trackIndex) {
return OK;
}
+status_t AVIExtractor::addH264CodecSpecificData(size_t trackIndex) {
+ Track *track = &mTracks.editItemAt(trackIndex);
+
+ off64_t offset;
+ size_t size;
+ bool isKey;
+ int64_t timeUs;
+
+ // Extract codec specific data from the first non-empty sample.
+
+ size_t sampleIndex = 0;
+ for (;;) {
+ status_t err =
+ getSampleInfo(
+ trackIndex, sampleIndex, &offset, &size, &isKey, &timeUs);
+
+ if (err != OK) {
+ return err;
+ }
+
+ if (size > 0) {
+ break;
+ }
+
+ ++sampleIndex;
+ }
+
+ sp<ABuffer> buffer = new ABuffer(size);
+ ssize_t n = mDataSource->readAt(offset, buffer->data(), buffer->size());
+
+ if (n < (ssize_t)size) {
+ return n < 0 ? (status_t)n : ERROR_MALFORMED;
+ }
+
+ sp<MetaData> meta = MakeAVCCodecSpecificData(buffer);
+
+ if (meta == NULL) {
+ LOGE("Unable to extract AVC codec specific data");
+ return ERROR_MALFORMED;
+ }
+
+ int32_t width, height;
+ CHECK(meta->findInt32(kKeyWidth, &width));
+ CHECK(meta->findInt32(kKeyHeight, &height));
+
+ uint32_t type;
+ const void *csd;
+ size_t csdSize;
+ CHECK(meta->findData(kKeyAVCC, &type, &csd, &csdSize));
+
+ track->mMeta->setInt32(kKeyWidth, width);
+ track->mMeta->setInt32(kKeyHeight, width);
+ track->mMeta->setData(kKeyAVCC, type, csd, csdSize);
+
+ return OK;
+}
+
status_t AVIExtractor::getSampleInfo(
size_t trackIndex, size_t sampleIndex,
off64_t *offset, size_t *size, bool *isKey,
@@ -823,6 +1142,18 @@ status_t AVIExtractor::getSampleInfo(
*isKey = info.mIsKey;
+ if (track.mBytesPerSample > 0) {
+ size_t sampleStartInBytes;
+ if (sampleIndex == 0) {
+ sampleStartInBytes = 0;
+ } else {
+ sampleStartInBytes =
+ track.mFirstChunkSize + track.mAvgChunkSize * (sampleIndex - 1);
+ }
+
+ sampleIndex = sampleStartInBytes / track.mBytesPerSample;
+ }
+
*sampleTimeUs = (sampleIndex * 1000000ll * track.mRate) / track.mScale;
return OK;
@@ -847,8 +1178,24 @@ status_t AVIExtractor::getSampleIndexAtTime(
const Track &track = mTracks.itemAt(trackIndex);
- ssize_t closestSampleIndex =
- timeUs / track.mRate * track.mScale / 1000000ll;
+ ssize_t closestSampleIndex;
+
+ if (track.mBytesPerSample > 0) {
+ size_t closestByteOffset =
+ (timeUs * track.mBytesPerSample)
+ / track.mRate * track.mScale / 1000000ll;
+
+ if (closestByteOffset <= track.mFirstChunkSize) {
+ closestSampleIndex = 0;
+ } else {
+ closestSampleIndex =
+ (closestByteOffset - track.mFirstChunkSize)
+ / track.mAvgChunkSize;
+ }
+ } else {
+ // Each chunk contains a single sample.
+ closestSampleIndex = timeUs / track.mRate * track.mScale / 1000000ll;
+ }
ssize_t numSamples = track.mSamples.size();
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index ba076f57bf0e..2581a62eca44 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -508,6 +508,9 @@ status_t AudioPlayer::seekTo(int64_t time_us) {
mReachedEOS = false;
mSeekTimeUs = time_us;
+ // Flush resets the number of played frames
+ mNumFramesPlayed = 0;
+
if (mAudioSink != NULL) {
mAudioSink->flush();
} else {
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 07a46bd20e6c..fa9417a50ebe 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -249,7 +249,7 @@ void AwesomePlayer::setListener(const wp<MediaPlayerBase> &listener) {
}
void AwesomePlayer::setUID(uid_t uid) {
- LOGI("AwesomePlayer running on behalf of uid %d", uid);
+ LOGV("AwesomePlayer running on behalf of uid %d", uid);
mUID = uid;
mUIDValid = true;
@@ -362,7 +362,7 @@ status_t AwesomePlayer::setDataSource_l(const sp<MediaExtractor> &extractor) {
if (!meta->findInt32(kKeyBitRate, &bitrate)) {
const char *mime;
CHECK(meta->findCString(kKeyMIMEType, &mime));
- LOGW("track of type '%s' does not publish bitrate", mime);
+ LOGV("track of type '%s' does not publish bitrate", mime);
totalBitRate = -1;
break;
@@ -1192,7 +1192,7 @@ void AwesomePlayer::shutdownVideoDecoder_l() {
usleep(1000);
}
IPCThreadState::self()->flushCommands();
- LOGI("video decoder shutdown completed");
+ LOGV("video decoder shutdown completed");
}
status_t AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
@@ -1202,7 +1202,7 @@ status_t AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) {
return OK;
}
- LOGI("attempting to reconfigure to use new surface");
+ LOGV("attempting to reconfigure to use new surface");
bool wasPlaying = (mFlags & PLAYING) != 0;
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 6280f51c5db1..e94a8d712e2f 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1485,6 +1485,8 @@ void OMXCodec::setComponentRole(
"audio_decoder.amrwb", "audio_encoder.amrwb" },
{ MEDIA_MIMETYPE_AUDIO_AAC,
"audio_decoder.aac", "audio_encoder.aac" },
+ { MEDIA_MIMETYPE_AUDIO_VORBIS,
+ "audio_decoder.vorbis", "audio_encoder.vorbis" },
{ MEDIA_MIMETYPE_VIDEO_AVC,
"video_decoder.avc", "video_encoder.avc" },
{ MEDIA_MIMETYPE_VIDEO_MPEG4,
@@ -1635,7 +1637,7 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) {
return err;
}
- CODEC_LOGI("allocating %lu buffers of size %lu on %s port",
+ CODEC_LOGV("allocating %lu buffers of size %lu on %s port",
def.nBufferCountActual, def.nBufferSize,
portIndex == kPortIndexInput ? "input" : "output");
@@ -1876,7 +1878,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
return err;
}
- CODEC_LOGI("allocating %lu buffers from a native window of size %lu on "
+ CODEC_LOGV("allocating %lu buffers from a native window of size %lu on "
"output port", def.nBufferCountActual, def.nBufferSize);
// Dequeue buffers and send them to OMX
@@ -3654,7 +3656,7 @@ status_t OMXCodec::stop() {
mSource->stop();
- CODEC_LOGI("stopped in state %d", mState);
+ CODEC_LOGV("stopped in state %d", mState);
return OK;
}
@@ -4219,14 +4221,14 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) {
inputFormat->findInt32(kKeySampleRate, &sampleRate);
if ((OMX_U32)numChannels != params.nChannels) {
- LOGW("Codec outputs a different number of channels than "
+ LOGV("Codec outputs a different number of channels than "
"the input stream contains (contains %d channels, "
"codec outputs %ld channels).",
numChannels, params.nChannels);
}
if (sampleRate != (int32_t)params.nSamplingRate) {
- LOGW("Codec outputs at different sampling rate than "
+ LOGV("Codec outputs at different sampling rate than "
"what the input stream contains (contains data at "
"%d Hz, codec outputs %lu Hz)",
sampleRate, params.nSamplingRate);
diff --git a/media/libstagefright/SampleTable.cpp b/media/libstagefright/SampleTable.cpp
index 2b9d99bdf52d..ebad3215802f 100644
--- a/media/libstagefright/SampleTable.cpp
+++ b/media/libstagefright/SampleTable.cpp
@@ -23,8 +23,8 @@
#include <arpa/inet.h>
+#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/DataSource.h>
-#include <media/stagefright/MediaDebug.h>
#include <media/stagefright/Utils.h>
namespace android {
@@ -40,6 +40,71 @@ const uint32_t SampleTable::kSampleSizeTypeCompact = FOURCC('s', 't', 'z', '2');
////////////////////////////////////////////////////////////////////////////////
+struct SampleTable::CompositionDeltaLookup {
+ CompositionDeltaLookup();
+
+ void setEntries(
+ const uint32_t *deltaEntries, size_t numDeltaEntries);
+
+ uint32_t getCompositionTimeOffset(uint32_t sampleIndex);
+
+private:
+ Mutex mLock;
+
+ const uint32_t *mDeltaEntries;
+ size_t mNumDeltaEntries;
+
+ size_t mCurrentDeltaEntry;
+ size_t mCurrentEntrySampleIndex;
+
+ DISALLOW_EVIL_CONSTRUCTORS(CompositionDeltaLookup);
+};
+
+SampleTable::CompositionDeltaLookup::CompositionDeltaLookup()
+ : mDeltaEntries(NULL),
+ mNumDeltaEntries(0),
+ mCurrentDeltaEntry(0),
+ mCurrentEntrySampleIndex(0) {
+}
+
+void SampleTable::CompositionDeltaLookup::setEntries(
+ const uint32_t *deltaEntries, size_t numDeltaEntries) {
+ Mutex::Autolock autolock(mLock);
+
+ mDeltaEntries = deltaEntries;
+ mNumDeltaEntries = numDeltaEntries;
+ mCurrentDeltaEntry = 0;
+ mCurrentEntrySampleIndex = 0;
+}
+
+uint32_t SampleTable::CompositionDeltaLookup::getCompositionTimeOffset(
+ uint32_t sampleIndex) {
+ Mutex::Autolock autolock(mLock);
+
+ if (mDeltaEntries == NULL) {
+ return 0;
+ }
+
+ if (sampleIndex < mCurrentEntrySampleIndex) {
+ mCurrentDeltaEntry = 0;
+ mCurrentEntrySampleIndex = 0;
+ }
+
+ while (mCurrentDeltaEntry < mNumDeltaEntries) {
+ uint32_t sampleCount = mDeltaEntries[2 * mCurrentDeltaEntry];
+ if (sampleIndex < mCurrentEntrySampleIndex + sampleCount) {
+ return mDeltaEntries[2 * mCurrentDeltaEntry + 1];
+ }
+
+ mCurrentEntrySampleIndex += sampleCount;
+ ++mCurrentDeltaEntry;
+ }
+
+ return 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
SampleTable::SampleTable(const sp<DataSource> &source)
: mDataSource(source),
mChunkOffsetOffset(-1),
@@ -56,6 +121,7 @@ SampleTable::SampleTable(const sp<DataSource> &source)
mSampleTimeEntries(NULL),
mCompositionTimeDeltaEntries(NULL),
mNumCompositionTimeDeltaEntries(0),
+ mCompositionDeltaLookup(new CompositionDeltaLookup),
mSyncSampleOffset(-1),
mNumSyncSamples(0),
mSyncSamples(NULL),
@@ -71,6 +137,9 @@ SampleTable::~SampleTable() {
delete[] mSyncSamples;
mSyncSamples = NULL;
+ delete mCompositionDeltaLookup;
+ mCompositionDeltaLookup = NULL;
+
delete[] mCompositionTimeDeltaEntries;
mCompositionTimeDeltaEntries = NULL;
@@ -318,6 +387,9 @@ status_t SampleTable::setCompositionTimeToSampleParams(
mCompositionTimeDeltaEntries[i] = ntohl(mCompositionTimeDeltaEntries[i]);
}
+ mCompositionDeltaLookup->setEntries(
+ mCompositionTimeDeltaEntries, mNumCompositionTimeDeltaEntries);
+
return OK;
}
@@ -430,8 +502,12 @@ void SampleTable::buildSampleEntriesTable() {
mSampleTimeEntries[sampleIndex].mSampleIndex = sampleIndex;
+ uint32_t compTimeDelta =
+ mCompositionDeltaLookup->getCompositionTimeOffset(
+ sampleIndex);
+
mSampleTimeEntries[sampleIndex].mCompositionTime =
- sampleTime + getCompositionTimeOffset(sampleIndex);
+ sampleTime + compTimeDelta;
}
++sampleIndex;
@@ -739,25 +815,8 @@ status_t SampleTable::getMetaDataForSample(
return OK;
}
-uint32_t SampleTable::getCompositionTimeOffset(uint32_t sampleIndex) const {
- if (mCompositionTimeDeltaEntries == NULL) {
- return 0;
- }
-
- uint32_t curSample = 0;
- for (size_t i = 0; i < mNumCompositionTimeDeltaEntries; ++i) {
- uint32_t sampleCount = mCompositionTimeDeltaEntries[2 * i];
-
- if (sampleIndex < curSample + sampleCount) {
- uint32_t sampleDelta = mCompositionTimeDeltaEntries[2 * i + 1];
-
- return sampleDelta;
- }
-
- curSample += sampleCount;
- }
-
- return 0;
+uint32_t SampleTable::getCompositionTimeOffset(uint32_t sampleIndex) {
+ return mCompositionDeltaLookup->getCompositionTimeOffset(sampleIndex);
}
} // namespace android
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index 306f1f63d49d..2b27ee222d6a 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -764,8 +764,8 @@ status_t SurfaceMediaSource::read( MediaBuffer **buffer,
// If the loop was exited as a result of stopping the recording,
// it is OK
if (mStopped) {
- LOGV("Read: SurfaceMediaSource is stopped. Returning NO_INIT;");
- return NO_INIT;
+ LOGV("Read: SurfaceMediaSource is stopped. Returning ERROR_END_OF_STREAM.");
+ return ERROR_END_OF_STREAM;
}
// Update the current buffer info
diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp
index 8a42e8b4b048..153ee3352c78 100644
--- a/media/libstagefright/avc_utils.cpp
+++ b/media/libstagefright/avc_utils.cpp
@@ -297,7 +297,7 @@ sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
sp<MetaData> meta = new MetaData;
meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC);
- meta->setData(kKeyAVCC, 0, csd->data(), csd->size());
+ meta->setData(kKeyAVCC, kTypeAVCC, csd->data(), csd->size());
meta->setInt32(kKeyWidth, width);
meta->setInt32(kKeyHeight, height);
@@ -329,6 +329,28 @@ bool IsIDR(const sp<ABuffer> &buffer) {
return foundIDR;
}
+bool IsAVCReferenceFrame(const sp<ABuffer> &accessUnit) {
+ const uint8_t *data = accessUnit->data();
+ size_t size = accessUnit->size();
+
+ const uint8_t *nalStart;
+ size_t nalSize;
+ while (getNextNALUnit(&data, &size, &nalStart, &nalSize, true) == OK) {
+ CHECK_GT(nalSize, 0u);
+
+ unsigned nalType = nalStart[0] & 0x1f;
+
+ if (nalType == 5) {
+ return true;
+ } else if (nalType == 1) {
+ unsigned nal_ref_idc = (nalStart[0] >> 5) & 3;
+ return nal_ref_idc != 0;
+ }
+ }
+
+ return true;
+}
+
sp<MetaData> MakeAACCodecSpecificData(
unsigned profile, unsigned sampling_freq_index,
unsigned channel_configuration) {
diff --git a/media/libstagefright/chromium_http/support.cpp b/media/libstagefright/chromium_http/support.cpp
index de936c411edb..f15014ee400e 100644
--- a/media/libstagefright/chromium_http/support.cpp
+++ b/media/libstagefright/chromium_http/support.cpp
@@ -74,10 +74,32 @@ bool logMessageHandler(
return false;
}
+struct AutoPrioritySaver {
+ AutoPrioritySaver()
+ : mTID(androidGetTid()),
+ mPrevPriority(androidGetThreadPriority(mTID)) {
+ androidSetThreadPriority(mTID, ANDROID_PRIORITY_NORMAL);
+ }
+
+ ~AutoPrioritySaver() {
+ androidSetThreadPriority(mTID, mPrevPriority);
+ }
+
+private:
+ pid_t mTID;
+ int mPrevPriority;
+
+ DISALLOW_EVIL_CONSTRUCTORS(AutoPrioritySaver);
+};
static void InitializeNetworkThreadIfNecessary() {
Mutex::Autolock autoLock(gNetworkThreadLock);
+
if (gNetworkThread == NULL) {
+ // Make sure any threads spawned by the chromium framework are
+ // running at normal priority instead of inheriting this thread's.
+ AutoPrioritySaver saver;
+
gNetworkThread = new base::Thread("network");
base::Thread::Options options;
options.message_loop_type = MessageLoop::TYPE_IO;
diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp
index 582bdba94197..f039bc13ef6c 100644
--- a/media/libstagefright/foundation/AMessage.cpp
+++ b/media/libstagefright/foundation/AMessage.cpp
@@ -385,6 +385,15 @@ AString AMessage::debugString(int32_t indent) const {
item.u.refValue)->debugString(
indent + strlen(item.mName) + 14).c_str());
break;
+ case kTypeRect:
+ tmp = StringPrintf(
+ "Rect %s(%d, %d, %d, %d)",
+ item.mName,
+ item.u.rectValue.mLeft,
+ item.u.rectValue.mTop,
+ item.u.rectValue.mRight,
+ item.u.rectValue.mBottom);
+ break;
default:
TRESPASS();
}
diff --git a/media/libstagefright/include/AVIExtractor.h b/media/libstagefright/include/AVIExtractor.h
index b5753473804b..ff5dcb53ee0c 100644
--- a/media/libstagefright/include/AVIExtractor.h
+++ b/media/libstagefright/include/AVIExtractor.h
@@ -42,6 +42,7 @@ protected:
private:
struct AVISource;
+ struct MP3Splitter;
struct SampleInfo {
uint32_t mOffset;
@@ -70,6 +71,10 @@ private:
size_t mThumbnailSampleSize;
ssize_t mThumbnailSampleIndex;
size_t mMaxSampleSize;
+
+ // If mBytesPerSample > 0:
+ double mAvgChunkSize;
+ size_t mFirstChunkSize;
};
sp<DataSource> mDataSource;
@@ -101,6 +106,7 @@ private:
size_t *sampleIndex) const;
status_t addMPEG4CodecSpecificData(size_t trackIndex);
+ status_t addH264CodecSpecificData(size_t trackIndex);
static bool IsCorrectChunkType(
ssize_t trackIndex, Track::Kind kind, uint32_t chunkType);
diff --git a/media/libstagefright/include/SampleTable.h b/media/libstagefright/include/SampleTable.h
index a6a6524c06ad..847dff70bfa4 100644
--- a/media/libstagefright/include/SampleTable.h
+++ b/media/libstagefright/include/SampleTable.h
@@ -86,6 +86,8 @@ protected:
~SampleTable();
private:
+ struct CompositionDeltaLookup;
+
static const uint32_t kChunkOffsetType32;
static const uint32_t kChunkOffsetType64;
static const uint32_t kSampleSizeType32;
@@ -117,6 +119,7 @@ private:
uint32_t *mCompositionTimeDeltaEntries;
size_t mNumCompositionTimeDeltaEntries;
+ CompositionDeltaLookup *mCompositionDeltaLookup;
off64_t mSyncSampleOffset;
uint32_t mNumSyncSamples;
@@ -135,8 +138,7 @@ private:
friend struct SampleIterator;
status_t getSampleSize_l(uint32_t sample_index, size_t *sample_size);
-
- uint32_t getCompositionTimeOffset(uint32_t sampleIndex) const;
+ uint32_t getCompositionTimeOffset(uint32_t sampleIndex);
static int CompareIncreasingTime(const void *, const void *);
diff --git a/media/libstagefright/include/avc_utils.h b/media/libstagefright/include/avc_utils.h
index 15cd4d44d482..e4188224d23f 100644
--- a/media/libstagefright/include/avc_utils.h
+++ b/media/libstagefright/include/avc_utils.h
@@ -50,6 +50,7 @@ struct MetaData;
sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit);
bool IsIDR(const sp<ABuffer> &accessUnit);
+bool IsAVCReferenceFrame(const sp<ABuffer> &accessUnit);
const char *AVCProfileToString(uint8_t profile);
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index ffa335646ab7..20a25d7d2664 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -423,74 +423,88 @@ again:
MediaBuffer *frame = *mPendingFrames.begin();
mPendingFrames.erase(mPendingFrames.begin());
- size_t size = frame->range_length();
-
if (mType != AVC) {
*out = frame;
return OK;
}
- if (size < mNALSizeLen) {
- frame->release();
- frame = NULL;
+ // Each input frame contains one or more NAL fragments, each fragment
+ // is prefixed by mNALSizeLen bytes giving the fragment length,
+ // followed by a corresponding number of bytes containing the fragment.
+ // We output all these fragments into a single large buffer separated
+ // by startcodes (0x00 0x00 0x00 0x01).
+
+ const uint8_t *srcPtr =
+ (const uint8_t *)frame->data() + frame->range_offset();
+
+ size_t srcSize = frame->range_length();
+
+ size_t dstSize = 0;
+ MediaBuffer *buffer = NULL;
+ uint8_t *dstPtr = NULL;
+
+ for (int32_t pass = 0; pass < 2; ++pass) {
+ size_t srcOffset = 0;
+ size_t dstOffset = 0;
+ while (srcOffset + mNALSizeLen <= srcSize) {
+ size_t NALsize;
+ switch (mNALSizeLen) {
+ case 1: NALsize = srcPtr[srcOffset]; break;
+ case 2: NALsize = U16_AT(srcPtr + srcOffset); break;
+ case 3: NALsize = U24_AT(srcPtr + srcOffset); break;
+ case 4: NALsize = U32_AT(srcPtr + srcOffset); break;
+ default:
+ TRESPASS();
+ }
- return ERROR_MALFORMED;
- }
+ if (srcOffset + mNALSizeLen + NALsize > srcSize) {
+ break;
+ }
- // In the case of AVC content, each NAL unit is prefixed by
- // mNALSizeLen bytes of length. We want to prefix the data with
- // a four-byte 0x00000001 startcode instead of the length prefix.
- // mNALSizeLen ranges from 1 through 4 bytes, so add an extra
- // 3 bytes of padding to the buffer start.
- static const size_t kPadding = 3;
+ if (pass == 1) {
+ memcpy(&dstPtr[dstOffset], "\x00\x00\x00\x01", 4);
- MediaBuffer *buffer = new MediaBuffer(size + kPadding);
+ memcpy(&dstPtr[dstOffset + 4],
+ &srcPtr[srcOffset + mNALSizeLen],
+ NALsize);
+ }
- int64_t timeUs;
- CHECK(frame->meta_data()->findInt64(kKeyTime, &timeUs));
- int32_t isSync;
- CHECK(frame->meta_data()->findInt32(kKeyIsSyncFrame, &isSync));
+ dstOffset += 4; // 0x00 00 00 01
+ dstOffset += NALsize;
- buffer->meta_data()->setInt64(kKeyTime, timeUs);
- buffer->meta_data()->setInt32(kKeyIsSyncFrame, isSync);
+ srcOffset += mNALSizeLen + NALsize;
+ }
- memcpy((uint8_t *)buffer->data() + kPadding,
- (const uint8_t *)frame->data() + frame->range_offset(),
- size);
+ if (srcOffset < srcSize) {
+ // There were trailing bytes or not enough data to complete
+ // a fragment.
- buffer->set_range(kPadding, size);
+ frame->release();
+ frame = NULL;
- frame->release();
- frame = NULL;
+ return ERROR_MALFORMED;
+ }
- uint8_t *data = (uint8_t *)buffer->data();
+ if (pass == 0) {
+ dstSize = dstOffset;
- size_t NALsize;
- switch (mNALSizeLen) {
- case 1: NALsize = data[kPadding]; break;
- case 2: NALsize = U16_AT(&data[kPadding]); break;
- case 3: NALsize = U24_AT(&data[kPadding]); break;
- case 4: NALsize = U32_AT(&data[kPadding]); break;
- default:
- TRESPASS();
- }
+ buffer = new MediaBuffer(dstSize);
- if (size < NALsize + mNALSizeLen) {
- buffer->release();
- buffer = NULL;
+ int64_t timeUs;
+ CHECK(frame->meta_data()->findInt64(kKeyTime, &timeUs));
+ int32_t isSync;
+ CHECK(frame->meta_data()->findInt32(kKeyIsSyncFrame, &isSync));
- return ERROR_MALFORMED;
- }
+ buffer->meta_data()->setInt64(kKeyTime, timeUs);
+ buffer->meta_data()->setInt32(kKeyIsSyncFrame, isSync);
- if (size > NALsize + mNALSizeLen) {
- LOGW("discarding %d bytes of data.", size - NALsize - mNALSizeLen);
+ dstPtr = (uint8_t *)buffer->data();
+ }
}
- // actual data starts at &data[kPadding + mNALSizeLen]
-
- memcpy(&data[mNALSizeLen - 1], "\x00\x00\x00\x01", 4);
- buffer->set_range(mNALSizeLen - 1, NALsize + 4);
+ frame->release();
+ frame = NULL;
*out = buffer;
diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp
index bc24dbbe9366..33d3f309e5e7 100644
--- a/media/libstagefright/omx/OMX.cpp
+++ b/media/libstagefright/omx/OMX.cpp
@@ -85,7 +85,7 @@ OMX::CallbackDispatcher::CallbackDispatcher(OMXNodeInstance *owner)
: mOwner(owner),
mDone(false) {
mThread = new CallbackDispatcherThread(this);
- mThread->run("OMXCallbackDisp", ANDROID_PRIORITY_AUDIO);
+ mThread->run("OMXCallbackDisp", ANDROID_PRIORITY_FOREGROUND);
}
OMX::CallbackDispatcher::~CallbackDispatcher() {
diff --git a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
index f7330f3448db..b705d00d9e7f 100644
--- a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
+++ b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp
@@ -42,7 +42,7 @@ SimpleSoftOMXComponent::SimpleSoftOMXComponent(
mLooper->start(
false, // runOnCallingThread
false, // canCallJava
- PRIORITY_AUDIO);
+ ANDROID_PRIORITY_FOREGROUND);
}
void SimpleSoftOMXComponent::prepareForDestruction() {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
index f3cf0f71c6bb..3fb2da080954 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
@@ -17,27 +17,26 @@
package com.android.mediaframeworktest;
import com.android.mediaframeworktest.functional.CameraTest;
-import com.android.mediaframeworktest.functional.MediaAudioTrackTest;
import com.android.mediaframeworktest.functional.MediaMetadataTest;
import com.android.mediaframeworktest.functional.MediaMimeTest;
-import com.android.mediaframeworktest.functional.MediaPlayerApiTest;
-import com.android.mediaframeworktest.functional.MediaRecorderTest;
-import com.android.mediaframeworktest.functional.SimTonesTest;
import com.android.mediaframeworktest.functional.MediaPlayerInvokeTest;
-import com.android.mediaframeworktest.functional.MediaAudioManagerTest;
-import com.android.mediaframeworktest.functional.MediaAudioEffectTest;
-import com.android.mediaframeworktest.functional.MediaBassBoostTest;
-import com.android.mediaframeworktest.functional.MediaEnvReverbTest;
-import com.android.mediaframeworktest.functional.MediaEqualizerTest;
-import com.android.mediaframeworktest.functional.MediaPresetReverbTest;
-import com.android.mediaframeworktest.functional.MediaVirtualizerTest;
-import com.android.mediaframeworktest.functional.MediaVisualizerTest;
-/*import for VideoEditor Test cases*/
-import com.android.mediaframeworktest.functional.MediaItemThumbnailTest;
-import com.android.mediaframeworktest.functional.MediaPropertiesTest;
-import com.android.mediaframeworktest.functional.VideoEditorAPITest;
-import com.android.mediaframeworktest.functional.VideoEditorExportTest;
-import com.android.mediaframeworktest.functional.VideoEditorPreviewTest;
+import com.android.mediaframeworktest.functional.mediaplayback.MediaPlayerApiTest;
+import com.android.mediaframeworktest.functional.mediarecorder.MediaRecorderTest;
+import com.android.mediaframeworktest.functional.audio.SimTonesTest;
+import com.android.mediaframeworktest.functional.audio.MediaAudioTrackTest;
+import com.android.mediaframeworktest.functional.audio.MediaAudioManagerTest;
+import com.android.mediaframeworktest.functional.audio.MediaAudioEffectTest;
+import com.android.mediaframeworktest.functional.audio.MediaBassBoostTest;
+import com.android.mediaframeworktest.functional.audio.MediaEnvReverbTest;
+import com.android.mediaframeworktest.functional.audio.MediaEqualizerTest;
+import com.android.mediaframeworktest.functional.audio.MediaPresetReverbTest;
+import com.android.mediaframeworktest.functional.audio.MediaVirtualizerTest;
+import com.android.mediaframeworktest.functional.audio.MediaVisualizerTest;
+import com.android.mediaframeworktest.functional.videoeditor.MediaItemThumbnailTest;
+import com.android.mediaframeworktest.functional.videoeditor.MediaPropertiesTest;
+import com.android.mediaframeworktest.functional.videoeditor.VideoEditorAPITest;
+import com.android.mediaframeworktest.functional.videoeditor.VideoEditorExportTest;
+import com.android.mediaframeworktest.functional.videoeditor.VideoEditorPreviewTest;
import junit.framework.TestSuite;
import android.test.InstrumentationTestRunner;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioEffectTest.java
index 1511cd795229..ab78714cb56e 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioEffectTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioEffectTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
@@ -1529,4 +1529,3 @@ public class MediaAudioEffectTest extends ActivityInstrumentationTestCase2<Media
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioManagerTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioManagerTest.java
index 644444ae90df..c9087d14665f 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioManagerTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioManagerTest.java
@@ -14,7 +14,7 @@
* the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import android.content.Context;
@@ -67,4 +67,4 @@ public class MediaAudioManagerTest extends ActivityInstrumentationTestCase2<Medi
assertTrue("SetRingtoneMode : " + ringtoneMode[i], result);
}
}
- } \ No newline at end of file
+ }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioTrackTest.java
index cea3a5a797a5..e884aba7bcf7 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaAudioTrackTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioTrackTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
@@ -1250,4 +1250,3 @@ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaF
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaBassBoostTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaBassBoostTest.java
index aa5c4d7c8653..e3aa8cf86cf9 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaBassBoostTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaBassBoostTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import com.android.mediaframeworktest.functional.EnergyProbe;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.audiofx.AudioEffect;
@@ -46,6 +47,10 @@ public class MediaBassBoostTest extends ActivityInstrumentationTestCase2<MediaFr
private final static int MIN_ENERGY_RATIO_2 = 3;
private final static short TEST_STRENGTH = 500;
private final static int TEST_VOLUME = 4;
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
private BassBoost mBassBoost = null;
private int mSession = -1;
@@ -201,14 +206,15 @@ public class MediaBassBoostTest extends ActivityInstrumentationTestCase2<MediaFr
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
mp.setDataSource(MediaNames.SINE_200_1000);
+ mp.setLooping(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
getBassBoost(mp.getAudioSessionId());
mp.prepare();
@@ -219,7 +225,7 @@ public class MediaBassBoostTest extends ActivityInstrumentationTestCase2<MediaFr
int refEnergy1000 = probe.capture(1000);
mBassBoost.setStrength((short)1000);
mBassBoost.setEnabled(true);
- Thread.sleep(500);
+ Thread.sleep(4000);
// measure energy around 1kHz with band level at min
int energy200 = probe.capture(200);
int energy1000 = probe.capture(1000);
@@ -286,4 +292,3 @@ public class MediaBassBoostTest extends ActivityInstrumentationTestCase2<MediaFr
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEnvReverbTest.java
index ba202a730a72..3c8d05a027e7 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEnvReverbTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEnvReverbTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import com.android.mediaframeworktest.functional.EnergyProbe;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.audiofx.AudioEffect;
@@ -49,6 +50,14 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
private final static float DELAY_TOLERANCE = 1.05f;
// allow +/- 5% tolerance between set and get ratios
private final static float RATIO_TOLERANCE = 1.05f;
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
+ // Implementor UUID for environmental reverb effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID ENV_REVERB_EFFECT_UUID =
+ UUID.fromString("c7a511a0-a3bb-11df-860e-0002a5d5c51b");
private EnvironmentalReverb mReverb = null;
private int mSession = -1;
@@ -354,10 +363,10 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -424,10 +433,10 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -438,7 +447,7 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
// auxiliary reverb will be chosen by the effect framework as we are on session 0
rvb = new AudioEffect(
AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("c7a511a0-a3bb-11df-860e-0002a5d5c51b"),
+ ENV_REVERB_EFFECT_UUID,
0,
0);
@@ -520,4 +529,3 @@ public class MediaEnvReverbTest extends ActivityInstrumentationTestCase2<MediaFr
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEqualizerTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEqualizerTest.java
index 9146fb813b54..ee91bbb34d76 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaEqualizerTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaEqualizerTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import com.android.mediaframeworktest.functional.EnergyProbe;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.audiofx.AudioEffect;
@@ -49,6 +50,11 @@ public class MediaEqualizerTest extends ActivityInstrumentationTestCase2<MediaFr
private final static int TEST_FREQUENCY_MILLIHERTZ = 1000000;
private final static int MIN_NUMBER_OF_PRESETS = 4;
private final static int TEST_VOLUME = 4;
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
+
private Equalizer mEqualizer = null;
private int mSession = -1;
@@ -267,10 +273,10 @@ public class MediaEqualizerTest extends ActivityInstrumentationTestCase2<MediaFr
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -349,4 +355,3 @@ public class MediaEqualizerTest extends ActivityInstrumentationTestCase2<MediaFr
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaPresetReverbTest.java
index 242e6bb50a3d..757bbc5fb394 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPresetReverbTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaPresetReverbTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import com.android.mediaframeworktest.functional.EnergyProbe;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.audiofx.AudioEffect;
@@ -43,6 +44,14 @@ import java.util.UUID;
*/
public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
private String TAG = "MediaPresetReverbTest";
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
+ // Implementor UUID for preset reverb effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID PRESET_REVERB_EFFECT_UUID =
+ UUID.fromString("172cdf00-a3bc-11df-a72f-0002a5d5c51b");
private PresetReverb mReverb = null;
private int mSession = -1;
@@ -199,10 +208,10 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -267,24 +276,21 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
mp.setDataSource(MediaNames.SINE_200_1000);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
- getReverb(mp.getAudioSessionId());
- mReverb.setPreset((short)PresetReverb.PRESET_PLATE);
- mReverb.setEnabled(true);
// create reverb with UUID instead of PresetReverb constructor otherwise an auxiliary
// reverb will be chosen by the effect framework as we are on session 0
rvb = new AudioEffect(
AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("172cdf00-a3bc-11df-a72f-0002a5d5c51b"),
+ PRESET_REVERB_EFFECT_UUID,
0,
0);
@@ -317,7 +323,6 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
loge(msg, "sleep() interrupted");
}
finally {
- releaseReverb();
if (mp != null) {
mp.release();
}
@@ -365,4 +370,3 @@ public class MediaPresetReverbTest extends ActivityInstrumentationTestCase2<Medi
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVirtualizerTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVirtualizerTest.java
index 7a35429745b0..b74e52591cb7 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVirtualizerTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVirtualizerTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
+import com.android.mediaframeworktest.functional.EnergyProbe;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.audiofx.AudioEffect;
@@ -43,9 +44,13 @@ import java.util.UUID;
*/
public class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
private String TAG = "MediaVirtualizerTest";
- private final static int MIN_ENERGY_RATIO_2 = 3;
+ private final static int MIN_ENERGY_RATIO_2 = 2;
private final static short TEST_STRENGTH = 500;
private final static int TEST_VOLUME = 4;
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
private Virtualizer mVirtualizer = null;
private int mSession = -1;
@@ -202,14 +207,15 @@ public class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<Media
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
mp.setDataSource(MediaNames.SINE_200_1000);
+ mp.setLooping(true);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
getVirtualizer(mp.getAudioSessionId());
mp.prepare();
@@ -220,7 +226,7 @@ public class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<Media
int refEnergy1000 = probe.capture(1000);
mVirtualizer.setStrength((short)1000);
mVirtualizer.setEnabled(true);
- Thread.sleep(500);
+ Thread.sleep(4000);
// measure energy around 1kHz with band level at min
int energy200 = probe.capture(200);
int energy1000 = probe.capture(1000);
@@ -230,7 +236,7 @@ public class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<Media
// audio file but is not the primary effect of the virtualizer. A better way would
// be to have a stereo PCM capture and check that a strongly paned input is centered
// when output. However, we cannot capture stereo with the visualizer.
- assertTrue(msg + ": virtiualizer has no effect",
+ assertTrue(msg + ": virtualizer has no effect",
((float)energy200/(float)energy1000) >
(MIN_ENERGY_RATIO_2 * ((float)refEnergy200/(float)refEnergy1000)));
result = true;
@@ -291,4 +297,3 @@ public class MediaVirtualizerTest extends ActivityInstrumentationTestCase2<Media
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVisualizerTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVisualizerTest.java
index 542ca8d6f4dc..e0cf51d0a4d7 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaVisualizerTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaVisualizerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
@@ -47,6 +47,10 @@ public class MediaVisualizerTest extends ActivityInstrumentationTestCase2<MediaF
private final static int MAX_SAMPLING_RATE = 48000000;
private final static int MIN_CAPTURE_SIZE_MAX = 1024;
private final static int MAX_CAPTURE_SIZE_MIN = 128;
+ // Implementor UUID for volume controller effect defined in
+ // frameworks/base/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+ private final static UUID VOLUME_EFFECT_UUID =
+ UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b");
private Visualizer mVisualizer = null;
private int mSession = -1;
@@ -205,10 +209,10 @@ public class MediaVisualizerTest extends ActivityInstrumentationTestCase2<MediaF
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -281,10 +285,10 @@ public class MediaVisualizerTest extends ActivityInstrumentationTestCase2<MediaF
// creating a volume controller on output mix ensures that ro.audio.silent mutes
// audio after the effects and not before
vc = new AudioEffect(
- AudioEffect.EFFECT_TYPE_NULL,
- UUID.fromString("119341a0-8469-11df-81f9-0002a5d5c51b"),
- 0,
- 0);
+ AudioEffect.EFFECT_TYPE_NULL,
+ VOLUME_EFFECT_UUID,
+ 0,
+ 0);
vc.setEnabled(true);
mp = new MediaPlayer();
@@ -502,4 +506,3 @@ public class MediaVisualizerTest extends ActivityInstrumentationTestCase2<MediaF
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/SimTonesTest.java
index 241f8d6b7327..aaf992cc07a7 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/SimTonesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/SimTonesTest.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.audio;
// import android.content.Resources;
import com.android.mediaframeworktest.MediaFrameworkTest;
+import com.android.mediaframeworktest.functional.TonesAutoTest;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase;
@@ -70,4 +71,3 @@ public class SimTonesTest extends ActivityInstrumentationTestCase<MediaFramework
assertTrue("Stress Tones", result);
}
}
-
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediaplayback/MediaPlayerApiTest.java
index 57d5368eba0a..c501d3f189f2 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediaplayback/MediaPlayerApiTest.java
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.mediaplayback;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
import com.android.mediaframeworktest.MediaProfileReader;
+import com.android.mediaframeworktest.functional.CodecTest;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase;
@@ -31,16 +32,15 @@ import java.io.File;
/**
* Junit / Instrumentation test case for the media player api
-
- */
-public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
+ */
+public class MediaPlayerApiTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
private boolean duratoinWithinTolerence = false;
private String TAG = "MediaPlayerApiTest";
private boolean isWMAEnable = false;
private boolean isWMVEnable = false;
-
+
Context mContext;
-
+
public MediaPlayerApiTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
isWMAEnable = MediaProfileReader.getWMAEnable();
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
index 796b52cb77f0..b5c8c8c486f0 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.mediarecorder;
import com.android.mediaframeworktest.MediaFrameworkTest;
import com.android.mediaframeworktest.MediaNames;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaItemThumbnailTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
index d5b67aa6f017..80a3bcd370a1 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaItemThumbnailTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
@@ -15,7 +15,7 @@
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.videoeditor;
import java.io.File;
import java.io.IOException;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
index 0ad6760d1ee8..e2f68637ba42 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPropertiesTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.videoeditor;
import java.io.File;
import java.io.IOException;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorAPITest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
index 2a02b58f0bfa..b32d865d083a 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorAPITest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.videoeditor;
import java.io.File;
import java.util.List;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
index e1b337df9c8a..57a1c75e86f4 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorExportTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.videoeditor;
import java.io.File;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorPreviewTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
index 9a7f4f2ee5c2..e848f5f5b105 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/VideoEditorPreviewTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.mediaframeworktest.functional;
+package com.android.mediaframeworktest.functional.videoeditor;
import java.io.File;
import java.io.IOException;
diff --git a/native/include/android/rect.h b/native/include/android/rect.h
index 3e81f531db81..64d487dc259a 100644
--- a/native/include/android/rect.h
+++ b/native/include/android/rect.h
@@ -23,6 +23,9 @@ extern "C" {
#endif
typedef struct ARect {
+#ifdef __cplusplus
+ typedef int32_t value_type;
+#endif
int32_t left;
int32_t top;
int32_t right;
diff --git a/opengl/java/android/opengl/Matrix.java b/opengl/java/android/opengl/Matrix.java
index 6d80bc60c94a..7c72ae470c52 100644
--- a/opengl/java/android/opengl/Matrix.java
+++ b/opengl/java/android/opengl/Matrix.java
@@ -39,6 +39,10 @@ package android.opengl;
*
*/
public class Matrix {
+
+ /** Temporary memory for operations that need temporary matrix data. */
+ private final static float[] sTemp = new float[32];
+
/**
* Multiply two 4x4 matrices together and store the result in a third 4x4
* matrix. In matrix notation: result = lhs x rhs. Due to the way
@@ -125,95 +129,120 @@ public class Matrix {
int mOffset) {
// Invert a 4 x 4 matrix using Cramer's Rule
- // array of transpose source matrix
- float[] src = new float[16];
-
// transpose matrix
- transposeM(src, 0, m, mOffset);
-
- // temp array for pairs
- float[] tmp = new float[12];
+ final float src0 = m[mOffset + 0];
+ final float src4 = m[mOffset + 1];
+ final float src8 = m[mOffset + 2];
+ final float src12 = m[mOffset + 3];
+
+ final float src1 = m[mOffset + 4];
+ final float src5 = m[mOffset + 5];
+ final float src9 = m[mOffset + 6];
+ final float src13 = m[mOffset + 7];
+
+ final float src2 = m[mOffset + 8];
+ final float src6 = m[mOffset + 9];
+ final float src10 = m[mOffset + 10];
+ final float src14 = m[mOffset + 11];
+
+ final float src3 = m[mOffset + 12];
+ final float src7 = m[mOffset + 13];
+ final float src11 = m[mOffset + 14];
+ final float src15 = m[mOffset + 15];
// calculate pairs for first 8 elements (cofactors)
- tmp[0] = src[10] * src[15];
- tmp[1] = src[11] * src[14];
- tmp[2] = src[9] * src[15];
- tmp[3] = src[11] * src[13];
- tmp[4] = src[9] * src[14];
- tmp[5] = src[10] * src[13];
- tmp[6] = src[8] * src[15];
- tmp[7] = src[11] * src[12];
- tmp[8] = src[8] * src[14];
- tmp[9] = src[10] * src[12];
- tmp[10] = src[8] * src[13];
- tmp[11] = src[9] * src[12];
-
- // Holds the destination matrix while we're building it up.
- float[] dst = new float[16];
+ final float atmp0 = src10 * src15;
+ final float atmp1 = src11 * src14;
+ final float atmp2 = src9 * src15;
+ final float atmp3 = src11 * src13;
+ final float atmp4 = src9 * src14;
+ final float atmp5 = src10 * src13;
+ final float atmp6 = src8 * src15;
+ final float atmp7 = src11 * src12;
+ final float atmp8 = src8 * src14;
+ final float atmp9 = src10 * src12;
+ final float atmp10 = src8 * src13;
+ final float atmp11 = src9 * src12;
// calculate first 8 elements (cofactors)
- dst[0] = tmp[0] * src[5] + tmp[3] * src[6] + tmp[4] * src[7];
- dst[0] -= tmp[1] * src[5] + tmp[2] * src[6] + tmp[5] * src[7];
- dst[1] = tmp[1] * src[4] + tmp[6] * src[6] + tmp[9] * src[7];
- dst[1] -= tmp[0] * src[4] + tmp[7] * src[6] + tmp[8] * src[7];
- dst[2] = tmp[2] * src[4] + tmp[7] * src[5] + tmp[10] * src[7];
- dst[2] -= tmp[3] * src[4] + tmp[6] * src[5] + tmp[11] * src[7];
- dst[3] = tmp[5] * src[4] + tmp[8] * src[5] + tmp[11] * src[6];
- dst[3] -= tmp[4] * src[4] + tmp[9] * src[5] + tmp[10] * src[6];
- dst[4] = tmp[1] * src[1] + tmp[2] * src[2] + tmp[5] * src[3];
- dst[4] -= tmp[0] * src[1] + tmp[3] * src[2] + tmp[4] * src[3];
- dst[5] = tmp[0] * src[0] + tmp[7] * src[2] + tmp[8] * src[3];
- dst[5] -= tmp[1] * src[0] + tmp[6] * src[2] + tmp[9] * src[3];
- dst[6] = tmp[3] * src[0] + tmp[6] * src[1] + tmp[11] * src[3];
- dst[6] -= tmp[2] * src[0] + tmp[7] * src[1] + tmp[10] * src[3];
- dst[7] = tmp[4] * src[0] + tmp[9] * src[1] + tmp[10] * src[2];
- dst[7] -= tmp[5] * src[0] + tmp[8] * src[1] + tmp[11] * src[2];
+ final float dst0 = (atmp0 * src5 + atmp3 * src6 + atmp4 * src7)
+ - (atmp1 * src5 + atmp2 * src6 + atmp5 * src7);
+ final float dst1 = (atmp1 * src4 + atmp6 * src6 + atmp9 * src7)
+ - (atmp0 * src4 + atmp7 * src6 + atmp8 * src7);
+ final float dst2 = (atmp2 * src4 + atmp7 * src5 + atmp10 * src7)
+ - (atmp3 * src4 + atmp6 * src5 + atmp11 * src7);
+ final float dst3 = (atmp5 * src4 + atmp8 * src5 + atmp11 * src6)
+ - (atmp4 * src4 + atmp9 * src5 + atmp10 * src6);
+ final float dst4 = (atmp1 * src1 + atmp2 * src2 + atmp5 * src3)
+ - (atmp0 * src1 + atmp3 * src2 + atmp4 * src3);
+ final float dst5 = (atmp0 * src0 + atmp7 * src2 + atmp8 * src3)
+ - (atmp1 * src0 + atmp6 * src2 + atmp9 * src3);
+ final float dst6 = (atmp3 * src0 + atmp6 * src1 + atmp11 * src3)
+ - (atmp2 * src0 + atmp7 * src1 + atmp10 * src3);
+ final float dst7 = (atmp4 * src0 + atmp9 * src1 + atmp10 * src2)
+ - (atmp5 * src0 + atmp8 * src1 + atmp11 * src2);
// calculate pairs for second 8 elements (cofactors)
- tmp[0] = src[2] * src[7];
- tmp[1] = src[3] * src[6];
- tmp[2] = src[1] * src[7];
- tmp[3] = src[3] * src[5];
- tmp[4] = src[1] * src[6];
- tmp[5] = src[2] * src[5];
- tmp[6] = src[0] * src[7];
- tmp[7] = src[3] * src[4];
- tmp[8] = src[0] * src[6];
- tmp[9] = src[2] * src[4];
- tmp[10] = src[0] * src[5];
- tmp[11] = src[1] * src[4];
+ final float btmp0 = src2 * src7;
+ final float btmp1 = src3 * src6;
+ final float btmp2 = src1 * src7;
+ final float btmp3 = src3 * src5;
+ final float btmp4 = src1 * src6;
+ final float btmp5 = src2 * src5;
+ final float btmp6 = src0 * src7;
+ final float btmp7 = src3 * src4;
+ final float btmp8 = src0 * src6;
+ final float btmp9 = src2 * src4;
+ final float btmp10 = src0 * src5;
+ final float btmp11 = src1 * src4;
// calculate second 8 elements (cofactors)
- dst[8] = tmp[0] * src[13] + tmp[3] * src[14] + tmp[4] * src[15];
- dst[8] -= tmp[1] * src[13] + tmp[2] * src[14] + tmp[5] * src[15];
- dst[9] = tmp[1] * src[12] + tmp[6] * src[14] + tmp[9] * src[15];
- dst[9] -= tmp[0] * src[12] + tmp[7] * src[14] + tmp[8] * src[15];
- dst[10] = tmp[2] * src[12] + tmp[7] * src[13] + tmp[10] * src[15];
- dst[10] -= tmp[3] * src[12] + tmp[6] * src[13] + tmp[11] * src[15];
- dst[11] = tmp[5] * src[12] + tmp[8] * src[13] + tmp[11] * src[14];
- dst[11] -= tmp[4] * src[12] + tmp[9] * src[13] + tmp[10] * src[14];
- dst[12] = tmp[2] * src[10] + tmp[5] * src[11] + tmp[1] * src[9];
- dst[12] -= tmp[4] * src[11] + tmp[0] * src[9] + tmp[3] * src[10];
- dst[13] = tmp[8] * src[11] + tmp[0] * src[8] + tmp[7] * src[10];
- dst[13] -= tmp[6] * src[10] + tmp[9] * src[11] + tmp[1] * src[8];
- dst[14] = tmp[6] * src[9] + tmp[11] * src[11] + tmp[3] * src[8];
- dst[14] -= tmp[10] * src[11] + tmp[2] * src[8] + tmp[7] * src[9];
- dst[15] = tmp[10] * src[10] + tmp[4] * src[8] + tmp[9] * src[9];
- dst[15] -= tmp[8] * src[9] + tmp[11] * src[10] + tmp[5] * src[8];
+ final float dst8 = (btmp0 * src13 + btmp3 * src14 + btmp4 * src15)
+ - (btmp1 * src13 + btmp2 * src14 + btmp5 * src15);
+ final float dst9 = (btmp1 * src12 + btmp6 * src14 + btmp9 * src15)
+ - (btmp0 * src12 + btmp7 * src14 + btmp8 * src15);
+ final float dst10 = (btmp2 * src12 + btmp7 * src13 + btmp10 * src15)
+ - (btmp3 * src12 + btmp6 * src13 + btmp11 * src15);
+ final float dst11 = (btmp5 * src12 + btmp8 * src13 + btmp11 * src14)
+ - (btmp4 * src12 + btmp9 * src13 + btmp10 * src14);
+ final float dst12 = (btmp2 * src10 + btmp5 * src11 + btmp1 * src9 )
+ - (btmp4 * src11 + btmp0 * src9 + btmp3 * src10);
+ final float dst13 = (btmp8 * src11 + btmp0 * src8 + btmp7 * src10)
+ - (btmp6 * src10 + btmp9 * src11 + btmp1 * src8 );
+ final float dst14 = (btmp6 * src9 + btmp11 * src11 + btmp3 * src8 )
+ - (btmp10 * src11 + btmp2 * src8 + btmp7 * src9 );
+ final float dst15 = (btmp10 * src10 + btmp4 * src8 + btmp9 * src9 )
+ - (btmp8 * src9 + btmp11 * src10 + btmp5 * src8 );
// calculate determinant
- float det =
- src[0] * dst[0] + src[1] * dst[1] + src[2] * dst[2] + src[3]
- * dst[3];
+ final float det =
+ src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3;
if (det == 0.0f) {
-
+ return false;
}
// calculate matrix inverse
- det = 1 / det;
- for (int j = 0; j < 16; j++)
- mInv[j + mInvOffset] = dst[j] * det;
+ final float invdet = 1.0f / det;
+ mInv[ mInvOffset] = dst0 * invdet;
+ mInv[ 1 + mInvOffset] = dst1 * invdet;
+ mInv[ 2 + mInvOffset] = dst2 * invdet;
+ mInv[ 3 + mInvOffset] = dst3 * invdet;
+
+ mInv[ 4 + mInvOffset] = dst4 * invdet;
+ mInv[ 5 + mInvOffset] = dst5 * invdet;
+ mInv[ 6 + mInvOffset] = dst6 * invdet;
+ mInv[ 7 + mInvOffset] = dst7 * invdet;
+
+ mInv[ 8 + mInvOffset] = dst8 * invdet;
+ mInv[ 9 + mInvOffset] = dst9 * invdet;
+ mInv[10 + mInvOffset] = dst10 * invdet;
+ mInv[11 + mInvOffset] = dst11 * invdet;
+
+ mInv[12 + mInvOffset] = dst12 * invdet;
+ mInv[13 + mInvOffset] = dst13 * invdet;
+ mInv[14 + mInvOffset] = dst14 * invdet;
+ mInv[15 + mInvOffset] = dst15 * invdet;
return true;
}
@@ -488,9 +517,10 @@ public class Matrix {
public static void rotateM(float[] rm, int rmOffset,
float[] m, int mOffset,
float a, float x, float y, float z) {
- float[] r = new float[16];
- setRotateM(r, 0, a, x, y, z);
- multiplyMM(rm, rmOffset, m, mOffset, r, 0);
+ synchronized(sTemp) {
+ setRotateM(sTemp, 0, a, x, y, z);
+ multiplyMM(rm, rmOffset, m, mOffset, sTemp, 0);
+ }
}
/**
@@ -505,10 +535,11 @@ public class Matrix {
*/
public static void rotateM(float[] m, int mOffset,
float a, float x, float y, float z) {
- float[] temp = new float[32];
- setRotateM(temp, 0, a, x, y, z);
- multiplyMM(temp, 16, m, mOffset, temp, 0);
- System.arraycopy(temp, 16, m, mOffset, 16);
+ synchronized(sTemp) {
+ setRotateM(sTemp, 0, a, x, y, z);
+ multiplyMM(sTemp, 16, m, mOffset, sTemp, 0);
+ System.arraycopy(sTemp, 16, m, mOffset, 16);
+ }
}
/**
diff --git a/opengl/libs/EGL/egl_object.h b/opengl/libs/EGL/egl_object.h
index d2b737897af7..46f7139ad42e 100644
--- a/opengl/libs/EGL/egl_object.h
+++ b/opengl/libs/EGL/egl_object.h
@@ -130,7 +130,7 @@ protected:
if (window != NULL) {
native_window_set_buffers_format(window, 0);
if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
- LOGE("EGLNativeWindowType %p disconnected failed", window);
+ LOGW("EGLNativeWindowType %p disconnect failed", window);
}
}
}
diff --git a/opengl/libs/GLES2_dbg/Android.mk b/opengl/libs/GLES2_dbg/Android.mk
index c2b1142bc3a5..70853d8cffe8 100644
--- a/opengl/libs/GLES2_dbg/Android.mk
+++ b/opengl/libs/GLES2_dbg/Android.mk
@@ -31,6 +31,9 @@ ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true)
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
endif
+LOCAL_CFLAGS += -DLOG_TAG=\"libGLES2_dbg\"
+
+
# we need to access the private Bionic header <bionic_tls.h>
# on ARM platforms, we need to mirror the ARCH_ARM_HAVE_TLS_REGISTER
# behavior from the bionic Android.mk file
diff --git a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp b/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
index 9e77665eba52..41061e1bc662 100644
--- a/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
+++ b/opengl/libs/GLES2_dbg/src/dbgcontext.cpp
@@ -30,13 +30,11 @@ DbgContext * getDbgContextThreadSpecific() {
}
DbgContext::DbgContext(const unsigned version, const gl_hooks_t * const hooks,
- const unsigned MAX_VERTEX_ATTRIBS, const GLenum readFormat,
- const GLenum readType)
+ const unsigned MAX_VERTEX_ATTRIBS)
: lzf_buf(NULL), lzf_readIndex(0), lzf_refSize(0), lzf_refBufSize(0)
, version(version), hooks(hooks)
, MAX_VERTEX_ATTRIBS(MAX_VERTEX_ATTRIBS)
- , readFormat(readFormat), readType(readType)
- , readBytesPerPixel(GetBytesPerPixel(readFormat, readType))
+ , readBytesPerPixel(4)
, captureSwap(0), captureDraw(0)
, vertexAttribs(new VertexAttrib[MAX_VERTEX_ATTRIBS])
, hasNonVBOAttribs(false), indexBuffers(NULL), indexBuffer(NULL)
@@ -67,11 +65,7 @@ DbgContext* CreateDbgContext(const unsigned version, const gl_hooks_t * const ho
assert(GL_NO_ERROR == hooks->gl.glGetError());
GLint MAX_VERTEX_ATTRIBS = 0;
hooks->gl.glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &MAX_VERTEX_ATTRIBS);
- GLint readFormat, readType;
- hooks->gl.glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &readFormat);
- hooks->gl.glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &readType);
- DbgContext* dbg = new DbgContext(version, hooks, MAX_VERTEX_ATTRIBS, readFormat, readType);
-
+ DbgContext* dbg = new DbgContext(version, hooks, MAX_VERTEX_ATTRIBS);
glesv2debugger::Message msg, cmd;
msg.set_context_id(reinterpret_cast<int>(dbg));
msg.set_expect_response(false);
@@ -100,33 +94,31 @@ unsigned GetBytesPerPixel(const GLenum format, const GLenum type)
{
switch (type) {
case GL_UNSIGNED_SHORT_5_6_5:
- return 2;
case GL_UNSIGNED_SHORT_4_4_4_4:
- return 2;
case GL_UNSIGNED_SHORT_5_5_5_1:
return 2;
case GL_UNSIGNED_BYTE:
break;
default:
- assert(0);
+ LOGE("GetBytesPerPixel: unknown type %x", type);
}
switch (format) {
case GL_ALPHA:
- return 1;
case GL_LUMINANCE:
return 1;
- break;
case GL_LUMINANCE_ALPHA:
return 2;
case GL_RGB:
return 3;
case GL_RGBA:
+ case 0x80E1: // GL_BGRA_EXT
return 4;
default:
- assert(0);
- return 0;
+ LOGE("GetBytesPerPixel: unknown format %x", format);
}
+
+ return 1; // in doubt...
}
void DbgContext::Fetch(const unsigned index, std::string * const data) const
diff --git a/opengl/libs/GLES2_dbg/src/egl.cpp b/opengl/libs/GLES2_dbg/src/egl.cpp
index eb28d0607693..bbea3bd5572a 100644
--- a/opengl/libs/GLES2_dbg/src/egl.cpp
+++ b/opengl/libs/GLES2_dbg/src/egl.cpp
@@ -41,11 +41,11 @@ EGLBoolean Debug_eglSwapBuffers(EGLDisplay dpy, EGLSurface draw)
void * pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
dbg->readBytesPerPixel);
dbg->hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2],
- viewport[3], dbg->readFormat, dbg->readType, pixels);
+ viewport[3], GL_RGBA, GL_UNSIGNED_BYTE, pixels);
dbg->CompressReadPixelBuffer(msg.mutable_data());
msg.set_data_type(msg.ReferencedImage);
- msg.set_pixel_format(dbg->readFormat);
- msg.set_pixel_type(dbg->readType);
+ msg.set_pixel_format(GL_RGBA);
+ msg.set_pixel_type(GL_UNSIGNED_BYTE);
msg.set_image_width(viewport[2]);
msg.set_image_height(viewport[3]);
}
diff --git a/opengl/libs/GLES2_dbg/src/header.h b/opengl/libs/GLES2_dbg/src/header.h
index f2b1fa663598..49f3847f5dc2 100644
--- a/opengl/libs/GLES2_dbg/src/header.h
+++ b/opengl/libs/GLES2_dbg/src/header.h
@@ -87,7 +87,6 @@ public:
const unsigned int version; // 0 is GLES1, 1 is GLES2
const gl_hooks_t * const hooks;
const unsigned int MAX_VERTEX_ATTRIBS;
- const GLenum readFormat, readType; // implementation supported glReadPixels
const unsigned int readBytesPerPixel;
unsigned int captureSwap; // number of eglSwapBuffers to glReadPixels
@@ -124,8 +123,7 @@ public:
unsigned maxAttrib; // number of slots used by program
DbgContext(const unsigned version, const gl_hooks_t * const hooks,
- const unsigned MAX_VERTEX_ATTRIBS, const GLenum readFormat,
- const GLenum readType);
+ const unsigned MAX_VERTEX_ATTRIBS);
~DbgContext();
void Fetch(const unsigned index, std::string * const data) const;
diff --git a/opengl/libs/GLES2_dbg/src/vertex.cpp b/opengl/libs/GLES2_dbg/src/vertex.cpp
index 029ee3bf50a7..28a24206d659 100644
--- a/opengl/libs/GLES2_dbg/src/vertex.cpp
+++ b/opengl/libs/GLES2_dbg/src/vertex.cpp
@@ -77,7 +77,7 @@ void Debug_glDrawArrays(GLenum mode, GLint first, GLsizei count)
pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
dbg->readBytesPerPixel);
Debug_glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
- dbg->readFormat, dbg->readType, pixels);
+ GL_RGBA, GL_UNSIGNED_BYTE, pixels);
}
break;
case glesv2debugger::Message_Function_SKIP:
@@ -134,19 +134,22 @@ void Debug_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid*
msg.set_arg7(dbg->maxAttrib); // indicate capturing vertex data
std::string * const data = msg.mutable_data();
if (GL_UNSIGNED_BYTE == type) {
- if (dbg->indexBuffer)
+ if (dbg->indexBuffer) {
FetchIndexed(count, (unsigned char *)dbg->indexBuffer->data +
(unsigned long)indices, data, dbg);
- else
+ } else {
FetchIndexed(count, (unsigned char *)indices, data, dbg);
+ }
} else if (GL_UNSIGNED_SHORT == type) {
- if (dbg->indexBuffer)
+ if (dbg->indexBuffer) {
FetchIndexed(count, (unsigned short *)((char *)dbg->indexBuffer->data +
(unsigned long)indices), data, dbg);
- else
+ } else {
FetchIndexed(count, (unsigned short *)indices, data, dbg);
- } else
+ }
+ } else {
assert(0);
+ }
void * pixels = NULL;
int viewport[4] = {};
@@ -174,7 +177,7 @@ void Debug_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid*
Send(msg, cmd);
expectResponse = cmd.expect_response();
// TODO: pack glReadPixels data with vertex data instead of
- // relying on sperate call for transport, this would allow
+ // relying on separate call for transport, this would allow
// auto generated message loop using EXTEND_Debug macro
if (dbg->captureDraw > 0) {
dbg->captureDraw--;
@@ -182,7 +185,7 @@ void Debug_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid*
pixels = dbg->GetReadPixelsBuffer(viewport[2] * viewport[3] *
dbg->readBytesPerPixel);
Debug_glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
- dbg->readFormat, dbg->readType, pixels);
+ GL_RGBA, GL_UNSIGNED_BYTE, pixels);
}
break;
case glesv2debugger::Message_Function_SKIP:
diff --git a/opengl/libs/GLES2_dbg/test/test_main.cpp b/opengl/libs/GLES2_dbg/test/test_main.cpp
index 058bea4d6f48..183bf8ecb760 100644
--- a/opengl/libs/GLES2_dbg/test/test_main.cpp
+++ b/opengl/libs/GLES2_dbg/test/test_main.cpp
@@ -29,7 +29,7 @@ protected:
gl_hooks_t hooks;
DbgContextTest()
- : dbg(1, &hooks, 32, GL_RGBA, GL_UNSIGNED_BYTE) {
+ : dbg(1, &hooks, 32) {
// You can do set-up work for each test here.
hooks.gl.glGetError = GetError;
}
diff --git a/opengl/libs/GLES2_dbg/test/test_server.cpp b/opengl/libs/GLES2_dbg/test/test_server.cpp
index bbbe91305661..0ab87b08ef0b 100644
--- a/opengl/libs/GLES2_dbg/test/test_server.cpp
+++ b/opengl/libs/GLES2_dbg/test/test_server.cpp
@@ -151,7 +151,7 @@ protected:
virtual void SetUp() {
ServerFileTest::SetUp();
- dbg = new DbgContext(1, &hooks, 32, GL_RGBA, GL_UNSIGNED_BYTE);
+ dbg = new DbgContext(1, &hooks, 32);
ASSERT_NE((void *)NULL, dbg);
for (unsigned int i = 0; i < sizeof(hooks) / sizeof(void *); i++)
((void **)&hooks)[i] = reinterpret_cast<void *>(glNoop);
diff --git a/opengl/libs/GLES2_dbg/test/test_socket.cpp b/opengl/libs/GLES2_dbg/test/test_socket.cpp
index b2148acf5248..9f815e211bb5 100644
--- a/opengl/libs/GLES2_dbg/test/test_socket.cpp
+++ b/opengl/libs/GLES2_dbg/test/test_socket.cpp
@@ -44,7 +44,7 @@ protected:
}
virtual void SetUp() {
- dbg = new DbgContext(1, &hooks, 32, GL_RGBA, GL_UNSIGNED_BYTE);
+ dbg = new DbgContext(1, &hooks, 32);
ASSERT_TRUE(dbg != NULL);
for (unsigned int i = 0; i < sizeof(hooks) / sizeof(void *); i++)
((void **)&hooks)[i] = (void *)glNoop;
diff --git a/packages/BackupRestoreConfirmation/res/values-af/strings.xml b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
index 29afb93413c4..0d7422e54687 100644
--- a/packages/BackupRestoreConfirmation/res/values-af/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-af/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_title" msgid="827563724209303345">"Volledige rugsteun"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Volledige herstel"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"\'n Volledige rugsteun van al die data na \'n tafelrekenaar is aangevra. Wil jy dit toelaat? "\n\n"As jy nie self die rugsteun versoek het nie, moenie toelaat dat die aksie voortgaan nie."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Rugsteun my data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Moenie rugsteun nie"</string>
@@ -26,4 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Voer asb. \'n wagwoord in om te gebruik vir enkripsie van die volle rugsteundata. As dit leeg gelaat word, sal jou huidige rugsteunwagwoord gebruik word:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"As jy die volle rugsteundata wil enkripteer, voer \'n wagwoord hieronder in:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"As die hersteldata geïnkripteer word, voer asb. die wagwoord hieronder in:"</string>
+ <string name="toast_backup_started" msgid="550354281452756121">"Rugsteun begin tans..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Rugsteun klaar"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Herstel begin tans..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Herstel beëindig"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Handeling het uitgetel"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-am/strings.xml b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
index 59b4f3c7e85a..43e4ccee0658 100644
--- a/packages/BackupRestoreConfirmation/res/values-am/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-am/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"ሁሉንም ውሂብ በሙሉ መጠበቂያ ከተያያዘ የዴስክቶፕ ኮምፒዩተር ተጠይቋል። ይህ እንዲከሰት ለመፍቀድ ይፈልጋሉ? "\n\n"እርስዎ ራስዎ የመጠባበቂያውን ጥየቃ ካልጠየቁ ክወናው እንዲካሄድ አይፍቀዱ።"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"ውሂቤን መጠባበቂያ"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"መጠባበቂያ አታድርግ"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"እባክዎ የሙሉ ውሂብ መጠበቂያ ማመስጠር ለመጠቅም የይለፍ ቃል ያስገቡ። ይህም ባዶ ከሆነ፣ የእርስዎ የአሁኑ የመጠበቂያ ይለፍ ቃል ይወሰዳል፡"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"ሙሉ የውሂብ መጠበቂያ ለማመስጠር ከፈለጉ ከታች የይለፍ ቃል ያስገቡ፡"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"ውሂብ እነበረበት መልስ የተመሳጠረ ከሆነ፣ እባክዎ ከታች የይለፍ ቃል ያስገቡ"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
index bdaaf9805679..f946d4953ed1 100644
--- a/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ar/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"تم طلب الاحتفاظ بنسخة احتياطية كاملة من البيانات على كمبيوتر سطح مكتب متصل. هل تريد السماح بإجراء ذلك؟"\n\n"إذا لم تطلب الاحتفاظ بنسخة احتياطية بنفسك، فلا تسمح بمتابعة العملية."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"الاحتفاظ بنسخة احتياطية من بياناتي"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"عدم النسخ الاحتياطي"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"الرجاء إدخال كلمة المرور للاستخدام لتشفير بيانات النسخة الاحتياطية بالكامل. إذا تم ترك هذا فارغًا، فسيتم استخدام كلمة مرور النسخ الاحتياطي الحالية:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"إذا كنت ترغب في تشفير بيانات النسخة الاحتياطية بالكامل، فأدخل كلمة المرور أدناه:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"إذا كانت بيانات الاسترداد مشفرة، فالرجاء إدخال كلمة المرور أدناه:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
index 1da9d8bced1c..6c6a90f9da8d 100644
--- a/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-bg/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Бе поискано пълно резервно копие на всичките данни до свързан настолен компютър. Искате ли да разрешите това?"\n\n"Ако не сте заявили създаването на копие, не позволявайте операцията да продължи."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Резервно копие на данните ми"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Без резервно копие"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Моля, въведете парола, която да използвате за шифроване на пълното резервно копие на данните. Ако не е попълнена, ще бъде използвана текущата ви парола за резервно копие:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако искате да шифровате пълното резервно копие на данните, въведете парола по-долу:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако възстановените данни са шифровани, моля, въведете паролата по-долу:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
index 1658342a4804..d4b9cd22a49f 100644
--- a/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ca/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_title" msgid="827563724209303345">"Fes una còpia de seguretat completa"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Restaura completament"</string>
<string name="backup_confirm_text" msgid="1878021282758896593">"S\'ha sol·licitat una còpia de seguretat completa de totes les dades a un equip de sobretaula connectat. Vols permetre que això passi?"\n" "\n"Si no has sol·licitat la còpia de seguretat tu mateix, no permetis que continuï l\'operació."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Còpia seg. de les meves dades"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No en facis una còpia de seguretat"</string>
@@ -26,4 +28,9 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introdueix una contrasenya que utilitzaràs per a l\'encriptació de les dades de còpia de la seguretat completa. Si es deixa en blanc, s\'utilitzarà la teva contrasenya de còpia de seguretat actual:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vols xifrar les dades de la còpia de seguretat completa, introdueix una contrasenya a continuació:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si la recuperació de dades està xifrada, introdueix la contrasenya a continuació:"</string>
+ <string name="toast_backup_started" msgid="550354281452756121">"S\'està iniciant la còpia de seguretat..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Ha finalitzat la còpia de seguretat"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"S\'està iniciant la restauració..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"La restauració ha finalitzat"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"S\'ha esgotat el temps de connexió de l\'operació."</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
index 8b070d2c0d2f..0d8fa2be4158 100644
--- a/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-cs/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Obdrželi jsme požadavek na úplnou zálohu všech dat do připojeného počítače. Chcete tuto akci povolit? "\n\n"Pokud jste o zálohu nežádali, operaci nepovolujte."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovat data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovat"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadejte prosím heslo pro šifrování dat úplné zálohy. Pokud pole ponecháte prázdné, použije se aktuální heslo pro zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Chcete-li data úplné zálohy zašifrovat, zadejte heslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Pokud jsou obnovená data šifrována, zadejte prosím heslo níže:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-da/strings.xml b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
index f8b55e35167f..63bc7ebc1047 100644
--- a/packages/BackupRestoreConfirmation/res/values-da/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-da/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Der er anmodet om en fuld sikkerhedskopiering af alle data til en tilsluttet stationær computer. Vil du tillade dette?"\n\n"Hvis du ikke har anmodet om sikkerhedskopiering, skal du ikke tillade denne handling."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhedskopier mine data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Undlad at sikkerhedskopiere"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Angiv en adgangskode, som skal bruges til kryptering af alle dine sikkerhedsdata. Hvis dette felt er tomt, bruges din aktuelle adgangskode til sikkerhedskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du ønsker at kryptere sikkerhedsdataene, skal du indtaste en adgangskode nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis gendannelsesdataene er krypteret, skal du angive adgangskoden nedenfor:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-de/strings.xml b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
index 1ac17903dd30..cba2b2697a55 100644
--- a/packages/BackupRestoreConfirmation/res/values-de/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-de/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Es wurde eine vollständige Sicherung sämtlicher Daten auf einen verbundenen Desktop-Computer angefordert. Möchten Sie dies zulassen?"\n\n"Wenn Sie die Sicherung nicht selbst angefordert haben, sollten Sie dem Vorgang nicht zustimmen."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Meine Daten sichern"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nicht sichern"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geben Sie ein Passwort für die Verschlüsselung der vollständigen Sicherungsdaten ein. Wenn Sie dieses Feld leer lassen, wird Ihr aktuelles Sicherungspasswort verwendet:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Wenn Sie die gesamten Sicherungsdaten verschlüsseln möchten, geben Sie unten ein Passwort ein:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geben Sie das Passwort unten ein, wenn die Daten für die Wiederherstellung verschlüsselt sind:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-el/strings.xml b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
index 42a25cf82090..7ea104e053c4 100644
--- a/packages/BackupRestoreConfirmation/res/values-el/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-el/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Έχει ζητηθεί ένα πλήρες αντίγραφο ασφαλείας όλων των δεδομένων σε έναν συνδεδεμένο επιτραπέζιο υπολογιστή. Θέλετε να επιτραπεί αυτή η ενέργεια;"\n\n"Αν δεν έχετε ζητήσει οι ίδιοι αυτό το αντίγραφο ασφαλείας, μην επιτρέψετε την ενέργεια."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Δημιουργία αντιγράφων ασφαλείας για τα δεδομένα μου"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Να μην δημιουργείται αντίγραφο ασφαλείας"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Εισαγάγετε έναν κωδικό πρόσβασης για χρήση για την κωδικοποίηση του πλήρους αντιγράφου ασφαλείας δεδομένων. Αν μείνει κενό, θα χρησιμοποιηθεί ο τρέχων κωδικός σας πρόσβασης:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Αν θέλετε να κρυπτογραφήσετε τα πλήρη δεδομένα αντιγράφων ασφαλείας, πληκτρολογήστε έναν κωδικό πρόσβασης παρακάτω:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Εάν η επαναφορά των δεδομένων είναι κρυπτογραφημένη, εισάγετε τον κωδικό πρόσβασης παρακάτω:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
index f42a880d611f..b7d15cd4b2f3 100644
--- a/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-en-rGB/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_title" msgid="827563724209303345">"Full backup"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Full restoration"</string>
<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>
@@ -26,4 +28,9 @@
<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>
+ <string name="toast_backup_started" msgid="550354281452756121">"Backup starting..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Backup finished"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Restoration starting..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Restoration ended"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Operation timed out"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
index be509b8908b2..2f1eb52fff08 100644
--- a/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es-rUS/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en una computadora de escritorio conectada. ¿Deseas permitirla?"\n\n"Si tú no has solicitado la copia de seguridad, no permitas que se realice la operación."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de mis datos"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No realizar una copia de seguridad"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce una contraseña para encriptar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se utilizará tu contraseña actual de copia de seguridad:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si deseas encriptar los datos de la copia de seguridad completa, introduce una contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de recuperación están encriptados, vuelve a introducir la contraseña a continuación:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-es/strings.xml b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
index c0cd933f4834..359c54c9f049 100644
--- a/packages/BackupRestoreConfirmation/res/values-es/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-es/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Se ha solicitado una copia de seguridad completa de todos los datos en un ordenador conectado. ¿Quieres permitir la copia de seguridad?"\n\n"No debes permitir la copia de seguridad si no has realizado tú la solicitud."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Copia de seguridad de datos"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"No hacer copia de seguridad"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduce la contraseña que quieras usar para cifrar los datos de la copia de seguridad completa. Si dejas este campo en blanco, se usará tu contraseña de copia de seguridad actual:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si quieres cifrar los datos de la copia de seguridad completa, introduce la contraseña a continuación:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si los datos de restauración están cifrados, introduce la contraseña a continuación:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
index 6b561fedf7a7..4fce490b8c5e 100644
--- a/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fa/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"درخواست پشتیبان گیری کامل از تمام داده‌ها به یک رایانه دسک‌تاپ متصل داده شده است. آیا می‌خواهید این عمل انجام شود؟"\n\n"اگر شما درخواست تهیه نسخه پشتیبان را نداده‌اید، اجازه‌ ادامه عملیات را ندهید."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"از داده‌های من نسخه پشتیبان تهیه شود"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"نسخه پشتیبان تهیه نشود"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"لطفاً یک گذرواژه برای رمزگذاری داده‌های کامل نسخه پشتیبانی وارد کنید. اگر این خالی بماند، گذرواژه فعلی نسخه پشتیبان مورد استفاده قرار خواهد گرفت:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"اگر می‌خواهید تمام نسخه پشتیبانی داده را رمزدار کنید، یک گذرواژه در زیر وارد کنید:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"اگر داده بازیابی شده رمزگذاری شده است، لطفاً گذرواژه را در زیر وارد کنید:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
index b77158b67391..7badc7c5256a 100644
--- a/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fi/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Kytketyn tietokoneen kaikista tiedoista on pyydetty täydellistä varmuuskopiota. Haluatko sallia tämän?"\n\n"Jos et ole itse pyytänyt varmuuskopiota, älä salli toimintoa."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Varmuuskopioi omat tiedot"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Älä varmuuskopioi"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Anna salasana kaikkien varmuuskopiotietojen salaamiseksi. Jos tämä jätetään tyhjäksi, nykyistä varmuuskopioinnin salasanaa käytetään:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jos haluat salata kaikki varmuuskopiotiedot, kirjoita salasana alle:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jos palautustiedot on salattu, anna salasana alla:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
index 650f20a748c8..caa52a3037df 100644
--- a/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-fr/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Vous avez demandé une sauvegarde complète de l\'ensemble des données vers un ordinateur de bureau connecté. Voulez-vous l\'autoriser ?"\n\n"Si vous n\'avez pas demandé la sauvegarde vous-même, n\'autorisez pas la poursuite de l\'opération."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sauvegarder mes données"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne pas sauvegarder"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Veuillez saisir un mot de passe à utiliser pour chiffrer les données de sauvegarde complète. Si ce champ n\'est pas renseigné, votre mot de passe de sauvegarde actuel sera utilisé :"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vous souhaitez chiffrer l\'ensemble des données de sauvegarde, veuillez saisir un mot de passe ci-dessous :"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Si les données de restauration sont chiffrées, veuillez saisir le mot de passe ci-dessous :"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
index 8c60969b5bd4..26992d621210 100644
--- a/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hr/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Zatražena je potpuna sigurnosna kopija svih podataka na povezano stolno računalo. Želite li to dozvoliti?"\n\n"Ako niste vi zatražili sigurnosnu kopiju, ne dozvolite nastavak te radnje."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Izradi sigurnosnu kopiju mojih podataka"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne radi sigurnosnu kopiju"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Unesite zaporku koju ćete upotrebljavati za kriptiranje podataka potpune sigurnosne kopije. Ako je ostavite praznom, bit će upotrijebljena vaša trenutačna zaporka za sigurnosno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ako želite kriptirati podatke potpune sigurnosne kopije, u nastavku unesite zaporku:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ako su podaci za vraćanje kriptirani, unesite zaporku u nastavku:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
index a808d92bb442..5d690796a069 100644
--- a/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hu/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Kérés érkezett az összes adat biztonsági mentésére egy csatlakoztatott asztali számítógépre. Engedélyezi, hogy ez megtörténjen?"\n\n"Ha nem Ön kérte a mentést, ne engedélyezze a művelet folytatását."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Adatok biztonsági mentése"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ne mentsen"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Kérjük, írjon be egy jelszót a teljes biztonsági mentés adatainak titkosításához. Ha üresen hagyja, jelenlegi biztonsági jelszavát fogjuk használni:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ha minden mentett adatot szeretne titkosítani, adjon meg egy jelszót alább:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ha a visszaállítási adatok titkosítva vannak, kérjük, adja meg a jelszót alább:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-in/strings.xml b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
index 8f39ea77cfb2..adf66361099a 100644
--- a/packages/BackupRestoreConfirmation/res/values-in/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-in/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Cadangan lengkap semua data ke komputer yang tersambung telah diminta. Apakah Anda ingin mengizinkan hal ini dilakukan?"\n\n"Jika Anda tidak meminta pencadangan ini, jangan izinkan operasi dilanjutkan."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Cadangkan data saya"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Jangan mencadangkan"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Masukkan sandi yang digunakan untuk mengenkripsi data cadangan lengkap. Jika bidang ini dikosongkan, sandi cadangan Anda saat ini akan digunakan:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jika Anda ingin mengenkripsi data cadangan lengkap, masukkan sandi di bawah:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jika data pemulihan dienkripsi, masukkan sandi di bawah:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-it/strings.xml b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
index 221aac96ebde..1722222b311a 100644
--- a/packages/BackupRestoreConfirmation/res/values-it/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-it/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="backup_confirm_title" msgid="827563724209303345">"Backup totale"</string>
+ <string name="restore_confirm_title" msgid="5469365809567486602">"Ripristino totale"</string>
<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>
@@ -26,4 +28,9 @@
<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>
+ <string name="toast_backup_started" msgid="550354281452756121">"Avvio del backup..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Backup terminato"</string>
+ <string name="toast_restore_started" msgid="7881679218971277385">"Avvio del ripristino..."</string>
+ <string name="toast_restore_ended" msgid="1764041639199696132">"Ripristino terminato"</string>
+ <string name="toast_timeout" msgid="5276598587087626877">"Timeout dell\'operazione"</string>
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
index 7f031db95103..fe1aa27a207f 100644
--- a/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-iw/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"הוגשה בקשה לגיבוי מלא של כל הנתונים במחשב שולחני מחובר. האם אתה רוצה לאפשר פעולה זו? "\n\n"אם לא ביקשת את הגיבוי בעצמך, אל תאפשר לפעולה להמשיך."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"גבה את הנתונים שלי"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"אל תגבה"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"הזן סיסמה שתשמש להצפנה של נתוני הגיבוי המלא. אם תשאיר שדה זה ריק, ייעשה שימוש בסיסמת הגיבוי הנוכחית שלך:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"אם אתה רוצה להצפין את נתוני הגיבוי המלא, הזן סיסמה בהמשך:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"אם נתוני השחזור מוצפנים, הזן את הסיסמה למטה:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
index e854ca3413a3..646e69d4f6e0 100644
--- a/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ja/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"接続しているデスクトップパソコンに対してすべてのデータのフルバックアップを行うようリクエストされています。許可しますか?"\n\n"ご自分でバックアップをリクエストしていない場合は、この操作の続行を許可しないでください。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"データをバックアップ"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"バックアップしない"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"フルバックアップデータの暗号化に使用するパスワードを入力してください。空白のままにした場合、現在のバックアップ用のパスワードが使用されます:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"フルバックアップのデータを暗号化する場合は、以下にパスワードを入力してください:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"復元するデータが暗号化されている場合、以下にパスワードを入力してください:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
index f1e7193d7ae2..12e044ebe319 100644
--- a/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ko/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"연결된 데스크톱 컴퓨터에 대한 전체 데이터 백업을 요청했습니다. 백업을 실행하시겠습니까?"\n\n"직접 백업을 요청한 것이 아니라면 작업을 진행하지 마시기 바랍니다."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"데이터 백업"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"백업하지 않음"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"전체 백업 데이터를 암호화하려면 사용할 비밀번호를 입력하세요. 공백으로 남겨 두면 현재 백업 비밀번호가 사용됩니다."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"전체 백업 데이터를 암호화하려면 아래에 비밀번호를 입력하세요."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"복원 데이터가 암호화되어 있는 경우, 아래에 비밀번호를 입력하세요."</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
index abe4a12247a8..fdd91f145790 100644
--- a/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lt/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Prijungtame staliniame kompiuteryje pageidauta sukurti visų duomenų atsarginę kopiją. Ar norite, kad tai būtų atlikta?"\n\n"Jei patys atsarginės kopijos kurti neprašėte, neleiskite pradėti operacijos."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Kurti atsarginę duomenų kopiją"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nekurti atsarginės kopijos"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Įveskite slaptažodį, kuris bus naudojamas visai atsarginei duomenų kopijai šifruoti. Jei reikšmės neįvesite, bus naudojamas dabartinis atsarginės kopijos slaptažodis:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Jei norite užšifruoti visą atsarginę duomenų kopiją, įveskite slaptažodį:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Jei atkūrimo duomenys užšifruoti, įveskite toliau nurodytą slaptažodį:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
index 45fcc3a84bde..b53e50150f8d 100644
--- a/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-lv/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Ir pieprasīta visu datu pilnīga dublēšana savienotā galda datorā. Vai vēlaties to atļaut?"\n\n"Ja neesat pieprasījis dublēšanu, neatļaujiet turpināt šo darbību."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Dublēt manus datus"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Neveidot dublējumu"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Lūdzu, ievadiet paroli, kas tiks izmantota dublējuma datu pilnīgai šifrēšanai. Ja paroles lauciņu atstāsiet tukšu, tiks izmantota jūsu pašreizējā dublējuma parole:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ja vēlaties pilnībā šifrēt dublējuma datus, tālāk ievadiet paroli:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ja atjaunošanas dati ir šifrēti, lūdzu, ievadiet tālāk paroli:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
index 24a98f34f6da..04643f7fff6a 100644
--- a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ms/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<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>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sila masukkan kata laluan yang hendak digunakan untuk menyulitkan data sandaran lengkap. Jika 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>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
index ba13a6b1d9bc..d0435df52aff 100644
--- a/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nb/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"En full sikkerhetskopi av alle dataene til en tilkoblet stasjonær datamaskin er forespurt. Vil du tillate dette?"\n\n"Hvis du ikke har bedt om sikkerhetskopieringen selv, må du ikke tillate at operasjonen fortsetter."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sikkerhetskopier dataene mine"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ikke sikkerhetskopiér"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Skriv inn et passord for kryptering av full sikkerhetskopi. Hvis feltet er tomt, brukes det gjeldende passordet ditt for sikkerhetskopiering:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Hvis du vil kryptere alle de sikkerhetskopierte dataene, skriver du inn et passord nedenfor:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Hvis de gjenopprettede dataene er krypterte, må du skrive inn passordet nedenfor:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
index 78eaa7b9c9ae..f32ba27e4027 100644
--- a/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-nl/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Er is een volledige back-up van alle gegevens naar een verbonden desktopcomputer aangevraagd. Wilt u dit toestaan?"\n\n"Als u de back-up zelf niet heeft aangevraagd, moet u niet toestaan dat de bewerking wordt uitgevoerd."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Back-up maken van mijn gegevens"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Geen back-up maken"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Geef een wachtwoord op dat u wilt gebruiken voor het coderen van de gegevens van de volledige back-up. Als u dit leeg laat, wordt uw huidige back-upwachtwoord gebruikt:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Als u de gegevens van de volledige back-up wilt coderen, geeft u daarvoor hieronder een wachtwoord op:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Als deze herstelgegevens zijn gecodeerd, geeft u hieronder het wachtwoord op:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
index 82384f9f5216..87961a981af5 100644
--- a/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pl/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<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>
@@ -26,4 +30,14 @@
<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>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
index d1453681d96d..309b8cec5b93 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt-rPT/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitada uma cópia de segurança completa de todos os dados para um computador de secretária. Pretende permitir esta operação?"\n\n"Caso não tenha solicitado a cópia de segurança, não permita que a operação prossiga."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer cópia de seg. dos dados"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Não efetuar cópia de seg."</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduza uma palavra-passe a utilizar para encriptar os dados da cópia de segurança completa. Se deixar o campo em branco, será utilizada a palavra-passe de cópia de segurança atual."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se pretender encriptar os dados da cópia de segurança completa, introduza uma palavra-passe abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados a restaurar estiverem encriptados, introduza a palavra-passe abaixo:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
index a6a6544cff86..6be6fca069ba 100644
--- a/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-pt/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Foi solicitado um backup completo de todos os dados para um computador conectado. Deseja permitir que isso aconteça?"\n\n"Caso você não tenha solicitado o backup, não permita que a operação prossiga."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Fazer backup de meus dados"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Não fazer backup"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Digite uma senha para usar para criptografar os dados de backup por completo. Se isso for deixado em branco, sua senha atual de backup será usada:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Se você deseja criptografar os dados de backup por completo, digite uma senha abaixo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Se os dados restaurados forem criptografada, digite a senha abaixo:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
index 012590b363b7..871fec55b595 100644
--- a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"S-a solicitat crearea unei copii de rezervă complete a tuturor datelor pe un computer desktop conectat. Doriţi să permiteţi acest lucru?"\n\n"Dacă nu aţi solicitat dvs. copierea de rezervă, nu permiteţi ca operaţiunea să continue."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Creaţi copii de rezervă pentru datele dvs."</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nu creaţi copii de rezervă"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Introduceţi o parolă pentru a o utiliza la criptarea datelor copiei de rezervă complete. Dacă acest câmp rămâne necompletat, pentru copierea de rezervă se va utiliza parola dvs. actuală."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă doriţi să criptaţi datele copiei de rezervă complete, introduceţi o parolă mai jos:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introduceţi parola mai jos:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
index 848d5a03e95b..c064e46f9eba 100644
--- a/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ru/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Запрошено резервное копирование всех данных на подключенном компьютере. Разрешить?"\n\n"Если вы не запрашивали этого, не разрешайте выполнение операции."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Создать резервную копию данных"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не создавать резервную копию"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введите пароль для шифрования всех резервных данных. Если поле останется пустым, будет использован текущий пароль:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Чтобы зашифровать все резервные данные, введите пароль:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Если восстановленные данные зашифрованы, введите пароль:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
index ea48c9a88167..0314c910cbda 100644
--- a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Bola vyžiadaná úplná záloha všetkých dát do pripojeného počítača. Chcete túto akciu povoliť?"\n\n"Ak ste zálohu nevyžiadali vy, túto operáciu nepovoľujte."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Zálohovať údaje"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Nezálohovať"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Zadajte heslo, ktoré sa použije pri šifrovaní údajov úplnej zálohy. Ak pole ponecháte prázdne, použije sa vaše aktuálne heslo zálohy:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ak chcete šifrovať údaje úplnej zálohy, zadajte heslo nižšie:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ak sú údaje obnovenia šifrované, zadajte heslo nižšie:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
index 4ae2e7760350..7615042e7dfd 100644
--- a/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sl/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Zahtevano je popolno varnostno kopiranje vseh podatkov v povezanem računalniku. Ali želite to dovoliti?"\n\n"Če varnostnega kopiranja niste zahtevali, ne dovolite nadaljevanja postopka."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Varnostno kopiraj moje podatke"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Brez varnostnega kopiranja"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vnesite geslo za šifriranje podatkov popolnega varnostnega kopiranja. Če to pustite prazno, bo uporabljeno trenutno geslo za varnostno kopiranje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Če želite šifrirati vse varnostno kopirane podatke, spodaj vnesite geslo:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Če so podatki za obnovitev šifrirani, spodaj vnesite geslo:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
index 3ecf35c3787a..094eb1229157 100644
--- a/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sr/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Захтевана је потпуна резервна копија свих података на повезани стони рачунар. Да ли желите да дозволите то?"\n\n"Ако нисте лично захтевали резервну копију, не дозвољавајте наставак радње."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Направи резервну копију мојих података"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не прави резервне копије"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Унесите лозинку коју ћете користити за шифровање података потпуне резервне копије. Ако то поље оставите празно, користиће се тренутна лозинка резервне копије:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ако желите да шифрујете податке потпуне резервне копије, унесите лозинку у наставку."</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ако су подаци за враћање шифровани, унесите лозинку у наставку:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
index 3c230527d0da..8df6544949da 100644
--- a/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sv/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"En fullständig säkerhetskopia av alla data till en ansluten dator har begärts. Vill du tillåta detta?"\n\n"Om du inte själv begärde säkerhetskopian ska du inte tillåta detta."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Säkerhetskopiera mina data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Säkerhetskopiera inte"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Ange ett lösenord för kryptering av alla säkerhetskopierade data. Om det här lämnas tomt kommer ditt nuvarande lösenord för säkerhetskopior att användas:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Om du vill kryptera alla säkerhetskopierade data anger du ett lösenord nedan:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Om återställda data är krypterade anger du lösenordet nedan:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
index cefa1bcde06c..810ad4e83df3 100644
--- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Chelezo kamili la data iliyounganishwa kwenye eneo kazi la kompyuta limeombwa. Unataka kuruhusu hii kutendeka?"\n\n" Ikiwa hukuomba chelezo mwenyewe, usikubali uendeshaji kuendelea."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Cheleza data yangu"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia kwa usimbaji fiche wa chelezo ya data kamili. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba fiche data nzima ya kucheleza, ingiza nenosiri la hapo chini:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-th/strings.xml b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
index 631f1fc6b105..3bc2ce667cd0 100644
--- a/packages/BackupRestoreConfirmation/res/values-th/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-th/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"เราได้รับการขอให้ทำการสำรองข้อมูลทั้งหมดลงในคอมพิวเตอร์เดสก์ท็อปที่เชื่อมต่ออยู่ คุณต้องการอนุญาตให้ดำเนินการตามนี้หรือไม่"\n\n" หากคุณไม่ได้เป็นผู้ขอให้ทำการสำรองข้อมูลดังกล่าว โปรดอย่าอนุญาตให้ดำเนินการ"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"สำรองข้อมูลของฉัน"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"ไม่ต้องสำรองข้อมูล"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"โปรดป้อนรหัสผ่านเพื่อใช้สำหรับเข้ารหัสข้อมูลที่สำรองแบบเต็มรูปแบบ หากเว้นว่างไว้ รหัสผ่านการสำรองข้อมูลปัจจุบันของคุณจะถูกใช้:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"หากคุณต้องการเข้ารหัสข้อมูลที่สำรองเต็มรูปแบบ โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"หากมีการเข้ารหัสข้อมูลที่คืนค่า โปรดป้อนรหัสผ่านด้านล่างนี้:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
index 2cb0a8b7a561..f54105d965fe 100644
--- a/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tl/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Hiniling ang isang buong pag-backup ng lahat ng data sa isang nakakonektang desktop computer. Gusto mo ba itong payagang maganap? "\n\n"Kung hindi ikaw mismo ang humiling ng pag-backup, huwag payagang magpatuloy ang pagpapatakbo."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"I-back up ang aking data"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Huwag i-back up"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Mangyaring maglagay ng password na gamitin sa pag-e-encrypt ng buong data sa pag-backup. Kung iiwanan itong blangko, gagamitin ang iyong kasalukuyang backup na password:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Kung nais mong i-encrypt ang buong data ng backup, maglagay ng password sa ibaba:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Kung naka-encrypt ang data sa pagpapanumbalik, pakilagay ang password sa ibaba:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
index 093e7dcfbb93..0f610dd17a95 100644
--- a/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-tr/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Tüm verilerin bağlı bir masaüstü bilgisayara tam olarak yedeklenmesi için istekte bulunuldu?"\n\n"Yedekleme isteğinde siz bulunmadıysanız, işlemin devam etmesine izin vermeyin."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Verilerimi yedekle"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Yedekleme"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedekleme verilerini şifrelemek için lütfen bir şifre girin. Boş bırakılırsa, mevcut yedekleme şifreniz kullanılır:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Yedeklenen tüm verileri şifrelemek isterseniz, aşağıya bir şifre girin:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Geri yükleme verileri şifreliyse, lütfen şifreyi aşağıya girin:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
index 7b07b17c5fde..3c9fb97042e6 100644
--- a/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-uk/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Надійшов запит на повне резервне копіювання всіх даних на під’єднаний настільний комп’ютер. Дозволити це?"\n\n"Якщо ви не надсилали запит на резервне копіювання, не дозволяйте виконувати цю операцію."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Резервне копіювання даних"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Не створювати резервну копію"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Введіть пароль, який використовується для шифрування повного резервного копіювання даних. Якщо залишити це поле порожнім, буде використано поточний пароль резервного копіювання."</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Якщо ви хочете зашифрувати повне резервне копіювання даних, введіть пароль нижче:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Якщо дані для відновлення зашифровано, введіть пароль нижче:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
index de8849874103..1a92acb68756 100644
--- a/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-vi/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Đã yêu cầu sao lưu đầy đủ toàn bộ dữ liệu tới máy tính được kết nối. Bạn có muốn cho phép điều này xảy ra không?"\n\n"Nếu không phải bản thân bạn yêu cầu sao lưu, đừng cho phép thao tác này tiếp tục."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sao lưu dữ liệu của tôi"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Không sao lưu"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Vui lòng nhập mật khẩu dùng để mã hóa toàn bộ dữ liệu sao lưu. Nếu trường này bị bỏ trống, mật khẩu sao lưu hiện tại của bạn sẽ được sử dụng:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Nếu bạn muốn mã hóa toàn bộ dữ liệu sao lưu, hãy nhập mật khẩu bên dưới:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Nếu dữ liệu khôi phục được mã hóa, vui lòng nhập mật khẩu bên dưới:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
index afdab4a65906..bf44a0e76259 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rCN/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"系统请求将所有数据完整备份至已连接的桌面计算机。允许此操作吗?"\n\n"如果您本人未要求备份,请阻止该操作。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"备份我的数据"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"不备份"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"请输入用于加密完整备份数据的密码。如果留空,系统将会使用您当前的备份密码:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想为整个备份数据加密,请在下方输入密码:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果恢复数据已加密,请在下方输入密码:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
index bf73543954b7..f61e44c7fcb7 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rTW/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份至連線電腦的要求,請問您允許進行備份嗎?"\n\n"如果您本人並未提出備份要求,請勿允許繼續進行這項作業。"</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"備份我的資料"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"不要備份"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入完整備份資料加密專用的密碼。如果您沒有輸入密碼,系統會使用您目前的備用密碼:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想要將完整備份資料進行加密,請在下面輸入一組密碼:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理,請在下面輸入密碼:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
index 8f7af997a9cf..822379f7d3a0 100644
--- a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
@@ -16,6 +16,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for backup_confirm_title (827563724209303345) -->
+ <skip />
+ <!-- no translation found for restore_confirm_title (5469365809567486602) -->
+ <skip />
<string name="backup_confirm_text" msgid="1878021282758896593">"Kucelwe ukwesekelwa ngokulondoloza okuphelele kwayo yonke imininingo ekwi-desktop yekhompuyutha exhunyiwe. Angifuni ukuvumel alokhu ukuthi kwenzeke?"\n\n"Uma kuwukuthi awuzange ucele ukuthi kwesekelwe ngokulondoloza wena uqobo lwakho, ungavumeli ukuthi lolu hlelo luqhubekele phambili."</string>
<string name="allow_backup_button_label" msgid="4217228747769644068">"Sekela ngokulondoloza imininingo yami"</string>
<string name="deny_backup_button_label" msgid="6009119115581097708">"Ungenzi isipele"</string>
@@ -26,4 +30,14 @@
<string name="backup_enc_password_text" msgid="4981585714795233099">"Sicela ufake i-password ezosetshenziselwa ukubhala ngokufihlekileyo imininingo eyesekwe ngokulondoloza. Uma lokhu kushiywe kungabhalwe lutho, kuzosetshenziswa i-password yokweseka ngokulondoloza yamanje:"</string>
<string name="backup_enc_password_optional" msgid="1350137345907579306">"Uma ufuna ukufaka ikhowudi kwimininingo yonke eyesekelwe ngokulondoloza faka i-passowrd engezansi:"</string>
<string name="restore_enc_password_text" msgid="6140898525580710823">"Uma insiza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake i-password ngezansi:"</string>
+ <!-- no translation found for toast_backup_started (550354281452756121) -->
+ <skip />
+ <!-- no translation found for toast_backup_ended (3818080769548726424) -->
+ <skip />
+ <!-- no translation found for toast_restore_started (7881679218971277385) -->
+ <skip />
+ <!-- no translation found for toast_restore_ended (1764041639199696132) -->
+ <skip />
+ <!-- no translation found for toast_timeout (5276598587087626877) -->
+ <skip />
</resources>
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index 6e5f8567eea9..113f0f721d38 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -156,6 +156,7 @@ public class DefaultContainerService extends IntentService {
}
ret.packageName = pkg.packageName;
ret.installLocation = pkg.installLocation;
+ ret.verifiers = pkg.verifiers;
ret.recommendedInstallLocation = recommendAppInstallLocation(pkg.installLocation,
archiveFilePath, flags, threshold);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 4f39e6980f5b..b851ab7ec81c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -16,6 +16,21 @@
package com.android.providers.settings;
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.FullBackupDataOutput;
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.wifi.WifiManager;
+import android.os.FileUtils;
+import android.os.ParcelFileDescriptor;
+import android.os.Process;
+import android.provider.Settings;
+import android.util.Log;
+
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -27,28 +42,13 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
-import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
import java.util.zip.CRC32;
-import android.app.backup.BackupDataInput;
-import android.app.backup.BackupDataOutput;
-import android.app.backup.BackupAgentHelper;
-import android.app.backup.FullBackupDataOutput;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.net.wifi.WifiManager;
-import android.os.FileUtils;
-import android.os.ParcelFileDescriptor;
-import android.os.Process;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-
/**
* Performs backup and restore of the System and Secure settings.
* List of settings that are backed up are stored in the Settings.java file
@@ -79,8 +79,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
// Versioning of the 'full backup' format
private static final int FULL_BACKUP_VERSION = 1;
- private static String[] sortedSystemKeys = null;
- private static String[] sortedSecureKeys = null;
+ private static final int INTEGER_BYTE_COUNT = Integer.SIZE / Byte.SIZE;
private static final byte[] EMPTY_DATA = new byte[0];
@@ -112,6 +111,7 @@ public class SettingsBackupAgent extends BackupAgentHelper {
private WifiManager mWfm;
private static String mWifiConfigFile;
+ @Override
public void onCreate() {
if (DEBUG_BACKUP) Log.d(TAG, "onCreate() invoked");
@@ -348,26 +348,17 @@ public class SettingsBackupAgent extends BackupAgentHelper {
}
private byte[] getSystemSettings() {
- Cursor sortedCursor = getContentResolver().query(Settings.System.CONTENT_URI, PROJECTION,
- null, null, Settings.NameValueTable.NAME);
- // Copy and sort the array
- if (sortedSystemKeys == null) {
- sortedSystemKeys = copyAndSort(Settings.System.SETTINGS_TO_BACKUP);
- }
- byte[] result = extractRelevantValues(sortedCursor, sortedSystemKeys);
- sortedCursor.close();
+ Cursor cursor = getContentResolver().query(Settings.System.CONTENT_URI, PROJECTION, null,
+ null, null);
+ byte[] result = extractRelevantValues(cursor, Settings.System.SETTINGS_TO_BACKUP);
+ cursor.close();
return result;
}
private byte[] getSecureSettings() {
- Cursor sortedCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, PROJECTION,
- null, null, Settings.NameValueTable.NAME);
- // Copy and sort the array
- if (sortedSecureKeys == null) {
- sortedSecureKeys = copyAndSort(Settings.Secure.SETTINGS_TO_BACKUP);
- }
- byte[] result = extractRelevantValues(sortedCursor, sortedSecureKeys);
- sortedCursor.close();
+ Cursor cursor = getContentResolver().query(Settings.Secure.CONTENT_URI, PROJECTION, null,
+ null, null);
+ byte[] result = extractRelevantValues(cursor, Settings.Secure.SETTINGS_TO_BACKUP);
return result;
}
@@ -383,119 +374,132 @@ public class SettingsBackupAgent extends BackupAgentHelper {
}
private void restoreSettings(byte[] settings, int bytes, Uri contentUri) {
- if (DEBUG) Log.i(TAG, "restoreSettings: " + contentUri);
+ if (DEBUG) {
+ Log.i(TAG, "restoreSettings: " + contentUri);
+ }
+
+ // Figure out the white list.
String[] whitelist = null;
if (contentUri.equals(Settings.Secure.CONTENT_URI)) {
whitelist = Settings.Secure.SETTINGS_TO_BACKUP;
} else if (contentUri.equals(Settings.System.CONTENT_URI)) {
whitelist = Settings.System.SETTINGS_TO_BACKUP;
+ } else {
+ throw new IllegalArgumentException("Unknown URI: " + contentUri);
}
- ContentValues cv = new ContentValues(2);
+ // Restore only the white list data.
int pos = 0;
- while (pos < bytes) {
- int length = readInt(settings, pos);
- pos += 4;
- String settingName = length > 0? new String(settings, pos, length) : null;
- pos += length;
- length = readInt(settings, pos);
- pos += 4;
- String settingValue = length > 0? new String(settings, pos, length) : null;
- pos += length;
- if (!TextUtils.isEmpty(settingName) && !TextUtils.isEmpty(settingValue)) {
- //Log.i(TAG, "Restore " + settingName + " = " + settingValue);
-
- // Only restore settings in our list of known-acceptable data
- if (invalidSavedSetting(whitelist, settingName)) {
- continue;
+ Map<String, String> cachedEntries = new HashMap<String, String>();
+ ContentValues contentValues = new ContentValues(2);
+ SettingsHelper settingsHelper = mSettingsHelper;
+
+ final int whiteListSize = whitelist.length;
+ for (int i = 0; i < whiteListSize; i++) {
+ String key = whitelist[i];
+ String value = cachedEntries.remove(key);
+
+ // If the value not cached, let us look it up.
+ if (value == null) {
+ while (pos < bytes) {
+ int length = readInt(settings, pos);
+ pos += INTEGER_BYTE_COUNT;
+ String dataKey = length > 0 ? new String(settings, pos, length) : null;
+ pos += length;
+ length = readInt(settings, pos);
+ pos += INTEGER_BYTE_COUNT;
+ String dataValue = length > 0 ? new String(settings, pos, length) : null;
+ pos += length;
+ if (key.equals(dataKey)) {
+ value = dataValue;
+ break;
+ }
+ cachedEntries.put(dataKey, dataValue);
}
+ }
- if (mSettingsHelper.restoreValue(settingName, settingValue)) {
- cv.clear();
- cv.put(Settings.NameValueTable.NAME, settingName);
- cv.put(Settings.NameValueTable.VALUE, settingValue);
- getContentResolver().insert(contentUri, cv);
- }
+ if (value == null) {
+ continue;
}
- }
- }
- // Returns 'true' if the given setting is one that we refuse to restore
- private boolean invalidSavedSetting(String[] knownNames, String candidate) {
- // no filter? allow everything
- if (knownNames == null) {
- return false;
- }
+ if (settingsHelper.restoreValue(key, value)) {
+ contentValues.clear();
+ contentValues.put(Settings.NameValueTable.NAME, key);
+ contentValues.put(Settings.NameValueTable.VALUE, value);
+ getContentResolver().insert(contentUri, contentValues);
+ }
- // whitelisted setting? allow it
- for (String name : knownNames) {
- if (name.equals(candidate)) {
- return false;
+ if (DEBUG) {
+ Log.d(TAG, "Restored setting: " + key + "=" + value);
}
}
-
- // refuse everything else
- if (DEBUG) Log.v(TAG, "Ignoring restore datum: " + candidate);
- return true;
- }
-
- private String[] copyAndSort(String[] keys) {
- String[] sortedKeys = new String[keys.length];
- System.arraycopy(keys, 0, sortedKeys, 0, keys.length);
- Arrays.sort(sortedKeys);
- return sortedKeys;
}
/**
- * Given a cursor sorted by key name and a set of keys sorted by name,
- * extract the required keys and values and write them to a byte array.
- * @param sortedCursor
- * @param sortedKeys
- * @return
+ * Given a cursor and a set of keys, extract the required keys and
+ * values and write them to a byte array.
+ *
+ * @param cursor A cursor with settings data.
+ * @param settings The settings to extract.
+ * @return The byte array of extracted values.
*/
- byte[] extractRelevantValues(Cursor sortedCursor, String[] sortedKeys) {
- byte[][] values = new byte[sortedKeys.length * 2][]; // keys and values
- if (!sortedCursor.moveToFirst()) {
+ private byte[] extractRelevantValues(Cursor cursor, String[] settings) {
+ final int settingsCount = settings.length;
+ byte[][] values = new byte[settingsCount * 2][]; // keys and values
+ if (!cursor.moveToFirst()) {
Log.e(TAG, "Couldn't read from the cursor");
return new byte[0];
}
- int keyIndex = 0;
+
+ // Obtain the relevant data in a temporary array.
int totalSize = 0;
- while (!sortedCursor.isAfterLast()) {
- String name = sortedCursor.getString(COLUMN_NAME);
- while (sortedKeys[keyIndex].compareTo(name.toString()) < 0) {
- keyIndex++;
- if (keyIndex == sortedKeys.length) break;
- }
- if (keyIndex < sortedKeys.length && name.equals(sortedKeys[keyIndex])) {
- String value = sortedCursor.getString(COLUMN_VALUE);
- byte[] nameBytes = name.toString().getBytes();
- totalSize += 4 + nameBytes.length;
- values[keyIndex * 2] = nameBytes;
- byte[] valueBytes;
- if (TextUtils.isEmpty(value)) {
- valueBytes = null;
- totalSize += 4;
- } else {
- valueBytes = value.toString().getBytes();
- totalSize += 4 + valueBytes.length;
- //Log.i(TAG, "Backing up " + name + " = " + value);
+ int backedUpSettingIndex = 0;
+ Map<String, String> cachedEntries = new HashMap<String, String>();
+ for (int i = 0; i < settingsCount; i++) {
+ String key = settings[i];
+ String value = cachedEntries.remove(key);
+
+ // If the value not cached, let us look it up.
+ if (value == null) {
+ while (!cursor.isAfterLast()) {
+ String cursorKey = cursor.getString(COLUMN_NAME);
+ String cursorValue = cursor.getString(COLUMN_VALUE);
+ cursor.moveToNext();
+ if (key.equals(cursorKey)) {
+ value = cursorValue;
+ break;
+ }
+ cachedEntries.put(cursorKey, cursorValue);
}
- values[keyIndex * 2 + 1] = valueBytes;
- keyIndex++;
}
- if (keyIndex == sortedKeys.length || !sortedCursor.moveToNext()) {
- break;
+
+ if (value == null) {
+ continue;
+ }
+
+ // Write the key and value in the intermediary array.
+ byte[] keyBytes = key.getBytes();
+ totalSize += INTEGER_BYTE_COUNT + keyBytes.length;
+ values[backedUpSettingIndex * 2] = keyBytes;
+
+ byte[] valueBytes = value.getBytes();
+ totalSize += INTEGER_BYTE_COUNT + valueBytes.length;
+ values[backedUpSettingIndex * 2 + 1] = valueBytes;
+
+ backedUpSettingIndex++;
+
+ if (DEBUG) {
+ Log.d(TAG, "Backed up setting: " + key + "=" + value);
}
}
+ // Aggregate the result.
byte[] result = new byte[totalSize];
int pos = 0;
- for (int i = 0; i < sortedKeys.length * 2; i++) {
- if (values[i] != null) {
- pos = writeInt(result, pos, values[i].length);
- pos = writeBytes(result, pos, values[i]);
- }
+ final int keyValuePairCount = backedUpSettingIndex * 2;
+ for (int i = 0; i < keyValuePairCount; i++) {
+ pos = writeInt(result, pos, values[i].length);
+ pos = writeBytes(result, pos, values[i]);
}
return result;
}
@@ -647,14 +651,14 @@ public class SettingsBackupAgent extends BackupAgentHelper {
* @param out byte array
* @param pos current pos in array
* @param value integer to write
- * @return the index after adding the size of an int (4)
+ * @return the index after adding the size of an int (4) in bytes.
*/
private int writeInt(byte[] out, int pos, int value) {
out[pos + 0] = (byte) ((value >> 24) & 0xFF);
out[pos + 1] = (byte) ((value >> 16) & 0xFF);
out[pos + 2] = (byte) ((value >> 8) & 0xFF);
out[pos + 3] = (byte) ((value >> 0) & 0xFF);
- return pos + 4;
+ return pos + INTEGER_BYTE_COUNT;
}
private int writeBytes(byte[] out, int pos, byte[] value) {
diff --git a/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png b/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
index caa8795b0dfc..5107bd1187af 100644
--- a/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
+++ b/packages/SystemUI/res/drawable-hdpi/battery_low_battery.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_bottom.9.png b/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_bottom.9.png
index 2e11928518f3..155a315f6204 100644
--- a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_bottom.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_bottom.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_top.9.png b/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_top.9.png
index 58a78b791a2e..3eb6fa213fe7 100644
--- a/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_top.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/compat_mode_help_divider_top.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notification_dnd.png b/packages/SystemUI/res/drawable-hdpi/ic_notification_dnd.png
index 2c48c972b874..92bc75c41e98 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notification_dnd.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notification_dnd.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
index ac5a97b24a93..3adcbec558d9 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png
index a5a96522bff5..a371caab3b51 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_land.png
index c345e84eab00..5a172a81d2b8 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_land.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home.png
index a90dc9b131bb..908056fa1fd9 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_land.png
index d686787eddbf..843cd9db46c9 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_land.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
index 7dfbc5f46f2e..c925a539190e 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu.png
index d23f9b75775d..58843bbbc8e7 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu_land.png
index 6d99ba5fc62e..66cd57bcb537 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu_land.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_menu_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent.png
index cb3c4331089f..6db0c0500706 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent_land.png
index 11ddf00d5998..113f1f6a194e 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent_land.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_recent_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png
index 436283618f54..b5d85188cfc9 100644
--- a/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png
index 64b8f4f05ae4..fc8dee1a6bef 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png
index 33e248b7afac..f6b7df734b22 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png
index 64f8027d64af..c920ec4fe71a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png
index 60568e3acb47..a51fd00a63f4 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png
index 4e2a38ebd62b..4e830a431ab0 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png
index 4ee255157405..48e7122e8a9a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png
index b28b4e151f85..f807434a02ed 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png
index 73cdf33d5c54..98c8deac263a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png
index e105a10a673c..9700b1b0f54f 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
index 46d596736182..554aaff5b5bf 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png
index 2cd22c173a9d..829378ea9f8f 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png
index a4d2544b62a0..11ce50d77853 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png
index aea3a31b3a30..2d8fbe0bf8fe 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png
index 8b141aefbf08..df0bb45789e1 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png
index 23f6fb10cfe0..f6fc90ba7b2b 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png
index 4f27e0a65dab..b2a1bcd24a5d 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png
index 89aa4a603897..6ccced57cf18 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png
index 901839ac73f3..4a5d001fb557 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
index e427534d7fca..da614852c695 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png
index bf708be0851b..551c67258e3a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png
index 367d954c6c9b..aee2cf25e943 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png
index 5912575a4694..28bdabb41911 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png
index b112620f6ec2..a6d46728e2a0 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png
index 99c9284e176a..c9a6c8e60eda 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png
index 9ab345408331..83aa3c74317c 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png
index e32f584cec5e..24ad4de01219 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png
index 354f5ab124cf..15faa3ae8702 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png
index ab4dbff7e9ad..4dbca1e978f7 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png
index 838085bb01dc..c3cda8af1cc7 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png
index 1d689072e14a..6cdc111592a5 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png
index 7cf63eda7391..9a3fa43207f9 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png
index 2c5a5bff9c54..80f340f4deb4 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png
index faa4d71d570d..765548be305b 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_no_sim.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png
index f82690521827..cbd9b873315d 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png
index 32d6320daaed..cbd9b873315d 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png
index e007be489ac9..b0e142428f1e 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png
index fd76878b53dd..797b1eb48e03 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png
index ded320a3edce..7c479e832e63 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png
index 5f9291609039..c60def11e953 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png
index 47bbed28c90f..1cef87b10159 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png
index 9afd5f67abfd..61e0e9580c00 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png
index a81806d3fdfa..48c3490ced64 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png
index 366ee35bc891..71205bf15853 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png
index 89d12c7a3600..e5b0e2d498f1 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png
index c1f017f6bc57..5e74e449eb96 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png
index 35f6a40c6561..d5a78ca19d6a 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
index c7d5eb2950b6..277dcb8a49b0 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
index 54a98cc57d70..edc17606680f 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
index 7fc630d518a8..fbc6b99115b9 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_sync.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_sync.png
new file mode 100644
index 000000000000..ed31e8e9c071
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_sync.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png
new file mode 100644
index 000000000000..6583878e5ebe
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_sync_error.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
index 90e88d1b127a..fb938e8f8bc5 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
index 8e736b169ce6..2d35517f9356 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
index 624c75697350..fe68c3c18e87 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png
index 83e3aa1599ba..7a39a97d358d 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png
index a2e2428424f4..6b46001cf950 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png
index 28c84141737d..ca49f46379b1 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png
index 5d752270b28f..4ba276182b51 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png
index a29398acfd09..597c21448066 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png
index 27bae24e7e7c..965e42c84890 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png
index bfa13d207c8a..810a6b25b144 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png
index 07120621ef54..2994c7296ef8 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png
index 19168195ded1..931daeddceb5 100644
--- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/battery_low_battery.png b/packages/SystemUI/res/drawable-mdpi/battery_low_battery.png
index 3de53d8bec14..ecc909ad3de4 100644
--- a/packages/SystemUI/res/drawable-mdpi/battery_low_battery.png
+++ b/packages/SystemUI/res/drawable-mdpi/battery_low_battery.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_diagram.png b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_diagram.png
index 518a5c193e59..5f08b52935ef 100644
--- a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_diagram.png
+++ b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_diagram.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_bottom.9.png b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_bottom.9.png
index 3712abfbb39d..b7f4523d067c 100644
--- a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_bottom.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_bottom.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_top.9.png b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_top.9.png
index a4d08c8bba08..fae17b121f44 100644
--- a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_top.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_divider_top.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_icon.png b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_icon.png
index 233c4dfcc0cc..e017e03e0307 100644
--- a/packages/SystemUI/res/drawable-mdpi/compat_mode_help_icon.png
+++ b/packages/SystemUI/res/drawable-mdpi/compat_mode_help_icon.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notification_dnd.png b/packages/SystemUI/res/drawable-mdpi/ic_notification_dnd.png
index 8a4ef86e3ed7..fd2bcb2c9c74 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notification_dnd.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notification_dnd.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
index 5ab09f0adaad..49411bd60564 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png
index 14d1ca9fe394..aadee3bdae7d 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_land.png
index d63b42aae306..98954aa7fd87 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_land.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home.png
index 62ca4276f326..9820a79d0bc9 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_land.png
index 74d2590631de..556de0a8fb6c 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_land.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
index 1b884edcb41b..cf12bb903eab 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu.png
index 6d4d55dd7f64..cc65b07e8afd 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_land.png
index 661939315a44..d0404bf158ae 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_land.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_menu_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent.png
index ff698fb6efa6..358c5ca5e749 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent_land.png
index 6cc8031b8300..7a6ddd95059a 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent_land.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_recent_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png
index 436283618f54..57448851b45a 100644
--- a/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/recents_blue_glow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png
index 1d44294fbe36..4b0a74f24375 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png
index bda766ddaa92..edf244a62b9d 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png
index 058ef2ae732f..943332e5929c 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png
index a78263cf81ce..d465337d48ce 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png
index 11ecb6c76233..4b0ad710b12a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png
index d0f198515490..70c40e83c400 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png
index 1ddd12a2ec55..aa0fde19d498 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png
index 3716a841783f..95688d0e8308 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png
index e503e18a4a3a..ac3b5f31192a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png
index a672990356a4..31aa745984b2 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png
index 5a6054aed8aa..2773a70691a8 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png
index bd6e438c500e..4471eb983b75 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png
index 1e1e09564aee..0c2f994a57d0 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png
index 222edbdf6436..98a393158135 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png
index 70169936c053..7443b596ce28 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png
index 204e6c9a316c..e791a889f2a1 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png
index ce20d6d672f8..51c106c97918 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png
index 5469a4cdc7e2..53a73646f8a5 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png
index 40c7c28809ff..3451fff8cc56 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png
index 1e3d49dd0be5..5076cf95203b 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png
index 1b3a98b7b6a9..3ab84708d170 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png
index 2e7b19c2feb5..83538d463d4f 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png
index 2f3f519097c4..aa011ca08219 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png
index 4746ef431c00..4cebc4365e27 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png
index 7edc2b9702c8..bd2b4ed6f1ca 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png
index ae8c76988f99..243dfeafaf86 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png
index 675be67a047d..8184f2c47ad0 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png
index b6653058c36e..19780bd24f1f 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png
index 1900f3c374f0..efba454dbe9a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png
index 3a3d40c6b72f..a4455aed88e9 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png
index 908fa117a84e..e82f3f4e074e 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png
index d702fae3162c..f8e13ab4764b 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png
index d90404856e59..24bee66a2d4a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_no_sim.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png
index ddec9a9e7d1d..faefe36d0cd7 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png
index 9ca5533ea450..faefe36d0cd7 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png
index c108bbb3db36..76b272e3a65a 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png
index b35e15a22777..18c603d30c52 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png
index 52d9af195419..89274b116c46 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png
index ffbb3bf951f2..ae8e70a84420 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png
index 1aa2ad11909f..35ec9bddbaf9 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png
index 7387d37bbf7a..b082e9f48d79 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png
index d440b655c613..a2c7ed8808cb 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png
index 53adbe15421a..e12ecbfa7507 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png
index 0d0fc8c9a6bd..f08b75e2f7bb 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png
index 56738e15425c..12581d56fb33 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png
index 01b2709aa39d..5ce22de3bfbe 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
index 48e123ea9317..000e98b05af2 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
index fba56780c5a2..62b940a205c5 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
index 30d2c24e9e68..5beb543f44cb 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_sync.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_sync.png
new file mode 100644
index 000000000000..06b3913ee241
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_sync.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png
new file mode 100644
index 000000000000..4f23daeea604
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_sync_error.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
index 06a9fc499b2b..f70d3154cfa1 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
index 3ab3a994ea42..be9953f64da7 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
index a8934e662781..de20bdd23d71 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png
index 7ec7805b6fd1..f39d0bbc0098 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png
index df24b68048fe..4f015d2ca985 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png
index 55fc42746e4c..b1314a60a254 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png
index ca546f5e4587..c451919010fa 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png
index 334380856a7d..84746e74c992 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png
index 5eecfd9f02b8..ce752b15b89f 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png
index 84fc68d0a7a5..d6e746d51619 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png
index 4cdece19232b..3ecfff5402af 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png
index 894fd440adb9..6e1ac9189e8f 100644
--- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
index 6b3ab3e31332..2f4cf9d98ea7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png
index 4adff32e8633..80184abdf3b0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png
index aa6b550d12bf..f33f00e72a01 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png
index e0e8f14c85fd..7f16039e14cf 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png
index 0e7241f2cf56..83bfd39b18b7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png
index d4dc5226b177..2c85bcfc2956 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png
index 62e48cc25ac9..ce1acbdcf814 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png
index 1026a161e0bf..df53bb0b7701 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png
index 38a8091e655d..44d8726cd8a9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png
index b1ce7b1c59d7..1a060e77fcf3 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png
index 39ec52d7bb4b..02fd0131257a 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png
index 1eef45df83d0..496c5aff8f76 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png
index ed936d605edf..e371412824cc 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png
index 6d0c742ea254..13a0141fafc9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png
index 97a33dbe6757..bc6344a0eb33 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png
index 967cac09bee5..3a1bc962a895 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png
index a53de2324e3f..12f5b99ab673 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png
index 7001875be52f..31762a27ebfb 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png
index 05be4ba7fcef..c4376a27a923 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
index bd402afd2ca3..569142762e6c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
index 16989f9f4b12..2464d9e25075 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
index 6cd6d4c6d681..ffe90bc7066f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
index 1b418f82094c..823b3fa37a6e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
index 8081290245c1..1ac455cdec58 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
index 438c7d1fd070..7a38b12349cc 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
index 6435b673b1fa..2eb6246e0c3c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
index bb19dd3287f2..0ce5ec3dd020 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
index 1351a72c0348..6bf24123ebc8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
index fbc645c6ade6..791de4d460af 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
index 584d0ba44b11..0712aa6e86d8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
index 513890b6cb04..2886e55cdc29 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png
index 140639951ff6..a290cf085013 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png
index 3106dc6e36c1..09314e973ac7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png
index 41898c51fadf..90de93482428 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png
index 7dc95c6b7cf8..cdcac615dbbe 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png
index b81ff914e038..570a9b5fa34d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png
index b5213ee44861..68f3075b3ec5 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png
index d0f3e05c54ae..07b03fa75ca5 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png
index b0d9e8bd57d0..9dff62d266e8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png
index 4ced31943625..f855c1cf758d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png
index 98a49ade9947..119ce32231e7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png
index f1bd2122e024..64d4e602f90d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
index 6fd5ee681568..8a3d90c63a86 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
index b3d700996878..45dda51c63f6 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
index ead3e0ccfb7e..18e019cf8c1d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
index bab05a5b3bc1..cb8ed3ac61e7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
index dcab42705f1b..ab4ad05d1307 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
index d763537d4a4c..956b6c1822ac 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png
index a79f1608ac56..57675a2b8d85 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png
index 0d18c9a13391..eec039060888 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png
index 9cc2883b6791..900867a2c4ff 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png
index f063167bb191..253bdacc39f9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png
index 57b0b207b3b9..b50576ca8e07 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png
index b5ba6ce29bc2..d69a1711e745 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png
index ba9b6b36ba4b..47df06f7658f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png
index afd259c17c56..99184f0c19d9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png
index 6c3851cb58e3..4a2ac51d92fb 100644
--- a/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
index dd6651e999b9..9b7c5d61c3a2 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png
index d1a1d4cd3cb7..ea2918ffaa0d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png
index 270a4b68589b..906c81803011 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png
index 02290b78fa5c..c855fa599d7c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png
index cf4540af5689..cafa16fdf79b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png
index 0e70a88bc1d7..400c2ca2cf9e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png
index 4d0f2e468810..1aa0d82f9933 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png
index 8bb5b806c9b3..ac0bca1e55bc 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png
index 15ed5f2388b7..2e76eee89e2c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png
index 31d84fb9a029..8d54b97b443e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png
index 033d413e1201..784c4e70cbce 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png
index 6599c56f7f32..6bc543c3d619 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png
index 62ecbf87107b..ba449acc3cc3 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png
index f81983092395..13399f4622a1 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png
index 0d2c11d5b110..e2a95ef3dea0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png
index e96cb7463ed3..4c8ac28eedff 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png
index 783ae63e42f7..b3b9f522b85f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png
index 4b800f1ab85e..c4f0d78dfe2a 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png
index da0b81e7b487..3034a47a3729 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
index 76323a393375..5287c0f268ed 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
index 6413129b8d9a..d8a5ee8611e9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
index 800feb507e00..11737ee3dd4f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
index 60f34f8b9821..842faacd6c9a 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
index b5a03c51e304..0548dd3dad78 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
index 1e642ba5b0af..be79e0db8a58 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
index 0432a00cde23..ee43332d3242 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
index 2b845c6866e5..4e38c5d7b1fc 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
index e6adbcdb1957..6c08aa9046cd 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
index 7d1ac1e08854..2e7c46dedd2c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
index 28dcb63b2857..57f48fbf9e73 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
index bf92415e73ec..f751a31797e3 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png
index 39be951db25f..926b081fd51b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png
index a321f9979aa5..4498bedb6a82 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png
index 3b628a8be314..60b00a8a7a51 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png
index 1642486b8e70..8e9be2714ecf 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png
index a7b200cbc51c..014d83850a04 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png
index f2955361ce7e..175508857e85 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png
index 6c87397ff2c1..44e790537f12 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png
index a97e3aa08136..bfc17ddf8231 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png
index e161245798cf..e39d7d70b8ae 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png
index 5296baf4f9f3..466d3b5e2993 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png
index c1d44175f777..f61c058a3903 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
index d106a54a8d52..9d95f172b43b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
index 3f385c5cda6e..e68d57dd91a8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
index d5c47af06c82..4ac361d9682b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
index 0ea6312727fc..5e7ecdcd7d56 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
index 139cc4f6d414..462fad4789ff 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
index 011bd4356a92..d284c021a88c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png
index d7da48635c31..1570dd245e93 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png
index 276cde5b4a27..80a7a4a7e6cf 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png
index 9a7496c1c543..9db1a8483f2b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png
index c3f6f9c64f05..f9720f245204 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png
index f603753efce4..8567d11e4fce 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png
index 3a4a8fb88bc0..5ee6d07974c4 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png
index 21fb6c5b29e0..b38f7eb2eef4 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png
index 8c6ab9309463..ec6e8050b45d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png
index 9848f65e11ef..9a79c54c935a 100644
--- a/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
index b42b713cdcc8..0f83f7a71bf0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png
index db5cf1ee953d..511923c68f4b 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png
index aa0a675b573f..61fa30009d60 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png
index 6f9c4dfaad93..daefb7c43dbe 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png
index 0693213d0b27..bc8c467db8b2 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png
index b2d90f8b5130..a16c979dcf0e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png
index a21b1ce8fa8d..4778dc1632a3 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png
index 2f6d19f54c95..81693b63c61a 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png
index 8950439b1e77..e81bb8df878d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png
index 255ae10eaec7..9834f5ac23ac 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png
index afb58eb53113..b314f8b15c32 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png
index 9e06eb8a4bd9..59de3f250fc0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png
index ebf3d18cfa4b..91397edf9a4e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png
index 528e6ffe49ce..268fea4d872d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png
index 46de2acd948a..15ee476e89c0 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png
index 89b5f48898e6..4dead31d09c6 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png
index b80e5aea9c8d..8b4563f122db 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png
index ad51789bda87..29843947a20f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png
index 184420840270..4b904b4df362 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png
index bf45cff7a03b..31af3c2f7aa9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png
index 3102e072026a..4f5fa7073179 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png
index 85bc70f76740..e7eb85e51276 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png
index afc7295c1558..79038f7317a9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png
index 9efae5f72275..c554b23e63b5 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png
index 3be3fa4c63d3..e5c0780f07c9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png
index b8d7d80a4340..de934317496e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png
index bad3f5fca90a..9b01f30d729c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png
index e2459dc1bc36..a44d3a274959 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png
index 4dd84d99c57e..a4a93e302826 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png
index 34e018fe40cc..4f6f1bace029 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png
index a84771b47a4a..bc135c345a69 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png
index a343c50d456a..1744f6509175 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png
index 8a7991771d9a..6270e515f5ea 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png
index 643a122fb7d7..b47624fb9918 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png
index 83832eb64e0f..9fd562d9ab91 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png
index b5041212d884..42630a2421f2 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png
index 72d8f420aeda..1777ce73e1f7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png
index 8945f428267b..d35d546ab335 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png
index 1d4b788a6999..324ec32cfcc4 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png
index 889e48f498e6..54f3ae7c388d 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png
index 4810d47be147..290dafaf7340 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png
index b6121eb4c8d5..620da770d95e 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
index dc0f36134960..4a5e70180317 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
index f0a98eb0ddda..9a089498d680 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
index 10df40e091c1..314f422316d8 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
index 22410f1180c7..4e0a48a339f6 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
index f7fe0bef782a..4eeae1dac53f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
index 2555d6599382..1a6f1ef2db18 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png
index 317e89f8b295..95532419b0f9 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png
index fb1d2358ab1e..4d70eb3580c6 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png
index 08b2ec7a94e3..bfa3ad78366c 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png
index a7fe3f307c05..f7e78d072887 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png
index 3eb6fc5f4d80..fc903857216f 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png
index ca10b4e46387..931905e33969 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png
index a88aa5495edc..f1fa45bbe947 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png
index 0174b9803ee6..0dd11a2af301 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png
index fa114d489672..20991eb3bcea 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_normal.9.png b/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_normal.9.png
new file mode 100644
index 000000000000..eb4426280599
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_pressed.9.png b/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_pressed.9.png
new file mode 100644
index 000000000000..887e006dd1ea
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/alert_bar_background_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/battery_low_battery.png b/packages/SystemUI/res/drawable-xhdpi/battery_low_battery.png
new file mode 100644
index 000000000000..f3c0fca1c3d9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/battery_low_battery.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal.9.png
new file mode 100644
index 000000000000..5e601d2437a1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable.9.png
new file mode 100644
index 000000000000..ed92cd0c6cd0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png
new file mode 100644
index 000000000000..f77dbfb32cbf
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_normal_disable_focused.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_default_small_pressed.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_pressed.9.png
new file mode 100644
index 000000000000..e34107b5dd1a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_default_small_selected.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_selected.9.png
new file mode 100644
index 000000000000..8f701778dfcc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_default_small_selected.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/global_screenshot_background.9.png b/packages/SystemUI/res/drawable-xhdpi/global_screenshot_background.9.png
new file mode 100644
index 000000000000..db116b125046
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/global_screenshot_background.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/hd_off.png b/packages/SystemUI/res/drawable-xhdpi/hd_off.png
new file mode 100644
index 000000000000..7f5bd885568a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/hd_off.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/hd_on.png b/packages/SystemUI/res/drawable-xhdpi/hd_on.png
new file mode 100644
index 000000000000..55305ce40d9c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/hd_on.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_launcher_settings.png b/packages/SystemUI/res/drawable-xhdpi/ic_launcher_settings.png
new file mode 100644
index 000000000000..b6317797d946
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_launcher_settings.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notification_dnd.png b/packages/SystemUI/res/drawable-xhdpi/ic_notification_dnd.png
new file mode 100644
index 000000000000..0e926ab628c0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notification_dnd.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png b/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png
new file mode 100644
index 000000000000..8758b02fd664
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
index 16c5ca1a179a..d85399324c6a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png
index 0019a329c277..88ef1b9fcc46 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
index c13abf06a7bf..34bfaf72cee2 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
index 16ea9f6aa41c..0b41317e4484 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
index 1f76128cc354..234d434cba0c 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default.png
index dd98b0b6ecf1..2d77fb1f5b4b 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_ime_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
index b7f6c118156c..5c9c0e5f6fda 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
index a5d3c6a29fbc..4db9e9d8d3e3 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_menu_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
index ad26f6c73e9c..09eeb7d37f11 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
index 39fc8272224d..874eaf54f75c 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_recent_land.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/pocket_drag_pattern.png b/packages/SystemUI/res/drawable-xhdpi/pocket_drag_pattern.png
new file mode 100644
index 000000000000..34431f4eb88c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/pocket_drag_pattern.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/scrubber_control_disabled_holo.png b/packages/SystemUI/res/drawable-xhdpi/scrubber_control_disabled_holo.png
new file mode 100644
index 000000000000..551c6dc0ef54
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/scrubber_control_disabled_holo.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/scrubber_control_holo.png b/packages/SystemUI/res/drawable-xhdpi/scrubber_control_holo.png
new file mode 100644
index 000000000000..11f9c5127c10
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/scrubber_control_holo.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/scrubber_track_holo_dark.9.png b/packages/SystemUI/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
new file mode 100644
index 000000000000..b28dddf38863
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/scrubber_track_holo_dark.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png
index 192d4af8b011..19ad300d30e7 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_alarm.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png
index 80bd4d2b54f3..2b47449cf995 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png
index b16c738c177d..36c61e13ade3 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png
index eabe427545c0..00f3aca0f747 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png
index cc2de139c100..ae5d0ca0d228 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png
index 0b24eadb53d6..201a33c2c9a8 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png
index 3d122bbcbc6e..a0c9d3a65a0d 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png
index 096c724bfe08..65959734d187 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png
index 20482b21b9da..40fce24c9e3b 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
index 276e0bf209c3..eee1bded80fc 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
index d838103cd07c..c7fd7194fafa 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim100.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
index 896a58a73dfb..7bbbe2784e77 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim15.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
index 986093c7f099..88c65f84f514 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim28.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
index a80b024992a1..f89e7970b670 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim43.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
index 7a19040ed7f0..d58d5f6c12f9 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim57.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
index ee09d0bb283d..1ea3ed2b2b2f 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim71.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
index 09b9c9230656..7c8914926576 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_charge_anim85.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png
index 791b70a7eccf..524b31bea1a3 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
index 637367b2ee95..25eb75ec4d17 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_bluetooth_connected.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png
index 14f81761211c..bd31253073ce 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png
index 41694659c173..5ed365cb371d 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png
index 713f09bba030..5b22d20ce8f0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png
index 8c37831d94b0..b156b06e3730 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png
index 8e8770ae8487..f85047725b63 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png
index 4db2986ecd12..b261c1e35ea0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png
index 0f35728b6511..c0b1fea49ee5 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png
index c60a559f986d..cb2be9db6329 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png
index d262f5fa6e61..61821c77745f 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png
index 24ebdcdcdfb5..2594dd461dba 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png
index 88792d95fa35..6f2619ba27eb 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png
index 8be35c076d29..7f7c6f272f4a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png
index 62f288cd650e..24830b637e44 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png
index da933a383d50..2e6440242f6a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_no_sim.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png
index ad9940d184b1..a8e8e0f99ad0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png
index 7f03f6171ff9..a8e8e0f99ad0 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png
index 5ac554042e02..9c80517c14f7 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png
index 6edae807e85e..b144e18e835a 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png
index 0ff602eaf0d1..32762daf3a39 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png
index 33078c59def3..ae02c8fcb65c 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png
index 7f4bd1bdc5fb..f95f677f8f2e 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png
index a35d1a5593ad..23343e9bc110 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png
index e99e3c532cc3..d72d42bb6e31 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png
index 7844661689a6..3e5eaf45d3a1 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png
index 6b4fc4151f0d..bf8ca9f6f1be 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png
index 0e7946fa00ac..e9de257e2c26 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png
index 91aaa2040df5..7b4365409eab 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_flightmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
index 46ad7cec5781..2864ec3792e2 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
index 824564171a8d..0bb0c72ed3dd 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
index cb182b1c4256..f23dd60fac65 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync.png
new file mode 100644
index 000000000000..fdd640c4ebb0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png
new file mode 100644
index 000000000000..a1a0646437e2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_sync_error.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
index eb6679d238ab..b1c316834e09 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
index 8893512d716f..5e414706fefc 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
index 2efb2f8732c5..639842ba3209 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png
index a9174c8bf134..a834f799005c 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png
index 8045d21de35e..918503026c29 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png
index 0dc74ebadb2d..76f9f4a30869 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png
index 3b3e36e1e815..17889bb2a528 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png
index ff606a9bfc75..16b877b7d232 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png
index e4730e872f83..e197eb6f0383 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png
index 6db40fecd69c..b6cd98c23012 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png
index 515c1b08c8e4..a87cd664cef8 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png
index 9fae4d50bde3..625c61dc4393 100644
--- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_default.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_default.png
new file mode 100644
index 000000000000..3abbe2517a4e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_default.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_pressed.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_pressed.png
new file mode 100644
index 000000000000..041eac5780c7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_expand_pressed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/notification_row_bg.xml b/packages/SystemUI/res/drawable/notification_row_bg.xml
new file mode 100644
index 000000000000..dc626d18163c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/notification_row_bg.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+
+ <item android:state_pressed="true" android:drawable="@android:color/holo_blue_light" />
+ <item android:state_pressed="false" android:drawable="@drawable/notification_item_background_color" />
+</selector>
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 167d362f3840..c6966f9b64a1 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_item.xml
@@ -40,8 +40,8 @@
android:background="@drawable/recents_thumbnail_bg"
android:foreground="@drawable/recents_thumbnail_fg">
<ImageView android:id="@+id/app_thumbnail_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/status_bar_recents_thumbnail_width"
+ android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
</FrameLayout>
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index f84cc192bba3..2fe22ff53e28 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -69,6 +69,12 @@
</FrameLayout>
+ <include layout="@layout/status_bar_no_recent_apps"
+ android:id="@+id/recents_no_apps"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible" />
+
<View android:id="@+id/recents_dismiss_button"
android:layout_width="80px"
android:layout_height="@*android:dimen/status_bar_height"
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 de80a51adb52..586712f0cea9 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_item.xml
@@ -38,8 +38,8 @@
android:background="@drawable/recents_thumbnail_bg"
android:foreground="@drawable/recents_thumbnail_fg">
<ImageView android:id="@+id/app_thumbnail_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/status_bar_recents_thumbnail_width"
+ android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
</FrameLayout>
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
index ed9ea7a065cf..4d49077016bb 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
@@ -67,6 +67,12 @@
</FrameLayout>
+ <include layout="@layout/status_bar_no_recent_apps"
+ android:id="@+id/recents_no_apps"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible" />
+
<View android:id="@+id/recents_dismiss_button"
android:layout_width="80px"
android:layout_height="@*android:dimen/status_bar_height"
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 07088d54546a..cd8ccd56e782 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_item.xml
@@ -33,8 +33,8 @@
android:background="@drawable/recents_thumbnail_bg"
android:foreground="@drawable/recents_thumbnail_fg">
<ImageView android:id="@+id/app_thumbnail_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="@dimen/status_bar_recents_thumbnail_width"
+ android:layout_height="@dimen/status_bar_recents_thumbnail_height"
android:visibility="invisible"
/>
</FrameLayout>
diff --git a/packages/SystemUI/res/layout/battery_low.xml b/packages/SystemUI/res/layout/battery_low.xml
index 3b62fb0c78de..3061743e01c0 100644
--- a/packages/SystemUI/res/layout/battery_low.xml
+++ b/packages/SystemUI/res/layout/battery_low.xml
@@ -22,13 +22,13 @@
android:id="@+id/padding"
android:orientation="vertical"
android:gravity="center"
+ android:padding="16dp"
>
<TextView android:id="@+id/subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textSize="18dp"
- android:paddingLeft="19dp"
+ android:textSize="18sp"
android:textColor="#ffffffff"
android:gravity="left"
android:text="@string/battery_low_subtitle"
@@ -37,19 +37,16 @@
<TextView android:id="@+id/level_percent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textSize="18dp"
+ android:textSize="18sp"
android:textColor="#ffffffff"
android:gravity="left"
- android:paddingBottom="10px"
- android:paddingLeft="19dp"
+ android:paddingBottom="16dp"
/>
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingBottom="15px"
android:src="@drawable/battery_low_battery"
- android:paddingTop="10px"
/>
</LinearLayout>
diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml
index 41a30c79166a..eb644b3630b3 100644
--- a/packages/SystemUI/res/layout/signal_cluster_view.xml
+++ b/packages/SystemUI/res/layout/signal_cluster_view.xml
@@ -45,6 +45,12 @@
android:layout_gravity="center|bottom"
/>
</FrameLayout>
+ <View
+ android:layout_height="6dp"
+ android:layout_width="6dp"
+ android:visibility="gone"
+ android:id="@+id/spacer"
+ />
<FrameLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml b/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml
new file mode 100644
index 000000000000..47ffb83d07ef
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_no_recent_apps.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/* apps/common/assets/default/default/skins/StatusBar.xml
+**
+** 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.
+*/
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textSize="24dp"
+ android:textColor="#ffffffff"
+ android:text="@string/status_bar_no_recent_apps"
+ android:gravity="center_horizontal"
+ android:layout_gravity="center"
+ />
+</FrameLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
index ff8687838cf3..3220e62d3075 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_row.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml
@@ -23,6 +23,7 @@
android:layout_alignParentLeft="true"
android:scaleType="center"
android:clickable="true"
+ android:background="@*android:drawable/notify_panel_notification_icon_bg_tile"
/>
<com.android.systemui.statusbar.LatestItemView android:id="@+id/content"
@@ -33,14 +34,14 @@
android:layout_alignParentRight="true"
android:focusable="true"
android:clickable="true"
- android:background="@drawable/notification_item_background_color"
+ android:background="@drawable/notification_row_bg"
/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/notification_divider_height"
android:layout_alignParentBottom="true"
- android:background="@drawable/status_bar_notification_row_background_color"
+ android:background="@drawable/notification_item_background_color"
/>
</RelativeLayout>
diff --git a/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml b/packages/SystemUI/res/values-af-large/strings.xml
index 14a10f286cdb..8f9e0c570577 100644
--- a/packages/SystemUI/res/values-zh-rTW-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-af-large/strings.xml
@@ -19,11 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="status_bar_clear_all_button" msgid="4722520806446512408">"全部清除"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"沒有網路連線"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi 已連線"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"正在搜尋 GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPS 已定位"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"關閉通知"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"輕觸這裡即可重新開啟通知。"</string>
+ <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Vee alles uit"</string>
+ <string name="notifications_off_title" msgid="1860117696034775851">"Kennisgewings af"</string>
+ <string name="notifications_off_text" msgid="1439152806320786912">"Tik hier om kennisgewings weer aan te skakel."</string>
</resources>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index e1318e41d98a..fb0c3554be29 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -25,14 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Wys kennisgewings"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwyder uit lys"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Program Info"</string>
- <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
- <skip />
- <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
- <skip />
- <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
- <skip />
- <!-- no translation found for battery_low_title (7923774589611311406) -->
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
<skip />
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen kennisgewings"</string>
+ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Voortdurend"</string>
+ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Kennisgewings"</string>
+ <string name="battery_low_title" msgid="7923774589611311406">"Koppel asseblief herlaaier"</string>
<string name="battery_low_subtitle" msgid="1752040062087829196">"Die battery raak pap."</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> oor"</string>
<string name="invalid_charger" msgid="4549105996740522523">"USB-laaiery nie ondersteun nie."\n"Gebruik net die laaier wat verskaf is."</string>
@@ -40,8 +38,7 @@
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Instellings"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"Vliegtuigmodus"</string>
- <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
- <skip />
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Outodraai skerm"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMP"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"OUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Kennisgewings"</string>
@@ -49,155 +46,83 @@
<string name="recent_tasks_empty" msgid="1905484479067697884">"Geen onlangse programme nie."</string>
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Apps"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-verbind"</string>
- <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
- <skip />
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
- <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
- <skip />
- <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
- <skip />
- <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
- <skip />
- <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
- <skip />
- <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
- <skip />
- <!-- no translation found for title_usb_accessory (4966265263465181372) -->
- <skip />
- <!-- no translation found for label_view (6304565553218192990) -->
- <skip />
- <!-- no translation found for always_use_device (1450287437017315906) -->
- <skip />
- <!-- no translation found for always_use_accessory (1210954576979621596) -->
- <skip />
- <!-- no translation found for compat_mode_on (6623839244840638213) -->
- <skip />
- <!-- no translation found for compat_mode_off (4434467572461327898) -->
- <skip />
- <!-- no translation found for compat_mode_help_header (7020175705401506719) -->
- <skip />
- <!-- no translation found for compat_mode_help_body (4946726776359270040) -->
- <skip />
- <!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
- <skip />
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
- <!-- no translation found for usb_preference_title (6551050377388882787) -->
- <skip />
- <!-- no translation found for use_mtp_button_title (4333504413563023626) -->
- <skip />
- <!-- no translation found for use_ptp_button_title (7517127540301625751) -->
- <skip />
- <!-- no translation found for installer_cd_button_title (8485631662288445893) -->
- <skip />
- <!-- no translation found for accessibility_back (567011538994429120) -->
- <skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
- <skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
- <skip />
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Stel invoermetodes op"</string>
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Gebruik fisiese sleutelbord"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"Laat die program <xliff:g id="APPLICATION">%1$s</xliff:g> toe om die USB-toestel te gebruik?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Laat die program <xliff:g id="APPLICATION">%1$s</xliff:g> toe om die USB-toebehoorsel te gebruik?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Maak <xliff:g id="ACTIVITY">%1$s</xliff:g> oop wanneer hierdie USB-toestel gekoppel is?"</string>
+ <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Maak <xliff:g id="ACTIVITY">%1$s</xliff:g> oop wanneer hierdie USB-toebehoorsel gekoppel is?"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"Geen geïnstalleerde programme werk met hierdie USB-toebehoorsel nie. Kom meer te wete oor hierdie toebehoorsel by <xliff:g id="URL">%1$s</xliff:g>"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"USB-toebehoorsel"</string>
+ <string name="label_view" msgid="6304565553218192990">"Sien"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"Gebruik by verstek vir hierdie USB-toestel"</string>
+ <string name="always_use_accessory" msgid="1210954576979621596">"Gebruik by verstek vir hierdie USB-toebehoorsel"</string>
+ <string name="compat_mode_on" msgid="6623839244840638213">"Zoem om skerm te vul"</string>
+ <string name="compat_mode_off" msgid="4434467572461327898">"Strek om skerm te vul"</string>
+ <string name="compat_mode_help_header" msgid="7020175705401506719">"Versoenbaarheid-zoem"</string>
+ <string name="compat_mode_help_body" msgid="4946726776359270040">"As \'n program vir \'n kleiner skerm ontwerp is, sal \'n zoemkontrole naby die horlosie verskyn"</string>
+ <string name="screenshot_saving_toast" msgid="8592630119048713208">"Skermkiekie in galery gestoor"</string>
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Kon nie skermkiekie stoor nie. Eksterne geheue kan dalk in gebruik wees."</string>
+ <string name="usb_preference_title" msgid="6551050377388882787">"USB-lêeroordrag-opsies"</string>
+ <string name="use_mtp_button_title" msgid="4333504413563023626">"Heg as \'n mediaspeler (MTP)"</string>
+ <string name="use_ptp_button_title" msgid="7517127540301625751">"Heg as \'n kamera (PTP)"</string>
+ <string name="installer_cd_button_title" msgid="8485631662288445893">"Installeer Android-lêeroordragprogram vir Mac"</string>
+ <string name="accessibility_back" msgid="567011538994429120">"Terug"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Tuis"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Kieslys"</string>
<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) -->
- <skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
- <skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
- <skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
- <skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
- <skip />
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knoppie vir wissel van invoermetode."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Versoenbaarheid-zoem se knoppie."</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoem kleiner na groter skerm."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth gekoppel."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth ontkoppel."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Geen battery nie."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery, een staaf."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery, twee stawe."</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery, drie stawe."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery vol."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Geen foon nie."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Foon, een staaf."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Foon, twee stawe."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Foon, drie stawe."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Foonsein is vol."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Geen data nie."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data, een staaf."</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data, twee stawe."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data, drie stawe."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Datasein vol."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Geen Wi-Fi nie."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Wi-Fi, een staaf."</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Wi-Fi, twee stawe."</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Wi-Fi, drie stawe."</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi-sein vol."</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_no_sim" msgid="8274017118472455155">"Geen SIM nie."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-verbinding."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> persent."</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Instellingsknoppie."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Kennisgewingsknoppie."</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Verwyder kennisgewing."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS geaktiveer."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS soek ligging."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter geaktiveer."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Luitoestel-vibreer."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Luitoestel stil."</string>
<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) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Geen internetverbinding nie"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi gekoppel"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Soek vir GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Ligging deur GPS gestel"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml b/packages/SystemUI/res/values-am-large/strings.xml
index 207ebe464dc0..b953730725a1 100644
--- a/packages/SystemUI/res/values-zh-rCN-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-am-large/strings.xml
@@ -19,11 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="status_bar_clear_all_button" msgid="4722520806446512408">"全部清除"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"未连接至互联网"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi 已连接"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"正在搜索 GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPS 设置的位置"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"通知已关闭"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"点按此处可以重新打开通知。"</string>
+ <string name="status_bar_clear_all_button" msgid="4661583896803349732">"ሁሉንም አጥራ"</string>
+ <string name="notifications_off_title" msgid="1860117696034775851">"ማሳወቂያዎች ጠፍተዋል"</string>
+ <string name="notifications_off_text" msgid="1439152806320786912">"ማሳወቂያን መልሶ ለማብራ እዚህ ሁለቴ ንካ"</string>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 47cb166eadbe..ed4cb9c6bd6f 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -25,14 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"ማሳወቂያዎች አሳይ"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ከዝርዝር አስወግድ"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"የትግበራ መረጃ"</string>
- <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
- <skip />
- <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
- <skip />
- <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
- <skip />
- <!-- no translation found for battery_low_title (7923774589611311406) -->
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
<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>
+ <string name="battery_low_title" msgid="7923774589611311406">"እባክዎ ኃይልመሙያ ያያይዙ"</string>
<string name="battery_low_subtitle" msgid="1752040062087829196">"ባትሪው እያነሰ ነው።"</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> ቀሪ"</string>
<string name="invalid_charger" msgid="4549105996740522523">"USB ኃይል መሙያ አይታገዝም።"\n" የቀረበውን ኃይል መሙያ ብቻ ተጠቀም።"</string>
@@ -40,8 +38,7 @@
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ቅንብሮች"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"የአውሮፕላን ሁነታ"</string>
- <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
- <skip />
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ማያ በራስ ሰር አሽከርክር"</string>
<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>
@@ -49,155 +46,83 @@
<string name="recent_tasks_empty" msgid="1905484479067697884">"ምንም የቅርብ ጊዜ ትግበራዎች የሉም።"</string>
<string name="recent_tasks_app_label" msgid="3796483981246752469">"ትግበራዎች"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"ብሉቱዝ አያይዝ"</string>
- <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
- <skip />
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
- <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
- <skip />
- <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
- <skip />
- <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
- <skip />
- <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
- <skip />
- <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
- <skip />
- <!-- no translation found for title_usb_accessory (4966265263465181372) -->
- <skip />
- <!-- no translation found for label_view (6304565553218192990) -->
- <skip />
- <!-- no translation found for always_use_device (1450287437017315906) -->
- <skip />
- <!-- no translation found for always_use_accessory (1210954576979621596) -->
- <skip />
- <!-- no translation found for compat_mode_on (6623839244840638213) -->
- <skip />
- <!-- no translation found for compat_mode_off (4434467572461327898) -->
- <skip />
- <!-- no translation found for compat_mode_help_header (7020175705401506719) -->
- <skip />
- <!-- no translation found for compat_mode_help_body (4946726776359270040) -->
- <skip />
- <!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
- <skip />
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
- <!-- no translation found for usb_preference_title (6551050377388882787) -->
- <skip />
- <!-- no translation found for use_mtp_button_title (4333504413563023626) -->
- <skip />
- <!-- no translation found for use_ptp_button_title (7517127540301625751) -->
- <skip />
- <!-- no translation found for installer_cd_button_title (8485631662288445893) -->
- <skip />
- <!-- no translation found for accessibility_back (567011538994429120) -->
- <skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
- <skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
- <skip />
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"ግቤት ሜተዶችንአዋቀር"</string>
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"የቁልፍ ሰሌዳ ተጠቀም"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"<xliff:g id="APPLICATION">%1$s</xliff:g> ትግበራ የUSB መሣሪያለመድረስ ይፈቅዳል?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"<xliff:g id="APPLICATION">%1$s</xliff:g> ትግበራ የUSB ተቀጥላለመድረስ ይፈቅዳል?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"የዚህ USB ተቀጥላ ሲያያዝ <xliff:g id="ACTIVITY">%1$s</xliff:g>ይከፈት?"</string>
+ <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"የዚህ USB ተቀጥላ ሲያያዝ <xliff:g id="ACTIVITY">%1$s</xliff:g> ይከፈት?"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"ምንም የተጫኑ ትግበራዎችከዚህ የUSB ተቀጥላ ጋር አይሰሩም። በ<xliff:g id="URL">%1$s</xliff:g> ስለዚህ ተቀጥላ የበለጠ ይረዱ።"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"የUSB ተቀጥላ"</string>
+ <string name="label_view" msgid="6304565553218192990">"ዕይታ"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"ለዚህ USB መሣሪያ በነባሪነት ተጠቀም"</string>
+ <string name="always_use_accessory" msgid="1210954576979621596">"ለዚህ USB ተቀጥላ በነባሪነት ተጠቀም"</string>
+ <string name="compat_mode_on" msgid="6623839244840638213">"ማያ እንዲሞላ አጉላ"</string>
+ <string name="compat_mode_off" msgid="4434467572461327898">"ማያ ለመሙለት ሳብ"</string>
+ <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>
+ <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">"ለMac የAndroid ፋይል ሰደዳ ትግበራ ጫን"</string>
+ <string name="accessibility_back" msgid="567011538994429120">"ተመለስ"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"መነሻ"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"ምናሌ"</string>
<string name="accessibility_recent" msgid="3027675523629738534">"የቅርብ ጊዜ ትግበራዎች"</string>
- <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
- <skip />
- <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
- <skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
- <skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
- <skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
- <skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
- <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_bluetooth_connected" msgid="2707027633242983370">"ብሉቱዝ ተያይዟል።"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ብሉቱዝ ተለያይቷል።"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"ምንም ባትሪ የለም።"</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ባትሪ አንድ አሞሌ።"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ባትሪ ሁለት አሞሌዎች።"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ባትሪ ሦስት አሞሌዎች።"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"ባትሪ ሙሉ ነው።"</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"ምንም ስልክ የለም።"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"የስልክ አንድ አሞሌ"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"የስልክ ሁለት አሞሌ"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"የስልክ ሦስት አሞሌ"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"የስልክ አመልካች ሙሉ ነው።"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"ምንም ውሂብ የለም።"</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"የውሂብ አንድ አሞሌ"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"የውሂብ ሁለት አሞሌዎች።"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"የውሂብ ሦስት አሞሌዎች።"</string>
+ <string name="accessibility_data_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_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_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_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>
<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) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <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-ar-xlarge/strings.xml b/packages/SystemUI/res/values-ar-xlarge/strings.xml
deleted file mode 100644
index d4fb8738fc1d..000000000000
--- a/packages/SystemUI/res/values-ar-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"محو الكل"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"لا اتصال بالإنترنت"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi متصل"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"جارٍ البحث عن GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"تم تعيين الموقع بواسطة GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"إيقاف التنبيهات"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"انقر هنا لإعادة تشغيل التنبيهات."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 9b8051901286..e0e464390ae0 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"إظهار التنبيهات"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"إزالة من القائمة"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"معلومات التطبيق"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-bg-xlarge/strings.xml b/packages/SystemUI/res/values-bg-xlarge/strings.xml
deleted file mode 100644
index 4e730aefac24..000000000000
--- a/packages/SystemUI/res/values-bg-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Изчистване"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Няма връзка с интернет"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: има връзка"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Търси се GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Местоположението е зададено от GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Известията са изключени"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Докоснете тук, за да включите отново известията."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 5088741908d5..b0172058aa84 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -23,8 +23,10 @@
<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>
- <!-- outdated translation 6561944127804037619 --> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Премахване"</string>
- <!-- outdated translation 4906947311448880529 --> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Инспектиране"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Премахване от списъка"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информация за приложението"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-ca-xlarge/strings.xml b/packages/SystemUI/res/values-ca-xlarge/strings.xml
deleted file mode 100644
index 9fc74d0ca1e9..000000000000
--- a/packages/SystemUI/res/values-ca-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Esborra-ho"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"No connexió Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: connectat"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"S\'està cercant un GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"S\'ha establert la ubicació per GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificacions desactivades"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Pica aquí per tornar a activar les notificacions."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index fe2e3e6e4402..c0f9f17bc6fa 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notificacions"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Elimina de la llista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-cs-xlarge/strings.xml b/packages/SystemUI/res/values-cs-xlarge/strings.xml
deleted file mode 100644
index 05b12482a299..000000000000
--- a/packages/SystemUI/res/values-cs-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Vymazat vše"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Žádné připojení"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: připojeno"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Vyhledávání satelitů GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Poloha nastavena pomocí GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Oznámení jsou vypnuta"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Chcete-li oznámení znovu zapnout, klepněte sem."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index a2902a5e2ff7..902140947809 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobrazit upozornění"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odebrat ze seznamu"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informace o aplikaci"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-da-xlarge/strings.xml b/packages/SystemUI/res/values-da-xlarge/strings.xml
deleted file mode 100644
index dd20e6458a1c..000000000000
--- a/packages/SystemUI/res/values-da-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Ryd alt"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Ingen internetforb."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi er forbundet"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Søger efter GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Placeringen er angivet ved hjælp af GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Meddelelser: Fra"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tryk her for at slå meddelelser til igen."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 3cb04716dd5e..ea434e194106 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis meddelelser"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Oplysninger om appen"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-de-xlarge/strings.xml b/packages/SystemUI/res/values-de-xlarge/strings.xml
deleted file mode 100644
index cc782dad36cf..000000000000
--- a/packages/SystemUI/res/values-de-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Alle löschen"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Keine Internetverbindung"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Mit WLAN verbunden"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Suche nach GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Standort durch GPS festgelegt"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Benachrichtigungen aus"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tippen Sie hier, um Benachrichtigungen wieder einzuschalten."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 66535f72e99a..372b90378b08 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Benachrichtigungen zeigen"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Aus Liste entfernen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-Info"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-el-xlarge/strings.xml b/packages/SystemUI/res/values-el-xlarge/strings.xml
deleted file mode 100644
index 4f7814a925b8..000000000000
--- a/packages/SystemUI/res/values-el-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Διαγ. όλων"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Χωρίς σύνδ. σε Διαδ."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: συνδέθηκε"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Αναζήτηση για GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Ρύθμιση τοποθεσίας με GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Ειδοποιήσεις ανενεργές"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Πατήστε εδώ για να ενεργοποιήσετε τις ειδοποιήσεις"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index b01866b9d74f..803f7d982340 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Εμφάνιση ειδοποιήσεων"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Κατάργηση από τη λίστα"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 86520a7cb516..a66ed40cf78d 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Show notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml b/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
deleted file mode 100644
index fa9b76242c6c..000000000000
--- a/packages/SystemUI/res/values-es-rUS-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Eliminar todos"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Sin conexión a Int."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"WiFi conectado"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Buscando GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"La ubicación se estableció por GPS."</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificaciones desactivadas"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Presiona aquí para volver a activar las notificaciones."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 70dab5d5b643..bf0686dce6e2 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-es-xlarge/strings.xml b/packages/SystemUI/res/values-es-xlarge/strings.xml
deleted file mode 100644
index a7588da5b9fa..000000000000
--- a/packages/SystemUI/res/values-es-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Borrar todo"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Sin conexión a Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Con conexión WiFi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Buscando GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Ubicación definida por GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificaciones desactivadas"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Toca aquí para volver a activar las notificaciones."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 4d2b16bc2d7e..870a1662e119 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificaciones"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-fa-xlarge/strings.xml b/packages/SystemUI/res/values-fa-xlarge/strings.xml
deleted file mode 100644
index a8e25430e697..000000000000
--- a/packages/SystemUI/res/values-fa-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"پاک کردن همه"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"اتصال اینترنت موجود نیست"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi متصل شد"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"جستجوی GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"مکان تنظیم شده توسط GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"اعلان ها خاموش"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"برای روشن کردن مجدد اعلان ها، اینجا را ضربه بزنید."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 00c2bf62b224..0224983dd27d 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"نمایش اعلان ها"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"حذف از لیست"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"اطلاعات برنامه"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-fi-xlarge/strings.xml b/packages/SystemUI/res/values-fi-xlarge/strings.xml
deleted file mode 100644
index 754c577a7e6d..000000000000
--- a/packages/SystemUI/res/values-fi-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Poista kaikki"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Ei internetyhteyttä"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wifi yhdistetty"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Haetaan GPS-yhteyttä"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Sijainti määritetty GPS:n avulla"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Ilmoitukset pois käytöstä"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Ota ilmoitukset uudelleen käyttöön napauttamalla tätä."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index d3684dffbe30..73c36ceaa61e 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Näytä ilmoitukset"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Poista luettelosta"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Sovelluksen tiedot"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-fr-xlarge/strings.xml b/packages/SystemUI/res/values-fr-xlarge/strings.xml
deleted file mode 100644
index 08f673d5d855..000000000000
--- a/packages/SystemUI/res/values-fr-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Tout effacer"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Aucune connexion Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Connecté au Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Recherche de GPS en cours"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Position définie par GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notifications désactivées"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Appuyez ici pour réactiver les notifications."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index a27959f0cf3f..b20c4be01a98 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afficher les notifications"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-hr-xlarge/strings.xml b/packages/SystemUI/res/values-hr-xlarge/strings.xml
deleted file mode 100644
index b6e15dc66862..000000000000
--- a/packages/SystemUI/res/values-hr-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Izbriši sve"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Nema int. veze"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: povezano"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Pretraživanje GPS-a"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Lokaciju utvrdio GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Obavijesti isključene"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Dotaknite ovdje da biste ponovo uključili obavijesti."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index e0ba8f2e1b91..9c99d28b55c7 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Prikaži obavijesti"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ukloni s popisa"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <skip />
<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>
diff --git a/packages/SystemUI/res/values-hu-xlarge/strings.xml b/packages/SystemUI/res/values-hu-xlarge/strings.xml
deleted file mode 100644
index fe2e5ee0f6dc..000000000000
--- a/packages/SystemUI/res/values-hu-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Össz.törl."</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Nincs internetkapcs."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi csatlakozva"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"GPS keresése"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"A GPS beállította a helyet"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Értesítések kikapcsolva"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Itt érintse meg az értesítések bekapcsolásához."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 3ec833e3b1c6..7bc1789e64f1 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -25,6 +25,8 @@
<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="6026395868129852968">"Eltávolítás a listából"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Alkalmazásinformáció"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-in-xlarge/strings.xml b/packages/SystemUI/res/values-in-xlarge/strings.xml
deleted file mode 100644
index a4ca3416a0ad..000000000000
--- a/packages/SystemUI/res/values-in-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Hapus semua"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Tidak ada sambungan internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi tersambung"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Menelusuri GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Lokasi yang disetel oleh GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Pemberitahuan mati"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Ketuk di sini untuk menghidupkan lagi pemberitahuan."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index d491d743097b..999ea1d82902 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tampilkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Hapus dari daftar"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info apl"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
@@ -37,7 +39,7 @@
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"Mode pesawat"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Putar layar secara otomatis"</string>
- <string name="status_bar_settings_mute_label" msgid="554682549917429396">"BISUKAN"</string>
+ <string name="status_bar_settings_mute_label" msgid="554682549917429396">"BUNGKAM"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
<string name="recent_tasks_title" msgid="3691764623638127888">"Terbaru"</string>
diff --git a/packages/SystemUI/res/values-it-xlarge/strings.xml b/packages/SystemUI/res/values-it-xlarge/strings.xml
deleted file mode 100644
index 24d88744938a..000000000000
--- a/packages/SystemUI/res/values-it-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Canc. tutto"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"No connessione Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: connesso"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Ricerca del GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Posizione stabilita dal GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notifiche disattivate"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tocca qui per riattivare le notifiche."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 5ad309f35f93..becfe01e8dc3 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostra notifiche"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Rimuovi dall\'elenco"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informazioni applicazione"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-iw-xlarge/strings.xml b/packages/SystemUI/res/values-iw-xlarge/strings.xml
deleted file mode 100644
index 97172b80261e..000000000000
--- a/packages/SystemUI/res/values-iw-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"נקה הכל"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"אין חיבור לאינטרנט"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi מחובר"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"מחפש GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"מיקום מוגדר על ידי GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"מצב התראות כבוי"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"הקש כאן כדי להפעיל מחדש את ההתראות."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index f9d01a12baf3..567f2b92bb9e 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"הצג התראות"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"הסר מהרשימה"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי יישום"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-ja-xlarge/strings.xml b/packages/SystemUI/res/values-ja-xlarge/strings.xml
deleted file mode 100644
index e67e0e1e3c76..000000000000
--- a/packages/SystemUI/res/values-ja-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"すべて消去"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"インターネット未接続"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi接続済み"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"GPSで検索中"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPSにより現在地が設定されました"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"通知OFF"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"通知を有効にするにはここをタップします。"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 1a6c433653a9..ffb0227242fc 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -23,8 +23,10 @@
<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>
- <!-- outdated translation 6561944127804037619 --> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"削除"</string>
- <!-- outdated translation 4906947311448880529 --> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"検査"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"リストから削除"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"アプリ情報"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-ko-xlarge/strings.xml b/packages/SystemUI/res/values-ko-xlarge/strings.xml
deleted file mode 100644
index e28ac63e9459..000000000000
--- a/packages/SystemUI/res/values-ko-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"모두 지우기"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"인터넷에 연결되지 않음"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi 연결됨"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"GPS 검색"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPS에서 설정한 위치"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"알림 사용 안함"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"알림을 다시 사용하려면 여기를 누르세요."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 305b4b2fc94f..417664d01ba9 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"알림 표시"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"목록에서 삭제"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"앱 정보"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-lt-xlarge/strings.xml b/packages/SystemUI/res/values-lt-xlarge/strings.xml
deleted file mode 100644
index 12e8bb349da0..000000000000
--- a/packages/SystemUI/res/values-lt-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Išv. viską"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Nėra interneto ryšio"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Prisijungta prie „Wi-Fi“"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Ieškoma GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPS nustatyta vieta"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Pranešimai išjungti"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Palieskite čia, kad vėl įjungtumėte pranešimus."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 1d60ada72f0b..aff4f0869338 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rodyti pranešimus"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Pašalinti iš sąrašo"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Programos informacija"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-lv-xlarge/strings.xml b/packages/SystemUI/res/values-lv-xlarge/strings.xml
deleted file mode 100644
index aecb4715e459..000000000000
--- a/packages/SystemUI/res/values-lv-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Notīr.visu"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Nav interneta sav."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Izv. sav. ar Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Notiek GPS meklēšana..."</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"GPS iestatītā atrašanās vieta"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Paziņojumi ir izslēgti."</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Pieskarieties šeit, lai vēlreiz ieslēgtu paziņojumus."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index add82b13869a..822639cf1255 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Rādīt paziņojumus"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Noņemšana no saraksta"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Lietotnes informācija"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index c885881a83e0..4bbae0136e49 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Tunjukkan pemberitahuan"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alih keluar dari senarai"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-nb-xlarge/strings.xml b/packages/SystemUI/res/values-nb-xlarge/strings.xml
deleted file mode 100644
index 717ee79f017e..000000000000
--- a/packages/SystemUI/res/values-nb-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Tøm alt"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Ingen Int.-tilkobl."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: tilkoblet"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Søker etter GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Posisjon angitt av GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Varslinger er slått av"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Trykk her for å slå på varslinger igjen."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 4db29ea5002d..e3c53b8b75ae 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Vis varslinger"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om app"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 6cf24a1a58f1..d598e6132048 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen weergeven"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwijderen uit lijst"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-info"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-pl-xlarge/strings.xml b/packages/SystemUI/res/values-pl-xlarge/strings.xml
deleted file mode 100644
index 9db1cab823ec..000000000000
--- a/packages/SystemUI/res/values-pl-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Wyczyść wszystko"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Brak połączenia internetowego"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: połączono"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Wyszukiwanie sygnału GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Lokalizacja ustawiona wg GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Powiadomienia wyłączone"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Dotknij tutaj, aby z powrotem włączyć powiadomienia."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index b7e11ad9b19c..a9bf53bc91d7 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaż powiadomienia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Usuń z listy"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacje o aplikacji"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml b/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml
deleted file mode 100644
index 7860208e3ae1..000000000000
--- a/packages/SystemUI/res/values-pt-rPT-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Limpar tudo"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Sem ligação internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi ligado"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"A procurar GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Localização definida por GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificações desativadas"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Toque aqui para voltar a ativar as notificações."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index c8ab40c03fbf..f2d0c2a5b08d 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações da aplicação"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-pt-xlarge/strings.xml b/packages/SystemUI/res/values-pt-xlarge/strings.xml
deleted file mode 100644
index 2a1786d7c460..000000000000
--- a/packages/SystemUI/res/values-pt-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Limpar tudo"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Sem conex. à inter."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi conectado"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Procurando GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Localização definida por GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificações desativadas"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Toque aqui para ativar novamente as notificações."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 2edfca144b58..c9ed8f2475c4 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Mostrar notificações"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remover da lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações do aplicativo"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index c3a49ea36056..bef7f2c6cb44 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -30,6 +30,8 @@
<skip />
<!-- no translation found for status_bar_recent_inspect_item_title (7793624864528818569) -->
<skip />
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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-xlarge/strings.xml b/packages/SystemUI/res/values-ro-xlarge/strings.xml
deleted file mode 100644
index 21fd0ad7ae4e..000000000000
--- a/packages/SystemUI/res/values-ro-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Şterg. tot"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Fără conex. internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi conectat"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Se caută dispozitivul GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Locaţie setată prin GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notificările sunt dezactivate"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Apăsaţi aici pentru a reactiva notificările."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 4b208c5845e3..33dc26c01db6 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -23,8 +23,10 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ştergeţi"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Nu deranjaţi"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Afişaţi notificări"</string>
- <!-- outdated translation 6561944127804037619 --> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi"</string>
- <!-- outdated translation 4906947311448880529 --> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Inspectaţi"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi din listă"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informaţii despre aplicaţie"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-ru-xlarge/strings.xml b/packages/SystemUI/res/values-ru-xlarge/strings.xml
deleted file mode 100644
index bc31fb1250b7..000000000000
--- a/packages/SystemUI/res/values-ru-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Удалить все"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Нет подключения"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi подкл."</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Выполняется поиск при помощи GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Местоположение установлено при помощи GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Показ уведомлений отключен"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Нажмите здесь, чтобы снова включить показ уведомлений."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index a3f5fb31d0b5..f1ede406cafb 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показать уведомления"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Удаление приложения из списка"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Сведения о приложении"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-sk-xlarge/strings.xml b/packages/SystemUI/res/values-sk-xlarge/strings.xml
deleted file mode 100644
index ee9e61301c61..000000000000
--- a/packages/SystemUI/res/values-sk-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Vymazať všetky"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Nepripoj. k Intern."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi: pripojené"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Hľadanie signálu GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Poloha určená pomocou GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Upozornenia sú vypnuté"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Klepnutím tu upozornenia znova povolíte."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 7716e9fcb993..ac0bcda86039 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Zobraziť upozornenia"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrániť zo zoznamu"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informácie o aplikácii"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-sl-xlarge/strings.xml b/packages/SystemUI/res/values-sl-xlarge/strings.xml
deleted file mode 100644
index 57ed9a722f52..000000000000
--- a/packages/SystemUI/res/values-sl-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Izbriši vse"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Brez inter. povez."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi – povezano"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Iskanje GPS-a"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Lokacija nastavljena z GPS-om"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Obvestila izklopljena"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tapnite tukaj, da spet vklopite obvestila."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index c4147303d7ed..1f8d0d2a88cf 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Pokaži obvestila"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrani s seznama"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Podatki o programu"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-sr-xlarge/strings.xml b/packages/SystemUI/res/values-sr-xlarge/strings.xml
deleted file mode 100644
index 95fbc2f08e3c..000000000000
--- a/packages/SystemUI/res/values-sr-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Обриши све"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Нема интернет везе"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi је повезан"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Тражи се GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Локацију је подесио GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Обавештења су искључена"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Додирните овде да бисте поново укључили обавештења."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 310aa78ebfe4..47f6884bfffe 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Приказуј упозорења"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Уклањање са листе"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информације о апликацији"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-sv-xlarge/strings.xml b/packages/SystemUI/res/values-sv-xlarge/strings.xml
deleted file mode 100644
index ce608c20e49f..000000000000
--- a/packages/SystemUI/res/values-sv-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Ta bort alla"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Ingen Internetansl."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi-ansluten"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Sökning efter GPS pågår"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Platsen har identifierats av GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Aviseringar inaktiverade"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Knacka lätt här om du vill aktivera aviseringar igen."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 573a62f928eb..dc1f56ba6fd3 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Visa aviseringar"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ta bort från listan"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-nl-xlarge/strings.xml b/packages/SystemUI/res/values-sw-large/strings.xml
index 7c84a7a01f3e..4bf6a23222a7 100644
--- a/packages/SystemUI/res/values-nl-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-sw-large/strings.xml
@@ -19,11 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="status_bar_clear_all_button" msgid="4722520806446512408">"Wissen"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Geen internetverb."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Verbonden via Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Zoeken naar GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Locatie bepaald met GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Meldingen uit"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tik hier om meldingen weer in te schakelen."</string>
+ <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Futa zote"</string>
+ <string name="notifications_off_title" msgid="1860117696034775851">"Arifa imezimwa"</string>
+ <string name="notifications_off_text" msgid="1439152806320786912">"Gonga hapa ili kuwasha tena arifa."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index b5a070ce7151..bb8e740ce623 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -25,14 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Onyesha arifa"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ondoa kwenye orodha"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Taarifa za programu-matumizi"</string>
- <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
- <skip />
- <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
- <skip />
- <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
- <skip />
- <!-- no translation found for battery_low_title (7923774589611311406) -->
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
<skip />
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Hakuna arifa"</string>
+ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Inaendelea"</string>
+ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Arifa"</string>
+ <string name="battery_low_title" msgid="7923774589611311406">"Tafadhali unganisha chaja"</string>
<string name="battery_low_subtitle" msgid="1752040062087829196">"Betri inaisha."</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> zimebakia"</string>
<string name="invalid_charger" msgid="4549105996740522523">"Chaji ya USB haihamiliwi."\n" Tumia chaka iliyopeanwa."</string>
@@ -40,8 +38,7 @@
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Mipangilio"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Mtandao-Hewa"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"Hali ya Ndege"</string>
- <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
- <skip />
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Zungusha otomatiki skrini"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"NYAMAZISHA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"KIOTOMATIKI"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Arifa"</string>
@@ -49,155 +46,83 @@
<string name="recent_tasks_empty" msgid="1905484479067697884">"Hakuna programu za hivi karibuni."</string>
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Programu"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth imefungwa"</string>
- <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
- <skip />
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
- <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
- <skip />
- <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
- <skip />
- <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
- <skip />
- <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
- <skip />
- <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
- <skip />
- <!-- no translation found for title_usb_accessory (4966265263465181372) -->
- <skip />
- <!-- no translation found for label_view (6304565553218192990) -->
- <skip />
- <!-- no translation found for always_use_device (1450287437017315906) -->
- <skip />
- <!-- no translation found for always_use_accessory (1210954576979621596) -->
- <skip />
- <!-- no translation found for compat_mode_on (6623839244840638213) -->
- <skip />
- <!-- no translation found for compat_mode_off (4434467572461327898) -->
- <skip />
- <!-- no translation found for compat_mode_help_header (7020175705401506719) -->
- <skip />
- <!-- no translation found for compat_mode_help_body (4946726776359270040) -->
- <skip />
- <!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
- <skip />
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
- <!-- no translation found for usb_preference_title (6551050377388882787) -->
- <skip />
- <!-- no translation found for use_mtp_button_title (4333504413563023626) -->
- <skip />
- <!-- no translation found for use_ptp_button_title (7517127540301625751) -->
- <skip />
- <!-- no translation found for installer_cd_button_title (8485631662288445893) -->
- <skip />
- <!-- no translation found for accessibility_back (567011538994429120) -->
- <skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
- <skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
- <skip />
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Sanidi mbinu za uingizaji"</string>
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Tumia kibodi halisi"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"Ruhusu programu <xliff:g id="APPLICATION">%1$s</xliff:g> ili kufikia kifaa cha USB?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Ruhusu programu <xliff:g id="APPLICATION">%1$s</xliff:g> ili kufikia kifuasi cha USB?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Je, ungetaka kufungua <xliff:g id="ACTIVITY">%1$s</xliff:g>wakati kifaa cha USB kimeunganishwa?"</string>
+ <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Je, ungetaka kufungua <xliff:g id="ACTIVITY">%1$s</xliff:g>wakati kifaa cha USB kimeunganishwa?"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"Hakuna programu zilizosakiniwa zinazofanya kazi na kifaa hiki cha USB. Jifunze zaidi kuhsu kifaa hiki kwenye <xliff:g id="URL">%1$s</xliff:g>"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"Kifaa cha Usb"</string>
+ <string name="label_view" msgid="6304565553218192990">"Ona"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"Kwa kifaa hiki cha USB tumia chaguo-msingi"</string>
+ <string name="always_use_accessory" msgid="1210954576979621596">"Tumia kama chaguo-msingi ya kifuasi hiki cha USB"</string>
+ <string name="compat_mode_on" msgid="6623839244840638213">"Kuza ili kujaza skrini"</string>
+ <string name="compat_mode_off" msgid="4434467572461327898">"Tanua ili kujaza skrini"</string>
+ <string name="compat_mode_help_header" msgid="7020175705401506719">"Kukuza kwa Utangamanifu"</string>
+ <string name="compat_mode_help_body" msgid="4946726776359270040">"Wakati programu ilibuniwa kwa skrini ndogo, kidhibiti cha kukuza kitaonekana kwa saa."</string>
+ <string name="screenshot_saving_toast" msgid="8592630119048713208">"Taswira za skrini zimehifadhiwa kwenye Kichanja"</string>
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Haikuweza kuhifadhi taswira za skrini. Hifadhi ya nje huenda inatumika."</string>
+ <string name="usb_preference_title" msgid="6551050377388882787">"Machaguo ya uhamisho wa faili la USB"</string>
+ <string name="use_mtp_button_title" msgid="4333504413563023626">"Angika kama kichezeshi cha midia (MTP)"</string>
+ <string name="use_ptp_button_title" msgid="7517127540301625751">"Angika kama kamera (PTP)"</string>
+ <string name="installer_cd_button_title" msgid="8485631662288445893">"Sakinisha programu ya Kuhamisha Faili ya Android ya Mac"</string>
+ <string name="accessibility_back" msgid="567011538994429120">"Nyuma"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Nyumbani"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
<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) -->
- <skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
- <skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
- <skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
- <skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
- <skip />
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Swichi kitufe cha mbinu ingizi."</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kichupo cha kukuza kwa utangamanifu"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kuza kidogo kwa skrini kubwa."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth imeunganishwa."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth imetenganishwa"</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Hakuna betri."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Pau moja ya betri."</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Pau mbili za betri"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Pau tatu za betri."</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Betri imejaa."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Hakuna simu"</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Mwambaa mmoja wa simu."</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Miambaa miwili ya simu"</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Miambaa mitatu ya simu."</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Ishara ya simu imejaa."</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Hakuna data."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Upapi mmoja wa habari"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Miamba miwili ya data."</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Fito tatu za habari."</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Ishara ya data imejaa."</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Hakuna Mtandao hewa"</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Mwambaa mmoja wa Mtandao hewa"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"Miambaa mbili ya Mtandao hewa"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"Miambaa tatu ya Mtandao hewa"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Ishara ya Mtandao hewa imejaa"</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">"Ukingo"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Hakuna SIM."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ufungaji wa Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modi ya ndege."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Asilimia <xliff:g id="NUMBER">%d</xliff:g> ya betri"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Mipangilio ya kitufe."</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Kitufe cha arifa"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Ondoa arifa"</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPRS imewezeshwa."</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPRS inamiliki."</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Kichapishaji cha Tele kimewezeshwa."</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Mtetemo wa mlio"</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mlio wa simu uko kimya."</string>
<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) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Hakuna muunganisho wa mtandao"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Mtandao-hewa umeunganishwa"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Inatafuta GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Mahali pamewekwa na GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values-th-xlarge/strings.xml b/packages/SystemUI/res/values-th-xlarge/strings.xml
deleted file mode 100644
index 824de38e4244..000000000000
--- a/packages/SystemUI/res/values-th-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"ล้างหมด"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"ไม่มีการเชื่อมต่ออินเทอร์เน็ต"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"เชื่อมต่อ Wi-Fi แล้ว"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"การค้นหาสำหรับ GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"ตำแหน่งที่กำหนดโดย GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"การแจ้งเตือนปิดอยู่"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"แตะที่นี่เพื่อเปิดการแจ้งเตือนอีกครั้ง"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 810e2b48691f..490760f4dfcf 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"แสดงการแจ้งเตือน"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ลบจากรายการ"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ข้อมูลแอปพลิเคชัน"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-tl-xlarge/strings.xml b/packages/SystemUI/res/values-tl-xlarge/strings.xml
deleted file mode 100644
index 582adbc56b46..000000000000
--- a/packages/SystemUI/res/values-tl-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"I-clear lahat"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Wala net connection"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Konektado ang WiFi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Naghahanap ng GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Lokasyon na itinatakda ng GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Naka-off ang mga notification"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Mag-tap dito upang i-on muli ang mga notification."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 0c09d10ad814..f1de297d83e0 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Magpakita ng notification"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alisin mula sa listahan"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Impormasyon ng app"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-tr-xlarge/strings.xml b/packages/SystemUI/res/values-tr-xlarge/strings.xml
deleted file mode 100644
index 6db515f2db47..000000000000
--- a/packages/SystemUI/res/values-tr-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Tümünü temizle"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"İnternet bağlnts yok"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Kablosuz bağlandı"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"GPS aranıyor"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Konum GPS ile belirlendi"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Bildirimler kapalı"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Bildirimleri tekrar açmak için buraya hafifçe vurun."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 42fbdb822736..4dae91192f40 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -23,8 +23,10 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Temizle"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Rahatsız etmeyin"</string>
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bildirimleri göster"</string>
- <!-- outdated translation 6561944127804037619 --> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Kaldır"</string>
- <!-- outdated translation 4906947311448880529 --> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Araştır"</string>
+ <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Listeden kaldır"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Uygulama bilgileri"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-uk-xlarge/strings.xml b/packages/SystemUI/res/values-uk-xlarge/strings.xml
deleted file mode 100644
index 81e50c094f3c..000000000000
--- a/packages/SystemUI/res/values-uk-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Очист. все"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Інтернет не під\'єдн."</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi під\'єднано"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Виконується пошук за допомогою GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Місцезнаходження встановлено за допомогою GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Сповіщення вимкнено"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Торкніться тут, щоб знову ввімкнути сповіщення."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index fbb51e2f9770..fc90f1348913 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Показувати сповіщення"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Видалити зі списку"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Інформація про програму"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-vi-xlarge/strings.xml b/packages/SystemUI/res/values-vi-xlarge/strings.xml
deleted file mode 100644
index 6382fae4d951..000000000000
--- a/packages/SystemUI/res/values-vi-xlarge/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * 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.
- * 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="status_bar_clear_all_button" msgid="4722520806446512408">"Xóa tất cả"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"Không có kết nối Internet"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Đã kết nối Wi-Fi"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Tìm kiếm GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Vị trí đặt bởi GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Tắt thông báo"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Chạm vào đây để bật lại thông báo."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 84a9c3c8d568..a4108ac9af44 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -25,6 +25,8 @@
<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="6026395868129852968">"Xóa khỏi danh sách"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Thông tin về ứng dụng"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 11b07ca5e6b9..b073ac2c616a 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"显示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"从列表中删除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"应用程序信息"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index b62b00f2729f..1b697902add4 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -25,6 +25,8 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"顯示通知"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string>
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
+ <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>
diff --git a/packages/SystemUI/res/values-en-rGB-xlarge/strings.xml b/packages/SystemUI/res/values-zu-large/strings.xml
index 68986f087865..2f8c252a04c8 100644
--- a/packages/SystemUI/res/values-en-rGB-xlarge/strings.xml
+++ b/packages/SystemUI/res/values-zu-large/strings.xml
@@ -19,11 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="status_bar_clear_all_button" msgid="4722520806446512408">"Clear all"</string>
- <string name="status_bar_settings_signal_meter_disconnected" msgid="4684094636492991496">"No Internet connection"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="1456658018593445677">"Wi-Fi connected"</string>
- <string name="gps_notification_searching_text" msgid="894185519046488403">"Searching for GPS"</string>
- <string name="gps_notification_found_text" msgid="5306445324124275852">"Location set by GPS"</string>
- <string name="notifications_off_title" msgid="2297252328026582111">"Notifications off"</string>
- <string name="notifications_off_text" msgid="3754847213329718358">"Tap here to turn notifications back on."</string>
+ <string name="status_bar_clear_all_button" msgid="4661583896803349732">"Sula konke"</string>
+ <string name="notifications_off_title" msgid="1860117696034775851">"Izaziso zivaliwe"</string>
+ <string name="notifications_off_text" msgid="1439152806320786912">"Thepha lana ukuvula futhi izaziso."</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 862c375e182f..24c0145ee26c 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -25,14 +25,12 @@
<string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Bonisa izaziso"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Susa ohlwini"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ulwazi lwensiza"</string>
- <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) -->
- <skip />
- <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) -->
- <skip />
- <!-- no translation found for status_bar_latest_events_title (6594767438577593172) -->
- <skip />
- <!-- no translation found for battery_low_title (7923774589611311406) -->
+ <!-- no translation found for status_bar_no_recent_apps (6576392951053994640) -->
<skip />
+ <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Azikho izaziso"</string>
+ <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Okuqhubekayo"</string>
+ <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Izaziso"</string>
+ <string name="battery_low_title" msgid="7923774589611311406">"Sicela uxhume ishaja"</string>
<string name="battery_low_subtitle" msgid="1752040062087829196">"Ibhetri iya ngokuphela."</string>
<string name="battery_low_percent_format" msgid="1077244949318261761">"okusele okungu-<xliff:g id="NUMBER">%d%%</xliff:g>"</string>
<string name="invalid_charger" msgid="4549105996740522523">"Ukushaja i-USB akusekelwe."\n"Sebenzisa kuphela ishaja enikeziwe."</string>
@@ -40,8 +38,7 @@
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Izilungiselelo"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"I-Wi-Fi"</string>
<string name="status_bar_settings_airplane" msgid="4879879698500955300">"Imodi yendiza"</string>
- <!-- no translation found for status_bar_settings_auto_rotation (3790482541357798421) -->
- <skip />
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ukuzulazula kweskrini okuzenzakalelayo"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"THULISA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"OKUZENZAKALELAYO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Izaziso"</string>
@@ -49,155 +46,83 @@
<string name="recent_tasks_empty" msgid="1905484479067697884">"Azikho izinhlelo zokusebenza zamanje."</string>
<string name="recent_tasks_app_label" msgid="3796483981246752469">"Izinhlelo zokusebenza"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Ukusebenzisa i-Bluetooth njengemodemu"</string>
- <!-- no translation found for status_bar_input_method_settings_configure_input_methods (737483394044014246) -->
- <skip />
- <!-- no translation found for status_bar_use_physical_keyboard (3695516942412442936) -->
- <skip />
- <!-- no translation found for usb_device_permission_prompt (3816016361969816903) -->
- <skip />
- <!-- no translation found for usb_accessory_permission_prompt (6888598803988889959) -->
- <skip />
- <!-- no translation found for usb_device_confirm_prompt (5161205258635253206) -->
- <skip />
- <!-- no translation found for usb_accessory_confirm_prompt (3808984931830229888) -->
- <skip />
- <!-- no translation found for usb_accessory_uri_prompt (6332150684964235705) -->
- <skip />
- <!-- no translation found for title_usb_accessory (4966265263465181372) -->
- <skip />
- <!-- no translation found for label_view (6304565553218192990) -->
- <skip />
- <!-- no translation found for always_use_device (1450287437017315906) -->
- <skip />
- <!-- no translation found for always_use_accessory (1210954576979621596) -->
- <skip />
- <!-- no translation found for compat_mode_on (6623839244840638213) -->
- <skip />
- <!-- no translation found for compat_mode_off (4434467572461327898) -->
- <skip />
- <!-- no translation found for compat_mode_help_header (7020175705401506719) -->
- <skip />
- <!-- no translation found for compat_mode_help_body (4946726776359270040) -->
- <skip />
- <!-- no translation found for screenshot_saving_toast (8592630119048713208) -->
- <skip />
- <!-- no translation found for screenshot_failed_toast (1990979819772906912) -->
- <skip />
- <!-- no translation found for usb_preference_title (6551050377388882787) -->
- <skip />
- <!-- no translation found for use_mtp_button_title (4333504413563023626) -->
- <skip />
- <!-- no translation found for use_ptp_button_title (7517127540301625751) -->
- <skip />
- <!-- no translation found for installer_cd_button_title (8485631662288445893) -->
- <skip />
- <!-- no translation found for accessibility_back (567011538994429120) -->
- <skip />
- <!-- no translation found for accessibility_home (8217216074895377641) -->
- <skip />
- <!-- no translation found for accessibility_menu (316839303324695949) -->
- <skip />
+ <string name="status_bar_input_method_settings_configure_input_methods" msgid="737483394044014246">"Misa izindlela zokufakwayo"</string>
+ <string name="status_bar_use_physical_keyboard" msgid="3695516942412442936">"Sebenzisa ikhibhodi ebangekayo"</string>
+ <string name="usb_device_permission_prompt" msgid="3816016361969816903">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> lufinyelele idivayisi ye-USB?"</string>
+ <string name="usb_accessory_permission_prompt" msgid="6888598803988889959">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuze ufinyelele izinto eziphuma ne-USB?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma ledivayisi ye-USB ixhunyiwe?"</string>
+ <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma le-accessory ye-USB ixhunyiwe"</string>
+ <string name="usb_accessory_uri_prompt" msgid="6332150684964235705">"Azikho izinhlelo zokusebenza zisebenze ngento ze-USB. Funda okwengeziwe ngalento<xliff:g id="URL">%1$s</xliff:g>"</string>
+ <string name="title_usb_accessory" msgid="4966265263465181372">"ama-accessory e-USB"</string>
+ <string name="label_view" msgid="6304565553218192990">"Buka"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"Sebenzisa ngokuzenzakalelayo yaledivayisi ye-USB"</string>
+ <string name="always_use_accessory" msgid="1210954576979621596">"Sebenzisa ngokuzenzakalelayo kule-accessory ye-USB"</string>
+ <string name="compat_mode_on" msgid="6623839244840638213">"Sondeza ukugcwalisa isikrini"</string>
+ <string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
+ <string name="compat_mode_help_header" msgid="7020175705401506719">"Ukuhambelana Kokusondeza"</string>
+ <string name="compat_mode_help_body" msgid="4946726776359270040">"Uma uhlelo lokusebenza lwenzelwe isikrini ezincane, isilawuli sokusondeza sizovela ngakuyiwashi."</string>
+ <string name="screenshot_saving_toast" msgid="8592630119048713208">"Isithombe-skrini silondiwe Kugalari"</string>
+ <string name="screenshot_failed_toast" msgid="1990979819772906912">"Ayikwazanga ukulondoloza isithombe-skrini. Ukugcina kwangaphandle kungenzeka kuyasetshenziswa."</string>
+ <string name="usb_preference_title" msgid="6551050377388882787">"Okukhethwa kokudluliswa kwefayela ye-USB"</string>
+ <string name="use_mtp_button_title" msgid="4333504413563023626">"Lengisa njengesidlali semediya (MTP)"</string>
+ <string name="use_ptp_button_title" msgid="7517127540301625751">"Lengisa ikhamera (PTP)"</string>
+ <string name="installer_cd_button_title" msgid="8485631662288445893">"Faka uhlelo lokusebenza Lokudluliswa Kwefayela ye-Android Ohlelweni lokhompyutha"</string>
+ <string name="accessibility_back" msgid="567011538994429120">"Emuva"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Ekhaya"</string>
+ <string name="accessibility_menu" msgid="316839303324695949">"Imenyu"</string>
<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) -->
- <skip />
- <!-- no translation found for accessibility_compatibility_zoom_example (4220687294564945780) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_connected (2707027633242983370) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_disconnected (7416648669976870175) -->
- <skip />
- <!-- no translation found for accessibility_no_battery (358343022352820946) -->
- <skip />
- <!-- no translation found for accessibility_battery_one_bar (7774887721891057523) -->
- <skip />
- <!-- no translation found for accessibility_battery_two_bars (8500650438735009973) -->
- <skip />
- <!-- no translation found for accessibility_battery_three_bars (2302983330865040446) -->
- <skip />
- <!-- no translation found for accessibility_battery_full (8909122401720158582) -->
- <skip />
- <!-- no translation found for accessibility_no_phone (4894708937052611281) -->
- <skip />
- <!-- no translation found for accessibility_phone_one_bar (687699278132664115) -->
- <skip />
- <!-- no translation found for accessibility_phone_two_bars (8384905382804815201) -->
- <skip />
- <!-- no translation found for accessibility_phone_three_bars (8521904843919971885) -->
- <skip />
- <!-- no translation found for accessibility_phone_signal_full (6471834868580757898) -->
- <skip />
- <!-- no translation found for accessibility_no_data (4791966295096867555) -->
- <skip />
- <!-- no translation found for accessibility_data_one_bar (1415625833238273628) -->
- <skip />
- <!-- no translation found for accessibility_data_two_bars (6166018492360432091) -->
- <skip />
- <!-- no translation found for accessibility_data_three_bars (9167670452395038520) -->
- <skip />
- <!-- no translation found for accessibility_data_signal_full (2708384608124519369) -->
- <skip />
- <!-- no translation found for accessibility_no_wifi (4017628918351949575) -->
- <skip />
- <!-- no translation found for accessibility_wifi_one_bar (1914343229091303434) -->
- <skip />
- <!-- no translation found for accessibility_wifi_two_bars (7869150535859760698) -->
- <skip />
- <!-- no translation found for accessibility_wifi_three_bars (2665319332961356254) -->
- <skip />
- <!-- no translation found for accessibility_wifi_signal_full (1275764416228473932) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_gprs (1606477224486747751) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3g (8628562305003568260) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_3.5g (8664845609981692001) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_4g (7741000750630089612) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_cdma (6132648193978823023) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_edge (4477457051631979278) -->
- <skip />
- <!-- no translation found for accessibility_data_connection_wifi (1127208787254436420) -->
- <skip />
- <!-- no translation found for accessibility_no_sim (8274017118472455155) -->
- <skip />
- <!-- no translation found for accessibility_bluetooth_tether (4102784498140271969) -->
- <skip />
- <!-- no translation found for accessibility_airplane_mode (834748999790763092) -->
- <skip />
- <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
- <skip />
- <!-- no translation found for accessibility_settings_button (7913780116850379698) -->
- <skip />
- <!-- no translation found for accessibility_notifications_button (2933903195211483438) -->
- <skip />
- <!-- no translation found for accessibility_remove_notification (4883990503785778699) -->
- <skip />
- <!-- no translation found for accessibility_gps_enabled (3511469499240123019) -->
- <skip />
- <!-- no translation found for accessibility_gps_acquiring (8959333351058967158) -->
- <skip />
- <!-- no translation found for accessibility_tty_enabled (4613200365379426561) -->
- <skip />
- <!-- no translation found for accessibility_ringer_vibrate (666585363364155055) -->
- <skip />
- <!-- no translation found for accessibility_ringer_silent (9061243307939135383) -->
- <skip />
+ <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vula indlela yokungena yenkinobho"</string>
+ <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Inkinobho evumelekile yokusondeza"</string>
+ <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Sondeza kancane esikrinini esikhudlwana"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ixhunyiwe"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"i-Bluetooth ayixhunywanga."</string>
+ <string name="accessibility_no_battery" msgid="358343022352820946">"Ayikho ibhetri."</string>
+ <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Ibha eyodwa yebhetri"</string>
+ <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Amabha amabili ebhetri"</string>
+ <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Amabha amathathu ebhetri"</string>
+ <string name="accessibility_battery_full" msgid="8909122401720158582">"Ibhetri igcwele."</string>
+ <string name="accessibility_no_phone" msgid="4894708937052611281">"Ayikho ifoni."</string>
+ <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Ibha eyodwa yefoni"</string>
+ <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Amabha amabilil efoni."</string>
+ <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Amabha amathathu efoni"</string>
+ <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Isiginali yefoni igcwele"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"Ayikho idatha."</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Idatha enye yebha"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Amabha amabili edatha"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Amabha amathathu edatha"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Igcwele i-signal yedatha"</string>
+ <string name="accessibility_no_wifi" msgid="4017628918351949575">"Ayikho i-WiFi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="1914343229091303434">"Ibha eyodwa ye-WiFi"</string>
+ <string name="accessibility_wifi_two_bars" msgid="7869150535859760698">"ama-bar amabili e-WiFi"</string>
+ <string name="accessibility_wifi_three_bars" msgid="2665319332961356254">"amabha amathathu e-WiFi"</string>
+ <string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"i-signal ye-WiFi igcwele"</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">"Ekucupheleni"</string>
+ <string name="accessibility_data_connection_wifi" msgid="1127208787254436420">"WiFi"</string>
+ <string name="accessibility_no_sim" msgid="8274017118472455155">"Ayikho i-SIM"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Ukusebenzisa i-Bluetooth."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Imodi yendiza."</string>
+ <string name="accessibility_battery_level" msgid="7451474187113371965">"Iphesenti <xliff:g id="NUMBER">%d</xliff:g> lebhetri"</string>
+ <string name="accessibility_settings_button" msgid="7913780116850379698">"Inkinobho yezilungiselelo"</string>
+ <string name="accessibility_notifications_button" msgid="2933903195211483438">"Inkinobho Yezazisp"</string>
+ <string name="accessibility_remove_notification" msgid="4883990503785778699">"Susa Isaziso."</string>
+ <string name="accessibility_gps_enabled" msgid="3511469499240123019">"i-GPS inikwe amandla"</string>
+ <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"i-GPS iyafuna"</string>
+ <string name="accessibility_tty_enabled" msgid="4613200365379426561">"i-TeleTypewriter inikwe amandla"</string>
+ <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ukudlidliza kweringa."</string>
+ <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Isikhali sithulile."</string>
<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) -->
- <skip />
- <!-- no translation found for gps_notification_searching_text (8574247005642736060) -->
- <skip />
- <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
- <skip />
+ <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Alukho uxhumano lwe-Inthanethi"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"I-Wi-Fi ixhunyiwe"</string>
+ <string name="gps_notification_searching_text" msgid="8574247005642736060">"Isesha i-GPS"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"Indawo ihlelwe i-GPS"</string>
</resources>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index e780ae62ccb7..5ba19084e066 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -25,7 +25,7 @@
<drawable name="status_bar_recents_app_thumbnail_background">#88000000</drawable>
<color name="status_bar_recents_app_label_color">#ffffffff</color>
<drawable name="status_bar_notification_row_background_color">#ff090909</drawable>
- <drawable name="notification_header_bg">#FF000000</drawable>
+ <drawable name="notification_header_bg">#d8000000</drawable>
<drawable name="notification_tracking_bg">#d8000000</drawable>
<color name="notification_list_shadow_top">#80000000</color>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index bad7e1fb1e8e..b9e6d78645b2 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -41,6 +41,10 @@
<!-- Title shown in recents popup for inspecting an application's properties -->
<string name="status_bar_recent_inspect_item_title">App info</string>
+ <!-- Message shown in the middle of the screen after clicking on the recent apps button
+ when there are no recent apps to show [CHAR LIMIT=45]-->
+ <string name="status_bar_no_recent_apps">No recent apps</string>
+
<!-- The label in the bar at the top of the status bar when there are no notifications
showing. [CHAR LIMIT=40]-->
<string name="status_bar_no_notifications_title">No notifications</string>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 492f3c245349..bf1ec257856f 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -26,6 +26,7 @@ import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Region.Op;
import android.opengl.GLUtils;
+import android.os.SystemProperties;
import android.renderscript.Matrix4f;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
@@ -56,6 +57,7 @@ public class ImageWallpaper extends WallpaperService {
private static final String TAG = "ImageWallpaper";
private static final String GL_LOG_TAG = "ImageWallpaperGL";
private static final boolean DEBUG = false;
+ private static final String PROPERTY_KERNEL_QEMU = "ro.kernel.qemu";
static final boolean FIXED_SIZED_SURFACE = true;
static final boolean USE_OPENGL = true;
@@ -71,12 +73,19 @@ public class ImageWallpaper extends WallpaperService {
//noinspection PointlessBooleanExpression,ConstantConditions
if (FIXED_SIZED_SURFACE && USE_OPENGL) {
- WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
- Display display = windowManager.getDefaultDisplay();
- mIsHwAccelerated = ActivityManager.isHighEndGfx(display);
+ if (!isEmulator()) {
+ WindowManager windowManager =
+ (WindowManager) getSystemService(Context.WINDOW_SERVICE);
+ Display display = windowManager.getDefaultDisplay();
+ mIsHwAccelerated = ActivityManager.isHighEndGfx(display);
+ }
}
}
+ private static boolean isEmulator() {
+ return "1".equals(SystemProperties.get(PROPERTY_KERNEL_QEMU, "0"));
+ }
+
public Engine onCreateEngine() {
return new DrawableEngine();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
index 9749a1dcdef8..fbf00d2e3ff3 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
@@ -38,17 +38,20 @@ import android.view.View;
View mRootView;
View mScrimView;
View mContentView;
+ View mNoRecentAppsView;
AnimatorSet mContentAnim;
Animator.AnimatorListener mListener;
// the panel will start to appear this many px from the end
final int HYPERSPACE_OFFRAMP = 200;
- public Choreographer(View root, View scrim, View content, Animator.AnimatorListener listener) {
+ public Choreographer(View root, View scrim, View content,
+ View noRecentApps, Animator.AnimatorListener listener) {
mRootView = root;
mScrimView = scrim;
mContentView = content;
mListener = listener;
+ mNoRecentAppsView = noRecentApps;
}
void createAnimation(boolean appearing) {
@@ -81,8 +84,24 @@ import android.view.View;
: new android.view.animation.DecelerateInterpolator(1.0f));
glowAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
+ Animator noRecentAppsFadeAnim = null;
+ if (mNoRecentAppsView != null && // doesn't exist on large devices
+ mNoRecentAppsView.getVisibility() == View.VISIBLE) {
+ noRecentAppsFadeAnim = ObjectAnimator.ofFloat(mNoRecentAppsView, "alpha",
+ mContentView.getAlpha(), appearing ? 1.0f : 0.0f);
+ noRecentAppsFadeAnim.setInterpolator(appearing
+ ? new android.view.animation.AccelerateInterpolator(1.0f)
+ : new android.view.animation.DecelerateInterpolator(1.0f));
+ noRecentAppsFadeAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
+ }
+
mContentAnim = new AnimatorSet();
final Builder builder = mContentAnim.play(glowAnim).with(posAnim);
+
+ if (noRecentAppsFadeAnim != null) {
+ builder.with(noRecentAppsFadeAnim);
+ }
+
Drawable background = mScrimView.getBackground();
if (background != null) {
Animator bgAnim = ObjectAnimator.ofInt(background,
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 0621b2203a80..54bc4e360b37 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -83,6 +83,7 @@ public class RecentsPanelView extends RelativeLayout
private int mIconDpi;
private View mRecentsScrim;
private View mRecentsGlowView;
+ private View mRecentsNoApps;
private ViewGroup mRecentsContainer;
private Bitmap mDefaultThumbnailBackground;
@@ -128,7 +129,7 @@ public class RecentsPanelView extends RelativeLayout
}
public void setThumbnail(Bitmap thumbnail) {
- mThumbnail = compositeBitmap(mDefaultThumbnailBackground, thumbnail);
+ mThumbnail = thumbnail;
}
public Bitmap getThumbnail() {
@@ -373,8 +374,9 @@ public class RecentsPanelView extends RelativeLayout
mRecentsGlowView = findViewById(R.id.recents_glow);
- mRecentsScrim = (View) findViewById(R.id.recents_bg_protect);
- mChoreo = new Choreographer(this, mRecentsScrim, mRecentsGlowView, this);
+ mRecentsScrim = findViewById(R.id.recents_bg_protect);
+ mRecentsNoApps = findViewById(R.id.recents_no_apps);
+ mChoreo = new Choreographer(this, mRecentsScrim, mRecentsGlowView, mRecentsNoApps, this);
mRecentsDismissButton = findViewById(R.id.recents_dismiss_button);
mRecentsDismissButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
@@ -478,13 +480,10 @@ public class RecentsPanelView extends RelativeLayout
if (resolveInfo != null) {
final ActivityInfo info = resolveInfo.activityInfo;
final String title = info.loadLabel(pm).toString();
- // Drawable icon = info.loadIcon(pm);
Drawable icon = getFullResIcon(resolveInfo, pm);
if (title != null && title.length() > 0 && icon != null) {
if (DEBUG) Log.v(TAG, "creating activity desc for id="
+ recentInfo.id + ", label=" + title);
- ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(
- recentInfo.persistentId);
ActivityDescription item = new ActivityDescription(recentInfo,
resolveInfo, intent, index, info.packageName);
activityDescriptions.add(item);
@@ -523,7 +522,9 @@ public class RecentsPanelView extends RelativeLayout
synchronized (ad) {
ad.mLabel = label;
ad.mIcon = icon;
- ad.setThumbnail(thumbs != null ? thumbs.mainThumbnail : mDefaultThumbnailBackground);
+ if (thumbs != null && thumbs.mainThumbnail != null) {
+ ad.setThumbnail(thumbs.mainThumbnail);
+ }
}
}
@@ -581,6 +582,9 @@ public class RecentsPanelView extends RelativeLayout
mThumbnailLoader.cancel(false);
mThumbnailLoader = null;
}
+ if (mRecentsNoApps != null) { // doesn't exist on large devices
+ mRecentsNoApps.setVisibility(View.INVISIBLE);
+ }
mActivityDescriptions = getRecentTasks();
for (ActivityDescription ad : mActivityDescriptions) {
ad.setThumbnail(mDefaultThumbnailBackground);
@@ -589,7 +593,8 @@ public class RecentsPanelView extends RelativeLayout
if (mActivityDescriptions.size() > 0) {
if (DEBUG) Log.v(TAG, "Showing " + mActivityDescriptions.size() + " apps");
updateUiElements(getResources().getConfiguration());
- final ArrayList<ActivityDescription> descriptions = mActivityDescriptions;
+ final ArrayList<ActivityDescription> descriptions =
+ new ArrayList<ActivityDescription>(mActivityDescriptions);
loadActivityDescription(descriptions.get(0), 0);
applyActivityDescription(descriptions.get(0), 0, false);
if (descriptions.size() > 1) {
@@ -647,23 +652,12 @@ public class RecentsPanelView extends RelativeLayout
} else {
// Immediately hide this panel
if (DEBUG) Log.v(TAG, "Nothing to show");
- hide(false);
- }
- }
-
- private Bitmap compositeBitmap(Bitmap background, Bitmap thumbnail) {
- Bitmap outBitmap = background.copy(background.getConfig(), true);
- if (thumbnail != null) {
- Canvas canvas = new Canvas(outBitmap);
- Paint paint = new Paint();
- paint.setAntiAlias(true);
- paint.setFilterBitmap(true);
- paint.setAlpha(255);
- canvas.drawBitmap(thumbnail, null,
- new RectF(0, 0, outBitmap.getWidth(), outBitmap.getHeight()), paint);
- canvas.setBitmap(null);
+ if (mRecentsNoApps != null) { // doesn't exist on large devices
+ mRecentsNoApps.setVisibility(View.VISIBLE);
+ } else {
+ hide(false);
+ }
}
- return outBitmap;
}
private void updateUiElements(Configuration config) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 65b022a7610b..59b09d49f9c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -29,6 +29,7 @@ import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.R;
+// Intimately tied to the design of res/layout/signal_cluster_view.xml
public class SignalClusterView
extends LinearLayout
implements NetworkController.SignalCluster {
@@ -42,9 +43,11 @@ public class SignalClusterView
private int mWifiStrengthId = 0, mWifiActivityId = 0;
private boolean mMobileVisible = false;
private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
+ private boolean mIsAirplaneMode = false;
ViewGroup mWifiGroup, mMobileGroup;
ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType;
+ View mSpacer;
public SignalClusterView(Context context) {
this(context, null);
@@ -74,6 +77,7 @@ public class SignalClusterView
mMobile = (ImageView) findViewById(R.id.mobile_signal);
mMobileActivity = (ImageView) findViewById(R.id.mobile_inout);
mMobileType = (ImageView) findViewById(R.id.mobile_type);
+ mSpacer = findViewById(R.id.spacer);
apply();
}
@@ -109,6 +113,10 @@ public class SignalClusterView
apply();
}
+ public void setIsAirplaneMode(boolean is) {
+ mIsAirplaneMode = is;
+ }
+
// Run after each indicator change.
private void apply() {
if (mWifiGroup == null) return;
@@ -135,6 +143,12 @@ public class SignalClusterView
mMobileGroup.setVisibility(View.GONE);
}
+ if (mMobileVisible && mWifiVisible && mIsAirplaneMode) {
+ mSpacer.setVisibility(View.INVISIBLE);
+ } else {
+ mSpacer.setVisibility(View.GONE);
+ }
+
if (DEBUG) Slog.d(TAG,
String.format("mobile: %s sig=%d act=%d typ=%d",
(mMobileVisible ? "VISIBLE" : "GONE"),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index 37c77f6e67e4..595953740633 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -118,7 +118,7 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
- PixelFormat.RGBX_8888);
+ PixelFormat.OPAQUE);
// the status bar should be in an overlay if possible
final Display defaultDisplay
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index a90eb3fa9217..69978378d140 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -29,6 +29,7 @@ import android.util.Slog;
import android.util.Log;
import android.view.ViewDebug;
import android.view.accessibility.AccessibilityEvent;
+import android.widget.ImageView;
import java.text.NumberFormat;
@@ -70,6 +71,8 @@ public class StatusBarIconView extends AnimatedImageView {
final float alpha = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
setAlpha(alpha);
}
+
+ setScaleType(ImageView.ScaleType.CENTER);
}
private static boolean streq(String a, String b) {
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 610edfa4b21f..d260e6db495a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -59,7 +59,7 @@ public class NavigationBarView extends LinearLayout {
int mBarSize;
boolean mVertical;
- boolean mHidden, mLowProfile;
+ boolean mHidden, mLowProfile, mShowMenu;
int mDisabledFlags = 0;
public View getRecentsButton() {
@@ -91,6 +91,7 @@ public class NavigationBarView extends LinearLayout {
final Resources res = mContext.getResources();
mBarSize = res.getDimensionPixelSize(R.dimen.navigation_bar_size);
mVertical = false;
+ mShowMenu = false;
}
View.OnTouchListener mLightsOutListener = new View.OnTouchListener() {
@@ -126,7 +127,23 @@ public class NavigationBarView extends LinearLayout {
getBackButton() .setVisibility(disableBack ? View.INVISIBLE : View.VISIBLE);
getHomeButton() .setVisibility(disableNavigation ? View.INVISIBLE : View.VISIBLE);
getRecentsButton().setVisibility(disableNavigation ? View.INVISIBLE : View.VISIBLE);
- getMenuButton() .setVisibility(disableNavigation ? View.INVISIBLE : View.VISIBLE);
+
+ getMenuButton() .setVisibility((disableNavigation || !mShowMenu)
+ ? View.INVISIBLE : View.VISIBLE);
+ }
+
+ public void setMenuVisibility(final boolean show) {
+ setMenuVisibility(show, false);
+ }
+
+ public void setMenuVisibility(final boolean show, final boolean force) {
+ if (!force && mShowMenu == show) return;
+
+ mShowMenu = show;
+
+ getMenuButton().setVisibility(
+ (0 != (mDisabledFlags & View.STATUS_BAR_DISABLE_NAVIGATION) || !mShowMenu)
+ ? View.INVISIBLE : View.VISIBLE);
}
public void setLowProfile(final boolean lightsOut) {
@@ -143,9 +160,15 @@ public class NavigationBarView extends LinearLayout {
final View navButtons = mCurrentView.findViewById(R.id.nav_buttons);
final View lowLights = mCurrentView.findViewById(R.id.lights_out);
+ // ok, everyone, stop it right there
+ navButtons.animate().cancel();
+ lowLights.animate().cancel();
+
if (!animate) {
- lowLights.setVisibility(View.GONE);
- navButtons.setAlpha(1f);
+ navButtons.setAlpha(lightsOut ? 0f : 1f);
+
+ lowLights.setAlpha(lightsOut ? 1f : 0f);
+ lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE);
} else {
navButtons.animate()
.alpha(lightsOut ? 0f : 1f)
@@ -153,8 +176,10 @@ public class NavigationBarView extends LinearLayout {
.start();
lowLights.setOnTouchListener(mLightsOutListener);
- lowLights.setAlpha(0f);
- lowLights.setVisibility(View.VISIBLE);
+ if (lowLights.getVisibility() == View.GONE) {
+ lowLights.setAlpha(0f);
+ lowLights.setVisibility(View.VISIBLE);
+ }
lowLights.animate()
.alpha(lightsOut ? 1f : 0f)
.setStartDelay(lightsOut ? 500 : 0)
@@ -236,15 +261,6 @@ public class NavigationBarView extends LinearLayout {
mCurrentView = mRotatedViews[Surface.ROTATION_0];
}
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- try {
- mBarService.setSystemUiVisibility(0);
- } catch (android.os.RemoteException ex) {
- }
- return false; // pass it on
- }
-
public void reorient() {
final int rot = mDisplay.getRotation();
for (int i=0; i<4; i++) {
@@ -257,6 +273,7 @@ public class NavigationBarView extends LinearLayout {
// force the low profile & disabled states into compliance
setLowProfile(mLowProfile, false, true /* force */);
setDisabledFlags(mDisabledFlags, true /* force */);
+ setMenuVisibility(mShowMenu, true /* force */);
if (DEBUG_DEADZONE) {
mCurrentView.findViewById(R.id.deadzone).setBackgroundColor(0x808080FF);
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 febf3ab73c0c..e5d4d22742f9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -316,12 +316,7 @@ public class PhoneStatusBar extends StatusBar {
}
// figure out which pixel-format to use for the status bar.
- mPixelFormat = PixelFormat.TRANSLUCENT;
- Drawable bg = sb.getBackground();
- if (bg != null) {
- mPixelFormat = bg.getOpacity();
- }
-
+ mPixelFormat = PixelFormat.OPAQUE;
mStatusIcons = (LinearLayout)sb.findViewById(R.id.statusIcons);
mNotificationIcons = (IconMerger)sb.findViewById(R.id.notificationIcons);
mIcons = (LinearLayout)sb.findViewById(R.id.icons);
@@ -896,14 +891,6 @@ public class PhoneStatusBar extends StatusBar {
}
}
- void workAroundBadLayerDrawableOpacity(View v) {
- LayerDrawable d = (LayerDrawable)v.getBackground();
- if (d == null) return;
- v.setBackgroundDrawable(null);
- d.setOpacity(PixelFormat.TRANSLUCENT);
- v.setBackgroundDrawable(d);
- }
-
private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) {
StatusBarNotification sbn = entry.notification;
RemoteViews remoteViews = sbn.notification.contentView;
@@ -915,7 +902,6 @@ public class PhoneStatusBar extends StatusBar {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.status_bar_notification_row, parent, false);
- workAroundBadLayerDrawableOpacity(row);
View vetoButton = row.findViewById(R.id.veto);
if (entry.notification.isClearable()) {
final String _pkg = sbn.pkg;
@@ -1572,8 +1558,7 @@ public class PhoneStatusBar extends StatusBar {
Slog.d(TAG, (showMenu?"showing":"hiding") + " the MENU button");
}
if (mNavigationBarView != null) {
- mNavigationBarView.getMenuButton().setVisibility(showMenu
- ? View.VISIBLE : View.INVISIBLE);
+ mNavigationBarView.setMenuVisibility(showMenu);
}
// See above re: lights-out policy for legacy apps.
@@ -1609,6 +1594,9 @@ public class PhoneStatusBar extends StatusBar {
// the user switches to home. We know it is safe to do at this
// point, so make sure new activity switches are now allowed.
ActivityManagerNative.getDefault().resumeAppSwitches();
+ // Also, notifications can be launched from the lock screen,
+ // so dismiss the lock screen when the activity starts.
+ ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
} catch (RemoteException e) {
}
@@ -2032,8 +2020,13 @@ public class PhoneStatusBar extends StatusBar {
// The user is not allowed to get stuck without navigation UI. Upon the slightest user
// interaction we bring the navigation back.
public void userActivity() {
- if (mNavigationBarView != null) {
- mNavigationBarView.setHidden(false);
+ if (0 != (mSystemUiVisibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
+ try {
+ mBarService.setSystemUiVisibility(
+ mSystemUiVisibility & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+ } catch (RemoteException ex) {
+ // weep softly
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index ee270f929528..9bee5dfca017 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -64,6 +64,8 @@ public class PhoneStatusBarPolicy {
private static final int INET_CONDITION_THRESHOLD = 50;
+ private static final boolean SHOW_SYNC_ICON = false;
+
private final Context mContext;
private final StatusBarManager mService;
private final Handler mHandler = new Handler();
@@ -165,10 +167,8 @@ public class PhoneStatusBarPolicy {
mService.setIconVisibility("alarm_clock", false);
// Sync state
- mService.setIcon("sync_active", com.android.internal.R.drawable.stat_notify_sync_anim0,
- 0, null);
- mService.setIcon("sync_failing", com.android.internal.R.drawable.stat_notify_sync_error,
- 0, null);
+ mService.setIcon("sync_active", R.drawable.stat_sys_sync, 0, null);
+ mService.setIcon("sync_failing", R.drawable.stat_sys_sync_error, 0, null);
mService.setIconVisibility("sync_active", false);
mService.setIconVisibility("sync_failing", false);
@@ -197,6 +197,7 @@ public class PhoneStatusBarPolicy {
}
private final void updateSyncState(Intent intent) {
+ if (!SHOW_SYNC_ICON) return;
boolean isActive = intent.getBooleanExtra("active", false);
boolean isFailing = intent.getBooleanExtra("failing", false);
mService.setIconVisibility("sync_active", isActive);
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 3b097af452be..c83c4708eac0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -84,6 +84,7 @@ public class NetworkController extends BroadcastReceiver {
int mDataTypeIconId;
boolean mDataActive;
int mMobileActivityIconId; // overlay arrows for data direction
+ int mLastSignalLevel;
String mContentDescriptionPhoneSignal;
String mContentDescriptionWifi;
@@ -141,6 +142,7 @@ public class NetworkController extends BroadcastReceiver {
void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon);
void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
int typeIcon);
+ void setIsAirplaneMode(boolean is);
}
/**
@@ -282,7 +284,8 @@ public class NetworkController extends BroadcastReceiver {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
if (DEBUG) {
- Slog.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength);
+ Slog.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength +
+ ((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));
}
mSignalStrength = signalStrength;
updateTelephonySignalStrength();
@@ -315,16 +318,12 @@ public class NetworkController extends BroadcastReceiver {
@Override
public void onDataConnectionStateChanged(int state, int networkType) {
- if (DEBUG || CHATTY) {
+ if (DEBUG) {
Slog.d(TAG, "onDataConnectionStateChanged: state=" + state
+ " type=" + networkType);
}
mDataState = state;
mDataNetType = networkType;
- if (state < 0) {
- // device without a data connection
- mSignalStrength = null;
- }
updateDataNetType();
updateDataIcon();
refreshViews();
@@ -390,11 +389,12 @@ public class NetworkController extends BroadcastReceiver {
private final void updateTelephonySignalStrength() {
if (!hasService()) {
- //Slog.d(TAG, "updateTelephonySignalStrength: no service");
+ if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: !hasService()");
mPhoneSignalIconId = R.drawable.stat_sys_signal_0;
mDataSignalIconId = R.drawable.stat_sys_signal_0;
} else {
if (mSignalStrength == null) {
+ if (CHATTY) Slog.d(TAG, "updateTelephonySignalStrength: mSignalStrength == null");
mPhoneSignalIconId = R.drawable.stat_sys_signal_0;
mDataSignalIconId = R.drawable.stat_sys_signal_0;
mContentDescriptionPhoneSignal = mContext.getString(
@@ -402,7 +402,7 @@ public class NetworkController extends BroadcastReceiver {
} else {
int iconLevel;
int[] iconList;
- iconLevel = mSignalStrength.getLevel();
+ mLastSignalLevel = iconLevel = mSignalStrength.getLevel();
if (isCdma()) {
if (isCdmaEri()) {
iconList = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[mInetCondition];
@@ -720,28 +720,19 @@ public class NetworkController extends BroadcastReceiver {
Slog.d(TAG, "updateConnectivity: connectionStatus=" + connectionStatus);
}
- int inetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0);
+ mInetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0);
- switch (info.getType()) {
- case ConnectivityManager.TYPE_MOBILE:
- mInetCondition = inetCondition;
- updateDataNetType();
- updateDataIcon();
- updateTelephonySignalStrength(); // apply any change in connectionStatus
- break;
- case ConnectivityManager.TYPE_WIFI:
- mInetCondition = inetCondition;
- updateWifiIcons();
- break;
- case ConnectivityManager.TYPE_BLUETOOTH:
- mInetCondition = inetCondition;
- if (info != null) {
- mBluetoothTethered = info.isConnected() ? true: false;
- } else {
- mBluetoothTethered = false;
- }
- break;
+ if (info != null && info.getType() == ConnectivityManager.TYPE_BLUETOOTH) {
+ mBluetoothTethered = info.isConnected() ? true: false;
+ } else {
+ mBluetoothTethered = false;
}
+
+ // We want to update all the icons, all at once, for any condition change
+ updateDataNetType();
+ updateDataIcon();
+ updateTelephonySignalStrength();
+ updateWifiIcons();
}
@@ -877,6 +868,7 @@ public class NetworkController extends BroadcastReceiver {
mPhoneSignalIconId,
mMobileActivityIconId,
mDataTypeIconId);
+ cluster.setIsAirplaneMode(mAirplaneMode);
}
}
@@ -976,8 +968,10 @@ public class NetworkController extends BroadcastReceiver {
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- pw.println("Network Controller state:");
+ pw.println("NetworkController state:");
pw.println(" - telephony ------");
+ pw.print(" hasService()=");
+ pw.println(hasService());
pw.print(" mHspaDataDistinguishable=");
pw.println(mHspaDataDistinguishable);
pw.print(" mDataConnected=");
@@ -996,6 +990,10 @@ public class NetworkController extends BroadcastReceiver {
pw.println(TelephonyManager.getNetworkTypeName(mDataNetType));
pw.print(" mServiceState=");
pw.println(mServiceState);
+ pw.print(" mSignalStrength=");
+ pw.println(mSignalStrength);
+ pw.print(" mLastSignalLevel=");
+ pw.println(mLastSignalLevel);
pw.print(" mNetworkName=");
pw.println(mNetworkName);
pw.print(" mNetworkNameDefault=");
@@ -1028,14 +1026,14 @@ public class NetworkController extends BroadcastReceiver {
pw.println(mWifiLevel);
pw.print(" mWifiSsid=");
pw.println(mWifiSsid);
- pw.print(" mWifiIconId=");
- pw.println(mWifiIconId);
+ pw.print(String.format(" mWifiIconId=0x%08x/%s",
+ mWifiIconId, getResourceName(mWifiIconId)));
pw.print(" mWifiActivity=");
pw.println(mWifiActivity);
pw.println(" - Bluetooth ----");
- pw.print(" mBtReverseTethered=");
+ pw.print(" mBtReverseTethered=");
pw.println(mBluetoothTethered);
pw.println(" - connectivity ------");
@@ -1069,6 +1067,7 @@ public class NetworkController extends BroadcastReceiver {
pw.println(getResourceName(mLastCombinedSignalIconId));
pw.print(" mLastLabel=");
pw.print(mLastLabel);
+ pw.println("");
}
private String getResourceName(int resId) {
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 c2f07d63f13e..435aa8c05d61 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -1308,6 +1308,9 @@ public class TabletStatusBar extends StatusBar implements
// the user switches to home. We know it is safe to do at this
// point, so make sure new activity switches are now allowed.
ActivityManagerNative.getDefault().resumeAppSwitches();
+ // Also, notifications can be launched from the lock screen,
+ // so dismiss the lock screen when the activity starts.
+ ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
} catch (RemoteException e) {
}
diff --git a/packages/VpnDialogs/res/layout/confirm.xml b/packages/VpnDialogs/res/layout/confirm.xml
index 11a247a633aa..fef00c2203b4 100644
--- a/packages/VpnDialogs/res/layout/confirm.xml
+++ b/packages/VpnDialogs/res/layout/confirm.xml
@@ -15,46 +15,43 @@
limitations under the License.
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="3mm">
-
- <ImageView android:id="@+id/icon"
- android:layout_width="@android:dimen/app_icon_size"
- android:layout_height="@android:dimen/app_icon_size"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_marginRight="1mm"/>
-
- <TextView android:id="@+id/warning"
- android:layout_width="fill_parent"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_below="@id/icon"
- android:padding="3mm"
- android:text="@string/warning"
- android:textSize="18sp"/>
-
- <TextView android:id="@+id/prompt"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_alignParentRight="true"
- android:layout_toRightOf="@id/icon"
- android:layout_above="@id/warning"
- android:gravity="center_vertical"
- android:textSize="20sp"/>
-
- <CheckBox android:id="@+id/check"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_below="@id/warning"
- android:text="@string/accept"
- android:textSize="20sp"
- android:checked="false"/>
-
-</RelativeLayout>
+ android:orientation="vertical"
+ android:padding="3mm">
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+
+ <ImageView android:id="@+id/icon"
+ android:layout_width="@android:dimen/app_icon_size"
+ android:layout_height="@android:dimen/app_icon_size"
+ android:paddingRight="1mm"/>
+
+ <TextView android:id="@+id/prompt"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textSize="18sp"/>
+ </LinearLayout>
+
+ <TextView android:id="@+id/warning"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="1mm"
+ android:paddingBottom="1mm"
+ android:text="@string/warning"
+ android:textSize="18sp"/>
+
+ <CheckBox android:id="@+id/check"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/accept"
+ android:textSize="20sp"
+ android:checked="false"/>
+ </LinearLayout>
+</ScrollView>
diff --git a/packages/VpnDialogs/res/values-af/strings.xml b/packages/VpnDialogs/res/values-af/strings.xml
index 3f0a37e4a57b..6f9ac18f475b 100644
--- a/packages/VpnDialogs/res/values-af/strings.xml
+++ b/packages/VpnDialogs/res/values-af/strings.xml
@@ -24,8 +24,8 @@
<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="data_transmitted" msgid="7988167672982199061">"Gestuur:"</string>
+ <string name="data_received" msgid="4062776929376067820">"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
index 34c6db47a0ae..45eaa0241f24 100644
--- a/packages/VpnDialogs/res/values-am/strings.xml
+++ b/packages/VpnDialogs/res/values-am/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"ውሂብ ተላልፏል፡"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"ውሂብ ተቀብሏል"</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
index 8b0d2a25f406..17b993797f87 100644
--- a/packages/VpnDialogs/res/values-ar/strings.xml
+++ b/packages/VpnDialogs/res/values-ar/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"البيانات المنقولة:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"البيانات المستلمة:"</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
index 7220ca99c11e..fc8fbeb0955f 100644
--- a/packages/VpnDialogs/res/values-bg/strings.xml
+++ b/packages/VpnDialogs/res/values-bg/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Предадени данни:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Получени данни:"</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
index 8c897bc24641..91236aa3efbd 100644
--- a/packages/VpnDialogs/res/values-ca/strings.xml
+++ b/packages/VpnDialogs/res/values-ca/strings.xml
@@ -24,8 +24,8 @@
<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="data_transmitted" msgid="7988167672982199061">"Enviat:"</string>
+ <string name="data_received" msgid="4062776929376067820">"Rebut:"</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
index 984a9829b23b..00fbe2d97272 100644
--- a/packages/VpnDialogs/res/values-cs/strings.xml
+++ b/packages/VpnDialogs/res/values-cs/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Odeslaná data:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 5ca00bfdc26b..436c5703c1f8 100644
--- a/packages/VpnDialogs/res/values-da/strings.xml
+++ b/packages/VpnDialogs/res/values-da/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data sendt:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index e9b3e2726824..51690da2eef4 100644
--- a/packages/VpnDialogs/res/values-de/strings.xml
+++ b/packages/VpnDialogs/res/values-de/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Übertragene Daten:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 89d19ae3bfa8..58abede01e8c 100644
--- a/packages/VpnDialogs/res/values-el/strings.xml
+++ b/packages/VpnDialogs/res/values-el/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Στοιχεία που μεταδόθηκαν:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Δεδομένα που λήφθηκαν:"</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
index 99c795429046..d7c411ad5083 100644
--- a/packages/VpnDialogs/res/values-en-rGB/strings.xml
+++ b/packages/VpnDialogs/res/values-en-rGB/strings.xml
@@ -24,8 +24,8 @@
<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="data_transmitted" msgid="7988167672982199061">"Sent:"</string>
+ <string name="data_received" msgid="4062776929376067820">"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
index ea58e536304b..7c563ae6b8ac 100644
--- a/packages/VpnDialogs/res/values-es-rUS/strings.xml
+++ b/packages/VpnDialogs/res/values-es-rUS/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Datos transmitidos:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 993d8b3bca3c..e957542e8cb7 100644
--- a/packages/VpnDialogs/res/values-es/strings.xml
+++ b/packages/VpnDialogs/res/values-es/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Datos transmitidos:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 7b015abeb3a1..d0fe3ff6df1b 100644
--- a/packages/VpnDialogs/res/values-fa/strings.xml
+++ b/packages/VpnDialogs/res/values-fa/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"داده‌های منتقل شده:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"داده دریافت شده:"</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
index 66ebecaa8a96..e2f30efe6929 100644
--- a/packages/VpnDialogs/res/values-fi/strings.xml
+++ b/packages/VpnDialogs/res/values-fi/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Siirretyt tiedot:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 1ea0c6639a1a..16b8c8ff898b 100644
--- a/packages/VpnDialogs/res/values-fr/strings.xml
+++ b/packages/VpnDialogs/res/values-fr/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Données transmises :"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index b045819ccbd2..9eabfff90c3a 100644
--- a/packages/VpnDialogs/res/values-hr/strings.xml
+++ b/packages/VpnDialogs/res/values-hr/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Preneseno podataka:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 062f91aa3442..587204624ba0 100644
--- a/packages/VpnDialogs/res/values-hu/strings.xml
+++ b/packages/VpnDialogs/res/values-hu/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Továbbított adatok:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index c332ce69e65f..9a985e601e1e 100644
--- a/packages/VpnDialogs/res/values-in/strings.xml
+++ b/packages/VpnDialogs/res/values-in/strings.xml
@@ -20,12 +20,12 @@
<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="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">"Durasi:"</string>
- <string name="data_transmitted" msgid="8239988320199846094">"Data yang Dikirimkan:"</string>
- <string name="data_received" msgid="7431729884377019935">"Data Diterima:"</string>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data yang Dikirimkan:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 2d44c207e790..98e5cc99a0b0 100644
--- a/packages/VpnDialogs/res/values-it/strings.xml
+++ b/packages/VpnDialogs/res/values-it/strings.xml
@@ -24,8 +24,8 @@
<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="data_transmitted" msgid="7988167672982199061">"Inviati:"</string>
+ <string name="data_received" msgid="4062776929376067820">"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
index b972877f79f7..093015afbe9e 100644
--- a/packages/VpnDialogs/res/values-iw/strings.xml
+++ b/packages/VpnDialogs/res/values-iw/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"הנתונים המועברים:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"הנתונים שהתקבלו:"</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
index f8e9645d881a..d5f97e5a84aa 100644
--- a/packages/VpnDialogs/res/values-ja/strings.xml
+++ b/packages/VpnDialogs/res/values-ja/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"送信されたデータ:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"受信したデータ:"</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
index eff1ba9a5c46..6c99f7b65b1e 100644
--- a/packages/VpnDialogs/res/values-ko/strings.xml
+++ b/packages/VpnDialogs/res/values-ko/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"전송된 데이터:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"수신된 데이터:"</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
index 68221b6ece40..ae8573b52f87 100644
--- a/packages/VpnDialogs/res/values-lt/strings.xml
+++ b/packages/VpnDialogs/res/values-lt/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Duomenys perduodami:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 030e2d964495..88ff8bb571a7 100644
--- a/packages/VpnDialogs/res/values-lv/strings.xml
+++ b/packages/VpnDialogs/res/values-lv/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Nosūtītie dati:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index c20bc0b68e52..63d0da3a5a3c 100644
--- a/packages/VpnDialogs/res/values-ms/strings.xml
+++ b/packages/VpnDialogs/res/values-ms/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data yang Dihantarkan:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 90b542ee3075..f469cce1fd47 100644
--- a/packages/VpnDialogs/res/values-nb/strings.xml
+++ b/packages/VpnDialogs/res/values-nb/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data overført:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index add286fd6e95..807704c280a4 100644
--- a/packages/VpnDialogs/res/values-nl/strings.xml
+++ b/packages/VpnDialogs/res/values-nl/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Verzonden gegevens:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index f6e048d5fbc6..207c82de4e6d 100644
--- a/packages/VpnDialogs/res/values-pl/strings.xml
+++ b/packages/VpnDialogs/res/values-pl/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dane przesłane:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 367202c79ccf..960a10071890 100644
--- a/packages/VpnDialogs/res/values-pt-rPT/strings.xml
+++ b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dados Transmitidos:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 66636026e5a6..92bd1a2640a5 100644
--- a/packages/VpnDialogs/res/values-pt/strings.xml
+++ b/packages/VpnDialogs/res/values-pt/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Dados transmitidos:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index bd42a36bfaab..fa79ae1a7c43 100644
--- a/packages/VpnDialogs/res/values-ro/strings.xml
+++ b/packages/VpnDialogs/res/values-ro/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Date transmise:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 582c0f4f514c..a3888fcca2b4 100644
--- a/packages/VpnDialogs/res/values-ru/strings.xml
+++ b/packages/VpnDialogs/res/values-ru/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Отправлено:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Получено:"</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
index 16333bfa10b5..77090aa3be31 100644
--- a/packages/VpnDialogs/res/values-sk/strings.xml
+++ b/packages/VpnDialogs/res/values-sk/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Prenášané údaje:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 0336905bfcfc..1dda8b2f0a19 100644
--- a/packages/VpnDialogs/res/values-sl/strings.xml
+++ b/packages/VpnDialogs/res/values-sl/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Preneseni podatki:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index b3f266e55533..3274e5eab611 100644
--- a/packages/VpnDialogs/res/values-sr/strings.xml
+++ b/packages/VpnDialogs/res/values-sr/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Пренесени подаци:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Примљени подаци:"</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
index 50790dfd442b..3c9ef6a15471 100644
--- a/packages/VpnDialogs/res/values-sv/strings.xml
+++ b/packages/VpnDialogs/res/values-sv/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data som överförs:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 318579034bc9..87b592ce7fa2 100644
--- a/packages/VpnDialogs/res/values-sw/strings.xml
+++ b/packages/VpnDialogs/res/values-sw/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Data Zilizopitishwa:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 6acdda859386..17360c871b2e 100644
--- a/packages/VpnDialogs/res/values-th/strings.xml
+++ b/packages/VpnDialogs/res/values-th/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"ข้อมูลที่ส่ง:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"ข้อมูลที่ได้รับ:"</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
index 3d83442f0ce9..7a6b3c031903 100644
--- a/packages/VpnDialogs/res/values-tl/strings.xml
+++ b/packages/VpnDialogs/res/values-tl/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Naipadalang Data:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 07355f5ba7ab..9e7d1e0a2a5f 100644
--- a/packages/VpnDialogs/res/values-tr/strings.xml
+++ b/packages/VpnDialogs/res/values-tr/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"İletilen Veriler:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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
index 4dc4889b6707..bdb24355ee57 100644
--- a/packages/VpnDialogs/res/values-uk/strings.xml
+++ b/packages/VpnDialogs/res/values-uk/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Передані дані:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Отримані дані:"</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
index 40f772401362..7e10a73cf8d8 100644
--- a/packages/VpnDialogs/res/values-vi/strings.xml
+++ b/packages/VpnDialogs/res/values-vi/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Đã truyền dữ liệu:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"Đã 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
index 578f2aa8af9d..f9294e30f4b4 100644
--- a/packages/VpnDialogs/res/values-zh-rCN/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"传输的数据:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"收到的数据:"</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
index 9e96de58358e..5a39ca564166 100644
--- a/packages/VpnDialogs/res/values-zh-rTW/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rTW/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"已傳輸的數據:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"已接收的數據:"</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
index ff75ed72665b..492d3ff928bb 100644
--- a/packages/VpnDialogs/res/values-zu/strings.xml
+++ b/packages/VpnDialogs/res/values-zu/strings.xml
@@ -24,8 +24,8 @@
<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>
+ <!-- outdated translation 8239988320199846094 --> <string name="data_transmitted" msgid="7988167672982199061">"Idatha Ithunyelwe:"</string>
+ <!-- outdated translation 7431729884377019935 --> <string name="data_received" msgid="4062776929376067820">"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/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
index d668e98f0f27..7fb141709884 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
@@ -181,8 +181,10 @@ public class ManageDialog extends Activity implements Handler.Callback,
String line = in.readLine().trim();
if (line.startsWith(prefix)) {
String[] numbers = line.substring(prefix.length()).split(" +");
- if (numbers.length == 17) {
- return numbers;
+ for (int i = 1; i < 17; ++i) {
+ if (!numbers[i].equals("0")) {
+ return numbers;
+ }
}
break;
}
diff --git a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
index 6ff9a608ad44..a4baeed24c2a 100644
--- a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java
@@ -54,7 +54,7 @@ import java.io.IOException;
public class AccountUnlockScreen extends RelativeLayout implements KeyguardScreen,
View.OnClickListener, TextWatcher {
private static final String LOCK_PATTERN_PACKAGE = "com.android.settings";
- private static final String LOCK_PATTERN_CLASS = LOCK_PATTERN_PACKAGE + ".ChooseLockPattern";
+ private static final String LOCK_PATTERN_CLASS = LOCK_PATTERN_PACKAGE + ".ChooseLockGeneric";
/**
* The amount of millis to stay awake once this screen detects activity
@@ -112,7 +112,7 @@ public class AccountUnlockScreen extends RelativeLayout implements KeyguardScree
mUpdateMonitor = updateMonitor;
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockPatternUtils, callback);
+ lockPatternUtils, callback, true);
}
public void afterTextChanged(Editable s) {
diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java
index ec3102867f67..856914359517 100644
--- a/policy/src/com/android/internal/policy/impl/GlobalActions.java
+++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java
@@ -118,18 +118,18 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
*/
private AlertDialog createDialog() {
mSilentModeToggle = new ToggleAction(
- R.drawable.ic_lock_silent_mode,
- R.drawable.ic_lock_silent_mode_off,
+ R.drawable.ic_audio_vol_mute,
+ R.drawable.ic_audio_vol,
R.string.global_action_toggle_silent_mode,
R.string.global_action_silent_mode_on_status,
R.string.global_action_silent_mode_off_status) {
void willCreate() {
- // XXX: FIXME: switch to ic_lock_vibrate_mode when available
+ // XXX: FIXME: Add vibrate indicator when available
mEnabledIconResId = (Settings.System.getInt(mContext.getContentResolver(),
Settings.System.VIBRATE_IN_SILENT, 1) == 1)
- ? R.drawable.ic_lock_silent_mode_vibrate
- : R.drawable.ic_lock_silent_mode;
+ ? R.drawable.ic_audio_vol_mute
+ : R.drawable.ic_audio_vol_mute;
}
void onToggle(boolean on) {
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
index 8654a25d2f89..24dce1a0dd79 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
@@ -58,6 +58,7 @@ class KeyguardStatusViewManager implements OnClickListener {
private static final int CARRIER_HELP_TEXT = 12;
private static final int HELP_MESSAGE_TEXT = 13;
private static final int OWNER_INFO = 14;
+ private static final int BATTERY_INFO = 15;
private StatusMode mStatus;
private String mDateFormatString;
@@ -84,10 +85,13 @@ class KeyguardStatusViewManager implements OnClickListener {
// last known battery level
private int mBatteryLevel = 100;
+ // last known SIM state
+ protected State mSimState;
+
private LockPatternUtils mLockPatternUtils;
private KeyguardUpdateMonitor mUpdateMonitor;
private Button mEmergencyCallButton;
- private boolean mShouldEnableUnlock;
+ private boolean mUnlockDisabledDueToSimState;
// Shadowed text values
private CharSequence mCarrierText;
@@ -97,7 +101,9 @@ class KeyguardStatusViewManager implements OnClickListener {
private CharSequence mOwnerInfoText;
private boolean mShowingStatus;
private KeyguardScreenCallback mCallback;
- private boolean mHideEmergencyCallButton = false;
+ private final boolean mShowEmergencyButtonByDefault;
+ private CharSequence mPlmn;
+ private CharSequence mSpn;
private class TransientTextManager {
private TextView mTextView;
@@ -149,7 +155,9 @@ class KeyguardStatusViewManager implements OnClickListener {
};
public KeyguardStatusViewManager(View view, KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardScreenCallback callback) {
+ LockPatternUtils lockPatternUtils, KeyguardScreenCallback callback,
+ boolean showEmergencyButtonByDefault) {
+ if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
mContainer = view;
mDateFormatString = getContext().getString(R.string.full_wday_month_day_no_year);
mLockPatternUtils = lockPatternUtils;
@@ -163,6 +171,13 @@ class KeyguardStatusViewManager implements OnClickListener {
mOwnerInfoView = (TextView) findViewById(R.id.propertyOf);
mTransportView = (TransportControlView) findViewById(R.id.transport);
mEmergencyCallButton = (Button) findViewById(R.id.emergencyCallButton);
+ mShowEmergencyButtonByDefault = showEmergencyButtonByDefault;
+
+ // Hide transport control view until we know we need to show it.
+ if (mTransportView != null) {
+ mTransportView.setVisibility(View.GONE);
+ }
+
if (mEmergencyCallButton != null) {
mEmergencyCallButton.setText(R.string.lockscreen_emergency_call);
mEmergencyCallButton.setOnClickListener(this);
@@ -171,8 +186,6 @@ class KeyguardStatusViewManager implements OnClickListener {
mTransientTextManager = new TransientTextManager(mCarrierView);
- updateEmergencyCallButtonState();
-
resetStatusInfo();
refreshDate();
updateOwnerInfo();
@@ -185,10 +198,6 @@ class KeyguardStatusViewManager implements OnClickListener {
v.setSelected(true);
}
}
-
- // until we get an update...
- setCarrierText(LockPatternUtils.getCarrierString(
- mUpdateMonitor.getTelephonyPlmn(), mUpdateMonitor.getTelephonySpn()));
}
private boolean inWidgetMode() {
@@ -246,6 +255,7 @@ class KeyguardStatusViewManager implements OnClickListener {
case INSTRUCTION_TEXT:
case CARRIER_HELP_TEXT:
case HELP_MESSAGE_TEXT:
+ case BATTERY_INFO:
mTransientTextManager.post(string, 0, INSTRUCTION_RESET_DELAY);
break;
@@ -260,15 +270,16 @@ class KeyguardStatusViewManager implements OnClickListener {
}
public void onPause() {
+ if (DEBUG) Log.v(TAG, "onPause()");
mUpdateMonitor.removeCallback(mInfoCallback);
mUpdateMonitor.removeCallback(mSimStateCallback);
}
/** {@inheritDoc} */
public void onResume() {
+ if (DEBUG) Log.v(TAG, "onResume()");
mUpdateMonitor.registerInfoCallback(mInfoCallback);
mUpdateMonitor.registerSimStateCallback(mSimStateCallback);
- updateEmergencyCallButtonState();
resetStatusInfo();
}
@@ -393,15 +404,16 @@ class KeyguardStatusViewManager implements OnClickListener {
}
}
- boolean shouldEnableUnlock() {
- return mShouldEnableUnlock;
- }
-
/**
* Determine the current status of the lock screen given the sim state and other stuff.
*/
public StatusMode getStatusForIccState(IccCard.State simState) {
- boolean missingAndNotProvisioned = (!mUpdateMonitor.isDeviceProvisioned()
+ // Since reading the SIM may take a while, we assume it is present until told otherwise.
+ if (simState == null) {
+ return StatusMode.Normal;
+ }
+
+ final boolean missingAndNotProvisioned = (!mUpdateMonitor.isDeviceProvisioned()
&& (simState == IccCard.State.ABSENT || simState == IccCard.State.PERM_DISABLED));
// Assume we're NETWORK_LOCKED if not provisioned
@@ -437,23 +449,21 @@ class KeyguardStatusViewManager implements OnClickListener {
*
* @param simState
*/
- private void updateWithSimStatus(State simState) {
- // The emergency call button no longer appears on this screen.
- if (DEBUG) Log.d(TAG, "updateLayout: status=" + mStatus);
+ private void updateCarrierTextWithSimStatus(State simState) {
+ if (DEBUG) Log.d(TAG, "updateCarrierTextWithSimStatus(), simState = " + simState);
CharSequence carrierText = null;
int carrierHelpTextId = 0;
- mShouldEnableUnlock = true;
+ mUnlockDisabledDueToSimState = false;
mStatus = getStatusForIccState(simState);
-
+ mSimState = simState;
switch (mStatus) {
case Normal:
- carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
- mUpdateMonitor.getTelephonySpn());
+ carrierText = makeCarierString(mPlmn, mSpn);
break;
case NetworkLocked:
- carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
+ carrierText = makeCarierString(mPlmn,
getContext().getText(R.string.lockscreen_network_locked_message));
carrierHelpTextId = R.string.lockscreen_instructions_when_pattern_disabled;
break;
@@ -466,32 +476,32 @@ class KeyguardStatusViewManager implements OnClickListener {
case SimPermDisabled:
carrierText = getContext().getText(R.string.lockscreen_missing_sim_message_short);
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
+ mUnlockDisabledDueToSimState = true;
break;
case SimMissingLocked:
- carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
+ carrierText = makeCarierString(mPlmn,
getContext().getText(R.string.lockscreen_missing_sim_message_short));
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
- mShouldEnableUnlock = false;
+ mUnlockDisabledDueToSimState = true;
break;
case SimLocked:
- carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
+ carrierText = makeCarierString(mPlmn,
getContext().getText(R.string.lockscreen_sim_locked_message));
break;
case SimPukLocked:
- carrierText = LockPatternUtils.getCarrierString(mUpdateMonitor.getTelephonyPlmn(),
+ carrierText = makeCarierString(mPlmn,
getContext().getText(R.string.lockscreen_sim_puk_locked_message));
if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
- mShouldEnableUnlock = false;
+ mUnlockDisabledDueToSimState = true;
}
break;
}
setCarrierText(carrierText);
setCarrierHelpText(carrierHelpTextId);
- updateEmergencyCallButtonState();
}
private View findViewById(int id) {
@@ -554,12 +564,11 @@ class KeyguardStatusViewManager implements OnClickListener {
}
}
- private void updateEmergencyCallButtonState() {
+ private void updateEmergencyCallButtonState(int phoneState) {
if (mEmergencyCallButton != null) {
- mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton);
- if (mHideEmergencyCallButton) {
- mEmergencyCallButton.setVisibility(View.GONE);
- }
+ boolean showIfCapable = mShowEmergencyButtonByDefault || mUnlockDisabledDueToSimState;
+ mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
+ phoneState, showIfCapable);
}
}
@@ -571,7 +580,8 @@ class KeyguardStatusViewManager implements OnClickListener {
mShowingBatteryInfo = showBatteryInfo;
mPluggedIn = pluggedIn;
mBatteryLevel = batteryLevel;
- updateStatusLines(true);
+ final MutableInt tmpIcon = new MutableInt(0);
+ update(BATTERY_INFO, getAltTextMessage(tmpIcon));
}
public void onTimeChanged() {
@@ -579,15 +589,17 @@ class KeyguardStatusViewManager implements OnClickListener {
}
public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {
- setCarrierText(LockPatternUtils.getCarrierString(plmn, spn));
+ mPlmn = plmn;
+ mSpn = spn;
+ updateCarrierTextWithSimStatus(mSimState);
}
public void onRingerModeChanged(int state) {
}
- public void onPhoneStateChanged(String newState) {
- updateEmergencyCallButtonState();
+ public void onPhoneStateChanged(int phoneState) {
+ updateEmergencyCallButtonState(phoneState);
}
/** {@inheritDoc} */
@@ -599,7 +611,7 @@ class KeyguardStatusViewManager implements OnClickListener {
private SimStateCallback mSimStateCallback = new SimStateCallback() {
public void onSimStateChanged(State simState) {
- updateWithSimStatus(simState);
+ updateCarrierTextWithSimStatus(simState);
}
};
@@ -609,8 +621,21 @@ class KeyguardStatusViewManager implements OnClickListener {
}
}
- public void hideEmergencyCallButton() {
- mHideEmergencyCallButton = true;
+ /**
+ * Performs concentenation of PLMN/SPN
+ * @param plmn
+ * @param spn
+ * @return
+ */
+ private static CharSequence makeCarierString(CharSequence plmn, CharSequence spn) {
+ if (plmn != null && spn == null) {
+ return plmn;
+ } else if (plmn != null && spn != null) {
+ return plmn + "|" + spn;
+ } else if (plmn == null && spn != null) {
+ return spn;
+ } else {
+ return "";
+ }
}
-
}
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
index 958f555ff567..10cf3aaf5c0f 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java
@@ -88,6 +88,8 @@ public class KeyguardUpdateMonitor {
private ArrayList<InfoCallback> mInfoCallbacks = Lists.newArrayList();
private ArrayList<SimStateCallback> mSimStateCallbacks = Lists.newArrayList();
private ContentObserver mContentObserver;
+ private int mRingMode;
+ private int mPhoneState;
// messages for the handler
private static final int MSG_TIME_UPDATE = 301;
@@ -271,13 +273,21 @@ public class KeyguardUpdateMonitor {
protected void handlePhoneStateChanged(String newState) {
if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")");
+ if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) {
+ mPhoneState = TelephonyManager.CALL_STATE_IDLE;
+ } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(newState)) {
+ mPhoneState = TelephonyManager.CALL_STATE_OFFHOOK;
+ } else if (TelephonyManager.EXTRA_STATE_RINGING.equals(newState)) {
+ mPhoneState = TelephonyManager.CALL_STATE_RINGING;
+ }
for (int i = 0; i < mInfoCallbacks.size(); i++) {
- mInfoCallbacks.get(i).onPhoneStateChanged(newState);
+ mInfoCallbacks.get(i).onPhoneStateChanged(mPhoneState);
}
}
protected void handleRingerModeChange(int mode) {
if (DEBUG) Log.d(TAG, "handleRingerModeChange(" + mode + ")");
+ mRingMode = mode;
for (int i = 0; i < mInfoCallbacks.size(); i++) {
mInfoCallbacks.get(i).onRingerModeChanged(mode);
}
@@ -459,7 +469,7 @@ public class KeyguardUpdateMonitor {
* {@link TelephonyManager@EXTRA_STATE_RINGING}
* {@link TelephonyManager#EXTRA_STATE_OFFHOOK
*/
- void onPhoneStateChanged(String newState);
+ void onPhoneStateChanged(int phoneState);
/**
* Called when visibility of lockscreen clock changes, such as when
@@ -484,6 +494,13 @@ public class KeyguardUpdateMonitor {
public void registerInfoCallback(InfoCallback callback) {
if (!mInfoCallbacks.contains(callback)) {
mInfoCallbacks.add(callback);
+ // Notify listener of the current state
+ callback.onRefreshBatteryInfo(shouldShowBatteryInfo(), isPluggedIn(mBatteryStatus),
+ mBatteryLevel);
+ callback.onTimeChanged();
+ callback.onRingerModeChanged(mRingMode);
+ callback.onPhoneStateChanged(mPhoneState);
+ callback.onRefreshCarrierInfo(mTelephonyPlmn, mTelephonySpn);
} else {
if (DEBUG) Log.e(TAG, "Object tried to add another INFO callback",
new Exception("Whoops"));
@@ -497,6 +514,8 @@ public class KeyguardUpdateMonitor {
public void registerSimStateCallback(SimStateCallback callback) {
if (!mSimStateCallbacks.contains(callback)) {
mSimStateCallbacks.add(callback);
+ // Notify listener of the current state
+ callback.onSimStateChanged(mSimState);
} else {
if (DEBUG) Log.e(TAG, "Object tried to add another SIM callback",
new Exception("Whoops"));
@@ -574,4 +593,7 @@ public class KeyguardUpdateMonitor {
return mClockVisible;
}
+ public int getPhoneState() {
+ return mPhoneState;
+ }
}
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java b/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java
index 2fcf1dc3ebc2..59b546ddecfe 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewBase.java
@@ -99,6 +99,11 @@ public abstract class KeyguardViewBase extends FrameLayout {
abstract public void onScreenTurnedOn();
/**
+ * Called when the view needs to be shown.
+ */
+ abstract public void show();
+
+ /**
* Called when a key has woken the device to give us a chance to adjust our
* state according the the key. We are responsible for waking the device
* (by poking the wake lock) once we are ready.
@@ -127,15 +132,6 @@ public abstract class KeyguardViewBase extends FrameLayout {
*/
abstract public void cleanUp();
- /**
- * These were added to support FaceLock because the KeyguardViewManager needs to tell the
- * LockPatternKeyguardView when to bind and and unbind with FaceLock service. Although
- * implemented in LockPatternKeyguardView, these are not implemented in anything else
- * derived from KeyguardViewBase
- */
- abstract public void bindToFaceLock();
- abstract public void stopAndUnbindFromFaceLock();
-
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (shouldEventKeepScreenOnWhileKeyguardShowing(event)) {
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
index cbf1c90c5cc5..90972da1b591 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java
@@ -24,6 +24,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.graphics.Canvas;
+import android.os.IBinder;
import android.os.SystemProperties;
import android.util.Log;
import android.view.View;
@@ -59,6 +60,10 @@ public class KeyguardViewManager implements KeyguardWindowController {
private boolean mScreenOn = false;
+ public interface ShowListener {
+ void onShown(IBinder windowToken);
+ };
+
/**
* @param context Used to create views.
* @param viewManager Keyguard will be attached to this.
@@ -162,7 +167,7 @@ public class KeyguardViewManager implements KeyguardWindowController {
mKeyguardHost.addView(mKeyguardView, lp);
if (mScreenOn) {
- mKeyguardView.onScreenTurnedOn();
+ mKeyguardView.show();
}
}
@@ -200,20 +205,35 @@ public class KeyguardViewManager implements KeyguardWindowController {
mScreenOn = false;
if (mKeyguardView != null) {
mKeyguardView.onScreenTurnedOff();
-
- // When screen is turned off, need to unbind from FaceLock service if using FaceLock
- mKeyguardView.stopAndUnbindFromFaceLock();
}
}
- public synchronized void onScreenTurnedOn() {
+ public synchronized void onScreenTurnedOn(
+ final KeyguardViewManager.ShowListener showListener) {
if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
mScreenOn = true;
if (mKeyguardView != null) {
mKeyguardView.onScreenTurnedOn();
- // When screen is turned on, need to bind to FaceLock service if we are using FaceLock
- mKeyguardView.bindToFaceLock();
+ // Caller should wait for this window to be shown before turning
+ // on the screen.
+ if (mKeyguardHost.getVisibility() == View.VISIBLE) {
+ // Keyguard may be in the process of being shown, but not yet
+ // updated with the window manager... give it a chance to do so.
+ mKeyguardHost.post(new Runnable() {
+ @Override public void run() {
+ if (mKeyguardHost.getVisibility() == View.VISIBLE) {
+ showListener.onShown(mKeyguardHost.getWindowToken());
+ } else {
+ showListener.onShown(null);
+ }
+ }
+ });
+ } else {
+ showListener.onShown(null);
+ }
+ } else {
+ showListener.onShown(null);
}
}
@@ -251,12 +271,6 @@ public class KeyguardViewManager implements KeyguardWindowController {
public synchronized void hide() {
if (DEBUG) Log.d(TAG, "hide()");
- if (mKeyguardView != null) {
- // When view is hidden, need to unbind from FaceLock service if we are using FaceLock
- // e.g., when device becomes unlocked
- mKeyguardView.stopAndUnbindFromFaceLock();
- }
-
if (mKeyguardHost != null) {
mKeyguardHost.setVisibility(View.GONE);
// Don't do this right away, so we can let the view continue to animate
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index 64a9677ed9b5..3dae5ad4f104 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -116,7 +116,6 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
private static final int KEYGUARD_DONE_AUTHENTICATING = 11;
private static final int SET_HIDDEN = 12;
private static final int KEYGUARD_TIMEOUT = 13;
- private static final int REPORT_SHOW_DONE = 14;
/**
* The default amount of time we stay awake (used for all key input)
@@ -239,8 +238,6 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
private boolean mScreenOn = false;
- private boolean mShowPending = false;
-
// last known state of the cellular connection
private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
@@ -383,19 +380,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
} else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR) {
// Do not enable the keyguard if the prox sensor forced the screen off.
} else {
- if (!doKeyguardLocked() && why == WindowManagerPolicy.OFF_BECAUSE_OF_USER) {
- // The user has explicitly turned off the screen, causing it
- // to lock. We want to block here until the keyguard window
- // has shown, so the power manager won't complete the screen
- // off flow until that point, so we know it won't turn *on*
- // the screen until this is done.
- while (mShowPending) {
- try {
- wait();
- } catch (InterruptedException e) {
- }
- }
- }
+ doKeyguardLocked();
}
}
}
@@ -403,12 +388,12 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
/**
* Let's us know the screen was turned on.
*/
- public void onScreenTurnedOn() {
+ public void onScreenTurnedOn(KeyguardViewManager.ShowListener showListener) {
synchronized (this) {
mScreenOn = true;
mDelayedShowingSequence++;
if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence);
- notifyScreenOnLocked();
+ notifyScreenOnLocked(showListener);
}
}
@@ -573,7 +558,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
* work that will happen is done; returns false if the caller can wait for
* the keyguard to be shown.
*/
- private boolean doKeyguardLocked() {
+ private void doKeyguardLocked() {
// if another app is disabling us, don't show
if (!mExternallyEnabled) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
@@ -587,13 +572,13 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
// ends (see the broadcast receiver below)
// TODO: clean this up when we have better support at the window manager level
// for apps that wish to be on top of the keyguard
- return true;
+ return;
}
// if the keyguard is already showing, don't bother
if (mKeyguardViewManager.isShowing()) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing");
- return true;
+ return;
}
// if the setup wizard hasn't run yet, don't show
@@ -609,18 +594,16 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
if (!lockedOrMissing && !provisioned) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
+ " and the sim is not locked or missing");
- return true;
+ return;
}
if (mLockPatternUtils.isLockScreenDisabled()) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
- return true;
+ return;
}
if (DEBUG) Log.d(TAG, "doKeyguard: showing the lock screen");
- mShowPending = true;
showLocked();
- return false;
}
/**
@@ -658,9 +641,10 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
* @see #onScreenTurnedOn()
* @see #handleNotifyScreenOn
*/
- private void notifyScreenOnLocked() {
+ private void notifyScreenOnLocked(KeyguardViewManager.ShowListener showListener) {
if (DEBUG) Log.d(TAG, "notifyScreenOnLocked");
- mHandler.sendEmptyMessage(NOTIFY_SCREEN_ON);
+ Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, showListener);
+ mHandler.sendMessage(msg);
}
/**
@@ -782,7 +766,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
// Don't play lockscreen SFX if the screen went off due to
// timeout.
mSuppressNextLockSound = true;
-
+
doKeyguardLocked();
}
}
@@ -793,7 +777,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState) // call ending
&& !mScreenOn // screen off
&& mExternallyEnabled) { // not disabled by any app
-
+
// note: this is a way to gracefully reenable the keyguard when the call
// ends and the screen is off without always reenabling the keyguard
// each time the screen turns off while in call (and having an occasional ugly
@@ -974,7 +958,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
handleNotifyScreenOff();
return;
case NOTIFY_SCREEN_ON:
- handleNotifyScreenOn();
+ handleNotifyScreenOn((KeyguardViewManager.ShowListener)msg.obj);
return;
case WAKE_WHEN_READY:
handleWakeWhenReady(msg.arg1);
@@ -996,12 +980,6 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
doKeyguardLocked();
}
break;
- case REPORT_SHOW_DONE:
- synchronized (KeyguardViewMediator.this) {
- mShowPending = false;
- KeyguardViewMediator.this.notifyAll();
- }
- break;
}
}
};
@@ -1076,6 +1054,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
if (sfx != null) {
sfx.setStreamType(AudioManager.STREAM_SYSTEM);
+ sfx.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);
sfx.play();
} else {
if (DEBUG) Log.d(TAG, "playSounds: failed to load ringtone from uri: "
@@ -1113,12 +1092,6 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
playSounds(true);
mShowKeyguardWakeLock.release();
-
- // We won't say the show is done yet because the view hierarchy
- // still needs to do the traversal. Posting this message allows
- // us to hold off until that is done.
- Message msg = mHandler.obtainMessage(REPORT_SHOW_DONE);
- mHandler.sendMessage(msg);
}
}
@@ -1284,10 +1257,10 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
* Handle message sent by {@link #notifyScreenOnLocked()}
* @see #NOTIFY_SCREEN_ON
*/
- private void handleNotifyScreenOn() {
+ private void handleNotifyScreenOn(KeyguardViewManager.ShowListener showListener) {
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleNotifyScreenOn");
- mKeyguardViewManager.onScreenTurnedOn();
+ mKeyguardViewManager.onScreenTurnedOn(showListener);
}
}
@@ -1297,7 +1270,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
}
/** {@inheritDoc} */
- public void onPhoneStateChanged(String newState) {
+ public void onPhoneStateChanged(int phoneState) {
// ignored
}
diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 1d311d658971..2c7f86d71844 100644
--- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -46,6 +46,8 @@ import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -74,7 +76,7 @@ import java.io.IOException;
* {@link com.android.internal.policy.impl.KeyguardViewManager}
* via its {@link com.android.internal.policy.impl.KeyguardViewCallback}, as appropriate.
*/
-public class LockPatternKeyguardView extends KeyguardViewBase {
+public class LockPatternKeyguardView extends KeyguardViewBase implements Handler.Callback {
private static final int TRANSPORT_USERACTIVITY_TIMEOUT = 10000;
@@ -103,9 +105,19 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
// The following were added to support FaceLock
private IFaceLockInterface mFaceLockService;
private boolean mBoundToFaceLockService = false;
- private boolean mFaceLockServiceRunning = false;
private View mFaceLockAreaView;
+ private boolean mFaceLockServiceRunning = false;
+ private final Object mFaceLockServiceRunningLock = new Object();
+
+ private Handler mHandler;
+ private final int MSG_SHOW_FACELOCK_AREA_VIEW = 0;
+ private final int MSG_HIDE_FACELOCK_AREA_VIEW = 1;
+
+ // Long enough to stay black while dialer comes up
+ // Short enough to not be black if the user goes back immediately
+ private final int FACELOCK_VIEW_AREA_EMERGENCY_HIDE_TIMEOUT = 1000;
+
/**
* The current {@link KeyguardScreen} will use this to communicate back to us.
*/
@@ -244,6 +256,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
KeyguardWindowController controller) {
super(context);
+ mHandler = new Handler(this);
mConfiguration = context.getResources().getConfiguration();
mEnableFallback = false;
mRequiresSim = TextUtils.isEmpty(SystemProperties.get("keyguard.no_require_sim"));
@@ -302,6 +315,13 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
public void takeEmergencyCallAction() {
+ // FaceLock must be stopped if it is running when emergency call is pressed
+ stopAndUnbindFromFaceLock();
+
+ // Delay hiding FaceLock area so unlock doesn't display while dialer is coming up
+ mHandler.sendEmptyMessageDelayed(MSG_HIDE_FACELOCK_AREA_VIEW,
+ FACELOCK_VIEW_AREA_EMERGENCY_HIDE_TIMEOUT);
+
pokeWakelock(EMERGENCY_CALL_TIMEOUT);
if (TelephonyManager.getDefault().getCallState()
== TelephonyManager.CALL_STATE_OFFHOOK) {
@@ -484,16 +504,38 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
} else {
((KeyguardScreen) mUnlockScreen).onPause();
}
+
+ // When screen is turned off, need to unbind from FaceLock service if using FaceLock
+ stopAndUnbindFromFaceLock();
}
@Override
public void onScreenTurnedOn() {
mScreenOn = true;
+ show();
+
+ // When screen is turned on, need to bind to FaceLock service if we are using FaceLock
+ // But only if not dealing with a call
+ if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE) {
+ bindToFaceLock();
+ } else {
+ mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
+ }
+ }
+
+ @Override
+ public void show() {
if (mMode == Mode.LockScreen) {
((KeyguardScreen) mLockScreen).onResume();
} else {
((KeyguardScreen) mUnlockScreen).onResume();
}
+
+ if (mLockPatternUtils.usingBiometricWeak()) {
+ mHandler.sendEmptyMessage(MSG_SHOW_FACELOCK_AREA_VIEW);
+ } else {
+ mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW);
+ }
}
private void recreateLockScreen() {
@@ -523,6 +565,11 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
@Override
protected void onDetachedFromWindow() {
removeCallbacks(mRecreateRunnable);
+
+ // When view is hidden, need to unbind from FaceLock service if we are using FaceLock
+ // e.g., when device becomes unlocked
+ stopAndUnbindFromFaceLock();
+
super.onDetachedFromWindow();
}
@@ -531,7 +578,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
mShowLockBeforeUnlock = resources.getBoolean(R.bool.config_enableLockBeforeUnlockScreen);
mConfiguration = newConfig;
if (DEBUG_CONFIGURATION) Log.v(TAG, "**** re-creating lock screen since config changed");
- updateScreen(mMode, true /* force */);
+ removeCallbacks(mRecreateRunnable);
+ post(mRecreateRunnable);
}
@Override
@@ -593,10 +641,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
}
private boolean isSecure() {
- // TODO: make this work with SIM and Account cases below.
- boolean usingBiometric = mLockPatternUtils.usingBiometricWeak();
- if (usingBiometric && mLockPatternUtils.isBiometricEnabled())
- return true;
UnlockMode unlockMode = getUnlockMode();
boolean secure = false;
switch (unlockMode) {
@@ -704,12 +748,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
mKeyguardScreenCallback,
mUpdateMonitor.getFailedAttempts());
view.setEnableFallback(mEnableFallback);
-
- // TODO(bcolonna): For pattern unlock, it can give us the view where the pattern is
- // displayed and FaceLock can draw in that area.
- // For other views it's not so simple and we should probably change how the FaceLock
- // area is determined.
- mFaceLockAreaView = view.getUnlockAreaView();
unlockView = view;
} else if (unlockMode == UnlockMode.SimPuk) {
unlockView = new SimPukUnlockScreen(
@@ -759,6 +797,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
throw new IllegalArgumentException("unknown unlock mode " + unlockMode);
}
initializeTransportControlView(unlockView);
+ initializeFaceLockAreaView(unlockView); // Only shows view if FaceLock is enabled
+
mUnlockScreenMode = unlockMode;
return unlockView;
}
@@ -938,6 +978,36 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
// Everything below pertains to FaceLock - might want to separate this out
+ // Only pattern and pin unlock screens actually have a view for the FaceLock area, so it's not
+ // uncommon for it to not exist. But if it does exist, we need to make sure it's shown (hiding
+ // the fallback) if FaceLock is enabled, and make sure it's hidden (showing the unlock) if
+ // FaceLock is disabled
+ private void initializeFaceLockAreaView(View view) {
+ mFaceLockAreaView = view.findViewById(R.id.faceLockAreaView);
+ if (mFaceLockAreaView == null) {
+ if (DEBUG) Log.d(TAG, "Layout does not have faceLockAreaView");
+ }
+ }
+
+ // Handles covering or exposing FaceLock area on the client side when FaceLock starts or stops
+ // This needs to be done in a handler because the call could be coming from a callback from the
+ // FaceLock service that is in a thread that can't modify the UI
+ @Override
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_SHOW_FACELOCK_AREA_VIEW:
+ mFaceLockAreaView.setVisibility(View.VISIBLE);
+ break;
+ case MSG_HIDE_FACELOCK_AREA_VIEW:
+ mFaceLockAreaView.setVisibility(View.GONE);
+ break;
+ default:
+ Log.w(TAG, "Unhandled message");
+ return false;
+ }
+ return true;
+ }
+
// Binds to FaceLock service, but does not tell it to start
public void bindToFaceLock() {
if (mLockPatternUtils.usingBiometricWeak()) {
@@ -949,9 +1019,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
if (DEBUG) Log.d(TAG, "after bind to FaceLock service");
mBoundToFaceLockService = true;
} else {
- // On startup I've seen onScreenTurnedOn() get called twice without
- // onScreenTurnedOff() being called in between, which can cause this (bcolonna)
- if (DEBUG) Log.w(TAG, "Attempt to bind to FaceLock when already bound");
+ Log.w(TAG, "Attempt to bind to FaceLock when already bound");
}
}
}
@@ -969,7 +1037,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
} else {
// This could probably happen after the session when someone activates FaceLock
// because it wasn't active when the phone was turned on
- if (DEBUG) Log.w(TAG, "Attempt to unbind from FaceLock when not bound");
+ Log.w(TAG, "Attempt to unbind from FaceLock when not bound");
}
}
}
@@ -986,24 +1054,21 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
throw new RuntimeException("Remote exception");
}
- // TODO(bcolonna): Need to set location properly (only works for pattern view now)
if (mFaceLockAreaView != null) {
- int[] unlockLocationOnScreen = new int[2];
- mFaceLockAreaView.getLocationOnScreen(unlockLocationOnScreen);
- int x = unlockLocationOnScreen[0];
- int y = unlockLocationOnScreen[1];
- int w = mFaceLockAreaView.getWidth();
- int h = mFaceLockAreaView.getHeight();
- if (DEBUG) Log.d(TAG, "(x,y) (wxh): (" + x + "," + y + ") (" + w + "x" + h + ")");
- startFaceLock(mFaceLockAreaView.getWindowToken(), x, y, w, h);
+ startFaceLock(mFaceLockAreaView.getWindowToken(),
+ mFaceLockAreaView.getLeft(), mFaceLockAreaView.getTop(),
+ mFaceLockAreaView.getWidth(), mFaceLockAreaView.getHeight());
}
}
// Cleans up if FaceLock service unexpectedly disconnects
@Override
public void onServiceDisconnected(ComponentName className) {
- mFaceLockService = null;
- if (DEBUG) Log.w(TAG, "Unexpected disconnect from FaceLock service");
+ synchronized(mFaceLockServiceRunningLock) {
+ mFaceLockService = null;
+ mFaceLockServiceRunning = false;
+ }
+ Log.w(TAG, "Unexpected disconnect from FaceLock service");
}
};
@@ -1011,16 +1076,18 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
public void startFaceLock(IBinder windowToken, int x, int y, int h, int w)
{
if (mLockPatternUtils.usingBiometricWeak()) {
- if (!mFaceLockServiceRunning) {
- if (DEBUG) Log.d(TAG, "Starting FaceLock");
- try {
- mFaceLockService.startUi(windowToken, x, y, h, w);
- } catch (RemoteException e) {
- throw new RuntimeException("Remote exception");
+ synchronized (mFaceLockServiceRunningLock) {
+ if (!mFaceLockServiceRunning) {
+ if (DEBUG) Log.d(TAG, "Starting FaceLock");
+ try {
+ mFaceLockService.startUi(windowToken, x, y, h, w);
+ } catch (RemoteException e) {
+ throw new RuntimeException("Remote exception");
+ }
+ mFaceLockServiceRunning = true;
+ } else {
+ if (DEBUG) Log.w(TAG, "startFaceLock() attempted while running");
}
- mFaceLockServiceRunning = true;
- } else {
- if (DEBUG) Log.w(TAG, "startFaceLock() attempted while running");
}
}
}
@@ -1032,14 +1099,16 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
// Note that attempting to stop FaceLock when it's not running is not an issue.
// FaceLock can return, which stops it and then we try to stop it when the
// screen is turned off. That's why we check.
- if (mFaceLockServiceRunning) {
- try {
- if (DEBUG) Log.d(TAG, "Stopping FaceLock");
- mFaceLockService.stopUi();
- } catch (RemoteException e) {
- throw new RuntimeException("Remote exception");
+ synchronized (mFaceLockServiceRunningLock) {
+ if (mFaceLockServiceRunning) {
+ try {
+ if (DEBUG) Log.d(TAG, "Stopping FaceLock");
+ mFaceLockService.stopUi();
+ } catch (RemoteException e) {
+ throw new RuntimeException("Remote exception");
+ }
+ mFaceLockServiceRunning = false;
}
- mFaceLockServiceRunning = false;
}
}
}
@@ -1050,27 +1119,21 @@ public class LockPatternKeyguardView extends KeyguardViewBase {
// Stops the FaceLock UI and indicates that the phone should be unlocked
@Override
public void unlock() {
- if (DEBUG) Log.d(TAG, "FaceLock unlock");
+ if (DEBUG) Log.d(TAG, "FaceLock unlock()");
+ mHandler.sendEmptyMessage(MSG_SHOW_FACELOCK_AREA_VIEW); // Keep fallback covered
stopFaceLock();
+
mKeyguardScreenCallback.keyguardDone(true);
mKeyguardScreenCallback.reportSuccessfulUnlockAttempt();
}
// Stops the FaceLock UI and exposes the backup method without unlocking
+ // This means either the user has cancelled out or FaceLock failed to recognize them
@Override
public void cancel() {
- // In this case, either the user has cancelled out, or FaceLock failed to recognize them
- if (DEBUG) Log.d(TAG, "FaceLock cancel");
- stopFaceLock();
- }
-
- // Stops the FaceLock UI and puts the phone to sleep
- @Override
- public void sleepDevice() {
- // In this case, it appears the phone has been turned on accidentally
- if (DEBUG) Log.d(TAG, "FaceLock accidental turn on");
+ if (DEBUG) Log.d(TAG, "FaceLock cancel()");
+ mHandler.sendEmptyMessage(MSG_HIDE_FACELOCK_AREA_VIEW); // Expose fallback
stopFaceLock();
- // TODO(bcolonna): how do we put the phone back to sleep (i.e., turn off the screen)
}
};
}
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 4f6df3659f67..3469483330d6 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -336,10 +336,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
}
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback);
-
- // LockScreen doesn't show the emergency call button by default
- mStatusViewManager.hideEmergencyCallButton();
+ mCallback, false);
setFocusable(true);
setFocusableInTouchMode(true);
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index 2f2d3b7c635d..6d2f2f29fc05 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -98,7 +98,7 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen
}
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback);
+ mCallback, true);
final int quality = lockPatternUtils.getKeyguardStoredPasswordQuality();
mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == quality
diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
index 0cafeb5a147f..9a6d2cc67f46 100644
--- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
@@ -171,7 +171,7 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
}
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor,
- mLockPatternUtils, mCallback);
+ mLockPatternUtils, mCallback, true);
mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
@@ -199,12 +199,6 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
setFocusableInTouchMode(true);
}
- // TODO(bcolonna): This is to tell FaceLock where to draw...but this covers up the wireless
- // service text, so we will want to change the way the area is specified
- public View getUnlockAreaView() {
- return mLockPatternView;
- }
-
public void setEnableFallback(boolean state) {
if (DEBUG) Log.d(TAG, "setEnableFallback(" + state + ")");
mEnableFallback = state;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 903b405218af..9205b9ac2d15 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -43,6 +43,7 @@ import android.app.KeyguardManager;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
@@ -63,6 +64,7 @@ import android.util.Log;
import android.util.SparseArray;
import android.util.TypedValue;
import android.view.ActionMode;
+import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.IRotationWatcher;
import android.view.IWindowManager;
@@ -990,7 +992,23 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* @return Whether the initialization was successful.
*/
protected boolean initializePanelMenu(final PanelFeatureState st) {
- final MenuBuilder menu = new MenuBuilder(getContext());
+ Context context = getContext();
+
+ // If we have an action bar, initialize the menu with a context themed for it.
+ if ((st.featureId == FEATURE_OPTIONS_PANEL || st.featureId == FEATURE_ACTION_BAR) &&
+ mActionBar != null) {
+ TypedValue outValue = new TypedValue();
+ Resources.Theme currentTheme = context.getTheme();
+ currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme,
+ outValue, true);
+ final int targetThemeRes = outValue.resourceId;
+
+ if (targetThemeRes != 0 && context.getThemeResId() != targetThemeRes) {
+ context = new ContextThemeWrapper(context, targetThemeRes);
+ }
+ }
+
+ final MenuBuilder menu = new MenuBuilder(context);
menu.setCallback(this);
st.setMenu(menu);
@@ -2135,7 +2153,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
com.android.internal.R.attr.actionModePopupWindowStyle);
mActionModePopup.setLayoutInScreenEnabled(true);
mActionModePopup.setLayoutInsetDecor(true);
- mActionModePopup.setClippingEnabled(false);
+ mActionModePopup.setFocusable(true);
+ mActionModePopup.setOutsideTouchable(false);
+ mActionModePopup.setTouchModal(false);
+ mActionModePopup.setWindowLayoutType(
+ WindowManager.LayoutParams.TYPE_APPLICATION);
mActionModePopup.setContentView(mActionModeView);
mActionModePopup.setWidth(MATCH_PARENT);
@@ -2144,10 +2166,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
com.android.internal.R.attr.actionBarSize, heightValue, true);
final int height = TypedValue.complexToDimensionPixelSize(heightValue.data,
mContext.getResources().getDisplayMetrics());
- mActionModePopup.setHeight(height);
+ mActionModeView.setContentHeight(height);
+ mActionModePopup.setHeight(WRAP_CONTENT);
mShowActionModePopup = new Runnable() {
public void run() {
- mActionModePopup.showAtLocation(PhoneWindow.DecorView.this,
+ mActionModePopup.showAtLocation(
+ mActionModeView.getApplicationWindowToken(),
Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
}
};
@@ -2728,6 +2752,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
} else {
mActionBar = (ActionBarView) findViewById(com.android.internal.R.id.action_bar);
if (mActionBar != null) {
+ mActionBar.setWindowCallback(getCallback());
if (mActionBar.getTitle() == null) {
mActionBar.setWindowTitle(mTitle);
}
@@ -2740,28 +2765,30 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
boolean splitActionBar = false;
- if ((mUiOptions & ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW) != 0) {
+ final boolean splitWhenNarrow =
+ (mUiOptions & ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW) != 0;
+ if (splitWhenNarrow) {
splitActionBar = getContext().getResources().getBoolean(
com.android.internal.R.bool.split_action_bar_is_narrow);
} else {
splitActionBar = getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowSplitActionBar, false);
}
- if (splitActionBar) {
- final ActionBarContainer splitView = (ActionBarContainer) findViewById(
- com.android.internal.R.id.split_action_bar);
- if (splitView != null) {
- splitView.setVisibility(View.VISIBLE);
- mActionBar.setSplitActionBar(splitActionBar);
- mActionBar.setSplitView(splitView);
-
- final ActionBarContextView cab = (ActionBarContextView) findViewById(
- com.android.internal.R.id.action_context_bar);
- cab.setSplitView(splitView);
- } else {
- Log.e(TAG, "Requested split action bar with " +
- "incompatible window decor! Ignoring request.");
- }
+ final ActionBarContainer splitView = (ActionBarContainer) findViewById(
+ com.android.internal.R.id.split_action_bar);
+ if (splitView != null) {
+ mActionBar.setSplitView(splitView);
+ mActionBar.setSplitActionBar(splitActionBar);
+ mActionBar.setSplitWhenNarrow(splitWhenNarrow);
+
+ final ActionBarContextView cab = (ActionBarContextView) findViewById(
+ com.android.internal.R.id.action_context_bar);
+ cab.setSplitView(splitView);
+ cab.setSplitActionBar(splitActionBar);
+ cab.setSplitWhenNarrow(splitWhenNarrow);
+ } else if (splitActionBar) {
+ Log.e(TAG, "Requested split action bar with " +
+ "incompatible window decor! Ignoring request.");
}
// Post the panel invalidate for later; avoid application onCreateOptionsMenu
@@ -3467,6 +3494,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
public boolean onOpenSubMenu(MenuBuilder subMenu) {
+ if (subMenu == null) return false;
+
// Set a simple callback for the submenu
subMenu.setCallback(this);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 10447ad490f5..968180ccf06d 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -40,8 +40,10 @@ import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Binder;
+import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.os.LocalPowerManager;
import android.os.Message;
import android.os.Messenger;
@@ -278,13 +280,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int mUserRotationMode = WindowManagerPolicy.USER_ROTATION_FREE;
int mUserRotation = Surface.ROTATION_0;
- boolean mAllowAllRotations;
+ int mAllowAllRotations = -1;
boolean mCarDockEnablesAccelerometer;
boolean mDeskDockEnablesAccelerometer;
int mLidKeyboardAccessibility;
int mLidNavigationAccessibility;
int mLongPressOnPowerBehavior = -1;
- boolean mScreenOn = false;
+ boolean mScreenOnEarly = false;
+ boolean mScreenOnFully = false;
boolean mOrientationSensorEnabled = false;
int mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
static final int DEFAULT_ACCELEROMETER_ROTATION = 0;
@@ -382,9 +385,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
int mPortraitRotation = 0; // default portrait rotation
int mUpsideDownRotation = 0; // "other" portrait rotation
- // Nothing to see here, move along...
- int mFancyRotationAnimation;
-
// What we do when the user long presses on home
private int mLongPressOnHomeBehavior = -1;
@@ -436,12 +436,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override public void onChange(boolean selfChange) {
updateSettings();
- try {
- mWindowManager.setRotation(USE_LAST_ROTATION, false,
- mFancyRotationAnimation);
- } catch (RemoteException e) {
- // Ignore
- }
+ updateRotation(false);
}
}
@@ -451,48 +446,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
@Override
- public void onOrientationChanged(int rotation) {
- // Send updates based on orientation value
- if (localLOGV) Log.v(TAG, "onOrientationChanged, rotation changed to " +rotation);
- try {
- mWindowManager.setRotation(rotation, false,
- mFancyRotationAnimation);
- } catch (RemoteException e) {
- // Ignore
-
- }
- }
+ public void onProposedRotationChanged(int rotation) {
+ if (localLOGV) Log.v(TAG, "onProposedRotationChanged, rotation=" + rotation);
+ updateRotation(false);
+ }
}
MyOrientationListener mOrientationListener;
- boolean useSensorForOrientationLp(int appOrientation) {
- // The app says use the sensor.
- if (appOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT) {
- return true;
- }
- // The user preference says we can rotate, and the app is willing to rotate.
- if (mAccelerometerDefault != 0 &&
- (appOrientation == ActivityInfo.SCREEN_ORIENTATION_USER
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)) {
- return true;
- }
- // We're in a dock that has a rotation affinity, and the app is willing to rotate.
- if ((mCarDockEnablesAccelerometer && mDockMode == Intent.EXTRA_DOCK_STATE_CAR)
- || (mDeskDockEnablesAccelerometer && mDockMode == Intent.EXTRA_DOCK_STATE_DESK)) {
- // Note we override the nosensor flag here.
- if (appOrientation == ActivityInfo.SCREEN_ORIENTATION_USER
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
- || appOrientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) {
- return true;
- }
- }
- // Else, don't use the sensor.
- return false;
- }
-
/*
* We always let the sensor be switched on by default except when
* the user has explicitly disabled sensor based rotation or when the
@@ -544,11 +504,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
//Could have been invoked due to screen turning on or off or
//change of the currently visible window's orientation
- if (localLOGV) Log.v(TAG, "Screen status="+mScreenOn+
+ if (localLOGV) Log.v(TAG, "Screen status="+mScreenOnEarly+
", current orientation="+mCurrentAppOrientation+
", SensorEnabled="+mOrientationSensorEnabled);
boolean disable = true;
- if (mScreenOn) {
+ if (mScreenOnEarly) {
if (needSensorRunningLp()) {
disable = false;
//enable listener if not already enabled
@@ -693,6 +653,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mKeyguardMediator = new KeyguardViewMediator(context, this, powerManager);
mHandler = new Handler();
mOrientationListener = new MyOrientationListener(mContext);
+ try {
+ mOrientationListener.setCurrentRotation(windowManager.getRotation());
+ } catch (RemoteException ex) { }
SettingsObserver settingsObserver = new SettingsObserver(mHandler);
settingsObserver.observe();
mShortcutManager = new ShortcutManager(context, mHandler);
@@ -720,8 +683,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
com.android.internal.R.integer.config_carDockRotation);
mDeskDockRotation = readRotation(
com.android.internal.R.integer.config_deskDockRotation);
- mAllowAllRotations = mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_allowAllRotations);
mCarDockEnablesAccelerometer = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_carDockEnablesAccelerometer);
mDeskDockEnablesAccelerometer = mContext.getResources().getBoolean(
@@ -757,6 +718,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// Controls rotation and the like.
initializeHdmiState();
+
+ // Match current screen state.
+ if (mPowerManager.isScreenOn()) {
+ screenTurningOn(null);
+ } else {
+ screenTurnedOff(WindowManagerPolicy.OFF_BECAUSE_OF_USER);
+ }
}
public void setInitialDisplaySize(int width, int height) {
@@ -823,8 +791,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mIncallPowerBehavior = Settings.Secure.getInt(resolver,
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
- mFancyRotationAnimation = Settings.System.getInt(resolver,
- "fancy_rotation_anim", 0) != 0 ? 0x80 : 0;
int accelerometerDefault = Settings.System.getInt(resolver,
Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);
@@ -879,7 +845,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
updateScreenSaverTimeoutLocked();
}
if (updateRotation) {
- updateRotation(0);
+ updateRotation(true);
}
if (addView != null) {
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
@@ -1022,8 +988,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
/** {@inheritDoc} */
public void adjustConfigurationLw(Configuration config) {
readLidState();
-
- mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN);
+ updateKeyboardVisibility();
if (config.keyboard == Configuration.KEYBOARD_NOKEYS) {
config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_YES;
@@ -2091,11 +2056,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
/** {@inheritDoc} */
public void animatingWindowLw(WindowState win,
WindowManager.LayoutParams attrs) {
+ if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
+ + win.isVisibleOrBehindKeyguardLw());
if (mTopFullscreenOpaqueWindowState == null &&
win.isVisibleOrBehindKeyguardLw()) {
if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
mForceStatusBar = true;
- }
+ }
if (attrs.type >= FIRST_APPLICATION_WINDOW
&& attrs.type <= LAST_APPLICATION_WINDOW
&& attrs.x == 0 && attrs.y == 0
@@ -2134,10 +2101,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
: null;
if (mStatusBar != null) {
- if (localLOGV) Log.i(TAG, "force=" + mForceStatusBar
+ if (DEBUG_LAYOUT) Log.i(TAG, "force=" + mForceStatusBar
+ " top=" + mTopFullscreenOpaqueWindowState);
if (mForceStatusBar) {
- if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar");
+ if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: forced");
if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT;
} else if (mTopFullscreenOpaqueWindowState != null) {
if (localLOGV) {
@@ -2165,11 +2132,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}});
}
- } else if (localLOGV) {
+ } else if (DEBUG_LAYOUT) {
Log.v(TAG, "Preventing status bar from hiding by policy");
}
} else {
- if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar");
+ if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: top is not fullscreen");
if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT;
}
}
@@ -2290,8 +2257,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) {
// lid changed state
mLidOpen = lidOpen ? LID_OPEN : LID_CLOSED;
+ updateKeyboardVisibility();
+
boolean awakeNow = mKeyguardMediator.doLidChangeTq(lidOpen);
- updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
+ updateRotation(true);
if (awakeNow) {
// If the lid is opening and we don't have to keep the
// keyguard up, then we can turn on the screen
@@ -2320,7 +2289,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
void setHdmiPlugged(boolean plugged) {
if (mHdmiPlugged != plugged) {
mHdmiPlugged = plugged;
- updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
+ updateRotation(true);
Intent intent = new Intent(ACTION_HDMI_PLUGGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
intent.putExtra(EXTRA_HDMI_PLUGGED_STATE, plugged);
@@ -2797,7 +2766,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} catch (RemoteException e) {
}
}
- updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
+ updateRotation(true);
updateOrientationListenerLp();
}
};
@@ -2806,7 +2775,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
public void screenTurnedOff(int why) {
EventLog.writeEvent(70000, 0);
synchronized (mLock) {
- mScreenOn = false;
+ mScreenOnEarly = false;
+ mScreenOnFully = false;
}
mKeyguardMediator.onScreenTurnedOff(why);
synchronized (mLock) {
@@ -2814,25 +2784,49 @@ public class PhoneWindowManager implements WindowManagerPolicy {
updateLockScreenTimeout();
updateScreenSaverTimeoutLocked();
}
- try {
- mWindowManager.waitForAllDrawn();
- } catch (RemoteException e) {
- }
- // Wait for one frame to give surface flinger time to do its
- // compositing. Yes this is a hack, but I am really not up right now for
- // implementing some mechanism to block until SF is done. :p
- try {
- Thread.sleep(20);
- } catch (InterruptedException e) {
- }
}
/** {@inheritDoc} */
- public void screenTurnedOn() {
+ public void screenTurningOn(final ScreenOnListener screenOnListener) {
EventLog.writeEvent(70000, 1);
- mKeyguardMediator.onScreenTurnedOn();
+ if (false) {
+ RuntimeException here = new RuntimeException("here");
+ here.fillInStackTrace();
+ Slog.i(TAG, "Screen turning on...", here);
+ }
+ if (screenOnListener != null) {
+ mKeyguardMediator.onScreenTurnedOn(new KeyguardViewManager.ShowListener() {
+ @Override public void onShown(IBinder windowToken) {
+ if (windowToken != null) {
+ try {
+ mWindowManager.waitForWindowDrawn(windowToken,
+ new IRemoteCallback.Stub() {
+ @Override public void sendResult(Bundle data) {
+ Slog.i(TAG, "Lock screen displayed!");
+ screenOnListener.onScreenOn();
+ synchronized (mLock) {
+ mScreenOnFully = true;
+ }
+ }
+ });
+ } catch (RemoteException e) {
+ }
+ } else {
+ Slog.i(TAG, "No lock screen!");
+ screenOnListener.onScreenOn();
+ synchronized (mLock) {
+ mScreenOnFully = true;
+ }
+ }
+ }
+ });
+ } else {
+ synchronized (mLock) {
+ mScreenOnFully = true;
+ }
+ }
synchronized (mLock) {
- mScreenOn = true;
+ mScreenOnEarly = true;
updateOrientationListenerLp();
updateLockScreenTimeout();
updateScreenSaverTimeoutLocked();
@@ -2840,8 +2834,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
/** {@inheritDoc} */
- public boolean isScreenOn() {
- return mScreenOn;
+ public boolean isScreenOnEarly() {
+ return mScreenOnEarly;
+ }
+
+ /** {@inheritDoc} */
+ public boolean isScreenOnFully() {
+ return mScreenOnFully;
}
/** {@inheritDoc} */
@@ -2874,6 +2873,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
return mKeyguardMediator.isInputRestricted();
}
+ public void dismissKeyguardLw() {
+ if (!mKeyguardMediator.isSecure()) {
+ if (mKeyguardMediator.isShowing()) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ mKeyguardMediator.keyguardDone(false, true);
+ }
+ });
+ }
+ }
+ }
+
void sendCloseSystemWindows() {
sendCloseSystemWindows(mContext, null);
}
@@ -2890,10 +2901,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
}
-
- public int rotationForOrientationLw(int orientation, int lastRotation,
- boolean displayEnabled) {
+ @Override
+ public int rotationForOrientationLw(int orientation, int lastRotation) {
if (false) {
Slog.v(TAG, "rotationForOrientationLw(orient="
+ orientation + ", last=" + lastRotation
@@ -2904,128 +2914,142 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
synchronized (mLock) {
+ int sensorRotation = mOrientationListener.getProposedRotation(); // may be -1
+ if (sensorRotation < 0) {
+ sensorRotation = lastRotation;
+ }
+
+ int preferredRotation = -1;
+ if (mHdmiPlugged) {
+ // Ignore sensor when plugged into HDMI.
+ preferredRotation = mLandscapeRotation;
+ } else if (mLidOpen == LID_OPEN && mLidOpenRotation >= 0) {
+ // Ignore sensor when lid switch is open and rotation is forced.
+ preferredRotation = mLidOpenRotation;
+ } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR
+ && (mCarDockEnablesAccelerometer || mCarDockRotation >= 0)) {
+ // Ignore sensor when in car dock unless explicitly enabled.
+ // This case can override the behavior of NOSENSOR, and can also
+ // enable 180 degree rotation while docked.
+ preferredRotation = mCarDockEnablesAccelerometer
+ ? sensorRotation : mCarDockRotation;
+ } else if (mDockMode == Intent.EXTRA_DOCK_STATE_DESK
+ && (mDeskDockEnablesAccelerometer || mDeskDockRotation >= 0)) {
+ // Ignore sensor when in desk dock unless explicitly enabled.
+ // This case can override the behavior of NOSENSOR, and can also
+ // enable 180 degree rotation while docked.
+ preferredRotation = mDeskDockEnablesAccelerometer
+ ? sensorRotation : mDeskDockRotation;
+ } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
+ // Ignore sensor when user locked rotation.
+ preferredRotation = mUserRotation;
+ } else if ((mAccelerometerDefault != 0
+ && (orientation == ActivityInfo.SCREEN_ORIENTATION_USER
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED))
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT) {
+ // Otherwise, use sensor only if requested by the application or enabled
+ // by default for USER or UNSPECIFIED modes. Does not apply to NOSENSOR.
+ if (mAllowAllRotations < 0) {
+ // Can't read this during init() because the context doesn't
+ // have display metrics at that time so we cannot determine
+ // tablet vs. phone then.
+ mAllowAllRotations = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowAllRotations) ? 1 : 0;
+ }
+ if (sensorRotation != Surface.ROTATION_180
+ || mAllowAllRotations == 1
+ || orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR) {
+ preferredRotation = sensorRotation;
+ } else {
+ preferredRotation = lastRotation;
+ }
+ }
+
+ // TODO: Sometimes, we might want to override the application-requested
+ // orientation, such as when HDMI is plugged in or when docked.
+ // We can do that by modifying the appropriate cases above to return
+ // the preferred orientation directly instead of continuing on down here.
+
switch (orientation) {
case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
- //always return portrait if orientation set to portrait
+ // Always return portrait if orientation set to portrait.
return mPortraitRotation;
+
case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
- //always return landscape if orientation set to landscape
+ // Always return landscape if orientation set to landscape.
return mLandscapeRotation;
+
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
- //always return portrait if orientation set to portrait
+ // Always return portrait if orientation set to portrait.
return mUpsideDownRotation;
+
case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
- //always return seascape if orientation set to reverse landscape
+ // Always return seascape if orientation set to reverse landscape.
return mSeascapeRotation;
+
case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
- //return either landscape rotation based on the sensor
- return getCurrentLandscapeRotation(lastRotation);
- case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
- return getCurrentPortraitRotation(lastRotation);
- }
+ // Return either landscape rotation.
+ if (isLandscapeOrSeascape(preferredRotation)) {
+ return preferredRotation;
+ }
+ if (isLandscapeOrSeascape(lastRotation)) {
+ return lastRotation;
+ }
+ return mLandscapeRotation;
- // case for nosensor meaning ignore sensor and consider only lid
- // or orientation sensor disabled
- //or case.unspecified
- if (mHdmiPlugged) {
- return mLandscapeRotation;
- } else if (mLidOpen == LID_OPEN) {
- return mLidOpenRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
- return mCarDockRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_DESK && mDeskDockRotation >= 0) {
- return mDeskDockRotation;
- } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- return mUserRotation;
- } else {
- if (useSensorForOrientationLp(orientation)) {
- // Disable 180 degree rotation unless allowed by default for the device
- // or explicitly requested by the application.
- int rotation = mOrientationListener.getCurrentRotation(lastRotation);
- if (rotation == Surface.ROTATION_180
- && !mAllowAllRotations
- && orientation != ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR) {
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
+ // Return either portrait rotation.
+ if (isAnyPortrait(preferredRotation)) {
+ return preferredRotation;
+ }
+ if (isAnyPortrait(lastRotation)) {
return lastRotation;
}
- return rotation;
- }
- return Surface.ROTATION_0;
- }
- }
- }
+ return mPortraitRotation;
- public int getLockedRotationLw() {
- synchronized (mLock) {
- if (false) {
- // Not yet working.
- if (mHdmiPlugged) {
+ default:
+ // For USER, UNSPECIFIED and NOSENSOR, just return the preferred
+ // orientation we already calculated.
+ if (preferredRotation >= 0) {
+ return preferredRotation;
+ }
return Surface.ROTATION_0;
- } else if (mLidOpen == LID_OPEN) {
- return mLidOpenRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
- return mCarDockRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_DESK && mDeskDockRotation >= 0) {
- return mDeskDockRotation;
- } else if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- return mUserRotation;
- }
}
- return -1;
}
}
- private int getCurrentLandscapeRotation(int lastRotation) {
- // if the user has locked rotation, we ignore the sensor
- if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- if (isLandscapeOrSeascape(mUserRotation)) {
- return mUserRotation;
- } else {
- // it seems odd to obey the sensor at all if rotation lock is enabled
- return mLandscapeRotation;
- }
- }
+ @Override
+ public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation) {
+ switch (orientation) {
+ case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
+ return isAnyPortrait(rotation);
+
+ case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
+ return isLandscapeOrSeascape(rotation);
- int sensorRotation = mOrientationListener.getCurrentRotation(lastRotation);
- if (isLandscapeOrSeascape(sensorRotation)) {
- return sensorRotation;
- }
- // try to preserve the old rotation if it was landscape
- if (isLandscapeOrSeascape(lastRotation)) {
- return lastRotation;
+ default:
+ return true;
}
- // default to one of the primary landscape rotation
- return mLandscapeRotation;
}
- private boolean isLandscapeOrSeascape(int sensorRotation) {
- return sensorRotation == mLandscapeRotation || sensorRotation == mSeascapeRotation;
+ @Override
+ public void setRotationLw(int rotation) {
+ mOrientationListener.setCurrentRotation(rotation);
}
- private int getCurrentPortraitRotation(int lastRotation) {
- // if the user has locked rotation, we ignore the sensor
- if (mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED) {
- if (isAnyPortrait(mUserRotation)) {
- return mUserRotation;
- } else {
- // it seems odd to obey the sensor at all if rotation lock is enabled
- return mPortraitRotation;
- }
- }
-
- int sensorRotation = mOrientationListener.getCurrentRotation(lastRotation);
- if (isAnyPortrait(sensorRotation)) {
- return sensorRotation;
- }
- // try to preserve the old rotation if it was portrait
- if (isAnyPortrait(lastRotation)) {
- return lastRotation;
- }
- // default to one of the primary portrait rotations
- return mPortraitRotation;
+ private boolean isLandscapeOrSeascape(int rotation) {
+ return rotation == mLandscapeRotation || rotation == mSeascapeRotation;
}
- private boolean isAnyPortrait(int sensorRotation) {
- return sensorRotation == mPortraitRotation || sensorRotation == mUpsideDownRotation;
+ private boolean isAnyPortrait(int rotation) {
+ return rotation == mPortraitRotation || rotation == mUpsideDownRotation;
}
@@ -3228,7 +3252,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
synchronized (mScreenSaverActivator) {
mHandler.removeCallbacks(mScreenSaverActivator);
- if (mScreenSaverEnabled && mScreenOn && mScreenSaverTimeout > 0) {
+ if (mScreenSaverEnabled && mScreenOnEarly && mScreenSaverTimeout > 0) {
if (localLOGV)
Log.v(TAG, "scheduling screensaver for " + mScreenSaverTimeout + "ms from now");
mHandler.postDelayed(mScreenSaverActivator, mScreenSaverTimeout);
@@ -3236,7 +3260,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (localLOGV) {
if (mScreenSaverTimeout == 0)
Log.v(TAG, "screen saver disabled by user");
- else if (!mScreenOn)
+ else if (!mScreenOnEarly)
Log.v(TAG, "screen saver disabled while screen off");
else
Log.v(TAG, "screen saver disabled by wakelock");
@@ -3257,7 +3281,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private void updateLockScreenTimeout() {
synchronized (mScreenLockTimeout) {
- boolean enable = (mAllowLockscreenWhenOn && mScreenOn && mKeyguardMediator.isSecure());
+ boolean enable = (mAllowLockscreenWhenOn && mScreenOnEarly && mKeyguardMediator.isSecure());
if (mLockScreenTimerActive != enable) {
if (enable) {
if (localLOGV) Log.v(TAG, "setting lockscreen timer");
@@ -3274,26 +3298,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
/** {@inheritDoc} */
public void enableScreenAfterBoot() {
readLidState();
- updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
+ updateKeyboardVisibility();
+
+ updateRotation(true);
}
- void updateRotation(int animFlags) {
+ private void updateKeyboardVisibility() {
mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN);
- int rotation = Surface.ROTATION_0;
- if (mHdmiPlugged) {
- rotation = Surface.ROTATION_0;
- } else if (mLidOpen == LID_OPEN) {
- rotation = mLidOpenRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
- rotation = mCarDockRotation;
- } else if (mDockMode == Intent.EXTRA_DOCK_STATE_DESK && mDeskDockRotation >= 0) {
- rotation = mDeskDockRotation;
- }
- //if lid is closed orientation will be portrait
+ }
+
+ void updateRotation(boolean alwaysSendConfiguration) {
try {
//set orientation on WindowManager
- mWindowManager.setRotation(rotation, true,
- mFancyRotationAnimation | animFlags);
+ mWindowManager.updateRotation(alwaysSendConfiguration);
} catch (RemoteException e) {
// Ignore
}
@@ -3466,7 +3483,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
public boolean allowKeyRepeat() {
// disable key repeat when screen is off
- return mScreenOn;
+ return mScreenOnEarly;
}
private void updateSystemUiVisibility() {
@@ -3522,7 +3539,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
pw.print(mLidKeyboardAccessibility);
pw.print(" mLidNavigationAccessibility="); pw.print(mLidNavigationAccessibility);
pw.print(" mLongPressOnPowerBehavior="); pw.println(mLongPressOnPowerBehavior);
- pw.print(prefix); pw.print("mScreenOn="); pw.print(mScreenOn);
+ pw.print(prefix); pw.print("mScreenOnEarly="); pw.print(mScreenOnEarly);
+ pw.print(" mScreenOnFully="); pw.print(mScreenOnFully);
pw.print(" mOrientationSensorEnabled="); pw.print(mOrientationSensorEnabled);
pw.print(" mHasSoftInput="); pw.println(mHasSoftInput);
pw.print(prefix); pw.print("mUnrestrictedScreen=("); pw.print(mUnrestrictedScreenLeft);
diff --git a/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java b/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
index 520d3021476d..6acd1c5898a8 100644
--- a/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/SimPukUnlockScreen.java
@@ -27,6 +27,7 @@ import com.android.internal.telephony.ITelephony;
import com.android.internal.widget.LockPatternUtils;
import android.text.Editable;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -40,21 +41,20 @@ import com.android.internal.R;
* Displays a dialer like interface to unlock the SIM PUK.
*/
public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
- View.OnClickListener {
+ View.OnClickListener, View.OnFocusChangeListener {
private static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
private final KeyguardUpdateMonitor mUpdateMonitor;
private final KeyguardScreenCallback mCallback;
+ private KeyguardStatusViewManager mKeyguardStatusViewManager;
private TextView mHeaderText;
private TextView mPukText;
private TextView mPinText;
-
private TextView mFocusedEntry;
- private TextView mOkButton;
-
+ private View mOkButton;
private View mDelPukButton;
private View mDelPinButton;
@@ -66,8 +66,6 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
private int mKeyboardHidden;
- private KeyguardStatusViewManager mKeyguardStatusViewManager;
-
private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
public SimPukUnlockScreen(Context context, Configuration configuration,
@@ -92,44 +90,33 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
}
mHeaderText = (TextView) findViewById(R.id.headerText);
+
mPukText = (TextView) findViewById(R.id.pukDisplay);
- mPukText.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- requestFocus(mPukText);
- mCallback.pokeWakelock();
- }
- });
mPinText = (TextView) findViewById(R.id.pinDisplay);
- mPinText.setOnClickListener(this);
-
mDelPukButton = findViewById(R.id.pukDel);
- mDelPukButton.setOnClickListener(this);
mDelPinButton = findViewById(R.id.pinDel);
- mDelPinButton.setOnClickListener(this);
+ mOkButton = findViewById(R.id.ok);
- mOkButton = (TextView) findViewById(R.id.ok);
-
- mHeaderText.setText(R.string.keyguard_password_enter_puk_code);
- mPukText.setFocusable(false);
- mPinText.setFocusable(false);
+ mDelPinButton.setOnClickListener(this);
+ mDelPukButton.setOnClickListener(this);
mOkButton.setOnClickListener(this);
- requestFocus(mPukText);
+ mHeaderText.setText(R.string.keyguard_password_enter_puk_code);
+ // To make marquee work
+ mHeaderText.setSelected(true);
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback);
+ lockpatternutils, callback, true);
- setFocusableInTouchMode(true);
- }
-
- private void requestFocus(TextView entry) {
- mFocusedEntry = entry;
- mFocusedEntry.setText("");
+ mPinText.setFocusableInTouchMode(true);
+ mPinText.setOnFocusChangeListener(this);
+ mPukText.setFocusableInTouchMode(true);
+ mPukText.setOnFocusChangeListener(this);
}
/** {@inheritDoc} */
public boolean needsInput() {
- return true;
+ return false;
}
/** {@inheritDoc} */
@@ -141,9 +128,6 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
public void onResume() {
// start fresh
mHeaderText.setText(R.string.keyguard_password_enter_puk_code);
- requestFocus(mPukText);
- mPinText.setText("");
-
mKeyguardStatusViewManager.onResume();
}
@@ -196,25 +180,32 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
public void onClick(View v) {
if (v == mDelPukButton) {
+ if (mFocusedEntry != mPukText)
+ mPukText.requestFocus();
final Editable digits = mPukText.getEditableText();
final int len = digits.length();
if (len > 0) {
digits.delete(len-1, len);
}
- mCallback.pokeWakelock();
} else if (v == mDelPinButton) {
+ if (mFocusedEntry != mPinText)
+ mPinText.requestFocus();
final Editable digits = mPinText.getEditableText();
final int len = digits.length();
if (len > 0) {
digits.delete(len-1, len);
}
- mCallback.pokeWakelock();
- } else if (v == mPinText) {
- requestFocus(mPinText);
- mCallback.pokeWakelock();
} else if (v == mOkButton) {
checkPuk();
}
+ mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
+
+ }
+
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if (hasFocus)
+ mFocusedEntry = (TextView)v;
}
private Dialog getSimUnlockProgressDialog() {
@@ -236,7 +227,6 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
// otherwise, display a message to the user, and don't submit.
mHeaderText.setText(R.string.invalidPuk);
mPukText.setText("");
- mCallback.pokeWakelock();
return;
}
@@ -245,7 +235,6 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
// otherwise, display a message to the user, and don't submit.
mHeaderText.setText(R.string.invalidPin);
mPinText.setText("");
- mCallback.pokeWakelock();
return;
}
@@ -267,7 +256,6 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
mPukText.setText("");
mPinText.setText("");
}
- mCallback.pokeWakelock();
}
}.start();
}
@@ -290,7 +278,7 @@ public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
if (len > 0) {
digits.delete(len-1, len);
}
- mCallback.pokeWakelock();
+ mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
return true;
}
diff --git a/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java b/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
index 1acf68172241..184748abe83f 100644
--- a/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/SimUnlockScreen.java
@@ -100,7 +100,7 @@ public class SimUnlockScreen extends LinearLayout implements KeyguardScreen, Vie
mOkButton.setOnClickListener(this);
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback);
+ lockpatternutils, callback, true);
setFocusableInTouchMode(true);
}
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index a58f64c3a989..01f5a6f433be 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -985,6 +985,10 @@ AudioFlinger::ThreadBase::~ThreadBase()
mNewParameters.clear();
// do not lock the mutex in destructor
releaseWakeLock_l();
+ if (mPowerManager != 0) {
+ sp<IBinder> binder = mPowerManager->asBinder();
+ binder->unlinkToDeath(mDeathRecipient);
+ }
}
void AudioFlinger::ThreadBase::exit()
@@ -7440,12 +7444,21 @@ void AudioFlinger::EffectChain::setEffectSuspendedAll_l(bool suspend)
}
}
+
+// The volume effect is used for automated tests only
+#ifndef OPENSL_ES_H_
+static const effect_uuid_t SL_IID_VOLUME_ = { 0x09e8ede0, 0xddde, 0x11db, 0xb4f6,
+ { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
+const effect_uuid_t * const SL_IID_VOLUME = &SL_IID_VOLUME_;
+#endif //OPENSL_ES_H_
+
bool AudioFlinger::EffectChain::isEffectEligibleForSuspend(const effect_descriptor_t& desc)
{
// auxiliary effects and visualizer are never suspended on output mix
if ((mSessionId == AUDIO_SESSION_OUTPUT_MIX) &&
(((desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) ||
- (memcmp(&desc.type, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0))) {
+ (memcmp(&desc.type, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0) ||
+ (memcmp(&desc.type, SL_IID_VOLUME, sizeof(effect_uuid_t)) == 0))) {
return false;
}
return true;
diff --git a/services/audioflinger/AudioResampler.cpp b/services/audioflinger/AudioResampler.cpp
index dca795c40d9e..9ee5a3034533 100644
--- a/services/audioflinger/AudioResampler.cpp
+++ b/services/audioflinger/AudioResampler.cpp
@@ -434,9 +434,9 @@ void AudioResamplerOrder1::AsmMono16Loop(int16_t *in, int32_t* maxOutPt, int32_t
// the following loop works on 2 frames
- ".Y4L01:\n"
+ "1:\n"
" cmp r8, r2\n" // curOut - maxCurOut
- " bcs .Y4L02\n"
+ " bcs 2f\n"
#define MO_ONE_FRAME \
" add r0, r1, r7, asl #1\n" /* in + inputIndex */\
@@ -460,8 +460,8 @@ void AudioResamplerOrder1::AsmMono16Loop(int16_t *in, int32_t* maxOutPt, int32_t
MO_ONE_FRAME // frame 2
" cmp r7, r3\n" // inputIndex - maxInIdx
- " bcc .Y4L01\n"
- ".Y4L02:\n"
+ " bcc 1b\n"
+ "2:\n"
" bic r6, r6, #0xC0000000\n" // phaseFraction & ...
// save modified values
@@ -541,9 +541,9 @@ void AudioResamplerOrder1::AsmStereo16Loop(int16_t *in, int32_t* maxOutPt, int32
// r13 sp
// r14
- ".Y5L01:\n"
+ "3:\n"
" cmp r8, r2\n" // curOut - maxCurOut
- " bcs .Y5L02\n"
+ " bcs 4f\n"
#define ST_ONE_FRAME \
" bic r6, r6, #0xC0000000\n" /* phaseFraction & ... */\
@@ -577,8 +577,8 @@ void AudioResamplerOrder1::AsmStereo16Loop(int16_t *in, int32_t* maxOutPt, int32
ST_ONE_FRAME // frame 1
" cmp r7, r3\n" // inputIndex - maxInIdx
- " bcc .Y5L01\n"
- ".Y5L02:\n"
+ " bcc 3b\n"
+ "4:\n"
" bic r6, r6, #0xC0000000\n" // phaseFraction & ...
// save modified values
diff --git a/services/java/com/android/server/AlarmManagerService.java b/services/java/com/android/server/AlarmManagerService.java
index 5ffcdc50e800..b8c44d9cf99a 100644
--- a/services/java/com/android/server/AlarmManagerService.java
+++ b/services/java/com/android/server/AlarmManagerService.java
@@ -477,7 +477,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
: bs.filterStats.entrySet()) {
pw.print(" "); pw.print(fe.getValue().count);
pw.print(" alarms: ");
- pw.println(fe.getKey().getIntent().toShortString(true, false));
+ pw.println(fe.getKey().getIntent().toShortString(false, true, false));
}
}
}
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 2938c45e2c53..e30ce72e5790 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -34,6 +34,7 @@ import android.app.backup.IRestoreSession;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -3379,7 +3380,8 @@ class BackupManagerService extends IBackupManager.Stub {
Uri packageUri = Uri.fromFile(apkFile);
mInstallObserver.reset();
mPackageManager.installPackage(packageUri, mInstallObserver,
- PackageManager.INSTALL_REPLACE_EXISTING, installerPackage);
+ PackageManager.INSTALL_REPLACE_EXISTING | PackageManager.INSTALL_FROM_ADB,
+ installerPackage);
mInstallObserver.waitForCompletion();
if (mInstallObserver.getResult() != PackageManager.INSTALL_SUCCEEDED) {
@@ -4372,8 +4374,13 @@ class BackupManagerService extends IBackupManager.Stub {
ParcelFileDescriptor.MODE_TRUNCATE);
if (mTransport.getRestoreData(mBackupData) != BackupConstants.TRANSPORT_OK) {
+ // Transport-level failure, so we wind everything up and
+ // terminate the restore operation.
Slog.e(TAG, "Error getting restore data for " + packageName);
EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
+ mBackupData.close();
+ mBackupDataName.delete();
+ executeNextState(RestoreState.FINAL);
return;
}
@@ -4765,6 +4772,11 @@ class BackupManagerService extends IBackupManager.Stub {
}
}
+ boolean deviceIsProvisioned() {
+ final ContentResolver resolver = mContext.getContentResolver();
+ return (Settings.Secure.getInt(resolver, Settings.Secure.DEVICE_PROVISIONED, 0) != 0);
+ }
+
// Run a *full* backup pass for the given package, writing the resulting data stream
// to the supplied file descriptor. This method is synchronous and does not return
// to the caller until the backup has been completed.
@@ -4785,12 +4797,19 @@ class BackupManagerService extends IBackupManager.Stub {
}
}
- if (DEBUG) Slog.v(TAG, "Requesting full backup: apks=" + includeApks
- + " shared=" + includeShared + " all=" + doAllApps
- + " pkgs=" + pkgList);
-
long oldId = Binder.clearCallingIdentity();
try {
+ // Doesn't make sense to do a full backup prior to setup
+ if (!deviceIsProvisioned()) {
+ Slog.i(TAG, "Full backup not supported before setup");
+ return;
+ }
+
+ if (DEBUG) Slog.v(TAG, "Requesting full backup: apks=" + includeApks
+ + " shared=" + includeShared + " all=" + doAllApps
+ + " pkgs=" + pkgList);
+ Slog.i(TAG, "Beginning full backup...");
+
FullBackupParams params = new FullBackupParams(fd, includeApks, includeShared,
doAllApps, pkgList);
final int token = generateToken();
@@ -4822,17 +4841,25 @@ class BackupManagerService extends IBackupManager.Stub {
// just eat it
}
Binder.restoreCallingIdentity(oldId);
+ Slog.d(TAG, "Full backup processing complete.");
}
- if (MORE_DEBUG) Slog.d(TAG, "Full backup done; returning to caller");
}
public void fullRestore(ParcelFileDescriptor fd) {
mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "fullRestore");
- Slog.i(TAG, "Beginning full restore...");
long oldId = Binder.clearCallingIdentity();
try {
+ // Check whether the device has been provisioned -- we don't handle
+ // full restores prior to completing the setup process.
+ if (!deviceIsProvisioned()) {
+ Slog.i(TAG, "Full restore not permitted before setup");
+ return;
+ }
+
+ Slog.i(TAG, "Beginning full restore...");
+
FullRestoreParams params = new FullRestoreParams(fd);
final int token = generateToken();
synchronized (mFullConfirmations) {
@@ -4863,7 +4890,7 @@ class BackupManagerService extends IBackupManager.Stub {
Slog.w(TAG, "Error trying to close fd after full restore: " + e);
}
Binder.restoreCallingIdentity(oldId);
- Slog.i(TAG, "Full restore completed");
+ Slog.i(TAG, "Full restore processing complete.");
}
}
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 2348d76bb616..991b7da6796a 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -35,6 +35,7 @@ import android.net.EthernetDataTracker;
import android.net.IConnectivityManager;
import android.net.INetworkPolicyListener;
import android.net.INetworkPolicyManager;
+import android.net.INetworkStatsService;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.LinkProperties.CompareResult;
@@ -97,7 +98,7 @@ import java.util.List;
public class ConnectivityService extends IConnectivityManager.Stub {
private static final boolean DBG = true;
- private static final boolean VDBG = true;
+ private static final boolean VDBG = false;
private static final String TAG = "ConnectivityService";
private static final boolean LOGD_RULES = false;
@@ -306,8 +307,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// the set of network types that can only be enabled by system/sig apps
List mProtectedNetworks;
- public ConnectivityService(
- Context context, INetworkManagementService netd, INetworkPolicyManager policyManager) {
+ public ConnectivityService(Context context, INetworkManagementService netd,
+ INetworkStatsService statsService, INetworkPolicyManager policyManager) {
if (DBG) log("ConnectivityService starting up");
HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");
@@ -319,7 +320,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
- String name = new String("android_").concat(id);
+ String name = new String("android-").concat(id);
SystemProperties.set("net.hostname", name);
}
}
@@ -496,7 +497,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
INetworkManagementService nmService = INetworkManagementService.Stub.asInterface(b);
- mTethering = new Tethering(mContext, nmService, mHandler.getLooper());
+ mTethering = new Tethering(mContext, nmService, statsService, mHandler.getLooper());
mTetheringConfigValid = ((mTethering.getTetherableUsbRegexs().length != 0 ||
mTethering.getTetherableWifiRegexs().length != 0 ||
mTethering.getTetherableBluetoothRegexs().length != 0) &&
@@ -867,7 +868,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// javadoc from interface
public int startUsingNetworkFeature(int networkType, String feature,
IBinder binder) {
- if (DBG) {
+ if (VDBG) {
log("startUsingNetworkFeature for net " + networkType + ": " + feature);
}
enforceChangePermission();
@@ -933,17 +934,19 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (ni.isConnected() == true) {
// add the pid-specific dns
handleDnsConfigurationChange(usedNetworkType);
- if (DBG) log("special network already active");
+ if (VDBG) log("special network already active");
return Phone.APN_ALREADY_ACTIVE;
}
- if (DBG) log("special network already connecting");
+ if (VDBG) log("special network already connecting");
return Phone.APN_REQUEST_STARTED;
}
// check if the radio in play can make another contact
// assume if cannot for now
- if (DBG) log("reconnecting to special network");
+ if (DBG) {
+ log("startUsingNetworkFeature reconnecting to " + networkType + ": " + feature);
+ }
network.reconnect();
return Phone.APN_REQUEST_STARTED;
} else {
@@ -985,7 +988,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return stopUsingNetworkFeature(u, true);
} else {
// none found!
- if (VDBG) log("ignoring stopUsingNetworkFeature - not a live request");
+ if (VDBG) log("stopUsingNetworkFeature - not a live request, ignoring");
return 1;
}
}
@@ -999,12 +1002,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
NetworkStateTracker tracker = null;
boolean callTeardown = false; // used to carry our decision outside of sync block
- if (DBG) {
- log("stopUsingNetworkFeature for net " + networkType +
- ": " + feature);
+ if (VDBG) {
+ log("stopUsingNetworkFeature: net " + networkType + ": " + feature);
}
if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
+ if (DBG) {
+ log("stopUsingNetworkFeature: net " + networkType + ": " + feature +
+ ", net is invalid");
+ }
return -1;
}
@@ -1013,7 +1019,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
synchronized(this) {
// check if this process still has an outstanding start request
if (!mFeatureUsers.contains(u)) {
- if (DBG) log("ignoring - this process has no outstanding requests");
+ if (VDBG) {
+ log("stopUsingNetworkFeature: this process has no outstanding requests" +
+ ", ignoring");
+ }
return 1;
}
u.unlinkDeathRecipient();
@@ -1028,7 +1037,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (ignoreDups == false) {
for (FeatureUser x : mFeatureUsers) {
if (x.isSameUser(u)) {
- if (DBG) log("ignoring stopUsingNetworkFeature as dup is found");
+ if (VDBG) log("stopUsingNetworkFeature: dup is found, ignoring");
return 1;
}
}
@@ -1039,7 +1048,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
tracker = mNetTrackers[usedNetworkType];
if (tracker == null) {
- if (DBG) log("ignoring - no known tracker for net type " + usedNetworkType);
+ if (DBG) {
+ log("stopUsingNetworkFeature: net " + networkType + ": " + feature +
+ " no known tracker for used net type " + usedNetworkType);
+ }
return -1;
}
if (usedNetworkType != networkType) {
@@ -1047,17 +1059,25 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetRequestersPids[usedNetworkType].remove(currentPid);
reassessPidDns(pid, true);
if (mNetRequestersPids[usedNetworkType].size() != 0) {
- if (DBG) log("not tearing down special network - " +
- "others still using it");
+ if (VDBG) {
+ log("stopUsingNetworkFeature: net " + networkType + ": " + feature +
+ " others still using it");
+ }
return 1;
}
callTeardown = true;
} else {
- if (DBG) log("not a known feature - dropping");
+ if (DBG) {
+ log("stopUsingNetworkFeature: net " + networkType + ": " + feature +
+ " not a known feature - dropping");
+ }
}
}
- if (DBG) log("Doing network teardown");
+
if (callTeardown) {
+ if (DBG) {
+ log("stopUsingNetworkFeature: teardown net " + networkType + ": " + feature);
+ }
tracker.teardown();
return 1;
} else {
@@ -1592,7 +1612,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mInitialBroadcast = new Intent(intent);
}
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
- if (DBG) {
+ if (VDBG) {
log("sendStickyBroadcast: action=" + intent.getAction());
}
@@ -1604,7 +1624,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (delayMs <= 0) {
sendStickyBroadcast(intent);
} else {
- if (DBG) {
+ if (VDBG) {
log("sendStickyBroadcastDelayed: delayMs=" + delayMs + ", action="
+ intent.getAction());
}
@@ -1779,12 +1799,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
if (resetDns) {
- if (DBG) log("resetting DNS cache for " + iface);
+ if (VDBG) log("resetting DNS cache for " + iface);
try {
mNetd.flushInterfaceDnsCache(iface);
} catch (Exception e) {
// never crash - catch them all
- loge("Exception resetting dns cache: " + e);
+ if (DBG) loge("Exception resetting dns cache: " + e);
}
}
}
@@ -1840,12 +1860,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// remove the default route unless somebody else has asked for it
String ifaceName = newLp.getInterfaceName();
if (TextUtils.isEmpty(ifaceName) == false && mAddedRoutes.contains(r) == false) {
- if (DBG) log("Removing " + r + " for interface " + ifaceName);
+ if (VDBG) log("Removing " + r + " for interface " + ifaceName);
try {
mNetd.removeRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
- loge("Exception trying to remove a route: " + e);
+ if (VDBG) loge("Exception trying to remove a route: " + e);
}
}
}
@@ -1955,7 +1975,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
Integer pid = (Integer)pids.get(j);
if (pid.intValue() == myPid) {
Collection<InetAddress> dnses = p.getDnses();
- writePidDns(dnses, myPid);
+ String proto = determineProto(p);
+ writePidDns(dnses, myPid, proto);
if (doBump) {
bumpDns();
}
@@ -1965,6 +1986,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
// nothing found - delete
+ if (SystemProperties.get("net.dnsproto." + myPid).length() != 0) {
+ SystemProperties.set("net.dnsproto." + myPid, "");
+ }
for (int i = 1; ; i++) {
String prop = "net.dns" + i + "." + myPid;
if (SystemProperties.get(prop).length() == 0) {
@@ -1978,7 +2002,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
// return true if results in a change
- private boolean writePidDns(Collection <InetAddress> dnses, int pid) {
+ private boolean writePidDns(Collection <InetAddress> dnses, int pid, String proto) {
int j = 1;
boolean changed = false;
for (InetAddress dns : dnses) {
@@ -1988,6 +2012,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
SystemProperties.set("net.dns" + j++ + "." + pid, dns.getHostAddress());
}
}
+ if (dnses.size() > 0 && (changed || !proto.equals(SystemProperties.get("net.dnsproto." +
+ pid)))) {
+ changed = true;
+ SystemProperties.set("net.dnsproto." + pid, proto);
+ }
return changed;
}
@@ -2018,7 +2047,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// Caller must grab mDnsLock.
private boolean updateDns(String network, String iface,
- Collection<InetAddress> dnses, String domains) {
+ Collection<InetAddress> dnses, String domains, String proto) {
boolean changed = false;
int last = 0;
if (dnses.size() == 0 && mDefaultDns != null) {
@@ -2054,12 +2083,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
mNumDnsEntries = last;
+ if (changed || !proto.equals(SystemProperties.get("net.dnsproto"))) {
+ changed = true;
+ SystemProperties.set("net.dnsproto", proto);
+ }
+
if (changed) {
try {
mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses));
mNetd.setDefaultInterfaceForDns(iface);
} catch (Exception e) {
- loge("exception setting default dns interface: " + e);
+ if (VDBG) loge("exception setting default dns interface: " + e);
}
}
if (!domains.equals(SystemProperties.get("net.dns.search"))) {
@@ -2077,11 +2111,14 @@ public class ConnectivityService extends IConnectivityManager.Stub {
if (p == null) return;
Collection<InetAddress> dnses = p.getDnses();
boolean changed = false;
+ String proto = determineProto(p);
+
if (mNetConfigs[netType].isDefault()) {
String network = nt.getNetworkInfo().getTypeName();
synchronized (mDnsLock) {
if (!mDnsOverridden) {
- changed = updateDns(network, p.getInterfaceName(), dnses, "");
+ changed = updateDns(network, p.getInterfaceName(), dnses, "",
+ proto);
}
}
} else {
@@ -2089,19 +2126,41 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetd.setDnsServersForInterface(p.getInterfaceName(),
NetworkUtils.makeStrings(dnses));
} catch (Exception e) {
- loge("exception setting dns servers: " + e);
+ if (VDBG) loge("exception setting dns servers: " + e);
}
// set per-pid dns for attached secondary nets
List pids = mNetRequestersPids[netType];
for (int y=0; y< pids.size(); y++) {
Integer pid = (Integer)pids.get(y);
- changed = writePidDns(dnses, pid.intValue());
+ changed = writePidDns(dnses, pid.intValue(), proto);
}
}
if (changed) bumpDns();
}
}
+ private String determineProto(LinkProperties p) {
+ boolean v4 = false;
+ boolean v6 = false;
+ for (RouteInfo r : p.getRoutes()) {
+ if (r.getDestination().getAddress() instanceof Inet6Address) {
+ v6 = true;
+ } else {
+ v4 = true;
+ }
+ }
+ // secondary connections often don't have routes and we infer routes
+ // to the dns servers. Look at the dns addrs too
+ for (InetAddress i : p.getDnses()) {
+ if (i instanceof Inet6Address) {
+ v6 = true;
+ } else {
+ v4 = true;
+ }
+ }
+ return (v4 ? "v4" : "") + (v6 ? "v6" : "");
+ }
+
private int getRestoreDefaultNetworkDelay(int networkType) {
String restoreDefaultNetworkDelayStr = SystemProperties.get(
NETWORK_RESTORE_DELAY_PROP_NAME);
@@ -2194,9 +2253,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
int type = info.getType();
NetworkInfo.State state = info.getState();
- if (DBG) log("ConnectivityChange for " +
+ if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
+ (state == NetworkInfo.State.DISCONNECTED)) {
+ log("ConnectivityChange for " +
info.getTypeName() + ": " +
state + "/" + info.getDetailedState());
+ }
// Connectivity state changed:
// [31-13] Reserved for future use
@@ -2394,6 +2456,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return mTethering.getTetheredIfaces();
}
+ @Override
+ public String[] getTetheredIfacePairs() {
+ enforceTetherAccessPermission();
+ return mTethering.getTetheredIfacePairs();
+ }
+
public String[] getTetheringErroredIfaces() {
enforceTetherAccessPermission();
return mTethering.getErroredIfaces();
@@ -2452,23 +2520,24 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
private void handleInetConditionChange(int netType, int condition) {
- if (DBG) {
- log("Inet connectivity change, net=" +
- netType + ", condition=" + condition +
- ",mActiveDefaultNetwork=" + mActiveDefaultNetwork);
- }
if (mActiveDefaultNetwork == -1) {
- if (DBG) log("no active default network - aborting");
+ if (DBG) log("handleInetConditionChange: no active default network - ignore");
return;
}
if (mActiveDefaultNetwork != netType) {
- if (DBG) log("given net not default - aborting");
+ if (DBG) log("handleInetConditionChange: net=" + netType +
+ " != default=" + mActiveDefaultNetwork + " - ignore");
return;
}
+ if (VDBG) {
+ log("handleInetConditionChange: net=" +
+ netType + ", condition=" + condition +
+ ",mActiveDefaultNetwork=" + mActiveDefaultNetwork);
+ }
mDefaultInetCondition = condition;
int delay;
if (mInetConditionChangeInFlight == false) {
- if (VDBG) log("starting a change hold");
+ if (VDBG) log("handleInetConditionChange: starting a change hold");
// setup a new hold to debounce this
if (mDefaultInetCondition > 50) {
delay = Settings.Secure.getInt(mContext.getContentResolver(),
@@ -2481,26 +2550,25 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mHandler.sendMessageDelayed(mHandler.obtainMessage(EVENT_INET_CONDITION_HOLD_END,
mActiveDefaultNetwork, mDefaultConnectionSequence), delay);
} else {
- // we've set the new condition, when this hold ends that will get
- // picked up
- if (VDBG) log("currently in hold - not setting new end evt");
+ // we've set the new condition, when this hold ends that will get picked up
+ if (VDBG) log("handleInetConditionChange: currently in hold - not setting new end evt");
}
}
private void handleInetConditionHoldEnd(int netType, int sequence) {
- if (VDBG) {
- log("Inet hold end, net=" + netType +
- ", condition =" + mDefaultInetCondition +
- ", published condition =" + mDefaultInetConditionPublished);
+ if (DBG) {
+ log("handleInetConditionHoldEnd: net=" + netType +
+ ", condition=" + mDefaultInetCondition +
+ ", published condition=" + mDefaultInetConditionPublished);
}
mInetConditionChangeInFlight = false;
if (mActiveDefaultNetwork == -1) {
- if (DBG) log("no active default network - aborting");
+ if (DBG) log("handleInetConditionHoldEnd: no active default network - ignoring");
return;
}
if (mDefaultConnectionSequence != sequence) {
- if (DBG) log("event hold for obsolete network - aborting");
+ if (DBG) log("handleInetConditionHoldEnd: event hold for obsolete network - ignoring");
return;
}
// TODO: Figure out why this optimization sometimes causes a
@@ -2512,7 +2580,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
//}
NetworkInfo networkInfo = mNetTrackers[mActiveDefaultNetwork].getNetworkInfo();
if (networkInfo.isConnected() == false) {
- if (DBG) log("default network not connected - aborting");
+ if (DBG) log("handleInetConditionHoldEnd: default network not connected - ignoring");
return;
}
mDefaultInetConditionPublished = mDefaultInetCondition;
@@ -2590,7 +2658,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
if (VDBG) log("changing default proxy to " + proxy);
- if ((proxy == null && mGlobalProxy == null) || proxy.equals(mGlobalProxy)) return;
+
+ // global trumps default, if set, ignore this.
if (mGlobalProxy != null) return;
sendProxyBroadcast(proxy);
}
@@ -2813,7 +2882,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// Apply DNS changes.
boolean changed = false;
synchronized (mDnsLock) {
- changed = updateDns("VPN", "VPN", addresses, domains);
+ changed = updateDns("VPN", "VPN", addresses, domains, "v4");
mDnsOverridden = true;
}
if (changed) {
diff --git a/services/java/com/android/server/EventLogTags.logtags b/services/java/com/android/server/EventLogTags.logtags
index f0b5958abc3e..99f6b8ef3eb5 100644
--- a/services/java/com/android/server/EventLogTags.logtags
+++ b/services/java/com/android/server/EventLogTags.logtags
@@ -142,5 +142,5 @@ option java_package com.android.server
# ---------------------------
# NetworkStatsService.java
# ---------------------------
-51100 netstats_mobile_sample (iface_rx|2|2),(iface_tx|2|2),(uid_rx|2|2),(uid_tx|2|2)
-51101 netstats_wifi_sample (iface_rx|2|2),(iface_tx|2|2),(uid_rx|2|2),(uid_tx|2|2)
+51100 netstats_mobile_sample (iface_rx_bytes|2|2),(iface_tx_bytes|2|2),(iface_rx_pkts|2|1),(iface_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1)
+51101 netstats_wifi_sample (iface_rx_bytes|2|2),(iface_tx_bytes|2|2),(iface_rx_pkts|2|1),(iface_tx_pkts|2|1),(uid_rx_bytes|2|2),(uid_tx_bytes|2|2),(uid_rx_pkts|2|1),(uid_tx_pkts|2|1)
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index c517965759fb..6fcf3994f5fb 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -123,6 +123,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub
public static final int InterfaceTxCounterResult = 217;
public static final int InterfaceRxThrottleResult = 218;
public static final int InterfaceTxThrottleResult = 219;
+ public static final int QuotaCounterResult = 220;
+ public static final int TetheringStatsResult = 221;
public static final int InterfaceChange = 600;
public static final int BandwidthControl = 601;
@@ -558,8 +560,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub
+ e);
}
- for (String line : rsp) {
- Log.v(TAG, "add route response is " + line);
+ if (DBG) {
+ for (String line : rsp) {
+ Log.v(TAG, "add route response is " + line);
+ }
}
}
@@ -1443,6 +1447,73 @@ public class NetworkManagementService extends INetworkManagementService.Stub
return stats;
}
+ @Override
+ public NetworkStats getNetworkStatsTethering(String[] ifacePairs) {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService");
+
+ if (ifacePairs.length % 2 != 0) {
+ throw new IllegalArgumentException(
+ "unexpected ifacePairs; length=" + ifacePairs.length);
+ }
+
+ final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 1);
+ for (int i = 0; i < ifacePairs.length; i += 2) {
+ final String ifaceIn = ifacePairs[i];
+ final String ifaceOut = ifacePairs[i + 1];
+ if (ifaceIn != null && ifaceOut != null) {
+ stats.combineValues(getNetworkStatsTethering(ifaceIn, ifaceOut));
+ }
+ }
+ return stats;
+ }
+
+ private NetworkStats.Entry getNetworkStatsTethering(String ifaceIn, String ifaceOut) {
+ final StringBuilder command = new StringBuilder();
+ command.append("bandwidth gettetherstats ").append(ifaceIn).append(" ").append(ifaceOut);
+
+ final String rsp;
+ try {
+ rsp = mConnector.doCommand(command.toString()).get(0);
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException("Error communicating to native daemon", e);
+ }
+
+ final String[] tok = rsp.split(" ");
+ /* Expecting: "code ifaceIn ifaceOut rx_bytes rx_packets tx_bytes tx_packets" */
+ if (tok.length != 7) {
+ throw new IllegalStateException("Native daemon returned unexpected result: " + rsp);
+ }
+
+ final int code;
+ try {
+ code = Integer.parseInt(tok[0]);
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException(
+ "Failed to parse native daemon return code for " + ifaceIn + " " + ifaceOut);
+ }
+ if (code != NetdResponseCode.TetheringStatsResult) {
+ throw new IllegalStateException(
+ "Unexpected return code from native daemon for " + ifaceIn + " " + ifaceOut);
+ }
+
+ try {
+ final NetworkStats.Entry entry = new NetworkStats.Entry();
+ entry.iface = ifaceIn;
+ entry.uid = UID_ALL;
+ entry.set = SET_DEFAULT;
+ entry.tag = TAG_NONE;
+ entry.rxBytes = Long.parseLong(tok[3]);
+ entry.rxPackets = Long.parseLong(tok[4]);
+ entry.txBytes = Long.parseLong(tok[5]);
+ entry.txPackets = Long.parseLong(tok[6]);
+ return entry;
+ } catch (NumberFormatException e) {
+ throw new IllegalStateException(
+ "problem parsing tethering stats for " + ifaceIn + " " + ifaceOut + ": " + e);
+ }
+ }
+
public void setInterfaceThrottle(String iface, int rxKbps, int txKbps) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 6ee20bbb32bd..7d1d9765eb9d 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -1085,9 +1085,6 @@ public class NotificationManagerService extends INotificationManager.Stub
// pulse repeatedly
mNotificationLight.setFlashing(ledARGB, LightsService.LIGHT_FLASH_TIMED,
ledOnMS, ledOffMS);
- } else {
- // pulse only once
- mNotificationLight.pulse(ledARGB, ledOnMS);
}
}
}
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index bb21d81f3cd1..78dbbd6eb555 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -79,6 +79,8 @@ public class PowerManagerService extends IPowerManager.Stub
private static final String TAG = "PowerManagerService";
static final String PARTIAL_NAME = "PowerManagerService";
+ static final boolean DEBUG_SCREEN_ON = false;
+
private static final boolean LOG_PARTIAL_WL = false;
// Indicates whether touch-down cycles should be logged as part of the
@@ -161,7 +163,9 @@ public class PowerManagerService extends IPowerManager.Stub
private int mStayOnConditions = 0;
private final int[] mBroadcastQueue = new int[] { -1, -1, -1 };
private final int[] mBroadcastWhy = new int[3];
- private boolean mBroadcastingScreenOff = false;
+ private boolean mPreparingForScreenOn = false;
+ private boolean mSkippedScreenOn = false;
+ private boolean mInitialized = false;
private int mPartialCount = 0;
private int mPowerState;
// mScreenOffReason can be WindowManagerPolicy.OFF_BECAUSE_OF_USER,
@@ -557,6 +561,10 @@ public class PowerManagerService extends IPowerManager.Stub
nativeInit();
synchronized (mLocks) {
updateNativePowerStateLocked();
+ // We make sure to start out with the screen on due to user activity.
+ // (They did just boot their device, after all.)
+ forceUserActivityLocked();
+ mInitialized = true;
}
}
@@ -1122,7 +1130,9 @@ public class PowerManagerService extends IPowerManager.Stub
pw.println(" mNextTimeout=" + mNextTimeout + " now=" + now
+ " " + ((mNextTimeout-now)/1000) + "s from now");
pw.println(" mDimScreen=" + mDimScreen
- + " mStayOnConditions=" + mStayOnConditions);
+ + " mStayOnConditions=" + mStayOnConditions
+ + " mPreparingForScreenOn=" + mPreparingForScreenOn
+ + " mSkippedScreenOn=" + mSkippedScreenOn);
pw.println(" mScreenOffReason=" + mScreenOffReason
+ " mUserState=" + mUserState);
pw.println(" mBroadcastQueue={" + mBroadcastQueue[0] + ',' + mBroadcastQueue[1]
@@ -1311,8 +1321,23 @@ public class PowerManagerService extends IPowerManager.Stub
}
}
- private void sendNotificationLocked(boolean on, int why)
- {
+ private void sendNotificationLocked(boolean on, int why) {
+ if (!mInitialized) {
+ // No notifications sent until first initialization is done.
+ // This is so that when we are moving from our initial state
+ // which looks like the screen was off to it being on, we do not
+ // go through the process of waiting for the higher-level user
+ // space to be ready before turning up the display brightness.
+ // (And also do not send needless broadcasts about the screen.)
+ return;
+ }
+
+ if (DEBUG_SCREEN_ON) {
+ RuntimeException here = new RuntimeException("here");
+ here.fillInStackTrace();
+ Slog.i(TAG, "sendNotificationLocked: " + on, here);
+ }
+
if (!on) {
mStillNeedSleepNotification = false;
}
@@ -1341,7 +1366,9 @@ public class PowerManagerService extends IPowerManager.Stub
mBroadcastQueue[0] = on ? 1 : 0;
mBroadcastQueue[1] = -1;
mBroadcastQueue[2] = -1;
+ EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_STOP, 1, mBroadcastWakeLock.mCount);
mBroadcastWakeLock.release();
+ EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_STOP, 1, mBroadcastWakeLock.mCount);
mBroadcastWakeLock.release();
index = 0;
}
@@ -1357,7 +1384,9 @@ public class PowerManagerService extends IPowerManager.Stub
// The broadcast queue has changed; make sure the screen is on if it
// is now possible for it to be.
- updateNativePowerStateLocked();
+ if (mSkippedScreenOn) {
+ updateLightsLocked(mPowerState, SCREEN_ON_BIT);
+ }
// Now send the message.
if (index >= 0) {
@@ -1371,6 +1400,21 @@ public class PowerManagerService extends IPowerManager.Stub
}
}
+ private WindowManagerPolicy.ScreenOnListener mScreenOnListener =
+ new WindowManagerPolicy.ScreenOnListener() {
+ @Override public void onScreenOn() {
+ synchronized (mLocks) {
+ if (mPreparingForScreenOn) {
+ mPreparingForScreenOn = false;
+ updateLightsLocked(mPowerState, SCREEN_ON_BIT);
+ EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_STOP,
+ 4, mBroadcastWakeLock.mCount);
+ mBroadcastWakeLock.release();
+ }
+ }
+ }
+ };
+
private Runnable mNotificationTask = new Runnable()
{
public void run()
@@ -1387,14 +1431,17 @@ public class PowerManagerService extends IPowerManager.Stub
mBroadcastWhy[i] = mBroadcastWhy[i+1];
}
policy = getPolicyLocked();
- if (value == 0) {
- mBroadcastingScreenOff = true;
+ if (value == 1 && !mPreparingForScreenOn) {
+ mPreparingForScreenOn = true;
+ mBroadcastWakeLock.acquire();
+ EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_SEND,
+ mBroadcastWakeLock.mCount);
}
}
if (value == 1) {
mScreenOnStart = SystemClock.uptimeMillis();
- policy.screenTurnedOn();
+ policy.screenTurningOn(mScreenOnListener);
try {
ActivityManagerNative.getDefault().wakingUp();
} catch (RemoteException e) {
@@ -1432,8 +1479,7 @@ public class PowerManagerService extends IPowerManager.Stub
synchronized (mLocks) {
EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_STOP, 3,
mBroadcastWakeLock.mCount);
- mBroadcastingScreenOff = false;
- updateNativePowerStateLocked();
+ updateLightsLocked(mPowerState, SCREEN_ON_BIT);
mBroadcastWakeLock.release();
}
}
@@ -1464,10 +1510,6 @@ public class PowerManagerService extends IPowerManager.Stub
synchronized (mLocks) {
EventLog.writeEvent(EventLogTags.POWER_SCREEN_BROADCAST_DONE, 0,
SystemClock.uptimeMillis() - mScreenOffStart, mBroadcastWakeLock.mCount);
- synchronized (mLocks) {
- mBroadcastingScreenOff = false;
- updateNativePowerStateLocked();
- }
mBroadcastWakeLock.release();
}
}
@@ -1630,6 +1672,11 @@ public class PowerManagerService extends IPowerManager.Stub
};
private int setScreenStateLocked(boolean on) {
+ if (DEBUG_SCREEN_ON) {
+ RuntimeException e = new RuntimeException("here");
+ e.fillInStackTrace();
+ Slog.i(TAG, "Set screen state: " + on, e);
+ }
int err = Power.setScreenState(on);
if (err == 0) {
mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0);
@@ -1680,7 +1727,7 @@ public class PowerManagerService extends IPowerManager.Stub
} else {
newState &= ~BATTERY_LOW_BIT;
}
- if (newState == mPowerState) {
+ if (newState == mPowerState && mInitialized) {
return;
}
@@ -1706,10 +1753,7 @@ public class PowerManagerService extends IPowerManager.Stub
+ " newBatteryLow=" + ((newState & BATTERY_LOW_BIT) != 0));
}
- if (mPowerState != newState) {
- updateLightsLocked(newState, 0);
- mPowerState = (mPowerState & ~LIGHTS_MASK) | (newState & LIGHTS_MASK);
- }
+ final boolean stateChanged = mPowerState != newState;
if (oldScreenOn != newScreenOn) {
if (newScreenOn) {
@@ -1761,10 +1805,24 @@ public class PowerManagerService extends IPowerManager.Stub
EventLog.writeEvent(EventLogTags.POWER_SCREEN_STATE, 1, reason,
mTotalTouchDownTime, mTouchCycles);
if (err == 0) {
- mPowerState |= SCREEN_ON_BIT;
sendNotificationLocked(true, -1);
+ // Update the lights *after* taking care of turning the
+ // screen on, so we do this after our notifications are
+ // enqueued and thus will delay turning on the screen light
+ // until the windows are correctly displayed.
+ if (stateChanged) {
+ updateLightsLocked(newState, 0);
+ }
+ mPowerState |= SCREEN_ON_BIT;
}
+
} else {
+ // Update the lights *before* taking care of turning the
+ // screen off, so we can initiate any animations that are desired.
+ if (stateChanged) {
+ updateLightsLocked(newState, 0);
+ }
+
// cancel light sensor task
mHandler.removeCallbacks(mAutoBrightnessTask);
mLightSensorPendingDecrease = false;
@@ -1787,29 +1845,18 @@ public class PowerManagerService extends IPowerManager.Stub
mLastTouchDown = 0;
}
}
+ } else if (stateChanged) {
+ // Screen on/off didn't change, but lights may have.
+ updateLightsLocked(newState, 0);
}
-
+
+ mPowerState = (mPowerState & ~LIGHTS_MASK) | (newState & LIGHTS_MASK);
+
updateNativePowerStateLocked();
}
}
-
+
private void updateNativePowerStateLocked() {
- if ((mPowerState & SCREEN_ON_BIT) != 0) {
- // Don't turn screen on if we are currently reporting a screen off.
- // This is to avoid letting the screen go on before things like the
- // lock screen have been displayed due to it going off.
- if (mBroadcastingScreenOff) {
- // Currently broadcasting that the screen is off. Don't
- // allow screen to go on until that is done.
- return;
- }
- for (int i=0; i<mBroadcastQueue.length; i++) {
- if (mBroadcastQueue[i] == 0) {
- // A screen off is currently enqueued.
- return;
- }
- }
- }
nativeSetPowerState(
(mPowerState & SCREEN_ON_BIT) != 0,
(mPowerState & SCREEN_BRIGHT) == SCREEN_BRIGHT);
@@ -1835,8 +1882,43 @@ public class PowerManagerService extends IPowerManager.Stub
mBatteryService.getBatteryLevel() <= Power.LOW_BATTERY_THRESHOLD);
}
+ private boolean shouldDeferScreenOnLocked() {
+ if (mPreparingForScreenOn) {
+ // Currently waiting for confirmation from the policy that it
+ // is okay to turn on the screen. Don't allow the screen to go
+ // on until that is done.
+ if (DEBUG_SCREEN_ON) Slog.i(TAG,
+ "updateLights: delaying screen on due to mPreparingForScreenOn");
+ return true;
+ } else {
+ // If there is a screen-on command in the notification queue, we
+ // can't turn the screen on until it has been processed (and we
+ // have set mPreparingForScreenOn) or it has been dropped.
+ for (int i=0; i<mBroadcastQueue.length; i++) {
+ if (mBroadcastQueue[i] == 1) {
+ if (DEBUG_SCREEN_ON) Slog.i(TAG,
+ "updateLights: delaying screen on due to notification queue");
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
private void updateLightsLocked(int newState, int forceState) {
final int oldState = mPowerState;
+
+ // If the screen is not currently on, we will want to delay actually
+ // turning the lights on if we are still getting the UI put up.
+ if ((oldState&SCREEN_ON_BIT) == 0 || mSkippedScreenOn) {
+ // Don't turn screen on until we know we are really ready to.
+ // This is to avoid letting the screen go on before things like the
+ // lock screen have been displayed.
+ if ((mSkippedScreenOn=shouldDeferScreenOnLocked())) {
+ newState &= ~(SCREEN_ON_BIT|SCREEN_BRIGHT_BIT);
+ }
+ }
+
if ((newState & SCREEN_ON_BIT) != 0) {
// Only turn on the buttons or keyboard if the screen is also on.
// We should never see the buttons on but not the screen.
@@ -1943,6 +2025,13 @@ public class PowerManagerService extends IPowerManager.Stub
}
mScreenBrightness.setTargetLocked(brightness, steps,
INITIAL_SCREEN_BRIGHTNESS, nominalCurrentValue);
+ if (DEBUG_SCREEN_ON) {
+ RuntimeException e = new RuntimeException("here");
+ e.fillInStackTrace();
+ Slog.i(TAG, "Setting screen brightness: " + brightness, e);
+ mScreenBrightness.setTargetLocked(brightness, steps,
+ INITIAL_SCREEN_BRIGHTNESS, nominalCurrentValue);
+ }
}
if (mSpew) {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 7e28c4f1b26a..5006de757cd3 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -64,6 +64,8 @@ import java.util.TimerTask;
class ServerThread extends Thread {
private static final String TAG = "SystemServer";
+ private static final String ENCRYPTING_STATE = "trigger_restart_min_framework";
+ private static final String ENCRYPTED_STATE = "1";
ContentResolver mContentResolver;
@@ -147,9 +149,20 @@ class ServerThread extends Thread {
AttributeCache.init(context);
Slog.i(TAG, "Package Manager");
+ // Only run "core" apps if we're encrypting the device.
+ String cryptState = SystemProperties.get("vold.decrypt");
+ boolean onlyCore = false;
+ if (ENCRYPTING_STATE.equals(cryptState)) {
+ Slog.w(TAG, "Detected encryption in progress - only parsing core apps");
+ onlyCore = true;
+ } else if (ENCRYPTED_STATE.equals(cryptState)) {
+ Slog.w(TAG, "Device encrypted - only parsing core apps");
+ onlyCore = true;
+ }
+
pm = PackageManagerService.main(context,
factoryTest != SystemServer.FACTORY_TEST_OFF,
- false);
+ onlyCore);
ActivityManagerService.setSystemProcess();
@@ -357,7 +370,8 @@ class ServerThread extends Thread {
try {
Slog.i(TAG, "Connectivity Service");
- connectivity = new ConnectivityService(context, networkManagement, networkPolicy);
+ connectivity = new ConnectivityService(
+ context, networkManagement, networkStats, networkPolicy);
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
diff --git a/services/java/com/android/server/TelephonyRegistry.java b/services/java/com/android/server/TelephonyRegistry.java
index bc256ed28162..8c8e72500689 100644
--- a/services/java/com/android/server/TelephonyRegistry.java
+++ b/services/java/com/android/server/TelephonyRegistry.java
@@ -53,6 +53,7 @@ import com.android.server.am.BatteryStatsService;
*/
class TelephonyRegistry extends ITelephonyRegistry.Stub {
private static final String TAG = "TelephonyRegistry";
+ private static final boolean DBG = false;
private static class Record {
String pkgForDebug;
@@ -387,9 +388,11 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
if (!checkNotifyPermission("notifyDataConnection()" )) {
return;
}
- Slog.i(TAG, "notifyDataConnection: state=" + state + " isDataConnectivityPossible="
+ if (DBG) {
+ Slog.i(TAG, "notifyDataConnection: state=" + state + " isDataConnectivityPossible="
+ isDataConnectivityPossible + " reason='" + reason
+ "' apn='" + apn + "' apnType=" + apnType + " networkType=" + networkType);
+ }
synchronized (mRecords) {
boolean modified = false;
if (state == TelephonyManager.DATA_CONNECTED) {
@@ -421,8 +424,10 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
modified = true;
}
if (modified) {
- Slog.d(TAG, "onDataConnectionStateChanged(" + mDataConnectionState
+ if (DBG) {
+ Slog.d(TAG, "onDataConnectionStateChanged(" + mDataConnectionState
+ ", " + mDataConnectionNetworkType + ")");
+ }
for (Record r : mRecords) {
if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try {
@@ -639,7 +644,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
String msg = "Modify Phone State Permission Denial: " + method + " from pid="
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid();
- Slog.w(TAG, msg);
+ if (DBG) Slog.w(TAG, msg);
return false;
}
diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java
index 6ceccafdbd6a..253e74159060 100644
--- a/services/java/com/android/server/WallpaperManagerService.java
+++ b/services/java/com/android/server/WallpaperManagerService.java
@@ -120,7 +120,8 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
notifyCallbacksLocked();
if (mWallpaperComponent == null || mImageWallpaperPending) {
mImageWallpaperPending = false;
- bindWallpaperComponentLocked(mImageWallpaperComponent, true);
+ bindWallpaperComponentLocked(mImageWallpaperComponent,
+ true, false);
saveSettingsLocked();
}
}
@@ -201,7 +202,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
if (!mWallpaperUpdating && (mLastDiedTime+MIN_WALLPAPER_CRASH_TIME)
> SystemClock.uptimeMillis()) {
Slog.w(TAG, "Reverting to built-in wallpaper!");
- bindWallpaperComponentLocked(null, true);
+ clearWallpaperLocked(true);
}
}
}
@@ -230,9 +231,23 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
mWallpaperUpdating = false;
ComponentName comp = mWallpaperComponent;
clearWallpaperComponentLocked();
- bindWallpaperComponentLocked(comp, false);
+ if (!bindWallpaperComponentLocked(comp, false, false)) {
+ Slog.w(TAG, "Wallpaper no longer available; reverting to default");
+ clearWallpaperLocked(false);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onPackageModified(String packageName) {
+ synchronized (mLock) {
+ if (mWallpaperComponent == null ||
+ !mWallpaperComponent.getPackageName().equals(packageName)) {
+ return;
}
}
+ doPackagesChanged(true);
}
@Override
@@ -265,7 +280,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
changed = true;
if (doit) {
Slog.w(TAG, "Wallpaper uninstalled, removing: " + mWallpaperComponent);
- clearWallpaperLocked();
+ clearWallpaperLocked(false);
}
}
}
@@ -283,7 +298,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
mWallpaperComponent, 0);
} catch (NameNotFoundException e) {
Slog.w(TAG, "Wallpaper component gone, removing: " + mWallpaperComponent);
- clearWallpaperLocked();
+ clearWallpaperLocked(false);
}
}
if (mNextWallpaperComponent != null
@@ -321,45 +336,51 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
public void systemReady() {
if (DEBUG) Slog.v(TAG, "systemReady");
synchronized (mLock) {
+ RuntimeException e = null;
try {
- bindWallpaperComponentLocked(mNextWallpaperComponent, false);
- } catch (RuntimeException e) {
- Slog.w(TAG, "Failure starting previous wallpaper", e);
- try {
- bindWallpaperComponentLocked(null, false);
- } catch (RuntimeException e2) {
- Slog.w(TAG, "Failure starting default wallpaper", e2);
- clearWallpaperComponentLocked();
+ if (bindWallpaperComponentLocked(mNextWallpaperComponent, false, false)) {
+ return;
}
+ } catch (RuntimeException e1) {
+ e = e1;
}
+ Slog.w(TAG, "Failure starting previous wallpaper", e);
+ clearWallpaperLocked(false);
}
}
public void clearWallpaper() {
if (DEBUG) Slog.v(TAG, "clearWallpaper");
synchronized (mLock) {
- clearWallpaperLocked();
+ clearWallpaperLocked(false);
}
}
- public void clearWallpaperLocked() {
+ public void clearWallpaperLocked(boolean defaultFailed) {
File f = WALLPAPER_FILE;
if (f.exists()) {
f.delete();
}
final long ident = Binder.clearCallingIdentity();
+ RuntimeException e = null;
try {
mImageWallpaperPending = false;
- bindWallpaperComponentLocked(null, false);
- } catch (IllegalArgumentException e) {
- // This can happen if the default wallpaper component doesn't
- // exist. This should be a system configuration problem, but
- // let's not let it crash the system and just live with no
- // wallpaper.
- Slog.e(TAG, "Default wallpaper component not found!", e);
+ if (bindWallpaperComponentLocked(defaultFailed
+ ? mImageWallpaperComponent : null, true, false)) {
+ return;
+ }
+ } catch (IllegalArgumentException e1) {
+ e = e1;
} finally {
Binder.restoreCallingIdentity(ident);
}
+
+ // This can happen if the default wallpaper component doesn't
+ // exist. This should be a system configuration problem, but
+ // let's not let it crash the system and just live with no
+ // wallpaper.
+ Slog.e(TAG, "Default wallpaper component not found!", e);
+ clearWallpaperComponentLocked();
}
public void setDimensionHints(int width, int height) throws RemoteException {
@@ -469,14 +490,14 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
final long ident = Binder.clearCallingIdentity();
try {
mImageWallpaperPending = false;
- bindWallpaperComponentLocked(name, false);
+ bindWallpaperComponentLocked(name, false, true);
} finally {
Binder.restoreCallingIdentity(ident);
}
}
}
- void bindWallpaperComponentLocked(ComponentName componentName, boolean force) {
+ boolean bindWallpaperComponentLocked(ComponentName componentName, boolean force, boolean fromUser) {
if (DEBUG) Slog.v(TAG, "bindWallpaperComponentLocked: componentName=" + componentName);
// Has the component changed?
@@ -486,12 +507,12 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
if (componentName == null) {
if (DEBUG) Slog.v(TAG, "bindWallpaperComponentLocked: still using default");
// Still using default wallpaper.
- return;
+ return true;
}
} else if (mWallpaperComponent.equals(componentName)) {
// Changing to same wallpaper.
if (DEBUG) Slog.v(TAG, "same wallpaper");
- return;
+ return true;
}
}
}
@@ -516,9 +537,14 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
ServiceInfo si = mContext.getPackageManager().getServiceInfo(componentName,
PackageManager.GET_META_DATA | PackageManager.GET_PERMISSIONS);
if (!android.Manifest.permission.BIND_WALLPAPER.equals(si.permission)) {
- throw new SecurityException("Selected service does not require "
+ String msg = "Selected service does not require "
+ android.Manifest.permission.BIND_WALLPAPER
- + ": " + componentName);
+ + ": " + componentName;
+ if (fromUser) {
+ throw new SecurityException(msg);
+ }
+ Slog.w(TAG, msg);
+ return false;
}
WallpaperInfo wi = null;
@@ -535,16 +561,29 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
try {
wi = new WallpaperInfo(mContext, ris.get(i));
} catch (XmlPullParserException e) {
- throw new IllegalArgumentException(e);
+ if (fromUser) {
+ throw new IllegalArgumentException(e);
+ }
+ Slog.w(TAG, e);
+ return false;
} catch (IOException e) {
- throw new IllegalArgumentException(e);
+ if (fromUser) {
+ throw new IllegalArgumentException(e);
+ }
+ Slog.w(TAG, e);
+ return false;
}
break;
}
}
if (wi == null) {
- throw new SecurityException("Selected service is not a wallpaper: "
- + componentName);
+ String msg = "Selected service is not a wallpaper: "
+ + componentName;
+ if (fromUser) {
+ throw new SecurityException(msg);
+ }
+ Slog.w(TAG, msg);
+ return false;
}
}
@@ -561,8 +600,13 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
0));
if (!mContext.bindService(intent, newConn,
Context.BIND_AUTO_CREATE)) {
- throw new IllegalArgumentException("Unable to bind service: "
- + componentName);
+ String msg = "Unable to bind service: "
+ + componentName;
+ if (fromUser) {
+ throw new IllegalArgumentException(msg);
+ }
+ Slog.w(TAG, msg);
+ return false;
}
clearWallpaperComponentLocked();
@@ -577,8 +621,14 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
}
} catch (PackageManager.NameNotFoundException e) {
- throw new IllegalArgumentException("Unknown component " + componentName);
+ String msg = "Unknown component " + componentName;
+ if (fromUser) {
+ throw new IllegalArgumentException(msg);
+ }
+ Slog.w(TAG, msg);
+ return false;
}
+ return true;
}
void clearWallpaperComponentLocked() {
@@ -611,7 +661,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
} catch (RemoteException e) {
Slog.w(TAG, "Failed attaching wallpaper; clearing", e);
if (!mWallpaperUpdating) {
- bindWallpaperComponentLocked(null, false);
+ bindWallpaperComponentLocked(null, false, false);
}
}
}
@@ -765,13 +815,11 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
loadSettingsLocked();
if (mNextWallpaperComponent != null &&
!mNextWallpaperComponent.equals(mImageWallpaperComponent)) {
- try {
- bindWallpaperComponentLocked(mNextWallpaperComponent, false);
- } catch (IllegalArgumentException e) {
+ if (!bindWallpaperComponentLocked(mNextWallpaperComponent, false, false)) {
// No such live wallpaper or other failure; fall back to the default
// live wallpaper (since the profile being restored indicated that the
// user had selected a live rather than static one).
- bindWallpaperComponentLocked(null, false);
+ bindWallpaperComponentLocked(null, false, false);
}
success = true;
} else {
@@ -786,7 +834,7 @@ class WallpaperManagerService extends IWallpaperManager.Stub {
}
if (DEBUG) Slog.v(TAG, "settingsRestored: success=" + success);
if (success) {
- bindWallpaperComponentLocked(null, false);
+ bindWallpaperComponentLocked(null, false, false);
}
}
}
diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
index 6830055367e4..ed8fa40f9dc3 100644
--- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -718,8 +718,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
*/
private void manageServicesLocked() {
populateEnabledServicesLocked(mEnabledServices);
- updateServicesStateLocked(mInstalledServices, mEnabledServices);
- disableAccessibilityIfNoEnabledServices(mEnabledServices);
+ final int enabledInstalledServicesCount = updateServicesStateLocked(mInstalledServices,
+ mEnabledServices);
+ // No enabled installed services => disable accessibility to avoid
+ // sending accessibility events with no recipient across processes.
+ if (mIsAccessibilityEnabled && enabledInstalledServicesCount == 0) {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED, 0);
+ }
}
/**
@@ -771,13 +777,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
*
* @param installedServices All installed {@link AccessibilityService}s.
* @param enabledServices The {@link ComponentName}s of the enabled services.
+ * @return The number of enabled installed services.
*/
- private void updateServicesStateLocked(List<AccessibilityServiceInfo> installedServices,
+ private int updateServicesStateLocked(List<AccessibilityServiceInfo> installedServices,
Set<ComponentName> enabledServices) {
Map<ComponentName, Service> componentNameToServiceMap = mComponentNameToServiceMap;
boolean isEnabled = mIsAccessibilityEnabled;
+ int enabledInstalledServices = 0;
for (int i = 0, count = installedServices.size(); i < count; i++) {
AccessibilityServiceInfo installedService = installedServices.get(i);
ComponentName componentName = ComponentName.unflattenFromString(
@@ -790,6 +798,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
service = new Service(componentName, installedService, false);
}
service.bind();
+ enabledInstalledServices++;
} else {
if (service != null) {
service.unbind();
@@ -801,19 +810,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
}
}
- }
- /**
- * Disables accessibility if there are no enabled accessibility services which
- * to consume the generated accessibility events.
- *
- * @param enabledServices The set of enabled services.
- */
- private void disableAccessibilityIfNoEnabledServices(Set<ComponentName> enabledServices) {
- if (enabledServices.isEmpty()) {
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED, 0);
- }
+ return enabledInstalledServices;
}
/**
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index aa43bb69899d..5875ee3c436c 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -659,8 +659,8 @@ public class TouchExplorer implements Explorer {
* @param policyFlags The policy flags associated with the event.
*/
private void sendActionDownAndUp(MotionEvent prototype, int policyFlags) {
- // Tap with the pointer that last went up - we may have inactive pointers.
- final int pointerId = mPointerTracker.getLastReceivedUpPointerId();
+ // Tap with the pointer that last explored - we may have inactive pointers.
+ final int pointerId = prototype.getPointerId(prototype.getActionIndex());
final int pointerIdBits = (1 << pointerId);
sendMotionEvent(prototype, MotionEvent.ACTION_DOWN, pointerIdBits, policyFlags);
sendMotionEvent(prototype, MotionEvent.ACTION_UP, pointerIdBits, policyFlags);
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 41af1373db06..2942c28a5a6e 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1631,8 +1631,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
if (app.conProviders.size() > 0) {
for (ContentProviderRecord cpr : app.conProviders.keySet()) {
- if (cpr.app != null && cpr.app.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cpr.app, oomAdj,
+ if (cpr.proc != null && cpr.proc.lruSeq != mLruSeq) {
+ updateLruProcessInternalLocked(cpr.proc, oomAdj,
updateActivityTime, i+1);
}
}
@@ -3334,6 +3334,11 @@ public final class ActivityManagerService extends ActivityManagerNative
if ((samePackage || r.task == lastTask)
&& (r.app == null || evenPersistent || !r.app.persistent)) {
if (!doit) {
+ if (r.finishing) {
+ // If this activity is just finishing, then it is not
+ // interesting as far as something to stop.
+ continue;
+ }
return true;
}
didSomething = true;
@@ -3373,7 +3378,24 @@ public final class ActivityManagerService extends ActivityManagerNative
for (i=0; i<N; i++) {
bringDownServiceLocked(services.get(i), true);
}
-
+
+ ArrayList<ContentProviderRecord> providers = new ArrayList<ContentProviderRecord>();
+ for (ContentProviderRecord provider : mProvidersByClass.values()) {
+ if (provider.info.packageName.equals(name)
+ && (provider.proc == null || evenPersistent || !provider.proc.persistent)) {
+ if (!doit) {
+ return true;
+ }
+ didSomething = true;
+ providers.add(provider);
+ }
+ }
+
+ N = providers.size();
+ for (i=0; i<N; i++) {
+ removeDyingProviderLocked(null, providers.get(i));
+ }
+
if (doit) {
if (purgeCache) {
AttributeCache ac = AttributeCache.instance();
@@ -3382,6 +3404,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
mMainStack.resumeTopActivityLocked(null);
+ mMainStack.scheduleIdleLocked();
}
return didSomething;
@@ -3761,6 +3784,12 @@ public final class ActivityManagerService extends ActivityManagerNative
mWindowManager.showBootMessage(msg, always);
}
+ public void dismissKeyguardOnNextActivity() {
+ synchronized (this) {
+ mMainStack.dismissKeyguardOnNextActivityLocked();
+ }
+ }
+
final void finishBooting() {
IntentFilter pkgFilter = new IntentFilter();
pkgFilter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
@@ -5485,7 +5514,7 @@ public final class ActivityManagerService extends ActivityManagerNative
ComponentName comp = new ComponentName(cpi.packageName, cpi.name);
ContentProviderRecord cpr = mProvidersByClass.get(comp);
if (cpr == null) {
- cpr = new ContentProviderRecord(cpi, app.info);
+ cpr = new ContentProviderRecord(cpi, app.info, comp);
mProvidersByClass.put(comp, cpr);
}
app.pubProviders.put(cpi.name, cpr);
@@ -5643,25 +5672,25 @@ public final class ActivityManagerService extends ActivityManagerNative
// return it right away.
final boolean countChanged = incProviderCount(r, cpr);
if (countChanged) {
- if (cpr.app != null && r.setAdj <= ProcessList.PERCEPTIBLE_APP_ADJ) {
+ if (cpr.proc != null && r.setAdj <= ProcessList.PERCEPTIBLE_APP_ADJ) {
// If this is a perceptible app accessing the provider,
// make sure to count it as being accessed and thus
// back up on the LRU list. This is good because
// content providers are often expensive to start.
- updateLruProcessLocked(cpr.app, false, true);
+ updateLruProcessLocked(cpr.proc, false, true);
}
}
- if (cpr.app != null) {
+ if (cpr.proc != null) {
if (false) {
if (cpr.name.flattenToShortString().equals(
"com.android.providers.calendar/.CalendarProvider2")) {
Slog.v(TAG, "****************** KILLING "
+ cpr.name.flattenToShortString());
- Process.killProcess(cpr.app.pid);
+ Process.killProcess(cpr.proc.pid);
}
}
- boolean success = updateOomAdjLocked(cpr.app);
+ boolean success = updateOomAdjLocked(cpr.proc);
if (DEBUG_PROVIDER) Slog.i(TAG, "Adjust success: " + success);
// NOTE: there is still a race here where a signal could be
// pending on the process even though we managed to update its
@@ -5676,7 +5705,7 @@ public final class ActivityManagerService extends ActivityManagerNative
"Existing provider " + cpr.name.flattenToShortString()
+ " is crashing; detaching " + r);
boolean lastRef = decProviderCount(r, cpr);
- appDiedLocked(cpr.app, cpr.app.pid, cpr.app.thread);
+ appDiedLocked(cpr.proc, cpr.proc.pid, cpr.proc.thread);
if (!lastRef) {
// This wasn't the last ref our process had on
// the provider... we have now been killed, bail.
@@ -5729,7 +5758,7 @@ public final class ActivityManagerService extends ActivityManagerNative
+ cpi.name);
return null;
}
- cpr = new ContentProviderRecord(cpi, ai);
+ cpr = new ContentProviderRecord(cpi, ai, comp);
} catch (RemoteException ex) {
// pm is in same process, this will never happen.
}
@@ -5864,7 +5893,7 @@ public final class ActivityManagerService extends ActivityManagerNative
//update content provider record entry info
ComponentName comp = new ComponentName(cpr.info.packageName, cpr.info.name);
ContentProviderRecord localCpr = mProvidersByClass.get(comp);
- if (localCpr.app == r) {
+ if (localCpr.proc == r) {
//should not happen. taken care of as a local provider
Slog.w(TAG, "removeContentProvider called on local provider: "
+ cpr.info.name + " in process " + r.processName);
@@ -5940,7 +5969,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
synchronized (dst) {
dst.provider = src.provider;
- dst.app = r;
+ dst.proc = r;
dst.notifyAll();
}
updateOomAdjLocked(r);
@@ -7884,6 +7913,8 @@ public final class ActivityManagerService extends ActivityManagerNative
if (dumpAll) {
pw.println(" mLastPausedActivity: " + mMainStack.mLastPausedActivity);
pw.println(" mSleepTimeout: " + mMainStack.mSleepTimeout);
+ pw.println(" mDismissKeyguardOnNextActivity: "
+ + mMainStack.mDismissKeyguardOnNextActivity);
}
if (mRecentTasks.size() > 0) {
@@ -8524,7 +8555,7 @@ public final class ActivityManagerService extends ActivityManagerNative
for (int i=0; i<N; i++) {
sb.setLength(0);
sb.append(" Intent: ");
- intents.get(i).toShortString(sb, true, false);
+ intents.get(i).toShortString(sb, false, true, false);
pw.println(sb.toString());
Bundle bundle = intents.get(i).getExtras();
if (bundle != null) {
@@ -8706,9 +8737,9 @@ public final class ActivityManagerService extends ActivityManagerNative
r.dump(pw, " ");
} else {
pw.print(" * "); pw.print(e.getKey().flattenToShortString());
- if (r.app != null) {
+ if (r.proc != null) {
pw.println(":");
- pw.print(" "); pw.println(r.app);
+ pw.print(" "); pw.println(r.proc);
} else {
pw.println();
}
@@ -8817,7 +8848,8 @@ public final class ActivityManagerService extends ActivityManagerNative
} else if (complete) {
// Complete + brief == give a summary. Isn't that obvious?!?
if (lastTask.intent != null) {
- pw.print(prefix); pw.print(" "); pw.println(lastTask.intent);
+ pw.print(prefix); pw.print(" ");
+ pw.println(lastTask.intent.toInsecureString());
}
}
}
@@ -8828,7 +8860,7 @@ public final class ActivityManagerService extends ActivityManagerNative
r.dump(pw, innerPrefix);
} else if (complete) {
// Complete + brief == give a summary. Isn't that obvious?!?
- pw.print(innerPrefix); pw.println(r.intent);
+ pw.print(innerPrefix); pw.println(r.intent.toInsecureString());
if (r.app != null) {
pw.print(innerPrefix); pw.println(r.app);
}
@@ -9440,7 +9472,7 @@ public final class ActivityManagerService extends ActivityManagerNative
cpr.notifyAll();
}
- mProvidersByClass.remove(cpr.info.name);
+ mProvidersByClass.remove(cpr.name);
String names[] = cpr.info.authority.split(";");
for (int j = 0; j < names.length; j++) {
mProvidersByName.remove(names[j]);
@@ -9454,9 +9486,10 @@ public final class ActivityManagerService extends ActivityManagerNative
&& capp.pid != MY_PID) {
Slog.i(TAG, "Kill " + capp.processName
+ " (pid " + capp.pid + "): provider " + cpr.info.name
- + " in dying process " + proc.processName);
+ + " in dying process " + (proc != null ? proc.processName : "??"));
EventLog.writeEvent(EventLogTags.AM_KILL, capp.pid,
- capp.processName, capp.setAdj, "dying provider " + proc.processName);
+ capp.processName, capp.setAdj, "dying provider "
+ + cpr.name.toShortString());
Process.killProcessQuiet(capp.pid);
}
}
@@ -9515,7 +9548,7 @@ public final class ActivityManagerService extends ActivityManagerNative
while (it.hasNext()) {
ContentProviderRecord cpr = it.next();
cpr.provider = null;
- cpr.app = null;
+ cpr.proc = null;
// See if someone is waiting for this provider... in which
// case we don't remove it, but just let it restart.
@@ -10029,7 +10062,7 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean created = false;
try {
mStringBuilder.setLength(0);
- r.intent.getIntent().toShortString(mStringBuilder, false, true);
+ r.intent.getIntent().toShortString(mStringBuilder, true, false, true);
EventLog.writeEvent(EventLogTags.AM_CREATE_SERVICE,
System.identityHashCode(r), r.shortName,
mStringBuilder.toString(), r.app.pid);
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 73ffafb66ec1..ce45bfb17ba9 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -122,7 +122,7 @@ final class ActivityRecord extends IApplicationToken.Stub {
pw.print(" processName="); pw.println(processName);
pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid);
pw.print(" app="); pw.println(app);
- pw.print(prefix); pw.println(intent);
+ pw.print(prefix); pw.println(intent.toInsecureString());
pw.print(prefix); pw.print("frontOfTask="); pw.print(frontOfTask);
pw.print(" task="); pw.println(task);
pw.print(prefix); pw.print("taskAffinity="); pw.println(taskAffinity);
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index a0aedf984473..7bc19ab43882 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -259,6 +259,11 @@ final class ActivityStack {
*/
boolean mSleepTimeout = false;
+ /**
+ * Dismiss the keyguard after the next activity is displayed?
+ */
+ boolean mDismissKeyguardOnNextActivity = false;
+
int mThumbnailWidth = -1;
int mThumbnailHeight = -1;
@@ -765,9 +770,7 @@ final class ActivityStack {
// Still need to tell some activities to stop; can't sleep yet.
if (DEBUG_PAUSE) Slog.v(TAG, "Sleep still need to stop "
+ mStoppingActivities.size() + " activities");
- Message msg = Message.obtain();
- msg.what = IDLE_NOW_MSG;
- mHandler.sendMessage(msg);
+ scheduleIdleLocked();
return;
}
@@ -978,9 +981,7 @@ final class ActivityStack {
// then give up on things going idle and start clearing
// them out.
if (DEBUG_PAUSE) Slog.v(TAG, "To many pending stops, forcing idle");
- Message msg = Message.obtain();
- msg.what = IDLE_NOW_MSG;
- mHandler.sendMessage(msg);
+ scheduleIdleLocked();
} else {
checkReadyForSleepLocked();
}
@@ -2173,7 +2174,7 @@ final class ActivityStack {
}
if (err == START_SUCCESS) {
- Slog.i(TAG, "Starting: " + intent + " from pid "
+ Slog.i(TAG, "START {" + intent.toShortString(true, true, true) + "} from pid "
+ (callerApp != null ? callerApp.pid : callingPid));
}
@@ -2228,6 +2229,7 @@ final class ActivityStack {
resultRecord, resultWho, requestCode,
Activity.RESULT_CANCELED, null);
}
+ mDismissKeyguardOnNextActivity = false;
return err;
}
@@ -2239,6 +2241,7 @@ final class ActivityStack {
resultRecord, resultWho, requestCode,
Activity.RESULT_CANCELED, null);
}
+ mDismissKeyguardOnNextActivity = false;
String msg;
if (!aInfo.exported) {
msg = "Permission Denial: starting " + intent.toString()
@@ -2276,6 +2279,7 @@ final class ActivityStack {
}
// We pretend to the caller that it was really started, but
// they will just get a cancel result.
+ mDismissKeyguardOnNextActivity = false;
return START_SUCCESS;
}
}
@@ -2299,6 +2303,7 @@ final class ActivityStack {
pal.grantedMode = grantedMode;
pal.onlyIfNeeded = onlyIfNeeded;
mService.mPendingActivityLaunches.add(pal);
+ mDismissKeyguardOnNextActivity = false;
return START_SWITCHES_CANCELED;
}
}
@@ -2317,8 +2322,17 @@ final class ActivityStack {
mService.doPendingActivityLaunchesLocked(false);
}
- return startActivityUncheckedLocked(r, sourceRecord,
+ err = startActivityUncheckedLocked(r, sourceRecord,
grantedUriPermissions, grantedMode, onlyIfNeeded, true);
+ if (mDismissKeyguardOnNextActivity && mPausingActivity == null) {
+ // Someone asked to have the keyguard dismissed on the next
+ // activity start, but we are not actually doing an activity
+ // switch... just dismiss the keyguard now, because we
+ // probably want to see whatever is behind it.
+ mDismissKeyguardOnNextActivity = false;
+ mService.mWindowManager.dismissKeyguard();
+ }
+ return err;
}
final void moveHomeToFrontFromLaunchLocked(int launchFlags) {
@@ -2987,6 +3001,11 @@ final class ActivityStack {
w.thisTime = w.totalTime;
}
mService.notifyAll();
+
+ if (mDismissKeyguardOnNextActivity) {
+ mDismissKeyguardOnNextActivity = false;
+ mService.mWindowManager.dismissKeyguard();
+ }
}
void sendActivityResultLocked(int callingUid, ActivityRecord r,
@@ -3103,6 +3122,12 @@ final class ActivityStack {
return stops;
}
+ final void scheduleIdleLocked() {
+ Message msg = Message.obtain();
+ msg.what = IDLE_NOW_MSG;
+ mHandler.sendMessage(msg);
+ }
+
final ActivityRecord activityIdleInternal(IBinder token, boolean fromTimeout,
Configuration config) {
if (localLOGV) Slog.v(TAG, "Activity idle: " + token);
@@ -3413,9 +3438,7 @@ final class ActivityStack {
// If we already have a few activities waiting to stop,
// then give up on things going idle and start clearing
// them out.
- Message msg = Message.obtain();
- msg.what = IDLE_NOW_MSG;
- mHandler.sendMessage(msg);
+ scheduleIdleLocked();
} else {
checkReadyForSleepLocked();
}
@@ -4126,4 +4149,8 @@ final class ActivityStack {
return true;
}
+
+ public void dismissKeyguardOnNextActivityLocked() {
+ mDismissKeyguardOnNextActivity = true;
+ }
}
diff --git a/services/java/com/android/server/am/ContentProviderRecord.java b/services/java/com/android/server/am/ContentProviderRecord.java
index db235ee849e2..9c55597530d2 100644
--- a/services/java/com/android/server/am/ContentProviderRecord.java
+++ b/services/java/com/android/server/am/ContentProviderRecord.java
@@ -32,15 +32,15 @@ class ContentProviderRecord extends ContentProviderHolder {
final ApplicationInfo appInfo;
final ComponentName name;
int externals; // number of non-framework processes supported by this provider
- ProcessRecord app; // if non-null, hosting application
+ ProcessRecord proc; // if non-null, hosting process.
ProcessRecord launchingApp; // if non-null, waiting for this app to be launched.
String stringName;
- public ContentProviderRecord(ProviderInfo _info, ApplicationInfo ai) {
+ public ContentProviderRecord(ProviderInfo _info, ApplicationInfo ai, ComponentName _name) {
super(_info);
uid = ai.uid;
appInfo = ai;
- name = new ComponentName(_info.packageName, _info.name);
+ name = _name;
noReleaseNeeded = uid == 0 || uid == Process.SYSTEM_UID;
}
@@ -61,7 +61,7 @@ class ContentProviderRecord extends ContentProviderHolder {
pw.print(prefix); pw.print("package=");
pw.print(info.applicationInfo.packageName);
pw.print(" process="); pw.println(info.processName);
- pw.print(prefix); pw.print("app="); pw.println(app);
+ pw.print(prefix); pw.print("proc="); pw.println(proc);
if (launchingApp != null) {
pw.print(prefix); pw.print("launchingApp="); pw.println(launchingApp);
}
diff --git a/services/java/com/android/server/am/IntentBindRecord.java b/services/java/com/android/server/am/IntentBindRecord.java
index 3a5ca669c827..2618c77e2b2d 100644
--- a/services/java/com/android/server/am/IntentBindRecord.java
+++ b/services/java/com/android/server/am/IntentBindRecord.java
@@ -54,7 +54,7 @@ class IntentBindRecord {
void dumpInService(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("intent={");
- pw.print(intent.getIntent().toShortString(true, false));
+ pw.print(intent.getIntent().toShortString(false, true, false));
pw.println('}');
pw.print(prefix); pw.print("binder="); pw.println(binder);
pw.print(prefix); pw.print("requested="); pw.print(requested);
@@ -89,7 +89,7 @@ class IntentBindRecord {
sb.append(service.shortName);
sb.append(':');
if (intent != null) {
- intent.getIntent().toShortString(sb, false, false);
+ intent.getIntent().toShortString(sb, false, false, false);
}
sb.append('}');
return stringName = sb.toString();
diff --git a/services/java/com/android/server/am/PendingIntentRecord.java b/services/java/com/android/server/am/PendingIntentRecord.java
index 8ed0cc11abd8..abd2a1f1207d 100644
--- a/services/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/java/com/android/server/am/PendingIntentRecord.java
@@ -150,7 +150,8 @@ class PendingIntentRecord extends IIntentSender.Stub {
public String toString() {
return "Key{" + typeName() + " pkg=" + packageName
+ " intent="
- + (requestIntent != null ? requestIntent.toShortString(true, false) : "<null>")
+ + (requestIntent != null
+ ? requestIntent.toShortString(false, true, false) : "<null>")
+ " flags=0x" + Integer.toHexString(flags) + "}";
}
@@ -317,7 +318,7 @@ class PendingIntentRecord extends IIntentSender.Stub {
}
if (key.requestIntent != null) {
pw.print(prefix); pw.print("requestIntent=");
- pw.println(key.requestIntent.toShortString(true, true));
+ pw.println(key.requestIntent.toShortString(false, true, true));
}
if (sent || canceled) {
pw.print(prefix); pw.print("sent="); pw.print(sent);
diff --git a/services/java/com/android/server/am/ServiceRecord.java b/services/java/com/android/server/am/ServiceRecord.java
index 004e963b27fe..257113bbe671 100644
--- a/services/java/com/android/server/am/ServiceRecord.java
+++ b/services/java/com/android/server/am/ServiceRecord.java
@@ -192,7 +192,7 @@ class ServiceRecord extends Binder {
void dump(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("intent={");
- pw.print(intent.getIntent().toShortString(true, false));
+ pw.print(intent.getIntent().toShortString(false, true, false));
pw.println('}');
pw.print(prefix); pw.print("packageName="); pw.println(packageName);
pw.print(prefix); pw.print("processName="); pw.println(processName);
diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java
index 87129eaca73f..a86076344e8a 100644
--- a/services/java/com/android/server/am/TaskRecord.java
+++ b/services/java/com/android/server/am/TaskRecord.java
@@ -94,14 +94,14 @@ class TaskRecord extends ThumbnailHolder {
if (intent != null) {
StringBuilder sb = new StringBuilder(128);
sb.append(prefix); sb.append("intent={");
- intent.toShortString(sb, true, false);
+ intent.toShortString(sb, false, true, false);
sb.append('}');
pw.println(sb.toString());
}
if (affinityIntent != null) {
StringBuilder sb = new StringBuilder(128);
sb.append(prefix); sb.append("affinityIntent={");
- affinityIntent.toShortString(sb, true, false);
+ affinityIntent.toShortString(sb, false, true, false);
sb.append('}');
pw.println(sb.toString());
}
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index ae8b89d14696..6b9c08852124 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -19,7 +19,6 @@ package com.android.server.connectivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.bluetooth.BluetoothPan;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,15 +27,15 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
-import android.net.InterfaceConfiguration;
import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
+import android.net.INetworkStatsService;
+import android.net.InterfaceConfiguration;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkInfo;
import android.net.NetworkUtils;
import android.os.Binder;
-import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.INetworkManagementService;
@@ -51,6 +50,7 @@ import com.android.internal.telephony.Phone;
import com.android.internal.util.IState;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import com.google.android.collect.Lists;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -59,8 +59,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.Set;
+
/**
* @hide
*
@@ -68,12 +68,12 @@ import java.util.Set;
*
* TODO - look for parent classes and code sharing
*/
-
public class Tethering extends INetworkManagementEventObserver.Stub {
private Context mContext;
private final static String TAG = "Tethering";
- private final static boolean DEBUG = true;
+ private final static boolean DBG = true;
+ private final static boolean VDBG = false;
// TODO - remove both of these - should be part of interface inspection/selection stuff
private String[] mTetherableUsbRegexs;
@@ -89,7 +89,8 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// upstream type list and the DUN_REQUIRED secure-setting
private int mPreferredUpstreamMobileApn = ConnectivityManager.TYPE_NONE;
- private INetworkManagementService mNMService;
+ private final INetworkManagementService mNMService;
+ private final INetworkStatsService mStatsService;
private Looper mLooper;
private HandlerThread mThread;
@@ -125,9 +126,11 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private boolean mUsbTetherRequested; // true if USB tethering should be started
// when RNDIS is enabled
- public Tethering(Context context, INetworkManagementService nmService, Looper looper) {
+ public Tethering(Context context, INetworkManagementService nmService,
+ INetworkStatsService statsService, Looper looper) {
mContext = context;
mNMService = nmService;
+ mStatsService = statsService;
mLooper = looper;
mIfaces = new HashMap<String, TetherInterfaceSM>();
@@ -180,7 +183,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
public void interfaceStatusChanged(String iface, boolean up) {
- if (DEBUG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up);
+ if (VDBG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up);
boolean found = false;
boolean usb = false;
if (isWifi(iface)) {
@@ -205,7 +208,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
if (isUsb(iface)) {
// ignore usb0 down after enabling RNDIS
// we will handle disconnect in interfaceRemoved instead
- Log.d(TAG, "ignoring interface down for " + iface);
+ if (VDBG) Log.d(TAG, "ignoring interface down for " + iface);
} else if (sm != null) {
sm.sendMessage(TetherInterfaceSM.CMD_INTERFACE_DOWN);
mIfaces.remove(iface);
@@ -215,7 +218,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
public void interfaceLinkStateChanged(String iface, boolean up) {
- if (DEBUG) Log.d(TAG, "interfaceLinkStateChanged " + iface + ", " + up);
+ if (VDBG) Log.d(TAG, "interfaceLinkStateChanged " + iface + ", " + up);
interfaceStatusChanged(iface, up);
}
@@ -241,7 +244,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
public void interfaceAdded(String iface) {
- if (DEBUG) Log.d(TAG, "interfaceAdded " + iface);
+ if (VDBG) Log.d(TAG, "interfaceAdded " + iface);
boolean found = false;
boolean usb = false;
if (isWifi(iface)) {
@@ -255,29 +258,29 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
found = true;
}
if (found == false) {
- if (DEBUG) Log.d(TAG, iface + " is not a tetherable iface, ignoring");
+ if (VDBG) Log.d(TAG, iface + " is not a tetherable iface, ignoring");
return;
}
synchronized (mIfaces) {
TetherInterfaceSM sm = mIfaces.get(iface);
if (sm != null) {
- if (DEBUG) Log.d(TAG, "active iface (" + iface + ") reported as added, ignoring");
+ if (VDBG) Log.d(TAG, "active iface (" + iface + ") reported as added, ignoring");
return;
}
sm = new TetherInterfaceSM(iface, mLooper, usb);
mIfaces.put(iface, sm);
sm.start();
}
- if (DEBUG) Log.d(TAG, "interfaceAdded :" + iface);
+ if (VDBG) Log.d(TAG, "interfaceAdded :" + iface);
}
public void interfaceRemoved(String iface) {
- if (DEBUG) Log.d(TAG, "interfaceRemoved " + iface);
+ if (VDBG) Log.d(TAG, "interfaceRemoved " + iface);
synchronized (mIfaces) {
TetherInterfaceSM sm = mIfaces.get(iface);
if (sm == null) {
- if (DEBUG) {
+ if (VDBG) {
Log.e(TAG, "attempting to remove unknown iface (" + iface + "), ignoring");
}
return;
@@ -290,7 +293,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
public void limitReached(String limitName, String iface) {}
public int tether(String iface) {
- Log.d(TAG, "Tethering " + iface);
+ if (DBG) Log.d(TAG, "Tethering " + iface);
TetherInterfaceSM sm = null;
synchronized (mIfaces) {
sm = mIfaces.get(iface);
@@ -308,7 +311,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
public int untether(String iface) {
- Log.d(TAG, "Untethering " + iface);
+ if (DBG) Log.d(TAG, "Untethering " + iface);
TetherInterfaceSM sm = null;
synchronized (mIfaces) {
sm = mIfaces.get(iface);
@@ -385,7 +388,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
broadcast.putStringArrayListExtra(ConnectivityManager.EXTRA_ERRORED_TETHER,
erroredList);
mContext.sendStickyBroadcast(broadcast);
- if (DEBUG) {
+ if (VDBG) {
Log.d(TAG, "sendTetherStateChangedBroadcast " + availableList.size() + ", " +
activeList.size() + ", " + erroredList.size());
}
@@ -470,14 +473,14 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
mUsbTetherRequested = false;
}
} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- if (DEBUG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION");
+ if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION");
mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED);
}
}
}
private void tetherUsb(boolean enable) {
- if (DEBUG) Log.d(TAG, "tetherUsb " + enable);
+ if (VDBG) Log.d(TAG, "tetherUsb " + enable);
String[] ifaces = new String[0];
try {
@@ -499,7 +502,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// configured when we start tethering and unconfig'd on error or conclusion
private boolean configureUsbIface(boolean enabled) {
- if (DEBUG) Log.d(TAG, "configureUsbIface(" + enabled + ")");
+ if (VDBG) Log.d(TAG, "configureUsbIface(" + enabled + ")");
// toggle the USB interfaces
String[] ifaces = new String[0];
@@ -549,7 +552,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
public int setUsbTethering(boolean enable) {
- if (DEBUG) Log.d(TAG, "setUsbTethering(" + enable + ")");
+ if (VDBG) Log.d(TAG, "setUsbTethering(" + enable + ")");
UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
synchronized (this) {
@@ -629,6 +632,19 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
return retVal;
}
+ public String[] getTetheredIfacePairs() {
+ final ArrayList<String> list = Lists.newArrayList();
+ synchronized (mIfaces) {
+ for (TetherInterfaceSM sm : mIfaces.values()) {
+ if (sm.isTethered()) {
+ list.add(sm.mMyUpstreamIfaceName);
+ list.add(sm.mIfaceName);
+ }
+ }
+ }
+ return list.toArray(new String[list.size()]);
+ }
+
public String[] getTetherableIfaces() {
ArrayList<String> list = new ArrayList<String>();
synchronized (mIfaces) {
@@ -797,7 +813,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
@Override
public boolean processMessage(Message message) {
- if (DEBUG) Log.d(TAG, "InitialState.processMessage what=" + message.what);
+ if (VDBG) Log.d(TAG, "InitialState.processMessage what=" + message.what);
boolean retValue = true;
switch (message.what) {
case CMD_TETHER_REQUESTED:
@@ -838,7 +854,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
@Override
public boolean processMessage(Message message) {
- if (DEBUG) Log.d(TAG, "StartingState.processMessage what=" + message.what);
+ if (VDBG) Log.d(TAG, "StartingState.processMessage what=" + message.what);
boolean retValue = true;
switch (message.what) {
// maybe a parent class?
@@ -886,14 +902,14 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
transitionTo(mInitialState);
return;
}
- if (DEBUG) Log.d(TAG, "Tethered " + mIfaceName);
+ if (DBG) Log.d(TAG, "Tethered " + mIfaceName);
setAvailable(false);
setTethered(true);
sendTetherStateChangedBroadcast();
}
@Override
public boolean processMessage(Message message) {
- if (DEBUG) Log.d(TAG, "TetheredState.processMessage what=" + message.what);
+ if (VDBG) Log.d(TAG, "TetheredState.processMessage what=" + message.what);
boolean retValue = true;
boolean error = false;
switch (message.what) {
@@ -901,6 +917,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
case CMD_INTERFACE_DOWN:
if (mMyUpstreamIfaceName != null) {
try {
+ // about to tear down NAT; gather remaining statistics
+ mStatsService.forceUpdate();
+
mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
@@ -933,18 +952,21 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
} else if (message.what == CMD_INTERFACE_DOWN) {
transitionTo(mUnavailableState);
}
- if (DEBUG) Log.d(TAG, "Untethered " + mIfaceName);
+ if (DBG) Log.d(TAG, "Untethered " + mIfaceName);
break;
case CMD_TETHER_CONNECTION_CHANGED:
String newUpstreamIfaceName = (String)(message.obj);
if ((mMyUpstreamIfaceName == null && newUpstreamIfaceName == null) ||
(mMyUpstreamIfaceName != null &&
mMyUpstreamIfaceName.equals(newUpstreamIfaceName))) {
- if (DEBUG) Log.d(TAG, "Connection changed noop - dropping");
+ if (VDBG) Log.d(TAG, "Connection changed noop - dropping");
break;
}
if (mMyUpstreamIfaceName != null) {
try {
+ // about to tear down NAT; gather remaining statistics
+ mStatsService.forceUpdate();
+
mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
@@ -983,6 +1005,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
case CMD_TETHER_MODE_DEAD:
if (mMyUpstreamIfaceName != null) {
try {
+ // about to tear down NAT; gather remaining statistics
+ mStatsService.forceUpdate();
+
mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName);
mMyUpstreamIfaceName = null;
} catch (Exception e) {
@@ -1007,7 +1032,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
ConnectivityManager.TETHER_ERROR_MASTER_ERROR);
break;
}
- if (DEBUG) Log.d(TAG, "Tether lost upstream connection " + mIfaceName);
+ if (VDBG) Log.d(TAG, "Tether lost upstream connection " + mIfaceName);
sendTetherStateChangedBroadcast();
if (mUsb) {
if (!Tethering.this.configureUsbIface(false)) {
@@ -1237,7 +1262,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
}
- if (DEBUG) {
+ if (VDBG) {
Log.d(TAG, "chooseUpstreamType(" + tryCell + "), preferredApn ="
+ mPreferredUpstreamMobileApn + ", got type=" + upType);
}
@@ -1269,7 +1294,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
protected void notifyTetheredOfNewUpstreamIface(String ifaceName) {
- if (DEBUG) Log.d(TAG, "notifying tethered with iface =" + ifaceName);
+ if (VDBG) Log.d(TAG, "notifying tethered with iface =" + ifaceName);
mUpstreamIfaceName = ifaceName;
for (Object o : mNotifyList) {
TetherInterfaceSM sm = (TetherInterfaceSM)o;
@@ -1285,19 +1310,19 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
@Override
public boolean processMessage(Message message) {
- if (DEBUG) Log.d(TAG, "MasterInitialState.processMessage what=" + message.what);
+ if (VDBG) Log.d(TAG, "MasterInitialState.processMessage what=" + message.what);
boolean retValue = true;
switch (message.what) {
case CMD_TETHER_MODE_REQUESTED:
checkDunRequired();
TetherInterfaceSM who = (TetherInterfaceSM)message.obj;
- if (DEBUG) Log.d(TAG, "Tether Mode requested by " + who.toString());
+ if (VDBG) Log.d(TAG, "Tether Mode requested by " + who.toString());
mNotifyList.add(who);
transitionTo(mTetherModeAliveState);
break;
case CMD_TETHER_MODE_UNREQUESTED:
who = (TetherInterfaceSM)message.obj;
- if (DEBUG) Log.d(TAG, "Tether Mode unrequested by " + who.toString());
+ if (VDBG) Log.d(TAG, "Tether Mode unrequested by " + who.toString());
int index = mNotifyList.indexOf(who);
if (index != -1) {
mNotifyList.remove(who);
@@ -1328,7 +1353,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
@Override
public boolean processMessage(Message message) {
- if (DEBUG) Log.d(TAG, "TetherModeAliveState.processMessage what=" + message.what);
+ if (VDBG) Log.d(TAG, "TetherModeAliveState.processMessage what=" + message.what);
boolean retValue = true;
switch (message.what) {
case CMD_TETHER_MODE_REQUESTED:
@@ -1357,7 +1382,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
// make sure we're still using a requested connection - may have found
// wifi or something since then.
if (mCurrentConnectionSequence == message.arg1) {
- if (DEBUG) {
+ if (VDBG) {
Log.d(TAG, "renewing mobile connection - requeuing for another " +
CELL_CONNECTION_RENEW_MS + "ms");
}
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index a2b097ecb4e9..aa46795b4fb9 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -24,6 +24,7 @@ import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
import static android.content.Intent.ACTION_SHUTDOWN;
import static android.content.Intent.ACTION_UID_REMOVED;
import static android.content.Intent.EXTRA_UID;
+import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE;
import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.SET_ALL;
@@ -34,7 +35,7 @@ import static android.net.NetworkStats.UID_ALL;
import static android.net.NetworkTemplate.buildTemplateMobileAll;
import static android.net.NetworkTemplate.buildTemplateWifi;
import static android.net.TrafficStats.UID_REMOVED;
-import static android.provider.Settings.Secure.NETSTATS_FORCE_COMPLETE_POLL;
+import static android.net.TrafficStats.UID_TETHERING;
import static android.provider.Settings.Secure.NETSTATS_NETWORK_BUCKET_DURATION;
import static android.provider.Settings.Secure.NETSTATS_NETWORK_MAX_HISTORY;
import static android.provider.Settings.Secure.NETSTATS_PERSIST_THRESHOLD;
@@ -42,9 +43,12 @@ import static android.provider.Settings.Secure.NETSTATS_POLL_INTERVAL;
import static android.provider.Settings.Secure.NETSTATS_TAG_MAX_HISTORY;
import static android.provider.Settings.Secure.NETSTATS_UID_BUCKET_DURATION;
import static android.provider.Settings.Secure.NETSTATS_UID_MAX_HISTORY;
+import static android.telephony.PhoneStateListener.LISTEN_DATA_CONNECTION_STATE;
+import static android.telephony.PhoneStateListener.LISTEN_NONE;
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 android.text.format.DateUtils.SECOND_IN_MILLIS;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.server.NetworkManagementService.LIMIT_GLOBAL_ALERT;
import static com.android.server.NetworkManagementSocketTagger.resetKernelUidStats;
@@ -68,6 +72,7 @@ import android.net.NetworkState;
import android.net.NetworkStats;
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
+import android.net.TrafficStats;
import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
@@ -78,6 +83,7 @@ import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.provider.Settings;
+import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.EventLog;
import android.util.Log;
@@ -89,6 +95,7 @@ import android.util.TrustedTime;
import com.android.internal.os.AtomicFile;
import com.android.internal.util.Objects;
import com.android.server.EventLogTags;
+import com.android.server.connectivity.Tethering;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
import com.google.android.collect.Sets;
@@ -118,7 +125,7 @@ import libcore.io.IoUtils;
*/
public class NetworkStatsService extends INetworkStatsService.Stub {
private static final String TAG = "NetworkStats";
- private static final boolean LOGD = true;
+ private static final boolean LOGD = false;
private static final boolean LOGV = false;
/** File header magic number: "ANET" */
@@ -129,22 +136,20 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private static final int VERSION_UID_WITH_TAG = 3;
private static final int VERSION_UID_WITH_SET = 4;
- private static final int MSG_PERFORM_POLL = 0x1;
+ private static final int MSG_PERFORM_POLL = 1;
+ private static final int MSG_UPDATE_IFACES = 2;
/** Flags to control detail level of poll event. */
- private static final int FLAG_POLL_NETWORK = 0x1;
- private static final int FLAG_POLL_UID = 0x2;
private static final int FLAG_PERSIST_NETWORK = 0x10;
private static final int FLAG_PERSIST_UID = 0x20;
- private static final int FLAG_FORCE_PERSIST = 0x100;
-
- private static final int FLAG_POLL_ALL = FLAG_POLL_NETWORK | FLAG_POLL_UID;
private static final int FLAG_PERSIST_ALL = FLAG_PERSIST_NETWORK | FLAG_PERSIST_UID;
+ private static final int FLAG_PERSIST_FORCE = 0x100;
private final Context mContext;
private final INetworkManagementService mNetworkManager;
private final IAlarmManager mAlarmManager;
private final TrustedTime mTime;
+ private final TelephonyManager mTeleManager;
private final NetworkStatsSettings mSettings;
private final PowerManager.WakeLock mWakeLock;
@@ -177,7 +182,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public long getUidMaxHistory();
public long getTagMaxHistory();
public long getTimeCacheMaxAge();
- public boolean getForceCompletePoll();
}
private final Object mStatsLock = new Object();
@@ -195,6 +199,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private NetworkStats mLastPollNetworkSnapshot;
private NetworkStats mLastPollUidSnapshot;
private NetworkStats mLastPollOperationsSnapshot;
+ private NetworkStats mLastPollTetherSnapshot;
private NetworkStats mLastPersistNetworkSnapshot;
private NetworkStats mLastPersistUidSnapshot;
@@ -228,6 +233,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
mNetworkManager = checkNotNull(networkManager, "missing INetworkManagementService");
mAlarmManager = checkNotNull(alarmManager, "missing IAlarmManager");
mTime = checkNotNull(time, "missing TrustedTime");
+ mTeleManager = checkNotNull(TelephonyManager.getDefault(), "missing TelephonyManager");
mSettings = checkNotNull(settings, "missing NetworkStatsSettings");
final PowerManager powerManager = (PowerManager) context.getSystemService(
@@ -258,6 +264,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION_IMMEDIATE);
mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler);
+ // watch for tethering changes
+ final IntentFilter tetherFilter = new IntentFilter(ACTION_TETHER_STATE_CHANGED);
+ mContext.registerReceiver(mTetherReceiver, tetherFilter, CONNECTIVITY_INTERNAL, mHandler);
+
// listen for periodic polling events
final IntentFilter pollFilter = new IntentFilter(ACTION_NETWORK_STATS_POLL);
mContext.registerReceiver(mPollReceiver, pollFilter, READ_NETWORK_USAGE_HISTORY, mHandler);
@@ -276,6 +286,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// ignored; service lives in system_server
}
+ // watch for networkType changes that aren't broadcast through
+ // CONNECTIVITY_ACTION_IMMEDIATE above.
+ mTeleManager.listen(mPhoneListener, LISTEN_DATA_CONNECTION_STATE);
+
registerPollAlarmLocked();
registerGlobalAlert();
@@ -285,10 +299,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
private void shutdownLocked() {
mContext.unregisterReceiver(mConnReceiver);
+ mContext.unregisterReceiver(mTetherReceiver);
mContext.unregisterReceiver(mPollReceiver);
mContext.unregisterReceiver(mRemovedReceiver);
mContext.unregisterReceiver(mShutdownReceiver);
+ mTeleManager.listen(mPhoneListener, LISTEN_NONE);
+
writeNetworkStatsLocked();
if (mUidStatsLoaded) {
writeUidStatsLocked();
@@ -519,7 +536,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
@Override
public void forceUpdate() {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
- performPoll(FLAG_POLL_ALL | FLAG_PERSIST_ALL);
+ performPoll(FLAG_PERSIST_ALL);
}
/**
@@ -532,14 +549,19 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public void onReceive(Context context, Intent intent) {
// on background handler thread, and verified CONNECTIVITY_INTERNAL
// permission above.
- synchronized (mStatsLock) {
- mWakeLock.acquire();
- try {
- updateIfacesLocked();
- } finally {
- mWakeLock.release();
- }
- }
+ updateIfaces();
+ }
+ };
+
+ /**
+ * Receiver that watches for {@link Tethering} to claim interface pairs.
+ */
+ private BroadcastReceiver mTetherReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // on background handler thread, and verified CONNECTIVITY_INTERNAL
+ // permission above.
+ performPoll(FLAG_PERSIST_NETWORK);
}
};
@@ -548,7 +570,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public void onReceive(Context context, Intent intent) {
// on background handler thread, and verified UPDATE_DEVICE_STATS
// permission above.
- performPoll(FLAG_POLL_ALL | FLAG_PERSIST_ALL);
+ performPoll(FLAG_PERSIST_ALL);
// verify that we're watching global alert
registerGlobalAlert();
@@ -595,7 +617,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
if (LIMIT_GLOBAL_ALERT.equals(limitName)) {
// kick off background poll to collect network stats; UID stats
// are handled during normal polling interval.
- final int flags = FLAG_POLL_NETWORK | FLAG_PERSIST_NETWORK;
+ final int flags = FLAG_PERSIST_NETWORK;
mHandler.obtainMessage(MSG_PERFORM_POLL, flags, 0).sendToTarget();
// re-arm global alert for next update
@@ -604,6 +626,46 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
};
+ private int mLastPhoneState = TelephonyManager.DATA_UNKNOWN;
+ private int mLastPhoneNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
+
+ /**
+ * Receiver that watches for {@link TelephonyManager} changes, such as
+ * transitioning between network types.
+ */
+ private PhoneStateListener mPhoneListener = new PhoneStateListener() {
+ @Override
+ public void onDataConnectionStateChanged(int state, int networkType) {
+ final boolean stateChanged = state != mLastPhoneState;
+ final boolean networkTypeChanged = networkType != mLastPhoneNetworkType;
+
+ if (networkTypeChanged && !stateChanged) {
+ // networkType changed without a state change, which means we
+ // need to roll our own update. delay long enough for
+ // ConnectivityManager to process.
+ // TODO: add direct event to ConnectivityService instead of
+ // relying on this delay.
+ if (LOGV) Slog.v(TAG, "triggering delayed updateIfaces()");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MSG_UPDATE_IFACES), SECOND_IN_MILLIS);
+ }
+
+ mLastPhoneState = state;
+ mLastPhoneNetworkType = networkType;
+ }
+ };
+
+ private void updateIfaces() {
+ synchronized (mStatsLock) {
+ mWakeLock.acquire();
+ try {
+ updateIfacesLocked();
+ } finally {
+ mWakeLock.release();
+ }
+ }
+ }
+
/**
* Inspect all current {@link NetworkState} to derive mapping from {@code
* iface} to {@link NetworkStatsHistory}. When multiple {@link NetworkInfo}
@@ -617,10 +679,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// isn't perfect, since the kernel may already be counting traffic from
// the updated network.
- // poll both network and UID stats, but only persist network stats,
- // since this codepath should stay fast. UID stats will be persisted
- // during next alarm poll event.
- performPollLocked(FLAG_POLL_ALL | FLAG_PERSIST_NETWORK);
+ // poll, but only persist network stats to keep codepath fast. UID stats
+ // will be persisted during next alarm poll event.
+ performPollLocked(FLAG_PERSIST_NETWORK);
final NetworkState[] states;
try {
@@ -684,19 +745,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
if (LOGV) Slog.v(TAG, "performPollLocked(flags=0x" + Integer.toHexString(flags) + ")");
final long startRealtime = SystemClock.elapsedRealtime();
- boolean pollNetwork = (flags & FLAG_POLL_NETWORK) != 0;
- boolean pollUid = (flags & FLAG_POLL_UID) != 0;
-
- // when complete poll requested, any partial poll enables everything
- final boolean forceCompletePoll = mSettings.getForceCompletePoll();
- if (forceCompletePoll && (pollNetwork || pollUid)) {
- pollNetwork = true;
- pollUid = true;
- }
-
final boolean persistNetwork = (flags & FLAG_PERSIST_NETWORK) != 0;
final boolean persistUid = (flags & FLAG_PERSIST_UID) != 0;
- final boolean forcePersist = (flags & FLAG_FORCE_PERSIST) != 0;
+ final boolean persistForce = (flags & FLAG_PERSIST_FORCE) != 0;
// try refreshing time source when stale
if (mTime.getCacheAge() > mSettings.getTimeCacheMaxAge()) {
@@ -709,32 +760,36 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
final long threshold = mSettings.getPersistThreshold();
try {
- if (pollNetwork) {
- final NetworkStats networkSnapshot = mNetworkManager.getNetworkStatsSummary();
- performNetworkPollLocked(networkSnapshot, currentTime);
-
- // persist when enough network data has occurred
- final NetworkStats persistNetworkDelta = computeStatsDelta(
- mLastPersistNetworkSnapshot, networkSnapshot, true);
- final boolean pastThreshold = persistNetworkDelta.getTotalBytes() > threshold;
- if (forcePersist || (persistNetwork && pastThreshold)) {
- writeNetworkStatsLocked();
- mLastPersistNetworkSnapshot = networkSnapshot;
- }
+ // record tethering stats; persisted during normal UID cycle below
+ final String[] ifacePairs = mConnManager.getTetheredIfacePairs();
+ final NetworkStats tetherSnapshot = mNetworkManager.getNetworkStatsTethering(
+ ifacePairs);
+ performTetherPollLocked(tetherSnapshot, currentTime);
+
+ // record uid stats
+ final NetworkStats uidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
+ performUidPollLocked(uidSnapshot, currentTime);
+
+ // persist when enough network data has occurred
+ final NetworkStats persistUidDelta = computeStatsDelta(
+ mLastPersistUidSnapshot, uidSnapshot, true);
+ final boolean uidPastThreshold = persistUidDelta.getTotalBytes() > threshold;
+ if (persistForce || (persistUid && uidPastThreshold)) {
+ writeUidStatsLocked();
+ mLastPersistUidSnapshot = uidSnapshot;
}
- if (pollUid) {
- final NetworkStats uidSnapshot = mNetworkManager.getNetworkStatsUidDetail(UID_ALL);
- performUidPollLocked(uidSnapshot, currentTime);
-
- // persist when enough network data has occurred
- final NetworkStats persistUidDelta = computeStatsDelta(
- mLastPersistUidSnapshot, uidSnapshot, true);
- final boolean pastThreshold = persistUidDelta.getTotalBytes() > threshold;
- if (forcePersist || (persistUid && pastThreshold)) {
- writeUidStatsLocked();
- mLastPersistUidSnapshot = uidSnapshot;
- }
+ // record network stats
+ final NetworkStats networkSnapshot = mNetworkManager.getNetworkStatsSummary();
+ performNetworkPollLocked(networkSnapshot, currentTime);
+
+ // persist when enough network data has occurred
+ final NetworkStats persistNetworkDelta = computeStatsDelta(
+ mLastPersistNetworkSnapshot, networkSnapshot, true);
+ final boolean networkPastThreshold = persistNetworkDelta.getTotalBytes() > threshold;
+ if (persistForce || (persistNetwork && networkPastThreshold)) {
+ writeNetworkStatsLocked();
+ mLastPersistNetworkSnapshot = networkSnapshot;
}
} catch (IllegalStateException e) {
Log.wtf(TAG, "problem reading network stats", e);
@@ -748,9 +803,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
// sample stats after each full poll
- if (pollNetwork && pollUid) {
- performSample();
- }
+ performSample();
// finally, dispatch updated event to any listeners
final Intent updatedIntent = new Intent(ACTION_NETWORK_STATS_UPDATED);
@@ -780,12 +833,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
history.recordData(timeStart, currentTime, entry);
}
- // trim any history beyond max
- final long maxHistory = mSettings.getNetworkMaxHistory();
- for (NetworkStatsHistory history : mNetworkStats.values()) {
- history.removeBucketsBefore(currentTime - maxHistory);
- }
-
mLastPollNetworkSnapshot = networkSnapshot;
if (LOGD && unknownIface.size() > 0) {
@@ -829,32 +876,54 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
history.recordData(timeStart, currentTime, entry);
}
- // trim any history beyond max
- final long maxUidHistory = mSettings.getUidMaxHistory();
- final long maxTagHistory = mSettings.getTagMaxHistory();
- for (UidStatsKey key : mUidStats.keySet()) {
- final NetworkStatsHistory history = mUidStats.get(key);
+ mLastPollUidSnapshot = uidSnapshot;
+ mLastPollOperationsSnapshot = mOperations;
+ mOperations = new NetworkStats(0L, 10);
+ }
+
+ /**
+ * Update {@link #mUidStats} historical usage for
+ * {@link TrafficStats#UID_TETHERING} based on tethering statistics.
+ */
+ private void performTetherPollLocked(NetworkStats tetherSnapshot, long currentTime) {
+ ensureUidStatsLoadedLocked();
- // detailed tags are trimmed sooner than summary in TAG_NONE
- if (key.tag == TAG_NONE) {
- history.removeBucketsBefore(currentTime - maxUidHistory);
- } else {
- history.removeBucketsBefore(currentTime - maxTagHistory);
+ final NetworkStats delta = computeStatsDelta(
+ mLastPollTetherSnapshot, tetherSnapshot, false);
+ final long timeStart = currentTime - delta.getElapsedRealtime();
+
+ NetworkStats.Entry entry = null;
+ for (int i = 0; i < delta.size(); i++) {
+ entry = delta.getValues(i, entry);
+ final NetworkIdentitySet ident = mActiveIfaces.get(entry.iface);
+ if (ident == null) {
+ if (entry.rxBytes > 0 || entry.rxPackets > 0 || entry.txBytes > 0
+ || entry.txPackets > 0) {
+ Log.w(TAG, "dropping tether delta from unknown iface: " + entry);
+ }
+ continue;
}
+
+ final NetworkStatsHistory history = findOrCreateUidStatsLocked(
+ ident, UID_TETHERING, SET_DEFAULT, TAG_NONE);
+ history.recordData(timeStart, currentTime, entry);
}
- mLastPollUidSnapshot = uidSnapshot;
- mLastPollOperationsSnapshot = mOperations;
- mOperations = new NetworkStats(0L, 10);
+ // normal UID poll will trim any history beyond max
+ mLastPollTetherSnapshot = tetherSnapshot;
}
/**
* Sample recent statistics summary into {@link EventLog}.
*/
private void performSample() {
- // take sample as total over last 4 hours
- final long end = mTime.hasCache() ? mTime.currentTimeMillis() : System.currentTimeMillis();
- final long start = end - (4 * HOUR_IN_MILLIS);
+ final long largestBucketSize = Math.max(
+ mSettings.getNetworkBucketDuration(), mSettings.getUidBucketDuration());
+
+ // take sample as atomic buckets
+ final long now = mTime.hasCache() ? mTime.currentTimeMillis() : System.currentTimeMillis();
+ final long end = now - (now % largestBucketSize) + largestBucketSize;
+ final long start = end - largestBucketSize;
NetworkTemplate template = null;
NetworkStats.Entry ifaceTotal = null;
@@ -864,15 +933,17 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
template = buildTemplateMobileAll(getActiveSubscriberId(mContext));
ifaceTotal = getSummaryForNetwork(template, start, end).getTotal(ifaceTotal);
uidTotal = getSummaryForAllUid(template, start, end, false).getTotal(uidTotal);
- EventLogTags.writeNetstatsMobileSample(
- ifaceTotal.rxBytes, ifaceTotal.txBytes, uidTotal.rxBytes, uidTotal.txBytes);
+ EventLogTags.writeNetstatsMobileSample(ifaceTotal.rxBytes, ifaceTotal.rxPackets,
+ ifaceTotal.txBytes, ifaceTotal.txPackets, uidTotal.rxBytes, uidTotal.rxPackets,
+ uidTotal.txBytes, uidTotal.txPackets);
// collect wifi sample
template = buildTemplateWifi();
ifaceTotal = getSummaryForNetwork(template, start, end).getTotal(ifaceTotal);
uidTotal = getSummaryForAllUid(template, start, end, false).getTotal(uidTotal);
- EventLogTags.writeNetstatsWifiSample(
- ifaceTotal.rxBytes, ifaceTotal.txBytes, uidTotal.rxBytes, uidTotal.txBytes);
+ EventLogTags.writeNetstatsWifiSample(ifaceTotal.rxBytes, ifaceTotal.rxPackets,
+ ifaceTotal.txBytes, ifaceTotal.txPackets, uidTotal.rxBytes, uidTotal.rxPackets,
+ uidTotal.txBytes, uidTotal.txPackets);
}
/**
@@ -1072,6 +1143,15 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// TODO: consider duplicating stats and releasing lock while writing
+ // trim any history beyond max
+ if (mTime.hasCache()) {
+ final long currentTime = mTime.currentTimeMillis();
+ final long maxHistory = mSettings.getNetworkMaxHistory();
+ for (NetworkStatsHistory history : mNetworkStats.values()) {
+ history.removeBucketsBefore(currentTime - maxHistory);
+ }
+ }
+
FileOutputStream fos = null;
try {
fos = mNetworkFile.startWrite();
@@ -1107,6 +1187,23 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
// TODO: consider duplicating stats and releasing lock while writing
+ // trim any history beyond max
+ if (mTime.hasCache()) {
+ final long currentTime = mTime.currentTimeMillis();
+ final long maxUidHistory = mSettings.getUidMaxHistory();
+ final long maxTagHistory = mSettings.getTagMaxHistory();
+ 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);
+ }
+ }
+ }
+
// build UidStatsKey lists grouped by ident
final HashMap<NetworkIdentitySet, ArrayList<UidStatsKey>> keysByIdent = Maps.newHashMap();
for (UidStatsKey key : mUidStats.keySet()) {
@@ -1171,7 +1268,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
}
if (argSet.contains("poll")) {
- performPollLocked(FLAG_POLL_ALL | FLAG_PERSIST_ALL | FLAG_FORCE_PERSIST);
+ performPollLocked(FLAG_PERSIST_ALL | FLAG_PERSIST_FORCE);
pw.println("Forced poll");
return;
}
@@ -1306,6 +1403,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
performPoll(flags);
return true;
}
+ case MSG_UPDATE_IFACES: {
+ updateIfaces();
+ return true;
+ }
default: {
return false;
}
@@ -1399,8 +1500,5 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
public long getTimeCacheMaxAge() {
return DAY_IN_MILLIS;
}
- public boolean getForceCompletePoll() {
- return getSecureBoolean(NETSTATS_FORCE_COMPLETE_POLL, false);
- }
}
}
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 9ebdd52ad47d..eb135b7c41a0 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -72,6 +72,7 @@ import android.content.pm.Signature;
import android.content.pm.UserInfo;
import android.content.pm.ManifestDigest;
import android.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VerifierInfo;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -113,6 +114,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
+import java.security.cert.CertificateException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -158,6 +161,7 @@ public class PackageManagerService extends IPackageManager.Stub {
private static final boolean DEBUG_INTENT_MATCHING = false;
private static final boolean DEBUG_PACKAGE_SCANNING = false;
private static final boolean DEBUG_APP_DIR_OBSERVER = false;
+ private static final boolean DEBUG_VERIFY = false;
static final boolean MULTIPLE_APPLICATION_UIDS = true;
private static final int RADIO_UID = Process.PHONE_UID;
@@ -208,6 +212,8 @@ public class PackageManagerService extends IPackageManager.Stub {
DEFAULT_CONTAINER_PACKAGE,
"com.android.defcontainer.DefaultContainerService");
+ private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
+
private static final String LIB_DIR_NAME = "lib";
static final String mTempContainerPrefix = "smdl2tmp";
@@ -349,7 +355,8 @@ public class PackageManagerService extends IPackageManager.Stub {
final HashSet<String> mProtectedBroadcasts = new HashSet<String>();
/** List of packages waiting for verification. */
- final SparseArray<InstallArgs> mPendingVerification = new SparseArray<InstallArgs>();
+ final SparseArray<PackageVerificationState> mPendingVerification
+ = new SparseArray<PackageVerificationState>();
final ArrayList<PackageParser.Package> mDeferredDexOpt =
new ArrayList<PackageParser.Package>();
@@ -427,6 +434,8 @@ public class PackageManagerService extends IPackageManager.Stub {
final SparseArray<PostInstallData> mRunningInstalls = new SparseArray<PostInstallData>();
int mNextInstallToken = 1; // nonzero; will be wrapped back to 1 when ++ overflows
+ private final String mRequiredVerifierPackage;
+
class PackageHandler extends Handler {
private boolean mBound = false;
final ArrayList<HandlerParams> mPendingInstalls =
@@ -740,9 +749,10 @@ public class PackageManagerService extends IPackageManager.Stub {
} break;
case CHECK_PENDING_VERIFICATION: {
final int verificationId = msg.arg1;
- final InstallArgs args = mPendingVerification.get(verificationId);
+ final PackageVerificationState state = mPendingVerification.get(verificationId);
- if (args != null) {
+ if (state != null) {
+ final InstallArgs args = state.getInstallArgs();
Slog.i(TAG, "Validation timed out for " + args.packageURI.toString());
mPendingVerification.remove(verificationId);
@@ -756,31 +766,38 @@ public class PackageManagerService extends IPackageManager.Stub {
}
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) {
+ final PackageVerificationState state = mPendingVerification.get(verificationId);
+ if (state == null) {
Slog.w(TAG, "Invalid validation token " + verificationId + " received");
break;
}
- mPendingVerification.remove(verificationId);
+ final PackageVerificationResponse response = (PackageVerificationResponse) msg.obj;
- 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");
+ state.setVerifierResponse(response.callerUid, response.code);
+
+ if (state.isVerificationComplete()) {
+ mPendingVerification.remove(verificationId);
+
+ final InstallArgs args = state.getInstallArgs();
+
+ int ret;
+ if (state.isInstallAllowed()) {
+ 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;
}
- } else {
- ret = PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE;
- }
- processPendingInstall(args, ret);
+ processPendingInstall(args, ret);
- mHandler.sendEmptyMessage(MCS_UNBIND);
+ mHandler.sendEmptyMessage(MCS_UNBIND);
+ }
break;
}
@@ -945,7 +962,8 @@ public class PackageManagerService extends IPackageManager.Stub {
} catch (FileNotFoundException e) {
Slog.w(TAG, "Boot class path not found: " + paths[i]);
} catch (IOException e) {
- Slog.w(TAG, "Exception reading boot class path: " + paths[i], e);
+ Slog.w(TAG, "Cannot dexopt " + paths[i] + "; is it an APK or JAR? "
+ + e.getMessage());
}
}
} else {
@@ -968,7 +986,8 @@ public class PackageManagerService extends IPackageManager.Stub {
} catch (FileNotFoundException e) {
Slog.w(TAG, "Library not found: " + lib);
} catch (IOException e) {
- Slog.w(TAG, "Exception reading library: " + lib, e);
+ Slog.w(TAG, "Cannot dexopt " + lib + "; is it an APK or JAR? "
+ + e.getMessage());
}
}
}
@@ -1132,10 +1151,49 @@ public class PackageManagerService extends IPackageManager.Stub {
// are all flushed. Not really needed, but keeps things nice and
// tidy.
Runtime.getRuntime().gc();
+
+ mRequiredVerifierPackage = getRequiredVerifierLPr();
} // synchronized (mPackages)
} // synchronized (mInstallLock)
}
+ private String getRequiredVerifierLPr() {
+ final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
+ final List<ResolveInfo> receivers = queryIntentReceivers(verification, PACKAGE_MIME_TYPE,
+ PackageManager.GET_DISABLED_COMPONENTS);
+
+ String requiredVerifier = null;
+
+ final int N = receivers.size();
+ for (int i = 0; i < N; i++) {
+ final ResolveInfo info = receivers.get(i);
+
+ if (info.activityInfo == null) {
+ continue;
+ }
+
+ final String packageName = info.activityInfo.packageName;
+
+ final PackageSetting ps = mSettings.mPackages.get(packageName);
+ if (ps == null) {
+ continue;
+ }
+
+ if (!ps.grantedPermissions
+ .contains(android.Manifest.permission.PACKAGE_VERIFICATION_AGENT)) {
+ continue;
+ }
+
+ if (requiredVerifier != null) {
+ throw new RuntimeException("There can be only one required verifier");
+ }
+
+ requiredVerifier = packageName;
+ }
+
+ return requiredVerifier;
+ }
+
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
throws RemoteException {
@@ -4350,7 +4408,10 @@ public class PackageManagerService extends IPackageManager.Stub {
if (p != null) {
PackageSetting ps = (PackageSetting)p.mExtras;
if (ps != null) {
- return ps.stopped;
+ // System apps are never considered stopped for purposes of
+ // filtering, because there may be no way for the user to
+ // actually re-launch them.
+ return ps.stopped && (ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0;
}
}
return false;
@@ -4522,7 +4583,10 @@ public class PackageManagerService extends IPackageManager.Stub {
if (p != null) {
PackageSetting ps = (PackageSetting)p.mExtras;
if (ps != null) {
- return ps.stopped;
+ // System apps are never considered stopped for purposes of
+ // filtering, because there may be no way for the user to
+ // actually re-launch them.
+ return ps.stopped && (ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0;
}
}
return false;
@@ -4849,18 +4913,110 @@ public class PackageManagerService extends IPackageManager.Stub {
}
@Override
- public void verifyPendingInstall(int id, boolean verified, String message)
- throws RemoteException {
- mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.PACKAGE_VERIFICATION_AGENT, null);
-
+ public void verifyPendingInstall(int id, int verificationCode) throws RemoteException {
final Message msg = mHandler.obtainMessage(PACKAGE_VERIFIED);
+ final PackageVerificationResponse response = new PackageVerificationResponse(
+ verificationCode, Binder.getCallingUid());
msg.arg1 = id;
- msg.arg2 = verified ? 1 : 0;
- msg.obj = message;
+ msg.obj = response;
mHandler.sendMessage(msg);
}
+ private ComponentName matchComponentForVerifier(String packageName,
+ List<ResolveInfo> receivers) {
+ ActivityInfo targetReceiver = null;
+
+ final int NR = receivers.size();
+ for (int i = 0; i < NR; i++) {
+ final ResolveInfo info = receivers.get(i);
+ if (info.activityInfo == null) {
+ continue;
+ }
+
+ if (packageName.equals(info.activityInfo.packageName)) {
+ targetReceiver = info.activityInfo;
+ break;
+ }
+ }
+
+ if (targetReceiver == null) {
+ return null;
+ }
+
+ return new ComponentName(targetReceiver.packageName, targetReceiver.name);
+ }
+
+ private List<ComponentName> matchVerifiers(PackageInfoLite pkgInfo,
+ List<ResolveInfo> receivers, final PackageVerificationState verificationState) {
+ if (pkgInfo.verifiers.length == 0) {
+ return null;
+ }
+
+ final int N = pkgInfo.verifiers.length;
+ final List<ComponentName> sufficientVerifiers = new ArrayList<ComponentName>(N + 1);
+ for (int i = 0; i < N; i++) {
+ final VerifierInfo verifierInfo = pkgInfo.verifiers[i];
+
+ final ComponentName comp = matchComponentForVerifier(verifierInfo.packageName,
+ receivers);
+ if (comp == null) {
+ continue;
+ }
+
+ final int verifierUid = getUidForVerifier(verifierInfo);
+ if (verifierUid == -1) {
+ continue;
+ }
+
+ if (DEBUG_VERIFY) {
+ Slog.d(TAG, "Added sufficient verifier " + verifierInfo.packageName
+ + " with the correct signature");
+ }
+ sufficientVerifiers.add(comp);
+ verificationState.addSufficientVerifier(verifierUid);
+ }
+
+ return sufficientVerifiers;
+ }
+
+ private int getUidForVerifier(VerifierInfo verifierInfo) {
+ synchronized (mPackages) {
+ final PackageParser.Package pkg = mPackages.get(verifierInfo.packageName);
+ if (pkg == null) {
+ return -1;
+ } else if (pkg.mSignatures.length != 1) {
+ Slog.i(TAG, "Verifier package " + verifierInfo.packageName
+ + " has more than one signature; ignoring");
+ return -1;
+ }
+
+ /*
+ * If the public key of the package's signature does not match
+ * our expected public key, then this is a different package and
+ * we should skip.
+ */
+
+ final byte[] expectedPublicKey;
+ try {
+ final Signature verifierSig = pkg.mSignatures[0];
+ final PublicKey publicKey = verifierSig.getPublicKey();
+ expectedPublicKey = publicKey.getEncoded();
+ } catch (CertificateException e) {
+ return -1;
+ }
+
+ final byte[] actualPublicKey = verifierInfo.publicKey.getEncoded();
+
+ if (!Arrays.equals(actualPublicKey, expectedPublicKey)) {
+ Slog.i(TAG, "Verifier package " + verifierInfo.packageName
+ + " does not have the expected public key; ignoring");
+ return -1;
+ }
+
+ return pkg.applicationInfo.uid;
+ }
+ }
+
public void finishPackageInstall(int token) {
enforceSystemOrRoot("Only the system is allowed to finish installs");
@@ -5230,9 +5386,11 @@ public class PackageManagerService extends IPackageManager.Stub {
*/
public void handleStartCopy() throws RemoteException {
int ret = PackageManager.INSTALL_SUCCEEDED;
- boolean fwdLocked = (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;
- boolean onSd = (flags & PackageManager.INSTALL_EXTERNAL) != 0;
- boolean onInt = (flags & PackageManager.INSTALL_INTERNAL) != 0;
+ final boolean fwdLocked = (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;
+ final boolean onSd = (flags & PackageManager.INSTALL_EXTERNAL) != 0;
+ final boolean onInt = (flags & PackageManager.INSTALL_INTERNAL) != 0;
+ PackageInfoLite pkgLite = null;
+
if (onInt && onSd) {
// Check if both bits are set.
Slog.w(TAG, "Conflicting flags specified for installing on both internal and external");
@@ -5254,7 +5412,6 @@ public class PackageManagerService extends IPackageManager.Stub {
}
// Remote call to find out default install location
- final PackageInfoLite pkgLite;
try {
mContext.grantUriPermission(DEFAULT_CONTAINER_PACKAGE, packageURI,
Intent.FLAG_GRANT_READ_URI_PERMISSION);
@@ -5297,21 +5454,27 @@ public class PackageManagerService extends IPackageManager.Stub {
}
final InstallArgs args = createInstallArgs(this);
+ mArgs = args;
+
if (ret == PackageManager.INSTALL_SUCCEEDED) {
/*
* 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) {
+ final int requiredUid = mRequiredVerifierPackage == null ? -1
+ : getPackageUid(mRequiredVerifierPackage);
+ if (requiredUid != -1 && isVerificationEnabled()) {
+ 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 (DEBUG_VERIFY) {
Slog.d(TAG, "Found " + receivers.size() + " verifiers for intent "
- + verification.toString());
+ + verification.toString() + " with " + pkgLite.verifiers.length
+ + " optional verifiers");
}
final int verificationId = mPendingVerificationToken++;
@@ -5328,35 +5491,70 @@ public class PackageManagerService extends IPackageManager.Stub {
verificationURI);
}
- mPendingVerification.append(verificationId, args);
+ final PackageVerificationState verificationState = new PackageVerificationState(
+ requiredUid, args);
+
+ mPendingVerification.append(verificationId, verificationState);
+
+ final List<ComponentName> sufficientVerifiers = matchVerifiers(pkgLite,
+ receivers, verificationState);
/*
- * Send the intent to the registered verification agents,
- * but only start the verification timeout after the target
- * BroadcastReceivers have run.
+ * If any sufficient verifiers were listed in the package
+ * manifest, attempt to ask them.
*/
- 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);
+ if (sufficientVerifiers != null) {
+ final int N = sufficientVerifiers.size();
+ if (N == 0) {
+ Slog.i(TAG, "Additional verifiers required, but none installed.");
+ ret = PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE;
+ } else {
+ for (int i = 0; i < N; i++) {
+ final ComponentName verifierComponent = sufficientVerifiers.get(i);
+
+ final Intent sufficientIntent = new Intent(verification);
+ sufficientIntent.setComponent(verifierComponent);
+
+ mContext.sendBroadcast(sufficientIntent);
+ }
+ }
+ }
+
+ final ComponentName requiredVerifierComponent = matchComponentForVerifier(
+ mRequiredVerifierPackage, receivers);
+ if (ret == PackageManager.INSTALL_SUCCEEDED
+ && mRequiredVerifierPackage != null) {
+ /*
+ * Send the intent to the required verification agent,
+ * but only start the verification timeout after the
+ * target BroadcastReceivers have run.
+ */
+ verification.setComponent(requiredVerifierComponent);
+ 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);
+
+ /*
+ * We don't want the copy to proceed until verification
+ * succeeds, so null out this field.
+ */
+ mArgs = null;
+ }
} else {
- // Create copy only if we are not in an erroneous state.
- // Remote call to initiate copy using temporary file
- mArgs = args;
+ /*
+ * No package verification is enabled, so immediately start
+ * the remote call to initiate copy using temporary file.
+ */
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;
@@ -7542,6 +7740,8 @@ public class PackageManagerService extends IPackageManager.Stub {
public static final int DUMP_PROVIDERS = 1 << 7;
+ public static final int DUMP_VERIFIERS = 1 << 8;
+
public static final int OPTION_SHOW_FILTERS = 1 << 0;
private int mTypes;
@@ -7634,6 +7834,7 @@ public class PackageManagerService extends IPackageManager.Stub {
pw.println(" p[ackages]: dump installed packages");
pw.println(" s[hared-users]: dump shared user IDs");
pw.println(" m[essages]: print collected runtime messages");
+ pw.println(" v[erifiers]: print package verifier info");
pw.println(" <package.name>: info about given package");
return;
} else if ("-f".equals(opt)) {
@@ -7666,11 +7867,24 @@ public class PackageManagerService extends IPackageManager.Stub {
dumpState.setDump(DumpState.DUMP_PROVIDERS);
} else if ("m".equals(cmd) || "messages".equals(cmd)) {
dumpState.setDump(DumpState.DUMP_MESSAGES);
+ } else if ("v".equals(cmd) || "verifiers".equals(cmd)) {
+ dumpState.setDump(DumpState.DUMP_VERIFIERS);
}
}
// reader
synchronized (mPackages) {
+ if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
+ if (dumpState.onTitlePrinted())
+ pw.println(" ");
+ pw.println("Verifiers:");
+ pw.print(" Required: ");
+ pw.print(mRequiredVerifierPackage);
+ pw.print(" (uid=");
+ pw.print(getPackageUid(mRequiredVerifierPackage));
+ pw.println(")");
+ }
+
if (dumpState.isDumping(DumpState.DUMP_LIBS) && packageName == null) {
if (dumpState.onTitlePrinted())
pw.println(" ");
diff --git a/services/java/com/android/server/pm/PackageVerificationResponse.java b/services/java/com/android/server/pm/PackageVerificationResponse.java
new file mode 100644
index 000000000000..b2ae0dd433da
--- /dev/null
+++ b/services/java/com/android/server/pm/PackageVerificationResponse.java
@@ -0,0 +1,28 @@
+/*
+ * 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.server.pm;
+
+public class PackageVerificationResponse {
+ public final int code;
+
+ public final int callerUid;
+
+ public PackageVerificationResponse(int code, int callerUid) {
+ this.code = code;
+ this.callerUid = callerUid;
+ }
+}
diff --git a/services/java/com/android/server/pm/PackageVerificationState.java b/services/java/com/android/server/pm/PackageVerificationState.java
new file mode 100644
index 000000000000..e5b89c1f08fe
--- /dev/null
+++ b/services/java/com/android/server/pm/PackageVerificationState.java
@@ -0,0 +1,149 @@
+/*
+ * 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.server.pm;
+
+import com.android.server.pm.PackageManagerService.InstallArgs;
+
+import android.content.pm.PackageManager;
+import android.util.SparseBooleanArray;
+
+/**
+ * Tracks the package verification state for a particular package. Each package
+ * verification has a required verifier and zero or more sufficient verifiers.
+ * Only one of the sufficient verifier list must return affirmative to allow the
+ * package to be considered verified. If there are zero sufficient verifiers,
+ * then package verification is considered complete.
+ */
+class PackageVerificationState {
+ private final InstallArgs mArgs;
+
+ private final SparseBooleanArray mSufficientVerifierUids;
+
+ private final int mRequiredVerifierUid;
+
+ private boolean mSufficientVerificationComplete;
+
+ private boolean mSufficientVerificationPassed;
+
+ private boolean mRequiredVerificationComplete;
+
+ private boolean mRequiredVerificationPassed;
+
+ /**
+ * Create a new package verification state where {@code requiredVerifierUid}
+ * is the user ID for the package that must reply affirmative before things
+ * can continue.
+ *
+ * @param requiredVerifierUid user ID of required package verifier
+ * @param args
+ */
+ public PackageVerificationState(int requiredVerifierUid, InstallArgs args) {
+ mRequiredVerifierUid = requiredVerifierUid;
+ mArgs = args;
+ mSufficientVerifierUids = new SparseBooleanArray();
+ }
+
+ public InstallArgs getInstallArgs() {
+ return mArgs;
+ }
+
+ /**
+ * Add a verifier which is added to our sufficient list.
+ *
+ * @param uid user ID of sufficient verifier
+ */
+ public void addSufficientVerifier(int uid) {
+ mSufficientVerifierUids.put(uid, true);
+ }
+
+ /**
+ * Should be called when a verification is received from an agent so the
+ * state of the package verification can be tracked.
+ *
+ * @param uid user ID of the verifying agent
+ * @return {@code true} if the verifying agent actually exists in our list
+ */
+ public boolean setVerifierResponse(int uid, int code) {
+ if (uid == mRequiredVerifierUid) {
+ mRequiredVerificationComplete = true;
+ switch (code) {
+ case PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT:
+ mSufficientVerifierUids.clear();
+ // fall through
+ case PackageManager.VERIFICATION_ALLOW:
+ mRequiredVerificationPassed = true;
+ break;
+ default:
+ mRequiredVerificationPassed = false;
+ }
+ return true;
+ } else {
+ if (mSufficientVerifierUids.get(uid)) {
+ if (code == PackageManager.VERIFICATION_ALLOW) {
+ mSufficientVerificationComplete = true;
+ mSufficientVerificationPassed = true;
+ }
+
+ mSufficientVerifierUids.delete(uid);
+ if (mSufficientVerifierUids.size() == 0) {
+ mSufficientVerificationComplete = true;
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns whether verification is considered complete. This means that the
+ * required verifier and at least one of the sufficient verifiers has
+ * returned a positive verification.
+ *
+ * @return {@code true} when verification is considered complete
+ */
+ public boolean isVerificationComplete() {
+ if (!mRequiredVerificationComplete) {
+ return false;
+ }
+
+ if (mSufficientVerifierUids.size() == 0) {
+ return true;
+ }
+
+ return mSufficientVerificationComplete;
+ }
+
+ /**
+ * Returns whether installation should be allowed. This should only be
+ * called after {@link #isVerificationComplete()} returns {@code true}.
+ *
+ * @return {@code true} if installation should be allowed
+ */
+ public boolean isInstallAllowed() {
+ if (!mRequiredVerificationPassed) {
+ return false;
+ }
+
+ if (mSufficientVerificationComplete) {
+ return mSufficientVerificationPassed;
+ }
+
+ return true;
+ }
+}
diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java
index bfa2b3995ba8..61c96bb6ba20 100644
--- a/services/java/com/android/server/wm/AppWindowToken.java
+++ b/services/java/com/android/server/wm/AppWindowToken.java
@@ -194,7 +194,7 @@ class AppWindowToken extends WindowToken {
// This must be called while inside a transaction.
boolean stepAnimationLocked(long currentTime, int dw, int dh) {
- if (!service.mDisplayFrozen && service.mPolicy.isScreenOn()) {
+ if (!service.mDisplayFrozen && service.mPolicy.isScreenOnFully()) {
// We will run animations as long as the display isn't frozen.
if (animation == WindowManagerService.sDummyAnimation) {
diff --git a/services/java/com/android/server/wm/DragState.java b/services/java/com/android/server/wm/DragState.java
index dd440bf00d1e..f2e7485895fe 100644
--- a/services/java/com/android/server/wm/DragState.java
+++ b/services/java/com/android/server/wm/DragState.java
@@ -125,6 +125,12 @@ class DragState {
mDragWindowHandle.frameTop = 0;
mDragWindowHandle.frameRight = mService.mCurDisplayWidth;
mDragWindowHandle.frameBottom = mService.mCurDisplayHeight;
+
+ // Pause rotations before a drag.
+ if (WindowManagerService.DEBUG_ORIENTATION) {
+ Slog.d(WindowManagerService.TAG, "Pausing rotation during drag");
+ }
+ mService.pauseRotationLocked();
}
}
@@ -142,6 +148,12 @@ class DragState {
mDragWindowHandle = null;
mDragApplicationHandle = null;
+
+ // Resume rotations after a drag.
+ if (WindowManagerService.DEBUG_ORIENTATION) {
+ Slog.d(WindowManagerService.TAG, "Resuming rotation after drag");
+ }
+ mService.resumeRotationLocked();
}
}
@@ -257,13 +269,6 @@ class DragState {
// free our resources and drop all the object references
mService.mDragState.reset();
mService.mDragState = null;
-
- if (WindowManagerService.DEBUG_ORIENTATION) Slog.d(WindowManagerService.TAG, "Performing post-drag rotation");
- boolean changed = mService.setRotationUncheckedLocked(
- WindowManagerPolicy.USE_LAST_ROTATION, 0, false);
- if (changed) {
- mService.mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
- }
}
void notifyMoveLw(float x, float y) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 609016be7073..3ea9e817a1d8 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -73,6 +73,7 @@ import android.os.Bundle;
import android.os.Debug;
import android.os.Handler;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.os.LocalPowerManager;
import android.os.Looper;
import android.os.Message;
@@ -91,6 +92,7 @@ import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
+import android.util.Pair;
import android.util.Slog;
import android.util.SparseIntArray;
import android.util.TypedValue;
@@ -384,6 +386,12 @@ public class WindowManagerService extends IWindowManager.Stub
ArrayList<WindowState> mForceRemoves;
/**
+ * Windows that clients are waiting to have drawn.
+ */
+ ArrayList<Pair<WindowState, IRemoteCallback>> mWaitingForDrawn
+ = new ArrayList<Pair<WindowState, IRemoteCallback>>();
+
+ /**
* Used when rebuilding window list to keep track of windows that have
* been removed.
*/
@@ -419,14 +427,11 @@ public class WindowManagerService extends IWindowManager.Stub
int mAppDisplayWidth = 0;
int mAppDisplayHeight = 0;
int mRotation = 0;
- int mRequestedRotation = 0;
int mForcedAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
boolean mAltOrientation = false;
- int mLastRotationFlags;
ArrayList<IRotationWatcher> mRotationWatchers
= new ArrayList<IRotationWatcher>();
- int mDeferredRotation;
- int mDeferredRotationAnimFlags;
+ int mDeferredRotationPauseCount;
boolean mLayoutNeeded = true;
boolean mAnimationPending = false;
@@ -2191,7 +2196,8 @@ public class WindowManagerService extends IWindowManager.Stub
// to hold off on removing the window until the animation is done.
// If the display is frozen, just remove immediately, since the
// animation wouldn't be seen.
- if (win.mSurface != null && !mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn()) {
+ if (win.mSurface != null && !mDisplayFrozen && mDisplayEnabled
+ && mPolicy.isScreenOnFully()) {
// If we are not currently running the exit animation, we
// need to see about starting one.
if (wasVisible=win.isWinVisibleLw()) {
@@ -2569,7 +2575,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (displayed) {
if (win.mSurface != null && !win.mDrawPending
&& !win.mCommitDrawPending && !mDisplayFrozen
- && mDisplayEnabled && mPolicy.isScreenOn()) {
+ && mDisplayEnabled && mPolicy.isScreenOnFully()) {
applyEnterAnimationLocked(win);
}
if ((win.mAttrs.flags
@@ -2862,7 +2868,7 @@ public class WindowManagerService extends IWindowManager.Stub
// frozen, there is no reason to animate and it can cause strange
// artifacts when we unfreeze the display if some different animation
// is running.
- if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn()) {
+ if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOnFully()) {
int anim = mPolicy.selectAnimationLw(win, transit);
int attr = -1;
Animation a = null;
@@ -2948,7 +2954,7 @@ public class WindowManagerService extends IWindowManager.Stub
// frozen, there is no reason to animate and it can cause strange
// artifacts when we unfreeze the display if some different animation
// is running.
- if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn()) {
+ if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOnFully()) {
Animation a;
if (mNextAppTransitionPackage != null) {
a = loadAnimation(mNextAppTransitionPackage, enter ?
@@ -3405,9 +3411,7 @@ public class WindowManagerService extends IWindowManager.Stub
//send a message to Policy indicating orientation change to take
//action like disabling/enabling sensors etc.,
mPolicy.setCurrentOrientationLw(req);
- if (setRotationUncheckedLocked(WindowManagerPolicy.USE_LAST_ROTATION,
- mLastRotationFlags | Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE,
- inTransaction)) {
+ if (updateRotationUncheckedLocked(inTransaction)) {
changed = true;
}
}
@@ -3514,7 +3518,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_APP_TRANSITIONS) Slog.v(
TAG, "Prepare app transition: transit=" + transit
+ " mNextAppTransition=" + mNextAppTransition);
- if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn()) {
+ if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOnFully()) {
if (mNextAppTransition == WindowManagerPolicy.TRANSIT_UNSET
|| mNextAppTransition == WindowManagerPolicy.TRANSIT_NONE) {
mNextAppTransition = transit;
@@ -3598,7 +3602,7 @@ public class WindowManagerService extends IWindowManager.Stub
// If the display is frozen, we won't do anything until the
// actual window is displayed so there is no reason to put in
// the starting window.
- if (mDisplayFrozen || !mDisplayEnabled || !mPolicy.isScreenOn()) {
+ if (mDisplayFrozen || !mDisplayEnabled || !mPolicy.isScreenOnFully()) {
return;
}
@@ -3880,7 +3884,7 @@ public class WindowManagerService extends IWindowManager.Stub
// If we are preparing an app transition, then delay changing
// the visibility of this token until we execute that transition.
- if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOn()
+ if (!mDisplayFrozen && mDisplayEnabled && mPolicy.isScreenOnFully()
&& mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
// Already in requested state, don't do anything more.
if (wtoken.hiddenRequested != visible) {
@@ -4008,7 +4012,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
synchronized(mWindowMap) {
- if (configChanges == 0 && !mDisplayFrozen && mPolicy.isScreenOn()) {
+ if (configChanges == 0 && !mDisplayFrozen && mPolicy.isScreenOnFully()) {
if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping set freeze of " + token);
return;
}
@@ -4521,6 +4525,16 @@ public class WindowManagerService extends IWindowManager.Stub
return mPolicy.isKeyguardSecure();
}
+ public void dismissKeyguard() {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Requires DISABLE_KEYGUARD permission");
+ }
+ synchronized(mWindowMap) {
+ mPolicy.dismissKeyguardLw();
+ }
+ }
+
public void closeSystemDialogs(String reason) {
synchronized(mWindowMap) {
for (int i=mWindows.size()-1; i>=0; i--) {
@@ -4814,8 +4828,7 @@ public class WindowManagerService extends IWindowManager.Stub
mPolicy.enableScreenAfterBoot();
// Make sure the last requested orientation has been applied.
- setRotationUnchecked(WindowManagerPolicy.USE_LAST_ROTATION, false,
- mLastRotationFlags | Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
+ updateRotationUnchecked(false);
}
public void showBootMessage(final CharSequence msg, final boolean always) {
@@ -5034,6 +5047,10 @@ public class WindowManagerService extends IWindowManager.Stub
return bm;
}
+ /**
+ * Freeze rotation changes. (Enable "rotation lock".)
+ * Persists across reboots.
+ */
public void freezeRotation() {
if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
"freezeRotation()")) {
@@ -5043,9 +5060,13 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_ORIENTATION) Slog.v(TAG, "freezeRotation: mRotation=" + mRotation);
mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_LOCKED, mRotation);
- setRotationUnchecked(WindowManagerPolicy.USE_LAST_ROTATION, false, 0);
+ updateRotationUnchecked(false);
}
+ /**
+ * Thaw rotation changes. (Disable "rotation lock".)
+ * Persists across reboots.
+ */
public void thawRotation() {
if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
"thawRotation()")) {
@@ -5055,30 +5076,56 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_ORIENTATION) Slog.v(TAG, "thawRotation: mRotation=" + mRotation);
mPolicy.setUserRotationMode(WindowManagerPolicy.USER_ROTATION_FREE, 777); // rot not used
- setRotationUnchecked(WindowManagerPolicy.USE_LAST_ROTATION, false, 0);
+ updateRotationUnchecked(false);
}
- public void setRotation(int rotation,
- boolean alwaysSendConfiguration, int animFlags) {
- if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,
- "setRotation()")) {
- throw new SecurityException("Requires SET_ORIENTATION permission");
- }
+ /**
+ * Recalculate the current rotation.
+ *
+ * Called by the window manager policy whenever the state of the system changes
+ * such that the current rotation might need to be updated, such as when the
+ * device is docked or rotated into a new posture.
+ */
+ public void updateRotation(boolean alwaysSendConfiguration) {
+ updateRotationUnchecked(alwaysSendConfiguration);
+ }
- setRotationUnchecked(rotation, alwaysSendConfiguration, animFlags);
+ /**
+ * Temporarily pauses rotation changes until resumed.
+ *
+ * This can be used to prevent rotation changes from occurring while the user is
+ * performing certain operations, such as drag and drop.
+ *
+ * This call nests and must be matched by an equal number of calls to {@link #resumeRotation}.
+ */
+ void pauseRotationLocked() {
+ mDeferredRotationPauseCount += 1;
}
- public void setRotationUnchecked(int rotation,
- boolean alwaysSendConfiguration, int animFlags) {
- if(DEBUG_ORIENTATION) Slog.v(TAG,
- "setRotationUnchecked(rotation=" + rotation +
- " alwaysSendConfiguration=" + alwaysSendConfiguration +
- " animFlags=" + animFlags);
+ /**
+ * Resumes normal rotation changes after being paused.
+ */
+ void resumeRotationLocked() {
+ if (mDeferredRotationPauseCount > 0) {
+ mDeferredRotationPauseCount -= 1;
+ if (mDeferredRotationPauseCount == 0) {
+ boolean changed = updateRotationUncheckedLocked(false);
+ if (changed) {
+ mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
+ }
+ }
+ }
+ }
+
+ public void updateRotationUnchecked(
+ boolean alwaysSendConfiguration) {
+ if(DEBUG_ORIENTATION) Slog.v(TAG, "updateRotationUnchecked("
+ + "alwaysSendConfiguration=" + alwaysSendConfiguration + ")");
long origId = Binder.clearCallingIdentity();
boolean changed;
synchronized(mWindowMap) {
- changed = setRotationUncheckedLocked(rotation, animFlags, false);
+ changed = updateRotationUncheckedLocked(false);
}
if (changed || alwaysSendConfiguration) {
@@ -5089,152 +5136,114 @@ public class WindowManagerService extends IWindowManager.Stub
}
/**
- * Apply a new rotation to the screen, respecting the requests of
- * applications. Use WindowManagerPolicy.USE_LAST_ROTATION to simply
- * re-evaluate the desired rotation.
- *
- * Returns null if the rotation has been changed. In this case YOU
- * MUST CALL setNewConfiguration() TO UNFREEZE THE SCREEN.
+ * Updates the current rotation.
+ *
+ * Returns true if the rotation has been changed. In this case YOU
+ * MUST CALL sendNewConfiguration() TO UNFREEZE THE SCREEN.
*/
- public boolean setRotationUncheckedLocked(int rotation, int animFlags, boolean inTransaction) {
- if (mDragState != null
- || (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating())) {
- // Potential rotation during a drag or while waiting for a previous orientation
- // change to finish (rotation animation will be dismissed).
- // Don't do the rotation now, but make a note to perform the rotation later.
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation.");
- if (rotation != WindowManagerPolicy.USE_LAST_ROTATION) {
- mDeferredRotation = rotation;
- mDeferredRotationAnimFlags = animFlags;
- }
+ public boolean updateRotationUncheckedLocked(boolean inTransaction) {
+ if (mDeferredRotationPauseCount > 0) {
+ // Rotation updates have been paused temporarily. Defer the update until
+ // updates have been resumed.
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, rotation is paused.");
return false;
}
- boolean changed;
- if (rotation == WindowManagerPolicy.USE_LAST_ROTATION) {
- if (mDeferredRotation != WindowManagerPolicy.USE_LAST_ROTATION) {
- rotation = mDeferredRotation;
- mRequestedRotation = rotation;
- mLastRotationFlags = mDeferredRotationAnimFlags;
- }
- rotation = mRequestedRotation;
- } else {
- mRequestedRotation = rotation;
- mLastRotationFlags = animFlags;
- }
- mDeferredRotation = WindowManagerPolicy.USE_LAST_ROTATION;
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Overwriting rotation value from " + rotation);
- rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation,
- mRotation, mDisplayEnabled);
- if (DEBUG_ORIENTATION) Slog.v(TAG, "new rotation is set to " + rotation);
-
- int desiredRotation = rotation;
- int lockedRotation = mPolicy.getLockedRotationLw();
- if (lockedRotation >= 0 && rotation != lockedRotation) {
- // We are locked in a rotation but something is requesting
- // a different rotation... we will either keep the locked
- // rotation if it results in the same orientation, or have to
- // switch into an emulated orientation mode.
-
- // First, we know that our rotation is actually going to be
- // the locked rotation.
- rotation = lockedRotation;
-
- // Now the difference between the desired and lockedRotation
- // may mean that the orientation is different... if that is
- // not the case, we can just make the desired rotation be the
- // same as the new locked rotation.
- switch (lockedRotation) {
- case Surface.ROTATION_0:
- if (rotation == Surface.ROTATION_180) {
- desiredRotation = lockedRotation;
- }
- break;
- case Surface.ROTATION_90:
- if (rotation == Surface.ROTATION_270) {
- desiredRotation = lockedRotation;
- }
- break;
- case Surface.ROTATION_180:
- if (rotation == Surface.ROTATION_0) {
- desiredRotation = lockedRotation;
- }
- break;
- case Surface.ROTATION_270:
- if (rotation == Surface.ROTATION_90) {
- desiredRotation = lockedRotation;
- }
- break;
- }
+ if (mScreenRotationAnimation != null && mScreenRotationAnimation.isAnimating()) {
+ // Rotation updates cannot be performed while the previous rotation change
+ // animation is still in progress. Skip this update. We will try updating
+ // again after the animation is finished and the display is unfrozen.
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, animation in progress.");
+ return false;
}
- changed = mDisplayEnabled && mRotation != rotation;
- if (mAltOrientation != (rotation != desiredRotation)) {
- changed = true;
- mAltOrientation = rotation != desiredRotation;
+ if (!mDisplayEnabled) {
+ // No point choosing a rotation if the display is not enabled.
+ if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, display is not enabled.");
+ return false;
}
- if (changed) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
- "Rotation changed to " + rotation
- + " from " + mRotation
- + " (forceApp=" + mForcedAppOrientation
- + ", req=" + mRequestedRotation + ")");
- mRotation = rotation;
- mWindowsFreezingScreen = true;
- mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
- mH.sendMessageDelayed(mH.obtainMessage(H.WINDOW_FREEZE_TIMEOUT),
- 2000);
- mWaitingForConfig = true;
- mLayoutNeeded = true;
- startFreezingDisplayLocked(inTransaction);
- //Slog.i(TAG, "Setting rotation to " + rotation + ", animFlags=" + animFlags);
- mInputManager.setDisplayOrientation(0, rotation);
- if (mDisplayEnabled) {
- // NOTE: We disable the rotation in the emulator because
- // it doesn't support hardware OpenGL emulation yet.
- if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
- && mScreenRotationAnimation.hasScreenshot()) {
- Surface.freezeDisplay(0);
- if (!inTransaction) {
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
- ">>> OPEN TRANSACTION setRotationUnchecked");
- Surface.openTransaction();
- }
- try {
- if (mScreenRotationAnimation != null) {
- mScreenRotationAnimation.setRotation(rotation);
- }
- } finally {
- if (!inTransaction) {
- Surface.closeTransaction();
- if (SHOW_TRANSACTIONS) Slog.i(TAG,
- "<<< CLOSE TRANSACTION setRotationUnchecked");
- }
- }
- Surface.setOrientation(0, rotation, animFlags);
- Surface.unfreezeDisplay(0);
- } else {
- Surface.setOrientation(0, rotation, animFlags);
- }
- rebuildBlackFrame(inTransaction);
- }
+ // TODO: Implement forced rotation changes.
+ // Set mAltOrientation to indicate that the application is receiving
+ // an orientation that has different metrics than it expected.
+ // eg. Portrait instead of Landscape.
- for (int i=mWindows.size()-1; i>=0; i--) {
- WindowState w = mWindows.get(i);
- if (w.mSurface != null) {
- w.mOrientationChanging = true;
- }
+ int rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation, mRotation);
+ boolean altOrientation = !mPolicy.rotationHasCompatibleMetricsLw(
+ mForcedAppOrientation, rotation);
+
+ if (DEBUG_ORIENTATION) {
+ Slog.v(TAG, "Application requested orientation "
+ + mForcedAppOrientation + ", got rotation " + rotation
+ + " which has " + (altOrientation ? "incompatible" : "compatible")
+ + " metrics");
+ }
+
+ if (mRotation == rotation && mAltOrientation == altOrientation) {
+ // No change.
+ return false;
+ }
+
+ if (DEBUG_ORIENTATION) {
+ Slog.v(TAG,
+ "Rotation changed to " + rotation + (altOrientation ? " (alt)" : "")
+ + " from " + mRotation + (mAltOrientation ? " (alt)" : "")
+ + ", forceApp=" + mForcedAppOrientation);
+ }
+
+ mRotation = rotation;
+ mAltOrientation = altOrientation;
+ mPolicy.setRotationLw(mRotation);
+
+ mWindowsFreezingScreen = true;
+ mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
+ mH.sendMessageDelayed(mH.obtainMessage(H.WINDOW_FREEZE_TIMEOUT), 2000);
+ mWaitingForConfig = true;
+ mLayoutNeeded = true;
+ startFreezingDisplayLocked(inTransaction);
+ mInputManager.setDisplayOrientation(0, rotation);
+
+ // NOTE: We disable the rotation in the emulator because
+ // it doesn't support hardware OpenGL emulation yet.
+ if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
+ && mScreenRotationAnimation.hasScreenshot()) {
+ Surface.freezeDisplay(0);
+ if (!inTransaction) {
+ if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ ">>> OPEN TRANSACTION setRotationUnchecked");
+ Surface.openTransaction();
}
- for (int i=mRotationWatchers.size()-1; i>=0; i--) {
- try {
- mRotationWatchers.get(i).onRotationChanged(rotation);
- } catch (RemoteException e) {
+ try {
+ if (mScreenRotationAnimation != null) {
+ mScreenRotationAnimation.setRotation(rotation);
+ }
+ } finally {
+ if (!inTransaction) {
+ Surface.closeTransaction();
+ if (SHOW_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION setRotationUnchecked");
}
}
- } //end if changed
+ Surface.setOrientation(0, rotation);
+ Surface.unfreezeDisplay(0);
+ } else {
+ Surface.setOrientation(0, rotation);
+ }
+ rebuildBlackFrame(inTransaction);
- return changed;
+ for (int i=mWindows.size()-1; i>=0; i--) {
+ WindowState w = mWindows.get(i);
+ if (w.mSurface != null) {
+ w.mOrientationChanging = true;
+ }
+ }
+ for (int i=mRotationWatchers.size()-1; i>=0; i--) {
+ try {
+ mRotationWatchers.get(i).onRotationChanged(rotation);
+ } catch (RemoteException e) {
+ }
+ }
+ return true;
}
public int getRotation() {
@@ -5723,9 +5732,9 @@ public class WindowManagerService extends IWindowManager.Stub
unrotDh = dh;
}
int sw = reduceConfigWidthSize(unrotDw, Surface.ROTATION_0, density, unrotDw, unrotDh);
- sw = reduceConfigWidthSize(sw, Surface.ROTATION_90, density, unrotDw, unrotDh);
+ sw = reduceConfigWidthSize(sw, Surface.ROTATION_90, density, unrotDh, unrotDw);
sw = reduceConfigWidthSize(sw, Surface.ROTATION_180, density, unrotDw, unrotDh);
- sw = reduceConfigWidthSize(sw, Surface.ROTATION_270, density, unrotDw, unrotDh);
+ sw = reduceConfigWidthSize(sw, Surface.ROTATION_270, density, unrotDh, unrotDw);
return sw;
}
@@ -6295,6 +6304,7 @@ public class WindowManagerService extends IWindowManager.Stub
public static final int DRAG_END_TIMEOUT = 21;
public static final int REPORT_HARD_KEYBOARD_STATUS_CHANGE = 22;
public static final int BOOT_TIMEOUT = 23;
+ public static final int WAITING_FOR_DRAWN_TIMEOUT = 24;
private Session mLastReportedHold;
@@ -6605,11 +6615,6 @@ public class WindowManagerService extends IWindowManager.Stub
break;
}
- case BOOT_TIMEOUT: {
- performBootTimeout();
- break;
- }
-
case APP_FREEZE_TIMEOUT: {
synchronized (mWindowMap) {
Slog.w(TAG, "App freeze timeout expired.");
@@ -6678,6 +6683,27 @@ public class WindowManagerService extends IWindowManager.Stub
notifyHardKeyboardStatusChange();
break;
}
+
+ case BOOT_TIMEOUT: {
+ performBootTimeout();
+ break;
+ }
+
+ case WAITING_FOR_DRAWN_TIMEOUT: {
+ Pair<WindowState, IRemoteCallback> pair;
+ synchronized (mWindowMap) {
+ pair = (Pair<WindowState, IRemoteCallback>)msg.obj;
+ Slog.w(TAG, "Timeout waiting for drawn: " + pair.first);
+ if (!mWaitingForDrawn.remove(pair)) {
+ return;
+ }
+ }
+ try {
+ pair.second.sendResult(null);
+ } catch (RemoteException e) {
+ }
+ break;
+ }
}
}
}
@@ -8112,10 +8138,10 @@ public class WindowManagerService extends IWindowManager.Stub
w.mLastContentInsets.set(w.mContentInsets);
w.mLastVisibleInsets.set(w.mVisibleInsets);
- // If the screen is currently frozen, then keep
- // it frozen until this window draws at its new
+ // If the screen is currently frozen or off, then keep
+ // it frozen/off until this window draws at its new
// orientation.
- if (mDisplayFrozen) {
+ if (mDisplayFrozen || !mPolicy.isScreenOnFully()) {
if (DEBUG_ORIENTATION) Slog.v(TAG,
"Resizing while display frozen: " + w);
w.mOrientationChanging = true;
@@ -8383,7 +8409,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (mDimAnimator != null && mDimAnimator.mDimShown) {
animating |= mDimAnimator.updateSurface(dimming, currentTime,
- mDisplayFrozen || !mDisplayEnabled || !mPolicy.isScreenOn());
+ mDisplayFrozen || !mDisplayEnabled || !mPolicy.isScreenOnFully());
}
if (!blurring && mBlurShown) {
@@ -8575,50 +8601,68 @@ public class WindowManagerService extends IWindowManager.Stub
if (updateRotation) {
if (DEBUG_ORIENTATION) Slog.d(TAG, "Performing post-rotate rotation");
- boolean changed = setRotationUncheckedLocked(
- WindowManagerPolicy.USE_LAST_ROTATION, 0, false);
+ boolean changed = updateRotationUncheckedLocked(false);
if (changed) {
mH.sendEmptyMessage(H.SEND_NEW_CONFIGURATION);
+ } else {
+ updateRotation = false;
}
}
- mWindowMap.notifyAll();
+ if (orientationChangeComplete && !needRelayout && !updateRotation) {
+ checkDrawnWindowsLocked();
+ }
// Check to see if we are now in a state where the screen should
// be enabled, because the window obscured flags have changed.
enableScreenIfNeededLocked();
}
- public void waitForAllDrawn() {
- synchronized (mWindowMap) {
- while (true) {
- final int N = mWindows.size();
- boolean okay = true;
- for (int i=0; i<N && okay; i++) {
- WindowState w = mWindows.get(i);
- if (DEBUG_SCREEN_ON) {
- Slog.i(TAG, "Window " + w + " vis=" + w.isVisibleLw()
- + " obscured=" + w.mObscured + " drawn=" + w.isDrawnLw());
+ void checkDrawnWindowsLocked() {
+ if (mWaitingForDrawn.size() > 0) {
+ for (int j=mWaitingForDrawn.size()-1; j>=0; j--) {
+ Pair<WindowState, IRemoteCallback> pair = mWaitingForDrawn.get(j);
+ WindowState win = pair.first;
+ //Slog.i(TAG, "Waiting for drawn " + win + ": removed="
+ // + win.mRemoved + " visible=" + win.isVisibleLw()
+ // + " shown=" + win.mSurfaceShown);
+ if (win.mRemoved || !win.isVisibleLw()) {
+ // Window has been removed or made invisible; no draw
+ // will now happen, so stop waiting.
+ Slog.w(TAG, "Aborted waiting for drawn: " + pair.first);
+ try {
+ pair.second.sendResult(null);
+ } catch (RemoteException e) {
}
- if (w.isVisibleLw() && !w.mObscured && !w.isDrawnLw()) {
- if (DEBUG_SCREEN_ON) {
- Slog.i(TAG, "Window not yet drawn: " + w);
- }
- okay = false;
- break;
+ mWaitingForDrawn.remove(pair);
+ mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT, pair);
+ } else if (win.mSurfaceShown) {
+ // Window is now drawn (and shown).
+ try {
+ pair.second.sendResult(null);
+ } catch (RemoteException e) {
}
- }
- if (okay) {
- return;
- }
- try {
- mWindowMap.wait();
- } catch (InterruptedException e) {
+ mWaitingForDrawn.remove(pair);
+ mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT, pair);
}
}
}
}
+ public void waitForWindowDrawn(IBinder token, IRemoteCallback callback) {
+ synchronized (mWindowMap) {
+ WindowState win = windowForClientLocked(null, token, true);
+ if (win != null) {
+ Pair<WindowState, IRemoteCallback> pair =
+ new Pair<WindowState, IRemoteCallback>(win, callback);
+ Message m = mH.obtainMessage(H.WAITING_FOR_DRAWN_TIMEOUT, pair);
+ mH.sendMessageDelayed(m, 2000);
+ mWaitingForDrawn.add(pair);
+ checkDrawnWindowsLocked();
+ }
+ }
+ }
+
/**
* Must be called with the main window manager lock held.
*/
@@ -8885,7 +8929,7 @@ public class WindowManagerService extends IWindowManager.Stub
return;
}
- if (mDisplay == null || !mPolicy.isScreenOn()) {
+ if (mDisplay == null || !mPolicy.isScreenOnFully()) {
// No need to freeze the screen before the system is ready or if
// the screen is off.
return;
@@ -8984,8 +9028,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (updateRotation) {
if (DEBUG_ORIENTATION) Slog.d(TAG, "Performing post-rotate rotation");
- configChanged |= setRotationUncheckedLocked(
- WindowManagerPolicy.USE_LAST_ROTATION, 0, false);
+ configChanged |= updateRotationUncheckedLocked(false);
}
if (configChanged) {
@@ -9284,6 +9327,15 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
}
+ if (mWaitingForDrawn.size() > 0) {
+ pw.println();
+ pw.println(" Clients waiting for these windows to be drawn:");
+ for (int i=mWaitingForDrawn.size()-1; i>=0; i--) {
+ Pair<WindowState, IRemoteCallback> pair = mWaitingForDrawn.get(i);
+ pw.print(" Waiting #"); pw.print(i); pw.print(' '); pw.print(pair.first);
+ pw.print(": "); pw.println(pair.second);
+ }
+ }
pw.println();
if (mDisplay != null) {
pw.print(" Display: init="); pw.print(mInitialDisplayWidth); pw.print("x");
@@ -9349,12 +9401,10 @@ public class WindowManagerService extends IWindowManager.Stub
pw.print(" mAppsFreezingScreen="); pw.print(mAppsFreezingScreen);
pw.print(" mWaitingForConfig="); pw.println(mWaitingForConfig);
pw.print(" mRotation="); pw.print(mRotation);
- pw.print(" mRequestedRotation="); pw.print(mRequestedRotation);
pw.print(" mAltOrientation="); pw.println(mAltOrientation);
pw.print(" mLastWindowForcedOrientation"); pw.print(mLastWindowForcedOrientation);
pw.print(" mForcedAppOrientation="); pw.println(mForcedAppOrientation);
- pw.print(" mDeferredRotation="); pw.print(mDeferredRotation);
- pw.print(", mDeferredRotationAnimFlags="); pw.println(mDeferredRotationAnimFlags);
+ pw.print(" mDeferredRotationPauseCount="); pw.println(mDeferredRotationPauseCount);
pw.print(" mAnimationPending="); pw.print(mAnimationPending);
pw.print(" mWindowAnimationScale="); pw.print(mWindowAnimationScale);
pw.print(" mTransitionWindowAnimationScale="); pw.println(mTransitionAnimationScale);
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 0ee3f17129f6..3640a15284b2 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -636,7 +636,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
final boolean isHwAccelerated = (mAttrs.flags &
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0;
final int format = isHwAccelerated ? PixelFormat.TRANSLUCENT : mAttrs.format;
- if (isHwAccelerated && mAttrs.format == PixelFormat.OPAQUE) {
+ if (!PixelFormat.formatHasAlpha(mAttrs.format)) {
flags |= Surface.OPAQUE;
}
mSurface = new Surface(
@@ -870,7 +870,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
// This must be called while inside a transaction. Returns true if
// there is more animation to run.
boolean stepAnimationLocked(long currentTime, int dw, int dh) {
- if (!mService.mDisplayFrozen && mService.mPolicy.isScreenOn()) {
+ if (!mService.mDisplayFrozen && mService.mPolicy.isScreenOnFully()) {
// We will run animations as long as the display isn't frozen.
if (!mDrawPending && !mCommitDrawPending && mAnimation != null) {
@@ -1101,7 +1101,20 @@ final class WindowState implements WindowManagerPolicy.WindowState {
final Matrix tmpMatrix = mTmpMatrix;
// Compute the desired transformation.
- tmpMatrix.setTranslate(0, 0);
+ if (screenAnimation) {
+ // If we are doing a screen animation, the global rotation
+ // applied to windows can result in windows that are carefully
+ // aligned with each other to slightly separate, allowing you
+ // to see what is behind them. An unsightly mess. This...
+ // thing... magically makes it call good: scale each window
+ // slightly (two pixels larger in each dimension, from the
+ // window's center).
+ final float w = frame.width();
+ final float h = frame.height();
+ tmpMatrix.setScale(1 + 2/w, 1 + 2/h, w/2, h/2);
+ } else {
+ tmpMatrix.reset();
+ }
tmpMatrix.postScale(mGlobalScale, mGlobalScale);
if (selfTransformation) {
tmpMatrix.postConcat(mTransformation.getMatrix());
@@ -1204,11 +1217,18 @@ final class WindowState implements WindowManagerPolicy.WindowState {
* mPolicyVisibility. Ungh.
*/
public boolean isVisibleOrBehindKeyguardLw() {
+ if (mRootToken.waitingToShow &&
+ mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
+ return false;
+ }
final AppWindowToken atoken = mAppToken;
- return mSurface != null && !mAttachedHidden
+ final boolean animating = atoken != null
+ ? (atoken.animation != null) : false;
+ return mSurface != null && !mDestroying && !mExiting
&& (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested)
- && !mDrawPending && !mCommitDrawPending
- && !mExiting && !mDestroying;
+ && ((!mAttachedHidden && mViewVisibility == View.VISIBLE
+ && !mRootToken.hidden)
+ || mAnimation != null || animating);
}
/**
@@ -1351,7 +1371,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
&& (mFrame.top != mLastFrame.top
|| mFrame.left != mLastFrame.left)
&& (mAttachedWindow == null || !mAttachedWindow.shouldAnimateMove())
- && mService.mPolicy.isScreenOn();
+ && mService.mPolicy.isScreenOnFully();
}
boolean isFullscreen(int screenWidth, int screenHeight) {
@@ -1436,7 +1456,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
if (doAnimation) {
if (DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "doAnimation: mPolicyVisibility="
+ mPolicyVisibility + " mAnimation=" + mAnimation);
- if (mService.mDisplayFrozen || !mService.mPolicy.isScreenOn()) {
+ if (mService.mDisplayFrozen || !mService.mPolicy.isScreenOnFully()) {
doAnimation = false;
} else if (mPolicyVisibility && mAnimation == null) {
// Check for the case where we are currently visible and
@@ -1462,7 +1482,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
boolean hideLw(boolean doAnimation, boolean requestAnim) {
if (doAnimation) {
- if (mService.mDisplayFrozen || !mService.mPolicy.isScreenOn()) {
+ if (mService.mDisplayFrozen || !mService.mPolicy.isScreenOnFully()) {
doAnimation = false;
}
}
diff --git a/services/surfaceflinger/DisplayHardware/DisplayHardware.h b/services/surfaceflinger/DisplayHardware/DisplayHardware.h
index 40a6f1e8cdd3..f02c95414fae 100644
--- a/services/surfaceflinger/DisplayHardware/DisplayHardware.h
+++ b/services/surfaceflinger/DisplayHardware/DisplayHardware.h
@@ -84,9 +84,10 @@ public:
status_t compositionComplete() const;
- Rect bounds() const {
+ Rect getBounds() const {
return Rect(mWidth, mHeight);
}
+ inline Rect bounds() const { return getBounds(); }
// only for debugging
int getCurrentBufferIndex() const;
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index c9567d527008..d2bba0bc4c8f 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -40,6 +40,7 @@ namespace android {
HWComposer::HWComposer(const sp<SurfaceFlinger>& flinger)
: mFlinger(flinger),
mModule(0), mHwc(0), mList(0), mCapacity(0),
+ mNumOVLayers(0), mNumFBLayers(0),
mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE)
{
int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule);
@@ -98,9 +99,40 @@ status_t HWComposer::createWorkList(size_t numLayers) {
status_t HWComposer::prepare() const {
int err = mHwc->prepare(mHwc, mList);
+ if (err == NO_ERROR) {
+ size_t numOVLayers = 0;
+ size_t numFBLayers = 0;
+ size_t count = mList->numHwLayers;
+ for (size_t i=0 ; i<count ; i++) {
+ hwc_layer& l(mList->hwLayers[i]);
+ if (l.flags & HWC_SKIP_LAYER) {
+ l.compositionType = HWC_FRAMEBUFFER;
+ }
+ switch (l.compositionType) {
+ case HWC_OVERLAY:
+ numOVLayers++;
+ break;
+ case HWC_FRAMEBUFFER:
+ numFBLayers++;
+ break;
+ }
+ }
+ mNumOVLayers = numOVLayers;
+ mNumFBLayers = numFBLayers;
+ }
return (status_t)err;
}
+size_t HWComposer::getLayerCount(int type) const {
+ switch (type) {
+ case HWC_OVERLAY:
+ return mNumOVLayers;
+ case HWC_FRAMEBUFFER:
+ return mNumFBLayers;
+ }
+ return 0;
+}
+
status_t HWComposer::commit() const {
int err = mHwc->set(mHwc, mDpy, mSur, mList);
if (mList) {
@@ -143,18 +175,29 @@ void HWComposer::dump(String8& result, char* buffer, size_t SIZE,
snprintf(buffer, SIZE, " numHwLayers=%u, flags=%08x\n",
mList->numHwLayers, mList->flags);
result.append(buffer);
-
+ result.append(
+ " type | hints | flags | tr | blend | format | source crop | frame name \n"
+ "-----------+----------+----------+----+-------+----------+---------------------------+--------------------------------\n");
+ // " ________ | ________ | ________ | __ | _____ | ________ | [_____,_____,_____,_____] | [_____,_____,_____,_____]
for (size_t i=0 ; i<mList->numHwLayers ; i++) {
const hwc_layer_t& l(mList->hwLayers[i]);
- snprintf(buffer, SIZE, " %8s | %08x | %08x | %02x | %04x | [%5d,%5d,%5d,%5d] | [%5d,%5d,%5d,%5d] %s\n",
+ const sp<LayerBase> layer(visibleLayersSortedByZ[i]);
+ int32_t format = -1;
+ if (layer->getLayer() != NULL) {
+ const sp<GraphicBuffer>& buffer(layer->getLayer()->getActiveBuffer());
+ if (buffer != NULL) {
+ format = buffer->getPixelFormat();
+ }
+ }
+ snprintf(buffer, SIZE,
+ " %8s | %08x | %08x | %02x | %05x | %08x | [%5d,%5d,%5d,%5d] | [%5d,%5d,%5d,%5d] %s\n",
l.compositionType ? "OVERLAY" : "FB",
- l.hints, l.flags, l.transform, l.blending,
+ l.hints, l.flags, l.transform, l.blending, format,
l.sourceCrop.left, l.sourceCrop.top, l.sourceCrop.right, l.sourceCrop.bottom,
l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
- visibleLayersSortedByZ[i]->getName().string());
+ layer->getName().string());
result.append(buffer);
}
-
}
if (mHwc && mHwc->common.version >= 1 && mHwc->dump) {
mHwc->dump(mHwc, buffer, SIZE);
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index 8758a801b8fc..aa8ebe1fd415 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -64,6 +64,9 @@ public:
size_t getNumLayers() const;
hwc_layer_t* getLayers() const;
+ // updated in preapre()
+ size_t getLayerCount(int type) const;
+
// for debugging
void dump(String8& out, char* scratch, size_t SIZE,
const Vector< sp<LayerBase> >& visibleLayersSortedByZ) const;
@@ -81,6 +84,8 @@ private:
hwc_composer_device_t* mHwc;
hwc_layer_list_t* mList;
size_t mCapacity;
+ mutable size_t mNumOVLayers;
+ mutable size_t mNumFBLayers;
hwc_display_t mDpy;
hwc_surface_t mSur;
cb_context mCBContext;
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index edbc7b023503..41d7a90978ad 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -112,6 +112,11 @@ void Layer::onRemoved()
mSurfaceTexture->abandon();
}
+void Layer::setName(const String8& name) {
+ LayerBase::setName(name);
+ mSurfaceTexture->setName(name);
+}
+
sp<ISurface> Layer::createSurface()
{
class BSurface : public BnSurface, public LayerCleaner {
@@ -371,11 +376,12 @@ uint32_t Layer::doTransaction(uint32_t flags)
Layer::State& editDraw(mDrawingState);
editDraw.requested_w = temp.requested_w;
editDraw.requested_h = temp.requested_h;
-
- // record the new size, form this point on, when the client request
- // a buffer, it'll get the new size.
- mSurfaceTexture->setDefaultBufferSize(temp.requested_w, temp.requested_h);
}
+
+ // record the new size, form this point on, when the client request
+ // a buffer, it'll get the new size.
+ mSurfaceTexture->setDefaultBufferSize(temp.requested_w,
+ temp.requested_h);
}
if (temp.sequence != front.sequence) {
@@ -404,7 +410,9 @@ bool Layer::isCropped() const {
void Layer::lockPageFlip(bool& recomputeVisibleRegions)
{
if (mQueuedFrames > 0) {
+ // Capture the old state of the layer for comparisons later
const bool oldOpacity = isOpaque();
+ sp<GraphicBuffer> oldActiveBuffer = mActiveBuffer;
// signal another event if we have more frames pending
if (android_atomic_dec(&mQueuedFrames) > 1) {
@@ -417,7 +425,8 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
return;
}
- sp<GraphicBuffer> newFrontBuffer(mSurfaceTexture->getCurrentBuffer());
+ // update the active buffer
+ mActiveBuffer = mSurfaceTexture->getCurrentBuffer();
const Rect crop(mSurfaceTexture->getCurrentCrop());
const uint32_t transform(mSurfaceTexture->getCurrentTransform());
@@ -439,16 +448,16 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
mFlinger->invalidateHwcGeometry();
}
- uint32_t bufWidth = newFrontBuffer->getWidth();
- uint32_t bufHeight = newFrontBuffer->getHeight();
- if (mActiveBuffer != NULL) {
- if (bufWidth != uint32_t(mActiveBuffer->width) ||
- bufHeight != uint32_t(mActiveBuffer->height)) {
+ uint32_t bufWidth = mActiveBuffer->getWidth();
+ uint32_t bufHeight = mActiveBuffer->getHeight();
+ if (oldActiveBuffer != NULL) {
+ if (bufWidth != uint32_t(oldActiveBuffer->width) ||
+ bufHeight != uint32_t(oldActiveBuffer->height)) {
mFlinger->invalidateHwcGeometry();
}
}
- mCurrentOpacity = getOpacityForFormat(newFrontBuffer->format);
+ mCurrentOpacity = getOpacityForFormat(mActiveBuffer->format);
if (oldOpacity != isOpaque()) {
recomputeVisibleRegions = true;
}
@@ -462,9 +471,6 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions)
// FIXME: mPostedDirtyRegion = dirty & bounds
mPostedDirtyRegion.set(front.w, front.h);
- // update active buffer
- mActiveBuffer = newFrontBuffer;
-
if ((front.w != front.requested_w) ||
(front.h != front.requested_h))
{
@@ -578,7 +584,7 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const
uint32_t Layer::getTransformHint() const {
uint32_t orientation = 0;
if (!mFlinger->mDebugDisableTransformHint) {
- orientation = getOrientation();
+ orientation = getPlaneOrientation();
if (orientation & Transform::ROT_INVALID) {
orientation = 0;
}
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index d06a35f01781..82e35218d279 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -73,12 +73,15 @@ public:
virtual bool isSecure() const { return mSecure; }
virtual bool isProtected() const;
virtual void onRemoved();
+ virtual sp<Layer> getLayer() const { return const_cast<Layer*>(this); }
+ virtual void setName(const String8& name);
// LayerBaseClient interface
virtual wp<IBinder> getSurfaceTextureBinder() const;
// only for debugging
inline const sp<FreezeLock>& getFreezeLock() const { return mFreezeLock; }
+ inline const sp<GraphicBuffer>& getActiveBuffer() const { return mActiveBuffer; }
protected:
virtual void onFirstRef();
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp
index e5ce814bda33..7a47f620f392 100644
--- a/services/surfaceflinger/LayerBase.cpp
+++ b/services/surfaceflinger/LayerBase.cpp
@@ -45,6 +45,7 @@ LayerBase::LayerBase(SurfaceFlinger* flinger, DisplayID display)
mFlinger(flinger), mFiltering(false),
mNeedsFiltering(false), mInOverlay(false),
mOrientation(0),
+ mPlaneOrientation(0),
mTransactionFlags(0),
mPremultipliedAlpha(true), mName("unnamed"), mDebug(false),
mInvalidate(0)
@@ -256,6 +257,7 @@ void LayerBase::validateVisibility(const Transform& planeTransform)
// cache a few things...
mOrientation = tr.getOrientation();
+ mPlaneOrientation = planeTransform.getOrientation();
mTransform = tr;
mTransformedBounds = tr.makeBounds(w, h);
}
diff --git a/services/surfaceflinger/LayerBase.h b/services/surfaceflinger/LayerBase.h
index ee50428382a5..7f6214510d33 100644
--- a/services/surfaceflinger/LayerBase.h
+++ b/services/surfaceflinger/LayerBase.h
@@ -46,6 +46,7 @@ class Client;
class DisplayHardware;
class GraphicBuffer;
class GraphicPlane;
+class Layer;
class LayerBaseClient;
class SurfaceFlinger;
@@ -80,7 +81,7 @@ public:
Region transparentRegion;
};
- void setName(const String8& name);
+ virtual void setName(const String8& name);
String8 getName() const;
// modify current state
@@ -105,6 +106,7 @@ public:
void invalidate();
virtual sp<LayerBaseClient> getLayerBaseClient() const { return 0; }
+ virtual sp<Layer> getLayer() const { return 0; }
virtual const char* getTypeId() const { return "LayerBase"; }
@@ -219,6 +221,7 @@ public:
inline State& currentState() { return mCurrentState; }
int32_t getOrientation() const { return mOrientation; }
+ int32_t getPlaneOrientation() const { return mPlaneOrientation; }
protected:
const GraphicPlane& graphicPlane(int dpy) const;
@@ -252,6 +255,7 @@ private:
protected:
// cached during validateVisibility()
int32_t mOrientation;
+ int32_t mPlaneOrientation;
Transform mTransform;
GLfloat mVertices[4][2];
Rect mTransformedBounds;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index df13640b6322..3f154ce3292d 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -469,14 +469,14 @@ bool SurfaceFlinger::threadLoop()
void SurfaceFlinger::postFramebuffer()
{
- if (!mInvalidRegion.isEmpty()) {
+ if (!mSwapRegion.isEmpty()) {
const DisplayHardware& hw(graphicPlane(0).displayHardware());
const nsecs_t now = systemTime();
mDebugInSwapBuffers = now;
- hw.flip(mInvalidRegion);
+ hw.flip(mSwapRegion);
mLastSwapBufferTime = systemTime() - now;
mDebugInSwapBuffers = 0;
- mInvalidRegion.clear();
+ mSwapRegion.clear();
}
}
@@ -566,7 +566,7 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags)
const int dpy = 0;
const int orientation = mCurrentState.orientation;
- const uint32_t type = mCurrentState.orientationType;
+ // Currently unused: const uint32_t flags = mCurrentState.orientationFlags;
GraphicPlane& plane(graphicPlane(dpy));
plane.setOrientation(orientation);
@@ -834,7 +834,7 @@ void SurfaceFlinger::handleWorkList()
void SurfaceFlinger::handleRepaint()
{
// compute the invalid region
- mInvalidRegion.orSelf(mDirtyRegion);
+ mSwapRegion.orSelf(mDirtyRegion);
if (UNLIKELY(mDebugRegion)) {
debugFlashRegions();
@@ -855,7 +855,7 @@ void SurfaceFlinger::handleRepaint()
if (flags & DisplayHardware::SWAP_RECTANGLE) {
// TODO: we really should be able to pass a region to
// SWAP_RECTANGLE so that we don't have to redraw all this.
- mDirtyRegion.set(mInvalidRegion.bounds());
+ mDirtyRegion.set(mSwapRegion.bounds());
} else {
// in the BUFFER_PRESERVED case, obviously, we can update only
// what's needed and nothing more.
@@ -868,32 +868,29 @@ void SurfaceFlinger::handleRepaint()
// (pushed to the framebuffer).
// This is needed because PARTIAL_UPDATES only takes one
// rectangle instead of a region (see DisplayHardware::flip())
- mDirtyRegion.set(mInvalidRegion.bounds());
+ mDirtyRegion.set(mSwapRegion.bounds());
} else {
// we need to redraw everything (the whole screen)
mDirtyRegion.set(hw.bounds());
- mInvalidRegion = mDirtyRegion;
+ mSwapRegion = mDirtyRegion;
}
}
- Region expandDirty = setupHardwareComposer(mDirtyRegion);
- mDirtyRegion.orSelf(expandDirty);
- mInvalidRegion.orSelf(mDirtyRegion);
+ setupHardwareComposer(mDirtyRegion);
composeSurfaces(mDirtyRegion);
- // clear the dirty regions
+ // update the swap region and clear the dirty region
+ mSwapRegion.orSelf(mDirtyRegion);
mDirtyRegion.clear();
}
-Region SurfaceFlinger::setupHardwareComposer(const Region& dirty)
+void SurfaceFlinger::setupHardwareComposer(Region& dirtyInOut)
{
- Region dirtyOut(dirty);
-
const DisplayHardware& hw(graphicPlane(0).displayHardware());
HWComposer& hwc(hw.getHwComposer());
hwc_layer_t* const cur(hwc.getLayers());
if (!cur) {
- return dirtyOut;
+ return;
}
const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
@@ -916,53 +913,62 @@ Region SurfaceFlinger::setupHardwareComposer(const Region& dirty)
const sp<LayerBase>& layer(layers[i]);
layer->setPerFrameData(&cur[i]);
}
+ const size_t fbLayerCount = hwc.getLayerCount(HWC_FRAMEBUFFER);
status_t err = hwc.prepare();
LOGE_IF(err, "HWComposer::prepare failed (%s)", strerror(-err));
if (err == NO_ERROR) {
- Region transparent;
- for (size_t i=0 ; i<count ; i++) {
- // what's happening here is tricky.
- // we want to clear all the layers with the CLEAR_FB flags
- // that are opaque.
- // however, since some GPU have are efficient at preserving
- // the backbuffer, we want to take advantage of that so we do the
- // clear only in the dirty region (other areas will be preserved
- // on those GPUs).
- // NOTE: on non backbuffer preserving GPU, the dirty region
- // has already been expanded as needed, so the code is correct
- // there too.
- // However, the content of the framebuffer cannot be trusted when
- // we switch to/from FB/OVERLAY, in which case we need to
- // expand the dirty region to those areas too.
- //
- // Also we want to make sure to not clear areas that belong to
- // layers above that won't redraw (we would just erasing them),
- // that is, we can't erase anything outside the dirty region.
+ // what's happening here is tricky.
+ // we want to clear all the layers with the CLEAR_FB flags
+ // that are opaque.
+ // however, since some GPU are efficient at preserving
+ // the backbuffer, we want to take advantage of that so we do the
+ // clear only in the dirty region (other areas will be preserved
+ // on those GPUs).
+ // NOTE: on non backbuffer preserving GPU, the dirty region
+ // has already been expanded as needed, so the code is correct
+ // there too.
+ //
+ // However, the content of the framebuffer cannot be trusted when
+ // we switch to/from FB/OVERLAY, in which case we need to
+ // expand the dirty region to those areas too.
+ //
+ // Note also that there is a special case when switching from
+ // "no layers in FB" to "some layers in FB", where we need to redraw
+ // the entire FB, since some areas might contain uninitialized
+ // data.
+ //
+ // Also we want to make sure to not clear areas that belong to
+ // layers above that won't redraw (we would just erasing them),
+ // that is, we can't erase anything outside the dirty region.
- const sp<LayerBase>& layer(layers[i]);
- if ((cur[i].hints & HWC_HINT_CLEAR_FB) && layer->isOpaque()) {
- transparent.orSelf(layer->visibleRegionScreen);
- }
-
- bool isOverlay = (cur[i].compositionType != HWC_FRAMEBUFFER) &&
- !(cur[i].flags & HWC_SKIP_LAYER);
+ Region transparent;
- if (isOverlay != layer->isOverlay()) {
- // we transitioned to/from overlay, so add this layer
- // to the dirty region so the framebuffer can be either
- // cleared or redrawn.
- dirtyOut.orSelf(layer->visibleRegionScreen);
+ if (!fbLayerCount && hwc.getLayerCount(HWC_FRAMEBUFFER)) {
+ transparent.set(hw.getBounds());
+ dirtyInOut = transparent;
+ } else {
+ for (size_t i=0 ; i<count ; i++) {
+ const sp<LayerBase>& layer(layers[i]);
+ if ((cur[i].hints & HWC_HINT_CLEAR_FB) && layer->isOpaque()) {
+ transparent.orSelf(layer->visibleRegionScreen);
+ }
+ bool isOverlay = (cur[i].compositionType != HWC_FRAMEBUFFER);
+ if (isOverlay != layer->isOverlay()) {
+ // we transitioned to/from overlay, so add this layer
+ // to the dirty region so the framebuffer can be either
+ // cleared or redrawn.
+ dirtyInOut.orSelf(layer->visibleRegionScreen);
+ }
+ layer->setOverlay(isOverlay);
}
- layer->setOverlay(isOverlay);
+ // don't erase stuff outside the dirty region
+ transparent.andSelf(dirtyInOut);
}
-
/*
* clear the area of the FB that need to be transparent
*/
- // don't erase stuff outside the dirty region
- transparent.andSelf(dirtyOut);
if (!transparent.isEmpty()) {
glClearColor(0,0,0,0);
Region::const_iterator it = transparent.begin();
@@ -976,29 +982,28 @@ Region SurfaceFlinger::setupHardwareComposer(const Region& dirty)
}
}
}
- return dirtyOut;
}
void SurfaceFlinger::composeSurfaces(const Region& dirty)
{
- if (UNLIKELY(!mWormholeRegion.isEmpty())) {
+ const DisplayHardware& hw(graphicPlane(0).displayHardware());
+ HWComposer& hwc(hw.getHwComposer());
+
+ const size_t fbLayerCount = hwc.getLayerCount(HWC_FRAMEBUFFER);
+ if (UNLIKELY(fbLayerCount && !mWormholeRegion.isEmpty())) {
// should never happen unless the window manager has a bug
// draw something...
drawWormhole();
}
- const DisplayHardware& hw(graphicPlane(0).displayHardware());
- HWComposer& hwc(hw.getHwComposer());
- hwc_layer_t* const cur(hwc.getLayers());
-
/*
* and then, render the layers targeted at the framebuffer
*/
+ hwc_layer_t* const cur(hwc.getLayers());
const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
size_t count = layers.size();
for (size_t i=0 ; i<count ; i++) {
- if (cur && (cur[i].compositionType != HWC_FRAMEBUFFER) &&
- !(cur[i].flags & HWC_SKIP_LAYER)) {
+ if (cur && (cur[i].compositionType != HWC_FRAMEBUFFER)) {
continue;
}
const sp<LayerBase>& layer(layers[i]);
@@ -1014,7 +1019,7 @@ void SurfaceFlinger::debugFlashRegions()
const DisplayHardware& hw(graphicPlane(0).displayHardware());
const uint32_t flags = hw.getFlags();
const int32_t height = hw.getHeight();
- if (mInvalidRegion.isEmpty()) {
+ if (mSwapRegion.isEmpty()) {
return;
}
@@ -1051,7 +1056,7 @@ void SurfaceFlinger::debugFlashRegions()
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
- hw.flip(mInvalidRegion);
+ hw.flip(mSwapRegion);
if (mDebugRegion > 1)
usleep(mDebugRegion * 1000);
@@ -1295,7 +1300,7 @@ int SurfaceFlinger::setOrientation(DisplayID dpy,
Mutex::Autolock _l(mStateLock);
if (mCurrentState.orientation != orientation) {
if (uint32_t(orientation)<=eOrientation270 || orientation==42) {
- mCurrentState.orientationType = flags;
+ mCurrentState.orientationFlags = flags;
mCurrentState.orientation = orientation;
setTransactionFlags(eTransactionNeeded);
mTransactionCV.wait(mStateLock);
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 126ca39d8fd7..43191b7e8a54 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -245,7 +245,7 @@ private:
}
LayerVector layersSortedByZ;
uint8_t orientation;
- uint8_t orientationType;
+ uint8_t orientationFlags;
uint8_t freezeDisplay;
};
@@ -277,7 +277,7 @@ private:
void handleWorkList();
void handleRepaint();
void postFramebuffer();
- Region setupHardwareComposer(const Region& dirty);
+ void setupHardwareComposer(Region& dirtyInOut);
void composeSurfaces(const Region& dirty);
void repaintEverything();
@@ -358,7 +358,7 @@ private:
State mDrawingState;
Region mDirtyRegion;
Region mDirtyRegionRemovedLayer;
- Region mInvalidRegion;
+ Region mSwapRegion;
Region mWormholeRegion;
bool mVisibleRegionsDirty;
bool mHwWorkListDirty;
diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
index 2a258661cfc9..ab1597c6745d 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
@@ -21,7 +21,6 @@ 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;
-import static com.android.server.NetworkManagementSocketTagger.tagToKernel;
import android.content.res.Resources;
import android.net.NetworkStats;
@@ -144,12 +143,6 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
}
public void testKernelTags() throws Exception {
- assertEquals("0", tagToKernel(0x0));
- assertEquals("214748364800", tagToKernel(0x32));
- assertEquals("9223372032559808512", tagToKernel(Integer.MAX_VALUE));
- assertEquals("0", tagToKernel(Integer.MIN_VALUE));
- assertEquals("9223369837831520256", tagToKernel(Integer.MIN_VALUE - 512));
-
assertEquals(0, kernelToTag("0x0000000000000000"));
assertEquals(0x32, kernelToTag("0x0000003200000000"));
assertEquals(2147483647, kernelToTag("0x7fffffff00000000"));
diff --git a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
index 2b1eea138aea..2ead254af18c 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkStatsServiceTest.java
@@ -272,7 +272,11 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// graceful shutdown system, which should trigger persist of stats, and
// clear any values in memory.
+ expectCurrentTime();
+ expectDefaultSettings();
+ replay();
mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SHUTDOWN));
+ verifyAndReset();
// talk with zombie service to assert stats have gone; and assert that
// we persisted them to file.
@@ -487,6 +491,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
// now pretend two UIDs are uninstalled, which should migrate stats to
// special "removed" bucket.
+ expectCurrentTime();
expectDefaultSettings();
replay();
final Intent intent = new Intent(ACTION_UID_REMOVED);
@@ -758,7 +763,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
expect(mSettings.getUidMaxHistory()).andReturn(maxHistory).anyTimes();
expect(mSettings.getTagMaxHistory()).andReturn(maxHistory).anyTimes();
expect(mSettings.getTimeCacheMaxAge()).andReturn(DAY_IN_MILLIS).anyTimes();
- expect(mSettings.getForceCompletePoll()).andReturn(false).anyTimes();
}
private void expectCurrentTime() throws Exception {
@@ -772,6 +776,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
private void expectNetworkStatsPoll() throws Exception {
mNetManager.setGlobalAlert(anyLong());
expectLastCall().anyTimes();
+ expect(mConnManager.getTetheredIfacePairs()).andReturn(null).anyTimes();
}
private void assertStatsFilesExist(boolean exist) {
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java
new file mode 100644
index 000000000000..ebd363386fa3
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/PackageVerificationStateTest.java
@@ -0,0 +1,205 @@
+/*
+ * 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.server.pm;
+
+import android.content.pm.PackageManager;
+import com.android.server.pm.PackageVerificationState;
+
+import android.test.AndroidTestCase;
+
+public class PackageVerificationStateTest extends AndroidTestCase {
+ private static final int REQUIRED_UID = 1948;
+
+ private static final int SUFFICIENT_UID_1 = 1005;
+
+ private static final int SUFFICIENT_UID_2 = 8938;
+
+ public void testPackageVerificationState_OnlyRequiredVerifier_AllowedInstall() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_OnlyRequiredVerifier_DeniedInstall() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertFalse("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_RequiredAndOneSufficient_RequiredDeniedInstall() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.addSufficientVerifier(SUFFICIENT_UID_1);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_REJECT);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertFalse("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_RequiredAndOneSufficient_SufficientDeniedInstall() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.addSufficientVerifier(SUFFICIENT_UID_1);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertFalse("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_RequiredAndTwoSufficient_OneSufficientIsEnough() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.addSufficientVerifier(SUFFICIENT_UID_1);
+ state.addSufficientVerifier(SUFFICIENT_UID_2);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_ALLOW);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_RequiredAndTwoSufficient_SecondSufficientIsEnough() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.addSufficientVerifier(SUFFICIENT_UID_1);
+ state.addSufficientVerifier(SUFFICIENT_UID_2);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID, PackageManager.VERIFICATION_ALLOW);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW);
+
+ assertTrue("Verification should be considered complete now",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed",
+ state.isInstallAllowed());
+ }
+
+ public void testPackageVerificationState_RequiredAndTwoSufficient_RequiredOverrides() {
+ PackageVerificationState state = new PackageVerificationState(REQUIRED_UID, null);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.addSufficientVerifier(SUFFICIENT_UID_1);
+ state.addSufficientVerifier(SUFFICIENT_UID_2);
+
+ assertFalse("Verification should not be marked as complete yet",
+ state.isVerificationComplete());
+
+ state.setVerifierResponse(REQUIRED_UID,
+ PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
+
+ assertTrue("Verification should be marked as complete immediately",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed",
+ state.isInstallAllowed());
+
+ state.setVerifierResponse(SUFFICIENT_UID_1, PackageManager.VERIFICATION_REJECT);
+
+ assertTrue("Verification should still be marked as completed",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed still",
+ state.isInstallAllowed());
+
+ state.setVerifierResponse(SUFFICIENT_UID_2, PackageManager.VERIFICATION_ALLOW);
+
+ assertTrue("Verification should still be complete",
+ state.isVerificationComplete());
+
+ assertTrue("Installation should be marked as allowed still",
+ state.isInstallAllowed());
+ }
+}
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index e898aac4ff90..34f88489ed6a 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -24,6 +24,7 @@ import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
+import android.location.CountryDetector;
import android.net.Uri;
import android.os.SystemProperties;
import android.provider.Contacts;
@@ -1408,6 +1409,11 @@ public class PhoneNumberUtils
* @hide
*/
public static String formatNumber(String phoneNumber, String defaultCountryIso) {
+ // Do not attempt to format numbers that start with a hash or star symbol.
+ if (phoneNumber.startsWith("#") || phoneNumber.startsWith("*")) {
+ return phoneNumber;
+ }
+
PhoneNumberUtil util = PhoneNumberUtil.getInstance();
String result = null;
try {
@@ -1566,6 +1572,14 @@ public class PhoneNumberUtils
// that has been collected.
if (util.isValidNumber(pn)) {
return false;
+ } else if ("BR".equalsIgnoreCase(defaultCountryIso) && number.length() >= 8) {
+ // This is to prevent Brazilian local numbers which start with 911 being incorrectly
+ // classified as emergency numbers. 911 is not an emergency number in Brazil; it is also
+ // not possible to append additional digits to an emergency number to dial the number in
+ // Brazil - it won't connect.
+ // TODO: Clean this up once a list of country-specific known emergency numbers is
+ // collected.
+ return false;
}
} catch (NumberParseException e) {
}
@@ -1573,6 +1587,32 @@ public class PhoneNumberUtils
}
/**
+ * Checks if a given number is an emergency number for the country that the user is in. The
+ * current country is determined using the CountryDetector.
+ *
+ * @param number the number to look up.
+ * @param context the specific context which the number should be checked against
+ * @return if a phone number is an emergency number for a local country, based on the
+ * CountryDetector.
+ * @see android.location.CountryDetector
+ * @hide
+ */
+ public static boolean isLocalEmergencyNumber(String number, Context context) {
+ String countryIso;
+ CountryDetector detector = (CountryDetector) context.getSystemService(
+ Context.COUNTRY_DETECTOR);
+ if (detector != null) {
+ countryIso = detector.detectCountry().getCountryIso();
+ } else {
+ Locale locale = context.getResources().getConfiguration().locale;
+ countryIso = locale.getCountry();
+ Log.w(LOG_TAG, "No CountryDetector; falling back to countryIso based on locale: "
+ + countryIso);
+ }
+ return isEmergencyNumber(number, countryIso);
+ }
+
+ /**
* isVoiceMailNumber: checks a given number against the voicemail
* number provided by the RIL and SIM card. The caller must have
* the READ_PHONE_STATE credential.
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index c59dd3c82b16..8ead45ebb953 100644..100755
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -762,6 +762,26 @@ public class TelephonyManager {
}
/**
+ * Returns the MSISDN string.
+ * for a GSM phone. Return null if it is unavailable.
+ * <p>
+ * Requires Permission:
+ * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
+ *
+ * @hide
+ */
+ public String getMsisdn() {
+ try {
+ return getSubscriberInfo().getMsisdn();
+ } catch (RemoteException ex) {
+ return null;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return null;
+ }
+ }
+
+ /**
* Returns the voice mail number. Return null if it is unavailable.
* <p>
* Requires Permission:
diff --git a/telephony/java/com/android/internal/telephony/ApnContext.java b/telephony/java/com/android/internal/telephony/ApnContext.java
index a52f1ca7bec0..8aeee87c7be0 100644
--- a/telephony/java/com/android/internal/telephony/ApnContext.java
+++ b/telephony/java/com/android/internal/telephony/ApnContext.java
@@ -154,6 +154,12 @@ public class ApnContext {
return mState;
}
+ public boolean isDisconnected() {
+ DataConnectionTracker.State currentState = getState();
+ return ((currentState == DataConnectionTracker.State.IDLE) ||
+ currentState == DataConnectionTracker.State.FAILED);
+ }
+
public synchronized void setReason(String reason) {
if (DBG) {
log("set reason as " + reason + ", for type " + mApnType + ",current state " + mState);
diff --git a/telephony/java/com/android/internal/telephony/CallerInfo.java b/telephony/java/com/android/internal/telephony/CallerInfo.java
index 7c37a65380a4..6324550cc1df 100644
--- a/telephony/java/com/android/internal/telephony/CallerInfo.java
+++ b/telephony/java/com/android/internal/telephony/CallerInfo.java
@@ -254,9 +254,7 @@ public class CallerInfo {
// Change the callerInfo number ONLY if it is an emergency number
// or if it is the voicemail number. If it is either, take a
// shortcut and skip the query.
- Locale locale = context.getResources().getConfiguration().locale;
- String countryIso = getCurrentCountryIso(context, locale);
- if (PhoneNumberUtils.isEmergencyNumber(number, countryIso)) {
+ if (PhoneNumberUtils.isLocalEmergencyNumber(number, context)) {
return new CallerInfo().markAsEmergency(context);
} else if (PhoneNumberUtils.isVoiceMailNumber(number)) {
return new CallerInfo().markAsVoiceMail();
diff --git a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
index 17734cac72c2..4912749b568c 100644
--- a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
+++ b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
@@ -403,9 +403,7 @@ public class CallerInfoAsyncQuery {
cw.number = number;
// check to see if these are recognized numbers, and use shortcuts if we can.
- CountryDetector detector = (CountryDetector) context.getSystemService(
- Context.COUNTRY_DETECTOR);
- if (PhoneNumberUtils.isEmergencyNumber(number, detector.detectCountry().getCountryIso())) {
+ if (PhoneNumberUtils.isLocalEmergencyNumber(number, context)) {
cw.event = EVENT_EMERGENCY_NUMBER;
} else if (PhoneNumberUtils.isVoiceMailNumber(number)) {
cw.event = EVENT_VOICEMAIL_NUMBER;
diff --git a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
index 42ea4f2984ec..ae152fb62da9 100644
--- a/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/DataConnectionTracker.java
@@ -1019,7 +1019,7 @@ public abstract class DataConnectionTracker extends Handler {
sendMessage(msg);
}
- public abstract boolean isAnyActiveDataConnections();
+ public abstract boolean isDisconnected();
protected void onSetUserDataEnabled(boolean enabled) {
synchronized (mDataEnabledLock) {
diff --git a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
index def770f4ed88..da0326c4721e 100644..100755
--- a/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl
@@ -54,6 +54,11 @@ interface IPhoneSubInfo {
String getLine1AlphaTag();
/**
+ * Retrieves MSISDN Number.
+ */
+ String getMsisdn();
+
+ /**
* Retrieves the voice mail number.
*/
String getVoiceMailNumber();
diff --git a/telephony/java/com/android/internal/telephony/PhoneSubInfo.java b/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
index de18d0a8c6ae..e8449cefe16c 100644..100755
--- a/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
+++ b/telephony/java/com/android/internal/telephony/PhoneSubInfo.java
@@ -105,6 +105,14 @@ public class PhoneSubInfo extends IPhoneSubInfo.Stub {
}
/**
+ * Retrieves the MSISDN string.
+ */
+ public String getMsisdn() {
+ mContext.enforceCallingOrSelfPermission(READ_PHONE_STATE, "Requires READ_PHONE_STATE");
+ return mPhone.getMsisdn();
+ }
+
+ /**
* Retrieves the voice mail number.
*/
public String getVoiceMailNumber() {
diff --git a/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java b/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
index a287b2e9f4f4..bd130deb00d4 100644..100755
--- a/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
+++ b/telephony/java/com/android/internal/telephony/PhoneSubInfoProxy.java
@@ -75,6 +75,13 @@ public class PhoneSubInfoProxy extends IPhoneSubInfo.Stub {
}
/**
+ * Retrieves the MSISDN Number.
+ */
+ public String getMsisdn() {
+ return mPhoneSubInfo.getMsisdn();
+ }
+
+ /**
* Retrieves the voice mail number.
*/
public String getVoiceMailNumber() {
diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
index 01b807d62f15..1b3ee1ed0c90 100644
--- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -403,7 +403,14 @@ public abstract class ServiceStateTracker extends Handler {
public void powerOffRadioSafely(DataConnectionTracker dcTracker) {
synchronized (this) {
if (!mPendingRadioPowerOffAfterDataOff) {
- if (dcTracker.isAnyActiveDataConnections()) {
+ // To minimize race conditions we call cleanUpAllConnections on
+ // both if else paths instead of before this isDisconnected test.
+ if (dcTracker.isDisconnected()) {
+ // To minimize race conditions we do this after isDisconnected
+ dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
+ if (DBG) log("Data disconnected, turn off radio right away.");
+ hangupAndPowerOff();
+ } else {
dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
Message msg = Message.obtain(this);
msg.what = EVENT_SET_RADIO_POWER_OFF;
@@ -415,10 +422,6 @@ public abstract class ServiceStateTracker extends Handler {
log("Cannot send delayed Msg, turn off radio right away.");
hangupAndPowerOff();
}
- } else {
- dcTracker.cleanUpAllConnections(Phone.REASON_RADIO_TURNED_OFF);
- if (DBG) log("Data disconnected, turn off radio right away.");
- hangupAndPowerOff();
}
}
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
index db19321673bb..83efc518b19d 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaCallTracker.java
@@ -190,7 +190,8 @@ public final class CdmaCallTracker extends CallTracker {
String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
boolean isPhoneInEcmMode = inEcm.equals("true");
- boolean isEmergencyCall = PhoneNumberUtils.isEmergencyNumber(dialString);
+ boolean isEmergencyCall =
+ PhoneNumberUtils.isLocalEmergencyNumber(dialString, phone.getContext());
// Cancel Ecm timer if a second emergency call is originating in Ecm mode
if (isPhoneInEcmMode && isEmergencyCall) {
@@ -1059,7 +1060,7 @@ public final class CdmaCallTracker extends CallTracker {
* Disable data call when emergency call is connected
*/
private void disableDataCallInEmergencyCall(String dialString) {
- if (PhoneNumberUtils.isEmergencyNumber(dialString)) {
+ if (PhoneNumberUtils.isLocalEmergencyNumber(dialString, phone.getContext())) {
if (Phone.DEBUG_PHONE) log("disableDataCallInEmergencyCall");
mIsInEmergencyCall = true;
phone.mDataConnectionTracker.setInternalDataEnabled(false);
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
index 078e51def07b..4dace82a371f 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaDataConnectionTracker.java
@@ -946,8 +946,8 @@ public final class CdmaDataConnectionTracker extends DataConnectionTracker {
}
@Override
- public boolean isAnyActiveDataConnections() {
- return (mState != State.IDLE);
+ public boolean isDisconnected() {
+ return ((mState == State.IDLE) || (mState == State.FAILED));
}
@Override
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index 6d0b696d8574..78ba7ddd0ba9 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -787,9 +787,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
DataConnectionAc dcac = apnContext.getDataConnectionAc();
if (tearDown) {
- boolean isConnected = (apnContext.getState() != State.IDLE
- && apnContext.getState() != State.FAILED);
- if (!isConnected) {
+ if (apnContext.isDisconnected()) {
// The request is tearDown and but ApnContext is not connected.
// If apnContext is not enabled anymore, break the linkage to the DCAC/DC.
apnContext.setState(State.IDLE);
@@ -1019,11 +1017,9 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
*/
private void onApnChanged() {
// TODO: How to handle when multiple APNs are active?
- boolean isConnected;
ApnContext defaultApnContext = mApnContexts.get(Phone.APN_TYPE_DEFAULT);
- isConnected = (defaultApnContext.getState() != State.IDLE
- && defaultApnContext.getState() != State.FAILED);
+ boolean defaultApnIsDisconnected = defaultApnContext.isDisconnected();
if (mPhone instanceof GSMPhone) {
// The "current" may no longer be valid. MMS depends on this to send properly. TBD
@@ -1034,8 +1030,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// match the current operator.
if (DBG) log("onApnChanged: createAllApnList and cleanUpAllConnections");
createAllApnList();
- cleanUpAllConnections(isConnected, Phone.REASON_APN_CHANGED);
- if (!isConnected) {
+ cleanUpAllConnections(!defaultApnIsDisconnected, Phone.REASON_APN_CHANGED);
+ if (defaultApnIsDisconnected) {
setupDataOnReadyApns(Phone.REASON_APN_CHANGED);
}
}
@@ -1772,8 +1768,10 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
ApnSetting apn = apnContext.getApnSetting();
if (apn.proxy != null && apn.proxy.length() != 0) {
try {
+ String port = apn.port;
+ if (TextUtils.isEmpty(port)) port = "8080";
ProxyProperties proxy = new ProxyProperties(apn.proxy,
- Integer.parseInt(apn.port), null);
+ Integer.parseInt(port), null);
dcac.setLinkPropertiesHttpProxySync(proxy);
} catch (NumberFormatException e) {
loge("onDataSetupComplete: NumberFormatException making ProxyProperties (" +
@@ -1885,7 +1883,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// if all data connection are gone, check whether Airplane mode request was
// pending.
- if (!isConnected()) {
+ if (isDisconnected()) {
if (mPhone.getServiceStateTracker().processPendingRadioPowerOffAfterDataOff()) {
// Radio will be turned off. No need to retry data setup
apnContext.setApnSetting(null);
@@ -1957,13 +1955,27 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
protected boolean isConnected() {
for (ApnContext apnContext : mApnContexts.values()) {
if (apnContext.getState() == State.CONNECTED) {
- return true;
+ // At least one context is connected, return true
+ return true;
}
}
+ // There are not any contexts connected, return false
return false;
}
@Override
+ public boolean isDisconnected() {
+ for (ApnContext apnContext : mApnContexts.values()) {
+ if (!apnContext.isDisconnected()) {
+ // At least one context was not disconnected return false
+ return false;
+ }
+ }
+ // All contexts were disconnected so return true
+ return true;
+ }
+
+ @Override
protected void notifyDataConnection(String reason) {
if (DBG) log("notifyDataConnection: reason=" + reason);
for (ApnContext apnContext : mApnContexts.values()) {
@@ -2075,18 +2087,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
/**
- * Check current radio access technology is LTE or EHRPD.
- *
- * @param integer value of radio access technology
- * @return true when current radio access technology is LTE or EHRPD
- * @ false when current radio access technology is not LTE or EHRPD
- */
- private boolean needToCheckApnBearer(int radioTech) {
- return (radioTech == ServiceState.RADIO_TECHNOLOGY_LTE ||
- radioTech == ServiceState.RADIO_TECHNOLOGY_EHRPD);
- }
-
- /**
* Build a list of APNs to be used to create PDP's.
*
* @param requestedApnType
@@ -2107,7 +2107,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
String operator = mPhone.mIccRecords.getOperatorNumeric();
int radioTech = mPhone.getServiceState().getRadioTechnology();
- boolean needToCheckApnBearer = needToCheckApnBearer(radioTech);
if (requestedApnType.equals(Phone.APN_TYPE_DEFAULT)) {
if (canSetPreferApn && mPreferredApn != null) {
@@ -2116,7 +2115,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
+ mPreferredApn.numeric + ":" + mPreferredApn);
}
if (mPreferredApn.numeric.equals(operator)) {
- if (!needToCheckApnBearer || mPreferredApn.bearer == radioTech) {
+ if (mPreferredApn.bearer == 0 || mPreferredApn.bearer == radioTech) {
apnList.add(mPreferredApn);
if (DBG) log("buildWaitingApns: X added preferred apnList=" + apnList);
return apnList;
@@ -2135,7 +2134,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
if (mAllApns != null) {
for (ApnSetting apn : mAllApns) {
if (apn.canHandleType(requestedApnType)) {
- if (!needToCheckApnBearer || apn.bearer == radioTech) {
+ if (apn.bearer == 0 || apn.bearer == radioTech) {
if (DBG) log("apn info : " +apn.toString());
apnList.add(apn);
}
@@ -2339,11 +2338,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
@Override
- public boolean isAnyActiveDataConnections() {
- return isConnected();
- }
-
- @Override
protected void log(String s) {
Log.d(LOG_TAG, "[GsmDCT] "+ s);
}
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
index 680b3cdd13a9..37998949219f 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmMmiCode.java
@@ -496,7 +496,7 @@ public final class GsmMmiCode extends Handler implements MmiCode {
return false;
}
- if (PhoneNumberUtils.isEmergencyNumber(dialString)) {
+ if (PhoneNumberUtils.isLocalEmergencyNumber(dialString, phone.getContext())) {
return false;
} else {
return isShortCodeUSSD(dialString, phone);
diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
index d3e4b78fde9d..e2349afbf85e 100644
--- a/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
+++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/PhoneNumberUtilsTest.java
@@ -513,7 +513,19 @@ public class PhoneNumberUtilsTest extends AndroidTestCase {
assertEquals("(650) 291-0000", PhoneNumberUtils.formatNumber("650 2910000", "US"));
assertEquals("123-4567", PhoneNumberUtils.formatNumber("1234567", "US"));
assertEquals("(800) 466-4114", PhoneNumberUtils.formatNumber("800-GOOG-114", "US"));
+ }
+ @SmallTest
+ public void testFormatNumber_LeadingStarAndHash() {
+ // Numbers with a leading '*' or '#' should be left unchanged.
+ assertEquals("*650 2910000", PhoneNumberUtils.formatNumber("*650 2910000", "US"));
+ assertEquals("#650 2910000", PhoneNumberUtils.formatNumber("#650 2910000", "US"));
+ assertEquals("*#650 2910000", PhoneNumberUtils.formatNumber("*#650 2910000", "US"));
+ assertEquals("#*650 2910000", PhoneNumberUtils.formatNumber("#*650 2910000", "US"));
+ assertEquals("#650*2910000", PhoneNumberUtils.formatNumber("#650*2910000", "US"));
+ assertEquals("#650*2910000", PhoneNumberUtils.formatNumber("#650*2910000", "US"));
+ assertEquals("##650 2910000", PhoneNumberUtils.formatNumber("##650 2910000", "US"));
+ assertEquals("**650 2910000", PhoneNumberUtils.formatNumber("**650 2910000", "US"));
}
@SmallTest
@@ -551,5 +563,8 @@ public class PhoneNumberUtilsTest extends AndroidTestCase {
// A valid fixed-line phone number from Brazil shouldn't be classified as an emergency number
// in Brazil, as 112 is not an emergency number there.
assertFalse(PhoneNumberUtils.isEmergencyNumber("1121234567", "BR"));
+ // A valid local phone number from Brazil shouldn't be classified as an emergency number in
+ // Brazil.
+ assertFalse(PhoneNumberUtils.isEmergencyNumber("91112345", "BR"));
}
}
diff --git a/test-runner/src/android/test/InstrumentationTestRunner.java b/test-runner/src/android/test/InstrumentationTestRunner.java
index c3d09ffb3308..70cf89e5f817 100644
--- a/test-runner/src/android/test/InstrumentationTestRunner.java
+++ b/test-runner/src/android/test/InstrumentationTestRunner.java
@@ -279,6 +279,7 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
private static final String LOG_TAG = "InstrumentationTestRunner";
private final Bundle mResults = new Bundle();
+ private Bundle mArguments;
private AndroidTestRunner mTestRunner;
private boolean mDebug;
private boolean mJustCount;
@@ -292,6 +293,7 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
@Override
public void onCreate(Bundle arguments) {
super.onCreate(arguments);
+ mArguments = arguments;
// Apk paths used to search for test classes when using TestSuiteBuilders.
String[] apkPaths =
@@ -379,6 +381,16 @@ public class InstrumentationTestRunner extends Instrumentation implements TestSu
start();
}
+ /**
+ * Get the Bundle object that contains the arguments
+ *
+ * @return the Bundle object
+ * @hide
+ */
+ public Bundle getBundle(){
+ return mArguments;
+ }
+
List<Predicate<TestMethod>> getBuilderRequirements() {
return new ArrayList<Predicate<TestMethod>>();
}
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index f2fb36f497f9..58680ea5dd49 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -36,9 +36,11 @@ import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
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.content.pm.VerifierDeviceIdentity;
+import android.content.pm.VerifierInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
@@ -546,11 +548,8 @@ public class MockPackageManager extends PackageManager {
throw new UnsupportedOperationException();
}
- /**
- * @hide
- */
@Override
- public void verifyPendingInstall(int id, boolean verified, String failureMessage) {
+ public void verifyPendingInstall(int id, int verificationCode) {
throw new UnsupportedOperationException();
}
diff --git a/tests/DataIdleTest/src/com/android/tests/dataidle/DataIdleTest.java b/tests/DataIdleTest/src/com/android/tests/dataidle/DataIdleTest.java
index 54adc249a2da..a13c0c978282 100644
--- a/tests/DataIdleTest/src/com/android/tests/dataidle/DataIdleTest.java
+++ b/tests/DataIdleTest/src/com/android/tests/dataidle/DataIdleTest.java
@@ -72,6 +72,7 @@ public class DataIdleTest extends InstrumentationTestCase {
*/
private void fetchStats(NetworkTemplate template) {
try {
+ mStatsService.forceUpdate();
NetworkStats stats = mStatsService.getSummaryForAllUid(template, Long.MIN_VALUE,
Long.MAX_VALUE, false);
reportStats(stats);
@@ -88,18 +89,27 @@ public class DataIdleTest extends InstrumentationTestCase {
Bundle result = new Bundle();
long rxBytes = 0;
long txBytes = 0;
+ long rxPackets = 0;
+ long txPackets = 0;
for (int i = 0; i < stats.size(); ++i) {
// Label will be iface_uid_tag_set
Entry statsEntry = stats.getValues(i, null);
+ // Debugging use.
+ /*
String labelTemplate = String.format("%s_%d_%d_%d", statsEntry.iface, statsEntry.uid,
statsEntry.tag, statsEntry.set) + "_%s";
result.putLong(String.format(labelTemplate, "rxBytes"), statsEntry.rxBytes);
result.putLong(String.format(labelTemplate, "txBytes"), statsEntry.txBytes);
+ */
+ rxPackets += statsEntry.rxPackets;
rxBytes += statsEntry.rxBytes;
+ txPackets += statsEntry.txPackets;
txBytes += statsEntry.txBytes;
}
- result.putLong("Total rxBytes", rxBytes);
- result.putLong("Total txBytes", txBytes);
+ result.putLong("Total rx Bytes", rxBytes);
+ result.putLong("Total tx Bytes", txBytes);
+ result.putLong("Total rx Packets", rxPackets);
+ result.putLong("Total tx Packets", txPackets);
getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, result);
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index f8c32dd81921..c0ba8cf53254 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -904,6 +904,9 @@ public class TestShellActivity extends Activity implements LayoutTestController
settings.setWorkersEnabled(false);
settings.setXSSAuditorEnabled(false);
settings.setPageCacheCapacity(0);
+ // this enables cpu upload path (as opposed to gpu upload path)
+ // and it's only meant to be a temporary workaround!
+ settings.setProperty("enable_cpu_upload_path", "true");
}
private WebView mWebView;
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index d74d80d0d98a..929b103bc5be 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -31,6 +31,15 @@
android:hardwareAccelerated="true">
<activity
+ android:name="DisplayListLayersActivity"
+ android:label="__DisplayListLayers">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name="TextFadeActivity"
android:label="_TextFade">
<intent-filter>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/DisplayListLayersActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/DisplayListLayersActivity.java
new file mode 100644
index 000000000000..ec91c35dce0f
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/DisplayListLayersActivity.java
@@ -0,0 +1,125 @@
+/*
+ * 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.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import static android.view.View.LAYER_TYPE_HARDWARE;
+import static android.view.View.LAYER_TYPE_SOFTWARE;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class DisplayListLayersActivity extends Activity {
+ private static final int VERTICAL_MARGIN = 12;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ LinearLayout root = createContainer();
+ addChild(root, new LayerView(this, 0xffff0000, LAYER_TYPE_HARDWARE, "hardware"),
+ WRAP_CONTENT, WRAP_CONTENT);
+ addChild(root, new LayerView(this, 0xff0000ff, LAYER_TYPE_SOFTWARE, "software"),
+ WRAP_CONTENT, WRAP_CONTENT);
+ addChild(root, createButton(root), WRAP_CONTENT, WRAP_CONTENT);
+
+ setContentView(root);
+ }
+
+ private Button createButton(final LinearLayout root) {
+ Button button = new Button(this);
+ button.setText("Invalidate");
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ for (int i = 0; i < root.getChildCount(); i++) {
+ View child = root.getChildAt(i);
+ if (child != v) {
+ child.invalidate();
+ }
+ }
+ }
+ });
+
+ return button;
+ }
+
+ private void addChild(LinearLayout root, View child, int width, int height) {
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ params.setMargins(0, dipToPx(VERTICAL_MARGIN), 0, 0);
+ root.addView(child, params);
+ }
+
+ private int dipToPx(int size) {
+ return (int) (getResources().getDisplayMetrics().density * size + 0.5f);
+ }
+
+ private LinearLayout createContainer() {
+ LinearLayout layout = new LinearLayout(this);
+ layout.setOrientation(LinearLayout.VERTICAL);
+ return layout;
+ }
+
+ private class LayerView extends View {
+ private static final String LOG_TAG = "LayerView";
+ private final Paint mPaint = new Paint();
+
+ private final String mTag;
+
+ LayerView(Context context, int color, int layerType, String tag) {
+ super(context);
+
+ mTag = tag;
+
+ mPaint.setColor(color);
+ setLayerType(layerType, null);
+ }
+
+ private void log(String tag) {
+ Log.d(LOG_TAG, mTag + ": " + tag);
+ }
+
+ @Override
+ public void invalidate() {
+ log("invalidate");
+ super.invalidate();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ log("draw");
+ canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec) / 3,
+ MeasureSpec.getSize(heightMeasureSpec) / 3);
+ }
+ }
+}
diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
index f015378e2610..5df018e68eaf 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -412,9 +412,31 @@ public class WindowManagerPermissionTests extends TestCase {
@SmallTest
public void testSET_ORIENTATION() {
try {
- mWm.setRotation(0, true, 0);
+ mWm.updateRotation(true);
mWm.getSwitchState(0);
- fail("IWindowManager.setRotation did not throw SecurityException as"
+ fail("IWindowManager.updateRotation did not throw SecurityException as"
+ + " expected");
+ } catch (SecurityException e) {
+ // expected
+ } catch (RemoteException e) {
+ fail("Unexpected remote exception");
+ }
+
+ try {
+ mWm.freezeRotation();
+ mWm.getSwitchState(0);
+ fail("IWindowManager.freezeRotation did not throw SecurityException as"
+ + " expected");
+ } catch (SecurityException e) {
+ // expected
+ } catch (RemoteException e) {
+ fail("Unexpected remote exception");
+ }
+
+ try {
+ mWm.thawRotation();
+ mWm.getSwitchState(0);
+ fail("IWindowManager.thawRotation did not throw SecurityException as"
+ " expected");
} catch (SecurityException e) {
// expected
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 81b924af8d7e..99f74c6c10f1 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -695,7 +695,7 @@ status_t parseAndAddEntry(Bundle* bundle,
if (isInProductList(product, String16(bundleProduct))) {
;
} else if (strcmp16(String16("default").string(), product.string()) == 0 &&
- !outTable->hasBagOrEntry(myPackage, curType, ident)) {
+ !outTable->hasBagOrEntry(myPackage, curType, ident, config)) {
;
} else {
return NO_ERROR;
@@ -1823,6 +1823,37 @@ bool ResourceTable::hasBagOrEntry(const String16& package,
return false;
}
+bool ResourceTable::hasBagOrEntry(const String16& package,
+ const String16& type,
+ const String16& name,
+ const ResTable_config& config) const
+{
+ // First look for this in the included resources...
+ uint32_t rid = mAssets->getIncludedResources()
+ .identifierForName(name.string(), name.size(),
+ type.string(), type.size(),
+ package.string(), package.size());
+ if (rid != 0) {
+ return true;
+ }
+
+ sp<Package> p = mPackages.valueFor(package);
+ if (p != NULL) {
+ sp<Type> t = p->getTypes().valueFor(type);
+ if (t != NULL) {
+ sp<ConfigList> c = t->getConfigs().valueFor(name);
+ if (c != NULL) {
+ sp<Entry> e = c->getEntries().valueFor(config);
+ if (e != NULL) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
bool ResourceTable::hasBagOrEntry(const String16& ref,
const String16* defType,
const String16* defPackage)
diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h
index 734c541f9b61..80f2192da4f6 100644
--- a/tools/aapt/ResourceTable.h
+++ b/tools/aapt/ResourceTable.h
@@ -124,6 +124,11 @@ public:
const String16& type,
const String16& name) const;
+ bool hasBagOrEntry(const String16& package,
+ const String16& type,
+ const String16& name,
+ const ResTable_config& config) const;
+
bool hasBagOrEntry(const String16& ref,
const String16* defType = NULL,
const String16* defPackage = NULL);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
index ed29a78e90b1..5b57266b4daa 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
@@ -24,6 +24,7 @@ import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.util.DisplayMetrics;
import android.view.Display;
@@ -395,7 +396,7 @@ public class BridgeWindowManager implements IWindowManager {
}
- public void setRotation(int arg0, boolean arg1, int arg2) throws RemoteException {
+ public void updateRotation(boolean arg0) throws RemoteException {
// TODO Auto-generated method stub
}
@@ -451,7 +452,7 @@ public class BridgeWindowManager implements IWindowManager {
return 0;
}
- public void waitForAllDrawn() {
+ public void waitForWindowDrawn(IBinder token, IRemoteCallback callback) {
// TODO Auto-generated method stub
}
@@ -463,4 +464,7 @@ public class BridgeWindowManager implements IWindowManager {
public int getPreferredOptionsPanelGravity() throws RemoteException {
return Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
}
+
+ public void dismissKeyguard() {
+ }
}
diff --git a/tools/orientationplot/orientationplot.py b/tools/orientationplot/orientationplot.py
index 07449d4d2bc9..3a44cb2cbfd8 100755
--- a/tools/orientationplot/orientationplot.py
+++ b/tools/orientationplot/orientationplot.py
@@ -131,42 +131,28 @@ class Plotter:
self.orientation_angle_axes, 'orientation', 'black')
self._add_timeseries_legend(self.orientation_angle_axes)
- self.actual_orientation = self._make_timeseries()
- self.proposed_orientation = self._make_timeseries()
+ self.current_rotation = self._make_timeseries()
+ self.proposed_rotation = self._make_timeseries()
+ self.proposal_rotation = self._make_timeseries()
self.orientation_axes = self._add_timeseries_axes(
- 5, 'Actual / Proposed Orientation and Confidence', 'rotation', [-1, 4],
+ 5, 'Current / Proposed Orientation and Confidence', 'rotation', [-1, 4],
sharex=shared_axis,
yticks=range(0, 4))
- self.actual_orientation_line = self._add_timeseries_line(
- self.orientation_axes, 'actual', 'black', linewidth=2)
- self.proposed_orientation_line = self._add_timeseries_line(
- self.orientation_axes, 'proposed', 'purple', linewidth=3)
+ self.current_rotation_line = self._add_timeseries_line(
+ self.orientation_axes, 'current', 'black', linewidth=2)
+ self.proposal_rotation_line = self._add_timeseries_line(
+ self.orientation_axes, 'proposal', 'purple', linewidth=3)
+ self.proposed_rotation_line = self._add_timeseries_line(
+ self.orientation_axes, 'proposed', 'green', linewidth=3)
self._add_timeseries_legend(self.orientation_axes)
- self.confidence = [[self._make_timeseries(), self._make_timeseries()] for i in range(0, 4)]
- self.confidence_polys = []
-
- self.combined_confidence = self._make_timeseries()
- self.orientation_confidence = self._make_timeseries()
- self.tilt_confidence = self._make_timeseries()
- self.magnitude_confidence = self._make_timeseries()
- self.confidence_axes = self._add_timeseries_axes(
- 6, 'Proposed Orientation Confidence Factors', 'confidence', [-0.1, 1.1],
- sharex=shared_axis,
- yticks=[0.0, 0.2, 0.4, 0.6, 0.8, 1.0])
- self.combined_confidence_line = self._add_timeseries_line(
- self.confidence_axes, 'combined', 'purple', linewidth=2)
- self.orientation_confidence_line = self._add_timeseries_line(
- self.confidence_axes, 'orientation', 'black')
- self.tilt_confidence_line = self._add_timeseries_line(
- self.confidence_axes, 'tilt', 'brown')
- self.magnitude_confidence_line = self._add_timeseries_line(
- self.confidence_axes, 'magnitude', 'orange')
- self._add_timeseries_legend(self.confidence_axes)
+ self.proposal_confidence = [[self._make_timeseries(), self._make_timeseries()]
+ for i in range(0, 4)]
+ self.proposal_confidence_polys = []
self.sample_latency = self._make_timeseries()
self.sample_latency_axes = self._add_timeseries_axes(
- 7, 'Accelerometer Sampling Latency', 'ms', [-10, 500],
+ 6, 'Accelerometer Sampling Latency', 'ms', [-10, 500],
sharex=shared_axis,
yticks=range(0, 500, 100))
self.sample_latency_line = self._add_timeseries_line(
@@ -186,7 +172,7 @@ class Plotter:
# Add a subplot to the figure for a time series.
def _add_timeseries_axes(self, index, title, ylabel, ylim, yticks, sharex=None):
- num_graphs = 7
+ num_graphs = 6
height = 0.9 / num_graphs
top = 0.95 - height * index
axes = self.fig.add_axes([0.1, top, 0.8, height],
@@ -234,13 +220,10 @@ class Plotter:
self.parse_magnitude = None
self.parse_tilt_angle = None
self.parse_orientation_angle = None
- self.parse_proposed_orientation = None
- self.parse_combined_confidence = None
- self.parse_orientation_confidence = None
- self.parse_tilt_confidence = None
- self.parse_magnitude_confidence = None
- self.parse_actual_orientation = None
- self.parse_confidence = None
+ self.parse_current_rotation = None
+ self.parse_proposed_rotation = None
+ self.parse_proposal_rotation = None
+ self.parse_proposal_confidence = None
self.parse_sample_latency = None
# Update samples.
@@ -284,26 +267,13 @@ class Plotter:
if line.find('orientationAngle=') != -1:
self.parse_orientation_angle = self._get_following_number(line, 'orientationAngle=')
- if line.find('Proposal:') != -1:
- self.parse_proposed_orientation = self._get_following_number(line, 'proposedOrientation=')
- self.parse_combined_confidence = self._get_following_number(line, 'combinedConfidence=')
- self.parse_orientation_confidence = self._get_following_number(line, 'orientationConfidence=')
- self.parse_tilt_confidence = self._get_following_number(line, 'tiltConfidence=')
- self.parse_magnitude_confidence = self._get_following_number(line, 'magnitudeConfidence=')
-
if line.find('Result:') != -1:
- self.parse_actual_orientation = self._get_following_number(line, 'rotation=')
- self.parse_confidence = self._get_following_array_of_numbers(line, 'confidence=')
+ self.parse_current_rotation = self._get_following_number(line, 'currentRotation=')
+ self.parse_proposed_rotation = self._get_following_number(line, 'proposedRotation=')
+ self.parse_proposal_rotation = self._get_following_number(line, 'proposalRotation=')
+ self.parse_proposal_confidence = self._get_following_number(line, 'proposalConfidence=')
self.parse_sample_latency = self._get_following_number(line, 'timeDeltaMS=')
- for i in range(0, 4):
- if self.parse_confidence is not None:
- self._append(self.confidence[i][0], timeindex, i)
- self._append(self.confidence[i][1], timeindex, i + self.parse_confidence[i])
- else:
- self._append(self.confidence[i][0], timeindex, None)
- self._append(self.confidence[i][1], timeindex, None)
-
self._append(self.raw_acceleration_x, timeindex, self.parse_raw_acceleration_x)
self._append(self.raw_acceleration_y, timeindex, self.parse_raw_acceleration_y)
self._append(self.raw_acceleration_z, timeindex, self.parse_raw_acceleration_z)
@@ -313,12 +283,22 @@ class Plotter:
self._append(self.magnitude, timeindex, self.parse_magnitude)
self._append(self.tilt_angle, timeindex, self.parse_tilt_angle)
self._append(self.orientation_angle, timeindex, self.parse_orientation_angle)
- self._append(self.actual_orientation, timeindex, self.parse_actual_orientation)
- self._append(self.proposed_orientation, timeindex, self.parse_proposed_orientation)
- self._append(self.combined_confidence, timeindex, self.parse_combined_confidence)
- self._append(self.orientation_confidence, timeindex, self.parse_orientation_confidence)
- self._append(self.tilt_confidence, timeindex, self.parse_tilt_confidence)
- self._append(self.magnitude_confidence, timeindex, self.parse_magnitude_confidence)
+ self._append(self.current_rotation, timeindex, self.parse_current_rotation)
+ if self.parse_proposed_rotation >= 0:
+ self._append(self.proposed_rotation, timeindex, self.parse_proposed_rotation)
+ else:
+ self._append(self.proposed_rotation, timeindex, None)
+ if self.parse_proposal_rotation >= 0:
+ self._append(self.proposal_rotation, timeindex, self.parse_proposal_rotation)
+ else:
+ self._append(self.proposal_rotation, timeindex, None)
+ for i in range(0, 4):
+ self._append(self.proposal_confidence[i][0], timeindex, i)
+ if i == self.parse_proposal_rotation:
+ self._append(self.proposal_confidence[i][1], timeindex,
+ i + self.parse_proposal_confidence)
+ else:
+ self._append(self.proposal_confidence[i][1], timeindex, i)
self._append(self.sample_latency, timeindex, self.parse_sample_latency)
self._reset_parse_state()
@@ -335,16 +315,13 @@ class Plotter:
self._scroll(self.magnitude, bottom)
self._scroll(self.tilt_angle, bottom)
self._scroll(self.orientation_angle, bottom)
- self._scroll(self.actual_orientation, bottom)
- self._scroll(self.proposed_orientation, bottom)
- self._scroll(self.combined_confidence, bottom)
- self._scroll(self.orientation_confidence, bottom)
- self._scroll(self.tilt_confidence, bottom)
- self._scroll(self.magnitude_confidence, bottom)
- self._scroll(self.sample_latency, bottom)
+ self._scroll(self.current_rotation, bottom)
+ self._scroll(self.proposed_rotation, bottom)
+ self._scroll(self.proposal_rotation, bottom)
for i in range(0, 4):
- self._scroll(self.confidence[i][0], bottom)
- self._scroll(self.confidence[i][1], bottom)
+ self._scroll(self.proposal_confidence[i][0], bottom)
+ self._scroll(self.proposal_confidence[i][1], bottom)
+ self._scroll(self.sample_latency, bottom)
# Redraw the plots.
self.raw_acceleration_line_x.set_data(self.raw_acceleration_x)
@@ -356,20 +333,19 @@ class Plotter:
self.magnitude_line.set_data(self.magnitude)
self.tilt_angle_line.set_data(self.tilt_angle)
self.orientation_angle_line.set_data(self.orientation_angle)
- self.actual_orientation_line.set_data(self.actual_orientation)
- self.proposed_orientation_line.set_data(self.proposed_orientation)
- self.combined_confidence_line.set_data(self.combined_confidence)
- self.orientation_confidence_line.set_data(self.orientation_confidence)
- self.tilt_confidence_line.set_data(self.tilt_confidence)
- self.magnitude_confidence_line.set_data(self.magnitude_confidence)
+ self.current_rotation_line.set_data(self.current_rotation)
+ self.proposed_rotation_line.set_data(self.proposed_rotation)
+ self.proposal_rotation_line.set_data(self.proposal_rotation)
self.sample_latency_line.set_data(self.sample_latency)
- for poly in self.confidence_polys:
+ for poly in self.proposal_confidence_polys:
poly.remove()
- self.confidence_polys = []
+ self.proposal_confidence_polys = []
for i in range(0, 4):
- self.confidence_polys.append(self.orientation_axes.fill_between(self.confidence[i][0][0],
- self.confidence[i][0][1], self.confidence[i][1][1],
+ self.proposal_confidence_polys.append(self.orientation_axes.fill_between(
+ self.proposal_confidence[i][0][0],
+ self.proposal_confidence[i][0][1],
+ self.proposal_confidence[i][1][1],
facecolor='goldenrod', edgecolor='goldenrod'))
self.fig.canvas.draw_idle()
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index a6ea6d422fd7..6ff1bc248cf9 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -106,12 +106,6 @@ public class WifiNative {
public native static String statusCommand();
- public native static int getRssiCommand();
-
- public native static int getRssiApproxCommand();
-
- public native static int getLinkSpeedCommand();
-
public native static String getMacAddressCommand();
public native static String scanResultsCommand();
@@ -209,6 +203,16 @@ public class WifiNative {
private native static String doStringCommand(String command);
+ /** Example output:
+ * RSSI=-65
+ * LINKSPEED=48
+ * NOISE=9999
+ * FREQUENCY=0
+ */
+ public static String signalPoll() {
+ return doStringCommand("SIGNAL_POLL");
+ }
+
public static boolean wpsPbc() {
return doBooleanCommand("WPS_PBC");
}
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index e0598a7dd2c8..41fc55d5bd8a 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -154,6 +154,8 @@ public class WifiStateMachine extends StateMachine {
private static final int SUPPLICANT_RESTART_TRIES = 5;
private int mSupplicantRestartCount = 0;
+ /* Tracks sequence number on stop failure message */
+ private int mSupplicantStopFailureToken = 0;
private LinkProperties mLinkProperties;
@@ -216,6 +218,8 @@ public class WifiStateMachine extends StateMachine {
static final int CMD_STATIC_IP_SUCCESS = BASE + 15;
/* Indicates Static IP failed */
static final int CMD_STATIC_IP_FAILURE = BASE + 16;
+ /* Indicates supplicant stop failed */
+ static final int CMD_STOP_SUPPLICANT_FAILED = BASE + 17;
/* Start the soft access point */
static final int CMD_START_AP = BASE + 21;
@@ -1358,7 +1362,28 @@ public class WifiStateMachine extends StateMachine {
* Fetch RSSI and linkspeed on current connection
*/
private void fetchRssiAndLinkSpeedNative() {
- int newRssi = WifiNative.getRssiCommand();
+ int newRssi = -1;
+ int newLinkSpeed = -1;
+
+ String signalPoll = WifiNative.signalPoll();
+
+ if (signalPoll != null) {
+ String[] lines = signalPoll.split("\n");
+ for (String line : lines) {
+ String[] prop = line.split("=");
+ if (prop.length < 2) continue;
+ try {
+ if (prop[0].equals("RSSI")) {
+ newRssi = Integer.parseInt(prop[1]);
+ } else if (prop[0].equals("LINKSPEED")) {
+ newLinkSpeed = Integer.parseInt(prop[1]);
+ }
+ } catch (NumberFormatException e) {
+ //Ignore, defaults on rssi and linkspeed are assigned
+ }
+ }
+ }
+
if (newRssi != -1 && MIN_RSSI < newRssi && newRssi < MAX_RSSI) { // screen out invalid values
/* some implementations avoid negative values by adding 256
* so we need to adjust for that here.
@@ -1386,7 +1411,7 @@ public class WifiStateMachine extends StateMachine {
} else {
mWifiInfo.setRssi(MIN_RSSI);
}
- int newLinkSpeed = WifiNative.getLinkSpeedCommand();
+
if (newLinkSpeed != -1) {
mWifiInfo.setLinkSpeed(newLinkSpeed);
}
@@ -1735,6 +1760,7 @@ public class WifiStateMachine extends StateMachine {
case CMD_UNLOAD_DRIVER:
case CMD_START_SUPPLICANT:
case CMD_STOP_SUPPLICANT:
+ case CMD_STOP_SUPPLICANT_FAILED:
case CMD_START_DRIVER:
case CMD_STOP_DRIVER:
case CMD_START_AP:
@@ -2263,9 +2289,13 @@ public class WifiStateMachine extends StateMachine {
EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
Log.d(TAG, "stopping supplicant");
if (!WifiNative.stopSupplicant()) {
- Log.e(TAG, "Failed to stop supplicant, issue kill");
- WifiNative.killSupplicant();
+ Log.e(TAG, "Failed to stop supplicant");
}
+
+ /* Send ourselves a delayed message to indicate failure after a wait time */
+ sendMessageDelayed(obtainMessage(CMD_STOP_SUPPLICANT_FAILED,
+ ++mSupplicantStopFailureToken, 0), SUPPLICANT_RESTART_INTERVAL_MSECS);
+
mNetworkInfo.setIsAvailable(false);
handleNetworkDisconnect();
setWifiState(WIFI_STATE_DISABLING);
@@ -2282,9 +2312,21 @@ public class WifiStateMachine extends StateMachine {
break;
case WifiMonitor.SUP_DISCONNECTION_EVENT:
Log.d(TAG, "Supplicant connection lost");
+ /* Socket connection can be lost when we do a graceful shutdown
+ * or when the driver is hung. Ensure supplicant is stopped here.
+ */
+ WifiNative.killSupplicant();
WifiNative.closeSupplicantConnection();
transitionTo(mDriverLoadedState);
break;
+ case CMD_STOP_SUPPLICANT_FAILED:
+ if (message.arg1 == mSupplicantStopFailureToken) {
+ Log.e(TAG, "Timed out on a supplicant stop, kill and proceed");
+ WifiNative.killSupplicant();
+ WifiNative.closeSupplicantConnection();
+ transitionTo(mDriverLoadedState);
+ }
+ break;
case CMD_LOAD_DRIVER:
case CMD_UNLOAD_DRIVER:
case CMD_START_SUPPLICANT:
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
index fe0e85093601..af8c48642799 100644
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
@@ -589,12 +589,11 @@ public class WifiWatchdogStateMachine extends StateMachine {
updateBssids();
transitionTo(mDnsCheckingState);
mNetEventCounter++;
- return HANDLED;
- case DISCONNECTED:
- case DISCONNECTING:
+ break;
+ default:
mNetEventCounter++;
transitionTo(mNotConnectedState);
- return HANDLED;
+ break;
}
return HANDLED;
case EVENT_WIFI_RADIO_STATE_CHANGE: