diff options
| -rw-r--r-- | api/14.txt | 365 | ||||
| -rw-r--r-- | api/current.txt | 367 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 19 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 49 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 15 | ||||
| -rw-r--r-- | core/java/android/bluetooth/BluetoothSocket.java | 44 | ||||
| -rw-r--r-- | core/java/android/content/res/CompatibilityInfo.java | 13 | ||||
| -rw-r--r-- | core/java/android/nfc/tech/MifareClassic.java | 16 | ||||
| -rw-r--r-- | core/java/android/nfc/tech/MifareUltralight.java | 2 | ||||
| -rw-r--r-- | core/java/android/os/FileUtils.java | 17 | ||||
| -rw-r--r-- | core/java/android/provider/Calendar.java | 42 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 24 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/menu/ActionMenuItemView.java | 18 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ActionBarContextView.java | 48 | ||||
| -rw-r--r-- | core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png | bin | 242 -> 252 bytes | |||
| -rw-r--r-- | core/res/res/drawable-hdpi/dialog_top_holo_light.9.png | bin | 1033 -> 1042 bytes | |||
| -rw-r--r-- | core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png | bin | 0 -> 709 bytes | |||
| -rw-r--r-- | core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png | bin | 0 -> 945 bytes | |||
| -rw-r--r-- | core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png | bin | 213 -> 222 bytes | |||
| -rw-r--r-- | core/res/res/drawable-mdpi/dialog_top_holo_light.9.png | bin | 632 -> 648 bytes | |||
| -rw-r--r-- | core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png | bin | 0 -> 586 bytes | |||
| -rw-r--r-- | core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png | bin | 0 -> 726 bytes | |||
| -rw-r--r-- | core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png | bin | 271 -> 281 bytes | |||
| -rw-r--r-- | core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png | bin | 1487 -> 1496 bytes | |||
| -rw-r--r-- | core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml (renamed from core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml) | 0 | ||||
| -rw-r--r-- | core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml (renamed from core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml) | 0 | ||||
| -rw-r--r-- | core/res/res/layout/am_compat_mode_dialog.xml | 60 | ||||
| -rw-r--r-- | core/res/res/values-sw600dp/dimens.xml | 28 | ||||
| -rw-r--r-- | core/res/res/values-sw600dp/styles.xml (renamed from core/res/res/values-xlarge/styles.xml) | 0 | ||||
| -rw-r--r-- | core/res/res/values-xlarge/dimens.xml | 7 | ||||
| -rwxr-xr-x | core/res/res/values/attrs.xml | 2 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 | ||||
| -rwxr-xr-x | core/res/res/values/strings.xml | 6 | ||||
| -rw-r--r-- | core/res/res/values/themes.xml | 4 | ||||
| -rw-r--r-- | core/tests/coretests/AndroidManifest.xml | 6 | ||||
| -rw-r--r-- | docs/html/sdk/android-2.3.3.jd | 4 | ||||
| -rw-r--r-- | graphics/java/android/graphics/drawable/AnimationDrawable.java | 5 | ||||
| -rw-r--r-- | include/media/mediaplayer.h | 6 | ||||
| -rw-r--r-- | media/java/android/media/MediaRecorder.java | 6 | ||||
| -rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 28 | ||||
| -rw-r--r-- | media/libstagefright/HTTPBase.cpp | 79 | ||||
| -rw-r--r-- | media/libstagefright/NuCachedSource2.cpp | 11 | ||||
| -rw-r--r-- | media/libstagefright/NuHTTPDataSource.cpp | 35 | ||||
| -rw-r--r-- | media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp | 35 | ||||
| -rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 2 | ||||
| -rw-r--r-- | media/libstagefright/include/ChromiumHTTPDataSource.h | 14 | ||||
| -rw-r--r-- | media/libstagefright/include/HTTPBase.h | 34 | ||||
| -rw-r--r-- | media/libstagefright/include/NuCachedSource2.h | 2 | ||||
| -rw-r--r-- | media/libstagefright/include/NuHTTPDataSource.h | 15 | ||||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/app_icon.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png) | bin | 7310 -> 7310 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png) | bin | 10841 -> 10841 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png) | bin | 608 -> 608 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png) | bin | 684 -> 684 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png) | bin | 635 -> 635 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png) | bin | 451 -> 451 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png) | bin | 579 -> 579 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png) | bin | 440 -> 440 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png) | bin | 991 -> 991 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png) | bin | 959 -> 959 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png) | bin | 992 -> 992 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png) | bin | 490 -> 490 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png) | bin | 623 -> 623 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png) | bin | 718 -> 718 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png) | bin | 657 -> 657 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png) | bin | 441 -> 441 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png) | bin | 569 -> 569 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png) | bin | 401 -> 401 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png) | bin | 992 -> 992 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png) | bin | 992 -> 992 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png) | bin | 949 -> 949 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png) | bin | 1040 -> 1040 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png) | bin | 992 -> 992 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png) | bin | 622 -> 622 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png) | bin | 826 -> 826 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png (renamed from packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png) | bin | 644 -> 644 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/app_icon.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png) | bin | 5167 -> 5167 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png) | bin | 7927 -> 7927 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png) | bin | 9784 -> 9784 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png) | bin | 114 -> 114 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png) | bin | 3981 -> 3981 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png) | bin | 2056 -> 2056 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png) | bin | 495 -> 495 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png) | bin | 532 -> 532 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png) | bin | 508 -> 508 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png) | bin | 419 -> 419 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png) | bin | 473 -> 473 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png) | bin | 415 -> 415 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png) | bin | 740 -> 740 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png) | bin | 749 -> 749 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png) | bin | 739 -> 739 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png) | bin | 437 -> 437 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png) | bin | 512 -> 512 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png) | bin | 543 -> 543 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png) | bin | 532 -> 532 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png) | bin | 416 -> 416 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png) | bin | 477 -> 477 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png) | bin | 396 -> 396 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png) | bin | 739 -> 739 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png) | bin | 739 -> 739 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png) | bin | 712 -> 712 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png) | bin | 745 -> 745 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png) | bin | 739 -> 739 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png) | bin | 524 -> 524 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png) | bin | 627 -> 627 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png (renamed from packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png) | bin | 549 -> 549 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/values-sw600dp-port/dimens.xml (renamed from packages/SystemUI/res/values-xlarge-port/dimens.xml) | 2 | ||||
| -rw-r--r-- | packages/SystemUI/res/values-sw600dp/colors.xml (renamed from packages/SystemUI/res/values-xlarge/colors.xml) | 0 | ||||
| -rw-r--r-- | packages/SystemUI/res/values-sw600dp/dimens.xml (renamed from packages/SystemUI/res/values-xlarge/dimens.xml) | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java | 20 | ||||
| -rw-r--r-- | services/input/InputReader.cpp | 123 | ||||
| -rw-r--r-- | services/input/InputReader.h | 8 | ||||
| -rw-r--r-- | services/input/PointerController.cpp | 56 | ||||
| -rw-r--r-- | services/input/PointerController.h | 19 | ||||
| -rw-r--r-- | services/input/tests/InputReader_test.cpp | 4 | ||||
| -rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 31 | ||||
| -rw-r--r-- | services/java/com/android/server/am/ActivityManagerService.java | 56 | ||||
| -rw-r--r-- | services/java/com/android/server/am/ActivityStack.java | 9 | ||||
| -rw-r--r-- | services/java/com/android/server/am/CompatModeDialog.java | 90 | ||||
| -rw-r--r-- | services/java/com/android/server/am/CompatModePackages.java | 103 | ||||
| -rw-r--r-- | services/java/com/android/server/am/TaskRecord.java | 4 | ||||
| -rw-r--r-- | services/java/com/android/server/usb/UsbDeviceManager.java | 431 | ||||
| -rw-r--r-- | services/java/com/android/server/usb/UsbHostManager.java | 222 | ||||
| -rw-r--r-- | services/java/com/android/server/usb/UsbService.java | 588 | ||||
| -rw-r--r-- | services/java/com/android/server/usb/UsbSettingsManager.java (renamed from services/java/com/android/server/usb/UsbDeviceSettingsManager.java) | 6 | ||||
| -rw-r--r-- | services/jni/Android.mk | 3 | ||||
| -rw-r--r-- | services/jni/com_android_server_UsbDeviceManager.cpp | 128 | ||||
| -rw-r--r-- | services/jni/com_android_server_UsbHostManager.cpp (renamed from services/jni/com_android_server_UsbService.cpp) | 76 | ||||
| -rw-r--r-- | services/jni/onload.cpp | 6 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/DataConnection.java | 78 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/DataConnectionAc.java | 4 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/RIL.java | 4 |
181 files changed, 2553 insertions, 952 deletions
diff --git a/api/14.txt b/api/14.txt index b080d25e4b4a..58d49d926e53 100644 --- a/api/14.txt +++ b/api/14.txt @@ -6273,6 +6273,9 @@ package android.database { public static final class CursorJoiner.Result extends java.lang.Enum { method public static android.database.CursorJoiner.Result valueOf(java.lang.String); method public static final android.database.CursorJoiner.Result[] values(); + enum_constant public static final android.database.CursorJoiner.Result BOTH; + enum_constant public static final android.database.CursorJoiner.Result LEFT; + enum_constant public static final android.database.CursorJoiner.Result RIGHT; } public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable { @@ -7191,6 +7194,8 @@ package android.graphics { public static final class AvoidXfermode.Mode extends java.lang.Enum { method public static android.graphics.AvoidXfermode.Mode valueOf(java.lang.String); method public static final android.graphics.AvoidXfermode.Mode[] values(); + enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID; + enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET; } public final class Bitmap implements android.os.Parcelable { @@ -7243,11 +7248,17 @@ package android.graphics { public static final class Bitmap.CompressFormat extends java.lang.Enum { method public static android.graphics.Bitmap.CompressFormat valueOf(java.lang.String); 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; } public static final class Bitmap.Config extends java.lang.Enum { method public static android.graphics.Bitmap.Config valueOf(java.lang.String); method public static final android.graphics.Bitmap.Config[] values(); + enum_constant public static final android.graphics.Bitmap.Config ALPHA_8; + enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; + enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; + enum_constant public static final android.graphics.Bitmap.Config RGB_565; } public class BitmapFactory { @@ -7311,6 +7322,10 @@ package android.graphics { public static final class BlurMaskFilter.Blur extends java.lang.Enum { method public static android.graphics.BlurMaskFilter.Blur valueOf(java.lang.String); method public static final android.graphics.BlurMaskFilter.Blur[] values(); + enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL; + enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID; } public class Camera { @@ -7424,11 +7439,16 @@ package android.graphics { public static final class Canvas.EdgeType extends java.lang.Enum { method public static android.graphics.Canvas.EdgeType valueOf(java.lang.String); method public static final android.graphics.Canvas.EdgeType[] values(); + enum_constant public static final android.graphics.Canvas.EdgeType AA; + enum_constant public static final android.graphics.Canvas.EdgeType BW; } public static final class Canvas.VertexMode extends java.lang.Enum { method public static android.graphics.Canvas.VertexMode valueOf(java.lang.String); method public static final android.graphics.Canvas.VertexMode[] values(); + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP; } public class Color { @@ -7543,6 +7563,9 @@ package android.graphics { public static final class Interpolator.Result extends java.lang.Enum { method public static android.graphics.Interpolator.Result valueOf(java.lang.String); method public static final android.graphics.Interpolator.Result[] values(); + enum_constant public static final android.graphics.Interpolator.Result FREEZE_END; + enum_constant public static final android.graphics.Interpolator.Result FREEZE_START; + enum_constant public static final android.graphics.Interpolator.Result NORMAL; } public class LayerRasterizer extends android.graphics.Rasterizer { @@ -7626,6 +7649,10 @@ package android.graphics { public static final class Matrix.ScaleToFit extends java.lang.Enum { method public static android.graphics.Matrix.ScaleToFit valueOf(java.lang.String); method public static final android.graphics.Matrix.ScaleToFit[] values(); + enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER; + enum_constant public static final android.graphics.Matrix.ScaleToFit END; + enum_constant public static final android.graphics.Matrix.ScaleToFit FILL; + enum_constant public static final android.graphics.Matrix.ScaleToFit START; } public class Movie { @@ -7755,11 +7782,17 @@ package android.graphics { public static final class Paint.Align extends java.lang.Enum { method public static android.graphics.Paint.Align valueOf(java.lang.String); method public static final android.graphics.Paint.Align[] values(); + enum_constant public static final android.graphics.Paint.Align CENTER; + enum_constant public static final android.graphics.Paint.Align LEFT; + enum_constant public static final android.graphics.Paint.Align RIGHT; } public static final class Paint.Cap extends java.lang.Enum { method public static android.graphics.Paint.Cap valueOf(java.lang.String); method public static final android.graphics.Paint.Cap[] values(); + enum_constant public static final android.graphics.Paint.Cap BUTT; + enum_constant public static final android.graphics.Paint.Cap ROUND; + enum_constant public static final android.graphics.Paint.Cap SQUARE; } public static class Paint.FontMetrics { @@ -7783,11 +7816,17 @@ package android.graphics { public static final class Paint.Join extends java.lang.Enum { method public static android.graphics.Paint.Join valueOf(java.lang.String); method public static final android.graphics.Paint.Join[] values(); + enum_constant public static final android.graphics.Paint.Join BEVEL; + enum_constant public static final android.graphics.Paint.Join MITER; + enum_constant public static final android.graphics.Paint.Join ROUND; } public static final class Paint.Style extends java.lang.Enum { method public static android.graphics.Paint.Style valueOf(java.lang.String); method public static final android.graphics.Paint.Style[] values(); + enum_constant public static final android.graphics.Paint.Style FILL; + enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE; + enum_constant public static final android.graphics.Paint.Style STROKE; } public class PaintFlagsDrawFilter extends android.graphics.DrawFilter { @@ -7839,11 +7878,17 @@ package android.graphics { public static final class Path.Direction extends java.lang.Enum { method public static android.graphics.Path.Direction valueOf(java.lang.String); method public static final android.graphics.Path.Direction[] values(); + enum_constant public static final android.graphics.Path.Direction CCW; + enum_constant public static final android.graphics.Path.Direction CW; } public static final class Path.FillType extends java.lang.Enum { method public static android.graphics.Path.FillType valueOf(java.lang.String); method public static final android.graphics.Path.FillType[] values(); + enum_constant public static final android.graphics.Path.FillType EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING; + enum_constant public static final android.graphics.Path.FillType WINDING; } public class PathDashPathEffect extends android.graphics.PathEffect { @@ -7853,6 +7898,9 @@ package android.graphics { public static final class PathDashPathEffect.Style extends java.lang.Enum { method public static android.graphics.PathDashPathEffect.Style valueOf(java.lang.String); method public static final android.graphics.PathDashPathEffect.Style[] values(); + enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH; + enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE; + enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE; } public class PathEffect { @@ -7949,6 +7997,24 @@ package android.graphics { public static final class PorterDuff.Mode extends java.lang.Enum { method public static android.graphics.PorterDuff.Mode valueOf(java.lang.String); method public static final android.graphics.PorterDuff.Mode[] values(); + enum_constant public static final android.graphics.PorterDuff.Mode ADD; + enum_constant public static final android.graphics.PorterDuff.Mode CLEAR; + enum_constant public static final android.graphics.PorterDuff.Mode DARKEN; + enum_constant public static final android.graphics.PorterDuff.Mode DST; + enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode DST_IN; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN; + enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY; + enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY; + enum_constant public static final android.graphics.PorterDuff.Mode SCREEN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode XOR; } public class PorterDuffColorFilter extends android.graphics.ColorFilter { @@ -8090,6 +8156,12 @@ package android.graphics { public static final class Region.Op extends java.lang.Enum { method public static android.graphics.Region.Op valueOf(java.lang.String); method public static final android.graphics.Region.Op[] values(); + enum_constant public static final android.graphics.Region.Op DIFFERENCE; + enum_constant public static final android.graphics.Region.Op INTERSECT; + enum_constant public static final android.graphics.Region.Op REPLACE; + enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE; + enum_constant public static final android.graphics.Region.Op UNION; + enum_constant public static final android.graphics.Region.Op XOR; } public class RegionIterator { @@ -8106,6 +8178,9 @@ package android.graphics { public static final class Shader.TileMode extends java.lang.Enum { method public static android.graphics.Shader.TileMode valueOf(java.lang.String); method public static final android.graphics.Shader.TileMode[] values(); + enum_constant public static final android.graphics.Shader.TileMode CLAMP; + enum_constant public static final android.graphics.Shader.TileMode MIRROR; + enum_constant public static final android.graphics.Shader.TileMode REPEAT; } public class SumPathEffect extends android.graphics.PathEffect { @@ -8380,6 +8455,14 @@ package android.graphics.drawable { public static final class GradientDrawable.Orientation extends java.lang.Enum { method public static android.graphics.drawable.GradientDrawable.Orientation valueOf(java.lang.String); method public static final android.graphics.drawable.GradientDrawable.Orientation[] values(); + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL; } public class InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { @@ -10812,6 +10895,9 @@ package android.net { public static final class LocalSocketAddress.Namespace extends java.lang.Enum { method public static android.net.LocalSocketAddress.Namespace valueOf(java.lang.String); method public static final android.net.LocalSocketAddress.Namespace[] values(); + enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT; + enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM; + enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED; } public class MailTo { @@ -10846,11 +10932,27 @@ package android.net { public static final class NetworkInfo.DetailedState extends java.lang.Enum { 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 CONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState FAILED; + enum_constant public static final android.net.NetworkInfo.DetailedState IDLE; + enum_constant public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR; + enum_constant public static final android.net.NetworkInfo.DetailedState SCANNING; + enum_constant public static final android.net.NetworkInfo.DetailedState SUSPENDED; } public static final class NetworkInfo.State extends java.lang.Enum { method public static android.net.NetworkInfo.State valueOf(java.lang.String); method public static final android.net.NetworkInfo.State[] values(); + enum_constant public static final android.net.NetworkInfo.State CONNECTED; + enum_constant public static final android.net.NetworkInfo.State CONNECTING; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.State SUSPENDED; + enum_constant public static final android.net.NetworkInfo.State UNKNOWN; } public class ParseException extends java.lang.RuntimeException { @@ -11363,6 +11465,17 @@ package android.net.wifi { method public static android.net.wifi.SupplicantState valueOf(java.lang.String); method public static final android.net.wifi.SupplicantState[] values(); 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 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 INVALID; + enum_constant public static final android.net.wifi.SupplicantState SCANNING; + enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED; } public class WifiConfiguration implements android.os.Parcelable { @@ -13184,6 +13297,9 @@ package android.os { public static final class AsyncTask.Status extends java.lang.Enum { method public static android.os.AsyncTask.Status valueOf(java.lang.String); method public static final android.os.AsyncTask.Status[] values(); + enum_constant public static final android.os.AsyncTask.Status FINISHED; + enum_constant public static final android.os.AsyncTask.Status PENDING; + enum_constant public static final android.os.AsyncTask.Status RUNNING; } public class BadParcelableException extends android.util.AndroidRuntimeException { @@ -16159,6 +16275,9 @@ package android.renderscript { public static final class Allocation.MipmapControl extends java.lang.Enum { method public static android.renderscript.Allocation.MipmapControl valueOf(java.lang.String); method public static final android.renderscript.Allocation.MipmapControl[] values(); + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE; } public class AllocationAdapter extends android.renderscript.Allocation { @@ -16256,11 +16375,45 @@ package android.renderscript { public static final class Element.DataKind extends java.lang.Enum { method public static android.renderscript.Element.DataKind valueOf(java.lang.String); method public static final android.renderscript.Element.DataKind[] values(); + enum_constant public static final android.renderscript.Element.DataKind PIXEL_A; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_DEPTH; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_L; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA; + enum_constant public static final android.renderscript.Element.DataKind USER; } public static final class Element.DataType extends java.lang.Enum { method public static android.renderscript.Element.DataType valueOf(java.lang.String); method public static final android.renderscript.Element.DataType[] values(); + enum_constant public static final android.renderscript.Element.DataType BOOLEAN; + enum_constant public static final android.renderscript.Element.DataType FLOAT_32; + enum_constant public static final android.renderscript.Element.DataType FLOAT_64; + enum_constant public static final android.renderscript.Element.DataType MATRIX_2X2; + enum_constant public static final android.renderscript.Element.DataType MATRIX_3X3; + enum_constant public static final android.renderscript.Element.DataType MATRIX_4X4; + enum_constant public static final android.renderscript.Element.DataType RS_ALLOCATION; + enum_constant public static final android.renderscript.Element.DataType RS_ELEMENT; + enum_constant public static final android.renderscript.Element.DataType RS_MESH; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_STORE; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX; + enum_constant public static final android.renderscript.Element.DataType RS_SAMPLER; + enum_constant public static final android.renderscript.Element.DataType RS_SCRIPT; + enum_constant public static final android.renderscript.Element.DataType RS_TYPE; + enum_constant public static final android.renderscript.Element.DataType SIGNED_16; + enum_constant public static final android.renderscript.Element.DataType SIGNED_32; + enum_constant public static final android.renderscript.Element.DataType SIGNED_64; + enum_constant public static final android.renderscript.Element.DataType SIGNED_8; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_16; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_32; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_6_5; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_64; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_8; } public class FieldPacker { @@ -16320,6 +16473,8 @@ package android.renderscript { public static final class FileA3D.EntryType extends java.lang.Enum { method public static android.renderscript.FileA3D.EntryType valueOf(java.lang.String); method public static final android.renderscript.FileA3D.EntryType[] values(); + enum_constant public static final android.renderscript.FileA3D.EntryType MESH; + enum_constant public static final android.renderscript.FileA3D.EntryType UNKNOWN; } public static class FileA3D.IndexEntry { @@ -16364,6 +16519,10 @@ package android.renderscript { public static final class Font.Style extends java.lang.Enum { method public static android.renderscript.Font.Style valueOf(java.lang.String); method public static final android.renderscript.Font.Style[] values(); + enum_constant public static final android.renderscript.Font.Style BOLD; + enum_constant public static final android.renderscript.Font.Style BOLD_ITALIC; + enum_constant public static final android.renderscript.Font.Style ITALIC; + enum_constant public static final android.renderscript.Font.Style NORMAL; } public class Int2 { @@ -16507,6 +16666,12 @@ package android.renderscript { public static final class Mesh.Primitive extends java.lang.Enum { method public static android.renderscript.Mesh.Primitive valueOf(java.lang.String); method public static final android.renderscript.Mesh.Primitive[] values(); + enum_constant public static final android.renderscript.Mesh.Primitive LINE; + enum_constant public static final android.renderscript.Mesh.Primitive LINE_STRIP; + enum_constant public static final android.renderscript.Mesh.Primitive POINT; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_FAN; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_STRIP; } public static class Mesh.TriangleMeshBuilder { @@ -16543,6 +16708,8 @@ package android.renderscript { public static final class Program.TextureType extends java.lang.Enum { method public static android.renderscript.Program.TextureType valueOf(java.lang.String); method public static final android.renderscript.Program.TextureType[] values(); + enum_constant public static final android.renderscript.Program.TextureType TEXTURE_2D; + enum_constant public static final android.renderscript.Program.TextureType TEXTURE_CUBE; } public class ProgramFragment extends android.renderscript.Program { @@ -16568,11 +16735,18 @@ package android.renderscript { public static final class ProgramFragmentFixedFunction.Builder.EnvMode extends java.lang.Enum { method public static android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode valueOf(java.lang.String); method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode[] values(); + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode DECAL; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode MODULATE; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode REPLACE; } public static final class ProgramFragmentFixedFunction.Builder.Format extends java.lang.Enum { method public static android.renderscript.ProgramFragmentFixedFunction.Builder.Format valueOf(java.lang.String); method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format[] values(); + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format ALPHA; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format LUMINANCE_ALPHA; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGB; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGBA; } public class ProgramRaster extends android.renderscript.BaseObj { @@ -16591,6 +16765,9 @@ package android.renderscript { public static final class ProgramRaster.CullMode extends java.lang.Enum { method public static android.renderscript.ProgramRaster.CullMode valueOf(java.lang.String); method public static final android.renderscript.ProgramRaster.CullMode[] values(); + enum_constant public static final android.renderscript.ProgramRaster.CullMode BACK; + enum_constant public static final android.renderscript.ProgramRaster.CullMode FRONT; + enum_constant public static final android.renderscript.ProgramRaster.CullMode NONE; } public class ProgramStore extends android.renderscript.BaseObj { @@ -16603,11 +16780,28 @@ package android.renderscript { public static final class ProgramStore.BlendDstFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.BlendDstFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.BlendDstFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ZERO; } public static final class ProgramStore.BlendSrcFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.BlendSrcFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.BlendSrcFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA_SATURATE; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ZERO; } public static class ProgramStore.Builder { @@ -16623,6 +16817,13 @@ package android.renderscript { public static final class ProgramStore.DepthFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.DepthFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.DepthFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.DepthFunc ALWAYS; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER_OR_EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS_OR_EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc NOT_EQUAL; } public class ProgramVertex extends android.renderscript.Program { @@ -16698,6 +16899,8 @@ package android.renderscript { public static final class RenderScript.Priority extends java.lang.Enum { method public static android.renderscript.RenderScript.Priority valueOf(java.lang.String); method public static final android.renderscript.RenderScript.Priority[] values(); + enum_constant public static final android.renderscript.RenderScript.Priority LOW; + enum_constant public static final android.renderscript.RenderScript.Priority NORMAL; } public static class RenderScript.RSErrorHandler implements java.lang.Runnable { @@ -16760,6 +16963,12 @@ package android.renderscript { public static final class Sampler.Value extends java.lang.Enum { method public static android.renderscript.Sampler.Value valueOf(java.lang.String); method public static final android.renderscript.Sampler.Value[] values(); + enum_constant public static final android.renderscript.Sampler.Value CLAMP; + enum_constant public static final android.renderscript.Sampler.Value LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST; + enum_constant public static final android.renderscript.Sampler.Value NEAREST; + enum_constant public static final android.renderscript.Sampler.Value WRAP; } public class Script extends android.renderscript.BaseObj { @@ -16839,6 +17048,12 @@ package android.renderscript { public static final class Type.CubemapFace extends java.lang.Enum { method public static android.renderscript.Type.CubemapFace valueOf(java.lang.String); method public static final android.renderscript.Type.CubemapFace[] values(); + 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; } } @@ -17287,6 +17502,11 @@ package android.telephony { public static final class SmsMessage.MessageClass extends java.lang.Enum { method public static android.telephony.SmsMessage.MessageClass valueOf(java.lang.String); method public static final android.telephony.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN; } public static class SmsMessage.SubmitPdu { @@ -17458,6 +17678,11 @@ package android.telephony.gsm { public static final deprecated class SmsMessage.MessageClass extends java.lang.Enum { method public static android.telephony.gsm.SmsMessage.MessageClass valueOf(java.lang.String); method public static final android.telephony.gsm.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN; } public static deprecated class SmsMessage.SubmitPdu { @@ -18292,6 +18517,9 @@ package android.text { public static final class Layout.Alignment extends java.lang.Enum { method public static android.text.Layout.Alignment valueOf(java.lang.String); method public static final android.text.Layout.Alignment[] values(); + enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER; + enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL; + enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE; } public static class Layout.Directions { @@ -18549,6 +18777,10 @@ package android.text { public static final class TextUtils.TruncateAt extends java.lang.Enum { method public static android.text.TextUtils.TruncateAt valueOf(java.lang.String); method public static final android.text.TextUtils.TruncateAt[] values(); + enum_constant public static final android.text.TextUtils.TruncateAt END; + enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE; + enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE; + enum_constant public static final android.text.TextUtils.TruncateAt START; } public abstract interface TextWatcher implements android.text.NoCopySpan { @@ -18934,6 +19166,10 @@ package android.text.method { public static final class TextKeyListener.Capitalize extends java.lang.Enum { method public static android.text.method.TextKeyListener.Capitalize valueOf(java.lang.String); method public static final android.text.method.TextKeyListener.Capitalize[] values(); + enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS; + enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE; + enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES; + enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS; } public class TimeKeyListener extends android.text.method.NumberKeyListener { @@ -19483,6 +19719,16 @@ package android.util { public final class JsonToken extends java.lang.Enum { method public static android.util.JsonToken valueOf(java.lang.String); method public static final android.util.JsonToken[] values(); + enum_constant public static final android.util.JsonToken BEGIN_ARRAY; + enum_constant public static final android.util.JsonToken BEGIN_OBJECT; + enum_constant public static final android.util.JsonToken BOOLEAN; + enum_constant public static final android.util.JsonToken END_ARRAY; + enum_constant public static final android.util.JsonToken END_DOCUMENT; + enum_constant public static final android.util.JsonToken END_OBJECT; + enum_constant public static final android.util.JsonToken NAME; + enum_constant public static final android.util.JsonToken NULL; + enum_constant public static final android.util.JsonToken NUMBER; + enum_constant public static final android.util.JsonToken STRING; } public final class JsonWriter implements java.io.Closeable { @@ -19772,6 +20018,10 @@ package android.util { public static final class Xml.Encoding extends java.lang.Enum { method public static android.util.Xml.Encoding valueOf(java.lang.String); method public static final android.util.Xml.Encoding[] values(); + enum_constant public static final android.util.Xml.Encoding ISO_8859_1; + enum_constant public static final android.util.Xml.Encoding US_ASCII; + enum_constant public static final android.util.Xml.Encoding UTF_16; + enum_constant public static final android.util.Xml.Encoding UTF_8; } } @@ -21424,6 +21674,14 @@ package android.view { public static final class ViewDebug.HierarchyTraceType extends java.lang.Enum { method public static android.view.ViewDebug.HierarchyTraceType valueOf(java.lang.String); method public static final android.view.ViewDebug.HierarchyTraceType[] values(); + enum_constant public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType DRAW; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT; } public static abstract class ViewDebug.IntToString implements java.lang.annotation.Annotation { @@ -21432,6 +21690,12 @@ package android.view { public static final class ViewDebug.RecyclerTraceType extends java.lang.Enum { method public static android.view.ViewDebug.RecyclerTraceType valueOf(java.lang.String); method public static final android.view.ViewDebug.RecyclerTraceType[] values(); + enum_constant public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP; } public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent { @@ -22640,6 +22904,11 @@ package android.webkit { public static final class ConsoleMessage.MessageLevel extends java.lang.Enum { method public static android.webkit.ConsoleMessage.MessageLevel valueOf(java.lang.String); method public static final android.webkit.ConsoleMessage.MessageLevel[] values(); + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING; } public final class CookieManager { @@ -22922,26 +23191,43 @@ package android.webkit { public static final deprecated class WebSettings.LayoutAlgorithm extends java.lang.Enum { method public static android.webkit.WebSettings.LayoutAlgorithm valueOf(java.lang.String); method public static final android.webkit.WebSettings.LayoutAlgorithm[] values(); + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN; } public static final class WebSettings.PluginState extends java.lang.Enum { method public static android.webkit.WebSettings.PluginState valueOf(java.lang.String); method public static final android.webkit.WebSettings.PluginState[] values(); + enum_constant public static final android.webkit.WebSettings.PluginState OFF; + enum_constant public static final android.webkit.WebSettings.PluginState ON; + enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND; } public static final class WebSettings.RenderPriority extends java.lang.Enum { method public static android.webkit.WebSettings.RenderPriority valueOf(java.lang.String); method public static final android.webkit.WebSettings.RenderPriority[] values(); + enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH; + enum_constant public static final android.webkit.WebSettings.RenderPriority LOW; + enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL; } public static final 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; + enum_constant public static final android.webkit.WebSettings.TextSize LARGEST; + enum_constant public static final android.webkit.WebSettings.TextSize NORMAL; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLER; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLEST; } public static final class WebSettings.ZoomDensity extends java.lang.Enum { method public static android.webkit.WebSettings.ZoomDensity valueOf(java.lang.String); method public static final android.webkit.WebSettings.ZoomDensity[] values(); + enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE; + enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR; + enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM; } public final class WebStorage { @@ -24008,6 +24294,14 @@ package android.widget { public static final class ImageView.ScaleType extends java.lang.Enum { method public static android.widget.ImageView.ScaleType valueOf(java.lang.String); method public static final android.widget.ImageView.ScaleType[] values(); + enum_constant public static final android.widget.ImageView.ScaleType CENTER; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE; + enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER; + enum_constant public static final android.widget.ImageView.ScaleType FIT_END; + enum_constant public static final android.widget.ImageView.ScaleType FIT_START; + enum_constant public static final android.widget.ImageView.ScaleType FIT_XY; + enum_constant public static final android.widget.ImageView.ScaleType MATRIX; } public class LinearLayout extends android.view.ViewGroup { @@ -25064,6 +25358,9 @@ package android.widget { public static final class TextView.BufferType extends java.lang.Enum { method public static android.widget.TextView.BufferType valueOf(java.lang.String); method public static final android.widget.TextView.BufferType[] values(); + enum_constant public static final android.widget.TextView.BufferType EDITABLE; + enum_constant public static final android.widget.TextView.BufferType NORMAL; + enum_constant public static final android.widget.TextView.BufferType SPANNABLE; } public static abstract interface TextView.OnEditorActionListener { @@ -28052,6 +28349,12 @@ package java.lang { public static final class Thread.State extends java.lang.Enum { method public static java.lang.Thread.State valueOf(java.lang.String); method public static final java.lang.Thread.State[] values(); + enum_constant public static final java.lang.Thread.State BLOCKED; + enum_constant public static final java.lang.Thread.State NEW; + enum_constant public static final java.lang.Thread.State RUNNABLE; + enum_constant public static final java.lang.Thread.State TERMINATED; + enum_constant public static final java.lang.Thread.State TIMED_WAITING; + enum_constant public static final java.lang.Thread.State WAITING; } public static abstract interface Thread.UncaughtExceptionHandler { @@ -28185,6 +28488,14 @@ package java.lang.annotation { public final class ElementType extends java.lang.Enum { method public static java.lang.annotation.ElementType valueOf(java.lang.String); method public static final java.lang.annotation.ElementType[] values(); + enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE; + enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR; + enum_constant public static final java.lang.annotation.ElementType FIELD; + enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE; + enum_constant public static final java.lang.annotation.ElementType METHOD; + enum_constant public static final java.lang.annotation.ElementType PACKAGE; + enum_constant public static final java.lang.annotation.ElementType PARAMETER; + enum_constant public static final java.lang.annotation.ElementType TYPE; } public class IncompleteAnnotationException extends java.lang.RuntimeException { @@ -28202,6 +28513,9 @@ package java.lang.annotation { public final class RetentionPolicy extends java.lang.Enum { method public static java.lang.annotation.RetentionPolicy valueOf(java.lang.String); method public static final java.lang.annotation.RetentionPolicy[] values(); + enum_constant public static final java.lang.annotation.RetentionPolicy CLASS; + enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME; + enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE; } public abstract class Target implements java.lang.annotation.Annotation { @@ -28615,6 +28929,14 @@ package java.math { method public static java.math.RoundingMode valueOf(java.lang.String); method public static java.math.RoundingMode valueOf(int); method public static final java.math.RoundingMode[] values(); + enum_constant public static final java.math.RoundingMode CEILING; + enum_constant public static final java.math.RoundingMode DOWN; + enum_constant public static final java.math.RoundingMode FLOOR; + enum_constant public static final java.math.RoundingMode HALF_DOWN; + enum_constant public static final java.math.RoundingMode HALF_EVEN; + enum_constant public static final java.math.RoundingMode HALF_UP; + enum_constant public static final java.math.RoundingMode UNNECESSARY; + enum_constant public static final java.math.RoundingMode UP; } } @@ -28641,6 +28963,8 @@ package java.net { public static final class Authenticator.RequestorType extends java.lang.Enum { method public static java.net.Authenticator.RequestorType valueOf(java.lang.String); method public static final java.net.Authenticator.RequestorType[] values(); + enum_constant public static final java.net.Authenticator.RequestorType PROXY; + enum_constant public static final java.net.Authenticator.RequestorType SERVER; } public class BindException extends java.net.SocketException { @@ -29055,6 +29379,9 @@ package java.net { public static final class Proxy.Type extends java.lang.Enum { method public static java.net.Proxy.Type valueOf(java.lang.String); method public static final java.net.Proxy.Type[] values(); + enum_constant public static final java.net.Proxy.Type DIRECT; + enum_constant public static final java.net.Proxy.Type HTTP; + enum_constant public static final java.net.Proxy.Type SOCKS; } public abstract class ProxySelector { @@ -30451,6 +30778,9 @@ package java.security { public static final class KeyRep.Type extends java.lang.Enum { method public static java.security.KeyRep.Type valueOf(java.lang.String); method public static final java.security.KeyRep.Type[] values(); + enum_constant public static final java.security.KeyRep.Type PRIVATE; + enum_constant public static final java.security.KeyRep.Type PUBLIC; + enum_constant public static final java.security.KeyRep.Type SECRET; } public class KeyStore { @@ -31824,6 +32154,10 @@ package java.sql { public final class ClientInfoStatus extends java.lang.Enum { method public static java.sql.ClientInfoStatus valueOf(java.lang.String); method public static final java.sql.ClientInfoStatus[] values(); + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN; + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED; } public abstract interface Clob { @@ -32508,6 +32842,11 @@ package java.sql { public final class RowIdLifetime extends java.lang.Enum { method public static java.sql.RowIdLifetime valueOf(java.lang.String); method public static final java.sql.RowIdLifetime[] values(); + enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION; } public class SQLClientInfoException extends java.sql.SQLException { @@ -33297,6 +33636,10 @@ package java.text { public static final class Normalizer.Form extends java.lang.Enum { method public static java.text.Normalizer.Form valueOf(java.lang.String); method public static final java.text.Normalizer.Form[] values(); + enum_constant public static final java.text.Normalizer.Form NFC; + enum_constant public static final java.text.Normalizer.Form NFD; + enum_constant public static final java.text.Normalizer.Form NFKC; + enum_constant public static final java.text.Normalizer.Form NFKD; } public abstract class NumberFormat extends java.text.Format { @@ -34038,6 +34381,8 @@ package java.util { public static final class Formatter.BigDecimalLayoutForm extends java.lang.Enum { method public static java.util.Formatter.BigDecimalLayoutForm valueOf(java.lang.String); method public static final java.util.Formatter.BigDecimalLayoutForm[] values(); + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT; + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC; } public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable { @@ -35484,6 +35829,13 @@ package java.util.concurrent { method public long toSeconds(long); method public static java.util.concurrent.TimeUnit valueOf(java.lang.String); method public static final java.util.concurrent.TimeUnit[] values(); + enum_constant public static final java.util.concurrent.TimeUnit DAYS; + enum_constant public static final java.util.concurrent.TimeUnit HOURS; + enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MINUTES; + enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit SECONDS; } public class TimeoutException extends java.lang.Exception { @@ -38140,11 +38492,20 @@ package javax.net.ssl { public static final class SSLEngineResult.HandshakeStatus extends java.lang.Enum { method public static javax.net.ssl.SSLEngineResult.HandshakeStatus valueOf(java.lang.String); method public static final javax.net.ssl.SSLEngineResult.HandshakeStatus[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING; } public static final class SSLEngineResult.Status extends java.lang.Enum { method public static javax.net.ssl.SSLEngineResult.Status valueOf(java.lang.String); method public static final javax.net.ssl.SSLEngineResult.Status[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK; } public class SSLException extends java.io.IOException { @@ -40658,11 +41019,15 @@ package org.apache.http.conn.routing { public static final class RouteInfo.LayerType extends java.lang.Enum { method public static org.apache.http.conn.routing.RouteInfo.LayerType valueOf(java.lang.String); method public static final org.apache.http.conn.routing.RouteInfo.LayerType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN; } public static final class RouteInfo.TunnelType extends java.lang.Enum { method public static org.apache.http.conn.routing.RouteInfo.TunnelType valueOf(java.lang.String); method public static final org.apache.http.conn.routing.RouteInfo.TunnelType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED; } public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { diff --git a/api/current.txt b/api/current.txt index 1e16b6ce86c5..932c551157f1 100644 --- a/api/current.txt +++ b/api/current.txt @@ -201,6 +201,7 @@ 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 = 16843641; // 0x1010379 field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6 field public static final int actionViewClass = 16843516; // 0x10102fc field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd @@ -4130,6 +4131,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(); } } @@ -6335,6 +6337,9 @@ package android.database { public static final class CursorJoiner.Result extends java.lang.Enum { method public static android.database.CursorJoiner.Result valueOf(java.lang.String); method public static final android.database.CursorJoiner.Result[] values(); + enum_constant public static final android.database.CursorJoiner.Result BOTH; + enum_constant public static final android.database.CursorJoiner.Result LEFT; + enum_constant public static final android.database.CursorJoiner.Result RIGHT; } public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable { @@ -7253,6 +7258,8 @@ package android.graphics { public static final class AvoidXfermode.Mode extends java.lang.Enum { method public static android.graphics.AvoidXfermode.Mode valueOf(java.lang.String); method public static final android.graphics.AvoidXfermode.Mode[] values(); + enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID; + enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET; } public final class Bitmap implements android.os.Parcelable { @@ -7305,11 +7312,17 @@ package android.graphics { public static final class Bitmap.CompressFormat extends java.lang.Enum { method public static android.graphics.Bitmap.CompressFormat valueOf(java.lang.String); 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; } public static final class Bitmap.Config extends java.lang.Enum { method public static android.graphics.Bitmap.Config valueOf(java.lang.String); method public static final android.graphics.Bitmap.Config[] values(); + enum_constant public static final android.graphics.Bitmap.Config ALPHA_8; + enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; + enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; + enum_constant public static final android.graphics.Bitmap.Config RGB_565; } public class BitmapFactory { @@ -7373,6 +7386,10 @@ package android.graphics { public static final class BlurMaskFilter.Blur extends java.lang.Enum { method public static android.graphics.BlurMaskFilter.Blur valueOf(java.lang.String); method public static final android.graphics.BlurMaskFilter.Blur[] values(); + enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL; + enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER; + enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID; } public class Camera { @@ -7486,11 +7503,16 @@ package android.graphics { public static final class Canvas.EdgeType extends java.lang.Enum { method public static android.graphics.Canvas.EdgeType valueOf(java.lang.String); method public static final android.graphics.Canvas.EdgeType[] values(); + enum_constant public static final android.graphics.Canvas.EdgeType AA; + enum_constant public static final android.graphics.Canvas.EdgeType BW; } public static final class Canvas.VertexMode extends java.lang.Enum { method public static android.graphics.Canvas.VertexMode valueOf(java.lang.String); method public static final android.graphics.Canvas.VertexMode[] values(); + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN; + enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP; } public class Color { @@ -7605,6 +7627,9 @@ package android.graphics { public static final class Interpolator.Result extends java.lang.Enum { method public static android.graphics.Interpolator.Result valueOf(java.lang.String); method public static final android.graphics.Interpolator.Result[] values(); + enum_constant public static final android.graphics.Interpolator.Result FREEZE_END; + enum_constant public static final android.graphics.Interpolator.Result FREEZE_START; + enum_constant public static final android.graphics.Interpolator.Result NORMAL; } public class LayerRasterizer extends android.graphics.Rasterizer { @@ -7688,6 +7713,10 @@ package android.graphics { public static final class Matrix.ScaleToFit extends java.lang.Enum { method public static android.graphics.Matrix.ScaleToFit valueOf(java.lang.String); method public static final android.graphics.Matrix.ScaleToFit[] values(); + enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER; + enum_constant public static final android.graphics.Matrix.ScaleToFit END; + enum_constant public static final android.graphics.Matrix.ScaleToFit FILL; + enum_constant public static final android.graphics.Matrix.ScaleToFit START; } public class Movie { @@ -7817,11 +7846,17 @@ package android.graphics { public static final class Paint.Align extends java.lang.Enum { method public static android.graphics.Paint.Align valueOf(java.lang.String); method public static final android.graphics.Paint.Align[] values(); + enum_constant public static final android.graphics.Paint.Align CENTER; + enum_constant public static final android.graphics.Paint.Align LEFT; + enum_constant public static final android.graphics.Paint.Align RIGHT; } public static final class Paint.Cap extends java.lang.Enum { method public static android.graphics.Paint.Cap valueOf(java.lang.String); method public static final android.graphics.Paint.Cap[] values(); + enum_constant public static final android.graphics.Paint.Cap BUTT; + enum_constant public static final android.graphics.Paint.Cap ROUND; + enum_constant public static final android.graphics.Paint.Cap SQUARE; } public static class Paint.FontMetrics { @@ -7845,11 +7880,17 @@ package android.graphics { public static final class Paint.Join extends java.lang.Enum { method public static android.graphics.Paint.Join valueOf(java.lang.String); method public static final android.graphics.Paint.Join[] values(); + enum_constant public static final android.graphics.Paint.Join BEVEL; + enum_constant public static final android.graphics.Paint.Join MITER; + enum_constant public static final android.graphics.Paint.Join ROUND; } public static final class Paint.Style extends java.lang.Enum { method public static android.graphics.Paint.Style valueOf(java.lang.String); method public static final android.graphics.Paint.Style[] values(); + enum_constant public static final android.graphics.Paint.Style FILL; + enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE; + enum_constant public static final android.graphics.Paint.Style STROKE; } public class PaintFlagsDrawFilter extends android.graphics.DrawFilter { @@ -7901,11 +7942,17 @@ package android.graphics { public static final class Path.Direction extends java.lang.Enum { method public static android.graphics.Path.Direction valueOf(java.lang.String); method public static final android.graphics.Path.Direction[] values(); + enum_constant public static final android.graphics.Path.Direction CCW; + enum_constant public static final android.graphics.Path.Direction CW; } public static final class Path.FillType extends java.lang.Enum { method public static android.graphics.Path.FillType valueOf(java.lang.String); method public static final android.graphics.Path.FillType[] values(); + enum_constant public static final android.graphics.Path.FillType EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD; + enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING; + enum_constant public static final android.graphics.Path.FillType WINDING; } public class PathDashPathEffect extends android.graphics.PathEffect { @@ -7915,6 +7962,9 @@ package android.graphics { public static final class PathDashPathEffect.Style extends java.lang.Enum { method public static android.graphics.PathDashPathEffect.Style valueOf(java.lang.String); method public static final android.graphics.PathDashPathEffect.Style[] values(); + enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH; + enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE; + enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE; } public class PathEffect { @@ -8019,6 +8069,24 @@ package android.graphics { public static final class PorterDuff.Mode extends java.lang.Enum { method public static android.graphics.PorterDuff.Mode valueOf(java.lang.String); method public static final android.graphics.PorterDuff.Mode[] values(); + enum_constant public static final android.graphics.PorterDuff.Mode ADD; + enum_constant public static final android.graphics.PorterDuff.Mode CLEAR; + enum_constant public static final android.graphics.PorterDuff.Mode DARKEN; + enum_constant public static final android.graphics.PorterDuff.Mode DST; + enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode DST_IN; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN; + enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY; + enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY; + enum_constant public static final android.graphics.PorterDuff.Mode SCREEN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT; + enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER; + enum_constant public static final android.graphics.PorterDuff.Mode XOR; } public class PorterDuffColorFilter extends android.graphics.ColorFilter { @@ -8160,6 +8228,12 @@ package android.graphics { public static final class Region.Op extends java.lang.Enum { method public static android.graphics.Region.Op valueOf(java.lang.String); method public static final android.graphics.Region.Op[] values(); + enum_constant public static final android.graphics.Region.Op DIFFERENCE; + enum_constant public static final android.graphics.Region.Op INTERSECT; + enum_constant public static final android.graphics.Region.Op REPLACE; + enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE; + enum_constant public static final android.graphics.Region.Op UNION; + enum_constant public static final android.graphics.Region.Op XOR; } public class RegionIterator { @@ -8176,6 +8250,9 @@ package android.graphics { public static final class Shader.TileMode extends java.lang.Enum { method public static android.graphics.Shader.TileMode valueOf(java.lang.String); method public static final android.graphics.Shader.TileMode[] values(); + enum_constant public static final android.graphics.Shader.TileMode CLAMP; + enum_constant public static final android.graphics.Shader.TileMode MIRROR; + enum_constant public static final android.graphics.Shader.TileMode REPEAT; } public class SumPathEffect extends android.graphics.PathEffect { @@ -8456,6 +8533,14 @@ package android.graphics.drawable { public static final class GradientDrawable.Orientation extends java.lang.Enum { method public static android.graphics.drawable.GradientDrawable.Orientation valueOf(java.lang.String); method public static final android.graphics.drawable.GradientDrawable.Orientation[] values(); + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM; + enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL; } public class InsetDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback { @@ -10918,6 +11003,9 @@ package android.net { public static final class LocalSocketAddress.Namespace extends java.lang.Enum { method public static android.net.LocalSocketAddress.Namespace valueOf(java.lang.String); method public static final android.net.LocalSocketAddress.Namespace[] values(); + enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT; + enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM; + enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED; } public class MailTo { @@ -10952,11 +11040,27 @@ package android.net { public static final class NetworkInfo.DetailedState extends java.lang.Enum { 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 CONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState CONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.DetailedState DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.DetailedState FAILED; + enum_constant public static final android.net.NetworkInfo.DetailedState IDLE; + enum_constant public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR; + enum_constant public static final android.net.NetworkInfo.DetailedState SCANNING; + enum_constant public static final android.net.NetworkInfo.DetailedState SUSPENDED; } public static final class NetworkInfo.State extends java.lang.Enum { method public static android.net.NetworkInfo.State valueOf(java.lang.String); method public static final android.net.NetworkInfo.State[] values(); + enum_constant public static final android.net.NetworkInfo.State CONNECTED; + enum_constant public static final android.net.NetworkInfo.State CONNECTING; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTED; + enum_constant public static final android.net.NetworkInfo.State DISCONNECTING; + enum_constant public static final android.net.NetworkInfo.State SUSPENDED; + enum_constant public static final android.net.NetworkInfo.State UNKNOWN; } public class ParseException extends java.lang.RuntimeException { @@ -11488,6 +11592,17 @@ package android.net.wifi { method public static android.net.wifi.SupplicantState valueOf(java.lang.String); method public static final android.net.wifi.SupplicantState[] values(); 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 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 INVALID; + enum_constant public static final android.net.wifi.SupplicantState SCANNING; + enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED; } public class WifiConfiguration implements android.os.Parcelable { @@ -13316,6 +13431,9 @@ package android.os { public static final class AsyncTask.Status extends java.lang.Enum { method public static android.os.AsyncTask.Status valueOf(java.lang.String); method public static final android.os.AsyncTask.Status[] values(); + enum_constant public static final android.os.AsyncTask.Status FINISHED; + enum_constant public static final android.os.AsyncTask.Status PENDING; + enum_constant public static final android.os.AsyncTask.Status RUNNING; } public class BadParcelableException extends android.util.AndroidRuntimeException { @@ -16304,6 +16422,9 @@ package android.renderscript { public static final class Allocation.MipmapControl extends java.lang.Enum { method public static android.renderscript.Allocation.MipmapControl valueOf(java.lang.String); method public static final android.renderscript.Allocation.MipmapControl[] values(); + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE; + enum_constant public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE; } public class AllocationAdapter extends android.renderscript.Allocation { @@ -16428,11 +16549,45 @@ package android.renderscript { public static final class Element.DataKind extends java.lang.Enum { method public static android.renderscript.Element.DataKind valueOf(java.lang.String); method public static final android.renderscript.Element.DataKind[] values(); + enum_constant public static final android.renderscript.Element.DataKind PIXEL_A; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_DEPTH; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_L; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB; + enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA; + enum_constant public static final android.renderscript.Element.DataKind USER; } public static final class Element.DataType extends java.lang.Enum { method public static android.renderscript.Element.DataType valueOf(java.lang.String); method public static final android.renderscript.Element.DataType[] values(); + enum_constant public static final android.renderscript.Element.DataType BOOLEAN; + enum_constant public static final android.renderscript.Element.DataType FLOAT_32; + enum_constant public static final android.renderscript.Element.DataType FLOAT_64; + enum_constant public static final android.renderscript.Element.DataType MATRIX_2X2; + enum_constant public static final android.renderscript.Element.DataType MATRIX_3X3; + enum_constant public static final android.renderscript.Element.DataType MATRIX_4X4; + enum_constant public static final android.renderscript.Element.DataType RS_ALLOCATION; + enum_constant public static final android.renderscript.Element.DataType RS_ELEMENT; + enum_constant public static final android.renderscript.Element.DataType RS_MESH; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_STORE; + enum_constant public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX; + enum_constant public static final android.renderscript.Element.DataType RS_SAMPLER; + enum_constant public static final android.renderscript.Element.DataType RS_SCRIPT; + enum_constant public static final android.renderscript.Element.DataType RS_TYPE; + enum_constant public static final android.renderscript.Element.DataType SIGNED_16; + enum_constant public static final android.renderscript.Element.DataType SIGNED_32; + enum_constant public static final android.renderscript.Element.DataType SIGNED_64; + enum_constant public static final android.renderscript.Element.DataType SIGNED_8; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_16; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_32; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_5_6_5; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_64; + enum_constant public static final android.renderscript.Element.DataType UNSIGNED_8; } public class FieldPacker { @@ -16492,6 +16647,8 @@ package android.renderscript { public static final class FileA3D.EntryType extends java.lang.Enum { method public static android.renderscript.FileA3D.EntryType valueOf(java.lang.String); method public static final android.renderscript.FileA3D.EntryType[] values(); + enum_constant public static final android.renderscript.FileA3D.EntryType MESH; + enum_constant public static final android.renderscript.FileA3D.EntryType UNKNOWN; } public static class FileA3D.IndexEntry { @@ -16536,6 +16693,10 @@ package android.renderscript { public static final class Font.Style extends java.lang.Enum { method public static android.renderscript.Font.Style valueOf(java.lang.String); method public static final android.renderscript.Font.Style[] values(); + enum_constant public static final android.renderscript.Font.Style BOLD; + enum_constant public static final android.renderscript.Font.Style BOLD_ITALIC; + enum_constant public static final android.renderscript.Font.Style ITALIC; + enum_constant public static final android.renderscript.Font.Style NORMAL; } public class Int2 { @@ -16685,6 +16846,12 @@ package android.renderscript { public static final class Mesh.Primitive extends java.lang.Enum { method public static android.renderscript.Mesh.Primitive valueOf(java.lang.String); method public static final android.renderscript.Mesh.Primitive[] values(); + enum_constant public static final android.renderscript.Mesh.Primitive LINE; + enum_constant public static final android.renderscript.Mesh.Primitive LINE_STRIP; + enum_constant public static final android.renderscript.Mesh.Primitive POINT; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_FAN; + enum_constant public static final android.renderscript.Mesh.Primitive TRIANGLE_STRIP; } public static class Mesh.TriangleMeshBuilder { @@ -16721,6 +16888,8 @@ package android.renderscript { public static final class Program.TextureType extends java.lang.Enum { method public static android.renderscript.Program.TextureType valueOf(java.lang.String); method public static final android.renderscript.Program.TextureType[] values(); + enum_constant public static final android.renderscript.Program.TextureType TEXTURE_2D; + enum_constant public static final android.renderscript.Program.TextureType TEXTURE_CUBE; } public class ProgramFragment extends android.renderscript.Program { @@ -16746,11 +16915,18 @@ package android.renderscript { public static final class ProgramFragmentFixedFunction.Builder.EnvMode extends java.lang.Enum { method public static android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode valueOf(java.lang.String); method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode[] values(); + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode DECAL; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode MODULATE; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode REPLACE; } public static final class ProgramFragmentFixedFunction.Builder.Format extends java.lang.Enum { method public static android.renderscript.ProgramFragmentFixedFunction.Builder.Format valueOf(java.lang.String); method public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format[] values(); + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format ALPHA; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format LUMINANCE_ALPHA; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGB; + enum_constant public static final android.renderscript.ProgramFragmentFixedFunction.Builder.Format RGBA; } public class ProgramRaster extends android.renderscript.BaseObj { @@ -16769,6 +16945,9 @@ package android.renderscript { public static final class ProgramRaster.CullMode extends java.lang.Enum { method public static android.renderscript.ProgramRaster.CullMode valueOf(java.lang.String); method public static final android.renderscript.ProgramRaster.CullMode[] values(); + enum_constant public static final android.renderscript.ProgramRaster.CullMode BACK; + enum_constant public static final android.renderscript.ProgramRaster.CullMode FRONT; + enum_constant public static final android.renderscript.ProgramRaster.CullMode NONE; } public class ProgramStore extends android.renderscript.BaseObj { @@ -16781,11 +16960,28 @@ package android.renderscript { public static final class ProgramStore.BlendDstFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.BlendDstFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.BlendDstFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ONE_MINUS_SRC_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc SRC_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendDstFunc ZERO; } public static final class ProgramStore.BlendSrcFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.BlendSrcFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.BlendSrcFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc DST_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_DST_COLOR; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ONE_MINUS_SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc SRC_ALPHA_SATURATE; + enum_constant public static final android.renderscript.ProgramStore.BlendSrcFunc ZERO; } public static class ProgramStore.Builder { @@ -16801,6 +16997,13 @@ package android.renderscript { public static final class ProgramStore.DepthFunc extends java.lang.Enum { method public static android.renderscript.ProgramStore.DepthFunc valueOf(java.lang.String); method public static final android.renderscript.ProgramStore.DepthFunc[] values(); + enum_constant public static final android.renderscript.ProgramStore.DepthFunc ALWAYS; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc GREATER_OR_EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc LESS_OR_EQUAL; + enum_constant public static final android.renderscript.ProgramStore.DepthFunc NOT_EQUAL; } public class ProgramVertex extends android.renderscript.Program { @@ -16876,6 +17079,8 @@ package android.renderscript { public static final class RenderScript.Priority extends java.lang.Enum { method public static android.renderscript.RenderScript.Priority valueOf(java.lang.String); method public static final android.renderscript.RenderScript.Priority[] values(); + enum_constant public static final android.renderscript.RenderScript.Priority LOW; + enum_constant public static final android.renderscript.RenderScript.Priority NORMAL; } public static class RenderScript.RSErrorHandler implements java.lang.Runnable { @@ -16938,6 +17143,12 @@ package android.renderscript { public static final class Sampler.Value extends java.lang.Enum { method public static android.renderscript.Sampler.Value valueOf(java.lang.String); method public static final android.renderscript.Sampler.Value[] values(); + enum_constant public static final android.renderscript.Sampler.Value CLAMP; + enum_constant public static final android.renderscript.Sampler.Value LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR; + enum_constant public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST; + enum_constant public static final android.renderscript.Sampler.Value NEAREST; + enum_constant public static final android.renderscript.Sampler.Value WRAP; } public class Script extends android.renderscript.BaseObj { @@ -17020,6 +17231,12 @@ package android.renderscript { public static final class Type.CubemapFace extends java.lang.Enum { method public static android.renderscript.Type.CubemapFace valueOf(java.lang.String); method public static final android.renderscript.Type.CubemapFace[] values(); + 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; } } @@ -17508,6 +17725,11 @@ package android.telephony { public static final class SmsMessage.MessageClass extends java.lang.Enum { method public static android.telephony.SmsMessage.MessageClass valueOf(java.lang.String); method public static final android.telephony.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN; } public static class SmsMessage.SubmitPdu { @@ -17679,6 +17901,11 @@ package android.telephony.gsm { public static final deprecated class SmsMessage.MessageClass extends java.lang.Enum { method public static android.telephony.gsm.SmsMessage.MessageClass valueOf(java.lang.String); method public static final android.telephony.gsm.SmsMessage.MessageClass[] values(); + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3; + enum_constant public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN; } public static deprecated class SmsMessage.SubmitPdu { @@ -18513,6 +18740,9 @@ package android.text { public static final class Layout.Alignment extends java.lang.Enum { method public static android.text.Layout.Alignment valueOf(java.lang.String); method public static final android.text.Layout.Alignment[] values(); + enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER; + enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL; + enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE; } public static class Layout.Directions { @@ -18770,6 +19000,10 @@ package android.text { public static final class TextUtils.TruncateAt extends java.lang.Enum { method public static android.text.TextUtils.TruncateAt valueOf(java.lang.String); method public static final android.text.TextUtils.TruncateAt[] values(); + enum_constant public static final android.text.TextUtils.TruncateAt END; + enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE; + enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE; + enum_constant public static final android.text.TextUtils.TruncateAt START; } public abstract interface TextWatcher implements android.text.NoCopySpan { @@ -19155,6 +19389,10 @@ package android.text.method { public static final class TextKeyListener.Capitalize extends java.lang.Enum { method public static android.text.method.TextKeyListener.Capitalize valueOf(java.lang.String); method public static final android.text.method.TextKeyListener.Capitalize[] values(); + enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS; + enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE; + enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES; + enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS; } public class TimeKeyListener extends android.text.method.NumberKeyListener { @@ -19724,6 +19962,16 @@ package android.util { public final class JsonToken extends java.lang.Enum { method public static android.util.JsonToken valueOf(java.lang.String); method public static final android.util.JsonToken[] values(); + enum_constant public static final android.util.JsonToken BEGIN_ARRAY; + enum_constant public static final android.util.JsonToken BEGIN_OBJECT; + enum_constant public static final android.util.JsonToken BOOLEAN; + enum_constant public static final android.util.JsonToken END_ARRAY; + enum_constant public static final android.util.JsonToken END_DOCUMENT; + enum_constant public static final android.util.JsonToken END_OBJECT; + enum_constant public static final android.util.JsonToken NAME; + enum_constant public static final android.util.JsonToken NULL; + enum_constant public static final android.util.JsonToken NUMBER; + enum_constant public static final android.util.JsonToken STRING; } public final class JsonWriter implements java.io.Closeable { @@ -20013,6 +20261,10 @@ package android.util { public static final class Xml.Encoding extends java.lang.Enum { method public static android.util.Xml.Encoding valueOf(java.lang.String); method public static final android.util.Xml.Encoding[] values(); + enum_constant public static final android.util.Xml.Encoding ISO_8859_1; + enum_constant public static final android.util.Xml.Encoding US_ASCII; + enum_constant public static final android.util.Xml.Encoding UTF_16; + enum_constant public static final android.util.Xml.Encoding UTF_8; } } @@ -21731,6 +21983,14 @@ package android.view { public static final class ViewDebug.HierarchyTraceType extends java.lang.Enum { method public static android.view.ViewDebug.HierarchyTraceType valueOf(java.lang.String); method public static final android.view.ViewDebug.HierarchyTraceType[] values(); + enum_constant public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType DRAW; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE; + enum_constant public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT; } public static abstract class ViewDebug.IntToString implements java.lang.annotation.Annotation { @@ -21739,6 +21999,12 @@ package android.view { public static final class ViewDebug.RecyclerTraceType extends java.lang.Enum { method public static android.view.ViewDebug.RecyclerTraceType valueOf(java.lang.String); method public static final android.view.ViewDebug.RecyclerTraceType[] values(); + enum_constant public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP; + enum_constant public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP; } public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent { @@ -22966,6 +23232,11 @@ package android.webkit { public static final class ConsoleMessage.MessageLevel extends java.lang.Enum { method public static android.webkit.ConsoleMessage.MessageLevel valueOf(java.lang.String); method public static final android.webkit.ConsoleMessage.MessageLevel[] values(); + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP; + enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING; } public final class CookieManager { @@ -23248,26 +23519,43 @@ package android.webkit { public static final deprecated class WebSettings.LayoutAlgorithm extends java.lang.Enum { method public static android.webkit.WebSettings.LayoutAlgorithm valueOf(java.lang.String); method public static final android.webkit.WebSettings.LayoutAlgorithm[] values(); + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL; + enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN; } public static final class WebSettings.PluginState extends java.lang.Enum { method public static android.webkit.WebSettings.PluginState valueOf(java.lang.String); method public static final android.webkit.WebSettings.PluginState[] values(); + enum_constant public static final android.webkit.WebSettings.PluginState OFF; + enum_constant public static final android.webkit.WebSettings.PluginState ON; + enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND; } public static final class WebSettings.RenderPriority extends java.lang.Enum { method public static android.webkit.WebSettings.RenderPriority valueOf(java.lang.String); method public static final android.webkit.WebSettings.RenderPriority[] values(); + enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH; + enum_constant public static final android.webkit.WebSettings.RenderPriority LOW; + enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL; } public static final 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; + enum_constant public static final android.webkit.WebSettings.TextSize LARGEST; + enum_constant public static final android.webkit.WebSettings.TextSize NORMAL; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLER; + enum_constant public static final android.webkit.WebSettings.TextSize SMALLEST; } public static final class WebSettings.ZoomDensity extends java.lang.Enum { method public static android.webkit.WebSettings.ZoomDensity valueOf(java.lang.String); method public static final android.webkit.WebSettings.ZoomDensity[] values(); + enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE; + enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR; + enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM; } public final class WebStorage { @@ -24397,6 +24685,14 @@ package android.widget { public static final class ImageView.ScaleType extends java.lang.Enum { method public static android.widget.ImageView.ScaleType valueOf(java.lang.String); method public static final android.widget.ImageView.ScaleType[] values(); + enum_constant public static final android.widget.ImageView.ScaleType CENTER; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP; + enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE; + enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER; + enum_constant public static final android.widget.ImageView.ScaleType FIT_END; + enum_constant public static final android.widget.ImageView.ScaleType FIT_START; + enum_constant public static final android.widget.ImageView.ScaleType FIT_XY; + enum_constant public static final android.widget.ImageView.ScaleType MATRIX; } public class LinearLayout extends android.view.ViewGroup { @@ -25466,6 +25762,9 @@ package android.widget { public static final class TextView.BufferType extends java.lang.Enum { method public static android.widget.TextView.BufferType valueOf(java.lang.String); method public static final android.widget.TextView.BufferType[] values(); + enum_constant public static final android.widget.TextView.BufferType EDITABLE; + enum_constant public static final android.widget.TextView.BufferType NORMAL; + enum_constant public static final android.widget.TextView.BufferType SPANNABLE; } public static abstract interface TextView.OnEditorActionListener { @@ -28457,6 +28756,12 @@ package java.lang { public static final class Thread.State extends java.lang.Enum { method public static java.lang.Thread.State valueOf(java.lang.String); method public static final java.lang.Thread.State[] values(); + enum_constant public static final java.lang.Thread.State BLOCKED; + enum_constant public static final java.lang.Thread.State NEW; + enum_constant public static final java.lang.Thread.State RUNNABLE; + enum_constant public static final java.lang.Thread.State TERMINATED; + enum_constant public static final java.lang.Thread.State TIMED_WAITING; + enum_constant public static final java.lang.Thread.State WAITING; } public static abstract interface Thread.UncaughtExceptionHandler { @@ -28590,6 +28895,14 @@ package java.lang.annotation { public final class ElementType extends java.lang.Enum { method public static java.lang.annotation.ElementType valueOf(java.lang.String); method public static final java.lang.annotation.ElementType[] values(); + enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE; + enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR; + enum_constant public static final java.lang.annotation.ElementType FIELD; + enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE; + enum_constant public static final java.lang.annotation.ElementType METHOD; + enum_constant public static final java.lang.annotation.ElementType PACKAGE; + enum_constant public static final java.lang.annotation.ElementType PARAMETER; + enum_constant public static final java.lang.annotation.ElementType TYPE; } public class IncompleteAnnotationException extends java.lang.RuntimeException { @@ -28607,6 +28920,9 @@ package java.lang.annotation { public final class RetentionPolicy extends java.lang.Enum { method public static java.lang.annotation.RetentionPolicy valueOf(java.lang.String); method public static final java.lang.annotation.RetentionPolicy[] values(); + enum_constant public static final java.lang.annotation.RetentionPolicy CLASS; + enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME; + enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE; } public abstract class Target implements java.lang.annotation.Annotation { @@ -29023,6 +29339,14 @@ package java.math { method public static java.math.RoundingMode valueOf(java.lang.String); method public static java.math.RoundingMode valueOf(int); method public static final java.math.RoundingMode[] values(); + enum_constant public static final java.math.RoundingMode CEILING; + enum_constant public static final java.math.RoundingMode DOWN; + enum_constant public static final java.math.RoundingMode FLOOR; + enum_constant public static final java.math.RoundingMode HALF_DOWN; + enum_constant public static final java.math.RoundingMode HALF_EVEN; + enum_constant public static final java.math.RoundingMode HALF_UP; + enum_constant public static final java.math.RoundingMode UNNECESSARY; + enum_constant public static final java.math.RoundingMode UP; } } @@ -29049,6 +29373,8 @@ package java.net { public static final class Authenticator.RequestorType extends java.lang.Enum { method public static java.net.Authenticator.RequestorType valueOf(java.lang.String); method public static final java.net.Authenticator.RequestorType[] values(); + enum_constant public static final java.net.Authenticator.RequestorType PROXY; + enum_constant public static final java.net.Authenticator.RequestorType SERVER; } public class BindException extends java.net.SocketException { @@ -29463,6 +29789,9 @@ package java.net { public static final class Proxy.Type extends java.lang.Enum { method public static java.net.Proxy.Type valueOf(java.lang.String); method public static final java.net.Proxy.Type[] values(); + enum_constant public static final java.net.Proxy.Type DIRECT; + enum_constant public static final java.net.Proxy.Type HTTP; + enum_constant public static final java.net.Proxy.Type SOCKS; } public abstract class ProxySelector { @@ -30859,6 +31188,9 @@ package java.security { public static final class KeyRep.Type extends java.lang.Enum { method public static java.security.KeyRep.Type valueOf(java.lang.String); method public static final java.security.KeyRep.Type[] values(); + enum_constant public static final java.security.KeyRep.Type PRIVATE; + enum_constant public static final java.security.KeyRep.Type PUBLIC; + enum_constant public static final java.security.KeyRep.Type SECRET; } public class KeyStore { @@ -32232,6 +32564,10 @@ package java.sql { public final class ClientInfoStatus extends java.lang.Enum { method public static java.sql.ClientInfoStatus valueOf(java.lang.String); method public static final java.sql.ClientInfoStatus[] values(); + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN; + enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID; + enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED; } public abstract interface Clob { @@ -32916,6 +33252,11 @@ package java.sql { public final class RowIdLifetime extends java.lang.Enum { method public static java.sql.RowIdLifetime valueOf(java.lang.String); method public static final java.sql.RowIdLifetime[] values(); + enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION; + enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION; } public class SQLClientInfoException extends java.sql.SQLException { @@ -33705,6 +34046,10 @@ package java.text { public static final class Normalizer.Form extends java.lang.Enum { method public static java.text.Normalizer.Form valueOf(java.lang.String); method public static final java.text.Normalizer.Form[] values(); + enum_constant public static final java.text.Normalizer.Form NFC; + enum_constant public static final java.text.Normalizer.Form NFD; + enum_constant public static final java.text.Normalizer.Form NFKC; + enum_constant public static final java.text.Normalizer.Form NFKD; } public abstract class NumberFormat extends java.text.Format { @@ -34446,6 +34791,8 @@ package java.util { public static final class Formatter.BigDecimalLayoutForm extends java.lang.Enum { method public static java.util.Formatter.BigDecimalLayoutForm valueOf(java.lang.String); method public static final java.util.Formatter.BigDecimalLayoutForm[] values(); + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT; + enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC; } public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable { @@ -35892,6 +36239,13 @@ package java.util.concurrent { method public long toSeconds(long); method public static java.util.concurrent.TimeUnit valueOf(java.lang.String); method public static final java.util.concurrent.TimeUnit[] values(); + enum_constant public static final java.util.concurrent.TimeUnit DAYS; + enum_constant public static final java.util.concurrent.TimeUnit HOURS; + enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS; + enum_constant public static final java.util.concurrent.TimeUnit MINUTES; + enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS; + enum_constant public static final java.util.concurrent.TimeUnit SECONDS; } public class TimeoutException extends java.lang.Exception { @@ -38548,11 +38902,20 @@ package javax.net.ssl { public static final class SSLEngineResult.HandshakeStatus extends java.lang.Enum { method public static javax.net.ssl.SSLEngineResult.HandshakeStatus valueOf(java.lang.String); method public static final javax.net.ssl.SSLEngineResult.HandshakeStatus[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP; + enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING; } public static final class SSLEngineResult.Status extends java.lang.Enum { method public static javax.net.ssl.SSLEngineResult.Status valueOf(java.lang.String); method public static final javax.net.ssl.SSLEngineResult.Status[] values(); + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED; + enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK; } public class SSLException extends java.io.IOException { @@ -41066,11 +41429,15 @@ package org.apache.http.conn.routing { public static final class RouteInfo.LayerType extends java.lang.Enum { method public static org.apache.http.conn.routing.RouteInfo.LayerType valueOf(java.lang.String); method public static final org.apache.http.conn.routing.RouteInfo.LayerType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN; } public static final class RouteInfo.TunnelType extends java.lang.Enum { method public static org.apache.http.conn.routing.RouteInfo.TunnelType valueOf(java.lang.String); method public static final org.apache.http.conn.routing.RouteInfo.TunnelType[] values(); + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN; + enum_constant public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED; } public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo { diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index ef2e54a925d8..a6658cc461f6 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -138,6 +138,25 @@ public class ActivityManager { } } + /** @hide */ + public boolean getPackageAskScreenCompat(String packageName) { + try { + return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName); + } catch (RemoteException e) { + // System dead, we will be dead too soon! + return false; + } + } + + /** @hide */ + public void setPackageAskScreenCompat(String packageName, boolean ask) { + try { + ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask); + } catch (RemoteException e) { + // System dead, we will be dead too soon! + } + } + /** * Return the approximate per-application memory class of the current * device. This gives you an idea of how hard a memory limit you should diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 2a0d79866db3..85f40c92963a 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1483,6 +1483,26 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION: + { + data.enforceInterface(IActivityManager.descriptor); + String pkg = data.readString(); + boolean ask = getPackageAskScreenCompat(pkg); + reply.writeNoException(); + reply.writeInt(ask ? 1 : 0); + return true; + } + + case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION: + { + data.enforceInterface(IActivityManager.descriptor); + String pkg = data.readString(); + boolean ask = data.readInt() != 0; + setPackageAskScreenCompat(pkg, ask); + reply.writeNoException(); + return true; + } + } return super.onTransact(code, data, reply, flags); @@ -3254,7 +3274,8 @@ class ActivityManagerProxy implements IActivityManager Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); - mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0); + data.writeString(packageName); + mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0); reply.readException(); int mode = reply.readInt(); reply.recycle(); @@ -3275,6 +3296,32 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); } + public boolean getPackageAskScreenCompat(String packageName) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(packageName); + mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0); + reply.readException(); + boolean ask = reply.readInt() != 0; + reply.recycle(); + data.recycle(); + return ask; + } + + public void setPackageAskScreenCompat(String packageName, boolean ask) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(packageName); + data.writeInt(ask ? 1 : 0); + mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0); + reply.readException(); + reply.recycle(); + data.recycle(); + } + public boolean switchUser(int userid) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 1f53c0e36070..e2588cfb5eb1 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -347,6 +347,9 @@ public interface IActivityManager extends IInterface { public int getPackageScreenCompatMode(String packageName) throws RemoteException; public void setPackageScreenCompatMode(String packageName, int mode) throws RemoteException; + public boolean getPackageAskScreenCompat(String packageName) throws RemoteException; + public void setPackageAskScreenCompat(String packageName, boolean ask) + throws RemoteException; // Multi-user APIs public boolean switchUser(int userid) throws RemoteException; @@ -577,9 +580,11 @@ public interface IActivityManager extends IInterface { int SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+124; int GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+125; int SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+126; - int SWITCH_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+127; - int REMOVE_SUB_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+128; - int REMOVE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+129; - int REGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+130; - int UNREGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+131; + int GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+127; + int SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+128; + int SWITCH_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+129; + int REMOVE_SUB_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+130; + int REMOVE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+131; + int REGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+132; + int UNREGISTER_PROCESS_OBSERVER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+133; } diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java index 719d730770d2..9a13c3eb070e 100644 --- a/core/java/android/bluetooth/BluetoothSocket.java +++ b/core/java/android/bluetooth/BluetoothSocket.java @@ -94,10 +94,16 @@ public final class BluetoothSocket implements Closeable { private int mPort; /* RFCOMM channel or L2CAP psm */ + private enum SocketState { + INIT, + CONNECTED, + CLOSED + } + /** prevents all native calls after destroyNative() */ - private boolean mClosed; + private SocketState mSocketState; - /** protects mClosed */ + /** protects mSocketState */ private final ReentrantReadWriteLock mLock; /** used by native code only */ @@ -145,7 +151,7 @@ public final class BluetoothSocket implements Closeable { } mInputStream = new BluetoothInputStream(this); mOutputStream = new BluetoothOutputStream(this); - mClosed = false; + mSocketState = SocketState.INIT; mLock = new ReentrantReadWriteLock(); } @@ -195,13 +201,14 @@ public final class BluetoothSocket implements Closeable { public void connect() throws IOException { mLock.readLock().lock(); try { - if (mClosed) throw new IOException("socket closed"); + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); if (mSdp != null) { mPort = mSdp.doSdp(); // blocks } connectNative(); // blocks + mSocketState = SocketState.CONNECTED; } finally { mLock.readLock().unlock(); } @@ -216,7 +223,7 @@ public final class BluetoothSocket implements Closeable { // abort blocking operations on the socket mLock.readLock().lock(); try { - if (mClosed) return; + if (mSocketState == SocketState.CLOSED) return; if (mSdp != null) { mSdp.cancel(); } @@ -229,7 +236,7 @@ public final class BluetoothSocket implements Closeable { // abortNative(), so this lock should immediately acquire mLock.writeLock().lock(); try { - mClosed = true; + mSocketState = SocketState.CLOSED; destroyNative(); } finally { mLock.writeLock().unlock(); @@ -267,13 +274,23 @@ public final class BluetoothSocket implements Closeable { } /** + * Get the connection status of this socket, ie, whether there is an active connection with + * remote device. + * @return true if connected + * false if not connected + */ + public boolean isConnected() { + return (mSocketState == SocketState.CONNECTED); + } + + /** * Currently returns unix errno instead of throwing IOException, * so that BluetoothAdapter can check the error code for EADDRINUSE */ /*package*/ int bindListen() { mLock.readLock().lock(); try { - if (mClosed) return EBADFD; + if (mSocketState == SocketState.CLOSED) return EBADFD; return bindListenNative(); } finally { mLock.readLock().unlock(); @@ -283,8 +300,11 @@ public final class BluetoothSocket implements Closeable { /*package*/ BluetoothSocket accept(int timeout) throws IOException { mLock.readLock().lock(); try { - if (mClosed) throw new IOException("socket closed"); - return acceptNative(timeout); + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); + + BluetoothSocket acceptedSocket = acceptNative(timeout); + mSocketState = SocketState.CONNECTED; + return acceptedSocket; } finally { mLock.readLock().unlock(); } @@ -293,7 +313,7 @@ public final class BluetoothSocket implements Closeable { /*package*/ int available() throws IOException { mLock.readLock().lock(); try { - if (mClosed) throw new IOException("socket closed"); + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); return availableNative(); } finally { mLock.readLock().unlock(); @@ -303,7 +323,7 @@ public final class BluetoothSocket implements Closeable { /*package*/ int read(byte[] b, int offset, int length) throws IOException { mLock.readLock().lock(); try { - if (mClosed) throw new IOException("socket closed"); + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); return readNative(b, offset, length); } finally { mLock.readLock().unlock(); @@ -313,7 +333,7 @@ public final class BluetoothSocket implements Closeable { /*package*/ int write(byte[] b, int offset, int length) throws IOException { mLock.readLock().lock(); try { - if (mClosed) throw new IOException("socket closed"); + if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed"); return writeNative(b, offset, length); } finally { mLock.readLock().unlock(); diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index 854d41092192..dca53a8e2d49 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -113,8 +113,13 @@ public class CompatibilityInfo implements Parcelable { public CompatibilityInfo(ApplicationInfo appInfo, int screenLayout, boolean forceCompat) { int compatFlags = 0; + // We can't rely on the application always setting + // FLAG_RESIZEABLE_FOR_SCREENS so will compute it based on various input. + boolean anyResizeable = false; + if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) { compatFlags |= LARGE_SCREENS; + anyResizeable = true; if (!forceCompat) { // If we aren't forcing the app into compatibility mode, then // assume if it supports large screens that we should allow it @@ -123,9 +128,13 @@ public class CompatibilityInfo implements Parcelable { } } if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_XLARGE_SCREENS) != 0) { - compatFlags |= XLARGE_SCREENS | EXPANDABLE; + anyResizeable = true; + if (!forceCompat) { + compatFlags |= XLARGE_SCREENS | EXPANDABLE; + } } if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) { + anyResizeable = true; compatFlags |= EXPANDABLE; } @@ -160,7 +169,7 @@ public class CompatibilityInfo implements Parcelable { if ((screenLayout&Configuration.SCREENLAYOUT_COMPAT_NEEDED) != 0) { if ((compatFlags&EXPANDABLE) != 0) { supportsScreen = true; - } else if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) == 0) { + } else if (!anyResizeable) { compatFlags |= ALWAYS_COMPAT; } } diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java index 9a2f2bd5124b..c4b771878ce2 100644 --- a/core/java/android/nfc/tech/MifareClassic.java +++ b/core/java/android/nfc/tech/MifareClassic.java @@ -82,12 +82,12 @@ public final class MifareClassic extends BasicTagTechnology { {(byte)0xA0,(byte)0xA1,(byte)0xA2,(byte)0xA3,(byte)0xA4,(byte)0xA5}; /** * The well-known key for tags formatted according to the - * NDEF on Mifare Classic specification. + * NDEF on MIFARE Classic specification. */ public static final byte[] KEY_NFC_FORUM = {(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7}; - /** A Mifare Classic compatible card of unknown type */ + /** A MIFARE Classic compatible card of unknown type */ public static final int TYPE_UNKNOWN = -1; /** A MIFARE Classic tag */ public static final int TYPE_CLASSIC = 0; @@ -141,7 +141,7 @@ public final class MifareClassic extends BasicTagTechnology { public MifareClassic(Tag tag) throws RemoteException { super(tag, TagTechnology.MIFARE_CLASSIC); - NfcA a = NfcA.get(tag); // Mifare Classic is always based on NFC a + NfcA a = NfcA.get(tag); // MIFARE Classic is always based on NFC a mIsEmulated = false; @@ -192,7 +192,7 @@ public final class MifareClassic extends BasicTagTechnology { // Stack incorrectly reported a MifareClassic. We cannot handle this // gracefully - we have no idea of the memory layout. Bail. throw new RuntimeException( - "Tag incorrectly enumerated as Mifare Classic, SAK = " + a.getSak()); + "Tag incorrectly enumerated as MIFARE Classic, SAK = " + a.getSak()); } } @@ -221,8 +221,8 @@ public final class MifareClassic extends BasicTagTechnology { /** * Return true if the tag is emulated, determined at discovery time. - * These are actually smart-cards that emulate a Mifare Classic interface. - * They can be treated identically to a Mifare Classic tag. + * These are actually smart-cards that emulate a MIFARE Classic interface. + * They can be treated identically to a MIFARE Classic tag. * @hide */ public boolean isEmulated() { @@ -571,8 +571,8 @@ public final class MifareClassic extends BasicTagTechnology { private static void validateSector(int sector) { // Do not be too strict on upper bounds checking, since some cards // have more addressable memory than they report. For example, - // Mifare Plus 2k cards will appear as Mifare Classic 1k cards when in - // Mifare Classic compatibility mode. + // MIFARE Plus 2k cards will appear as MIFARE Classic 1k cards when in + // MIFARE Classic compatibility mode. // Note that issuing a command to an out-of-bounds block is safe - the // tag should report error causing IOException. This validation is a // helper to guard against obvious programming mistakes. diff --git a/core/java/android/nfc/tech/MifareUltralight.java b/core/java/android/nfc/tech/MifareUltralight.java index 42c2e3e60006..6c2754bcc05d 100644 --- a/core/java/android/nfc/tech/MifareUltralight.java +++ b/core/java/android/nfc/tech/MifareUltralight.java @@ -99,7 +99,7 @@ public final class MifareUltralight extends BasicTagTechnology { public MifareUltralight(Tag tag) throws RemoteException { super(tag, TagTechnology.MIFARE_ULTRALIGHT); - // Check if this could actually be a Mifare + // Check if this could actually be a MIFARE NfcA a = NfcA.get(tag); mType = TYPE_UNKNOWN; diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index f56f6a9937ac..eb0cf37f159c 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -20,6 +20,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -226,4 +227,20 @@ public class FileUtils input.close(); } } + + /** + * Writes string to file. Basically same as "echo -n $string > $filename" + * + * @param filename + * @param string + * @throws IOException + */ + public static void stringToFile(String filename, String string) throws IOException { + FileWriter out = new FileWriter(filename); + try { + out.write(string); + } finally { + out.close(); + } + } } diff --git a/core/java/android/provider/Calendar.java b/core/java/android/provider/Calendar.java index 20614dc8715e..0ef38bf405d6 100644 --- a/core/java/android/provider/Calendar.java +++ b/core/java/android/provider/Calendar.java @@ -89,17 +89,17 @@ public final class Calendar { protected interface BaseSyncColumns { /** Generic column for use by sync adapters. */ - public static final String SYNC1 = "sync1"; + public static final String CAL_SYNC1 = "cal_sync1"; /** Generic column for use by sync adapters. */ - public static final String SYNC2 = "sync2"; + public static final String CAL_SYNC2 = "cal_sync2"; /** Generic column for use by sync adapters. */ - public static final String SYNC3 = "sync3"; + public static final String CAL_SYNC3 = "cal_sync3"; /** Generic column for use by sync adapters. */ - public static final String SYNC4 = "sync4"; + public static final String CAL_SYNC4 = "cal_sync4"; /** Generic column for use by sync adapters. */ - public static final String SYNC5 = "sync5"; + public static final String CAL_SYNC5 = "cal_sync5"; /** Generic column for use by sync adapters. */ - public static final String SYNC6 = "sync6"; + public static final String CAL_SYNC6 = "cal_sync6"; } /** @@ -264,12 +264,12 @@ public final class Calendar { DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_TIME); DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC1); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC2); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC3); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC4); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC5); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.SYNC6); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC1); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC2); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC3); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC4); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC5); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.CAL_SYNC6); DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Calendars.NAME); DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, @@ -453,12 +453,11 @@ public final class Calendar { CALENDAR_TIMEZONE, ACCESS_LEVEL, DELETED, - SYNC1, - SYNC2, - SYNC3, - SYNC4, - SYNC5, - SYNC6, + CAL_SYNC1, + CAL_SYNC2, + CAL_SYNC3, + CAL_SYNC4, + CAL_SYNC5, CAL_SYNC6, SYNC_STATE, }; } @@ -923,7 +922,12 @@ public final class Calendar { DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY); DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_VERSION); DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, EventsColumns.DELETED); - DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC1); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC3); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC4); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC5); + DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC6); DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, Events.SYNC_DATA1); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 9ec3a262939c..5886c64ecbb7 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4144,10 +4144,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @Override public boolean isLayoutRtl(Drawable who) { if (who == null) return false; - final TextView.Drawables drawables = mDrawables; - if (who == drawables.mDrawableLeft || who == drawables.mDrawableRight || - who == drawables.mDrawableTop || who == drawables.mDrawableBottom) { - return isLayoutRtl(); + if (mDrawables != null) { + final Drawables drawables = mDrawables; + if (who == drawables.mDrawableLeft || who == drawables.mDrawableRight || + who == drawables.mDrawableTop || who == drawables.mDrawableBottom) { + return isLayoutRtl(); + } } return super.isLayoutRtl(who); } @@ -8785,10 +8787,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener public boolean onCreateActionMode(ActionMode mode, Menu menu) { TypedArray styledAttributes = mContext.obtainStyledAttributes(R.styleable.Theme); - mode.setTitle(mContext.getString(com.android.internal.R.string.textSelectionCABTitle)); + boolean allowText = getContext().getResources().getBoolean( + com.android.internal.R.bool.allow_action_menu_item_text_with_icon); + + mode.setTitle(allowText ? + mContext.getString(com.android.internal.R.string.textSelectionCABTitle) : null); mode.setSubtitle(null); + int selectAllIconId = 0; // No icon by default + if (!allowText) { + // Provide an icon, text will not be displayed on smaller screens. + selectAllIconId = styledAttributes.getResourceId( + R.styleable.Theme_actionModeSelectAllDrawable, 0); + } + menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll). + setIcon(selectAllIconId). setAlphabeticShortcut('a'). setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java index beacf75b9895..479788d39d0a 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java @@ -18,6 +18,7 @@ package com.android.internal.view.menu; import android.content.Context; import android.graphics.drawable.Drawable; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.Button; @@ -103,6 +104,12 @@ public class ActionMenuItemView extends LinearLayout // TODO Support checkable action items } + private void updateTextButtonVisibility() { + boolean visible = !TextUtils.isEmpty(mTextButton.getText()); + visible = visible && (mImageButton.getDrawable() == null || mItemData.showsTextAsAction()); + mTextButton.setVisibility(visible ? VISIBLE : GONE); + } + public void setIcon(Drawable icon) { mImageButton.setImageDrawable(icon); if (icon != null) { @@ -111,9 +118,9 @@ public class ActionMenuItemView extends LinearLayout mImageButton.setVisibility(GONE); } - mTextButton.setVisibility(icon == null || mItemData.showsTextAsAction() ? VISIBLE : GONE); + updateTextButtonVisibility(); } - + public boolean hasText() { return mTextButton.getVisibility() != GONE; } @@ -128,10 +135,9 @@ public class ActionMenuItemView extends LinearLayout // populate accessibility description with title setContentDescription(title); - if (mImageButton.getDrawable() == null || mItemData.showsTextAsAction()) { - mTextButton.setText(mTitle); - mTextButton.setVisibility(VISIBLE); - } + mTextButton.setText(mTitle); + + updateTextButtonVisibility(); } public boolean showsIcon() { diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java index c82323eedb13..deed1c5e76d5 100644 --- a/core/java/com/android/internal/widget/ActionBarContextView.java +++ b/core/java/com/android/internal/widget/ActionBarContextView.java @@ -15,26 +15,26 @@ */ package com.android.internal.widget; -import com.android.internal.R; -import com.android.internal.view.menu.ActionMenuPresenter; -import com.android.internal.view.menu.ActionMenuView; -import com.android.internal.view.menu.MenuBuilder; - import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.TypedArray; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup.LayoutParams; import android.view.animation.DecelerateInterpolator; import android.widget.LinearLayout; import android.widget.TextView; +import com.android.internal.R; +import com.android.internal.view.menu.ActionMenuPresenter; +import com.android.internal.view.menu.ActionMenuView; +import com.android.internal.view.menu.MenuBuilder; + /** * @hide */ @@ -130,27 +130,24 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi mTitleLayout = (LinearLayout) getChildAt(getChildCount() - 1); mTitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_title); mSubtitleView = (TextView) mTitleLayout.findViewById(R.id.action_bar_subtitle); - if (mTitle != null) { - mTitleView.setText(mTitle); - if (mTitleStyleRes != 0) { - mTitleView.setTextAppearance(mContext, mTitleStyleRes); - } + if (mTitleStyleRes != 0) { + mTitleView.setTextAppearance(mContext, mTitleStyleRes); } - if (mSubtitle != null) { - mSubtitleView.setText(mSubtitle); - if (mSubtitleStyleRes != 0) { - mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes); - } - mSubtitleView.setVisibility(VISIBLE); - } - } else { - mTitleView.setText(mTitle); - mSubtitleView.setText(mSubtitle); - mSubtitleView.setVisibility(mSubtitle != null ? VISIBLE : GONE); - if (mTitleLayout.getParent() == null) { - addView(mTitleLayout); + if (mSubtitleStyleRes != 0) { + mSubtitleView.setTextAppearance(mContext, mSubtitleStyleRes); } } + + mTitleView.setText(mTitle); + mSubtitleView.setText(mSubtitle); + + final boolean hasTitle = !TextUtils.isEmpty(mTitle); + final boolean hasSubtitle = !TextUtils.isEmpty(mSubtitle); + mSubtitleView.setVisibility(hasSubtitle ? VISIBLE : GONE); + mTitleLayout.setVisibility(hasTitle || hasSubtitle ? VISIBLE : GONE); + if (mTitleLayout.getParent() == null) { + addView(mTitleLayout); + } } public void initForMode(final ActionMode mode) { @@ -228,6 +225,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi mAnimateInOnLayout = false; } + @Override public boolean showOverflowMenu() { if (mMenuPresenter != null) { return mMenuPresenter.showOverflowMenu(); @@ -235,6 +233,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi return false; } + @Override public boolean hideOverflowMenu() { if (mMenuPresenter != null) { return mMenuPresenter.hideOverflowMenu(); @@ -242,6 +241,7 @@ public class ActionBarContextView extends AbsActionBarView implements AnimatorLi return false; } + @Override public boolean isOverflowMenuShowing() { if (mMenuPresenter != null) { return mMenuPresenter.isOverflowMenuShowing(); diff --git a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png Binary files differindex abaea2d58c06..ee1054ef6a41 100644 --- a/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png Binary files differindex 8982396f2894..b7ddbb46a826 100644 --- a/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_top_holo_light.9.png 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 Binary files differnew file mode 100644 index 000000000000..5579443710b2 --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000000..667491475d2d --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_menu_selectall_holo_light.png diff --git a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png Binary files differindex 68f9e577275f..ec06c17d8c00 100644 --- a/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png Binary files differindex 60aa8cbe55c8..7a2bf8d17ede 100644 --- a/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_top_holo_light.9.png 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 Binary files differnew file mode 100644 index 000000000000..caec299c39f6 --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000000..434f5d1bcc2d --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_menu_selectall_holo_light.png diff --git a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png Binary files differindex 55c60b822051..bdb68243acff 100644 --- a/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_middle_holo_light.9.png diff --git a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png Binary files differindex d33d033dc80a..aa8401d13267 100644 --- a/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png +++ b/core/res/res/drawable-xhdpi/dialog_top_holo_light.9.png diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml index 7631781d0f2a..7631781d0f2a 100644 --- a/core/res/res/layout-xlarge/status_bar_latest_event_ticker.xml +++ b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker.xml diff --git a/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml index ff0f7d44e637..ff0f7d44e637 100644 --- a/core/res/res/layout-xlarge/status_bar_latest_event_ticker_large_icon.xml +++ b/core/res/res/layout-sw600dp/status_bar_latest_event_ticker_large_icon.xml diff --git a/core/res/res/layout/am_compat_mode_dialog.xml b/core/res/res/layout/am_compat_mode_dialog.xml new file mode 100644 index 000000000000..a8d39cfec1ff --- /dev/null +++ b/core/res/res/layout/am_compat_mode_dialog.xml @@ -0,0 +1,60 @@ +<?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. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginLeft="40dp" android:layout_marginRight="40dp" + android:layout_marginTop="15dp" android:layout_marginBottom="15dp" + android:orientation="vertical"> + <LinearLayout + android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:orientation="horizontal" android:baselineAligned="true"> + <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginLeft="10dp" android:layout_marginRight="10dp" + android:textColor="?android:attr/textColorPrimary" + android:textSize="18sp" + android:text="@string/screen_compat_mode_scale" + /> + <Switch + android:id="@+id/compat_checkbox" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginRight="10dp" + /> + </LinearLayout> + + <View android:layout_width="wrap_content" android:layout_height="1dp" + android:layout_marginTop="10dp" android:layout_marginBottom="10dp" + android:background="@android:drawable/divider_horizontal_dark" + /> + + <CheckBox android:id="@+id/ask_checkbox" + android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:text="@string/screen_compat_mode_show" + /> + <TextView + android:id="@+id/reask_hint" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="?android:attr/textAppearanceSmall" + android:gravity="center" + android:visibility="invisible" + android:text="@string/screen_compat_mode_hint" /> +</LinearLayout> diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml new file mode 100644 index 000000000000..df1597cdcc27 --- /dev/null +++ b/core/res/res/values-sw600dp/dimens.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <!-- Height of the status bar --> + <dimen name="status_bar_height">48dip</dimen> + <!-- Width and height of a single notification icon in the status bar --> + <dimen name="status_bar_icon_size">32dip</dimen> + <!-- Size of the giant number (unread count) in the notifications --> + <dimen name="status_bar_content_number_size">48sp</dimen> +</resources> + diff --git a/core/res/res/values-xlarge/styles.xml b/core/res/res/values-sw600dp/styles.xml index 7515c98f046c..7515c98f046c 100644 --- a/core/res/res/values-xlarge/styles.xml +++ b/core/res/res/values-sw600dp/styles.xml diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml index b906e1a37512..c15770dfb6af 100644 --- a/core/res/res/values-xlarge/dimens.xml +++ b/core/res/res/values-xlarge/dimens.xml @@ -18,13 +18,6 @@ */ --> <resources> - <!-- Height of the status bar --> - <dimen name="status_bar_height">48dip</dimen> - <!-- Width and height of a single notification icon in the status bar --> - <dimen name="status_bar_icon_size">32dip</dimen> - <!-- Size of the giant number (unread count) in the notifications --> - <dimen name="status_bar_content_number_size">48sp</dimen> - <!-- Default height of a key in the password keyboard for alpha --> <dimen name="password_keyboard_key_height_alpha">75dip</dimen> <!-- Default height of a key in the password keyboard for numeric --> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index e325b8d770e8..db7621158a59 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -619,6 +619,8 @@ <attr name="actionModeCopyDrawable" format="reference" /> <!-- Drawable to use for the Paste action button in Contextual Action Bar --> <attr name="actionModePasteDrawable" format="reference" /> + <!-- Drawable to use for the Select all action button in Contextual Action Bar --> + <attr name="actionModeSelectAllDrawable" format="reference" /> <!-- Drawable to use for the Share action button in WebView selection action modes --> <attr name="actionModeShareDrawable" format="reference" /> <!-- Drawable to use for the Find action button in WebView selection action modes --> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 41a566c61901..4c3cfc117ea6 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1684,6 +1684,7 @@ <public type="attr" name="layout_rowWeight" /> <public type="attr" name="layout_columnSpan" /> <public type="attr" name="layout_columnWeight" /> + <public type="attr" name="actionModeSelectAllDrawable" /> <public type="attr" name="isAuxiliary" /> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 816546bfd8f2..b8a44436c64e 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2360,6 +2360,12 @@ <string name="launch_warning_replace"><xliff:g id="app_name">%1$s</xliff:g> is now running.</string> <!-- [CHAR LIMIT=50] Title of the alert when application launches on top of another. --> <string name="launch_warning_original"><xliff:g id="app_name">%1$s</xliff:g> was originally launched.</string> + <!-- [CHAR LIMIT=50] Compat mode dialog: compat mode switch label. --> + <string name="screen_compat_mode_scale">Scale</string> + <!-- [CHAR LIMIT=50] Compat mode dialog: compat mode switch label. --> + <string name="screen_compat_mode_show">Always show</string> + <!-- [CHAR LIMIT=200] Compat mode dialog: hint to re-enable compat mode dialog. --> + <string name="screen_compat_mode_hint">Re-enable this with Settings > Applications > Manage applications.</string> <!-- Text of the alert that is displayed when an application has violated StrictMode. --> <string name="smv_application">The application <xliff:g id="application">%1$s</xliff:g> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 0a614b2dd0b9..4f39da429bd2 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -267,6 +267,7 @@ <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item> <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item> + <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item> <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item> <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item> <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search</item> @@ -396,6 +397,7 @@ <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item> <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_light</item> + <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_light</item> <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_light</item> <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_light</item> <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_light</item> @@ -1029,6 +1031,7 @@ <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item> <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_dark</item> + <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_dark</item> <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_dark</item> <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_dark</item> <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_dark</item> @@ -1316,6 +1319,7 @@ <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item> <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item> <item name="actionModePasteDrawable">@android:drawable/ic_menu_paste_holo_light</item> + <item name="actionModeSelectAllDrawable">@android:drawable/ic_menu_selectall_holo_light</item> <item name="actionModeShareDrawable">@android:drawable/ic_menu_share_holo_light</item> <item name="actionModeFindDrawable">@android:drawable/ic_menu_find_holo_light</item> <item name="actionModeWebSearchDrawable">@android:drawable/ic_menu_search_holo_light</item> diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml index fadf1ec3961f..6dc5c2168b7e 100644 --- a/core/tests/coretests/AndroidManifest.xml +++ b/core/tests/coretests/AndroidManifest.xml @@ -1035,12 +1035,6 @@ </intent-filter> </activity> - <service android:name="android.accessibilityservice.AccessibilityTestService"> - <intent-filter> - <action android:name="android.accessibilityservice.AccessibilityService" /> - </intent-filter> - </service> - <service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> diff --git a/docs/html/sdk/android-2.3.3.jd b/docs/html/sdk/android-2.3.3.jd index 6d60fccdcef0..10fc049ea70c 100644 --- a/docs/html/sdk/android-2.3.3.jd +++ b/docs/html/sdk/android-2.3.3.jd @@ -141,8 +141,8 @@ to a wider range of standard tag technologies, including:</p> <li>NFC-F (JIS 6319-4)</li> <li>NFC-V (ISO 15693)</li> <li>ISO-DEP (ISO 14443-4)</li> -<li>Mifare Classic</li> -<li>Mifare Ultralight</li> +<li>MIFARE Classic</li> +<li>MIFARE Ultralight</li> <li>NFC Forum NDEF tags</li> </ul> diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java index e275ba8941dd..2220f96d48ce 100644 --- a/graphics/java/android/graphics/drawable/AnimationDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java @@ -62,7 +62,7 @@ import android.util.AttributeSet; * AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); * * // Start the animation (looped playback by default). - * frameAnimation.start() + * frameAnimation.start(); * </pre> * <p>For more information, see the guide to <a * href="{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p> @@ -192,6 +192,9 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An */ public void addFrame(Drawable frame, int duration) { mAnimationState.addFrame(frame, duration); + if (mCurFrame < 0) { + setFrame(0, true, false); + } } private void nextFrame(boolean unschedule) { diff --git a/include/media/mediaplayer.h b/include/media/mediaplayer.h index 50a378fe9469..ea5a9d3c9939 100644 --- a/include/media/mediaplayer.h +++ b/include/media/mediaplayer.h @@ -100,6 +100,9 @@ enum media_info_type { MEDIA_INFO_BUFFERING_START = 701, // MediaPlayer is resuming playback after filling buffers. MEDIA_INFO_BUFFERING_END = 702, + // Bandwidth in recent past + MEDIA_INFO_NETWORK_BANDWIDTH = 703, + // 8xx // Bad interleaving means that a media has been improperly interleaved or not // interleaved at all, e.g has all the video samples first then all the audio @@ -128,6 +131,9 @@ enum media_player_states { enum media_set_parameter_keys { KEY_PARAMETER_TIMED_TEXT_TRACK_INDEX = 1000, KEY_PARAMETER_TIMED_TEXT_ADD_OUT_OF_BAND_SOURCE = 1001, + + // Streaming/buffering parameters + KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS = 1100, }; // ---------------------------------------------------------------------------- // ref-counted object for callbacks diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 38202f24682d..1478a6dddf58 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -716,6 +716,12 @@ public class MediaRecorder /** * Stops recording. Call this after start(). Once recording is stopped, * you will have to configure it again as if it has just been constructed. + * Note that a RuntimeException is intentionally thrown to the + * application, if no valid audio/video data has been received when stop() + * is called. This happens if stop() is called immediately after + * start(). The failure lets the application take action accordingly to + * clean up the output file (delete the output file, for instance), since + * the output file is not properly constructed when this happens. * * @throws IllegalStateException if it is called before start() */ diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 3d270f898259..07a47e527009 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -634,6 +634,7 @@ void AwesomePlayer::onBufferingUpdate() { mFlags |= CACHE_UNDERRUN; pause_l(); ensureCacheIsFetching_l(); + sendCacheStats(); notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START); } else if (eos || cachedDataRemaining > kHighWaterMarkBytes) { if (mFlags & CACHE_UNDERRUN) { @@ -692,6 +693,7 @@ void AwesomePlayer::onBufferingUpdate() { mFlags |= CACHE_UNDERRUN; pause_l(); ensureCacheIsFetching_l(); + sendCacheStats(); notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START); } else if (eos || cachedDurationUs > highWaterMarkUs) { if (mFlags & CACHE_UNDERRUN) { @@ -711,6 +713,18 @@ void AwesomePlayer::onBufferingUpdate() { postBufferingEvent_l(); } +void AwesomePlayer::sendCacheStats() { + sp<MediaPlayerBase> listener = mListener.promote(); + if (listener != NULL) { + int32_t kbps = 0; + status_t err = mCachedSource->getEstimatedBandwidthKbps(&kbps); + if (err == OK) { + listener->sendEvent( + MEDIA_INFO, MEDIA_INFO_NETWORK_BANDWIDTH, kbps); + } + } +} + void AwesomePlayer::onStreamDone() { // Posted whenever any stream finishes playing. @@ -2083,6 +2097,10 @@ status_t AwesomePlayer::setParameter(int key, const Parcel &request) { return mTextPlayer->setParameter(key, request); } + case KEY_PARAMETER_CACHE_STAT_COLLECT_FREQ_MS: + { + return setCacheStatCollectFreq(request); + } default: { return ERROR_UNSUPPORTED; @@ -2090,6 +2108,16 @@ status_t AwesomePlayer::setParameter(int key, const Parcel &request) { } } +status_t AwesomePlayer::setCacheStatCollectFreq(const Parcel &request) { + if (mCachedSource != NULL) { + int32_t freqMs = request.readInt32(); + LOGD("Request to keep cache stats in the past %d ms", + freqMs); + return mCachedSource->setCacheStatCollectFreq(freqMs); + } + return ERROR_UNSUPPORTED; +} + status_t AwesomePlayer::getParameter(int key, Parcel *reply) { return OK; } diff --git a/media/libstagefright/HTTPBase.cpp b/media/libstagefright/HTTPBase.cpp index 58b17a788bc0..c0ae29dc1ac7 100644 --- a/media/libstagefright/HTTPBase.cpp +++ b/media/libstagefright/HTTPBase.cpp @@ -14,6 +14,10 @@ * limitations under the License. */ +//#define LOG_NDEBUG 0 +#define LOG_TAG "HTTPBase" +#include <utils/Log.h> + #include "include/HTTPBase.h" #if CHROMIUM_AVAILABLE @@ -22,11 +26,19 @@ #include "include/NuHTTPDataSource.h" +#include <media/stagefright/foundation/ALooper.h> #include <cutils/properties.h> namespace android { -HTTPBase::HTTPBase() {} +HTTPBase::HTTPBase() + : mNumBandwidthHistoryItems(0), + mTotalTransferTimeUs(0), + mTotalTransferBytes(0), + mPrevBandwidthMeasureTimeUs(0), + mPrevEstimatedBandWidthKbps(0), + mBandWidthCollectFreqMs(5000) { +} // static sp<HTTPBase> HTTPBase::Create(uint32_t flags) { @@ -42,4 +54,69 @@ sp<HTTPBase> HTTPBase::Create(uint32_t flags) { } } +void HTTPBase::addBandwidthMeasurement( + size_t numBytes, int64_t delayUs) { + Mutex::Autolock autoLock(mLock); + + BandwidthEntry entry; + entry.mDelayUs = delayUs; + entry.mNumBytes = numBytes; + mTotalTransferTimeUs += delayUs; + mTotalTransferBytes += numBytes; + + mBandwidthHistory.push_back(entry); + if (++mNumBandwidthHistoryItems > 100) { + BandwidthEntry *entry = &*mBandwidthHistory.begin(); + mTotalTransferTimeUs -= entry->mDelayUs; + mTotalTransferBytes -= entry->mNumBytes; + mBandwidthHistory.erase(mBandwidthHistory.begin()); + --mNumBandwidthHistoryItems; + + int64_t timeNowUs = ALooper::GetNowUs(); + if (timeNowUs - mPrevBandwidthMeasureTimeUs >= + mBandWidthCollectFreqMs * 1000LL) { + + if (mPrevBandwidthMeasureTimeUs != 0) { + mPrevEstimatedBandWidthKbps = + (mTotalTransferBytes * 8E3 / mTotalTransferTimeUs); + } + mPrevBandwidthMeasureTimeUs = timeNowUs; + } + } + +} + +bool HTTPBase::estimateBandwidth(int32_t *bandwidth_bps) { + Mutex::Autolock autoLock(mLock); + + if (mNumBandwidthHistoryItems < 2) { + return false; + } + + *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs); + + return true; +} + +status_t HTTPBase::getEstimatedBandwidthKbps(int32_t *kbps) { + Mutex::Autolock autoLock(mLock); + *kbps = mPrevEstimatedBandWidthKbps; + return OK; +} + +status_t HTTPBase::setBandwidthStatCollectFreq(int32_t freqMs) { + Mutex::Autolock autoLock(mLock); + + if (freqMs < kMinBandwidthCollectFreqMs + || freqMs > kMaxBandwidthCollectFreqMs) { + + LOGE("frequency (%d ms) is out of range [1000, 60000]", freqMs); + return BAD_VALUE; + } + + LOGI("frequency set to %d ms", freqMs); + mBandWidthCollectFreqMs = freqMs; + return OK; +} + } // namespace android diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp index 81f2e47cab5c..b2ed4278f7bc 100644 --- a/media/libstagefright/NuCachedSource2.cpp +++ b/media/libstagefright/NuCachedSource2.cpp @@ -19,6 +19,7 @@ #include <utils/Log.h> #include "include/NuCachedSource2.h" +#include "include/HTTPBase.h" #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> @@ -201,6 +202,16 @@ NuCachedSource2::~NuCachedSource2() { mCache = NULL; } +status_t NuCachedSource2::getEstimatedBandwidthKbps(int32_t *kbps) { + HTTPBase* source = static_cast<HTTPBase *>(mSource.get()); + return source->getEstimatedBandwidthKbps(kbps); +} + +status_t NuCachedSource2::setCacheStatCollectFreq(int32_t freqMs) { + HTTPBase *source = static_cast<HTTPBase *>(mSource.get()); + return source->setBandwidthStatCollectFreq(freqMs); +} + status_t NuCachedSource2::initCheck() const { return mSource->initCheck(); } diff --git a/media/libstagefright/NuHTTPDataSource.cpp b/media/libstagefright/NuHTTPDataSource.cpp index 821ba9b9aa33..c3b5e8f423f9 100644 --- a/media/libstagefright/NuHTTPDataSource.cpp +++ b/media/libstagefright/NuHTTPDataSource.cpp @@ -97,9 +97,6 @@ NuHTTPDataSource::NuHTTPDataSource(uint32_t flags) mContentLengthValid(false), mHasChunkedTransferEncoding(false), mChunkDataBytesLeft(0), - mNumBandwidthHistoryItems(0), - mTotalTransferTimeUs(0), - mTotalTransferBytes(0), mDecryptHandle(NULL), mDrmManagerClient(NULL) { } @@ -431,7 +428,7 @@ ssize_t NuHTTPDataSource::readAt(off64_t offset, void *data, size_t size) { } int64_t delayUs = ALooper::GetNowUs() - startTimeUs; - addBandwidthMeasurement_l(n, delayUs); + addBandwidthMeasurement(n, delayUs); numBytesRead += (size_t)n; @@ -517,36 +514,6 @@ void NuHTTPDataSource::applyTimeoutResponse() { } } -bool NuHTTPDataSource::estimateBandwidth(int32_t *bandwidth_bps) { - Mutex::Autolock autoLock(mLock); - - if (mNumBandwidthHistoryItems < 2) { - return false; - } - - *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs); - - return true; -} - -void NuHTTPDataSource::addBandwidthMeasurement_l( - size_t numBytes, int64_t delayUs) { - BandwidthEntry entry; - entry.mDelayUs = delayUs; - entry.mNumBytes = numBytes; - mTotalTransferTimeUs += delayUs; - mTotalTransferBytes += numBytes; - - mBandwidthHistory.push_back(entry); - if (++mNumBandwidthHistoryItems > 100) { - BandwidthEntry *entry = &*mBandwidthHistory.begin(); - mTotalTransferTimeUs -= entry->mDelayUs; - mTotalTransferBytes -= entry->mNumBytes; - mBandwidthHistory.erase(mBandwidthHistory.begin()); - --mNumBandwidthHistoryItems; - } -} - sp<DecryptHandle> NuHTTPDataSource::DrmInitialization() { if (mDrmManagerClient == NULL) { mDrmManagerClient = new DrmManagerClient(); diff --git a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp index 1096717ff464..ad1f342e874b 100644 --- a/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp +++ b/media/libstagefright/chromium_http/ChromiumHTTPDataSource.cpp @@ -34,9 +34,6 @@ ChromiumHTTPDataSource::ChromiumHTTPDataSource(uint32_t flags) mCurrentOffset(0), mIOResult(OK), mContentSize(-1), - mNumBandwidthHistoryItems(0), - mTotalTransferTimeUs(0), - mTotalTransferBytes(0), mDecryptHandle(NULL), mDrmManagerClient(NULL) { mDelegate->setOwner(this); @@ -188,7 +185,7 @@ ssize_t ChromiumHTTPDataSource::readAt(off64_t offset, void *data, size_t size) // The read operation was successful, mIOResult contains // the number of bytes read. - addBandwidthMeasurement_l(mIOResult, delayUs); + addBandwidthMeasurement(mIOResult, delayUs); mCurrentOffset += mIOResult; return mIOResult; @@ -246,36 +243,6 @@ void ChromiumHTTPDataSource::onDisconnectComplete() { clearDRMState_l(); } -void ChromiumHTTPDataSource::addBandwidthMeasurement_l( - size_t numBytes, int64_t delayUs) { - BandwidthEntry entry; - entry.mDelayUs = delayUs; - entry.mNumBytes = numBytes; - mTotalTransferTimeUs += delayUs; - mTotalTransferBytes += numBytes; - - mBandwidthHistory.push_back(entry); - if (++mNumBandwidthHistoryItems > 100) { - BandwidthEntry *entry = &*mBandwidthHistory.begin(); - mTotalTransferTimeUs -= entry->mDelayUs; - mTotalTransferBytes -= entry->mNumBytes; - mBandwidthHistory.erase(mBandwidthHistory.begin()); - --mNumBandwidthHistoryItems; - } -} - -bool ChromiumHTTPDataSource::estimateBandwidth(int32_t *bandwidth_bps) { - Mutex::Autolock autoLock(mLock); - - if (mNumBandwidthHistoryItems < 2) { - return false; - } - - *bandwidth_bps = ((double)mTotalTransferBytes * 8E6 / mTotalTransferTimeUs); - - return true; -} - sp<DecryptHandle> ChromiumHTTPDataSource::DrmInitialization() { Mutex::Autolock autoLock(mLock); diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index a9e8e952c0a4..aebcdd15dbc2 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -93,6 +93,7 @@ struct AwesomePlayer { status_t setParameter(int key, const Parcel &request); status_t getParameter(int key, Parcel *reply); + status_t setCacheStatCollectFreq(const Parcel &request); status_t seekTo(int64_t timeUs); @@ -291,6 +292,7 @@ private: void setNativeWindow_l(const sp<ANativeWindow> &native); bool isStreamingHTTP() const; + void sendCacheStats(); AwesomePlayer(const AwesomePlayer &); AwesomePlayer &operator=(const AwesomePlayer &); diff --git a/media/libstagefright/include/ChromiumHTTPDataSource.h b/media/libstagefright/include/ChromiumHTTPDataSource.h index 0e2927d43859..d833e2efc1ba 100644 --- a/media/libstagefright/include/ChromiumHTTPDataSource.h +++ b/media/libstagefright/include/ChromiumHTTPDataSource.h @@ -43,8 +43,6 @@ struct ChromiumHTTPDataSource : public HTTPBase { virtual status_t getSize(off64_t *size); virtual uint32_t flags(); - virtual bool estimateBandwidth(int32_t *bandwidth_bps); - virtual sp<DecryptHandle> DrmInitialization(); virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client); @@ -67,11 +65,6 @@ private: DISCONNECTING }; - struct BandwidthEntry { - int64_t mDelayUs; - size_t mNumBytes; - }; - const uint32_t mFlags; mutable Mutex mLock; @@ -94,11 +87,6 @@ private: String8 mContentType; - List<BandwidthEntry> mBandwidthHistory; - size_t mNumBandwidthHistoryItems; - int64_t mTotalTransferTimeUs; - size_t mTotalTransferBytes; - sp<DecryptHandle> mDecryptHandle; DrmManagerClient *mDrmManagerClient; @@ -121,8 +109,6 @@ private: void onReadCompleted(ssize_t size); void onDisconnectComplete(); - void addBandwidthMeasurement_l(size_t numBytes, int64_t delayUs); - void clearDRMState_l(); DISALLOW_EVIL_CONSTRUCTORS(ChromiumHTTPDataSource); diff --git a/media/libstagefright/include/HTTPBase.h b/media/libstagefright/include/HTTPBase.h index 6cec3901a0f7..3a7fbb690d16 100644 --- a/media/libstagefright/include/HTTPBase.h +++ b/media/libstagefright/include/HTTPBase.h @@ -20,6 +20,8 @@ #include <media/stagefright/foundation/ABase.h> #include <media/stagefright/DataSource.h> +#include <media/stagefright/MediaErrors.h> +#include <utils/threads.h> namespace android { @@ -40,11 +42,41 @@ struct HTTPBase : public DataSource { // Returns true if bandwidth could successfully be estimated, // false otherwise. - virtual bool estimateBandwidth(int32_t *bandwidth_bps) = 0; + virtual bool estimateBandwidth(int32_t *bandwidth_bps); + + virtual status_t getEstimatedBandwidthKbps(int32_t *kbps); + + virtual status_t setBandwidthStatCollectFreq(int32_t freqMs); static sp<HTTPBase> Create(uint32_t flags = 0); +protected: + void addBandwidthMeasurement(size_t numBytes, int64_t delayUs); + private: + + struct BandwidthEntry { + int64_t mDelayUs; + size_t mNumBytes; + }; + + Mutex mLock; + + List<BandwidthEntry> mBandwidthHistory; + size_t mNumBandwidthHistoryItems; + int64_t mTotalTransferTimeUs; + size_t mTotalTransferBytes; + + enum { + kMinBandwidthCollectFreqMs = 1000, // 1 second + kMaxBandwidthCollectFreqMs = 60000, // one minute + }; + + int64_t mPrevBandwidthMeasureTimeUs; + int32_t mPrevEstimatedBandWidthKbps; + int32_t mBandWidthCollectFreqMs; + + DISALLOW_EVIL_CONSTRUCTORS(HTTPBase); }; diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h index ed3e265c0cff..31fc0e5604c4 100644 --- a/media/libstagefright/include/NuCachedSource2.h +++ b/media/libstagefright/include/NuCachedSource2.h @@ -47,8 +47,10 @@ struct NuCachedSource2 : public DataSource { size_t cachedSize(); size_t approxDataRemaining(status_t *finalStatus); + status_t setCacheStatCollectFreq(int32_t freqMs); void resumeFetchingIfNecessary(); + status_t getEstimatedBandwidthKbps(int32_t *kbps); protected: virtual ~NuCachedSource2(); diff --git a/media/libstagefright/include/NuHTTPDataSource.h b/media/libstagefright/include/NuHTTPDataSource.h index 2ab1f194cc5c..c265b3a85e63 100644 --- a/media/libstagefright/include/NuHTTPDataSource.h +++ b/media/libstagefright/include/NuHTTPDataSource.h @@ -43,10 +43,6 @@ struct NuHTTPDataSource : public HTTPBase { virtual status_t getSize(off64_t *size); virtual uint32_t flags(); - // Returns true if bandwidth could successfully be estimated, - // false otherwise. - virtual bool estimateBandwidth(int32_t *bandwidth_bps); - virtual sp<DecryptHandle> DrmInitialization(); virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client); virtual String8 getUri(); @@ -63,11 +59,6 @@ private: CONNECTED }; - struct BandwidthEntry { - int64_t mDelayUs; - size_t mNumBytes; - }; - Mutex mLock; uint32_t mFlags; @@ -93,11 +84,6 @@ private: // chunk header (or -1 if no more chunks). ssize_t mChunkDataBytesLeft; - List<BandwidthEntry> mBandwidthHistory; - size_t mNumBandwidthHistoryItems; - int64_t mTotalTransferTimeUs; - size_t mTotalTransferBytes; - sp<DecryptHandle> mDecryptHandle; DrmManagerClient *mDrmManagerClient; @@ -114,7 +100,6 @@ private: ssize_t internalRead(void *data, size_t size); void applyTimeoutResponse(); - void addBandwidthMeasurement_l(size_t numBytes, int64_t delayUs); static void MakeFullHeaders( const KeyedVector<String8, String8> *overrides, diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/app_icon.png Binary files differindex aedf7e7ad604..aedf7e7ad604 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/app_icon.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/app_icon.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png Binary files differindex a57c27a1e3bd..a57c27a1e3bd 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/recents_bg_protect_tile.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/recents_bg_protect_tile.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png Binary files differindex 1629575742a9..1629575742a9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png Binary files differindex e87bceca0338..e87bceca0338 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png Binary files differindex fd44002fde47..fd44002fde47 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png Binary files differindex e455ad63e79a..e455ad63e79a 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png Binary files differindex 661358506884..661358506884 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png Binary files differindex 7502a5468f7d..7502a5468f7d 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png Binary files differindex 5f88279ffce3..5f88279ffce3 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_in_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_in_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png Binary files differindex 8c04bd611cb0..8c04bd611cb0 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_inandout_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_inandout_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png Binary files differindex 456d0b6ef060..456d0b6ef060 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_out_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_out_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png Binary files differindex 1309176ff73f..1309176ff73f 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png Binary files differindex 810714ee826d..810714ee826d 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 72176baef247..72176baef247 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png Binary files differindex 82a2bf0c7b32..82a2bf0c7b32 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png Binary files differindex 1e6c6049169f..1e6c6049169f 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png Binary files differindex 13aee0610780..13aee0610780 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png Binary files differindex 76c48a8c435b..76c48a8c435b 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png Binary files differindex 456d0b6ef060..456d0b6ef060 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_in_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_in_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png Binary files differindex 456d0b6ef060..456d0b6ef060 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_inandout_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_inandout_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png Binary files differindex 39dfcd3d4101..39dfcd3d4101 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png Binary files differindex e78d872920b9..e78d872920b9 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png Binary files differindex 456d0b6ef060..456d0b6ef060 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png Binary files differindex ad73252ee034..ad73252ee034 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png Binary files differindex d02de5b2058c..d02de5b2058c 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png Binary files differindex cb13b91cfb57..cb13b91cfb57 100644 --- a/packages/SystemUI/res/drawable-xlarge-hdpi/stat_sys_data_fully_out_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/stat_sys_data_fully_out_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/app_icon.png Binary files differindex 50a8ac8f7447..50a8ac8f7447 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/app_icon.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/app_icon.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png Binary files differindex 87c7be69a357..87c7be69a357 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_bg_protect_tile.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_bg_protect_tile.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png Binary files differindex 4f4ae788e3f1..4f4ae788e3f1 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_blue_glow.9.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_blue_glow.9.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png Binary files differindex 5f4c0357e674..5f4c0357e674 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_callout_line.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_callout_line.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png Binary files differindex 87a67c9cf474..87a67c9cf474 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png Binary files differindex a1c39e6ec046..a1c39e6ec046 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/recents_thumbnail_bg_press.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/recents_thumbnail_bg_press.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png Binary files differindex 73cdabefece4..73cdabefece4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png Binary files differindex b5a39cce6723..b5a39cce6723 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png Binary files differindex 6de880cba39b..6de880cba39b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png Binary files differindex 2dbbfc0eb001..2dbbfc0eb001 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png Binary files differindex a45f01164716..a45f01164716 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png Binary files differindex 517a6bb28ea2..517a6bb28ea2 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png Binary files differindex 821d00e650b1..821d00e650b1 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_in_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_in_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png Binary files differindex 4cdce84ba45a..4cdce84ba45a 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_inandout_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_inandout_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png Binary files differindex 5a2662a2e851..5a2662a2e851 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_out_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_out_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png Binary files differindex 5226c1cbd170..5226c1cbd170 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_connected_roam.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_connected_roam.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png Binary files differindex a84564848ef0..a84564848ef0 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png Binary files differindex 1d15587c152d..1d15587c152d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png Binary files differindex 52d573619b81..52d573619b81 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png Binary files differindex 79a2a0593c21..79a2a0593c21 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png Binary files differindex b03259419472..b03259419472 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png Binary files differindex c4abcc909f3c..c4abcc909f3c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_connected_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_connected_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png Binary files differindex 5a2662a2e851..5a2662a2e851 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_in_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_in_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png Binary files differindex 5a2662a2e851..5a2662a2e851 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_inandout_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_inandout_h.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png Binary files differindex f50c9872c7e4..f50c9872c7e4 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_1x.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_1x.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png Binary files differindex 1fff17eec67b..1fff17eec67b 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_3g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_3g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png Binary files differindex 5a2662a2e851..5a2662a2e851 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_4g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_4g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png Binary files differindex e27439e2f75d..e27439e2f75d 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_e.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_e.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png Binary files differindex 8b53f0fd577c..8b53f0fd577c 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_g.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_g.png diff --git a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png Binary files differindex a23ec6e5e413..a23ec6e5e413 100644 --- a/packages/SystemUI/res/drawable-xlarge-mdpi/stat_sys_data_fully_out_h.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/stat_sys_data_fully_out_h.png diff --git a/packages/SystemUI/res/values-xlarge-port/dimens.xml b/packages/SystemUI/res/values-sw600dp-port/dimens.xml index 56effa3cd32a..78dd8c4e6053 100644 --- a/packages/SystemUI/res/values-xlarge-port/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp-port/dimens.xml @@ -20,5 +20,3 @@ <dimen name="status_bar_icon_padding">2dp</dimen> </resources> - - diff --git a/packages/SystemUI/res/values-xlarge/colors.xml b/packages/SystemUI/res/values-sw600dp/colors.xml index a7a70c3f41e9..a7a70c3f41e9 100644 --- a/packages/SystemUI/res/values-xlarge/colors.xml +++ b/packages/SystemUI/res/values-sw600dp/colors.xml diff --git a/packages/SystemUI/res/values-xlarge/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml index 9d89e21761ab..dec8b672734b 100644 --- a/packages/SystemUI/res/values-xlarge/dimens.xml +++ b/packages/SystemUI/res/values-sw600dp/dimens.xml @@ -22,6 +22,9 @@ <dimen name="status_bar_panel_bottom_offset">36dp</dimen> <!-- gap on either side of status bar notification icons --> <dimen name="status_bar_icon_padding">8dp</dimen> + <!-- The width of the notification panel window --> + <dimen name="notification_panel_width">512dp</dimen> + <!-- The minimum height of the notification panel window --> + <dimen name="notification_panel_min_height">770dp</dimen> </resources> - 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 91c3cc18dadf..63bc9b79e149 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -43,6 +43,7 @@ import android.os.ServiceManager; import android.text.TextUtils; import android.util.Slog; import android.view.accessibility.AccessibilityEvent; +import android.view.Display; import android.view.Gravity; import android.view.IWindowManager; import android.view.KeyEvent; @@ -130,6 +131,7 @@ public class TabletStatusBar extends StatusBar implements InputMethodButton mInputMethodSwitchButton; NotificationPanel mNotificationPanel; + WindowManager.LayoutParams mNotificationPanelParams; NotificationPeekPanel mNotificationPeekWindow; ViewGroup mNotificationPeekRow; int mNotificationPeekIndex; @@ -170,6 +172,7 @@ public class TabletStatusBar extends StatusBar implements protected void addPanelWindows() { final Context context = mContext; + final Resources res = mContext.getResources(); // Notification Panel mNotificationPanel = (NotificationPanel)View.inflate(context, @@ -197,11 +200,12 @@ public class TabletStatusBar extends StatusBar implements mStatusBarView.setIgnoreChildren(0, mNotificationTrigger, mNotificationPanel); - WindowManager.LayoutParams lp = new WindowManager.LayoutParams( - 512, // ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams lp = mNotificationPanelParams = new WindowManager.LayoutParams( + res.getDimensionPixelSize(R.dimen.notification_panel_width), + getNotificationPanelHeight(), WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, @@ -303,6 +307,13 @@ public class TabletStatusBar extends StatusBar implements WindowManagerImpl.getDefault().addView(mInputMethodsPanel, lp); } + private int getNotificationPanelHeight() { + final Resources res = mContext.getResources(); + final Display d = WindowManagerImpl.getDefault().getDefaultDisplay(); + return Math.max(res.getDimensionPixelSize(R.dimen.notification_panel_min_height), + d.getHeight()); + } + @Override public void start() { super.start(); // will add the main bar view @@ -311,6 +322,9 @@ public class TabletStatusBar extends StatusBar implements @Override protected void onConfigurationChanged(Configuration newConfig) { loadDimens(); + mNotificationPanelParams.height = getNotificationPanelHeight(); + WindowManagerImpl.getDefault().updateViewLayout(mNotificationPanel, + mNotificationPanelParams); } protected void loadDimens() { diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp index 25a2c784fe93..35e08d4f8046 100644 --- a/services/input/InputReader.cpp +++ b/services/input/InputReader.cpp @@ -1694,7 +1694,7 @@ void CursorInputMapper::sync(nsecs_t when) { mPointerController->setButtonState(mLocked.buttonState); } - mPointerController->unfade(); + mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE); } float x, y; @@ -1772,7 +1772,7 @@ void CursorInputMapper::fadePointer() { { // acquire lock AutoMutex _l(mLock); if (mPointerController != NULL) { - mPointerController->fade(); + mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL); } } // release lock } @@ -1965,10 +1965,22 @@ void TouchInputMapper::configureParameters() { mParameters.useJumpyTouchFilter = getPolicy()->filterJumpyTouchEvents(); mParameters.virtualKeyQuietTime = getPolicy()->getVirtualKeyQuietTime(); - // TODO: Make this configurable. - //mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER; + // TODO: select the default gesture mode based on whether the device supports + // distinct multitouch mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS; + String8 gestureModeString; + if (getDevice()->getConfiguration().tryGetProperty(String8("touch.gestureMode"), + gestureModeString)) { + if (gestureModeString == "pointer") { + mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER; + } else if (gestureModeString == "spots") { + mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS; + } else if (gestureModeString != "default") { + LOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string()); + } + } + if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X) || getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) { // The device is a cursor device with a touch pad attached. @@ -1994,7 +2006,7 @@ void TouchInputMapper::configureParameters() { mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD; } else if (deviceTypeString == "pointer") { mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; - } else { + } else if (deviceTypeString != "default") { LOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string()); } } @@ -2012,6 +2024,17 @@ void TouchInputMapper::configureParameters() { void TouchInputMapper::dumpParameters(String8& dump) { dump.append(INDENT3 "Parameters:\n"); + switch (mParameters.gestureMode) { + case Parameters::GESTURE_MODE_POINTER: + dump.append(INDENT4 "GestureMode: pointer\n"); + break; + case Parameters::GESTURE_MODE_SPOTS: + dump.append(INDENT4 "GestureMode: spots\n"); + break; + default: + assert(false); + } + switch (mParameters.deviceType) { case Parameters::DEVICE_TYPE_TOUCH_SCREEN: dump.append(INDENT4 "DeviceType: touchScreen\n"); @@ -3465,10 +3488,36 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag return; } - // Show the pointer if needed. - if (mPointerGesture.currentGestureMode != PointerGesture::NEUTRAL - && mPointerGesture.currentGestureMode != PointerGesture::QUIET) { - mPointerController->unfade(); + // Show or hide the pointer if needed. + switch (mPointerGesture.currentGestureMode) { + case PointerGesture::NEUTRAL: + case PointerGesture::QUIET: + if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS + && (mPointerGesture.lastGestureMode == PointerGesture::SWIPE + || mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)) { + // Remind the user of where the pointer is after finishing a gesture with spots. + mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL); + } + break; + case PointerGesture::TAP: + case PointerGesture::TAP_DRAG: + case PointerGesture::BUTTON_CLICK_OR_DRAG: + case PointerGesture::HOVER: + case PointerGesture::PRESS: + // Unfade the pointer when the current gesture manipulates the + // area directly under the pointer. + mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE); + break; + case PointerGesture::SWIPE: + case PointerGesture::FREEFORM: + // Fade the pointer when the current gesture manipulates a different + // area and there are spots to guide the user experience. + if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) { + mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL); + } else { + mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE); + } + break; } // Send events! @@ -4037,6 +4086,7 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when, *outFinishPreviousGesture = true; mPointerGesture.currentGestureMode = PointerGesture::PRESS; mPointerGesture.activeGestureId = 0; + mPointerGesture.referenceIdBits.clear(); if (settled && mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS && mLastTouch.idBits.hasBit(mPointerGesture.activeTouchId)) { @@ -4167,6 +4217,17 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when, } } + // Clear the reference deltas for fingers not yet included in the reference calculation. + for (BitSet32 idBits(mCurrentTouch.idBits.value & ~mPointerGesture.referenceIdBits.value); + !idBits.isEmpty(); ) { + uint32_t id = idBits.firstMarkedBit(); + idBits.clearBit(id); + + mPointerGesture.referenceDeltas[id].dx = 0; + mPointerGesture.referenceDeltas[id].dy = 0; + } + mPointerGesture.referenceIdBits = mCurrentTouch.idBits; + // Move the reference points based on the overall group motion of the fingers. // The objective is to calculate a vector delta that is common to the movement // of all fingers. @@ -4180,27 +4241,39 @@ bool TouchInputMapper::preparePointerGestures(nsecs_t when, const PointerData& cpd = mCurrentTouch.pointers[mCurrentTouch.idToIndex[id]]; const PointerData& lpd = mLastTouch.pointers[mLastTouch.idToIndex[id]]; - float deltaX = cpd.x - lpd.x; - float deltaY = cpd.y - lpd.y; + PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id]; + delta.dx += cpd.x - lpd.x; + delta.dy += cpd.y - lpd.y; if (first) { - commonDeltaX = deltaX; - commonDeltaY = deltaY; + commonDeltaX = delta.dx; + commonDeltaY = delta.dy; } else { - commonDeltaX = calculateCommonVector(commonDeltaX, deltaX); - commonDeltaY = calculateCommonVector(commonDeltaY, deltaY); + commonDeltaX = calculateCommonVector(commonDeltaX, delta.dx); + commonDeltaY = calculateCommonVector(commonDeltaY, delta.dy); } } - mPointerGesture.referenceTouchX += commonDeltaX; - mPointerGesture.referenceTouchY += commonDeltaY; - mPointerGesture.referenceGestureX += - commonDeltaX * mLocked.pointerGestureXMovementScale; - mPointerGesture.referenceGestureY += - commonDeltaY * mLocked.pointerGestureYMovementScale; - clampPositionUsingPointerBounds(mPointerController, - &mPointerGesture.referenceGestureX, - &mPointerGesture.referenceGestureY); + if (commonDeltaX || commonDeltaY) { + for (BitSet32 idBits(commonIdBits); !idBits.isEmpty(); ) { + uint32_t id = idBits.firstMarkedBit(); + idBits.clearBit(id); + + PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id]; + delta.dx = 0; + delta.dy = 0; + } + + mPointerGesture.referenceTouchX += commonDeltaX; + mPointerGesture.referenceTouchY += commonDeltaY; + mPointerGesture.referenceGestureX += + commonDeltaX * mLocked.pointerGestureXMovementScale; + mPointerGesture.referenceGestureY += + commonDeltaY * mLocked.pointerGestureYMovementScale; + clampPositionUsingPointerBounds(mPointerController, + &mPointerGesture.referenceGestureX, + &mPointerGesture.referenceGestureY); + } } // Report gestures. @@ -4508,7 +4581,7 @@ void TouchInputMapper::fadePointer() { { // acquire lock AutoMutex _l(mLock); if (mPointerController != NULL) { - mPointerController->fade(); + mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL); } } // release lock } diff --git a/services/input/InputReader.h b/services/input/InputReader.h index 85338b6bad34..671e194a4eab 100644 --- a/services/input/InputReader.h +++ b/services/input/InputReader.h @@ -1048,6 +1048,14 @@ private: float referenceGestureX; // reference gesture X/Y coordinates in pixels float referenceGestureY; + // Distance that each pointer has traveled which has not yet been + // subsumed into the reference gesture position. + BitSet32 referenceIdBits; + struct Delta { + float dx, dy; + }; + Delta referenceDeltas[MAX_POINTER_ID + 1]; + // Describes how touch ids are mapped to gesture ids for freeform gestures. uint32_t freeformTouchToGestureIdMap[MAX_POINTER_ID + 1]; diff --git a/services/input/PointerController.cpp b/services/input/PointerController.cpp index b87c98dbc0b9..c18ebcfccaae 100644 --- a/services/input/PointerController.cpp +++ b/services/input/PointerController.cpp @@ -69,10 +69,10 @@ PointerController::PointerController(const sp<PointerControllerPolicyInterface>& mLocked.inactivityTimeout = INACTIVITY_TIMEOUT_NORMAL; - mLocked.pointerIsFading = true; // keep the pointer initially faded + mLocked.pointerFadeDirection = 0; mLocked.pointerX = 0; mLocked.pointerY = 0; - mLocked.pointerAlpha = 0.0f; + mLocked.pointerAlpha = 0.0f; // pointer is initially faded mLocked.pointerSprite = mSpriteController->createSprite(); mLocked.pointerIconChanged = false; @@ -191,23 +191,37 @@ void PointerController::getPosition(float* outX, float* outY) const { *outY = mLocked.pointerY; } -void PointerController::fade() { +void PointerController::fade(Transition transition) { AutoMutex _l(mLock); - sendImmediateInactivityTimeoutLocked(); + // Remove the inactivity timeout, since we are fading now. + removeInactivityTimeoutLocked(); + + // Start fading. + if (transition == TRANSITION_IMMEDIATE) { + mLocked.pointerFadeDirection = 0; + mLocked.pointerAlpha = 0.0f; + updatePointerLocked(); + } else { + mLocked.pointerFadeDirection = -1; + startAnimationLocked(); + } } -void PointerController::unfade() { +void PointerController::unfade(Transition transition) { AutoMutex _l(mLock); // Always reset the inactivity timer. resetInactivityTimeoutLocked(); - // Unfade immediately if needed. - if (mLocked.pointerIsFading) { - mLocked.pointerIsFading = false; + // Start unfading. + if (transition == TRANSITION_IMMEDIATE) { + mLocked.pointerFadeDirection = 0; mLocked.pointerAlpha = 1.0f; updatePointerLocked(); + } else { + mLocked.pointerFadeDirection = 1; + startAnimationLocked(); } } @@ -401,10 +415,20 @@ void PointerController::doAnimate() { nsecs_t frameDelay = systemTime(SYSTEM_TIME_MONOTONIC) - mLocked.animationTime; // Animate pointer fade. - if (mLocked.pointerIsFading) { + if (mLocked.pointerFadeDirection < 0) { mLocked.pointerAlpha -= float(frameDelay) / POINTER_FADE_DURATION; - if (mLocked.pointerAlpha <= 0) { - mLocked.pointerAlpha = 0; + if (mLocked.pointerAlpha <= 0.0f) { + mLocked.pointerAlpha = 0.0f; + mLocked.pointerFadeDirection = 0; + } else { + keepAnimating = true; + } + updatePointerLocked(); + } else if (mLocked.pointerFadeDirection > 0) { + mLocked.pointerAlpha += float(frameDelay) / POINTER_FADE_DURATION; + if (mLocked.pointerAlpha >= 1.0f) { + mLocked.pointerAlpha = 1.0f; + mLocked.pointerFadeDirection = 0; } else { keepAnimating = true; } @@ -432,12 +456,7 @@ void PointerController::doAnimate() { } void PointerController::doInactivityTimeout() { - AutoMutex _l(mLock); - - if (!mLocked.pointerIsFading) { - mLocked.pointerIsFading = true; - startAnimationLocked(); - } + fade(TRANSITION_GRADUAL); } void PointerController::startAnimationLocked() { @@ -456,9 +475,8 @@ void PointerController::resetInactivityTimeoutLocked() { mLooper->sendMessageDelayed(timeout, mHandler, MSG_INACTIVITY_TIMEOUT); } -void PointerController::sendImmediateInactivityTimeoutLocked() { +void PointerController::removeInactivityTimeoutLocked() { mLooper->removeMessages(mHandler, MSG_INACTIVITY_TIMEOUT); - mLooper->sendMessage(mHandler, MSG_INACTIVITY_TIMEOUT); } void PointerController::updatePointerLocked() { diff --git a/services/input/PointerController.h b/services/input/PointerController.h index c7435ee304bf..1c21db16d3a3 100644 --- a/services/input/PointerController.h +++ b/services/input/PointerController.h @@ -64,14 +64,21 @@ public: /* Gets the absolute location of the pointer. */ virtual void getPosition(float* outX, float* outY) const = 0; + enum Transition { + // Fade/unfade immediately. + TRANSITION_IMMEDIATE, + // Fade/unfade gradually. + TRANSITION_GRADUAL, + }; + /* Fades the pointer out now. */ - virtual void fade() = 0; + virtual void fade(Transition transition) = 0; /* Makes the pointer visible if it has faded out. * The pointer never unfades itself automatically. This method must be called * by the client whenever the pointer is moved or a button is pressed and it * wants to ensure that the pointer becomes visible again. */ - virtual void unfade() = 0; + virtual void unfade(Transition transition) = 0; enum Presentation { // Show the mouse pointer. @@ -187,8 +194,8 @@ public: virtual int32_t getButtonState() const; virtual void setPosition(float x, float y); virtual void getPosition(float* outX, float* outY) const; - virtual void fade(); - virtual void unfade(); + virtual void fade(Transition transition); + virtual void unfade(Transition transition); virtual void setPresentation(Presentation presentation); virtual void setSpots(SpotGesture spotGesture, @@ -250,7 +257,7 @@ private: Presentation presentation; bool presentationChanged; - bool pointerIsFading; + int32_t pointerFadeDirection; float pointerX; float pointerY; float pointerAlpha; @@ -274,7 +281,7 @@ private: void startAnimationLocked(); void resetInactivityTimeoutLocked(); - void sendImmediateInactivityTimeoutLocked(); + void removeInactivityTimeoutLocked(); void updatePointerLocked(); Spot* getSpotLocked(uint32_t id); diff --git a/services/input/tests/InputReader_test.cpp b/services/input/tests/InputReader_test.cpp index 1ab2a3e8a3d3..78d1db65592c 100644 --- a/services/input/tests/InputReader_test.cpp +++ b/services/input/tests/InputReader_test.cpp @@ -92,10 +92,10 @@ private: *outY = 0; } - virtual void fade() { + virtual void fade(Transition transition) { } - virtual void unfade() { + virtual void unfade(Transition transition) { } virtual void setPresentation(Presentation presentation) { diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index d2fd04bf0fe4..a564c2d4bac1 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -39,6 +39,7 @@ import android.net.RouteInfo; import android.net.vpn.VpnManager; import android.net.wifi.WifiStateTracker; import android.os.Binder; +import android.os.FileUtils; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -58,7 +59,6 @@ import com.android.internal.telephony.Phone; import com.android.server.connectivity.Tethering; import java.io.FileDescriptor; -import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.net.InetAddress; @@ -1552,12 +1552,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (values.length == 6) { final String prefix = "/sys/kernel/ipv4/tcp_"; - stringToFile(prefix + "rmem_min", values[0]); - stringToFile(prefix + "rmem_def", values[1]); - stringToFile(prefix + "rmem_max", values[2]); - stringToFile(prefix + "wmem_min", values[3]); - stringToFile(prefix + "wmem_def", values[4]); - stringToFile(prefix + "wmem_max", values[5]); + FileUtils.stringToFile(prefix + "rmem_min", values[0]); + FileUtils.stringToFile(prefix + "rmem_def", values[1]); + FileUtils.stringToFile(prefix + "rmem_max", values[2]); + FileUtils.stringToFile(prefix + "wmem_min", values[3]); + FileUtils.stringToFile(prefix + "wmem_def", values[4]); + FileUtils.stringToFile(prefix + "wmem_max", values[5]); } else { loge("Invalid buffersize string: " + bufferSizes); } @@ -1566,23 +1566,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } - /** - * Writes string to file. Basically same as "echo -n $string > $filename" - * - * @param filename - * @param string - * @throws IOException - */ - private void stringToFile(String filename, String string) throws IOException { - FileWriter out = new FileWriter(filename); - try { - out.write(string); - } finally { - out.close(); - } - } - - /** * Adjust the per-process dns entries (net.dns<x>.<pid>) based * on the highest priority active net which this process requested. diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index cf5592c09e93..262e5cee9d27 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -968,10 +968,12 @@ public final class ActivityManagerService extends ActivityManagerNative static final int CHECK_EXCESSIVE_WAKE_LOCKS_MSG = 27; static final int CLEAR_DNS_CACHE = 28; static final int UPDATE_HTTP_PROXY = 29; - static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 30; - static final int DISPATCH_PROCESS_DIED = 31; + static final int SHOW_COMPAT_MODE_DIALOG_MSG = 30; + static final int DISPATCH_FOREGROUND_ACTIVITIES_CHANGED = 31; + static final int DISPATCH_PROCESS_DIED = 32; AlertDialog mUidAlert; + CompatModeDialog mCompatModeDialog; final Handler mHandler = new Handler() { //public Handler() { @@ -1270,6 +1272,34 @@ public final class ActivityManagerService extends ActivityManagerNative sendMessageDelayed(nmsg, POWER_CHECK_DELAY); } } break; + case SHOW_COMPAT_MODE_DIALOG_MSG: { + synchronized (ActivityManagerService.this) { + ActivityRecord ar = (ActivityRecord)msg.obj; + if (mCompatModeDialog != null) { + if (mCompatModeDialog.mAppInfo.packageName.equals( + ar.info.applicationInfo.packageName)) { + return; + } + mCompatModeDialog.dismiss(); + mCompatModeDialog = null; + } + if (ar != null) { + if (mCompatModePackages.getPackageAskCompatModeLocked( + ar.packageName)) { + int mode = mCompatModePackages.computeCompatModeLocked( + ar.info.applicationInfo); + if (mode == ActivityManager.COMPAT_MODE_DISABLED + || mode == ActivityManager.COMPAT_MODE_ENABLED) { + mCompatModeDialog = new CompatModeDialog( + ActivityManagerService.this, mContext, + ar.info.applicationInfo); + mCompatModeDialog.show(); + } + } + } + } + break; + } case DISPATCH_FOREGROUND_ACTIVITIES_CHANGED: { final ProcessRecord app = (ProcessRecord) msg.obj; final boolean foregroundActivities = msg.arg1 != 0; @@ -2112,6 +2142,18 @@ public final class ActivityManagerService extends ActivityManagerNative } } + public boolean getPackageAskScreenCompat(String packageName) { + synchronized (this) { + return mCompatModePackages.getPackageAskCompatModeLocked(packageName); + } + } + + public void setPackageAskScreenCompat(String packageName, boolean ask) { + synchronized (this) { + mCompatModePackages.setPackageAskCompatModeLocked(packageName, ask); + } + } + void reportResumedActivityLocked(ActivityRecord r) { //Slog.i(TAG, "**** REPORT RESUME: " + r); @@ -7948,8 +7990,14 @@ public final class ActivityManagerService extends ActivityManagerNative if (dumpAll) { pw.println(" mConfigWillChange: " + mMainStack.mConfigWillChange); if (mCompatModePackages.getPackages().size() > 0) { - pw.print(" mScreenCompatPackages="); - pw.println(mCompatModePackages.getPackages()); + pw.println(" mScreenCompatPackages:"); + for (Map.Entry<String, Integer> entry + : mCompatModePackages.getPackages().entrySet()) { + String pkg = entry.getKey(); + int mode = entry.getValue(); + pw.print(" "); pw.print(pkg); pw.print(": "); + pw.print(mode); pw.println(); + } } } pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown); diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index d5ac19eb46ba..af6930752772 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -485,6 +485,13 @@ final class ActivityStack { return null; } + final void showAskCompatModeDialogLocked(ActivityRecord r) { + Message msg = Message.obtain(); + msg.what = ActivityManagerService.SHOW_COMPAT_MODE_DIALOG_MSG; + msg.obj = r.task.askedCompatMode ? null : r; + mService.mHandler.sendMessage(msg); + } + final boolean realStartActivityLocked(ActivityRecord r, ProcessRecord app, boolean andResume, boolean checkConfig) throws RemoteException { @@ -541,6 +548,7 @@ final class ActivityStack { mService.ensurePackageDexOpt(r.intent.getComponent().getPackageName()); r.sleeping = false; r.forceNewConfig = false; + showAskCompatModeDialogLocked(r); app.thread.scheduleLaunchActivity(new Intent(r.intent), r, System.identityHashCode(r), r.info, mService.compatibilityInfoForPackageLocked(r.info.applicationInfo), @@ -1430,6 +1438,7 @@ final class ActivityStack { next.task.taskId, next.shortComponentName); next.sleeping = false; + showAskCompatModeDialogLocked(next); next.app.thread.scheduleResumeActivity(next, mService.isNextTransitionForward()); diff --git a/services/java/com/android/server/am/CompatModeDialog.java b/services/java/com/android/server/am/CompatModeDialog.java new file mode 100644 index 000000000000..0442bda40d51 --- /dev/null +++ b/services/java/com/android/server/am/CompatModeDialog.java @@ -0,0 +1,90 @@ +/* + * 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.am; + +import android.app.ActivityManager; +import android.app.Dialog; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.Switch; + +public class CompatModeDialog extends Dialog { + final ActivityManagerService mService; + final ApplicationInfo mAppInfo; + + final Switch mCompatEnabled; + final CheckBox mAlwaysShow; + final View mHint; + + public CompatModeDialog(ActivityManagerService service, Context context, + ApplicationInfo appInfo) { + super(context, com.android.internal.R.style.Theme_Holo_Dialog_MinWidth); + setCancelable(true); + setCanceledOnTouchOutside(true); + getWindow().requestFeature(Window.FEATURE_NO_TITLE); + getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE); + getWindow().setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL); + mService = service; + mAppInfo = appInfo; + + setContentView(com.android.internal.R.layout.am_compat_mode_dialog); + mCompatEnabled = (Switch)findViewById(com.android.internal.R.id.compat_checkbox); + mCompatEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + synchronized (mService) { + mService.mCompatModePackages.setPackageScreenCompatModeLocked( + mAppInfo.packageName, + mCompatEnabled.isChecked() ? ActivityManager.COMPAT_MODE_ENABLED + : ActivityManager.COMPAT_MODE_DISABLED); + updateControls(); + } + } + }); + mAlwaysShow = (CheckBox)findViewById(com.android.internal.R.id.ask_checkbox); + mAlwaysShow.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + synchronized (mService) { + mService.mCompatModePackages.setPackageAskCompatModeLocked( + mAppInfo.packageName, mAlwaysShow.isChecked()); + updateControls(); + } + } + }); + mHint = findViewById(com.android.internal.R.id.reask_hint); + + updateControls(); + } + + void updateControls() { + synchronized (mService) { + int mode = mService.mCompatModePackages.computeCompatModeLocked(mAppInfo); + mCompatEnabled.setChecked(mode == ActivityManager.COMPAT_MODE_ENABLED); + boolean ask = mService.mCompatModePackages.getPackageAskCompatModeLocked( + mAppInfo.packageName); + mAlwaysShow.setChecked(ask); + mHint.setVisibility(ask ? View.INVISIBLE : View.VISIBLE); + } + } +} diff --git a/services/java/com/android/server/am/CompatModePackages.java b/services/java/com/android/server/am/CompatModePackages.java index 1faf8da0f47f..1277bca5ed51 100644 --- a/services/java/com/android/server/am/CompatModePackages.java +++ b/services/java/com/android/server/am/CompatModePackages.java @@ -3,8 +3,10 @@ package com.android.server.am; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -31,7 +33,12 @@ public class CompatModePackages { private final ActivityManagerService mService; private final AtomicFile mFile; - private final HashSet<String> mPackages = new HashSet<String>(); + // Compatibility state: no longer ask user to select the mode. + public static final int COMPAT_FLAG_DONT_ASK = 1<<0; + // Compatibility state: compatibility mode is enabled. + public static final int COMPAT_FLAG_ENABLED = 1<<1; + + private final HashMap<String, Integer> mPackages = new HashMap<String, Integer>(); private static final int MSG_WRITE = 1; @@ -71,7 +78,15 @@ public class CompatModePackages { if ("pkg".equals(tagName)) { String pkg = parser.getAttributeValue(null, "name"); if (pkg != null) { - mPackages.add(pkg); + String mode = parser.getAttributeValue(null, "mode"); + int modeInt = 0; + if (mode != null) { + try { + modeInt = Integer.parseInt(mode); + } catch (NumberFormatException e) { + } + } + mPackages.put(pkg, modeInt); } } } @@ -93,17 +108,22 @@ public class CompatModePackages { } } - public HashSet<String> getPackages() { + public HashMap<String, Integer> getPackages() { return mPackages; } + private int getPackageFlags(String packageName) { + Integer flags = mPackages.get(packageName); + return flags != null ? flags : 0; + } + public CompatibilityInfo compatibilityInfoForPackageLocked(ApplicationInfo ai) { return new CompatibilityInfo(ai, mService.mConfiguration.screenLayout, - mPackages.contains(ai.packageName)); + (getPackageFlags(ai.packageName)&COMPAT_FLAG_ENABLED) != 0); } - private int computeCompatModeLocked(ApplicationInfo ai) { - boolean enabled = mPackages.contains(ai.packageName); + public int computeCompatModeLocked(ApplicationInfo ai) { + boolean enabled = (getPackageFlags(ai.packageName)&COMPAT_FLAG_ENABLED) != 0; CompatibilityInfo info = new CompatibilityInfo(ai, mService.mConfiguration.screenLayout, enabled); if (info.alwaysSupportsScreen()) { @@ -116,6 +136,40 @@ public class CompatModePackages { : ActivityManager.COMPAT_MODE_DISABLED; } + public boolean getFrontActivityAskCompatModeLocked() { + ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + if (r == null) { + return false; + } + return getPackageAskCompatModeLocked(r.packageName); + } + + public boolean getPackageAskCompatModeLocked(String packageName) { + return (getPackageFlags(packageName)&COMPAT_FLAG_DONT_ASK) == 0; + } + + public void setFrontActivityAskCompatModeLocked(boolean ask) { + ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); + if (r != null) { + setPackageAskCompatModeLocked(r.packageName, ask); + } + } + + public void setPackageAskCompatModeLocked(String packageName, boolean ask) { + int curFlags = getPackageFlags(packageName); + int newFlags = ask ? (curFlags&~COMPAT_FLAG_DONT_ASK) : (curFlags|COMPAT_FLAG_DONT_ASK); + if (curFlags != newFlags) { + if (newFlags != 0) { + mPackages.put(packageName, newFlags); + } else { + mPackages.remove(packageName); + } + mHandler.removeMessages(MSG_WRITE); + Message msg = mHandler.obtainMessage(MSG_WRITE); + mHandler.sendMessageDelayed(msg, 10000); + } + } + public int getFrontActivityScreenCompatModeLocked() { ActivityRecord r = mService.mMainStack.topRunningActivityLocked(null); if (r == null) { @@ -161,7 +215,8 @@ public class CompatModePackages { private void setPackageScreenCompatModeLocked(ApplicationInfo ai, int mode) { final String packageName = ai.packageName; - boolean changed = false; + int curFlags = getPackageFlags(packageName); + boolean enable; switch (mode) { case ActivityManager.COMPAT_MODE_DISABLED: @@ -171,24 +226,26 @@ public class CompatModePackages { enable = true; break; case ActivityManager.COMPAT_MODE_TOGGLE: - enable = !mPackages.contains(packageName); + enable = (curFlags&COMPAT_FLAG_ENABLED) == 0; break; default: Slog.w(TAG, "Unknown screen compat mode req #" + mode + "; ignoring"); return; } + + int newFlags = curFlags; if (enable) { - if (!mPackages.contains(packageName)) { - changed = true; - mPackages.add(packageName); - } + newFlags |= COMPAT_FLAG_ENABLED; } else { - if (mPackages.contains(packageName)) { - changed = true; + newFlags &= ~COMPAT_FLAG_ENABLED; + } + + if (newFlags != curFlags) { + if (newFlags != 0) { + mPackages.put(packageName, newFlags); + } else { mPackages.remove(packageName); } - } - if (changed) { CompatibilityInfo ci = compatibilityInfoForPackageLocked(ai); if (ci.alwaysSupportsScreen()) { Slog.w(TAG, "Ignoring compat mode change of " + packageName @@ -241,9 +298,9 @@ public class CompatModePackages { } void saveCompatModes() { - HashSet<String> pkgs; + HashMap<String, Integer> pkgs; synchronized (mService) { - pkgs = new HashSet<String>(mPackages); + pkgs = new HashMap<String, Integer>(mPackages); } FileOutputStream fos = null; @@ -258,9 +315,14 @@ public class CompatModePackages { final IPackageManager pm = AppGlobals.getPackageManager(); final int screenLayout = mService.mConfiguration.screenLayout; - final Iterator<String> it = pkgs.iterator(); + final Iterator<Map.Entry<String, Integer>> it = pkgs.entrySet().iterator(); while (it.hasNext()) { - String pkg = it.next(); + Map.Entry<String, Integer> entry = it.next(); + String pkg = entry.getKey(); + int mode = entry.getValue(); + if (mode == 0) { + continue; + } ApplicationInfo ai = null; try { ai = pm.getApplicationInfo(pkg, 0); @@ -278,6 +340,7 @@ public class CompatModePackages { } out.startTag(null, "pkg"); out.attribute(null, "name", pkg); + out.attribute(null, "mode", Integer.toString(mode)); out.endTag(null, "pkg"); } diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java index e8c87e130ea8..e61a7f4e10d3 100644 --- a/services/java/com/android/server/am/TaskRecord.java +++ b/services/java/com/android/server/am/TaskRecord.java @@ -34,6 +34,7 @@ class TaskRecord extends ThumbnailHolder { long lastActiveTime; // Last time this task was active, including sleep. boolean rootWasReset; // True if the intent at the root of the task had // the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag. + boolean askedCompatMode;// Have asked the user about compat mode for this task. String stringName; // caching of toString() result. @@ -112,6 +113,9 @@ class TaskRecord extends ThumbnailHolder { pw.print(prefix); pw.print("realActivity="); pw.println(realActivity.flattenToShortString()); } + if (!askedCompatMode) { + pw.print(prefix); pw.print("askedCompatMode="); pw.println(askedCompatMode); + } pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime); pw.print(" (inactive for "); pw.print((getInactiveDuration()/1000)); pw.println("s)"); diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java new file mode 100644 index 000000000000..3791cc40d191 --- /dev/null +++ b/services/java/com/android/server/usb/UsbDeviceManager.java @@ -0,0 +1,431 @@ +/* + * 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 an + * limitations under the License. + */ + +package com.android.server.usb; + +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.hardware.usb.UsbAccessory; +import android.hardware.usb.UsbManager; +import android.net.Uri; +import android.os.Binder; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.os.ParcelFileDescriptor; +import android.os.UEventObserver; +import android.provider.Settings; +import android.util.Log; +import android.util.Slog; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; + +/** + * UsbDeviceManager manages USB state in device mode. + */ +public class UsbDeviceManager { + private static final String TAG = UsbDeviceManager.class.getSimpleName(); + private static final boolean LOG = false; + + private static final String USB_CONNECTED_MATCH = + "DEVPATH=/devices/virtual/switch/usb_connected"; + private static final String USB_CONFIGURATION_MATCH = + "DEVPATH=/devices/virtual/switch/usb_configuration"; + private static final String USB_FUNCTIONS_MATCH = + "DEVPATH=/devices/virtual/usb_composite/"; + private static final String USB_CONNECTED_PATH = + "/sys/class/switch/usb_connected/state"; + private static final String USB_CONFIGURATION_PATH = + "/sys/class/switch/usb_configuration/state"; + private static final String USB_COMPOSITE_CLASS_PATH = + "/sys/class/usb_composite"; + + private static final int MSG_UPDATE_STATE = 0; + private static final int MSG_FUNCTION_ENABLED = 1; + private static final int MSG_FUNCTION_DISABLED = 2; + + // Delay for debouncing USB disconnects. + // We often get rapid connect/disconnect events when enabling USB functions, + // which need debouncing. + private static final int UPDATE_DELAY = 1000; + + // current connected and configuration state + private int mConnected; + private int mConfiguration; + + // last broadcasted connected and configuration state + private int mLastConnected = -1; + private int mLastConfiguration = -1; + + // lists of enabled and disabled USB functions + private final ArrayList<String> mEnabledFunctions = new ArrayList<String>(); + private final ArrayList<String> mDisabledFunctions = new ArrayList<String>(); + + private boolean mSystemReady; + + private UsbAccessory mCurrentAccessory; + // USB functions that are enabled by default, to restore after exiting accessory mode + private final ArrayList<String> mDefaultFunctions = new ArrayList<String>(); + + private final Context mContext; + private final Object mLock = new Object(); + private final UsbSettingsManager mSettingsManager; + private final boolean mHasUsbAccessory; + + private final void readCurrentAccessoryLocked() { + if (mHasUsbAccessory) { + String[] strings = nativeGetAccessoryStrings(); + if (strings != null) { + mCurrentAccessory = new UsbAccessory(strings); + Log.d(TAG, "entering USB accessory mode: " + mCurrentAccessory); + if (mSystemReady) { + mSettingsManager.accessoryAttached(mCurrentAccessory); + } + } else { + Log.e(TAG, "nativeGetAccessoryStrings failed"); + } + } + } + + /* + * Handles USB function enable/disable events + */ + private final void functionEnabledLocked(String function, boolean enabled) { + if (enabled) { + if (!mEnabledFunctions.contains(function)) { + mEnabledFunctions.add(function); + } + mDisabledFunctions.remove(function); + + if (UsbManager.USB_FUNCTION_ACCESSORY.equals(function)) { + readCurrentAccessoryLocked(); + } + } else { + if (!mDisabledFunctions.contains(function)) { + mDisabledFunctions.add(function); + } + mEnabledFunctions.remove(function); + } + } + + /* + * Listens for uevent messages from the kernel to monitor the USB state + */ + private final UEventObserver mUEventObserver = new UEventObserver() { + @Override + public void onUEvent(UEventObserver.UEvent event) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Slog.v(TAG, "USB UEVENT: " + event.toString()); + } + + synchronized (mLock) { + String name = event.get("SWITCH_NAME"); + String state = event.get("SWITCH_STATE"); + if (name != null && state != null) { + try { + int intState = Integer.parseInt(state); + if ("usb_connected".equals(name)) { + mConnected = intState; + // trigger an Intent broadcast + if (mSystemReady) { + // debounce disconnects to avoid problems bringing up USB tethering + update(mConnected == 0); + } + } else if ("usb_configuration".equals(name)) { + mConfiguration = intState; + // trigger an Intent broadcast + if (mSystemReady) { + update(mConnected == 0); + } + } + } catch (NumberFormatException e) { + Slog.e(TAG, "Could not parse switch state from event " + event); + } + } else { + String function = event.get("FUNCTION"); + String enabledStr = event.get("ENABLED"); + if (function != null && enabledStr != null) { + // Note: we do not broadcast a change when a function is enabled or disabled. + // We just record the state change for the next broadcast. + int what = ("1".equals(enabledStr) ? + MSG_FUNCTION_ENABLED : MSG_FUNCTION_DISABLED); + Message msg = Message.obtain(mHandler, what); + msg.obj = function; + mHandler.sendMessage(msg); + } + } + } + } + }; + + private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + // handle accessories attached at boot time + synchronized (mLock) { + if (mCurrentAccessory != null) { + mSettingsManager.accessoryAttached(mCurrentAccessory); + } + } + } + }; + + public UsbDeviceManager(Context context, UsbSettingsManager settingsManager) { + mContext = context; + mSettingsManager = settingsManager; + PackageManager pm = mContext.getPackageManager(); + mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY); + + synchronized (mLock) { + init(); // set initial status + + // Watch for USB configuration changes + if (mConfiguration >= 0) { + mUEventObserver.startObserving(USB_CONNECTED_MATCH); + mUEventObserver.startObserving(USB_CONFIGURATION_MATCH); + mUEventObserver.startObserving(USB_FUNCTIONS_MATCH); + } + } + } + + private final void init() { + char[] buffer = new char[1024]; + boolean inAccessoryMode = false; + + // Read initial USB state + mConfiguration = -1; + try { + FileReader file = new FileReader(USB_CONNECTED_PATH); + int len = file.read(buffer, 0, 1024); + file.close(); + mConnected = Integer.valueOf((new String(buffer, 0, len)).trim()); + + file = new FileReader(USB_CONFIGURATION_PATH); + len = file.read(buffer, 0, 1024); + file.close(); + mConfiguration = Integer.valueOf((new String(buffer, 0, len)).trim()); + + } catch (FileNotFoundException e) { + Slog.i(TAG, "This kernel does not have USB configuration switch support"); + } catch (Exception e) { + Slog.e(TAG, "" , e); + } + if (mConfiguration < 0) { + // This may happen in the emulator or devices without USB device mode support + return; + } + + // Read initial list of enabled and disabled functions (device mode) + try { + File[] files = new File(USB_COMPOSITE_CLASS_PATH).listFiles(); + for (int i = 0; i < files.length; i++) { + File file = new File(files[i], "enable"); + FileReader reader = new FileReader(file); + int len = reader.read(buffer, 0, 1024); + reader.close(); + int value = Integer.valueOf((new String(buffer, 0, len)).trim()); + String functionName = files[i].getName(); + if (value == 1) { + mEnabledFunctions.add(functionName); + if (UsbManager.USB_FUNCTION_ACCESSORY.equals(functionName)) { + // The USB accessory driver is on by default, but it might have been + // enabled before the USB service has initialized. + inAccessoryMode = true; + } else if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) { + // adb is enabled/disabled automatically by the adbd daemon, + // so don't treat it as a default function. + mDefaultFunctions.add(functionName); + } + } else { + mDisabledFunctions.add(functionName); + } + } + } catch (FileNotFoundException e) { + Slog.w(TAG, "This kernel does not have USB composite class support"); + } catch (Exception e) { + Slog.e(TAG, "" , e); + } + + // handle the case where an accessory switched the driver to accessory mode + // before the framework finished booting + if (inAccessoryMode) { + readCurrentAccessoryLocked(); + + // FIXME - if we booted in accessory mode, then we have no way to figure out + // which functions are enabled by default. + // For now, assume that MTP or mass storage are the only possibilities + if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MTP)) { + mDefaultFunctions.add(UsbManager.USB_FUNCTION_MTP); + } else if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MASS_STORAGE)) { + mDefaultFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE); + } + } + } + + public void systemReady() { + synchronized (mLock) { + update(false); + if (mCurrentAccessory != null) { + Log.d(TAG, "accessoryAttached at systemReady"); + // its still too early to handle accessories, so add a BOOT_COMPLETED receiver + // to handle this later. + mContext.registerReceiver(mBootCompletedReceiver, + new IntentFilter(Intent.ACTION_BOOT_COMPLETED)); + } + mSystemReady = true; + } + } + + /* + * Sends a message to update the USB connected and configured state (device mode). + * If delayed is true, then we add a small delay in sending the message to debounce + * the USB connection when enabling USB tethering. + */ + private final void update(boolean delayed) { + mHandler.removeMessages(MSG_UPDATE_STATE); + mHandler.sendEmptyMessageDelayed(MSG_UPDATE_STATE, delayed ? UPDATE_DELAY : 0); + } + + /* returns the currently attached USB accessory (device mode) */ + public UsbAccessory getCurrentAccessory() { + return mCurrentAccessory; + } + + /* opens the currently attached USB accessory (device mode) */ + public ParcelFileDescriptor openAccessory(UsbAccessory accessory) { + synchronized (mLock) { + if (mCurrentAccessory == null) { + throw new IllegalArgumentException("no accessory attached"); + } + if (!mCurrentAccessory.equals(accessory)) { + Log.e(TAG, accessory.toString() + " does not match current accessory " + + mCurrentAccessory); + throw new IllegalArgumentException("accessory not attached"); + } + mSettingsManager.checkPermission(mCurrentAccessory); + return nativeOpenAccessory(); + } + } + + /* + * This handler is for deferred handling of events related to device mode and accessories. + */ + private final Handler mHandler = new Handler() { + private void addEnabledFunctionsLocked(Intent intent) { + // include state of all USB functions in our extras + for (int i = 0; i < mEnabledFunctions.size(); i++) { + intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED); + } + for (int i = 0; i < mDisabledFunctions.size(); i++) { + intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED); + } + } + + @Override + public void handleMessage(Message msg) { + synchronized (mLock) { + switch (msg.what) { + case MSG_UPDATE_STATE: + if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) { + if (mConnected == 0) { + if (UsbManager.isFunctionEnabled( + UsbManager.USB_FUNCTION_ACCESSORY)) { + // make sure accessory mode is off, and restore default functions + Log.d(TAG, "exited USB accessory mode"); + if (!UsbManager.setFunctionEnabled + (UsbManager.USB_FUNCTION_ACCESSORY, false)) { + Log.e(TAG, "could not disable accessory function"); + } + int count = mDefaultFunctions.size(); + for (int i = 0; i < count; i++) { + String function = mDefaultFunctions.get(i); + if (!UsbManager.setFunctionEnabled(function, true)) { + Log.e(TAG, "could not reenable function " + function); + } + } + + if (mCurrentAccessory != null) { + mSettingsManager.accessoryDetached(mCurrentAccessory); + mCurrentAccessory = null; + } + } + } + + final ContentResolver cr = mContext.getContentResolver(); + if (Settings.Secure.getInt(cr, + Settings.Secure.DEVICE_PROVISIONED, 0) == 0) { + Slog.i(TAG, "Device not provisioned, skipping USB broadcast"); + return; + } + + mLastConnected = mConnected; + mLastConfiguration = mConfiguration; + + // send a sticky broadcast containing current USB state + Intent intent = new Intent(UsbManager.ACTION_USB_STATE); + intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); + intent.putExtra(UsbManager.USB_CONNECTED, mConnected != 0); + intent.putExtra(UsbManager.USB_CONFIGURATION, mConfiguration); + addEnabledFunctionsLocked(intent); + mContext.sendStickyBroadcast(intent); + } + break; + case MSG_FUNCTION_ENABLED: + case MSG_FUNCTION_DISABLED: + functionEnabledLocked((String)msg.obj, msg.what == MSG_FUNCTION_ENABLED); + break; + } + } + } + }; + + public void dump(FileDescriptor fd, PrintWriter pw) { + synchronized (mLock) { + pw.println(" USB Device State:"); + pw.print(" Enabled Functions: "); + for (int i = 0; i < mEnabledFunctions.size(); i++) { + pw.print(mEnabledFunctions.get(i) + " "); + } + pw.println(""); + pw.print(" Disabled Functions: "); + for (int i = 0; i < mDisabledFunctions.size(); i++) { + pw.print(mDisabledFunctions.get(i) + " "); + } + pw.println(""); + pw.print(" Default Functions: "); + for (int i = 0; i < mDefaultFunctions.size(); i++) { + pw.print(mDefaultFunctions.get(i) + " "); + } + pw.println(""); + pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration); + pw.println(" mCurrentAccessory: " + mCurrentAccessory); + } + } + + private native String[] nativeGetAccessoryStrings(); + private native ParcelFileDescriptor nativeOpenAccessory(); +} diff --git a/services/java/com/android/server/usb/UsbHostManager.java b/services/java/com/android/server/usb/UsbHostManager.java new file mode 100644 index 000000000000..923b0494f597 --- /dev/null +++ b/services/java/com/android/server/usb/UsbHostManager.java @@ -0,0 +1,222 @@ +/* + * 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 an + * limitations under the License. + */ + +package com.android.server.usb; + +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.hardware.usb.IUsbManager; +import android.hardware.usb.UsbConstants; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbEndpoint; +import android.hardware.usb.UsbInterface; +import android.hardware.usb.UsbManager; +import android.net.Uri; +import android.os.Binder; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.os.ParcelFileDescriptor; +import android.os.UEventObserver; +import android.provider.Settings; +import android.util.Log; +import android.util.Slog; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileReader; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.List; + +/** + * UsbHostManager manages USB state in host mode. + */ +public class UsbHostManager { + private static final String TAG = UsbHostManager.class.getSimpleName(); + private static final boolean LOG = false; + + // contains all connected USB devices + private final HashMap<String,UsbDevice> mDevices = new HashMap<String,UsbDevice>(); + + // USB busses to exclude from USB host support + private final String[] mHostBlacklist; + + private final Context mContext; + private final Object mLock = new Object(); + private final UsbSettingsManager mSettingsManager; + + public UsbHostManager(Context context, UsbSettingsManager settingsManager) { + mContext = context; + mSettingsManager = settingsManager; + mHostBlacklist = context.getResources().getStringArray( + com.android.internal.R.array.config_usbHostBlacklist); + } + + private boolean isBlackListed(String deviceName) { + int count = mHostBlacklist.length; + for (int i = 0; i < count; i++) { + if (deviceName.startsWith(mHostBlacklist[i])) { + return true; + } + } + return false; + } + + /* returns true if the USB device should not be accessible by applications */ + private boolean isBlackListed(int clazz, int subClass, int protocol) { + // blacklist hubs + if (clazz == UsbConstants.USB_CLASS_HUB) return true; + + // blacklist HID boot devices (mouse and keyboard) + if (clazz == UsbConstants.USB_CLASS_HID && + subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) { + return true; + } + + return false; + } + + /* Called from JNI in monitorUsbHostBus() to report new USB devices */ + private void usbDeviceAdded(String deviceName, int vendorID, int productID, + int deviceClass, int deviceSubclass, int deviceProtocol, + /* array of quintuples containing id, class, subclass, protocol + and number of endpoints for each interface */ + int[] interfaceValues, + /* array of quadruples containing address, attributes, max packet size + and interval for each endpoint */ + int[] endpointValues) { + + if (isBlackListed(deviceName) || + isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) { + return; + } + + synchronized (mLock) { + if (mDevices.get(deviceName) != null) { + Log.w(TAG, "device already on mDevices list: " + deviceName); + return; + } + + int numInterfaces = interfaceValues.length / 5; + Parcelable[] interfaces = new UsbInterface[numInterfaces]; + try { + // repackage interfaceValues as an array of UsbInterface + int intf, endp, ival = 0, eval = 0; + for (intf = 0; intf < numInterfaces; intf++) { + int interfaceId = interfaceValues[ival++]; + int interfaceClass = interfaceValues[ival++]; + int interfaceSubclass = interfaceValues[ival++]; + int interfaceProtocol = interfaceValues[ival++]; + int numEndpoints = interfaceValues[ival++]; + + Parcelable[] endpoints = new UsbEndpoint[numEndpoints]; + for (endp = 0; endp < numEndpoints; endp++) { + int address = endpointValues[eval++]; + int attributes = endpointValues[eval++]; + int maxPacketSize = endpointValues[eval++]; + int interval = endpointValues[eval++]; + endpoints[endp] = new UsbEndpoint(address, attributes, + maxPacketSize, interval); + } + + // don't allow if any interfaces are blacklisted + if (isBlackListed(interfaceClass, interfaceSubclass, interfaceProtocol)) { + return; + } + interfaces[intf] = new UsbInterface(interfaceId, interfaceClass, + interfaceSubclass, interfaceProtocol, endpoints); + } + } catch (Exception e) { + // beware of index out of bound exceptions, which might happen if + // a device does not set bNumEndpoints correctly + Log.e(TAG, "error parsing USB descriptors", e); + return; + } + + UsbDevice device = new UsbDevice(deviceName, vendorID, productID, + deviceClass, deviceSubclass, deviceProtocol, interfaces); + mDevices.put(deviceName, device); + mSettingsManager.deviceAttached(device); + } + } + + /* Called from JNI in monitorUsbHostBus to report USB device removal */ + private void usbDeviceRemoved(String deviceName) { + synchronized (mLock) { + UsbDevice device = mDevices.remove(deviceName); + if (device != null) { + mSettingsManager.deviceDetached(device); + } + } + } + + public void systemReady() { + synchronized (mLock) { + // Create a thread to call into native code to wait for USB host events. + // This thread will call us back on usbDeviceAdded and usbDeviceRemoved. + Runnable runnable = new Runnable() { + public void run() { + monitorUsbHostBus(); + } + }; + new Thread(null, runnable, "UsbService host thread").start(); + } + } + + /* Returns a list of all currently attached USB devices */ + public void getDeviceList(Bundle devices) { + synchronized (mLock) { + for (String name : mDevices.keySet()) { + devices.putParcelable(name, mDevices.get(name)); + } + } + } + + /* Opens the specified USB device */ + public ParcelFileDescriptor openDevice(String deviceName) { + synchronized (mLock) { + if (isBlackListed(deviceName)) { + throw new SecurityException("USB device is on a restricted bus"); + } + UsbDevice device = mDevices.get(deviceName); + if (device == null) { + // if it is not in mDevices, it either does not exist or is blacklisted + throw new IllegalArgumentException( + "device " + deviceName + " does not exist or is restricted"); + } + mSettingsManager.checkPermission(device); + return nativeOpenDevice(deviceName); + } + } + + public void dump(FileDescriptor fd, PrintWriter pw) { + synchronized (mLock) { + pw.println(" USB Host State:"); + for (String name : mDevices.keySet()) { + pw.println(" " + name + ": " + mDevices.get(name)); + } + } + } + + private native void monitorUsbHostBus(); + private native ParcelFileDescriptor nativeOpenDevice(String deviceName); +} diff --git a/services/java/com/android/server/usb/UsbService.java b/services/java/com/android/server/usb/UsbService.java index a151af07f8c2..21e5997c8674 100644 --- a/services/java/com/android/server/usb/UsbService.java +++ b/services/java/com/android/server/usb/UsbService.java @@ -10,608 +10,142 @@ * 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 + * See the License for the specific language governing permissions an * limitations under the License. */ package com.android.server.usb; import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.ContentResolver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.hardware.usb.IUsbManager; import android.hardware.usb.UsbAccessory; -import android.hardware.usb.UsbConstants; import android.hardware.usb.UsbDevice; -import android.hardware.usb.UsbEndpoint; -import android.hardware.usb.UsbInterface; -import android.hardware.usb.UsbManager; import android.net.Uri; import android.os.Binder; import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.os.Parcelable; import android.os.ParcelFileDescriptor; -import android.os.UEventObserver; -import android.provider.Settings; -import android.util.Log; -import android.util.Slog; import java.io.File; import java.io.FileDescriptor; -import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; /** - * UsbService monitors for changes to USB state. - * This includes code for both USB host support (where the android device is the host) - * as well as USB device support (android device is connected to a USB host). - * Accessory mode is a special case of USB device mode, where the android device is - * connected to a USB host that supports the android accessory protocol. + * UsbService manages all USB related state, including both host and device support. + * Host related events and calls are delegated to UsbHostManager, and device related + * support is delegated to UsbDeviceManager. */ public class UsbService extends IUsbManager.Stub { - private static final String TAG = UsbService.class.getSimpleName(); - private static final boolean LOG = false; - - private static final String USB_CONNECTED_MATCH = - "DEVPATH=/devices/virtual/switch/usb_connected"; - private static final String USB_CONFIGURATION_MATCH = - "DEVPATH=/devices/virtual/switch/usb_configuration"; - private static final String USB_FUNCTIONS_MATCH = - "DEVPATH=/devices/virtual/usb_composite/"; - private static final String USB_CONNECTED_PATH = - "/sys/class/switch/usb_connected/state"; - private static final String USB_CONFIGURATION_PATH = - "/sys/class/switch/usb_configuration/state"; - private static final String USB_COMPOSITE_CLASS_PATH = - "/sys/class/usb_composite"; - - private static final int MSG_UPDATE_STATE = 0; - private static final int MSG_FUNCTION_ENABLED = 1; - private static final int MSG_FUNCTION_DISABLED = 2; - - // Delay for debouncing USB disconnects. - // We often get rapid connect/disconnect events when enabling USB functions, - // which need debouncing. - private static final int UPDATE_DELAY = 1000; - - // current connected and configuration state - private int mConnected; - private int mConfiguration; - - // last broadcasted connected and configuration state - private int mLastConnected = -1; - private int mLastConfiguration = -1; - - // lists of enabled and disabled USB functions (for USB device mode) - private final ArrayList<String> mEnabledFunctions = new ArrayList<String>(); - private final ArrayList<String> mDisabledFunctions = new ArrayList<String>(); - - // contains all connected USB devices (for USB host mode) - private final HashMap<String,UsbDevice> mDevices = new HashMap<String,UsbDevice>(); - - // USB busses to exclude from USB host support - private final String[] mHostBlacklist; - - private boolean mSystemReady; - - private UsbAccessory mCurrentAccessory; - // USB functions that are enabled by default, to restore after exiting accessory mode - private final ArrayList<String> mDefaultFunctions = new ArrayList<String>(); - private final Context mContext; - private final Object mLock = new Object(); - private final UsbDeviceSettingsManager mDeviceManager; - private final boolean mHasUsbHost; - private final boolean mHasUsbAccessory; + private UsbDeviceManager mDeviceManager; + private UsbHostManager mHostManager; + private final UsbSettingsManager mSettingsManager; - private final void readCurrentAccessoryLocked() { - if (mHasUsbAccessory) { - String[] strings = nativeGetAccessoryStrings(); - if (strings != null) { - mCurrentAccessory = new UsbAccessory(strings); - Log.d(TAG, "entering USB accessory mode: " + mCurrentAccessory); - if (mSystemReady) { - mDeviceManager.accessoryAttached(mCurrentAccessory); - } - } else { - Log.e(TAG, "nativeGetAccessoryStrings failed"); - } - } - } - - /* - * Handles USB function enable/disable events (device mode) - */ - private final void functionEnabledLocked(String function, boolean enabled) { - if (enabled) { - if (!mEnabledFunctions.contains(function)) { - mEnabledFunctions.add(function); - } - mDisabledFunctions.remove(function); - - if (UsbManager.USB_FUNCTION_ACCESSORY.equals(function)) { - readCurrentAccessoryLocked(); - } - } else { - if (!mDisabledFunctions.contains(function)) { - mDisabledFunctions.add(function); - } - mEnabledFunctions.remove(function); - } - } - - /* - * Listens for uevent messages from the kernel to monitor the USB state (device mode) - */ - private final UEventObserver mUEventObserver = new UEventObserver() { - @Override - public void onUEvent(UEventObserver.UEvent event) { - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Slog.v(TAG, "USB UEVENT: " + event.toString()); - } - - synchronized (mLock) { - String name = event.get("SWITCH_NAME"); - String state = event.get("SWITCH_STATE"); - if (name != null && state != null) { - try { - int intState = Integer.parseInt(state); - if ("usb_connected".equals(name)) { - mConnected = intState; - // trigger an Intent broadcast - if (mSystemReady) { - // debounce disconnects to avoid problems bringing up USB tethering - update(mConnected == 0); - } - } else if ("usb_configuration".equals(name)) { - mConfiguration = intState; - // trigger an Intent broadcast - if (mSystemReady) { - update(mConnected == 0); - } - } - } catch (NumberFormatException e) { - Slog.e(TAG, "Could not parse switch state from event " + event); - } - } else { - String function = event.get("FUNCTION"); - String enabledStr = event.get("ENABLED"); - if (function != null && enabledStr != null) { - // Note: we do not broadcast a change when a function is enabled or disabled. - // We just record the state change for the next broadcast. - int what = ("1".equals(enabledStr) ? - MSG_FUNCTION_ENABLED : MSG_FUNCTION_DISABLED); - Message msg = Message.obtain(mHandler, what); - msg.obj = function; - mHandler.sendMessage(msg); - } - } - } - } - }; - - private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() { - public void onReceive(Context context, Intent intent) { - // handle accessories attached at boot time - synchronized (mLock) { - if (mCurrentAccessory != null) { - mDeviceManager.accessoryAttached(mCurrentAccessory); - } - } - } - }; public UsbService(Context context) { mContext = context; - mDeviceManager = new UsbDeviceSettingsManager(context); + mSettingsManager = new UsbSettingsManager(context); PackageManager pm = mContext.getPackageManager(); - mHasUsbHost = pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST); - mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY); - - mHostBlacklist = context.getResources().getStringArray( - com.android.internal.R.array.config_usbHostBlacklist); - - synchronized (mLock) { - init(); // set initial status - - // Watch for USB configuration changes - if (mConfiguration >= 0) { - mUEventObserver.startObserving(USB_CONNECTED_MATCH); - mUEventObserver.startObserving(USB_CONFIGURATION_MATCH); - mUEventObserver.startObserving(USB_FUNCTIONS_MATCH); - } - } - } - - private final void init() { - char[] buffer = new char[1024]; - boolean inAccessoryMode = false; - - // Read initial USB state (device mode) - mConfiguration = -1; - try { - FileReader file = new FileReader(USB_CONNECTED_PATH); - int len = file.read(buffer, 0, 1024); - file.close(); - mConnected = Integer.valueOf((new String(buffer, 0, len)).trim()); - - file = new FileReader(USB_CONFIGURATION_PATH); - len = file.read(buffer, 0, 1024); - file.close(); - mConfiguration = Integer.valueOf((new String(buffer, 0, len)).trim()); - - } catch (FileNotFoundException e) { - Slog.i(TAG, "This kernel does not have USB configuration switch support"); - } catch (Exception e) { - Slog.e(TAG, "" , e); - } - if (mConfiguration < 0) { - // This may happen in the emulator or devices without USB device mode support - return; - } - - // Read initial list of enabled and disabled functions (device mode) - try { - File[] files = new File(USB_COMPOSITE_CLASS_PATH).listFiles(); - for (int i = 0; i < files.length; i++) { - File file = new File(files[i], "enable"); - FileReader reader = new FileReader(file); - int len = reader.read(buffer, 0, 1024); - reader.close(); - int value = Integer.valueOf((new String(buffer, 0, len)).trim()); - String functionName = files[i].getName(); - if (value == 1) { - mEnabledFunctions.add(functionName); - if (UsbManager.USB_FUNCTION_ACCESSORY.equals(functionName)) { - // The USB accessory driver is on by default, but it might have been - // enabled before the USB service has initialized. - inAccessoryMode = true; - } else if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) { - // adb is enabled/disabled automatically by the adbd daemon, - // so don't treat it as a default function. - mDefaultFunctions.add(functionName); - } - } else { - mDisabledFunctions.add(functionName); - } - } - } catch (FileNotFoundException e) { - Slog.w(TAG, "This kernel does not have USB composite class support"); - } catch (Exception e) { - Slog.e(TAG, "" , e); + if (pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) { + mHostManager = new UsbHostManager(context, mSettingsManager); } - - // handle the case where an accessory switched the driver to accessory mode - // before the framework finished booting - if (inAccessoryMode) { - readCurrentAccessoryLocked(); - - // FIXME - if we booted in accessory mode, then we have no way to figure out - // which functions are enabled by default. - // For now, assume that MTP or mass storage are the only possibilities - if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MTP)) { - mDefaultFunctions.add(UsbManager.USB_FUNCTION_MTP); - } else if (mDisabledFunctions.contains(UsbManager.USB_FUNCTION_MASS_STORAGE)) { - mDefaultFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE); - } - } - } - - private boolean isBlackListed(String deviceName) { - int count = mHostBlacklist.length; - for (int i = 0; i < count; i++) { - if (deviceName.startsWith(mHostBlacklist[i])) { - return true; - } + if (new File("/sys/class/usb_composite").exists()) { + mDeviceManager = new UsbDeviceManager(context, mSettingsManager); } - return false; - } - - /* returns true if the USB device should not be accessible by applications (host mode) */ - private boolean isBlackListed(int clazz, int subClass, int protocol) { - // blacklist hubs - if (clazz == UsbConstants.USB_CLASS_HUB) return true; - - // blacklist HID boot devices (mouse and keyboard) - if (clazz == UsbConstants.USB_CLASS_HID && - subClass == UsbConstants.USB_INTERFACE_SUBCLASS_BOOT) { - return true; - } - - return false; - } - - /* Called from JNI in monitorUsbHostBus() to report new USB devices (host mode) */ - private void usbDeviceAdded(String deviceName, int vendorID, int productID, - int deviceClass, int deviceSubclass, int deviceProtocol, - /* array of quintuples containing id, class, subclass, protocol - and number of endpoints for each interface */ - int[] interfaceValues, - /* array of quadruples containing address, attributes, max packet size - and interval for each endpoint */ - int[] endpointValues) { - - if (isBlackListed(deviceName) || - isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) { - return; - } - - synchronized (mLock) { - if (mDevices.get(deviceName) != null) { - Log.w(TAG, "device already on mDevices list: " + deviceName); - return; - } - - int numInterfaces = interfaceValues.length / 5; - Parcelable[] interfaces = new UsbInterface[numInterfaces]; - try { - // repackage interfaceValues as an array of UsbInterface - int intf, endp, ival = 0, eval = 0; - for (intf = 0; intf < numInterfaces; intf++) { - int interfaceId = interfaceValues[ival++]; - int interfaceClass = interfaceValues[ival++]; - int interfaceSubclass = interfaceValues[ival++]; - int interfaceProtocol = interfaceValues[ival++]; - int numEndpoints = interfaceValues[ival++]; - - Parcelable[] endpoints = new UsbEndpoint[numEndpoints]; - for (endp = 0; endp < numEndpoints; endp++) { - int address = endpointValues[eval++]; - int attributes = endpointValues[eval++]; - int maxPacketSize = endpointValues[eval++]; - int interval = endpointValues[eval++]; - endpoints[endp] = new UsbEndpoint(address, attributes, - maxPacketSize, interval); - } - - // don't allow if any interfaces are blacklisted - if (isBlackListed(interfaceClass, interfaceSubclass, interfaceProtocol)) { - return; - } - interfaces[intf] = new UsbInterface(interfaceId, interfaceClass, - interfaceSubclass, interfaceProtocol, endpoints); - } - } catch (Exception e) { - // beware of index out of bound exceptions, which might happen if - // a device does not set bNumEndpoints correctly - Log.e(TAG, "error parsing USB descriptors", e); - return; - } - - UsbDevice device = new UsbDevice(deviceName, vendorID, productID, - deviceClass, deviceSubclass, deviceProtocol, interfaces); - mDevices.put(deviceName, device); - mDeviceManager.deviceAttached(device); - } - } - - /* Called from JNI in monitorUsbHostBus to report USB device removal (host mode) */ - private void usbDeviceRemoved(String deviceName) { - synchronized (mLock) { - UsbDevice device = mDevices.remove(deviceName); - if (device != null) { - mDeviceManager.deviceDetached(device); - } - } - } - - private void initHostSupport() { - // Create a thread to call into native code to wait for USB host events. - // This thread will call us back on usbDeviceAdded and usbDeviceRemoved. - Runnable runnable = new Runnable() { - public void run() { - monitorUsbHostBus(); - } - }; - new Thread(null, runnable, "UsbService host thread").start(); } public void systemReady() { - synchronized (mLock) { - if (mHasUsbHost) { - // start monitoring for connected USB devices - initHostSupport(); - } - - update(false); - if (mCurrentAccessory != null) { - Log.d(TAG, "accessoryAttached at systemReady"); - // its still too early to handle accessories, so add a BOOT_COMPLETED receiver - // to handle this later. - mContext.registerReceiver(mBootCompletedReceiver, - new IntentFilter(Intent.ACTION_BOOT_COMPLETED)); - } - mSystemReady = true; + if (mDeviceManager != null) { + mDeviceManager.systemReady(); + } + if (mHostManager != null) { + mHostManager.systemReady(); } - } - - /* - * Sends a message to update the USB connected and configured state (device mode). - * If delayed is true, then we add a small delay in sending the message to debounce - * the USB connection when enabling USB tethering. - */ - private final void update(boolean delayed) { - mHandler.removeMessages(MSG_UPDATE_STATE); - mHandler.sendEmptyMessageDelayed(MSG_UPDATE_STATE, delayed ? UPDATE_DELAY : 0); } /* Returns a list of all currently attached USB devices (host mdoe) */ public void getDeviceList(Bundle devices) { - synchronized (mLock) { - for (String name : mDevices.keySet()) { - devices.putParcelable(name, mDevices.get(name)); - } + if (mHostManager != null) { + mHostManager.getDeviceList(devices); } } /* Opens the specified USB device (host mode) */ public ParcelFileDescriptor openDevice(String deviceName) { - synchronized (mLock) { - if (isBlackListed(deviceName)) { - throw new SecurityException("USB device is on a restricted bus"); - } - UsbDevice device = mDevices.get(deviceName); - if (device == null) { - // if it is not in mDevices, it either does not exist or is blacklisted - throw new IllegalArgumentException( - "device " + deviceName + " does not exist or is restricted"); - } - mDeviceManager.checkPermission(device); - return nativeOpenDevice(deviceName); + if (mHostManager != null) { + return mHostManager.openDevice(deviceName); + } else { + return null; } } /* returns the currently attached USB accessory (device mode) */ public UsbAccessory getCurrentAccessory() { - return mCurrentAccessory; + if (mDeviceManager != null) { + return mDeviceManager.getCurrentAccessory(); + } else { + return null; + } } /* opens the currently attached USB accessory (device mode) */ public ParcelFileDescriptor openAccessory(UsbAccessory accessory) { - synchronized (mLock) { - if (mCurrentAccessory == null) { - throw new IllegalArgumentException("no accessory attached"); - } - if (!mCurrentAccessory.equals(accessory)) { - Log.e(TAG, accessory.toString() + " does not match current accessory " - + mCurrentAccessory); - throw new IllegalArgumentException("accessory not attached"); - } - mDeviceManager.checkPermission(mCurrentAccessory); - return nativeOpenAccessory(); + if (mDeviceManager != null) { + return openAccessory(accessory); + } else { + return null; } } public void setDevicePackage(UsbDevice device, String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - mDeviceManager.setDevicePackage(device, packageName); + mSettingsManager.setDevicePackage(device, packageName); } public void setAccessoryPackage(UsbAccessory accessory, String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - mDeviceManager.setAccessoryPackage(accessory, packageName); + mSettingsManager.setAccessoryPackage(accessory, packageName); } public boolean hasDevicePermission(UsbDevice device) { - return mDeviceManager.hasPermission(device); + return mSettingsManager.hasPermission(device); } public boolean hasAccessoryPermission(UsbAccessory accessory) { - return mDeviceManager.hasPermission(accessory); + return mSettingsManager.hasPermission(accessory); } public void requestDevicePermission(UsbDevice device, String packageName, PendingIntent pi) { - mDeviceManager.requestPermission(device, packageName, pi); + mSettingsManager.requestPermission(device, packageName, pi); } public void requestAccessoryPermission(UsbAccessory accessory, String packageName, PendingIntent pi) { - mDeviceManager.requestPermission(accessory, packageName, pi); + mSettingsManager.requestPermission(accessory, packageName, pi); } public void grantDevicePermission(UsbDevice device, int uid) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - mDeviceManager.grantDevicePermission(device, uid); + mSettingsManager.grantDevicePermission(device, uid); } public void grantAccessoryPermission(UsbAccessory accessory, int uid) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - mDeviceManager.grantAccessoryPermission(accessory, uid); + mSettingsManager.grantAccessoryPermission(accessory, uid); } public boolean hasDefaults(String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - return mDeviceManager.hasDefaults(packageName); + return mSettingsManager.hasDefaults(packageName); } public void clearDefaults(String packageName) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null); - mDeviceManager.clearDefaults(packageName); + mSettingsManager.clearDefaults(packageName); } - /* - * This handler is for deferred handling of events related to device mode and accessories. - */ - private final Handler mHandler = new Handler() { - private void addEnabledFunctionsLocked(Intent intent) { - // include state of all USB functions in our extras - for (int i = 0; i < mEnabledFunctions.size(); i++) { - intent.putExtra(mEnabledFunctions.get(i), UsbManager.USB_FUNCTION_ENABLED); - } - for (int i = 0; i < mDisabledFunctions.size(); i++) { - intent.putExtra(mDisabledFunctions.get(i), UsbManager.USB_FUNCTION_DISABLED); - } - } - - @Override - public void handleMessage(Message msg) { - synchronized (mLock) { - switch (msg.what) { - case MSG_UPDATE_STATE: - if (mConnected != mLastConnected || mConfiguration != mLastConfiguration) { - if (mConnected == 0) { - if (UsbManager.isFunctionEnabled( - UsbManager.USB_FUNCTION_ACCESSORY)) { - // make sure accessory mode is off, and restore default functions - Log.d(TAG, "exited USB accessory mode"); - if (!UsbManager.setFunctionEnabled - (UsbManager.USB_FUNCTION_ACCESSORY, false)) { - Log.e(TAG, "could not disable accessory function"); - } - int count = mDefaultFunctions.size(); - for (int i = 0; i < count; i++) { - String function = mDefaultFunctions.get(i); - if (!UsbManager.setFunctionEnabled(function, true)) { - Log.e(TAG, "could not reenable function " + function); - } - } - - if (mCurrentAccessory != null) { - mDeviceManager.accessoryDetached(mCurrentAccessory); - mCurrentAccessory = null; - } - } - } - - final ContentResolver cr = mContext.getContentResolver(); - if (Settings.Secure.getInt(cr, - Settings.Secure.DEVICE_PROVISIONED, 0) == 0) { - Slog.i(TAG, "Device not provisioned, skipping USB broadcast"); - return; - } - - mLastConnected = mConnected; - mLastConfiguration = mConfiguration; - - // send a sticky broadcast containing current USB state - Intent intent = new Intent(UsbManager.ACTION_USB_STATE); - intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); - intent.putExtra(UsbManager.USB_CONNECTED, mConnected != 0); - intent.putExtra(UsbManager.USB_CONFIGURATION, mConfiguration); - addEnabledFunctionsLocked(intent); - mContext.sendStickyBroadcast(intent); - } - break; - case MSG_FUNCTION_ENABLED: - case MSG_FUNCTION_DISABLED: - functionEnabledLocked((String)msg.obj, msg.what == MSG_FUNCTION_ENABLED); - break; - } - } - } - }; - @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) @@ -622,40 +156,14 @@ public class UsbService extends IUsbManager.Stub { return; } - synchronized (mLock) { - pw.println("USB Manager State:"); - - pw.println(" USB Device State:"); - pw.print(" Enabled Functions: "); - for (int i = 0; i < mEnabledFunctions.size(); i++) { - pw.print(mEnabledFunctions.get(i) + " "); - } - pw.println(""); - pw.print(" Disabled Functions: "); - for (int i = 0; i < mDisabledFunctions.size(); i++) { - pw.print(mDisabledFunctions.get(i) + " "); - } - pw.println(""); - pw.print(" Default Functions: "); - for (int i = 0; i < mDefaultFunctions.size(); i++) { - pw.print(mDefaultFunctions.get(i) + " "); - } - pw.println(""); - pw.println(" mConnected: " + mConnected + ", mConfiguration: " + mConfiguration); - pw.println(" mCurrentAccessory: " + mCurrentAccessory); + pw.println("USB Manager State:"); - pw.println(" USB Host State:"); - for (String name : mDevices.keySet()) { - pw.println(" " + name + ": " + mDevices.get(name)); - } + if (mDeviceManager != null) { mDeviceManager.dump(fd, pw); } + if (mHostManager != null) { + mHostManager.dump(fd, pw); + } + mSettingsManager.dump(fd, pw); } - - // host support - private native void monitorUsbHostBus(); - private native ParcelFileDescriptor nativeOpenDevice(String deviceName); - // accessory support - private native String[] nativeGetAccessoryStrings(); - private native ParcelFileDescriptor nativeOpenAccessory(); } diff --git a/services/java/com/android/server/usb/UsbDeviceSettingsManager.java b/services/java/com/android/server/usb/UsbSettingsManager.java index de0b114ea0c5..911367711faf 100644 --- a/services/java/com/android/server/usb/UsbDeviceSettingsManager.java +++ b/services/java/com/android/server/usb/UsbSettingsManager.java @@ -59,9 +59,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -class UsbDeviceSettingsManager { +class UsbSettingsManager { - private static final String TAG = "UsbDeviceSettingsManager"; + private static final String TAG = "UsbSettingsManager"; private static final File sSettingsFile = new File("/data/system/usb_device_manager.xml"); private final Context mContext; @@ -363,7 +363,7 @@ class UsbDeviceSettingsManager { } MyPackageMonitor mPackageMonitor = new MyPackageMonitor(); - public UsbDeviceSettingsManager(Context context) { + public UsbSettingsManager(Context context) { mContext = context; mPackageManager = context.getPackageManager(); synchronized (mLock) { diff --git a/services/jni/Android.mk b/services/jni/Android.mk index 4e93fe2bfa0b..a1c32835439b 100644 --- a/services/jni/Android.mk +++ b/services/jni/Android.mk @@ -12,7 +12,8 @@ LOCAL_SRC_FILES:= \ com_android_server_LightsService.cpp \ com_android_server_PowerManagerService.cpp \ com_android_server_SystemServer.cpp \ - com_android_server_UsbService.cpp \ + com_android_server_UsbDeviceManager.cpp \ + com_android_server_UsbHostManager.cpp \ com_android_server_VibratorService.cpp \ com_android_server_location_GpsLocationProvider.cpp \ onload.cpp diff --git a/services/jni/com_android_server_UsbDeviceManager.cpp b/services/jni/com_android_server_UsbDeviceManager.cpp new file mode 100644 index 000000000000..69541714260e --- /dev/null +++ b/services/jni/com_android_server_UsbDeviceManager.cpp @@ -0,0 +1,128 @@ +/* + * 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. + */ + +#define LOG_TAG "UsbDeviceManagerJNI" +#include "utils/Log.h" + +#include "jni.h" +#include "JNIHelp.h" +#include "android_runtime/AndroidRuntime.h" + +#include <stdio.h> +#include <asm/byteorder.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <linux/usb/f_accessory.h> + +#define DRIVER_NAME "/dev/usb_accessory" + +namespace android +{ + +static struct parcel_file_descriptor_offsets_t +{ + jclass mClass; + jmethodID mConstructor; +} gParcelFileDescriptorOffsets; + +static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) { + if (env->ExceptionCheck()) { + LOGE("An exception was thrown by callback '%s'.", methodName); + LOGE_EX(env); + env->ExceptionClear(); + } +} + +static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index) +{ + char buffer[256]; + + buffer[0] = 0; + int length = ioctl(fd, cmd, buffer); + if (buffer[0]) { + jstring obj = env->NewStringUTF(buffer); + env->SetObjectArrayElement(strArray, index, obj); + env->DeleteLocalRef(obj); + } +} + + +static jobjectArray android_server_UsbDeviceManager_getAccessoryStrings(JNIEnv *env, jobject thiz) +{ + int fd = open(DRIVER_NAME, O_RDWR); + if (fd < 0) { + LOGE("could not open %s", DRIVER_NAME); + return NULL; + } + jclass stringClass = env->FindClass("java/lang/String"); + jobjectArray strArray = env->NewObjectArray(6, stringClass, NULL); + if (!strArray) goto out; + set_accessory_string(env, fd, ACCESSORY_GET_STRING_MANUFACTURER, strArray, 0); + set_accessory_string(env, fd, ACCESSORY_GET_STRING_MODEL, strArray, 1); + set_accessory_string(env, fd, ACCESSORY_GET_STRING_DESCRIPTION, strArray, 2); + set_accessory_string(env, fd, ACCESSORY_GET_STRING_VERSION, strArray, 3); + set_accessory_string(env, fd, ACCESSORY_GET_STRING_URI, strArray, 4); + set_accessory_string(env, fd, ACCESSORY_GET_STRING_SERIAL, strArray, 5); + +out: + close(fd); + return strArray; +} + +static jobject android_server_UsbDeviceManager_openAccessory(JNIEnv *env, jobject thiz) +{ + int fd = open(DRIVER_NAME, O_RDWR); + if (fd < 0) { + LOGE("could not open %s", DRIVER_NAME); + return NULL; + } + jobject fileDescriptor = jniCreateFileDescriptor(env, fd); + if (fileDescriptor == NULL) { + return NULL; + } + return env->NewObject(gParcelFileDescriptorOffsets.mClass, + gParcelFileDescriptorOffsets.mConstructor, fileDescriptor); +} + +static JNINativeMethod method_table[] = { + { "nativeGetAccessoryStrings", "()[Ljava/lang/String;", + (void*)android_server_UsbDeviceManager_getAccessoryStrings }, + { "nativeOpenAccessory", "()Landroid/os/ParcelFileDescriptor;", + (void*)android_server_UsbDeviceManager_openAccessory }, +}; + +int register_android_server_UsbDeviceManager(JNIEnv *env) +{ + jclass clazz = env->FindClass("com/android/server/usb/UsbDeviceManager"); + if (clazz == NULL) { + LOGE("Can't find com/android/server/usb/UsbDeviceManager"); + return -1; + } + + clazz = env->FindClass("android/os/ParcelFileDescriptor"); + LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor"); + gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz); + gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V"); + LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL, + "Unable to find constructor for android.os.ParcelFileDescriptor"); + + return jniRegisterNativeMethods(env, "com/android/server/usb/UsbDeviceManager", + method_table, NELEM(method_table)); +} + +}; diff --git a/services/jni/com_android_server_UsbService.cpp b/services/jni/com_android_server_UsbHostManager.cpp index 9cd04f659da1..9506d75dbcab 100644 --- a/services/jni/com_android_server_UsbService.cpp +++ b/services/jni/com_android_server_UsbHostManager.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#define LOG_TAG "UsbService" +#define LOG_TAG "UsbHostManagerJNI" #include "utils/Log.h" #include "jni.h" @@ -30,9 +30,6 @@ #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> -#include <linux/usb/f_accessory.h> - -#define DRIVER_NAME "/dev/usb_accessory" namespace android { @@ -134,7 +131,7 @@ static int usb_device_removed(const char *devname, void* client_data) { return 0; } -static void android_server_UsbService_monitorUsbHostBus(JNIEnv *env, jobject thiz) +static void android_server_UsbHostManager_monitorUsbHostBus(JNIEnv *env, jobject thiz) { struct usb_host_context* context = usb_host_init(); if (!context) { @@ -145,7 +142,7 @@ static void android_server_UsbService_monitorUsbHostBus(JNIEnv *env, jobject thi usb_host_run(context, usb_device_added, usb_device_removed, NULL, (void *)thiz); } -static jobject android_server_UsbService_openDevice(JNIEnv *env, jobject thiz, jstring deviceName) +static jobject android_server_UsbHostManager_openDevice(JNIEnv *env, jobject thiz, jstring deviceName) { const char *deviceNameStr = env->GetStringUTFChars(deviceName, NULL); struct usb_device* device = usb_device_open(deviceNameStr); @@ -168,72 +165,17 @@ static jobject android_server_UsbService_openDevice(JNIEnv *env, jobject thiz, j gParcelFileDescriptorOffsets.mConstructor, fileDescriptor); } -static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index) -{ - char buffer[256]; - - buffer[0] = 0; - int length = ioctl(fd, cmd, buffer); - if (buffer[0]) { - jstring obj = env->NewStringUTF(buffer); - env->SetObjectArrayElement(strArray, index, obj); - env->DeleteLocalRef(obj); - } -} - - -static jobjectArray android_server_UsbService_getAccessoryStrings(JNIEnv *env, jobject thiz) -{ - int fd = open(DRIVER_NAME, O_RDWR); - if (fd < 0) { - LOGE("could not open %s", DRIVER_NAME); - return NULL; - } - jclass stringClass = env->FindClass("java/lang/String"); - jobjectArray strArray = env->NewObjectArray(6, stringClass, NULL); - if (!strArray) goto out; - set_accessory_string(env, fd, ACCESSORY_GET_STRING_MANUFACTURER, strArray, 0); - set_accessory_string(env, fd, ACCESSORY_GET_STRING_MODEL, strArray, 1); - set_accessory_string(env, fd, ACCESSORY_GET_STRING_DESCRIPTION, strArray, 2); - set_accessory_string(env, fd, ACCESSORY_GET_STRING_VERSION, strArray, 3); - set_accessory_string(env, fd, ACCESSORY_GET_STRING_URI, strArray, 4); - set_accessory_string(env, fd, ACCESSORY_GET_STRING_SERIAL, strArray, 5); - -out: - close(fd); - return strArray; -} - -static jobject android_server_UsbService_openAccessory(JNIEnv *env, jobject thiz) -{ - int fd = open(DRIVER_NAME, O_RDWR); - if (fd < 0) { - LOGE("could not open %s", DRIVER_NAME); - return NULL; - } - jobject fileDescriptor = jniCreateFileDescriptor(env, fd); - if (fileDescriptor == NULL) { - return NULL; - } - return env->NewObject(gParcelFileDescriptorOffsets.mClass, - gParcelFileDescriptorOffsets.mConstructor, fileDescriptor); -} - static JNINativeMethod method_table[] = { - { "monitorUsbHostBus", "()V", (void*)android_server_UsbService_monitorUsbHostBus }, + { "monitorUsbHostBus", "()V", (void*)android_server_UsbHostManager_monitorUsbHostBus }, { "nativeOpenDevice", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;", - (void*)android_server_UsbService_openDevice }, - { "nativeGetAccessoryStrings", "()[Ljava/lang/String;", - (void*)android_server_UsbService_getAccessoryStrings }, - { "nativeOpenAccessory","()Landroid/os/ParcelFileDescriptor;", - (void*)android_server_UsbService_openAccessory }, + (void*)android_server_UsbHostManager_openDevice }, }; -int register_android_server_UsbService(JNIEnv *env) +int register_android_server_UsbHostManager(JNIEnv *env) { - jclass clazz = env->FindClass("com/android/server/usb/UsbService"); + jclass clazz = env->FindClass("com/android/server/usb/UsbHostManager"); if (clazz == NULL) { - LOGE("Can't find com/android/server/usb/UsbService"); + LOGE("Can't find com/android/server/usb/UsbHostManager"); return -1; } method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIII[I[I)V"); @@ -254,7 +196,7 @@ int register_android_server_UsbService(JNIEnv *env) LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL, "Unable to find constructor for android.os.ParcelFileDescriptor"); - return jniRegisterNativeMethods(env, "com/android/server/usb/UsbService", + return jniRegisterNativeMethods(env, "com/android/server/usb/UsbHostManager", method_table, NELEM(method_table)); } diff --git a/services/jni/onload.cpp b/services/jni/onload.cpp index 0c46eee471b9..469e8181c533 100644 --- a/services/jni/onload.cpp +++ b/services/jni/onload.cpp @@ -29,7 +29,8 @@ int register_android_server_InputWindowHandle(JNIEnv* env); int register_android_server_InputManager(JNIEnv* env); int register_android_server_LightsService(JNIEnv* env); int register_android_server_PowerManagerService(JNIEnv* env); -int register_android_server_UsbService(JNIEnv* env); +int register_android_server_UsbDeviceManager(JNIEnv* env); +int register_android_server_UsbHostManager(JNIEnv* env); int register_android_server_VibratorService(JNIEnv* env); int register_android_server_SystemServer(JNIEnv* env); int register_android_server_location_GpsLocationProvider(JNIEnv* env); @@ -57,7 +58,8 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved) register_android_server_LightsService(env); register_android_server_AlarmManagerService(env); register_android_server_BatteryService(env); - register_android_server_UsbService(env); + register_android_server_UsbDeviceManager(env); + register_android_server_UsbHostManager(env); register_android_server_VibratorService(env); register_android_server_SystemServer(env); register_android_server_location_GpsLocationProvider(env); diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java index 3636baa03cb0..e8d4f9850975 100644 --- a/telephony/java/com/android/internal/telephony/DataConnection.java +++ b/telephony/java/com/android/internal/telephony/DataConnection.java @@ -62,6 +62,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ public abstract class DataConnection extends StateMachine { protected static final boolean DBG = true; + protected static final boolean VDBG = false; protected static Object mCountLock = new Object(); protected static int mCount; @@ -290,7 +291,7 @@ public abstract class DataConnection extends StateMachine { lastFailTime = timeStamp; AsyncResult.forMessage(connectionCompletedMsg, cause, new Exception()); } - if (DBG) log("notifyConnection at " + timeStamp + " cause=" + cause); + if (DBG) log("notifyConnectionCompleted at " + timeStamp + " cause=" + cause); connectionCompletedMsg.sendToTarget(); } @@ -301,12 +302,14 @@ public abstract class DataConnection extends StateMachine { * @param dp is the DisconnectParams. */ private void notifyDisconnectCompleted(DisconnectParams dp) { - if (DBG) log("NotifyDisconnectCompleted"); + if (VDBG) log("NotifyDisconnectCompleted"); if (dp.onCompletedMsg != null) { Message msg = dp.onCompletedMsg; - log(String.format("msg=%s msg.obj=%s", msg.toString(), + if (VDBG) { + log(String.format("msg=%s msg.obj=%s", msg.toString(), ((msg.obj instanceof String) ? (String) msg.obj : "<no-reason>"))); + } AsyncResult.forMessage(msg); msg.sendToTarget(); } @@ -472,7 +475,7 @@ public abstract class DataConnection extends StateMachine { result = DataCallState.SetupResult.ERR_RilError; result.mFailCause = FailCause.fromInt(response.status); } else { - log("onSetupConnectionCompleted received DataCallState: " + response); + if (DBG) log("onSetupConnectionCompleted received DataCallState: " + response); cid = response.cid; // set link properties based on data call response result = setLinkProperties(response, mLinkProperties); @@ -558,53 +561,53 @@ public abstract class DataConnection extends StateMachine { switch (msg.what) { case AsyncChannel.CMD_CHANNEL_FULL_CONNECTION: { if (mAc != null) { - log("Disconnecting to previous connection mAc=" + mAc); + if (VDBG) log("Disconnecting to previous connection mAc=" + mAc); mAc.replyToMessage(msg, AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED, AsyncChannel.STATUS_FULL_CONNECTION_REFUSED_ALREADY_CONNECTED); } else { mAc = new AsyncChannel(); mAc.connected(null, getHandler(), msg.replyTo); - log("DcDefaultState: FULL_CONNECTION reply connected"); + if (VDBG) log("DcDefaultState: FULL_CONNECTION reply connected"); mAc.replyToMessage(msg, AsyncChannel.CMD_CHANNEL_FULLY_CONNECTED, AsyncChannel.STATUS_SUCCESSFUL, mId, "hi"); } break; } case AsyncChannel.CMD_CHANNEL_DISCONNECT: { - log("CMD_CHANNEL_DISCONNECT"); + if (VDBG) log("CMD_CHANNEL_DISCONNECT"); mAc.disconnect(); break; } case AsyncChannel.CMD_CHANNEL_DISCONNECTED: { - log("CMD_CHANNEL_DISCONNECTED"); + if (VDBG) log("CMD_CHANNEL_DISCONNECTED"); mAc = null; break; } case DataConnectionAc.REQ_IS_INACTIVE: { boolean val = getCurrentState() == mInactiveState; - log("REQ_IS_INACTIVE isInactive=" + val); + if (VDBG) log("REQ_IS_INACTIVE isInactive=" + val); mAc.replyToMessage(msg, DataConnectionAc.RSP_IS_INACTIVE, val ? 1 : 0); break; } case DataConnectionAc.REQ_GET_CID: { - log("REQ_GET_CID cid=" + cid); + if (VDBG) log("REQ_GET_CID cid=" + cid); mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_CID, cid); break; } case DataConnectionAc.REQ_GET_APNSETTING: { - log("REQ_GET_APNSETTING apnSetting=" + mApn); + if (VDBG) log("REQ_GET_APNSETTING apnSetting=" + mApn); mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_APNSETTING, mApn); break; } case DataConnectionAc.REQ_GET_LINK_PROPERTIES: { LinkProperties lp = new LinkProperties(mLinkProperties); - log("REQ_GET_LINK_PROPERTIES linkProperties" + lp); + if (VDBG) log("REQ_GET_LINK_PROPERTIES linkProperties" + lp); mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_LINK_PROPERTIES, lp); break; } case DataConnectionAc.REQ_SET_LINK_PROPERTIES_HTTP_PROXY: { ProxyProperties proxy = (ProxyProperties) msg.obj; - log("REQ_SET_LINK_PROPERTIES_HTTP_PROXY proxy=" + proxy); + if (VDBG) log("REQ_SET_LINK_PROPERTIES_HTTP_PROXY proxy=" + proxy); mLinkProperties.setHttpProxy(proxy); mAc.replyToMessage(msg, DataConnectionAc.RSP_SET_LINK_PROPERTIES_HTTP_PROXY); break; @@ -612,7 +615,7 @@ public abstract class DataConnection extends StateMachine { case DataConnectionAc.REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE: { DataCallState newState = (DataCallState) msg.obj; DataConnectionAc.LinkPropertyChangeAction action = updateLinkProperty(newState); - if (DBG) { + if (VDBG) { log("REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE action=" + action + " newState=" + newState); } @@ -623,18 +626,18 @@ public abstract class DataConnection extends StateMachine { } case DataConnectionAc.REQ_GET_LINK_CAPABILITIES: { LinkCapabilities lc = new LinkCapabilities(mCapabilities); - log("REQ_GET_LINK_CAPABILITIES linkCapabilities" + lc); + if (VDBG) log("REQ_GET_LINK_CAPABILITIES linkCapabilities" + lc); mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_LINK_CAPABILITIES, lc); break; } case DataConnectionAc.REQ_RESET: - if (DBG) log("DcDefaultState: msg.what=REQ_RESET"); + if (VDBG) log("DcDefaultState: msg.what=REQ_RESET"); clearSettings(); mAc.replyToMessage(msg, DataConnectionAc.RSP_RESET); transitionTo(mInactiveState); break; case DataConnectionAc.REQ_GET_REFCOUNT: { - log("REQ_GET_REFCOUNT refCount=" + mRefCount); + if (VDBG) log("REQ_GET_REFCOUNT refCount=" + mRefCount); mAc.replyToMessage(msg, DataConnectionAc.RSP_GET_REFCOUNT, mRefCount); break; } @@ -666,7 +669,8 @@ public abstract class DataConnection extends StateMachine { default: if (DBG) { - log("DcDefaultState: shouldn't happen but ignore msg.what=" + msg.what); + log("DcDefaultState: shouldn't happen but ignore msg.what=0x" + + Integer.toHexString(msg.what)); } break; } @@ -685,13 +689,13 @@ public abstract class DataConnection extends StateMachine { private DisconnectParams mDisconnectParams = null; public void setEnterNotificationParams(ConnectionParams cp, FailCause cause) { - log("DcInactiveState: setEnterNoticationParams cp,cause"); + if (VDBG) log("DcInactiveState: setEnterNoticationParams cp,cause"); mConnectionParams = cp; mFailCause = cause; } public void setEnterNotificationParams(DisconnectParams dp) { - log("DcInactiveState: setEnterNoticationParams dp"); + if (VDBG) log("DcInactiveState: setEnterNoticationParams dp"); mDisconnectParams = dp; } @@ -707,11 +711,11 @@ public abstract class DataConnection extends StateMachine { * call to isInactive. */ if ((mConnectionParams != null) && (mFailCause != null)) { - log("DcInactiveState: enter notifyConnectCompleted"); + if (VDBG) log("DcInactiveState: enter notifyConnectCompleted"); notifyConnectCompleted(mConnectionParams, mFailCause); } if (mDisconnectParams != null) { - log("DcInactiveState: enter notifyDisconnectCompleted"); + if (VDBG) log("DcInactiveState: enter notifyDisconnectCompleted"); notifyDisconnectCompleted(mDisconnectParams); } } @@ -751,7 +755,10 @@ public abstract class DataConnection extends StateMachine { break; default: - if (DBG) log("DcInactiveState nothandled msg.what=" + msg.what); + if (VDBG) { + log("DcInactiveState nothandled msg.what=0x" + + Integer.toHexString(msg.what)); + } retVal = NOT_HANDLED; break; } @@ -856,7 +863,10 @@ public abstract class DataConnection extends StateMachine { break; default: - if (DBG) log("DcActivatingState not handled msg.what=" + msg.what); + if (VDBG) { + log("DcActivatingState not handled msg.what=0x" + + Integer.toHexString(msg.what)); + } retVal = NOT_HANDLED; break; } @@ -873,7 +883,7 @@ public abstract class DataConnection extends StateMachine { private FailCause mFailCause = null; public void setEnterNotificationParams(ConnectionParams cp, FailCause cause) { - log("DcInactiveState: setEnterNoticationParams cp,cause"); + if (VDBG) log("DcInactiveState: setEnterNoticationParams cp,cause"); mConnectionParams = cp; mFailCause = cause; } @@ -887,7 +897,7 @@ public abstract class DataConnection extends StateMachine { * call to isActive. */ if ((mConnectionParams != null) && (mFailCause != null)) { - log("DcActiveState: enter notifyConnectCompleted"); + if (VDBG) log("DcActiveState: enter notifyConnectCompleted"); notifyConnectCompleted(mConnectionParams, mFailCause); } } @@ -930,7 +940,10 @@ public abstract class DataConnection extends StateMachine { break; default: - if (DBG) log("DcActiveState nothandled msg.what=" + msg.what); + if (VDBG) { + log("DcActiveState not handled msg.what=0x" + + Integer.toHexString(msg.what)); + } retVal = NOT_HANDLED; break; } @@ -972,7 +985,10 @@ public abstract class DataConnection extends StateMachine { break; default: - if (DBG) log("DcDisconnectingState not handled msg.what=" + msg.what); + if (VDBG) { + log("DcDisconnectingState not handled msg.what=0x" + + Integer.toHexString(msg.what)); + } retVal = NOT_HANDLED; break; } @@ -1014,9 +1030,9 @@ public abstract class DataConnection extends StateMachine { break; default: - if (DBG) { - log("DcDisconnectionErrorCreatingConnection not handled msg.what=" - + msg.what); + if (VDBG) { + log("DcDisconnectionErrorCreatingConnection not handled msg.what=0x" + + Integer.toHexString(msg.what)); } retVal = NOT_HANDLED; break; diff --git a/telephony/java/com/android/internal/telephony/DataConnectionAc.java b/telephony/java/com/android/internal/telephony/DataConnectionAc.java index a0d9b0f97ed6..62b90aef26cb 100644 --- a/telephony/java/com/android/internal/telephony/DataConnectionAc.java +++ b/telephony/java/com/android/internal/telephony/DataConnectionAc.java @@ -28,7 +28,7 @@ import android.os.Message; * AsyncChannel to a DataConnection */ public class DataConnectionAc extends AsyncChannel { - private static final boolean DBG = true; + private static final boolean DBG = false; private String mLogTag; public DataConnection dataConnection; @@ -367,7 +367,7 @@ public class DataConnectionAc extends AsyncChannel { if ((response != null) && (response.what == RSP_RESET)) { if (DBG) log("restSync ok"); } else { - if (DBG) log("restSync error response=" + response); + log("restSync error response=" + response); } } diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index 0621cfd3bd5f..2c04b30f1cf0 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -2888,7 +2888,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { String s = p.readString(); - if (RILJ_LOGD) riljLog("< iccIO: " + if (RILJ_LOGV) riljLog("< iccIO: " + " 0x" + Integer.toHexString(sw1) + " 0x" + Integer.toHexString(sw2) + " " + s); @@ -3051,7 +3051,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { responseSetupDataCall(Parcel p) { int ver = p.readInt(); int num = p.readInt(); - if (RILJ_LOGD) riljLog("responseSetupDataCall ver=" + ver + " num=" + num); + if (RILJ_LOGV) riljLog("responseSetupDataCall ver=" + ver + " num=" + num); DataCallState dataCall; |