From a780ba4b15cbe69e7ad74c34c21ccef5e8cdce23 Mon Sep 17 00:00:00 2001 From: Alexander Lucas Date: Fri, 7 Mar 2014 13:34:45 -0800 Subject: [PATCH] Adding browsable prebuilt samples for march push Change-Id: I952db10d9c9acb4940db08a07789347ea2effe4d --- .../AdapterTransition/AndroidManifest.xml | 42 + .../browseable/AdapterTransition/_index.jd | 12 + .../res/drawable-hdpi/ic_action_grid.png | Bin 0 -> 412 bytes .../res/drawable-hdpi/ic_action_list.png | Bin 0 -> 496 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4078 bytes .../res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_action_grid.png | Bin 0 -> 241 bytes .../res/drawable-mdpi/ic_action_list.png | Bin 0 -> 364 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2474 bytes .../res/drawable-nodpi/p1.jpg | Bin 0 -> 78391 bytes .../res/drawable-nodpi/p10.jpg | Bin 0 -> 47367 bytes .../res/drawable-nodpi/p11.jpg | Bin 0 -> 47902 bytes .../res/drawable-nodpi/p2.jpg | Bin 0 -> 44528 bytes .../res/drawable-nodpi/p3.jpg | Bin 0 -> 48710 bytes .../res/drawable-nodpi/p4.jpg | Bin 0 -> 80786 bytes .../res/drawable-nodpi/p5.jpg | Bin 0 -> 42804 bytes .../res/drawable-nodpi/p6.jpg | Bin 0 -> 95262 bytes .../res/drawable-nodpi/p7.jpg | Bin 0 -> 58397 bytes .../res/drawable-nodpi/p8.jpg | Bin 0 -> 55444 bytes .../res/drawable-nodpi/p9.jpg | Bin 0 -> 58610 bytes .../res/drawable-xhdpi/ic_action_grid.png | Bin 0 -> 407 bytes .../res/drawable-xhdpi/ic_action_list.png | Bin 0 -> 555 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 5669 bytes .../res/drawable-xxhdpi/ic_action_grid.png | Bin 0 -> 743 bytes .../res/drawable-xxhdpi/ic_action_list.png | Bin 0 -> 840 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 10238 bytes .../res/layout-w720dp/activity_main.xml | 73 ++ .../res/layout/activity_main.xml | 65 ++ .../layout/fragment_adapter_transition.xml | 36 + .../res/layout/fragment_meat_grid.xml | 29 + .../res/layout/fragment_meat_list.xml | 21 + .../res/layout/item_meat_grid.xml | 50 + .../res/layout/item_meat_list.xml | 46 + .../res/menu/fragment_adapter_transition.xml | 23 + .../AdapterTransition/res/menu/main.xml | 21 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-w820dp/dimens.xml | 6 + .../res/values/base-strings.xml | 31 + .../AdapterTransition/res/values/dimens.xml | 6 + .../AdapterTransition/res/values/strings.xml | 19 + .../res/values/template-dimens.xml | 32 + .../res/values/template-styles.xml | 42 + .../AdapterTransitionFragment.java | 244 +++++ .../MainActivity.java | 110 ++ .../Meat.java | 46 + .../MeatAdapter.java | 88 ++ .../activities/SampleActivityBase.java | 52 + .../logger/Log.java | 236 +++++ .../logger/LogFragment.java | 109 ++ .../logger/LogNode.java | 39 + .../logger/LogView.java | 145 +++ .../logger/LogWrapper.java | 75 ++ .../logger/MessageOnlyLogFilter.java | 60 ++ .../view/SlidingTabLayout.java | 314 ++++++ .../view/SlidingTabStrip.java | 208 ++++ .../res/drawable-hdpi/ic_launcher.png | Bin 4199 -> 5232 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 2535 -> 3133 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 6022 -> 7549 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 11040 -> 13819 bytes .../res/layout/activity_main.xml | 65 +- .../AdvancedImmersiveMode/res/menu/main.xml | 6 +- .../res/values/base-strings.xml | 7 +- .../res/values/strings.xml | 27 +- .../res/values/template-styles.xml | 15 +- .../AdvancedImmersiveModeFragment.java | 149 ++- .../MainActivity.java | 48 +- .../BasicTransition/AndroidManifest.xml | 40 + samples/browseable/BasicTransition/_index.jd | 13 + .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4223 bytes .../res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2500 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 5810 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 10616 bytes .../BasicTransition/res/drawable/oval.xml | 20 + .../res/layout-w720dp/activity_main.xml | 73 ++ .../res/layout/activity_basic_transition.xml | 22 + .../res/layout/activity_main.xml | 65 ++ .../res/layout/fragment_basic_transition.xml | 82 ++ .../BasicTransition/res/layout/scene1.xml | 44 + .../BasicTransition/res/layout/scene2.xml | 46 + .../BasicTransition/res/layout/scene3.xml | 54 + .../BasicTransition/res/menu/main.xml | 21 + .../changebounds_fadein_together.xml | 24 + .../transition/scene3_transition_manager.xml | 21 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-w820dp/dimens.xml | 22 + .../res/values/base-strings.xml | 32 + .../BasicTransition/res/values/dimens.xml | 22 + .../BasicTransition/res/values/strings.xml | 19 + .../res/values/template-dimens.xml | 32 + .../res/values/template-styles.xml | 42 + .../BasicTransitionFragment.java | 121 +++ .../MainActivity.java | 110 ++ .../activities/SampleActivityBase.java | 52 + .../logger/Log.java | 236 +++++ .../logger/LogFragment.java | 109 ++ .../logger/LogNode.java | 39 + .../logger/LogView.java | 145 +++ .../logger/LogWrapper.java | 75 ++ .../logger/MessageOnlyLogFilter.java | 60 ++ .../view/SlidingTabLayout.java | 314 ++++++ .../view/SlidingTabStrip.java | 208 ++++ .../DisplayingBitmaps/AndroidManifest.xml | 54 + .../browseable/DisplayingBitmaps/_index.jd | 18 + .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4440 bytes .../res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2741 bytes .../res/drawable-nodpi/empty_photo.png | Bin 0 -> 3159 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 6245 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 11128 bytes .../res/drawable/photogrid_list_selector.xml | 33 + .../res/layout/activity_main.xml | 36 + .../res/layout/image_detail_fragment.xml | 34 + .../res/layout/image_detail_pager.xml | 23 + .../res/layout/image_grid_fragment.xml | 29 + .../DisplayingBitmaps/res/menu/main_menu.xml | 25 + .../res/values-large/dimens.xml | 23 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-v11/styles.xml | 36 + .../res/values-xlarge/dimens.xml | 23 + .../res/values/base-strings.xml | 37 + .../DisplayingBitmaps/res/values/colors.xml | 23 + .../DisplayingBitmaps/res/values/dimens.xml | 23 + .../DisplayingBitmaps/res/values/strings.xml | 25 + .../DisplayingBitmaps/res/values/styles.xml | 29 + .../res/values/template-dimens.xml | 32 + .../res/values/template-styles.xml | 42 + .../Log.java | 236 +++++ .../LogFragment.java | 109 ++ .../LogNode.java | 39 + .../LogView.java | 145 +++ .../LogWrapper.java | 75 ++ .../MessageOnlyLogFilter.java | 60 ++ .../provider/Images.java | 245 +++++ .../ui/ImageDetailActivity.java | 213 ++++ .../ui/ImageDetailFragment.java | 107 ++ .../ui/ImageGridActivity.java | 45 + .../ui/ImageGridFragment.java | 336 ++++++ .../ui/RecyclingImageView.java | 89 ++ .../util/AsyncTask.java | 693 +++++++++++++ .../util/DiskLruCache.java | 953 ++++++++++++++++++ .../util/ImageCache.java | 738 ++++++++++++++ .../util/ImageFetcher.java | 311 ++++++ .../util/ImageResizer.java | 270 +++++ .../util/ImageWorker.java | 485 +++++++++ .../util/RecyclingBitmapDrawable.java | 109 ++ .../util/Utils.java | 82 ++ .../MediaRouter/AndroidManifest.xml | 75 ++ samples/browseable/MediaRouter/_index.jd | 10 + .../res/drawable-hdpi/ic_action_pause.png | Bin 0 -> 191 bytes .../res/drawable-hdpi/ic_action_play.png | Bin 0 -> 497 bytes .../res/drawable-hdpi/ic_action_stop.png | Bin 0 -> 172 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 5062 bytes .../res/drawable-hdpi/ic_media_pause.png | Bin 0 -> 599 bytes .../res/drawable-hdpi/ic_media_play.png | Bin 0 -> 1163 bytes .../res/drawable-hdpi/ic_media_stop.png | Bin 0 -> 553 bytes .../res/drawable-hdpi/ic_menu_add.png | Bin 0 -> 2194 bytes .../res/drawable-hdpi/ic_menu_delete.png | Bin 0 -> 1413 bytes .../MediaRouter/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_action_pause.png | Bin 0 -> 190 bytes .../res/drawable-mdpi/ic_action_play.png | Bin 0 -> 375 bytes .../res/drawable-mdpi/ic_action_stop.png | Bin 0 -> 188 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2975 bytes .../res/drawable-mdpi/ic_media_pause.png | Bin 0 -> 540 bytes .../res/drawable-mdpi/ic_media_play.png | Bin 0 -> 897 bytes .../res/drawable-mdpi/ic_media_stop.png | Bin 0 -> 500 bytes .../res/drawable-mdpi/ic_menu_add.png | Bin 0 -> 1339 bytes .../res/drawable-mdpi/ic_menu_delete.png | Bin 0 -> 967 bytes .../res/drawable-xhdpi/ic_action_pause.png | Bin 0 -> 244 bytes .../res/drawable-xhdpi/ic_action_play.png | Bin 0 -> 531 bytes .../res/drawable-xhdpi/ic_action_stop.png | Bin 0 -> 224 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 7207 bytes .../res/drawable-xxhdpi/ic_action_pause.png | Bin 0 -> 297 bytes .../res/drawable-xxhdpi/ic_action_play.png | Bin 0 -> 778 bytes .../res/drawable-xxhdpi/ic_action_stop.png | Bin 0 -> 264 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 12868 bytes .../drawable-xxhdpi/ic_suggestions_add.png | Bin 0 -> 1074 bytes .../drawable-xxhdpi/ic_suggestions_delete.png | Bin 0 -> 1390 bytes .../res/drawable/list_background.xml | 7 + .../res/layout-land/grid_layout_2.xml | 63 ++ .../MediaRouter/res/layout/activity_main.xml | 36 + .../MediaRouter/res/layout/media_item.xml | 45 + .../res/layout/overlay_display_window.xml | 28 + .../res/layout/sample_media_router.xml | 138 +++ .../sample_media_router_presentation.xml | 38 + .../res/menu/sample_media_router_menu.xml | 23 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../MediaRouter/res/values/arrays.xml | 31 + .../MediaRouter/res/values/base-strings.xml | 29 + .../MediaRouter/res/values/colors.xml | 20 + .../MediaRouter/res/values/strings.xml | 40 + .../res/values/template-dimens.xml | 32 + .../res/values/template-styles.xml | 42 + .../Log.java | 236 +++++ .../LogFragment.java | 109 ++ .../LogNode.java | 39 + .../LogView.java | 145 +++ .../LogWrapper.java | 75 ++ .../MessageOnlyLogFilter.java | 60 ++ .../player/LocalPlayer.java | 630 ++++++++++++ .../player/MainActivity.java | 724 +++++++++++++ .../player/OverlayDisplayWindow.java | 463 +++++++++ .../player/Player.java | 81 ++ .../player/PlaylistItem.java | 130 +++ .../player/RemotePlayer.java | 482 +++++++++ .../player/SampleMediaButtonReceiver.java | 46 + .../player/SessionManager.java | 419 ++++++++ .../provider/SampleMediaRouteProvider.java | 602 +++++++++++ .../SampleMediaRouteProviderService.java | 35 + 213 files changed, 15681 insertions(+), 93 deletions(-) create mode 100644 samples/browseable/AdapterTransition/AndroidManifest.xml create mode 100644 samples/browseable/AdapterTransition/_index.jd create mode 100644 samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_grid.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_list.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-mdpi/ic_action_grid.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-mdpi/ic_action_list.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p1.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p10.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p11.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p2.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p3.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p4.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p5.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p6.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p7.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p8.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-nodpi/p9.jpg create mode 100644 samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_grid.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_list.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_action_grid.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_action_list.png create mode 100644 samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_launcher.png create mode 100755 samples/browseable/AdapterTransition/res/layout-w720dp/activity_main.xml create mode 100755 samples/browseable/AdapterTransition/res/layout/activity_main.xml create mode 100644 samples/browseable/AdapterTransition/res/layout/fragment_adapter_transition.xml create mode 100644 samples/browseable/AdapterTransition/res/layout/fragment_meat_grid.xml create mode 100644 samples/browseable/AdapterTransition/res/layout/fragment_meat_list.xml create mode 100644 samples/browseable/AdapterTransition/res/layout/item_meat_grid.xml create mode 100644 samples/browseable/AdapterTransition/res/layout/item_meat_list.xml create mode 100644 samples/browseable/AdapterTransition/res/menu/fragment_adapter_transition.xml create mode 100644 samples/browseable/AdapterTransition/res/menu/main.xml create mode 100644 samples/browseable/AdapterTransition/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/AdapterTransition/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/AdapterTransition/res/values-w820dp/dimens.xml create mode 100644 samples/browseable/AdapterTransition/res/values/base-strings.xml create mode 100644 samples/browseable/AdapterTransition/res/values/dimens.xml create mode 100755 samples/browseable/AdapterTransition/res/values/strings.xml create mode 100644 samples/browseable/AdapterTransition/res/values/template-dimens.xml create mode 100644 samples/browseable/AdapterTransition/res/values/template-styles.xml create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/AdapterTransitionFragment.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MainActivity.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/Meat.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MeatAdapter.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/activities/SampleActivityBase.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/Log.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogFragment.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogNode.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogView.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogWrapper.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabLayout.java create mode 100644 samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabStrip.java create mode 100644 samples/browseable/BasicTransition/AndroidManifest.xml create mode 100644 samples/browseable/BasicTransition/_index.jd create mode 100644 samples/browseable/BasicTransition/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/BasicTransition/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/BasicTransition/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/BasicTransition/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/BasicTransition/res/drawable-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/BasicTransition/res/drawable/oval.xml create mode 100755 samples/browseable/BasicTransition/res/layout-w720dp/activity_main.xml create mode 100644 samples/browseable/BasicTransition/res/layout/activity_basic_transition.xml create mode 100755 samples/browseable/BasicTransition/res/layout/activity_main.xml create mode 100644 samples/browseable/BasicTransition/res/layout/fragment_basic_transition.xml create mode 100644 samples/browseable/BasicTransition/res/layout/scene1.xml create mode 100644 samples/browseable/BasicTransition/res/layout/scene2.xml create mode 100644 samples/browseable/BasicTransition/res/layout/scene3.xml create mode 100644 samples/browseable/BasicTransition/res/menu/main.xml create mode 100644 samples/browseable/BasicTransition/res/transition/changebounds_fadein_together.xml create mode 100644 samples/browseable/BasicTransition/res/transition/scene3_transition_manager.xml create mode 100644 samples/browseable/BasicTransition/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/BasicTransition/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/BasicTransition/res/values-w820dp/dimens.xml create mode 100644 samples/browseable/BasicTransition/res/values/base-strings.xml create mode 100644 samples/browseable/BasicTransition/res/values/dimens.xml create mode 100755 samples/browseable/BasicTransition/res/values/strings.xml create mode 100644 samples/browseable/BasicTransition/res/values/template-dimens.xml create mode 100644 samples/browseable/BasicTransition/res/values/template-styles.xml create mode 100644 samples/browseable/BasicTransition/src/com.example.android.basictransition/BasicTransitionFragment.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.basictransition/MainActivity.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/activities/SampleActivityBase.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/Log.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/LogFragment.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/LogNode.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/LogView.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/LogWrapper.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabLayout.java create mode 100644 samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabStrip.java create mode 100644 samples/browseable/DisplayingBitmaps/AndroidManifest.xml create mode 100644 samples/browseable/DisplayingBitmaps/_index.jd create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-nodpi/empty_photo.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/DisplayingBitmaps/res/drawable/photogrid_list_selector.xml create mode 100755 samples/browseable/DisplayingBitmaps/res/layout/activity_main.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/layout/image_detail_fragment.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/layout/image_detail_pager.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/layout/image_grid_fragment.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/menu/main_menu.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values-large/dimens.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values-v11/styles.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values-xlarge/dimens.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/base-strings.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/colors.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/dimens.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/strings.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/styles.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/template-dimens.xml create mode 100644 samples/browseable/DisplayingBitmaps/res/values/template-styles.xml create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/Log.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogFragment.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogNode.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogView.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogWrapper.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/provider/Images.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailActivity.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailFragment.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridActivity.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridFragment.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/RecyclingImageView.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/AsyncTask.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/DiskLruCache.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageCache.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageFetcher.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageResizer.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageWorker.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/RecyclingBitmapDrawable.java create mode 100644 samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/Utils.java create mode 100644 samples/browseable/MediaRouter/AndroidManifest.xml create mode 100644 samples/browseable/MediaRouter/_index.jd create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_stop.png create mode 100755 samples/browseable/MediaRouter/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_media_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_media_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_media_stop.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_add.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_delete.png create mode 100644 samples/browseable/MediaRouter/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_stop.png create mode 100755 samples/browseable/MediaRouter/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_stop.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_menu_add.png create mode 100644 samples/browseable/MediaRouter/res/drawable-mdpi/ic_menu_delete.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_stop.png create mode 100755 samples/browseable/MediaRouter/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_pause.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_play.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_stop.png create mode 100755 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_suggestions_add.png create mode 100644 samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_suggestions_delete.png create mode 100644 samples/browseable/MediaRouter/res/drawable/list_background.xml create mode 100644 samples/browseable/MediaRouter/res/layout-land/grid_layout_2.xml create mode 100755 samples/browseable/MediaRouter/res/layout/activity_main.xml create mode 100644 samples/browseable/MediaRouter/res/layout/media_item.xml create mode 100644 samples/browseable/MediaRouter/res/layout/overlay_display_window.xml create mode 100644 samples/browseable/MediaRouter/res/layout/sample_media_router.xml create mode 100644 samples/browseable/MediaRouter/res/layout/sample_media_router_presentation.xml create mode 100644 samples/browseable/MediaRouter/res/menu/sample_media_router_menu.xml create mode 100644 samples/browseable/MediaRouter/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/MediaRouter/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/MediaRouter/res/values/arrays.xml create mode 100644 samples/browseable/MediaRouter/res/values/base-strings.xml create mode 100644 samples/browseable/MediaRouter/res/values/colors.xml create mode 100644 samples/browseable/MediaRouter/res/values/strings.xml create mode 100644 samples/browseable/MediaRouter/res/values/template-dimens.xml create mode 100644 samples/browseable/MediaRouter/res/values/template-styles.xml create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/Log.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/LogFragment.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/LogNode.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/LogView.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/LogWrapper.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.common.logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/LocalPlayer.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/MainActivity.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/OverlayDisplayWindow.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/Player.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/PlaylistItem.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/RemotePlayer.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/SampleMediaButtonReceiver.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/player/SessionManager.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/provider/SampleMediaRouteProvider.java create mode 100644 samples/browseable/MediaRouter/src/com.example.android.mediarouter/provider/SampleMediaRouteProviderService.java diff --git a/samples/browseable/AdapterTransition/AndroidManifest.xml b/samples/browseable/AdapterTransition/AndroidManifest.xml new file mode 100644 index 000000000..01b414d9c --- /dev/null +++ b/samples/browseable/AdapterTransition/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/AdapterTransition/_index.jd b/samples/browseable/AdapterTransition/_index.jd new file mode 100644 index 000000000..24ca6e182 --- /dev/null +++ b/samples/browseable/AdapterTransition/_index.jd @@ -0,0 +1,12 @@ + + + +page.tags="AdapterTransition" +sample.group=UI +@jd:body + +

+ + Transition cannot be directly applied to AdapterViews. In this sample, we demonstrate how to create a overlay layout and run a Transition on it. + +

diff --git a/samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_grid.png b/samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..e04f4a7f59ce58f09b19e198c8e8a10076e60fa5 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FeZDtIEG|6zm2f=JM18Ec2>ad zC56s>0{;cJ>NAIPxGRJ=oZjK~v7fo+81K^T1LrsdPjW>V&%P?P_RF1jvv1aZezrM# zYr&u3zWMcxO#jy^h%_*@2|92|vR$|#!zIyv;X>myCeKN0e(&4==$lO2!t7bkQhT@$ ze+bijTD)!E^S#qkf1Y~S_j(u0yOSTjWoZQI}W_SDhDnFPtVj7TL8f(%7}wb7oPd1M};(t5&_05I_F0?bd74bnnUg zR=oZ-^YC2L&doZ}+j6T9T7IwHzufarp;4#)?scCnZYyx?`(*R~NkO{c1gp8i%S)%u z_?&QQ?-mY=`A+t(XYRSJ?D#GWq06sz-S}z7#Z+=KgO_m%3cXWwWkfcJMy`z4Kw>`^wO|lw_i_ln)XWDAbp}sYKbLh*2~7Zk C=eKbH literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_list.png b/samples/browseable/AdapterTransition/res/drawable-hdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..4131dba4eb8b35e27a34677a0e88ec10d0762ee9 GIT binary patch literal 496 zcmV$YuQP>Qz26h(2KB*~0YM-!l^)D)u~Sftpf)_`Fcv#P4@n?~b5ylI*T zbzN`IF%l7aj-u$2lRyvzrx0dOga9Tgq1Fc{0n}Q?yCgz@x$!^cBqG!)ht3HgLenhE zZaG=Fu6u}BdLj|RM6Xcknv;OzILD~BBSL_)@kO;dkI)zhR9FW&GZ7onw4@?5?1Ky{ zz2td*#pwWcp%XZ;E9F3q2vwW}(7cIyKlc;8hzXz5U%-5FIsivk#1=6odW_@vhLb=T zhG(d^B^9BkvMld730RhOgnAoN1UP%wU!x>7f8B}ar|^_CkPg}e)RBr1`$;Uih_U6p z;ZpxV7gvqMrG6i~+nSUE>W*3<^hr!OiCgHa9;zJ}r2`-}>>nKJW&}?SBKW2c*2Q-C3u!)`AP{z zd4h^Tg%YBGX9_CKrJZbA|NM#zWVH|j>(s#t#@gzo)@C&1%iQ{jZJlf zv-7fl6z!K4C| zwr$&H5Q7scppHLMxsc(AwqHSomVZ(Kb*`OfOM^-VXu$w9eXp$Wz9W@LgaNRvj(w8HC1mZ5dpFDQ<|HtdJFI39DBX>nIwP_hdO;f<6KnNcjLytQgt&; z2WhII>1Td<(sd=#a$A}%!BksV_#Fp=M$^Q>hz0@*t-G*}WgQA{IQG{Y9RUqLs6)j0 z#Ike^rbS#F!0;QOFN?;>FnB|BNE{?hd^(g!Z-i%a=w*swaIF+v?e4FD!7#!wULh2j)78So@X`~q|}St*D&K);JvHlRpq5_McT zIvhhaI9OK{SBnnIP?@*^1nG*8K59d&r_`Hemnfzjz3sL-VO{`WYPhZ_!~A3@x-xJK z8ZFOZPP|T6qEMQhf(&Iq0RoUP88i;2qtE$vVS)mbKIaOQ>bNSQ9H}mS%^GKb8b*w$ zgZT(QBjz$FD?mn_@HILNUa$KlW0?~O`KpjqXfFJY@GYnp4VV0ls5AK{1&j>9P?&B~ z!nDLZdDSY1fbO`%P>|7R-AP-4lfhuw04bSe1RxcTkP_~A+qO(=-<}0_?Xm_WnVD=_ z1{4brhLg4cd1ioQ1?grKtAZi`$)Es2R+IoEDM)MAj(P6Am-*g)n+0oYLwiU*hA%6Q zSyhasg2Xu#fXORYI#kfek&y~goG@>sg&7*5T=Gp^J+YXXZc-f3q#;CutbeUNI3G9ZiY zhY{+94^kB*9J$ZOn#pkowr@9eCC*O;>3uOHS2|lhNX;ZkNzF@^gv{-{^FgXvo$V;5 z!V&8N5-G_@7Jtf}>EBm>wxrS-ox`i%Z?}!FI|D3U;B<9Y|HFZt{)Qt%4-_KkMHP4;PfhADZthK>4wxUqR%^_Ks8}F#9{V)lbb3ns~+bc-U zX_P3IFlG#M=jVr8NztZh&K%~-%w!37-yK#D?cra!lKDwl38O|aS9W$Q$Vi8hpP72?@+I zV+M0|?HYzaPmz4HXLCg*j2IDaIz<@YOE0k?ZBL*cyG!_wLxwPzSJ=S>LlA!cnRy<4lxg1Z(%Sn}8qbu1H~ddlpWzxUc1(zi2;y2$Ym4SVQO%` z?t%hSbn*dMmoCgRX_Cn?H`9=XzoLS9NNuj`uRl9*UVDuN=r>G}OCF7sMgc@8*Et}1 z>|^PqWoV=#4CC3s?Nhq79KSsBwhbYQN&eM4~c zZGo@9X2F98nX7m2a6}VNG!!jqDJjf7cyR0r0~|PI%7IKzI;Z71p^54v9s$D&l#YZeh#Y;?g02O8j>vVQJYX~dl9VNU zmG{$69ReyWfsGz_U<_#rS_?(ERrUI;uV>V!^N|JGqlTLd6c{3nVPSXo7Fbtm< z$`MKt0POsbR4<#Bfb89{!6BeQgTjDRzhVbT1rsf_+vGonOM-%^qiYnH)x3G(p;c^< zVZ;c^1V=jFyK$pKK>7LRu0}LSG8n6fr8;XnM=j|ELnBEvj>HS#z^t}z4J$_|Mt~BH zjRMLJ4nTW9`^+Jr8*hvRr23?2iist(M^O<6MCQaA8u)-4vT)P8LsnpH6cyofEPR%? zyxbw68*T^zQX`lQ2^Xn4|H2(vqPJOr}iegP|cvJ6WF z84Zf;umuzqm#P+8w=^Tg{37V^~<(w z+48hDVZwOcR`Cc&R|9`T-pT=EU%SvQZxfAdAyG8(Qs4+^d>=(s#x}KHRT~Z!pCw@1 zqD6~ya&rDf)rV=S7m#E?2~^psLx&E1YHDi!<955Te!&#K-|y?)yLSCaQ zyA9K~8u(7EbJwn2b4yE0OOle3!q1L>MNG{!I(RNhV`JlqapT5K+_!JvSM>Y%(x*uU zgl;yT!Qf*uZ$Uvps{oPD(CD+Ptl`6l1GeWhbr&itD;LtVyiJ=nuyvy}G&Cd^78d?J zJ3G4wfOhQI@xhukYyR!^dLebA)Ya9c_V3@nXwaZR6G-9gz&cDT{Os8APZ(;j?Po6xL_Q6*-azUi&v3&XR#aB~lq7lXY`}coR zR8;gAs^@pSl?4tO61H^Gtvt8saBcql`NMN_b64P#srvf*;JkVB9$C6{=`z|2U-GGT zlt$Z&2Mic634p4rt4r^@?>@XFeN4G1+`Ntir0C&?AD%_Z)J~l`#lHRa+dF9gRdU1P z)fl_4eOh&XiU!`|;^OMe%*-BSK5W~zZJVh9^x8aEPsArjR2M5CTvrNIR8mqhw_m@0 z1MxlB!Gi~PJ^uLPeJT2yOtMvt&<{QvfL!F{r}ymHlMe?TJ9eyb#*7(vS5;N5r&WB# zr}r>Tm+u4+d}Su7bI|PBvlpeOrzb&0yLaz?bo}`7^i13G{AbK6?tn-soyLwGTa%WS zb}5+_+puB7vY9hy;`z=0Xu=nLR>cV*9FMOeyFL5tvrh~iI&?JhGP)5*$v6FxO#8qY z)37)&-hdL`dFP!H`Y3h+qnJ5>=A(bVEJllxNMIJ9j=^F!BmtlsoGb5KiTxsq>U6 zQ|_gk@JIr^pG0B5nM`@Wv}x0j%d{%&i))Q1prrTSd+*b3-MZyb(#7`d*|U?v`rqh> z=ymweNBVIFgwr8cyM}JWBJz1X5dnYr;fL~3qelIS>iI{xtu65a+bB;t5+#S zFh-C9q?~`QUAuM#T_D1`{w=oc<)+QBl#0>Kj`6 z;g+_?3s44i6*iN^dywyGpsvC=Qo<(sais0B+{LtOuf6t}E?v4jK>r_ti1ga_?c1l* zv1+1d)gFZX47xc3Nxh{hDJjX+_1HzpCSJ0}@3*SN4G=lWoX(v)k0U_;C5gXFSGAX> zSp7f>_0Rfs@810%bi8)pz=4+u@RxMFsm~UrrT9~XE~KD8w{PG64?B16Tta<1M9%XD z5b_fIr3E^=$dvIXDQH}*kpvM5e~p1x?QzpE+;E7dSo>Ev1|4nuDG4%dfWco(*yUX@ zt14a!!VjX67&3uLK{>IQmbg${2aX456f_KJL9Bpr3``A5!W>|ur4{D{P|QF2TiP+6 g3i>UzJLYTsKewn$?!%*2z5oCK07*qoM6N<$g50yHO8@`> literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-hdpi/tile.9.png b/samples/browseable/AdapterTransition/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MQNTcjv*DdlK%YvZ_jLY;KT`zX$+@~lcus~rX(d9r71A} z`ThO9P5{3!^Gb##?W|{)7_*qnaG3jle#z^Ewh3!L+OJDkIEDn4#?y*WR zVPPxhkdTt+9>Mhp&&TWt?>R+O=s3$;raUCoY~h*S`Lr>AE{@<}5rs zJTWt8%y25qxL5b?&d#q2mdeVD9Tc8+`rh4N|355#M?vEE70hnV2^nn+2Bok6{{MfU zYxe8^|Nd70yR_6>-La^us_NO9GiTavTro5Tc95pJYD@<);T3K0RYn8U@-sy literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-mdpi/ic_action_list.png b/samples/browseable/AdapterTransition/res/drawable-mdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..e248a488e725dda5d5f85a6627e2c1a9276234cf GIT binary patch literal 364 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p1.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10f07acf10a604f7dfe41bea63466bcc7742ff5d GIT binary patch literal 78391 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 E*#wi_O8@`> literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p11.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5722b229bb3e321778f1eeb039a4393a1d536e7 GIT binary patch literal 47902 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p2.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca380ae4e4f71bb0499304c2548070efd87f4882 GIT binary patch literal 44528 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%0AxBxGGaPyZcwa)X;d>^GFdKsp)9kDL)+`Q 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p4.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..153c1ffe886a8fbf535c27da02d8cc28f93cc4ba GIT binary patch literal 80786 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 G|&b literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p5.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46d6a13dfab72cffe6e15b943587f349df8f432c GIT binary patch literal 42804 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 z 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-nodpi/p6.jpg b/samples/browseable/AdapterTransition/res/drawable-nodpi/p6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89ccb832954c8314bca2f0fe26865d25039d7a52 GIT binary patch literal 95262 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%0AZGW}0}Z~!jt#Q4-1=!C+I;(! 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 EBata#x8sbXeCa0p6}Nw3DCG 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 z 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 VW$95V%WcI?oMO5u+Qt$;|JhWQi%tLl literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_grid.png b/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd39b530e17f21a83b095f607e1c787556c161a GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV2ty0aSW-5dppZ9tHnXUHJwGV z@xYoU>Guj*=LAp0rcEymE1uzyr|5FjddI|@tp`}xOy(XqFyZd|b56VFz5ccK>+kUL ztH<9S`?1+{-hVcxfQCXg4aUbz4+NI50BN28remxJbR9TbrZ_}S>-U^=XJxj}lNgy@Fs33d%`9&c4&uw=F>&t&adq;c1zV)3+w z!+W;pR{t~RS(>-0I^cTIjP;2URifYZFE4oSeZ7Ty7TfhH9q+e0H0T#^e9$D4@K4}~ zz(EukxZ8$Mwx%Bx(tT;KcAvF?DBaL|5ErjTPv-R_JV->#U&&lMoq ytt-cRWZU8_I}L|aooy8&0=N5C{hSegz?}K`qyU3i1<}9&XYh3Ob6Mw<&;$T!3$z;m literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_list.png b/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e510d07aec277df59a7729979ebf31777b8db9 GIT binary patch literal 555 zcmV+`0@VG9P)h{mp8oc(ySWl z#gJc7#Q?(qtcq)4fYqQ(79#*k&H`7n*=%BxIjL+M$0O*DRrLVx#~|u(5{BVanpH!+ zbpXDniUEcJSQTdzRMG^kX4Pad6%0U4-s62Xaa<~kL)a>Gw^j83@23C(=(sya0)1x0zKahtzqlEp{fV;c@|JP1-u6U zbnNqHXaV*XRh0n8phE<>58ysP!9KuY1q@gME=s`rUu9iV-llEwud+6saJd!%aEZPK t+hl--EV%T63~-6Q2HRwShAg=B;R7tq=TM?-SEv90002ovPDHLkV1i)h@zMYQ literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/AdapterTransition/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..11b9928106061ac9ff4095f23b8afde4c944d7dc GIT binary patch literal 5669 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 LNkvXXu0mjf7_^Qj literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_action_grid.png b/samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_action_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba98fc15a7d3bfc21c3b42bc60e371c9c2e38fa GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U|Q$t;uum9_jb-fFDFNd*4>YK ztC+;|YM5MGqpmS;$q`)JHBbANYxgu;2VLHfFPwLFeBkU7$!%#7m}G2tc;Szj^MB8O zwfVdd`;YIPVrr<+q{dcrFo{WNR~yHrgpWJ|7J`m06E3Jldv_@GN(!nJC^dB` zEcESIP~q{AOUdJa8;hW$(`*69j}yT1E-aaIKh=urCrKHXIWnm$b#MsXYKaZ7Su$t$ zg0R)4B7G|B>r2D!V?@rS#UHx)=J2{%4|RSi&2gQ-7 z)bYoXJuhFDSk3oQd%ru&OscoJYH!@KE4BRd3&d>wBaL@6TIPMTzjnrq@xNeL-}@Fu z%N1@{jx=yYSWZiF;9DgK^bJ#3-_n~r5&6!Cs}CfenmzAqn*1rVEn%zQF2BP2o-w~Z zPkPrs!*x2RS5Hx>5bR!Xa{WT7H93MUj1mh31;RcSe-T&tXBG8g+F2nbkLIJs4i8+w z-p$cfY%)o6nQ)+!L#e67OtI;aVykwC0;9B`3kzqi6U$L&C6K&;;F8i)-$VCwWS+Uf z$~mV)LCGUy@>VCMI9aSW-5dppOrKPXV3?K=}^ z=epKuv)-C3I!-u})x9?7jm~%dAJu=jZ%5vW$X(dW*`%WK&COf)4~I&@&6hq4ZcKl2 zX3uxOxK}4<7SC^=Sp%p7`PW|J;bRwULa{_}AV^LLT1Iq-?371zhsWkXB z%!w0KU`%0p@?{kRr-HD;@^DrUhM5eOd%anC+7JH@4YgIYkG}Y2_uY5DlQ#Z{E(wr6 z<9eXNrY?&qZu&f(VjJNPX=bx)HEr2B89KcfI8JH%Fzq?f^q3%XnLxtw$N9J4e$)PO zX3B=V?bT@;&VQerE?8hZ*KfUM%E2XzFTU7x`DKhJ1IL<@87x!Os-9HbWc{=5^{?v_ zeVh)j{W~XWfBlqAtgVxD=I9(%ikad0qCiNX>$ky777qqLhww=jt1oDKYCk?d`|LAY zyS+b7#I65+#_x@O(7UEL2TO$R8B0eo3Kc|LT*&lB;9KV2xc%MvIu*z2_W!@bm#iPW zO+m)_v(i>xRqKfioCi2x$TV!`if#FrX{vAJ%^f9utN!fa-}P?WLf=Whsn#rav|^ud zo>54FvAk^moA62U;j6FSw$>D2exp*8_%eQJ4D*|XS=r8}6ZI$U+T^-pb|?eWf{BKa z+ZOh=bo+QQ33&Ax3O(Qum$YhSh;FFAHTQu0lg3EHGVu==66`&8a!CJq{j;X-a8vh_ zxjt&)Y7c^#1fuwWIvBprPz>hYaOq#d>jR%86fSNw+s{4wxk4&;S6ie}d{=CMr^3Z# zPY08aduxDBvtW!p^>~ew{?q7B##f88&C`L-&fPJ|r_V-R={rUGuKtD6X$v~usmSd!uDXz7Pf{pSDG9G z;u6;i8A$N>y|ovYt3H^}ll{N&WAe@zvHw9cy}6SZvaOy*gkHVeoYIb6Mw<&;$U|fN5C( literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/AdapterTransition/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f136c9f14ce3525c694f5ac572337e4f1f249b09 GIT binary patch literal 10238 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/AdapterTransition/res/layout-w720dp/activity_main.xml b/samples/browseable/AdapterTransition/res/layout-w720dp/activity_main.xml new file mode 100755 index 000000000..c9a52f621 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout-w720dp/activity_main.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/AdapterTransition/res/layout/activity_main.xml b/samples/browseable/AdapterTransition/res/layout/activity_main.xml new file mode 100755 index 000000000..1ae4f981e --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/activity_main.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/AdapterTransition/res/layout/fragment_adapter_transition.xml b/samples/browseable/AdapterTransition/res/layout/fragment_adapter_transition.xml new file mode 100644 index 000000000..22ec09060 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/fragment_adapter_transition.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/samples/browseable/AdapterTransition/res/layout/fragment_meat_grid.xml b/samples/browseable/AdapterTransition/res/layout/fragment_meat_grid.xml new file mode 100644 index 000000000..9a4f7a179 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/fragment_meat_grid.xml @@ -0,0 +1,29 @@ + + + diff --git a/samples/browseable/AdapterTransition/res/layout/fragment_meat_list.xml b/samples/browseable/AdapterTransition/res/layout/fragment_meat_list.xml new file mode 100644 index 000000000..4523b2661 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/fragment_meat_list.xml @@ -0,0 +1,21 @@ + + + diff --git a/samples/browseable/AdapterTransition/res/layout/item_meat_grid.xml b/samples/browseable/AdapterTransition/res/layout/item_meat_grid.xml new file mode 100644 index 000000000..d7fb77a76 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/item_meat_grid.xml @@ -0,0 +1,50 @@ + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/AdapterTransition/res/layout/item_meat_list.xml b/samples/browseable/AdapterTransition/res/layout/item_meat_list.xml new file mode 100644 index 000000000..8d75b9094 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/layout/item_meat_list.xml @@ -0,0 +1,46 @@ + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/AdapterTransition/res/menu/fragment_adapter_transition.xml b/samples/browseable/AdapterTransition/res/menu/fragment_adapter_transition.xml new file mode 100644 index 000000000..2a51b1133 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/menu/fragment_adapter_transition.xml @@ -0,0 +1,23 @@ + + +

+ + diff --git a/samples/browseable/AdapterTransition/res/menu/main.xml b/samples/browseable/AdapterTransition/res/menu/main.xml new file mode 100644 index 000000000..b49c2c526 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/menu/main.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/samples/browseable/AdapterTransition/res/values-sw600dp/template-dimens.xml b/samples/browseable/AdapterTransition/res/values-sw600dp/template-dimens.xml new file mode 100644 index 000000000..22074a2bd --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values-sw600dp/template-dimens.xml @@ -0,0 +1,24 @@ + + + + + + + @dimen/margin_huge + @dimen/margin_medium + + diff --git a/samples/browseable/AdapterTransition/res/values-sw600dp/template-styles.xml b/samples/browseable/AdapterTransition/res/values-sw600dp/template-styles.xml new file mode 100644 index 000000000..03d197418 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values-sw600dp/template-styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/samples/browseable/AdapterTransition/res/values-w820dp/dimens.xml b/samples/browseable/AdapterTransition/res/values-w820dp/dimens.xml new file mode 100644 index 000000000..63fc81644 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/samples/browseable/AdapterTransition/res/values/base-strings.xml b/samples/browseable/AdapterTransition/res/values/base-strings.xml new file mode 100644 index 000000000..353c67e0a --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values/base-strings.xml @@ -0,0 +1,31 @@ + + + + + + + AdapterTransition + + + + diff --git a/samples/browseable/AdapterTransition/res/values/dimens.xml b/samples/browseable/AdapterTransition/res/values/dimens.xml new file mode 100644 index 000000000..a0171a705 --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values/dimens.xml @@ -0,0 +1,6 @@ + + + 16dp + 16dp + + diff --git a/samples/browseable/AdapterTransition/res/values/strings.xml b/samples/browseable/AdapterTransition/res/values/strings.xml new file mode 100755 index 000000000..7b9d9ec4f --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values/strings.xml @@ -0,0 +1,19 @@ + + + Show Log + Hide Log + diff --git a/samples/browseable/AdapterTransition/res/values/template-dimens.xml b/samples/browseable/AdapterTransition/res/values/template-dimens.xml new file mode 100644 index 000000000..39e710b5c --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values/template-dimens.xml @@ -0,0 +1,32 @@ + + + + + + + 4dp + 8dp + 16dp + 32dp + 64dp + + + + @dimen/margin_medium + @dimen/margin_medium + + diff --git a/samples/browseable/AdapterTransition/res/values/template-styles.xml b/samples/browseable/AdapterTransition/res/values/template-styles.xml new file mode 100644 index 000000000..404623e3d --- /dev/null +++ b/samples/browseable/AdapterTransition/res/values/template-styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/AdapterTransitionFragment.java b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/AdapterTransitionFragment.java new file mode 100644 index 000000000..525ed4035 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/AdapterTransitionFragment.java @@ -0,0 +1,244 @@ +/* + * Copyright 2014 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.example.android.adaptertransition; + +import android.os.Bundle; +import android.support.v4.app.ActivityCompat; +import android.support.v4.app.Fragment; +import android.transition.AutoTransition; +import android.transition.Scene; +import android.transition.Transition; +import android.transition.TransitionManager; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.ListView; + +/** + * Main screen for AdapterTransition sample. + */ +public class AdapterTransitionFragment extends Fragment implements Transition.TransitionListener { + + /** + * Since the transition framework requires all relevant views in a view hierarchy to be marked + * with IDs, we use this ID to mark the root view. + */ + private static final int ROOT_ID = 1; + + /** + * This is where we place our AdapterView (ListView / GridView). + */ + private FrameLayout mContent; + + /** + * This is where we carry out the transition. + */ + private FrameLayout mCover; + + /** + * This list shows our contents. It can be ListView or GridView, and we toggle between them + * using the transition framework. + */ + private AbsListView mAbsListView; + + /** + * This is our contents. + */ + private MeatAdapter mAdapter; + + public static AdapterTransitionFragment newInstance() { + return new AdapterTransitionFragment(); + } + + public AdapterTransitionFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // We use a ListView at first + mAbsListView = (AbsListView) inflater.inflate(R.layout.fragment_meat_list, container, false); + mAdapter = new MeatAdapter(inflater, R.layout.item_meat_list); + return inflater.inflate(R.layout.fragment_adapter_transition, container, false); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + // Retaining references for FrameLayouts that we use later. + mContent = (FrameLayout) view.findViewById(R.id.content); + mCover = (FrameLayout) view.findViewById(R.id.cover); + // We are attaching the list to the screen here. + mAbsListView.setAdapter(mAdapter); + mContent.addView(mAbsListView); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.fragment_adapter_transition, menu); + } + + @Override + public void onPrepareOptionsMenu(Menu menu) { + // We change the look of the icon every time the user toggles between list and grid. + MenuItem item = menu.findItem(R.id.action_toggle); + if (null != item) { + if (mAbsListView instanceof ListView) { + item.setIcon(R.drawable.ic_action_grid); + } else { + item.setIcon(R.drawable.ic_action_list); + } + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_toggle: { + toggle(); + return true; + } + } + return false; + } + + @Override + public void onTransitionStart(Transition transition) { + } + + // BEGIN_INCLUDE(on_transition_end) + @Override + public void onTransitionEnd(Transition transition) { + // When the transition ends, we remove all the views from the overlay and hide it. + mCover.removeAllViews(); + mCover.setVisibility(View.INVISIBLE); + } + // END_INCLUDE(on_transition_end) + + @Override + public void onTransitionCancel(Transition transition) { + } + + @Override + public void onTransitionPause(Transition transition) { + } + + @Override + public void onTransitionResume(Transition transition) { + } + + /** + * Toggle the UI between ListView and GridView. + */ + private void toggle() { + // We use mCover as the overlay on which we carry out the transition. + mCover.setVisibility(View.VISIBLE); + // This FrameLayout holds all the visible views in the current list or grid. We use this as + // the starting Scene of the Transition later. + FrameLayout before = copyVisibleViews(); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); + mCover.addView(before, params); + // Swap the actual list. + swapAbsListView(); + // We also swap the icon for the toggle button. + ActivityCompat.invalidateOptionsMenu(getActivity()); + // It is now ready to start the transition. + mAbsListView.post(new Runnable() { + @Override + public void run() { + // BEGIN_INCLUDE(transition_with_listener) + Scene scene = new Scene(mCover, copyVisibleViews()); + Transition transition = new AutoTransition(); + transition.addListener(AdapterTransitionFragment.this); + TransitionManager.go(scene, transition); + // END_INCLUDE(transition_with_listener) + } + }); + } + + /** + * Swap ListView with GridView, or GridView with ListView. + */ + private void swapAbsListView() { + // We save the current scrolling position before removing the current list. + int first = mAbsListView.getFirstVisiblePosition(); + // If the current list is a GridView, we replace it with a ListView. If it is a ListView, + // a GridView. + LayoutInflater inflater = LayoutInflater.from(getActivity()); + if (mAbsListView instanceof GridView) { + mAbsListView = (AbsListView) inflater.inflate( + R.layout.fragment_meat_list, (ViewGroup) mAbsListView.getParent(), false); + mAdapter = new MeatAdapter(inflater, R.layout.item_meat_list); + } else { + mAbsListView = (AbsListView) inflater.inflate( + R.layout.fragment_meat_grid, (ViewGroup) mAbsListView.getParent(), false); + mAdapter = new MeatAdapter(inflater, R.layout.item_meat_grid); + } + mAbsListView.setAdapter(mAdapter); + // We restore the scrolling position here. + mAbsListView.setSelection(first); + // The new list is ready, and we replace the existing one with it. + mContent.removeAllViews(); + mContent.addView(mAbsListView); + } + + /** + * Copy all the visible views in the mAbsListView into a new FrameLayout and return it. + * + * @return a FrameLayout with all the visible views inside. + */ + private FrameLayout copyVisibleViews() { + // This is the FrameLayout we return afterwards. + FrameLayout layout = new FrameLayout(getActivity()); + // The transition framework requires to set ID for all views to be animated. + layout.setId(ROOT_ID); + // We only copy visible views. + int first = mAbsListView.getFirstVisiblePosition(); + int index = 0; + while (true) { + // This is one of the views that we copy. Note that the argument for getChildAt is a + // zero-oriented index, and it doesn't usually match with its position in the list. + View source = mAbsListView.getChildAt(index); + if (null == source) { + break; + } + // This is the copy of the original view. + View destination = mAdapter.getView(first + index, null, layout); + assert destination != null; + destination.setId(ROOT_ID + first + index); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( + source.getWidth(), source.getHeight()); + params.leftMargin = (int) source.getX(); + params.topMargin = (int) source.getY(); + layout.addView(destination, params); + ++index; + } + return layout; + } + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MainActivity.java b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MainActivity.java new file mode 100644 index 000000000..a45632c70 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MainActivity.java @@ -0,0 +1,110 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + + + +package com.example.android.adaptertransition; + +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ViewAnimator; + +import com.example.android.common.activities.SampleActivityBase; +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogFragment; +import com.example.android.common.logger.LogWrapper; +import com.example.android.common.logger.MessageOnlyLogFilter; + +/** + * A simple launcher activity containing a summary sample description, sample log and a custom + * {@link android.support.v4.app.Fragment} which can display a view. + *

+ * For devices with displays with a width of 720dp or greater, the sample log is always visible, + * on other devices it's visibility is controlled by an item on the Action Bar. + */ +public class MainActivity extends SampleActivityBase { + + public static final String TAG = "MainActivity"; + + // Whether the Log Fragment is currently shown + private boolean mLogShown; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + AdapterTransitionFragment fragment = new AdapterTransitionFragment(); + transaction.replace(R.id.sample_content_fragment, fragment); + transaction.commit(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); + logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); + logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_toggle_log: + mLogShown = !mLogShown; + ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); + if (mLogShown) { + output.setDisplayedChild(1); + } else { + output.setDisplayedChild(0); + } + supportInvalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** Create a chain of targets that will receive log data */ + @Override + public void initializeLogging() { + // Wraps Android's native log framework. + LogWrapper logWrapper = new LogWrapper(); + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + Log.setLogNode(logWrapper); + + // Filter strips out everything except the message text. + MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); + logWrapper.setNext(msgFilter); + + // On screen logging via a fragment with a TextView. + LogFragment logFragment = (LogFragment) getSupportFragmentManager() + .findFragmentById(R.id.log_fragment); + msgFilter.setNext(logFragment.getLogView()); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/Meat.java b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/Meat.java new file mode 100644 index 000000000..bca1c5f00 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/Meat.java @@ -0,0 +1,46 @@ +/* + * Copyright 2014 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.example.android.adaptertransition; + +/** + * Sample data. + */ +public class Meat { + + public int resourceId; + public String title; + + public Meat(int resourceId, String title) { + this.resourceId = resourceId; + this.title = title; + } + + public static final Meat[] MEATS = { + new Meat(R.drawable.p1, "First"), + new Meat(R.drawable.p2, "Second"), + new Meat(R.drawable.p3, "Third"), + new Meat(R.drawable.p4, "Fourth"), + new Meat(R.drawable.p5, "Fifth"), + new Meat(R.drawable.p6, "Sixth"), + new Meat(R.drawable.p7, "Seventh"), + new Meat(R.drawable.p8, "Eighth"), + new Meat(R.drawable.p9, "Ninth"), + new Meat(R.drawable.p10, "Tenth"), + new Meat(R.drawable.p11, "Eleventh"), + }; + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MeatAdapter.java b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MeatAdapter.java new file mode 100644 index 000000000..c7630cedf --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.adaptertransition/MeatAdapter.java @@ -0,0 +1,88 @@ +/* + * Copyright 2014 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.example.android.adaptertransition; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +/** + * This class provides data as Views. It is designed to support both ListView and GridView by + * changing a layout resource file to inflate. + */ +public class MeatAdapter extends BaseAdapter { + + private final LayoutInflater mLayoutInflater; + private final int mResourceId; + + /** + * Create a new instance of {@link MeatAdapter}. + * + * @param inflater The layout inflater. + * @param resourceId The resource ID for the layout to be used. The layout should contain an + * ImageView with ID of "meat_image" and a TextView with ID of "meat_title". + */ + public MeatAdapter(LayoutInflater inflater, int resourceId) { + mLayoutInflater = inflater; + mResourceId = resourceId; + } + + @Override + public int getCount() { + return Meat.MEATS.length; + } + + @Override + public Meat getItem(int position) { + return Meat.MEATS[position]; + } + + @Override + public long getItemId(int position) { + return Meat.MEATS[position].resourceId; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final View view; + final ViewHolder holder; + if (null == convertView) { + view = mLayoutInflater.inflate(mResourceId, parent, false); + holder = new ViewHolder(); + assert view != null; + holder.image = (ImageView) view.findViewById(R.id.meat_image); + holder.title = (TextView) view.findViewById(R.id.meat_title); + view.setTag(holder); + } else { + view = convertView; + holder = (ViewHolder) view.getTag(); + } + Meat meat = getItem(position); + holder.image.setImageResource(meat.resourceId); + holder.title.setText(meat.title); + return view; + } + + private static class ViewHolder { + public ImageView image; + public TextView title; + } + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/activities/SampleActivityBase.java b/samples/browseable/AdapterTransition/src/com.example.android.common/activities/SampleActivityBase.java new file mode 100644 index 000000000..3228927b7 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/activities/SampleActivityBase.java @@ -0,0 +1,52 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.activities; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogWrapper; + +/** + * Base launcher activity, to handle most of the common plumbing for samples. + */ +public class SampleActivityBase extends FragmentActivity { + + public static final String TAG = "SampleActivityBase"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onStart() { + super.onStart(); + initializeLogging(); + } + + /** Set up targets to receive log data */ + public void initializeLogging() { + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + // Wraps Android's native log framework + LogWrapper logWrapper = new LogWrapper(); + Log.setLogNode(logWrapper); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/Log.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/Log.java new file mode 100644 index 000000000..17503c568 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/Log.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Helper class for a list (or tree) of LoggerNodes. + * + *

When this is set as the head of the list, + * an instance of it can function as a drop-in replacement for {@link android.util.Log}. + * Most of the methods in this class server only to map a method call in Log to its equivalent + * in LogNode.

+ */ +public class Log { + // Grabbing the native values from Android's native logging facilities, + // to make for easy migration and interop. + public static final int NONE = -1; + public static final int VERBOSE = android.util.Log.VERBOSE; + public static final int DEBUG = android.util.Log.DEBUG; + public static final int INFO = android.util.Log.INFO; + public static final int WARN = android.util.Log.WARN; + public static final int ERROR = android.util.Log.ERROR; + public static final int ASSERT = android.util.Log.ASSERT; + + // Stores the beginning of the LogNode topology. + private static LogNode mLogNode; + + /** + * Returns the next LogNode in the linked list. + */ + public static LogNode getLogNode() { + return mLogNode; + } + + /** + * Sets the LogNode data will be sent to. + */ + public static void setLogNode(LogNode node) { + mLogNode = node; + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void println(int priority, String tag, String msg, Throwable tr) { + if (mLogNode != null) { + mLogNode.println(priority, tag, msg, tr); + } + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + */ + public static void println(int priority, String tag, String msg) { + println(priority, tag, msg, null); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void v(String tag, String msg, Throwable tr) { + println(VERBOSE, tag, msg, tr); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void v(String tag, String msg) { + v(tag, msg, null); + } + + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void d(String tag, String msg, Throwable tr) { + println(DEBUG, tag, msg, tr); + } + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void d(String tag, String msg) { + d(tag, msg, null); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void i(String tag, String msg, Throwable tr) { + println(INFO, tag, msg, tr); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void i(String tag, String msg) { + i(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, String msg, Throwable tr) { + println(WARN, tag, msg, tr); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void w(String tag, String msg) { + w(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, Throwable tr) { + w(tag, null, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void e(String tag, String msg, Throwable tr) { + println(ERROR, tag, msg, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void e(String tag, String msg) { + e(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, String msg, Throwable tr) { + println(ASSERT, tag, msg, tr); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void wtf(String tag, String msg) { + wtf(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, Throwable tr) { + wtf(tag, null, tr); + } +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogFragment.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogFragment.java new file mode 100644 index 000000000..b302acd4b --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogFragment.java @@ -0,0 +1,109 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.logger; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; + +/** + * Simple fraggment which contains a LogView and uses is to output log data it receives + * through the LogNode interface. + */ +public class LogFragment extends Fragment { + + private LogView mLogView; + private ScrollView mScrollView; + + public LogFragment() {} + + public View inflateViews() { + mScrollView = new ScrollView(getActivity()); + ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + mScrollView.setLayoutParams(scrollParams); + + mLogView = new LogView(getActivity()); + ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); + logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; + mLogView.setLayoutParams(logParams); + mLogView.setClickable(true); + mLogView.setFocusable(true); + mLogView.setTypeface(Typeface.MONOSPACE); + + // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! + int paddingDips = 16; + double scale = getResources().getDisplayMetrics().density; + int paddingPixels = (int) ((paddingDips * (scale)) + .5); + mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); + mLogView.setCompoundDrawablePadding(paddingPixels); + + mLogView.setGravity(Gravity.BOTTOM); + mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); + + mScrollView.addView(mLogView); + return mScrollView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View result = inflateViews(); + + mLogView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void afterTextChanged(Editable s) { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); + return result; + } + + public LogView getLogView() { + return mLogView; + } +} \ No newline at end of file diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogNode.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogNode.java new file mode 100644 index 000000000..bc37cabc0 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogNode.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Basic interface for a logging system that can output to one or more targets. + * Note that in addition to classes that will output these logs in some format, + * one can also implement this interface over a filter and insert that in the chain, + * such that no targets further down see certain data, or see manipulated forms of the data. + * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data + * it received to HTML and sent it along to the next node in the chain, without printing it + * anywhere. + */ +public interface LogNode { + + /** + * Instructs first LogNode in the list to print the log data provided. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public void println(int priority, String tag, String msg, Throwable tr); + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogView.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogView.java new file mode 100644 index 000000000..c01542b91 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogView.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.app.Activity; +import android.content.Context; +import android.util.*; +import android.widget.TextView; + +/** Simple TextView which is used to output log data received through the LogNode interface. +*/ +public class LogView extends TextView implements LogNode { + + public LogView(Context context) { + super(context); + } + + public LogView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LogView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Formats the log data and prints it out to the LogView. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + + + String priorityStr = null; + + // For the purposes of this View, we want to print the priority as readable text. + switch(priority) { + case android.util.Log.VERBOSE: + priorityStr = "VERBOSE"; + break; + case android.util.Log.DEBUG: + priorityStr = "DEBUG"; + break; + case android.util.Log.INFO: + priorityStr = "INFO"; + break; + case android.util.Log.WARN: + priorityStr = "WARN"; + break; + case android.util.Log.ERROR: + priorityStr = "ERROR"; + break; + case android.util.Log.ASSERT: + priorityStr = "ASSERT"; + break; + default: + break; + } + + // Handily, the Log class has a facility for converting a stack trace into a usable string. + String exceptionStr = null; + if (tr != null) { + exceptionStr = android.util.Log.getStackTraceString(tr); + } + + // Take the priority, tag, message, and exception, and concatenate as necessary + // into one usable line of text. + final StringBuilder outputBuilder = new StringBuilder(); + + String delimiter = "\t"; + appendIfNotNull(outputBuilder, priorityStr, delimiter); + appendIfNotNull(outputBuilder, tag, delimiter); + appendIfNotNull(outputBuilder, msg, delimiter); + appendIfNotNull(outputBuilder, exceptionStr, delimiter); + + // In case this was originally called from an AsyncTask or some other off-UI thread, + // make sure the update occurs within the UI thread. + ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() { + @Override + public void run() { + // Display the text we just generated within the LogView. + appendToLog(outputBuilder.toString()); + } + }))); + + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } + + public LogNode getNext() { + return mNext; + } + + public void setNext(LogNode node) { + mNext = node; + } + + /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since + * the logger takes so many arguments that might be null, this method helps cut out some of the + * agonizing tedium of writing the same 3 lines over and over. + * @param source StringBuilder containing the text to append to. + * @param addStr The String to append + * @param delimiter The String to separate the source and appended strings. A tab or comma, + * for instance. + * @return The fully concatenated String as a StringBuilder + */ + private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { + if (addStr != null) { + if (addStr.length() == 0) { + delimiter = ""; + } + + return source.append(addStr).append(delimiter); + } + return source; + } + + // The next LogNode in the chain. + LogNode mNext; + + /** Outputs the string as a new line of log data in the LogView. */ + public void appendToLog(String s) { + append("\n" + s); + } + + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogWrapper.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogWrapper.java new file mode 100644 index 000000000..16a9e7ba2 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/LogWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.util.Log; + +/** + * Helper class which wraps Android's native Log utility in the Logger interface. This way + * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. + */ +public class LogWrapper implements LogNode { + + // For piping: The next node to receive Log data after this one has done its work. + private LogNode mNext; + + /** + * Returns the next LogNode in the linked list. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Prints data out to the console using Android's native log mechanism. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + // There actually are log methods that don't take a msg parameter. For now, + // if that's the case, just convert null to the empty string and move on. + String useMsg = msg; + if (useMsg == null) { + useMsg = ""; + } + + // If an exeption was provided, convert that exception to a usable string and attach + // it to the end of the msg method. + if (tr != null) { + msg += "\n" + Log.getStackTraceString(tr); + } + + // This is functionally identical to Log.x(tag, useMsg); + // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) + Log.println(priority, tag, useMsg); + + // If this isn't the last node in the chain, move things along. + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java new file mode 100644 index 000000000..19967dcd4 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Simple {@link LogNode} filter, removes everything except the message. + * Useful for situations like on-screen log output where you don't want a lot of metadata displayed, + * just easy-to-read message updates as they're happening. + */ +public class MessageOnlyLogFilter implements LogNode { + + LogNode mNext; + + /** + * Takes the "next" LogNode as a parameter, to simplify chaining. + * + * @param next The next LogNode in the pipeline. + */ + public MessageOnlyLogFilter(LogNode next) { + mNext = next; + } + + public MessageOnlyLogFilter() { + } + + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + if (mNext != null) { + getNext().println(Log.NONE, null, msg, null); + } + } + + /** + * Returns the next LogNode in the chain. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabLayout.java b/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabLayout.java new file mode 100644 index 000000000..20049e335 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabLayout.java @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.view; + +import android.content.Context; +import android.graphics.Typeface; +import android.os.Build; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.HorizontalScrollView; +import android.widget.TextView; + +/** + * To be used with ViewPager to provide a tab indicator component which give constant feedback as to + * the user's scroll progress. + *

+ * To use the component, simply add it to your view hierarchy. Then in your + * {@link android.app.Activity} or {@link android.support.v4.app.Fragment} call + * {@link #setViewPager(ViewPager)} providing it the ViewPager this layout is being used for. + *

+ * The colors can be customized in two ways. The first and simplest is to provide an array of colors + * via {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)}. The + * alternative is via the {@link TabColorizer} interface which provides you complete control over + * which color is used for any individual position. + *

+ * The views used as tabs can be customized by calling {@link #setCustomTabView(int, int)}, + * providing the layout ID of your custom layout. + */ +public class SlidingTabLayout extends HorizontalScrollView { + + /** + * Allows complete control over the colors drawn in the tab layout. Set with + * {@link #setCustomTabColorizer(TabColorizer)}. + */ + public interface TabColorizer { + + /** + * @return return the color of the indicator used when {@code position} is selected. + */ + int getIndicatorColor(int position); + + /** + * @return return the color of the divider drawn to the right of {@code position}. + */ + int getDividerColor(int position); + + } + + private static final int TITLE_OFFSET_DIPS = 24; + private static final int TAB_VIEW_PADDING_DIPS = 16; + private static final int TAB_VIEW_TEXT_SIZE_SP = 12; + + private int mTitleOffset; + + private int mTabViewLayoutId; + private int mTabViewTextViewId; + + private ViewPager mViewPager; + private ViewPager.OnPageChangeListener mViewPagerPageChangeListener; + + private final SlidingTabStrip mTabStrip; + + public SlidingTabLayout(Context context) { + this(context, null); + } + + public SlidingTabLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + // Disable the Scroll Bar + setHorizontalScrollBarEnabled(false); + // Make sure that the Tab Strips fills this View + setFillViewport(true); + + mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density); + + mTabStrip = new SlidingTabStrip(context); + addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + } + + /** + * Set the custom {@link TabColorizer} to be used. + * + * If you only require simple custmisation then you can use + * {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve + * similar effects. + */ + public void setCustomTabColorizer(TabColorizer tabColorizer) { + mTabStrip.setCustomTabColorizer(tabColorizer); + } + + /** + * Sets the colors to be used for indicating the selected tab. These colors are treated as a + * circular array. Providing one color will mean that all tabs are indicated with the same color. + */ + public void setSelectedIndicatorColors(int... colors) { + mTabStrip.setSelectedIndicatorColors(colors); + } + + /** + * Sets the colors to be used for tab dividers. These colors are treated as a circular array. + * Providing one color will mean that all tabs are indicated with the same color. + */ + public void setDividerColors(int... colors) { + mTabStrip.setDividerColors(colors); + } + + /** + * Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are + * required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so + * that the layout can update it's scroll position correctly. + * + * @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener) + */ + public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { + mViewPagerPageChangeListener = listener; + } + + /** + * Set the custom layout to be inflated for the tab views. + * + * @param layoutResId Layout id to be inflated + * @param textViewId id of the {@link TextView} in the inflated view + */ + public void setCustomTabView(int layoutResId, int textViewId) { + mTabViewLayoutId = layoutResId; + mTabViewTextViewId = textViewId; + } + + /** + * Sets the associated view pager. Note that the assumption here is that the pager content + * (number of tabs and tab titles) does not change after this call has been made. + */ + public void setViewPager(ViewPager viewPager) { + mTabStrip.removeAllViews(); + + mViewPager = viewPager; + if (viewPager != null) { + viewPager.setOnPageChangeListener(new InternalViewPagerListener()); + populateTabStrip(); + } + } + + /** + * Create a default view to be used for tabs. This is called if a custom tab view is not set via + * {@link #setCustomTabView(int, int)}. + */ + protected TextView createDefaultTabView(Context context) { + TextView textView = new TextView(context); + textView.setGravity(Gravity.CENTER); + textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); + textView.setTypeface(Typeface.DEFAULT_BOLD); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // If we're running on Honeycomb or newer, then we can use the Theme's + // selectableItemBackground to ensure that the View has a pressed state + TypedValue outValue = new TypedValue(); + getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, + outValue, true); + textView.setBackgroundResource(outValue.resourceId); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style + textView.setAllCaps(true); + } + + int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); + textView.setPadding(padding, padding, padding, padding); + + return textView; + } + + private void populateTabStrip() { + final PagerAdapter adapter = mViewPager.getAdapter(); + final View.OnClickListener tabClickListener = new TabClickListener(); + + for (int i = 0; i < adapter.getCount(); i++) { + View tabView = null; + TextView tabTitleView = null; + + if (mTabViewLayoutId != 0) { + // If there is a custom tab view layout id set, try and inflate it + tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, + false); + tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); + } + + if (tabView == null) { + tabView = createDefaultTabView(getContext()); + } + + if (tabTitleView == null && TextView.class.isInstance(tabView)) { + tabTitleView = (TextView) tabView; + } + + tabTitleView.setText(adapter.getPageTitle(i)); + tabView.setOnClickListener(tabClickListener); + + mTabStrip.addView(tabView); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + if (mViewPager != null) { + scrollToTab(mViewPager.getCurrentItem(), 0); + } + } + + private void scrollToTab(int tabIndex, int positionOffset) { + final int tabStripChildCount = mTabStrip.getChildCount(); + if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { + return; + } + + View selectedChild = mTabStrip.getChildAt(tabIndex); + if (selectedChild != null) { + int targetScrollX = selectedChild.getLeft() + positionOffset; + + if (tabIndex > 0 || positionOffset > 0) { + // If we're not at the first child and are mid-scroll, make sure we obey the offset + targetScrollX -= mTitleOffset; + } + + scrollTo(targetScrollX, 0); + } + } + + private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { + private int mScrollState; + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + int tabStripChildCount = mTabStrip.getChildCount(); + if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { + return; + } + + mTabStrip.onViewPagerPageChanged(position, positionOffset); + + View selectedTitle = mTabStrip.getChildAt(position); + int extraOffset = (selectedTitle != null) + ? (int) (positionOffset * selectedTitle.getWidth()) + : 0; + scrollToTab(position, extraOffset); + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, + positionOffsetPixels); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + mScrollState = state; + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageScrollStateChanged(state); + } + } + + @Override + public void onPageSelected(int position) { + if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { + mTabStrip.onViewPagerPageChanged(position, 0f); + scrollToTab(position, 0); + } + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageSelected(position); + } + } + + } + + private class TabClickListener implements View.OnClickListener { + @Override + public void onClick(View v) { + for (int i = 0; i < mTabStrip.getChildCount(); i++) { + if (v == mTabStrip.getChildAt(i)) { + mViewPager.setCurrentItem(i); + return; + } + } + } + } + +} diff --git a/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabStrip.java b/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabStrip.java new file mode 100644 index 000000000..d5bbbae59 --- /dev/null +++ b/samples/browseable/AdapterTransition/src/com.example.android.common/view/SlidingTabStrip.java @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.view; + +import android.R; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.View; +import android.widget.LinearLayout; + +class SlidingTabStrip extends LinearLayout { + + private static final int DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS = 2; + private static final byte DEFAULT_BOTTOM_BORDER_COLOR_ALPHA = 0x26; + private static final int SELECTED_INDICATOR_THICKNESS_DIPS = 8; + private static final int DEFAULT_SELECTED_INDICATOR_COLOR = 0xFF33B5E5; + + private static final int DEFAULT_DIVIDER_THICKNESS_DIPS = 1; + private static final byte DEFAULT_DIVIDER_COLOR_ALPHA = 0x20; + private static final float DEFAULT_DIVIDER_HEIGHT = 0.5f; + + private final int mBottomBorderThickness; + private final Paint mBottomBorderPaint; + + private final int mSelectedIndicatorThickness; + private final Paint mSelectedIndicatorPaint; + + private final int mDefaultBottomBorderColor; + + private final Paint mDividerPaint; + private final float mDividerHeight; + + private int mSelectedPosition; + private float mSelectionOffset; + + private SlidingTabLayout.TabColorizer mCustomTabColorizer; + private final SimpleTabColorizer mDefaultTabColorizer; + + SlidingTabStrip(Context context) { + this(context, null); + } + + SlidingTabStrip(Context context, AttributeSet attrs) { + super(context, attrs); + setWillNotDraw(false); + + final float density = getResources().getDisplayMetrics().density; + + TypedValue outValue = new TypedValue(); + context.getTheme().resolveAttribute(R.attr.colorForeground, outValue, true); + final int themeForegroundColor = outValue.data; + + mDefaultBottomBorderColor = setColorAlpha(themeForegroundColor, + DEFAULT_BOTTOM_BORDER_COLOR_ALPHA); + + mDefaultTabColorizer = new SimpleTabColorizer(); + mDefaultTabColorizer.setIndicatorColors(DEFAULT_SELECTED_INDICATOR_COLOR); + mDefaultTabColorizer.setDividerColors(setColorAlpha(themeForegroundColor, + DEFAULT_DIVIDER_COLOR_ALPHA)); + + mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density); + mBottomBorderPaint = new Paint(); + mBottomBorderPaint.setColor(mDefaultBottomBorderColor); + + mSelectedIndicatorThickness = (int) (SELECTED_INDICATOR_THICKNESS_DIPS * density); + mSelectedIndicatorPaint = new Paint(); + + mDividerHeight = DEFAULT_DIVIDER_HEIGHT; + mDividerPaint = new Paint(); + mDividerPaint.setStrokeWidth((int) (DEFAULT_DIVIDER_THICKNESS_DIPS * density)); + } + + void setCustomTabColorizer(SlidingTabLayout.TabColorizer customTabColorizer) { + mCustomTabColorizer = customTabColorizer; + invalidate(); + } + + void setSelectedIndicatorColors(int... colors) { + // Make sure that the custom colorizer is removed + mCustomTabColorizer = null; + mDefaultTabColorizer.setIndicatorColors(colors); + invalidate(); + } + + void setDividerColors(int... colors) { + // Make sure that the custom colorizer is removed + mCustomTabColorizer = null; + mDefaultTabColorizer.setDividerColors(colors); + invalidate(); + } + + void onViewPagerPageChanged(int position, float positionOffset) { + mSelectedPosition = position; + mSelectionOffset = positionOffset; + invalidate(); + } + + @Override + protected void onDraw(Canvas canvas) { + final int height = getHeight(); + final int childCount = getChildCount(); + final int dividerHeightPx = (int) (Math.min(Math.max(0f, mDividerHeight), 1f) * height); + final SlidingTabLayout.TabColorizer tabColorizer = mCustomTabColorizer != null + ? mCustomTabColorizer + : mDefaultTabColorizer; + + // Thick colored underline below the current selection + if (childCount > 0) { + View selectedTitle = getChildAt(mSelectedPosition); + int left = selectedTitle.getLeft(); + int right = selectedTitle.getRight(); + int color = tabColorizer.getIndicatorColor(mSelectedPosition); + + if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1)) { + int nextColor = tabColorizer.getIndicatorColor(mSelectedPosition + 1); + if (color != nextColor) { + color = blendColors(nextColor, color, mSelectionOffset); + } + + // Draw the selection partway between the tabs + View nextTitle = getChildAt(mSelectedPosition + 1); + left = (int) (mSelectionOffset * nextTitle.getLeft() + + (1.0f - mSelectionOffset) * left); + right = (int) (mSelectionOffset * nextTitle.getRight() + + (1.0f - mSelectionOffset) * right); + } + + mSelectedIndicatorPaint.setColor(color); + + canvas.drawRect(left, height - mSelectedIndicatorThickness, right, + height, mSelectedIndicatorPaint); + } + + // Thin underline along the entire bottom edge + canvas.drawRect(0, height - mBottomBorderThickness, getWidth(), height, mBottomBorderPaint); + + // Vertical separators between the titles + int separatorTop = (height - dividerHeightPx) / 2; + for (int i = 0; i < childCount - 1; i++) { + View child = getChildAt(i); + mDividerPaint.setColor(tabColorizer.getDividerColor(i)); + canvas.drawLine(child.getRight(), separatorTop, child.getRight(), + separatorTop + dividerHeightPx, mDividerPaint); + } + } + + /** + * Set the alpha value of the {@code color} to be the given {@code alpha} value. + */ + private static int setColorAlpha(int color, byte alpha) { + return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)); + } + + /** + * Blend {@code color1} and {@code color2} using the given ratio. + * + * @param ratio of which to blend. 1.0 will return {@code color1}, 0.5 will give an even blend, + * 0.0 will return {@code color2}. + */ + private static int blendColors(int color1, int color2, float ratio) { + final float inverseRation = 1f - ratio; + float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation); + float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation); + float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); + return Color.rgb((int) r, (int) g, (int) b); + } + + private static class SimpleTabColorizer implements SlidingTabLayout.TabColorizer { + private int[] mIndicatorColors; + private int[] mDividerColors; + + @Override + public final int getIndicatorColor(int position) { + return mIndicatorColors[position % mIndicatorColors.length]; + } + + @Override + public final int getDividerColor(int position) { + return mDividerColors[position % mDividerColors.length]; + } + + void setIndicatorColors(int... colors) { + mIndicatorColors = colors; + } + + void setDividerColors(int... colors) { + mDividerColors = colors; + } + } +} \ No newline at end of file diff --git a/samples/browseable/AdvancedImmersiveMode/res/drawable-hdpi/ic_launcher.png b/samples/browseable/AdvancedImmersiveMode/res/drawable-hdpi/ic_launcher.png index b1efaf4b23929755615dc16fa196c5f8496bbf9a..b96e6a546cd592236cd6444a26b9cc7b36ef37ea 100644 GIT binary patch literal 5232 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 diff --git a/samples/browseable/AdvancedImmersiveMode/res/drawable-mdpi/ic_launcher.png b/samples/browseable/AdvancedImmersiveMode/res/drawable-mdpi/ic_launcher.png index f5f9244f24dccccab7dbc1259ddfceb0cba619c0..1294d5b7bcf79217291df567877836c8137db444 100644 GIT binary patch delta 3129 zcmV-9494^46TKLaBYzA8Nkl3&28NHsdXZ3hr@PZed*fo#^lLWI9l@dWB zwIr0HrcFx0Bk&a1RNi}SG~C)zi@-eWU@TY1cru&0*&sb-@m-#2it+OUlGV|Yio1I#l@K)XYdN! z@bGXbJ3BiM+ii-#r26{$Mzh)cSX*Ba2!%p{;^N{$Y~ND^60wnknVtW~e|#Dr7bna( zVm8Hzcucy5>wgI*6Ov|F?!$j9O~Qn2v%cRPrya-TUm3&02v{5q4G(F{p&>DZml5M`{X*0;|5%B-LP~%EsxoX*{2?5!bSpSdg0sW-0>2e2AIG}ARcF! zfh@tSgT^`uU=t*G3`-IxGY%qFLuW()Lj;0DLpT<~AAb@EVIRo^v4iV_*iQmHpM*$c zP$%iGn#0iPzzkvzjkHx-$-7rO6ajjIMC8Po7N9Liw1^B_eAo*lMFIrRn|XpE(e9&A z7zp45%8rF$^NP)YrKT z;?L=pK5@6#uK^wfJohy`DglC?nc)yKFki@Wid1X-Lq#M6Q1u?a1b(B-FYbCM)!LYn zWD`?Ut&&J_k`*DzOwl6^i!T45xX|tubr1T*MSo0^d1L}lDi4g}1zM2=Udl@n*$$?R zHhc)$e|HavFTDZb2@Hu#54>_okI>Rd7L%yRaLVOmr$u}(#U|`bDt)x|2gOHjk46CA z8w)(css5)iLg-NlG<$=voL44YBjWga*MRg6Lx$l&YfnqHi9+NLlYAz~f--rjsN@AG<454&{P=1ndS)q77=p_)dZ+UI4KyD2%e~4TREd%pk-*0l8X=u$hXf z!loV9UI0)JEYCd2#Ixyw0SM)mYa1mooU@X6w>ymZA3*{k+5`S1Y z4U+m)8Z3<1_M^;FOG4b1y^Jtp(!1aydVi0#pb;S%7*PXcAEbv9*JBbW`itfPBY4@=>15bC zaE5y$9HXw&0~TCFZE=GDlX(C@Z8(w1n+F1v(*RJ=1FRdgdbszIJyN7?pd_m{!bqa| zXU{}$B??Hu05(j<;1x+iCn*~|tdl?)h|s#Vh~sWQ+c9mVSj}P<@`ql!1%KcqpuiKH z)^X}xr@`8?8y!K){qqK6xz7!WrOaOK9DrwRQhz4%Fq4tcw|WL7F)Ge=c!K+~9r4J4kd$4cXTlyZcs%8Nx)ZQ*jpOxdfA$3EYBMFGb?A7*(LaF~NQ4g=?Yj%}C-NfJz40d?fKK z)C)UelZko>1&c-SHWE4)xxqwc@}6|}N@Y^^LAj448bFN1 zS=>}U81sV9;(Nk_SOl^Tl7J?kl8AcK!m=_u5hNVqm4X!6wEY(rT#%C}Yk?YfVZoZV zK3OMjLPpCWqty91xPNwv;XGRUU#)%O33!lA-tnexfbSRQajkq~(*et+e3R2&fI5CL zBYFsBkbs_`%JS-Uadx)mfgcs6!ty5h=Ebm~cQ|O-Gp$}(q*%WQnilOD*~Da)a#}qq28r?Vi8FG zQ=LrWktDdyFsRISh}VkK9_r^A4r~MX0?z7N11sX&O*pLZy$RPkWmV>f0=6T@uw#31 zq`nj3(=WqMzJD|8Bvd%5W$!O5qKA;{z$IA+SgDu!CI;3>u$a5_SZcedt~WtF@mJ)qvL15pSN zOS)yx>H7+l`dB5Eh@TIsDtdiTFYRFu=wu?GBM}y%5&_Ml+^>L13u9v#_mQ6+b%NZl z$jX}Vn?;$pj9=#DZPoLcQLe>{7f=6q(XT(HWq)Pd8^H2J_DEr?>z0>9-9P^Gcz~gQ@H5t?A+yaI;AWHgTZ)w#$V!cxn|+|w!Xf;cN`9f51utf z+L#b--n@BZ@7}%VaY8$0z$hXl!8zU^Icys@ZmgO&Z{F_!zI*G|t*_jQB!- zcI?=702V7&teA#2Y>LCGiT0h-o1PGK3a1;hGWt|F~SMS=gWy@|H4JQ}Y3u_NA?RyW;>%la}aWn#aZgN#s)sF#uFUSWEA3nTr|Ni}-=^-*s_~TQ)kvB^|di3a# z{QUgyBcV>eiGdT`n33j3yCNC^9)D*qk_X@i%gV|YLS6p3a^=d`bVGb&1T4#!FMoCY z`t|QZN&Gu@?D*lylPAyOX?>$SF%|({;zaG42LU(+MY8VMv*-2W$B(~1A{3*NnP>>5 zEL*m$)@HMnLIw{VJa}*u?oK%yE%^$dK8=u2aq845V-gzyv0i2&9C!JAzJE8Go11S# zm1bdI_jp|}Q3B};7A*K1tW|#H%9W*17|P~Y@|OeaUh;T6;=+Xs6*!N-Dvma67K^2H z?%cT_AQx`c)YSY0CsEDDH6}{Hj=QoKVXfdpSkA{PK20!CrdB9ADN@+uv% zouD%gipW@PjS%@m90#h+@%No`e!FKc`wFx*y_1uB&tvcXzTf-YYZD*y!+-WM$1j)w&dJnLs3lEs zQlo_LHnkyYV@x3J_1Bszrxz4%w%hHliA*362n=_+yI%OxnlJ7koP$gtx2LDaZL`@N z6B#^X8yg$*=jP_-Q@@7^O+sSFhNTB$Y5#KKNe8uKtKfO zJc={TjnY4ik5J!F*M7PK#^g2T=?1vIvbk&-Bv0)MwE=#VojOixS%oj3b|*=23NV0! zKoYHR5HhDjgQjZ`pe~WX9GyWN%y0lPADR&W1OSAl0)I5;r+*;er!kNjp#fZv(l`iU zJqUrws3z&ISPawYr8Yt>V3pP6qF3MUWdhIyh{&c%frRRZv?R4feP9O(oXs193ZxA1 zI0Ga|n9`Nfmf%BR)pht-=M!_Y=yrWU*;sTv`BNZZ01hVs@CvLnEs)YuXAMXa1Rp{N z34n((V1GDFg279((2`}z2LVR_4?-PxOTfwgph2@{So$EP%!xG-5{&|`NWg5A214Lj z(oALq;O~~er&$AWw7`;AXQh>(A4usdEhy*JcF(3G9WvyYO6saFfky$4`Sx$dF`;`U zVD*KFwr>!?`WYE6(bnsm7zAV_N>Bq>w{3o&cz^Kz6!Gj?w`jdiB<@uM(VX~$_5t|N zkLTrz`B`b=?LMFQ$=S=|=7?VsxF;X@D54O|2H@ur_zNBa-*Q>>OYrgiAZ`@;u=4;C z-ImYfijpY={)SIfy?I4=hn3_%kUa3o-?iyH5Iu=mrz~7M%q9?PiczIwZ2$+dVXI(Syo5{-x9!`t|X4XR>03X^iS4sZgp4+18pUUPV zB{egQa&BOfaS6=$tLQheL&XH{vt@3MSeTtIE_wm}is&b^ z;e;k@AD!H|lt7umdBG&n{jGViONr?qV1KE5*kk}?a&nURX=%PV($z2i+U*Umfi!q% zfe%RjX_EY+oOJOXNxoXz{Ah%l$jHo5ObVpj-;P6I+HcO=*EhCV;gd(dm`IgZ3}M+r%@Jq#n+lL}oK2o@;T- zPzm7h30YFhGFpMhHA-exp<0SOWBlrq^JAOPR1mOKnRhy^BC&f>zDOfY{PLY^;!hnO zY4xZ^v5$CeL7rHWH%a`5Z2nmS?|&hiM_Hjt>+s4ns12jcW~XIeU}wMfR2%|%4gcze zB-xR5Zi>NfPe-Vs`d4DF~ZIZBo~k-ULZ|;!lhnn zAlhs`{a@jsB*oxO5^8S{Zc64(Es{ww!5igq2uyyZRhp2wO*CtLXeX>>)}a$c*^7${ z#8uy@_`%7pAb1H}Z;z!GG=FflOAFs-hV9t2pIA-I8;?NduUn-PTS;&~6f(p2zZfs3 zviSP#QPE4yx+i8LK>`s>DY)T}0v_`>zgrU9gfjM@lX-wQ=q8z1;JJKY;PjGAnvVjm zRKWY=L`eigt+sz?=+^o;1kzsyfsk|~fwqpB;2C&i4Jap85y|j@2!H-y^${lH+wj@g z8c5yurt|@;22`d+ox@o-bREpTx{!mkBNEWs2)(IL+F_?QudU|9xnrmz4uRx45QwY+ z6TDe!&4 ztZUl5DfLJi2>C(CCx5~c8+FErxqR(tn3-vEqd#1cP4~f@Ie8O)4gz?_%9ShU{C&mu z-v~l4UYKJ^v+2+)`QTX4bE8}YLn(nY{ecr5l9?H913JlZ5`6sR-W5lV9C?dw zf0LS@3E;y(+{;OP4-R;D0^U)zx3Vbm`JXVAK#EIDGi@9i*9v;9xcYu3PXEQ-Z$@F0+@GmQLTbYu8zl{*@OrT!$Gf#`D9p z{rmU-e9oLX-*da&m)5OYw`yo;s6$JI?-Pvx=3PX5#=(OJUneswI)DEB-u3I(Z>Di+ zX5%^ThJa(kh7AkL%gc|`2RCO!L&L_py1Lisp9z97<8;J14cm(j1bjm$TDF7U% zh?HDgTl+*~W8)tzrWljVcr|d}s#U9+Q&Li9QGXb0sIRZzMt4Uzi{yOMDf)C$2o=YU z9W$NS1cVYRhs<%e&*yuxySw`$MWsbF=1Eiq<0X)_eEIU zLdzO$9335cMyuQf?2!hw08vp{Ws$H10tt`=vaj=f=bZn(^KR~adC5x%1sv+~-n;w# zzW@LJ|NQ5?mpJEq8&Cw|2K4IZFYcTtV1SL_JOSqk7+?ej`10pH;7lZ7>-rxaiHl3X z;tUz!`#UQx-`VL@cXqZfDV;fCiT8oJc)$CI3A`|9>`0;kfTSBo;WL>_6&W9yu7@jxV7pa z0!AJ_e7O7!z4x=?wh9Ug3h^L^f(R(uv17+q85tRLlk=^Q5kL&6oH%jfr8w<@AOZ@o zVFs2_SSU|%1y8;8Y&_o~l*c12ipK|jzQtH_u*7p2`Rs}n1X_cs z0aIXdBMDKU>U9Dp9>eUTLFDIn1E>I<5ErlaH>4!Q^Kt^dMn={t5`9qT^%XdtrdF8) z+B-Tl5$Y~S65dvKg zQWw-D@*3LXNQyp(ZpIV5h`U?3LGP=HAwe2!TCP~W3%1!$n(ywZpMFgqjJ_qiaNn>`?P8-~)2q=F2n-*ooO7Be^pp{a72#&H? z0Xy8{c?|bUO+=SEIo?T2Oi+Y~M|2u#p&W_!Ym29sXcZx74Q=gCT`NE^*oP5fo=9o4 zdT7d3oHHmn!AVQd=h0w=tXt_kK5N+zS-e<&GtO1h+>YyZU_V=8H26wS3~}ncMT8>C z#1y{Yf9FqPBVf#bZ&n0|wY#84wJr{z$2k`bNpr?#r8pUhAuCrw)|h|-+W@XtX~z`s zYFgTzvXjkDMMJC8M$)`yWI*O>l3tLWZ;C z&i3jiMS>S(W%VB5gVyc)<&@Y67`uFnmLL@{Evt`$fOG&(@F!%aDlZT)w6*KcAgU> zwi6(soiY`Yn@9xEtL^P&xAh?bJ@tfqSmLY^nNDUBEKz~(0a@00tl#Sy${Vn9@5vTt z%ZbK74Nk%f?uxbMsx`Ai)?P}kx#n^dyAuGQIetU=3@r9-w=|0E~f8I_r&tT+`h zpeQrh$xcZy0Xd{q;h|gtw&PSawL^Lubvlaw{(Sh9v+q<(uLz(w?2Xj}E}#T?gKiY^ zLvJaDC0{<>xZb{v3c?$!e)8xIgtig3Nsp^&5m zzsS+`y8CgBwXk|EPo2)1!*weDM63DU{RWhPk}MDa4-jjOmH>iZUf<&Es%bLTuj2)S z;*Ter+#qekC%xUVS*h@}RAuVo1>+He3K1KkA%O&ZW)bk`vxNWxI4cSdpzQ1c$d!$4 z2!tJqJV>$1fcC-?>+!*sA0a_3HUp{d*ug2zh_oapNq4TD6i88CS|T#BRA&g}C{m-x zeO3|jfOCof=FgjtH#&P^g?7et0NTF;y4;HNLTW^|pxA+v?~|aJ6SLEx|4CuNcno6F zR7ez4)u47x6TqOyOlM~;qzBe7!S)yeBlGeT&21{hvok6;l{A{o*fSJXPHShtmu!du z`NF}e&KSsIsI=h|1I}d+ARM&v{m6V6_)fL98?fWld&Yn&NR!=n5P(I3a#NF>Nr(ZN z=y^*ZW*S@q>t|9x?>H|(-Q+99szho&UL!c&~w z)I?pg!9F>N1>>=97}j+MK2LboN)R8;n+36eMQaX{gd+&NTcQ1@7-g?9t38#3jiRip8`I;fc2mt%NOu> zm|`36li5)kYFAzY*b^>;q4cH{(I-9OSO{P#;;Mp7H+7^04Tohi$nHQVOXc|hFbm*a zJS^Q|?Z~f5VBU@Fh@CX?1QNqWpapzpJL8b;j7A9}Nb}jJ_!cFNT98Ny5+mR-m5r^= zTJ{6fKSz}!dP@LF>(g3LPphFU3EKqFDhYZ;gXv`90VSguj$p~E>F@x_APHsg7zSaU zgRR9x;$%~1AoycJI;Q?we2WHFh0LqVDj;1-QDyi{=X%ReuwfXOlH>h5*U!w<2#qlhI z`!!|xIG(z%JjQ1{fJD^eIx_y-r5M)@0p7B8%;N#k5J2$!3U&;NGxH!jX{>I$9UlN0BZhmbmqkJ74|sb z2)uwLXO1Bt7jVY{#QK?Otvg!p9K(LzF#ujKnlXYtBOnaqfa<8;Cp3CS0GXXo-!oa5 zv8pBc+86$7;VuvM7Bnf#1U$$=z{M+}fo zmjql&msmc*t3}O;rEO+c^cwb%LteqLfKIiY#XnwOq(%d8f$u|vO-{@Nl*o{zvGSh8 z0Rox=eIAA2mIsYzHIjw3Mu2!2*3bMt5rokLCNOJ({tF3|5e8EpTaKW;8ySzQ{XpO_ z)=m|XbIF7Z!7t1GsGU%daFc_;2vv9ROe2B59 zp3vt6bPskoS+;a}-^;m30;Pr}WAOw6Dc&H(OU4a)&K_h#1k!FCfT#W!P|s0=vq#A^ zDcbT`Ri*aBA(Ul{SBRC{@)4x-Jt5^ltR67h_5gwsp#L&W#oiviuMWa$u8=v05Ml>t z+Y@XO_@3z?Q^aO(A;>Vnbd;qBdrVls_gcPWIRdis0Lv3(WJ}gd*&@=&n7uDOh3D=Q z0)hgtmkhu7;99wn96fz8m;`zP$8kr&l5>zfF)t_JEI&}oS(=E{a^OV_!px#b2+P`4 zjqNHH9H?)0(D!mvOdEV#dffH6PlI?fe)43OCTvOa%2Ro)1dMv)dv{`%pZ*6+PKYq?J~j!q9P#`G2*%Uhv@`@Y z-*HHCb2kz+l@f$lAWh~waH#Veq?Mdv;%E6%zV=Fw7trn`$?Him6Hq7wMBxS9T0i>; zMt-~`=pc;26qb*fj#_3eQ@SWc?7ZzlN?L>L#%|fjcvR{M>0;^|nrIRV$Si>{{ZupT zOa`T`T$iPF43J5@o~h?P>+Su$?E)=Pv|-Qj{ZcEbMU(63ff1yz-hlPIRhbAhRj) z1ophyX=AO59d`CPxJ^w8!+Sde3X-It^%b!aPyhlXbFse>BPECMEGPV1GX$5tSz2~x zl9>x?LMVH-n~v2h3!gDuTfV5y;N(Q-LI5}x7R`YgmJ@!2)l)tQr0iF2N)ZHKg0Rd- z^&Yzu^E_*%2nQOf5tui^6X+q+b25~CNezf{#OW^^s~Xf4nN}0Hy}{U9mhj7-j@&sd zwk#;01Q^}+=K6l}V-v#Bs9BhpMNJo3(b}%N`?Rn@sDiPKpw?pBh%`*Dg*UK(XOEJR zgxxjTnnjLe<^<>cu&KH}h#Qxk(&gAnq@vpD`5g%@E9?!Qf;%zorSeI6TDBiW#S_XYkR*8nxaxh!>H&Ek0)z}->$kET?nfE8u5hqx-K_PH00zK@c1$@@ zzMyGfF>Epla*P9%E^ng;?1BeuSFu2sA*4PeQx4M-64b!_c#j9jxtRG-+nLI;*d~%g zbO}7m()>Qdx5xM`BAp$rDnF@)KD*13{7M)+rt)uMl%V0S(F3~X^sYzXM*Td5R(%0< z^*VR}8-bovI0yhIt5Ge^fD;n3q4_^W9AM|mueBfp;yA!oHCI1W13HKqb8NJHX_O(B zBUl$oHqzuhCp~CGWxZ3=f>ahDF=(?S%@Q~z>Jxyj32>a12T!U=VSXv9SCafls*06> zTp=I=&|w4+Y~u->qd6A@h{Rlr_nfgtFW3kG*t6waP7a7O2#S__0Tbz9)+CMTx- zvz5Z?C4D6*EX+~Lf(T{oU=qMomU6?=1rq^!0qg%HKqQGCzLsgMaj;fP5VqL?*tYga+m8S0;@Gkv5}>s@ zR1bM`b}8ICWe%0!&bYCd-OcFle&z+|{srrjP6q+l~57s~1n8 zfH0lCEP}MDFW><^n;;Uf3IwnbSRp{b_Y1Us+axBOh?Rh$|M{((1$i?eZyiTsg%HMc z&?ewI4*_8aS|4bgOaU1zD+siS$?QOF;h;RWsqg1njkDYGk?wL}rXT~>Y&PeE7D4=>hZM0U{lY z2NytZBQ=80S`Ry2V)@*kn*Sx@27Azv8a;tlZ^s169KRklK0=(4a|!`E26Vy$bPSNx zQ>CL=?9cANjzxyZQcbJ`WWP!ekQ#pUB#<@R;HNqoqERcpD{qe<|B%P~#HFDT17NdR?U9fAKo!h80>B@LAhnd=3H;Gpd%7sU8Q?W|>+ zLNOo;PY@FLN&@~81juw0#)C*6z-Q)&*A@)8A7p3EbhtSD%UN+-koint7rPQ<0jsRre70kP4ZiHt5Gw)c^Z;|` zkx20K4%TR>`&r8M^|TZ=0p2CRc$5v09fV~)zb(VBkVb0!DlCh7cC&{kxn2US`(D;5 zQ1x2AoJ6Ub0ht{_KcKq439PNq>Z!}DG79`&B5YD5V0%I4 zTuo+3^nyr@{fxgrro#cCa1uf&+g2~{1$ZH)2|o_<9bym%^3`aX3BF?G-fW1+N#9Ts zXa?e@yQjxiib#D$|6WiK37QQ3sIs3;gpk0F5bN}zUknI&L>K}1U_-};;Zzh3rttg2 z@|}Pn66kC!_;FB2eLczS=m)w2+j0j9wEP|#!mF1B|`v`o$VN411livpQ-fx;v$Lii3#pGt!=IM z&yJ0N#D85G@&L<{`8#o9`F3He}hdWpi%1<(Ah2_UVZ+p6mN|zV+5ycP?14;7}>^u`-++&h2%{M*iT^!noYKmPdR<+tB{`%5_2b}Yx~Y_{jy*Ptfw*S%+q88c?` zqD715;D@|3`{E{o&XJgym^pax;1bG_s-Zwn>+0(EwY0QEtT_xFI&?CQ)xY0~<-~~- zTO!?Oa&qz@v|{@@Cr_R%YinzZ+_jGJ;qimrbxW5n{nOsPdwGBS-Dv(gy*t?9=K;Cc zVIr0hSR((tRE#&5g!cR2|Nbfbrapf(+-YrXb@21~Wlufz)W6^(C+CDlWx}tO^4xRJ zElW>NSI2-X=fMXbT!3BlxAwX=8dlnG(MFFRT`bo+e*F01C!ToXw>U@eZ(+vxjOK7^ z{}C)ZuvB3Q^Z@S9$@PPeNTUg95R+xw-Sj7hhbwdiCm6 z=7zfjEpzF-ciwqtV`gTiIEL48+C3@_9XH z`}XZmKKkgRFWaE>&Etigg@(i$3cWhaNP5!0>C^jq_St9i0R9fh&k%w^AUAE=w1EKO zLf>QIFO3IzK+$KPeYQU0^&Q_7DL7 ztCW-!@u0RthYroS_10Uz?N@X6Ir%^k5Wi~Gs?{S#jF`==hXfosa-`~xJMLIiTU+}T z?vYtScR{f?1n}`WO`;I8cPY~Br3lEm%%JFj$fDNHn>X+32(s5N+?;j--hTV-pX0&* zN34$oy!z^^FTC=~E3e@Rf4~xX$V-+lL;_uO;O-=(FcDFV1uR8;&m zg8BdU3(^56J*@;h{q)mm)22<^mXniHLj5K9yLRo`3G4rR+~0Rtn5qS3KCw!W9IrAW zEYsix|6W>JdLc_DBmf>*wq?tfNe@5#u%4fO8ro?k;N5rMeQeaIQI9k2G}%iBbpLms ze){Q0c-GxmqJ8jKJb%DU$l*WVbkj|XPXqSq5~q!T zmtTIlaKeNMOgl3r2j8$^!oU)=9%Bko;~|Y z_Nqw$Qrf!RyLV4qxNzZV`Fm=oi-5QfKKS4bq@B016hP~*si~>I_uhLSC@U-b96;>D z5_!^RI0dm1z_YRFSX@$4G7HA>-0xKeq-PleFCNsn;)*NyaQ}vM^pCjXomhHPjVwZ`d_S@&%7r2U^`qVpK+st2y%0w7 z3mC~iY~H-t*|u$)k|NZY7NE!dYOj!u@}T}EAaTx|Ic4bf7b3+|MKhFuH>2kB2=0&d z9@bx?4ZQXv6}+#~B#oJhB1Lu4iB+yv;ty0?G1Tfd0jO79>9A~I7(!;+h+LN@?%MbrP<4>^^n+^N$`lUI4 z54m)AXIjd?B0Cie&(FI39?MvId)|o0^)~?oog-`<=ES6ZrxMG4EYZ|^BHcK@{XGWD zNV5|&sl8ZYl?v907)$u~l=(#jcE&h@6*SToGb#N|0B?|~9>M1;A0*OHW3&&%dJfOY zg^gfwiKdPe=^AS25(^E7sWH#l(-b+{XHff{4gz{~L+9Gg=Lr~K#?KQlzy$n1IG>k| TtCTzj00000NkvXXu0mjfkM4FB literal 6022 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 ABme*a diff --git a/samples/browseable/AdvancedImmersiveMode/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/AdvancedImmersiveMode/res/drawable-xxhdpi/ic_launcher.png index 6ef21e1f4dfe8eeec63fde13a453812511646c83..7a195a1280e1edfb5b3b3a8165ea297f53ec5110 100644 GIT binary patch literal 13819 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 literal 11040 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 WRh@=GnE09b3XqXd5U&x{5BMKGuL(l{ diff --git a/samples/browseable/AdvancedImmersiveMode/res/layout/activity_main.xml b/samples/browseable/AdvancedImmersiveMode/res/layout/activity_main.xml index bc5a57591..1ae4f981e 100755 --- a/samples/browseable/AdvancedImmersiveMode/res/layout/activity_main.xml +++ b/samples/browseable/AdvancedImmersiveMode/res/layout/activity_main.xml @@ -14,25 +14,52 @@ limitations under the License. --> - + + + + + android:layout_height="match_parent"> + + + + + + + + - + android:layout_width="match_parent" + android:layout_height="1dp" + android:background="@android:color/darker_gray" /> + + + + diff --git a/samples/browseable/AdvancedImmersiveMode/res/menu/main.xml b/samples/browseable/AdvancedImmersiveMode/res/menu/main.xml index 2c3515dd4..b49c2c526 100644 --- a/samples/browseable/AdvancedImmersiveMode/res/menu/main.xml +++ b/samples/browseable/AdvancedImmersiveMode/res/menu/main.xml @@ -15,7 +15,7 @@ -->

- + diff --git a/samples/browseable/AdvancedImmersiveMode/res/values/base-strings.xml b/samples/browseable/AdvancedImmersiveMode/res/values/base-strings.xml index 305e12abf..8e4c710cf 100644 --- a/samples/browseable/AdvancedImmersiveMode/res/values/base-strings.xml +++ b/samples/browseable/AdvancedImmersiveMode/res/values/base-strings.xml @@ -23,13 +23,10 @@ diff --git a/samples/browseable/AdvancedImmersiveMode/res/values/strings.xml b/samples/browseable/AdvancedImmersiveMode/res/values/strings.xml index a65b8916a..7b9d9ec4f 100755 --- a/samples/browseable/AdvancedImmersiveMode/res/values/strings.xml +++ b/samples/browseable/AdvancedImmersiveMode/res/values/strings.xml @@ -1,22 +1,19 @@ - - - - - Try these settings! + Show Log + Hide Log diff --git a/samples/browseable/AdvancedImmersiveMode/res/values/template-styles.xml b/samples/browseable/AdvancedImmersiveMode/res/values/template-styles.xml index d3f82ff64..404623e3d 100644 --- a/samples/browseable/AdvancedImmersiveMode/res/values/template-styles.xml +++ b/samples/browseable/AdvancedImmersiveMode/res/values/template-styles.xml @@ -20,7 +20,9 @@ - - - - - diff --git a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java index fe11ecb4d..d8fb0d4eb 100644 --- a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java +++ b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/AdvancedImmersiveModeFragment.java @@ -17,9 +17,10 @@ package com.example.android.advancedimmersivemode; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.view.MenuItem; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.CheckBox; import com.example.android.common.logger.Log; @@ -46,49 +47,136 @@ public class AdvancedImmersiveModeFragment extends Fragment { } @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { + final View flagsView = inflater.inflate(R.layout.fragment_flags, container, false); + mLowProfileCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_lowprof); + mHideNavCheckbox = (CheckBox) flagsView.findViewById(R.id.flag_hide_navbar); + mHideStatusBarCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_hide_statbar); + mImmersiveModeCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive); + mImmersiveModeStickyCheckBox = + (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive_sticky); - final View decorView = getActivity().getWindow().getDecorView(); - ViewGroup parentView = (ViewGroup) getActivity().getWindow().getDecorView() - .findViewById(R.id.sample_main_layout); + Button toggleFlagsButton = (Button) flagsView.findViewById(R.id.btn_changeFlags); + toggleFlagsButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + toggleUiFlags(); + } + }); - mLowProfileCheckBox = new CheckBox(getActivity()); - mLowProfileCheckBox.setText("Enable Low Profile mode."); - parentView.addView(mLowProfileCheckBox); + Button presetsImmersiveModeButton = (Button) flagsView.findViewById(R.id.btn_immersive); + presetsImmersiveModeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { - mHideNavCheckbox = new CheckBox(getActivity()); - mHideNavCheckbox.setChecked(true); - mHideNavCheckbox.setText("Hide Navigation bar"); - parentView.addView(mHideNavCheckbox); + // BEGIN_INCLUDE(immersive_presets) + // For immersive mode, the FULLSCREEN, HIDE_HAVIGATION and IMMERSIVE + // flags should be set (you can use IMMERSIVE_STICKY instead of IMMERSIVE + // as appropriate for your app). The LOW_PROFILE flag should be cleared. - mHideStatusBarCheckBox = new CheckBox(getActivity()); - mHideStatusBarCheckBox.setChecked(true); - mHideStatusBarCheckBox.setText("Hide Status Bar"); - parentView.addView(mHideStatusBarCheckBox); + // Immersive mode is primarily for situations where the user will be + // interacting with the screen, like games or reading books. + int uiOptions = flagsView.getSystemUiVisibility(); + uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; + uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; + uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE; + uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + flagsView.setSystemUiVisibility(uiOptions); + // END_INCLUDE(immersive_presets) - mImmersiveModeCheckBox = new CheckBox(getActivity()); - mImmersiveModeCheckBox.setText("Enable Immersive Mode."); - parentView.addView(mImmersiveModeCheckBox); + dumpFlagStateToLog(uiOptions); - mImmersiveModeStickyCheckBox = new CheckBox(getActivity()); - mImmersiveModeStickyCheckBox.setText("Enable Immersive Mode (Sticky)"); - parentView.addView(mImmersiveModeStickyCheckBox); + // The below code just updates the checkboxes to reflect which flags have been set. + mLowProfileCheckBox.setChecked(false); + mHideNavCheckbox.setChecked(true); + mHideStatusBarCheckBox.setChecked(true); + mImmersiveModeCheckBox.setChecked(true); + mImmersiveModeStickyCheckBox.setChecked(false); + } + }); + + Button presetsLeanbackModeButton = (Button) flagsView.findViewById(R.id.btn_leanback); + presetsLeanbackModeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // BEGIN_INCLUDE(leanback_presets) + // For leanback mode, only the HIDE_NAVE and HIDE_STATUSBAR flags + // should be checked. In this case IMMERSIVE should *not* be set, + // since this mode is left as soon as the user touches the screen. + int uiOptions = flagsView.getSystemUiVisibility(); + uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; + uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; + uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE; + uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + flagsView.setSystemUiVisibility(uiOptions); + // END_INCLUDE(leanback_presets) + + dumpFlagStateToLog(uiOptions); + + // The below code just updates the checkboxes to reflect which flags have been set. + mLowProfileCheckBox.setChecked(false); + mHideNavCheckbox.setChecked(true); + mHideStatusBarCheckBox.setChecked(true); + mImmersiveModeCheckBox.setChecked(false); + mImmersiveModeStickyCheckBox.setChecked(false); + } + }); + + // Setting these flags makes the content appear under the navigation + // bars, so that showing/hiding the nav bars doesn't resize the content + // window, which can be jarring. + int uiOptions = flagsView.getSystemUiVisibility(); + uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; + uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + flagsView.setSystemUiVisibility(uiOptions); + + return flagsView; } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.sample_action) { - toggleImmersiveMode(); + /** + * Helper method to dump flag state to the log. + * @param uiFlags Set of UI flags to inspect + */ + public void dumpFlagStateToLog(int uiFlags) { + if ((uiFlags & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { + Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is set"); + } else { + Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is unset"); + } + + if ((uiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) { + Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is set"); + } else { + Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is unset"); + } + + if ((uiFlags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) { + Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is set"); + } else { + Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is unset"); + } + + if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0) { + Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is set"); + } else { + Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is unset"); + } + + if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0) { + Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is set"); + } else { + Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is unset"); } - return true; } /** * Detects and toggles immersive mode (also known as "hidey bar" mode). */ - public void toggleImmersiveMode() { + public void toggleUiFlags() { // BEGIN_INCLUDE (get_current_ui_flags) // The "Decor View" is the parent view of the Activity. It's also conveniently the easiest @@ -168,7 +256,8 @@ public class AdvancedImmersiveModeFragment extends Fragment { // BEGIN_INCLUDE (set_ui_flags) //Set the new UI flags. decorView.setSystemUiVisibility(newUiOptions); - Log.i(TAG, "Current height: " + decorView.getHeight() + ", width: " + decorView.getWidth()); // END_INCLUDE (set_ui_flags) + + dumpFlagStateToLog(uiOptions); } } diff --git a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/MainActivity.java b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/MainActivity.java index 0ebe8784f..e32355760 100644 --- a/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/MainActivity.java +++ b/samples/browseable/AdvancedImmersiveMode/src/com.example.android.advancedimmersivemode/MainActivity.java @@ -22,6 +22,8 @@ package com.example.android.advancedimmersivemode; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.view.Menu; +import android.view.MenuItem; +import android.widget.ViewAnimator; import com.example.android.common.activities.SampleActivityBase; import com.example.android.common.logger.Log; @@ -30,26 +32,28 @@ import com.example.android.common.logger.LogWrapper; import com.example.android.common.logger.MessageOnlyLogFilter; /** - * A simple launcher activity containing a summary sample description - * and a few action bar buttons. + * A simple launcher activity containing a summary sample description, sample log and a custom + * {@link android.support.v4.app.Fragment} which can display a view. + *

+ * For devices with displays with a width of 720dp or greater, the sample log is always visible, + * on other devices it's visibility is controlled by an item on the Action Bar. */ public class MainActivity extends SampleActivityBase { public static final String TAG = "MainActivity"; - public static final String FRAGTAG = "AdvancedImmersiveModeFragment"; + // Whether the Log Fragment is currently shown + private boolean mLogShown; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - if (getSupportFragmentManager().findFragmentByTag(FRAGTAG) == null ) { - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - AdvancedImmersiveModeFragment fragment = new AdvancedImmersiveModeFragment(); - transaction.add(fragment, FRAGTAG); - transaction.commit(); - } + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + AdvancedImmersiveModeFragment fragment = new AdvancedImmersiveModeFragment(); + transaction.replace(R.id.sample_content_fragment, fragment); + transaction.commit(); } @Override @@ -58,6 +62,32 @@ public class MainActivity extends SampleActivityBase { return true; } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); + logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); + logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_toggle_log: + mLogShown = !mLogShown; + ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); + if (mLogShown) { + output.setDisplayedChild(1); + } else { + output.setDisplayedChild(0); + } + supportInvalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + /** Create a chain of targets that will receive log data */ @Override public void initializeLogging() { diff --git a/samples/browseable/BasicTransition/AndroidManifest.xml b/samples/browseable/BasicTransition/AndroidManifest.xml new file mode 100644 index 000000000..b4698d688 --- /dev/null +++ b/samples/browseable/BasicTransition/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/BasicTransition/_index.jd b/samples/browseable/BasicTransition/_index.jd new file mode 100644 index 000000000..e65ec530f --- /dev/null +++ b/samples/browseable/BasicTransition/_index.jd @@ -0,0 +1,13 @@ + + + +page.tags="BasicTransition" +sample.group=UI +@jd:body + +

+ + This sample demonstrates the basic use of the transition framework introduced in KitKat. + Select each of the RadioButtons to switch between the Scenes. + +

diff --git a/samples/browseable/BasicTransition/res/drawable-hdpi/ic_launcher.png b/samples/browseable/BasicTransition/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5d360761d399c2e680cfd16f1516679f58261a GIT binary patch literal 4223 zcmV-_5P-kSd4@ES9KMtfgyE3bxjzWYrZEMHIXhF$&^= zr5M*j7vcgQ=&FdKfFe+Z+{6W02#J{lk{EJLZj$Wxy?O7=>o+}+S13(%I$sLvBHC zH7~!cpunT0$5w}ih2DH2!r^6ZYi(OIJS%-VZ1>|=Xj+1J}kK>mcl5?1IoF6oTNU^emddU~ku=z}F5>&0#P7{8w13yxo3UHxacFN0B`F_5&_a7_S$7gQv7$iU#9 zURDTEU@W)-Ljwv5D~{tjLP8)67Kcff(($Y8_TR#-JJ{R=%T5)L^bSeb_S94dR|i!K z1H~0(3JTJwsgEg52Fk&SYZwrIU;IIY5MR=Jz_x(K%+E8!j!^6X_gEOR}oi^ygj<2!Wf`K>FEwEDD@xmQt~|lpn8sMj%;1_ zOTs5{NDL4KsDR<-BYcjcAg&5}oS7G2$^Zl~E9``NG�=>19w({H0GnHCaxUW?9}r( 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 O0000HP@(%V8mo8nJe%r8bn6Om| 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 Sj_S?;0000 + + + + diff --git a/samples/browseable/BasicTransition/res/layout-w720dp/activity_main.xml b/samples/browseable/BasicTransition/res/layout-w720dp/activity_main.xml new file mode 100755 index 000000000..c9a52f621 --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout-w720dp/activity_main.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/BasicTransition/res/layout/activity_basic_transition.xml b/samples/browseable/BasicTransition/res/layout/activity_basic_transition.xml new file mode 100644 index 000000000..f9a4cd287 --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/activity_basic_transition.xml @@ -0,0 +1,22 @@ + + + diff --git a/samples/browseable/BasicTransition/res/layout/activity_main.xml b/samples/browseable/BasicTransition/res/layout/activity_main.xml new file mode 100755 index 000000000..1ae4f981e --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/activity_main.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/BasicTransition/res/layout/fragment_basic_transition.xml b/samples/browseable/BasicTransition/res/layout/fragment_basic_transition.xml new file mode 100644 index 000000000..98999c8eb --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/fragment_basic_transition.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/BasicTransition/res/layout/scene1.xml b/samples/browseable/BasicTransition/res/layout/scene1.xml new file mode 100644 index 000000000..005bf3be2 --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/scene1.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/BasicTransition/res/layout/scene2.xml b/samples/browseable/BasicTransition/res/layout/scene2.xml new file mode 100644 index 000000000..38a809a54 --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/scene2.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/BasicTransition/res/layout/scene3.xml b/samples/browseable/BasicTransition/res/layout/scene3.xml new file mode 100644 index 000000000..06246dab2 --- /dev/null +++ b/samples/browseable/BasicTransition/res/layout/scene3.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/BasicTransition/res/menu/main.xml b/samples/browseable/BasicTransition/res/menu/main.xml new file mode 100644 index 000000000..b49c2c526 --- /dev/null +++ b/samples/browseable/BasicTransition/res/menu/main.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/samples/browseable/BasicTransition/res/transition/changebounds_fadein_together.xml b/samples/browseable/BasicTransition/res/transition/changebounds_fadein_together.xml new file mode 100644 index 000000000..062e01235 --- /dev/null +++ b/samples/browseable/BasicTransition/res/transition/changebounds_fadein_together.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/samples/browseable/BasicTransition/res/transition/scene3_transition_manager.xml b/samples/browseable/BasicTransition/res/transition/scene3_transition_manager.xml new file mode 100644 index 000000000..6189d6130 --- /dev/null +++ b/samples/browseable/BasicTransition/res/transition/scene3_transition_manager.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/samples/browseable/BasicTransition/res/values-sw600dp/template-dimens.xml b/samples/browseable/BasicTransition/res/values-sw600dp/template-dimens.xml new file mode 100644 index 000000000..22074a2bd --- /dev/null +++ b/samples/browseable/BasicTransition/res/values-sw600dp/template-dimens.xml @@ -0,0 +1,24 @@ + + + + + + + @dimen/margin_huge + @dimen/margin_medium + + diff --git a/samples/browseable/BasicTransition/res/values-sw600dp/template-styles.xml b/samples/browseable/BasicTransition/res/values-sw600dp/template-styles.xml new file mode 100644 index 000000000..03d197418 --- /dev/null +++ b/samples/browseable/BasicTransition/res/values-sw600dp/template-styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/samples/browseable/BasicTransition/res/values-w820dp/dimens.xml b/samples/browseable/BasicTransition/res/values-w820dp/dimens.xml new file mode 100644 index 000000000..21e296886 --- /dev/null +++ b/samples/browseable/BasicTransition/res/values-w820dp/dimens.xml @@ -0,0 +1,22 @@ + + + + + 64dp + diff --git a/samples/browseable/BasicTransition/res/values/base-strings.xml b/samples/browseable/BasicTransition/res/values/base-strings.xml new file mode 100644 index 000000000..466e59069 --- /dev/null +++ b/samples/browseable/BasicTransition/res/values/base-strings.xml @@ -0,0 +1,32 @@ + + + + + + + BasicTransition + + + + diff --git a/samples/browseable/BasicTransition/res/values/dimens.xml b/samples/browseable/BasicTransition/res/values/dimens.xml new file mode 100644 index 000000000..45ccdbc37 --- /dev/null +++ b/samples/browseable/BasicTransition/res/values/dimens.xml @@ -0,0 +1,22 @@ + + + + 16dp + 16dp + 50dp + 100dp + diff --git a/samples/browseable/BasicTransition/res/values/strings.xml b/samples/browseable/BasicTransition/res/values/strings.xml new file mode 100755 index 000000000..7b9d9ec4f --- /dev/null +++ b/samples/browseable/BasicTransition/res/values/strings.xml @@ -0,0 +1,19 @@ + + + Show Log + Hide Log + diff --git a/samples/browseable/BasicTransition/res/values/template-dimens.xml b/samples/browseable/BasicTransition/res/values/template-dimens.xml new file mode 100644 index 000000000..39e710b5c --- /dev/null +++ b/samples/browseable/BasicTransition/res/values/template-dimens.xml @@ -0,0 +1,32 @@ + + + + + + + 4dp + 8dp + 16dp + 32dp + 64dp + + + + @dimen/margin_medium + @dimen/margin_medium + + diff --git a/samples/browseable/BasicTransition/res/values/template-styles.xml b/samples/browseable/BasicTransition/res/values/template-styles.xml new file mode 100644 index 000000000..404623e3d --- /dev/null +++ b/samples/browseable/BasicTransition/res/values/template-styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/samples/browseable/BasicTransition/src/com.example.android.basictransition/BasicTransitionFragment.java b/samples/browseable/BasicTransition/src/com.example.android.basictransition/BasicTransitionFragment.java new file mode 100644 index 000000000..e67603dce --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.basictransition/BasicTransitionFragment.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.basictransition; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.transition.Scene; +import android.transition.TransitionInflater; +import android.transition.TransitionManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RadioGroup; + +public class BasicTransitionFragment extends Fragment + implements RadioGroup.OnCheckedChangeListener { + + // We transition between these Scenes + private Scene mScene1; + private Scene mScene2; + private Scene mScene3; + + /** A custom TransitionManager */ + private TransitionManager mTransitionManagerForScene3; + + /** Transitions take place in this ViewGroup. We retain this for the dynamic transition on scene 4. */ + private ViewGroup mSceneRoot; + + public static BasicTransitionFragment newInstance() { + return new BasicTransitionFragment(); + } + + public BasicTransitionFragment() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_basic_transition, container, false); + assert view != null; + RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.select_scene); + radioGroup.setOnCheckedChangeListener(this); + mSceneRoot = (ViewGroup) view.findViewById(R.id.scene_root); + + // BEGIN_INCLUDE(instantiation_from_view) + // A Scene can be instantiated from a live view hierarchy. + mScene1 = new Scene(mSceneRoot, (ViewGroup) mSceneRoot.findViewById(R.id.container)); + // END_INCLUDE(instantiation_from_view) + + // BEGIN_INCLUDE(instantiation_from_resource) + // You can also inflate a generate a Scene from a layout resource file. + mScene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene2, getActivity()); + // END_INCLUDE(instantiation_from_resource) + + // Another scene from a layout resource file. + mScene3 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene3, getActivity()); + + // BEGIN_INCLUDE(custom_transition_manager) + // We create a custom TransitionManager for Scene 3, in which ChangeBounds and Fade + // take place at the same time. + mTransitionManagerForScene3 = TransitionInflater.from(getActivity()) + .inflateTransitionManager(R.transition.scene3_transition_manager, mSceneRoot); + // END_INCLUDE(custom_transition_manager) + + return view; + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.select_scene_1: { + // BEGIN_INCLUDE(transition_simple) + // You can start an automatic transition with TransitionManager.go(). + TransitionManager.go(mScene1); + // END_INCLUDE(transition_simple) + break; + } + case R.id.select_scene_2: { + TransitionManager.go(mScene2); + break; + } + case R.id.select_scene_3: { + // BEGIN_INCLUDE(transition_custom) + // You can also start a transition with a custom TransitionManager. + mTransitionManagerForScene3.transitionTo(mScene3); + // END_INCLUDE(transition_custom) + break; + } + case R.id.select_scene_4: { + // BEGIN_INCLUDE(transition_dynamic) + // Alternatively, transition can be invoked dynamically without a Scene. + // For this, we first call TransitionManager.beginDelayedTransition(). + TransitionManager.beginDelayedTransition(mSceneRoot); + // Then, we can just change view properties as usual. + View square = mSceneRoot.findViewById(R.id.transition_square); + ViewGroup.LayoutParams params = square.getLayoutParams(); + int newSize = getResources().getDimensionPixelSize(R.dimen.square_size_expanded); + params.width = newSize; + params.height = newSize; + square.setLayoutParams(params); + // END_INCLUDE(transition_dynamic) + break; + } + } + } + +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.basictransition/MainActivity.java b/samples/browseable/BasicTransition/src/com.example.android.basictransition/MainActivity.java new file mode 100644 index 000000000..1e7c3017b --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.basictransition/MainActivity.java @@ -0,0 +1,110 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + + + +package com.example.android.basictransition; + +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ViewAnimator; + +import com.example.android.common.activities.SampleActivityBase; +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogFragment; +import com.example.android.common.logger.LogWrapper; +import com.example.android.common.logger.MessageOnlyLogFilter; + +/** + * A simple launcher activity containing a summary sample description, sample log and a custom + * {@link android.support.v4.app.Fragment} which can display a view. + *

+ * For devices with displays with a width of 720dp or greater, the sample log is always visible, + * on other devices it's visibility is controlled by an item on the Action Bar. + */ +public class MainActivity extends SampleActivityBase { + + public static final String TAG = "MainActivity"; + + // Whether the Log Fragment is currently shown + private boolean mLogShown; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + BasicTransitionFragment fragment = new BasicTransitionFragment(); + transaction.replace(R.id.sample_content_fragment, fragment); + transaction.commit(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); + logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); + logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_toggle_log: + mLogShown = !mLogShown; + ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); + if (mLogShown) { + output.setDisplayedChild(1); + } else { + output.setDisplayedChild(0); + } + supportInvalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** Create a chain of targets that will receive log data */ + @Override + public void initializeLogging() { + // Wraps Android's native log framework. + LogWrapper logWrapper = new LogWrapper(); + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + Log.setLogNode(logWrapper); + + // Filter strips out everything except the message text. + MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); + logWrapper.setNext(msgFilter); + + // On screen logging via a fragment with a TextView. + LogFragment logFragment = (LogFragment) getSupportFragmentManager() + .findFragmentById(R.id.log_fragment); + msgFilter.setNext(logFragment.getLogView()); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/activities/SampleActivityBase.java b/samples/browseable/BasicTransition/src/com.example.android.common/activities/SampleActivityBase.java new file mode 100644 index 000000000..3228927b7 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/activities/SampleActivityBase.java @@ -0,0 +1,52 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.activities; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogWrapper; + +/** + * Base launcher activity, to handle most of the common plumbing for samples. + */ +public class SampleActivityBase extends FragmentActivity { + + public static final String TAG = "SampleActivityBase"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onStart() { + super.onStart(); + initializeLogging(); + } + + /** Set up targets to receive log data */ + public void initializeLogging() { + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + // Wraps Android's native log framework + LogWrapper logWrapper = new LogWrapper(); + Log.setLogNode(logWrapper); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/Log.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/Log.java new file mode 100644 index 000000000..17503c568 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/Log.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Helper class for a list (or tree) of LoggerNodes. + * + *

When this is set as the head of the list, + * an instance of it can function as a drop-in replacement for {@link android.util.Log}. + * Most of the methods in this class server only to map a method call in Log to its equivalent + * in LogNode.

+ */ +public class Log { + // Grabbing the native values from Android's native logging facilities, + // to make for easy migration and interop. + public static final int NONE = -1; + public static final int VERBOSE = android.util.Log.VERBOSE; + public static final int DEBUG = android.util.Log.DEBUG; + public static final int INFO = android.util.Log.INFO; + public static final int WARN = android.util.Log.WARN; + public static final int ERROR = android.util.Log.ERROR; + public static final int ASSERT = android.util.Log.ASSERT; + + // Stores the beginning of the LogNode topology. + private static LogNode mLogNode; + + /** + * Returns the next LogNode in the linked list. + */ + public static LogNode getLogNode() { + return mLogNode; + } + + /** + * Sets the LogNode data will be sent to. + */ + public static void setLogNode(LogNode node) { + mLogNode = node; + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void println(int priority, String tag, String msg, Throwable tr) { + if (mLogNode != null) { + mLogNode.println(priority, tag, msg, tr); + } + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + */ + public static void println(int priority, String tag, String msg) { + println(priority, tag, msg, null); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void v(String tag, String msg, Throwable tr) { + println(VERBOSE, tag, msg, tr); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void v(String tag, String msg) { + v(tag, msg, null); + } + + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void d(String tag, String msg, Throwable tr) { + println(DEBUG, tag, msg, tr); + } + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void d(String tag, String msg) { + d(tag, msg, null); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void i(String tag, String msg, Throwable tr) { + println(INFO, tag, msg, tr); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void i(String tag, String msg) { + i(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, String msg, Throwable tr) { + println(WARN, tag, msg, tr); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void w(String tag, String msg) { + w(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, Throwable tr) { + w(tag, null, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void e(String tag, String msg, Throwable tr) { + println(ERROR, tag, msg, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void e(String tag, String msg) { + e(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, String msg, Throwable tr) { + println(ASSERT, tag, msg, tr); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void wtf(String tag, String msg) { + wtf(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, Throwable tr) { + wtf(tag, null, tr); + } +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogFragment.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogFragment.java new file mode 100644 index 000000000..b302acd4b --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogFragment.java @@ -0,0 +1,109 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.logger; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; + +/** + * Simple fraggment which contains a LogView and uses is to output log data it receives + * through the LogNode interface. + */ +public class LogFragment extends Fragment { + + private LogView mLogView; + private ScrollView mScrollView; + + public LogFragment() {} + + public View inflateViews() { + mScrollView = new ScrollView(getActivity()); + ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + mScrollView.setLayoutParams(scrollParams); + + mLogView = new LogView(getActivity()); + ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); + logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; + mLogView.setLayoutParams(logParams); + mLogView.setClickable(true); + mLogView.setFocusable(true); + mLogView.setTypeface(Typeface.MONOSPACE); + + // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! + int paddingDips = 16; + double scale = getResources().getDisplayMetrics().density; + int paddingPixels = (int) ((paddingDips * (scale)) + .5); + mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); + mLogView.setCompoundDrawablePadding(paddingPixels); + + mLogView.setGravity(Gravity.BOTTOM); + mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); + + mScrollView.addView(mLogView); + return mScrollView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View result = inflateViews(); + + mLogView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void afterTextChanged(Editable s) { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); + return result; + } + + public LogView getLogView() { + return mLogView; + } +} \ No newline at end of file diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogNode.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogNode.java new file mode 100644 index 000000000..bc37cabc0 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogNode.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Basic interface for a logging system that can output to one or more targets. + * Note that in addition to classes that will output these logs in some format, + * one can also implement this interface over a filter and insert that in the chain, + * such that no targets further down see certain data, or see manipulated forms of the data. + * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data + * it received to HTML and sent it along to the next node in the chain, without printing it + * anywhere. + */ +public interface LogNode { + + /** + * Instructs first LogNode in the list to print the log data provided. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public void println(int priority, String tag, String msg, Throwable tr); + +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogView.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogView.java new file mode 100644 index 000000000..c01542b91 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogView.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.app.Activity; +import android.content.Context; +import android.util.*; +import android.widget.TextView; + +/** Simple TextView which is used to output log data received through the LogNode interface. +*/ +public class LogView extends TextView implements LogNode { + + public LogView(Context context) { + super(context); + } + + public LogView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LogView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Formats the log data and prints it out to the LogView. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + + + String priorityStr = null; + + // For the purposes of this View, we want to print the priority as readable text. + switch(priority) { + case android.util.Log.VERBOSE: + priorityStr = "VERBOSE"; + break; + case android.util.Log.DEBUG: + priorityStr = "DEBUG"; + break; + case android.util.Log.INFO: + priorityStr = "INFO"; + break; + case android.util.Log.WARN: + priorityStr = "WARN"; + break; + case android.util.Log.ERROR: + priorityStr = "ERROR"; + break; + case android.util.Log.ASSERT: + priorityStr = "ASSERT"; + break; + default: + break; + } + + // Handily, the Log class has a facility for converting a stack trace into a usable string. + String exceptionStr = null; + if (tr != null) { + exceptionStr = android.util.Log.getStackTraceString(tr); + } + + // Take the priority, tag, message, and exception, and concatenate as necessary + // into one usable line of text. + final StringBuilder outputBuilder = new StringBuilder(); + + String delimiter = "\t"; + appendIfNotNull(outputBuilder, priorityStr, delimiter); + appendIfNotNull(outputBuilder, tag, delimiter); + appendIfNotNull(outputBuilder, msg, delimiter); + appendIfNotNull(outputBuilder, exceptionStr, delimiter); + + // In case this was originally called from an AsyncTask or some other off-UI thread, + // make sure the update occurs within the UI thread. + ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() { + @Override + public void run() { + // Display the text we just generated within the LogView. + appendToLog(outputBuilder.toString()); + } + }))); + + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } + + public LogNode getNext() { + return mNext; + } + + public void setNext(LogNode node) { + mNext = node; + } + + /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since + * the logger takes so many arguments that might be null, this method helps cut out some of the + * agonizing tedium of writing the same 3 lines over and over. + * @param source StringBuilder containing the text to append to. + * @param addStr The String to append + * @param delimiter The String to separate the source and appended strings. A tab or comma, + * for instance. + * @return The fully concatenated String as a StringBuilder + */ + private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { + if (addStr != null) { + if (addStr.length() == 0) { + delimiter = ""; + } + + return source.append(addStr).append(delimiter); + } + return source; + } + + // The next LogNode in the chain. + LogNode mNext; + + /** Outputs the string as a new line of log data in the LogView. */ + public void appendToLog(String s) { + append("\n" + s); + } + + +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogWrapper.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogWrapper.java new file mode 100644 index 000000000..16a9e7ba2 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/LogWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.util.Log; + +/** + * Helper class which wraps Android's native Log utility in the Logger interface. This way + * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. + */ +public class LogWrapper implements LogNode { + + // For piping: The next node to receive Log data after this one has done its work. + private LogNode mNext; + + /** + * Returns the next LogNode in the linked list. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Prints data out to the console using Android's native log mechanism. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + // There actually are log methods that don't take a msg parameter. For now, + // if that's the case, just convert null to the empty string and move on. + String useMsg = msg; + if (useMsg == null) { + useMsg = ""; + } + + // If an exeption was provided, convert that exception to a usable string and attach + // it to the end of the msg method. + if (tr != null) { + msg += "\n" + Log.getStackTraceString(tr); + } + + // This is functionally identical to Log.x(tag, useMsg); + // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) + Log.println(priority, tag, useMsg); + + // If this isn't the last node in the chain, move things along. + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java b/samples/browseable/BasicTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java new file mode 100644 index 000000000..19967dcd4 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/logger/MessageOnlyLogFilter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Simple {@link LogNode} filter, removes everything except the message. + * Useful for situations like on-screen log output where you don't want a lot of metadata displayed, + * just easy-to-read message updates as they're happening. + */ +public class MessageOnlyLogFilter implements LogNode { + + LogNode mNext; + + /** + * Takes the "next" LogNode as a parameter, to simplify chaining. + * + * @param next The next LogNode in the pipeline. + */ + public MessageOnlyLogFilter(LogNode next) { + mNext = next; + } + + public MessageOnlyLogFilter() { + } + + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + if (mNext != null) { + getNext().println(Log.NONE, null, msg, null); + } + } + + /** + * Returns the next LogNode in the chain. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabLayout.java b/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabLayout.java new file mode 100644 index 000000000..20049e335 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabLayout.java @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.view; + +import android.content.Context; +import android.graphics.Typeface; +import android.os.Build; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.HorizontalScrollView; +import android.widget.TextView; + +/** + * To be used with ViewPager to provide a tab indicator component which give constant feedback as to + * the user's scroll progress. + *

+ * To use the component, simply add it to your view hierarchy. Then in your + * {@link android.app.Activity} or {@link android.support.v4.app.Fragment} call + * {@link #setViewPager(ViewPager)} providing it the ViewPager this layout is being used for. + *

+ * The colors can be customized in two ways. The first and simplest is to provide an array of colors + * via {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)}. The + * alternative is via the {@link TabColorizer} interface which provides you complete control over + * which color is used for any individual position. + *

+ * The views used as tabs can be customized by calling {@link #setCustomTabView(int, int)}, + * providing the layout ID of your custom layout. + */ +public class SlidingTabLayout extends HorizontalScrollView { + + /** + * Allows complete control over the colors drawn in the tab layout. Set with + * {@link #setCustomTabColorizer(TabColorizer)}. + */ + public interface TabColorizer { + + /** + * @return return the color of the indicator used when {@code position} is selected. + */ + int getIndicatorColor(int position); + + /** + * @return return the color of the divider drawn to the right of {@code position}. + */ + int getDividerColor(int position); + + } + + private static final int TITLE_OFFSET_DIPS = 24; + private static final int TAB_VIEW_PADDING_DIPS = 16; + private static final int TAB_VIEW_TEXT_SIZE_SP = 12; + + private int mTitleOffset; + + private int mTabViewLayoutId; + private int mTabViewTextViewId; + + private ViewPager mViewPager; + private ViewPager.OnPageChangeListener mViewPagerPageChangeListener; + + private final SlidingTabStrip mTabStrip; + + public SlidingTabLayout(Context context) { + this(context, null); + } + + public SlidingTabLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + // Disable the Scroll Bar + setHorizontalScrollBarEnabled(false); + // Make sure that the Tab Strips fills this View + setFillViewport(true); + + mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density); + + mTabStrip = new SlidingTabStrip(context); + addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + } + + /** + * Set the custom {@link TabColorizer} to be used. + * + * If you only require simple custmisation then you can use + * {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve + * similar effects. + */ + public void setCustomTabColorizer(TabColorizer tabColorizer) { + mTabStrip.setCustomTabColorizer(tabColorizer); + } + + /** + * Sets the colors to be used for indicating the selected tab. These colors are treated as a + * circular array. Providing one color will mean that all tabs are indicated with the same color. + */ + public void setSelectedIndicatorColors(int... colors) { + mTabStrip.setSelectedIndicatorColors(colors); + } + + /** + * Sets the colors to be used for tab dividers. These colors are treated as a circular array. + * Providing one color will mean that all tabs are indicated with the same color. + */ + public void setDividerColors(int... colors) { + mTabStrip.setDividerColors(colors); + } + + /** + * Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are + * required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so + * that the layout can update it's scroll position correctly. + * + * @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener) + */ + public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { + mViewPagerPageChangeListener = listener; + } + + /** + * Set the custom layout to be inflated for the tab views. + * + * @param layoutResId Layout id to be inflated + * @param textViewId id of the {@link TextView} in the inflated view + */ + public void setCustomTabView(int layoutResId, int textViewId) { + mTabViewLayoutId = layoutResId; + mTabViewTextViewId = textViewId; + } + + /** + * Sets the associated view pager. Note that the assumption here is that the pager content + * (number of tabs and tab titles) does not change after this call has been made. + */ + public void setViewPager(ViewPager viewPager) { + mTabStrip.removeAllViews(); + + mViewPager = viewPager; + if (viewPager != null) { + viewPager.setOnPageChangeListener(new InternalViewPagerListener()); + populateTabStrip(); + } + } + + /** + * Create a default view to be used for tabs. This is called if a custom tab view is not set via + * {@link #setCustomTabView(int, int)}. + */ + protected TextView createDefaultTabView(Context context) { + TextView textView = new TextView(context); + textView.setGravity(Gravity.CENTER); + textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); + textView.setTypeface(Typeface.DEFAULT_BOLD); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // If we're running on Honeycomb or newer, then we can use the Theme's + // selectableItemBackground to ensure that the View has a pressed state + TypedValue outValue = new TypedValue(); + getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, + outValue, true); + textView.setBackgroundResource(outValue.resourceId); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style + textView.setAllCaps(true); + } + + int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); + textView.setPadding(padding, padding, padding, padding); + + return textView; + } + + private void populateTabStrip() { + final PagerAdapter adapter = mViewPager.getAdapter(); + final View.OnClickListener tabClickListener = new TabClickListener(); + + for (int i = 0; i < adapter.getCount(); i++) { + View tabView = null; + TextView tabTitleView = null; + + if (mTabViewLayoutId != 0) { + // If there is a custom tab view layout id set, try and inflate it + tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, + false); + tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); + } + + if (tabView == null) { + tabView = createDefaultTabView(getContext()); + } + + if (tabTitleView == null && TextView.class.isInstance(tabView)) { + tabTitleView = (TextView) tabView; + } + + tabTitleView.setText(adapter.getPageTitle(i)); + tabView.setOnClickListener(tabClickListener); + + mTabStrip.addView(tabView); + } + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + if (mViewPager != null) { + scrollToTab(mViewPager.getCurrentItem(), 0); + } + } + + private void scrollToTab(int tabIndex, int positionOffset) { + final int tabStripChildCount = mTabStrip.getChildCount(); + if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { + return; + } + + View selectedChild = mTabStrip.getChildAt(tabIndex); + if (selectedChild != null) { + int targetScrollX = selectedChild.getLeft() + positionOffset; + + if (tabIndex > 0 || positionOffset > 0) { + // If we're not at the first child and are mid-scroll, make sure we obey the offset + targetScrollX -= mTitleOffset; + } + + scrollTo(targetScrollX, 0); + } + } + + private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { + private int mScrollState; + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + int tabStripChildCount = mTabStrip.getChildCount(); + if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { + return; + } + + mTabStrip.onViewPagerPageChanged(position, positionOffset); + + View selectedTitle = mTabStrip.getChildAt(position); + int extraOffset = (selectedTitle != null) + ? (int) (positionOffset * selectedTitle.getWidth()) + : 0; + scrollToTab(position, extraOffset); + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, + positionOffsetPixels); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + mScrollState = state; + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageScrollStateChanged(state); + } + } + + @Override + public void onPageSelected(int position) { + if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { + mTabStrip.onViewPagerPageChanged(position, 0f); + scrollToTab(position, 0); + } + + if (mViewPagerPageChangeListener != null) { + mViewPagerPageChangeListener.onPageSelected(position); + } + } + + } + + private class TabClickListener implements View.OnClickListener { + @Override + public void onClick(View v) { + for (int i = 0; i < mTabStrip.getChildCount(); i++) { + if (v == mTabStrip.getChildAt(i)) { + mViewPager.setCurrentItem(i); + return; + } + } + } + } + +} diff --git a/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabStrip.java b/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabStrip.java new file mode 100644 index 000000000..d5bbbae59 --- /dev/null +++ b/samples/browseable/BasicTransition/src/com.example.android.common/view/SlidingTabStrip.java @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.view; + +import android.R; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.View; +import android.widget.LinearLayout; + +class SlidingTabStrip extends LinearLayout { + + private static final int DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS = 2; + private static final byte DEFAULT_BOTTOM_BORDER_COLOR_ALPHA = 0x26; + private static final int SELECTED_INDICATOR_THICKNESS_DIPS = 8; + private static final int DEFAULT_SELECTED_INDICATOR_COLOR = 0xFF33B5E5; + + private static final int DEFAULT_DIVIDER_THICKNESS_DIPS = 1; + private static final byte DEFAULT_DIVIDER_COLOR_ALPHA = 0x20; + private static final float DEFAULT_DIVIDER_HEIGHT = 0.5f; + + private final int mBottomBorderThickness; + private final Paint mBottomBorderPaint; + + private final int mSelectedIndicatorThickness; + private final Paint mSelectedIndicatorPaint; + + private final int mDefaultBottomBorderColor; + + private final Paint mDividerPaint; + private final float mDividerHeight; + + private int mSelectedPosition; + private float mSelectionOffset; + + private SlidingTabLayout.TabColorizer mCustomTabColorizer; + private final SimpleTabColorizer mDefaultTabColorizer; + + SlidingTabStrip(Context context) { + this(context, null); + } + + SlidingTabStrip(Context context, AttributeSet attrs) { + super(context, attrs); + setWillNotDraw(false); + + final float density = getResources().getDisplayMetrics().density; + + TypedValue outValue = new TypedValue(); + context.getTheme().resolveAttribute(R.attr.colorForeground, outValue, true); + final int themeForegroundColor = outValue.data; + + mDefaultBottomBorderColor = setColorAlpha(themeForegroundColor, + DEFAULT_BOTTOM_BORDER_COLOR_ALPHA); + + mDefaultTabColorizer = new SimpleTabColorizer(); + mDefaultTabColorizer.setIndicatorColors(DEFAULT_SELECTED_INDICATOR_COLOR); + mDefaultTabColorizer.setDividerColors(setColorAlpha(themeForegroundColor, + DEFAULT_DIVIDER_COLOR_ALPHA)); + + mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density); + mBottomBorderPaint = new Paint(); + mBottomBorderPaint.setColor(mDefaultBottomBorderColor); + + mSelectedIndicatorThickness = (int) (SELECTED_INDICATOR_THICKNESS_DIPS * density); + mSelectedIndicatorPaint = new Paint(); + + mDividerHeight = DEFAULT_DIVIDER_HEIGHT; + mDividerPaint = new Paint(); + mDividerPaint.setStrokeWidth((int) (DEFAULT_DIVIDER_THICKNESS_DIPS * density)); + } + + void setCustomTabColorizer(SlidingTabLayout.TabColorizer customTabColorizer) { + mCustomTabColorizer = customTabColorizer; + invalidate(); + } + + void setSelectedIndicatorColors(int... colors) { + // Make sure that the custom colorizer is removed + mCustomTabColorizer = null; + mDefaultTabColorizer.setIndicatorColors(colors); + invalidate(); + } + + void setDividerColors(int... colors) { + // Make sure that the custom colorizer is removed + mCustomTabColorizer = null; + mDefaultTabColorizer.setDividerColors(colors); + invalidate(); + } + + void onViewPagerPageChanged(int position, float positionOffset) { + mSelectedPosition = position; + mSelectionOffset = positionOffset; + invalidate(); + } + + @Override + protected void onDraw(Canvas canvas) { + final int height = getHeight(); + final int childCount = getChildCount(); + final int dividerHeightPx = (int) (Math.min(Math.max(0f, mDividerHeight), 1f) * height); + final SlidingTabLayout.TabColorizer tabColorizer = mCustomTabColorizer != null + ? mCustomTabColorizer + : mDefaultTabColorizer; + + // Thick colored underline below the current selection + if (childCount > 0) { + View selectedTitle = getChildAt(mSelectedPosition); + int left = selectedTitle.getLeft(); + int right = selectedTitle.getRight(); + int color = tabColorizer.getIndicatorColor(mSelectedPosition); + + if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1)) { + int nextColor = tabColorizer.getIndicatorColor(mSelectedPosition + 1); + if (color != nextColor) { + color = blendColors(nextColor, color, mSelectionOffset); + } + + // Draw the selection partway between the tabs + View nextTitle = getChildAt(mSelectedPosition + 1); + left = (int) (mSelectionOffset * nextTitle.getLeft() + + (1.0f - mSelectionOffset) * left); + right = (int) (mSelectionOffset * nextTitle.getRight() + + (1.0f - mSelectionOffset) * right); + } + + mSelectedIndicatorPaint.setColor(color); + + canvas.drawRect(left, height - mSelectedIndicatorThickness, right, + height, mSelectedIndicatorPaint); + } + + // Thin underline along the entire bottom edge + canvas.drawRect(0, height - mBottomBorderThickness, getWidth(), height, mBottomBorderPaint); + + // Vertical separators between the titles + int separatorTop = (height - dividerHeightPx) / 2; + for (int i = 0; i < childCount - 1; i++) { + View child = getChildAt(i); + mDividerPaint.setColor(tabColorizer.getDividerColor(i)); + canvas.drawLine(child.getRight(), separatorTop, child.getRight(), + separatorTop + dividerHeightPx, mDividerPaint); + } + } + + /** + * Set the alpha value of the {@code color} to be the given {@code alpha} value. + */ + private static int setColorAlpha(int color, byte alpha) { + return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)); + } + + /** + * Blend {@code color1} and {@code color2} using the given ratio. + * + * @param ratio of which to blend. 1.0 will return {@code color1}, 0.5 will give an even blend, + * 0.0 will return {@code color2}. + */ + private static int blendColors(int color1, int color2, float ratio) { + final float inverseRation = 1f - ratio; + float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation); + float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation); + float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); + return Color.rgb((int) r, (int) g, (int) b); + } + + private static class SimpleTabColorizer implements SlidingTabLayout.TabColorizer { + private int[] mIndicatorColors; + private int[] mDividerColors; + + @Override + public final int getIndicatorColor(int position) { + return mIndicatorColors[position % mIndicatorColors.length]; + } + + @Override + public final int getDividerColor(int position) { + return mDividerColors[position % mDividerColors.length]; + } + + void setIndicatorColors(int... colors) { + mIndicatorColors = colors; + } + + void setDividerColors(int... colors) { + mDividerColors = colors; + } + } +} \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/AndroidManifest.xml b/samples/browseable/DisplayingBitmaps/AndroidManifest.xml new file mode 100644 index 000000000..23db308a3 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/AndroidManifest.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DisplayingBitmaps/_index.jd b/samples/browseable/DisplayingBitmaps/_index.jd new file mode 100644 index 000000000..ccb4fa8f2 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/_index.jd @@ -0,0 +1,18 @@ + + + +page.tags="DisplayingBitmaps" +sample.group=UI +@jd:body + +

+ + This is a sample application for the Android Training class + "Displaying Bitmaps Efficiently" + (http://developer.android.com/training/displaying-bitmaps/).\n\n + + It demonstrates how to load large bitmaps efficiently off the main UI thread, caching + bitmaps (both in memory and on disk), managing bitmap memory and displaying bitmaps + in UI elements such as ViewPager and ListView/GridView. + +

diff --git a/samples/browseable/DisplayingBitmaps/res/drawable-hdpi/ic_launcher.png b/samples/browseable/DisplayingBitmaps/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..75b3c978107062bdb3549adb3f59502fe207b5f9 GIT binary patch literal 4440 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DisplayingBitmaps/res/drawable-nodpi/empty_photo.png b/samples/browseable/DisplayingBitmaps/res/drawable-nodpi/empty_photo.png new file mode 100644 index 0000000000000000000000000000000000000000..da1478a510db0e72a5fa715cf071cea7f100fb95 GIT binary patch literal 3159 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 AZ2$lO literal 0 HcmV?d00001 diff --git a/samples/browseable/DisplayingBitmaps/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/DisplayingBitmaps/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5aeed04f594df10128e79bc9d72d3d948cdfa3 GIT binary patch literal 6245 zcmV-r7@FsaP)^BPf~(5+Fno zqGE8%aaTNvJWvCOhzbHC$_&U3!@dqM^X^wwxBGTY_dowXJ)36QQ~teFbyt1g-Rf3P zlcwsn8bu(jMxS2ya8*Y@4GTdX0d)k_FakCF_&N=!jRbtT=&LblX&F@1DK*@`AH?HJ zOV#eu(i0Q9_BnfkJD@Te@YSldx94OxobiJgc`X~n!Gi~foz?Y>0Jbgx^>*you{}LK zy-6+W`wyZ!B_$<$TC`}FWcKskmTT2I#o15E|y0$xtfVP`AZ{Ao- z`~HLIR+~0$+R;EZMG=sl&IK(*|^S&yjV>&78X5fI@p%(V3x_=*iVD5wKx*Z;9B0#~Y=aXeC58yy3$y8S z7Hj}{qSVyUpaNtKzaayAh7hzjq~VxJ!1HlmLzEeSByH2ZS6qo(+p?2>3#shkF1y3Z zqzl

RT)_^QJG@;z>KSKm% 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 P00000NkvXXu0mjf$Q!N? literal 0 HcmV?d00001 diff --git a/samples/browseable/DisplayingBitmaps/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/DisplayingBitmaps/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91b0f960b2811b942d44da4bee5e9dbab36f189c GIT binary patch literal 11128 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 KMNUMnLSTY7Oa + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DisplayingBitmaps/res/layout/activity_main.xml b/samples/browseable/DisplayingBitmaps/res/layout/activity_main.xml new file mode 100755 index 000000000..be1aa49d9 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/layout/activity_main.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/samples/browseable/DisplayingBitmaps/res/layout/image_detail_fragment.xml b/samples/browseable/DisplayingBitmaps/res/layout/image_detail_fragment.xml new file mode 100644 index 000000000..97ac520cc --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/layout/image_detail_fragment.xml @@ -0,0 +1,34 @@ + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/layout/image_detail_pager.xml b/samples/browseable/DisplayingBitmaps/res/layout/image_detail_pager.xml new file mode 100644 index 000000000..877a26bb5 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/layout/image_detail_pager.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/layout/image_grid_fragment.xml b/samples/browseable/DisplayingBitmaps/res/layout/image_grid_fragment.xml new file mode 100644 index 000000000..e2034dea1 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/layout/image_grid_fragment.xml @@ -0,0 +1,29 @@ + + + + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/menu/main_menu.xml b/samples/browseable/DisplayingBitmaps/res/menu/main_menu.xml new file mode 100644 index 000000000..35dad093f --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/menu/main_menu.xml @@ -0,0 +1,25 @@ + + +

+ + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values-large/dimens.xml b/samples/browseable/DisplayingBitmaps/res/values-large/dimens.xml new file mode 100644 index 000000000..c68187614 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values-large/dimens.xml @@ -0,0 +1,23 @@ + + + + + + 148dp + 2dp + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-dimens.xml b/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-dimens.xml new file mode 100644 index 000000000..22074a2bd --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-dimens.xml @@ -0,0 +1,24 @@ + + + + + + + @dimen/margin_huge + @dimen/margin_medium + + diff --git a/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-styles.xml b/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-styles.xml new file mode 100644 index 000000000..03d197418 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values-sw600dp/template-styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/samples/browseable/DisplayingBitmaps/res/values-v11/styles.xml b/samples/browseable/DisplayingBitmaps/res/values-v11/styles.xml new file mode 100644 index 000000000..57da0fb6c --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values-v11/styles.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values-xlarge/dimens.xml b/samples/browseable/DisplayingBitmaps/res/values-xlarge/dimens.xml new file mode 100644 index 000000000..0f4397751 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values-xlarge/dimens.xml @@ -0,0 +1,23 @@ + + + + + + 198dp + 2dp + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values/base-strings.xml b/samples/browseable/DisplayingBitmaps/res/values/base-strings.xml new file mode 100644 index 000000000..a6a8390a6 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/base-strings.xml @@ -0,0 +1,37 @@ + + + + + + + DisplayingBitmaps + + + + diff --git a/samples/browseable/DisplayingBitmaps/res/values/colors.xml b/samples/browseable/DisplayingBitmaps/res/values/colors.xml new file mode 100644 index 000000000..521b4b944 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/colors.xml @@ -0,0 +1,23 @@ + + + + + + #1Affffff + #80000000 + + diff --git a/samples/browseable/DisplayingBitmaps/res/values/dimens.xml b/samples/browseable/DisplayingBitmaps/res/values/dimens.xml new file mode 100644 index 000000000..53f61f030 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/dimens.xml @@ -0,0 +1,23 @@ + + + + + + 100dp + 1dp + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values/strings.xml b/samples/browseable/DisplayingBitmaps/res/values/strings.xml new file mode 100644 index 000000000..84b613785 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/strings.xml @@ -0,0 +1,25 @@ + + + + + + Clear Caches + Caches have been cleared + Image Thumbnail + No network connection found + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values/styles.xml b/samples/browseable/DisplayingBitmaps/res/values/styles.xml new file mode 100644 index 000000000..e9aabee8f --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/styles.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/res/values/template-dimens.xml b/samples/browseable/DisplayingBitmaps/res/values/template-dimens.xml new file mode 100644 index 000000000..39e710b5c --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/template-dimens.xml @@ -0,0 +1,32 @@ + + + + + + + 4dp + 8dp + 16dp + 32dp + 64dp + + + + @dimen/margin_medium + @dimen/margin_medium + + diff --git a/samples/browseable/DisplayingBitmaps/res/values/template-styles.xml b/samples/browseable/DisplayingBitmaps/res/values/template-styles.xml new file mode 100644 index 000000000..404623e3d --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/res/values/template-styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/Log.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/Log.java new file mode 100644 index 000000000..17503c568 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/Log.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Helper class for a list (or tree) of LoggerNodes. + * + *

When this is set as the head of the list, + * an instance of it can function as a drop-in replacement for {@link android.util.Log}. + * Most of the methods in this class server only to map a method call in Log to its equivalent + * in LogNode.

+ */ +public class Log { + // Grabbing the native values from Android's native logging facilities, + // to make for easy migration and interop. + public static final int NONE = -1; + public static final int VERBOSE = android.util.Log.VERBOSE; + public static final int DEBUG = android.util.Log.DEBUG; + public static final int INFO = android.util.Log.INFO; + public static final int WARN = android.util.Log.WARN; + public static final int ERROR = android.util.Log.ERROR; + public static final int ASSERT = android.util.Log.ASSERT; + + // Stores the beginning of the LogNode topology. + private static LogNode mLogNode; + + /** + * Returns the next LogNode in the linked list. + */ + public static LogNode getLogNode() { + return mLogNode; + } + + /** + * Sets the LogNode data will be sent to. + */ + public static void setLogNode(LogNode node) { + mLogNode = node; + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void println(int priority, String tag, String msg, Throwable tr) { + if (mLogNode != null) { + mLogNode.println(priority, tag, msg, tr); + } + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + */ + public static void println(int priority, String tag, String msg) { + println(priority, tag, msg, null); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void v(String tag, String msg, Throwable tr) { + println(VERBOSE, tag, msg, tr); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void v(String tag, String msg) { + v(tag, msg, null); + } + + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void d(String tag, String msg, Throwable tr) { + println(DEBUG, tag, msg, tr); + } + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void d(String tag, String msg) { + d(tag, msg, null); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void i(String tag, String msg, Throwable tr) { + println(INFO, tag, msg, tr); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void i(String tag, String msg) { + i(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, String msg, Throwable tr) { + println(WARN, tag, msg, tr); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void w(String tag, String msg) { + w(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, Throwable tr) { + w(tag, null, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void e(String tag, String msg, Throwable tr) { + println(ERROR, tag, msg, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void e(String tag, String msg) { + e(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, String msg, Throwable tr) { + println(ASSERT, tag, msg, tr); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void wtf(String tag, String msg) { + wtf(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, Throwable tr) { + wtf(tag, null, tr); + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogFragment.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogFragment.java new file mode 100644 index 000000000..b302acd4b --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogFragment.java @@ -0,0 +1,109 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.common.logger; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; + +/** + * Simple fraggment which contains a LogView and uses is to output log data it receives + * through the LogNode interface. + */ +public class LogFragment extends Fragment { + + private LogView mLogView; + private ScrollView mScrollView; + + public LogFragment() {} + + public View inflateViews() { + mScrollView = new ScrollView(getActivity()); + ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + mScrollView.setLayoutParams(scrollParams); + + mLogView = new LogView(getActivity()); + ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); + logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; + mLogView.setLayoutParams(logParams); + mLogView.setClickable(true); + mLogView.setFocusable(true); + mLogView.setTypeface(Typeface.MONOSPACE); + + // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! + int paddingDips = 16; + double scale = getResources().getDisplayMetrics().density; + int paddingPixels = (int) ((paddingDips * (scale)) + .5); + mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); + mLogView.setCompoundDrawablePadding(paddingPixels); + + mLogView.setGravity(Gravity.BOTTOM); + mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); + + mScrollView.addView(mLogView); + return mScrollView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View result = inflateViews(); + + mLogView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void afterTextChanged(Editable s) { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); + return result; + } + + public LogView getLogView() { + return mLogView; + } +} \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogNode.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogNode.java new file mode 100644 index 000000000..bc37cabc0 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogNode.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Basic interface for a logging system that can output to one or more targets. + * Note that in addition to classes that will output these logs in some format, + * one can also implement this interface over a filter and insert that in the chain, + * such that no targets further down see certain data, or see manipulated forms of the data. + * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data + * it received to HTML and sent it along to the next node in the chain, without printing it + * anywhere. + */ +public interface LogNode { + + /** + * Instructs first LogNode in the list to print the log data provided. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public void println(int priority, String tag, String msg, Throwable tr); + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogView.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogView.java new file mode 100644 index 000000000..c01542b91 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogView.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.app.Activity; +import android.content.Context; +import android.util.*; +import android.widget.TextView; + +/** Simple TextView which is used to output log data received through the LogNode interface. +*/ +public class LogView extends TextView implements LogNode { + + public LogView(Context context) { + super(context); + } + + public LogView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LogView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Formats the log data and prints it out to the LogView. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + + + String priorityStr = null; + + // For the purposes of this View, we want to print the priority as readable text. + switch(priority) { + case android.util.Log.VERBOSE: + priorityStr = "VERBOSE"; + break; + case android.util.Log.DEBUG: + priorityStr = "DEBUG"; + break; + case android.util.Log.INFO: + priorityStr = "INFO"; + break; + case android.util.Log.WARN: + priorityStr = "WARN"; + break; + case android.util.Log.ERROR: + priorityStr = "ERROR"; + break; + case android.util.Log.ASSERT: + priorityStr = "ASSERT"; + break; + default: + break; + } + + // Handily, the Log class has a facility for converting a stack trace into a usable string. + String exceptionStr = null; + if (tr != null) { + exceptionStr = android.util.Log.getStackTraceString(tr); + } + + // Take the priority, tag, message, and exception, and concatenate as necessary + // into one usable line of text. + final StringBuilder outputBuilder = new StringBuilder(); + + String delimiter = "\t"; + appendIfNotNull(outputBuilder, priorityStr, delimiter); + appendIfNotNull(outputBuilder, tag, delimiter); + appendIfNotNull(outputBuilder, msg, delimiter); + appendIfNotNull(outputBuilder, exceptionStr, delimiter); + + // In case this was originally called from an AsyncTask or some other off-UI thread, + // make sure the update occurs within the UI thread. + ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() { + @Override + public void run() { + // Display the text we just generated within the LogView. + appendToLog(outputBuilder.toString()); + } + }))); + + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } + + public LogNode getNext() { + return mNext; + } + + public void setNext(LogNode node) { + mNext = node; + } + + /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since + * the logger takes so many arguments that might be null, this method helps cut out some of the + * agonizing tedium of writing the same 3 lines over and over. + * @param source StringBuilder containing the text to append to. + * @param addStr The String to append + * @param delimiter The String to separate the source and appended strings. A tab or comma, + * for instance. + * @return The fully concatenated String as a StringBuilder + */ + private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { + if (addStr != null) { + if (addStr.length() == 0) { + delimiter = ""; + } + + return source.append(addStr).append(delimiter); + } + return source; + } + + // The next LogNode in the chain. + LogNode mNext; + + /** Outputs the string as a new line of log data in the LogView. */ + public void appendToLog(String s) { + append("\n" + s); + } + + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogWrapper.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogWrapper.java new file mode 100644 index 000000000..16a9e7ba2 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/LogWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.util.Log; + +/** + * Helper class which wraps Android's native Log utility in the Logger interface. This way + * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. + */ +public class LogWrapper implements LogNode { + + // For piping: The next node to receive Log data after this one has done its work. + private LogNode mNext; + + /** + * Returns the next LogNode in the linked list. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Prints data out to the console using Android's native log mechanism. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + // There actually are log methods that don't take a msg parameter. For now, + // if that's the case, just convert null to the empty string and move on. + String useMsg = msg; + if (useMsg == null) { + useMsg = ""; + } + + // If an exeption was provided, convert that exception to a usable string and attach + // it to the end of the msg method. + if (tr != null) { + msg += "\n" + Log.getStackTraceString(tr); + } + + // This is functionally identical to Log.x(tag, useMsg); + // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) + Log.println(priority, tag, useMsg); + + // If this isn't the last node in the chain, move things along. + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/MessageOnlyLogFilter.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/MessageOnlyLogFilter.java new file mode 100644 index 000000000..19967dcd4 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.common.logger/MessageOnlyLogFilter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Simple {@link LogNode} filter, removes everything except the message. + * Useful for situations like on-screen log output where you don't want a lot of metadata displayed, + * just easy-to-read message updates as they're happening. + */ +public class MessageOnlyLogFilter implements LogNode { + + LogNode mNext; + + /** + * Takes the "next" LogNode as a parameter, to simplify chaining. + * + * @param next The next LogNode in the pipeline. + */ + public MessageOnlyLogFilter(LogNode next) { + mNext = next; + } + + public MessageOnlyLogFilter() { + } + + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + if (mNext != null) { + getNext().println(Log.NONE, null, msg, null); + } + } + + /** + * Returns the next LogNode in the chain. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/provider/Images.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/provider/Images.java new file mode 100644 index 000000000..5a895462d --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/provider/Images.java @@ -0,0 +1,245 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.provider; + +/** + * Some simple test data to use for this sample app. + */ +public class Images { + + /** + * This are PicasaWeb URLs and could potentially change. Ideally the PicasaWeb API should be + * used to fetch the URLs. + * + * Credit to Romain Guy for the photos: + * http://www.curious-creature.org/ + * https://plus.google.com/109538161516040592207/about + * http://www.flickr.com/photos/romainguy + */ + public final static String[] imageUrls = new String[] { + "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s1024/A%252520Photographer.jpg", + "https://lh4.googleusercontent.com/--dq8niRp7W4/URquVgmXvgI/AAAAAAAAAbs/-gnuLQfNnBA/s1024/A%252520Song%252520of%252520Ice%252520and%252520Fire.jpg", + "https://lh5.googleusercontent.com/-7qZeDtRKFKc/URquWZT1gOI/AAAAAAAAAbs/hqWgteyNXsg/s1024/Another%252520Rockaway%252520Sunset.jpg", + "https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s1024/Antelope%252520Butte.jpg", + "https://lh6.googleusercontent.com/-8HO-4vIFnlw/URquZnsFgtI/AAAAAAAAAbs/WT8jViTF7vw/s1024/Antelope%252520Hallway.jpg", + "https://lh4.googleusercontent.com/-WIuWgVcU3Qw/URqubRVcj4I/AAAAAAAAAbs/YvbwgGjwdIQ/s1024/Antelope%252520Walls.jpg", + "https://lh6.googleusercontent.com/-UBmLbPELvoQ/URqucCdv0kI/AAAAAAAAAbs/IdNhr2VQoQs/s1024/Apre%2525CC%252580s%252520la%252520Pluie.jpg", + "https://lh3.googleusercontent.com/-s-AFpvgSeew/URquc6dF-JI/AAAAAAAAAbs/Mt3xNGRUd68/s1024/Backlit%252520Cloud.jpg", + "https://lh5.googleusercontent.com/-bvmif9a9YOQ/URquea3heHI/AAAAAAAAAbs/rcr6wyeQtAo/s1024/Bee%252520and%252520Flower.jpg", + "https://lh5.googleusercontent.com/-n7mdm7I7FGs/URqueT_BT-I/AAAAAAAAAbs/9MYmXlmpSAo/s1024/Bonzai%252520Rock%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-4CN4X4t0M1k/URqufPozWzI/AAAAAAAAAbs/8wK41lg1KPs/s1024/Caterpillar.jpg", + "https://lh3.googleusercontent.com/-rrFnVC8xQEg/URqufdrLBaI/AAAAAAAAAbs/s69WYy_fl1E/s1024/Chess.jpg", + "https://lh5.googleusercontent.com/-WVpRptWH8Yw/URqugh-QmDI/AAAAAAAAAbs/E-MgBgtlUWU/s1024/Chihuly.jpg", + "https://lh5.googleusercontent.com/-0BDXkYmckbo/URquhKFW84I/AAAAAAAAAbs/ogQtHCTk2JQ/s1024/Closed%252520Door.jpg", + "https://lh3.googleusercontent.com/-PyggXXZRykM/URquh-kVvoI/AAAAAAAAAbs/hFtDwhtrHHQ/s1024/Colorado%252520River%252520Sunset.jpg", + "https://lh3.googleusercontent.com/-ZAs4dNZtALc/URquikvOCWI/AAAAAAAAAbs/DXz4h3dll1Y/s1024/Colors%252520of%252520Autumn.jpg", + "https://lh4.googleusercontent.com/-GztnWEIiMz8/URqukVCU7bI/AAAAAAAAAbs/jo2Hjv6MZ6M/s1024/Countryside.jpg", + "https://lh4.googleusercontent.com/-bEg9EZ9QoiM/URquklz3FGI/AAAAAAAAAbs/UUuv8Ac2BaE/s1024/Death%252520Valley%252520-%252520Dunes.jpg", + "https://lh6.googleusercontent.com/-ijQJ8W68tEE/URqulGkvFEI/AAAAAAAAAbs/zPXvIwi_rFw/s1024/Delicate%252520Arch.jpg", + "https://lh5.googleusercontent.com/-Oh8mMy2ieng/URqullDwehI/AAAAAAAAAbs/TbdeEfsaIZY/s1024/Despair.jpg", + "https://lh5.googleusercontent.com/-gl0y4UiAOlk/URqumC_KjBI/AAAAAAAAAbs/PM1eT7dn4oo/s1024/Eagle%252520Fall%252520Sunrise.jpg", + "https://lh3.googleusercontent.com/-hYYHd2_vXPQ/URqumtJa9eI/AAAAAAAAAbs/wAalXVkbSh0/s1024/Electric%252520Storm.jpg", + "https://lh5.googleusercontent.com/-PyY_yiyjPTo/URqunUOhHFI/AAAAAAAAAbs/azZoULNuJXc/s1024/False%252520Kiva.jpg", + "https://lh6.googleusercontent.com/-PYvLVdvXywk/URqunwd8hfI/AAAAAAAAAbs/qiMwgkFvf6I/s1024/Fitzgerald%252520Streaks.jpg", + "https://lh4.googleusercontent.com/-KIR_UobIIqY/URquoCZ9SlI/AAAAAAAAAbs/Y4d4q8sXu4c/s1024/Foggy%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-9lzOk_OWZH0/URquoo4xYoI/AAAAAAAAAbs/AwgzHtNVCwU/s1024/Frantic.jpg", + "https://lh3.googleusercontent.com/-0X3JNaKaz48/URqupH78wpI/AAAAAAAAAbs/lHXxu_zbH8s/s1024/Golden%252520Gate%252520Afternoon.jpg", + "https://lh6.googleusercontent.com/-95sb5ag7ABc/URqupl95RDI/AAAAAAAAAbs/g73R20iVTRA/s1024/Golden%252520Gate%252520Fog.jpg", + "https://lh3.googleusercontent.com/-JB9v6rtgHhk/URqup21F-zI/AAAAAAAAAbs/64Fb8qMZWXk/s1024/Golden%252520Grass.jpg", + "https://lh4.googleusercontent.com/-EIBGfnuLtII/URquqVHwaRI/AAAAAAAAAbs/FA4McV2u8VE/s1024/Grand%252520Teton.jpg", + "https://lh4.googleusercontent.com/-WoMxZvmN9nY/URquq1v2AoI/AAAAAAAAAbs/grj5uMhL6NA/s1024/Grass%252520Closeup.jpg", + "https://lh3.googleusercontent.com/-6hZiEHXx64Q/URqurxvNdqI/AAAAAAAAAbs/kWMXM3o5OVI/s1024/Green%252520Grass.jpg", + "https://lh5.googleusercontent.com/-6LVb9OXtQ60/URquteBFuKI/AAAAAAAAAbs/4F4kRgecwFs/s1024/Hanging%252520Leaf.jpg", + "https://lh4.googleusercontent.com/-zAvf__52ONk/URqutT_IuxI/AAAAAAAAAbs/D_bcuc0thoU/s1024/Highway%2525201.jpg", + "https://lh6.googleusercontent.com/-H4SrUg615rA/URquuL27fXI/AAAAAAAAAbs/4aEqJfiMsOU/s1024/Horseshoe%252520Bend%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-JhFi4fb_Pqw/URquuX-QXbI/AAAAAAAAAbs/IXpYUxuweYM/s1024/Horseshoe%252520Bend.jpg", + "https://lh5.googleusercontent.com/-UGgssvFRJ7g/URquueyJzGI/AAAAAAAAAbs/yYIBlLT0toM/s1024/Into%252520the%252520Blue.jpg", + "https://lh3.googleusercontent.com/-CH7KoupI7uI/URquu0FF__I/AAAAAAAAAbs/R7GDmI7v_G0/s1024/Jelly%252520Fish%2525202.jpg", + "https://lh4.googleusercontent.com/-pwuuw6yhg8U/URquvPxR3FI/AAAAAAAAAbs/VNGk6f-tsGE/s1024/Jelly%252520Fish%2525203.jpg", + "https://lh5.googleusercontent.com/-GoUQVw1fnFw/URquv6xbC0I/AAAAAAAAAbs/zEUVTQQ43Zc/s1024/Kauai.jpg", + "https://lh6.googleusercontent.com/-8QdYYQEpYjw/URquwvdh88I/AAAAAAAAAbs/cktDy-ysfHo/s1024/Kyoto%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-vPeekyDjOE0/URquwzJ28qI/AAAAAAAAAbs/qxcyXULsZrg/s1024/Lake%252520Tahoe%252520Colors.jpg", + "https://lh4.googleusercontent.com/-xBPxWpD4yxU/URquxWHk8AI/AAAAAAAAAbs/ARDPeDYPiMY/s1024/Lava%252520from%252520the%252520Sky.jpg", + "https://lh3.googleusercontent.com/-897VXrJB6RE/URquxxxd-5I/AAAAAAAAAbs/j-Cz4T4YvIw/s1024/Leica%25252050mm%252520Summilux.jpg", + "https://lh5.googleusercontent.com/-qSJ4D4iXzGo/URquyDWiJ1I/AAAAAAAAAbs/k2pBXeWehOA/s1024/Leica%25252050mm%252520Summilux.jpg", + "https://lh6.googleusercontent.com/-dwlPg83vzLg/URquylTVuFI/AAAAAAAAAbs/G6SyQ8b4YsI/s1024/Leica%252520M8%252520%252528Front%252529.jpg", + "https://lh3.googleusercontent.com/-R3_EYAyJvfk/URquzQBv8eI/AAAAAAAAAbs/b9xhpUM3pEI/s1024/Light%252520to%252520Sand.jpg", + "https://lh3.googleusercontent.com/-fHY5h67QPi0/URqu0Cp4J1I/AAAAAAAAAbs/0lG6m94Z6vM/s1024/Little%252520Bit%252520of%252520Paradise.jpg", + "https://lh5.googleusercontent.com/-TzF_LwrCnRM/URqu0RddPOI/AAAAAAAAAbs/gaj2dLiuX0s/s1024/Lone%252520Pine%252520Sunset.jpg", + "https://lh3.googleusercontent.com/-4HdpJ4_DXU4/URqu046dJ9I/AAAAAAAAAbs/eBOodtk2_uk/s1024/Lonely%252520Rock.jpg", + "https://lh6.googleusercontent.com/-erbF--z-W4s/URqu1ajSLkI/AAAAAAAAAbs/xjDCDO1INzM/s1024/Longue%252520Vue.jpg", + "https://lh6.googleusercontent.com/-0CXJRdJaqvc/URqu1opNZNI/AAAAAAAAAbs/PFB2oPUU7Lk/s1024/Look%252520Me%252520in%252520the%252520Eye.jpg", + "https://lh3.googleusercontent.com/-D_5lNxnDN6g/URqu2Tk7HVI/AAAAAAAAAbs/p0ddca9W__Y/s1024/Lost%252520in%252520a%252520Field.jpg", + "https://lh6.googleusercontent.com/-flsqwMrIk2Q/URqu24PcmjI/AAAAAAAAAbs/5ocIH85XofM/s1024/Marshall%252520Beach%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-Y4lgryEVTmU/URqu28kG3gI/AAAAAAAAAbs/OjXpekqtbJ4/s1024/Mono%252520Lake%252520Blue.jpg", + "https://lh4.googleusercontent.com/-AaHAJPmcGYA/URqu3PIldHI/AAAAAAAAAbs/lcTqk1SIcRs/s1024/Monument%252520Valley%252520Overlook.jpg", + "https://lh4.googleusercontent.com/-vKxfdQ83dQA/URqu31Yq_BI/AAAAAAAAAbs/OUoGk_2AyfM/s1024/Moving%252520Rock.jpg", + "https://lh5.googleusercontent.com/-CG62QiPpWXg/URqu4ia4vRI/AAAAAAAAAbs/0YOdqLAlcAc/s1024/Napali%252520Coast.jpg", + "https://lh6.googleusercontent.com/-wdGrP5PMmJQ/URqu5PZvn7I/AAAAAAAAAbs/m0abEcdPXe4/s1024/One%252520Wheel.jpg", + "https://lh6.googleusercontent.com/-6WS5DoCGuOA/URqu5qx1UgI/AAAAAAAAAbs/giMw2ixPvrY/s1024/Open%252520Sky.jpg", + "https://lh6.googleusercontent.com/-u8EHKj8G8GQ/URqu55sM6yI/AAAAAAAAAbs/lIXX_GlTdmI/s1024/Orange%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-74Z5qj4bTDE/URqu6LSrJrI/AAAAAAAAAbs/XzmVkw90szQ/s1024/Orchid.jpg", + "https://lh6.googleusercontent.com/-lEQE4h6TePE/URqu6t_lSkI/AAAAAAAAAbs/zvGYKOea_qY/s1024/Over%252520there.jpg", + "https://lh5.googleusercontent.com/-cauH-53JH2M/URqu66v_USI/AAAAAAAAAbs/EucwwqclfKQ/s1024/Plumes.jpg", + "https://lh3.googleusercontent.com/-eDLT2jHDoy4/URqu7axzkAI/AAAAAAAAAbs/iVZE-xJ7lZs/s1024/Rainbokeh.jpg", + "https://lh5.googleusercontent.com/-j1NLqEFIyco/URqu8L1CGcI/AAAAAAAAAbs/aqZkgX66zlI/s1024/Rainbow.jpg", + "https://lh5.googleusercontent.com/-DRnqmK0t4VU/URqu8XYN9yI/AAAAAAAAAbs/LgvF_592WLU/s1024/Rice%252520Fields.jpg", + "https://lh3.googleusercontent.com/-hwh1v3EOGcQ/URqu8qOaKwI/AAAAAAAAAbs/IljRJRnbJGw/s1024/Rockaway%252520Fire%252520Sky.jpg", + "https://lh5.googleusercontent.com/-wjV6FQk7tlk/URqu9jCQ8sI/AAAAAAAAAbs/RyYUpdo-c9o/s1024/Rockaway%252520Flow.jpg", + "https://lh6.googleusercontent.com/-6cAXNfo7D20/URqu-BdzgPI/AAAAAAAAAbs/OmsYllzJqwo/s1024/Rockaway%252520Sunset%252520Sky.jpg", + "https://lh3.googleusercontent.com/-sl8fpGPS-RE/URqu_BOkfgI/AAAAAAAAAbs/Dg2Fv-JxOeg/s1024/Russian%252520Ridge%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-gVtY36mMBIg/URqu_q91lkI/AAAAAAAAAbs/3CiFMBcy5MA/s1024/Rust%252520Knot.jpg", + "https://lh6.googleusercontent.com/-GHeImuHqJBE/URqu_FKfVLI/AAAAAAAAAbs/axuEJeqam7Q/s1024/Sailing%252520Stones.jpg", + "https://lh3.googleusercontent.com/-hBbYZjTOwGc/URqu_ycpIrI/AAAAAAAAAbs/nAdJUXnGJYE/s1024/Seahorse.jpg", + "https://lh3.googleusercontent.com/-Iwi6-i6IexY/URqvAYZHsVI/AAAAAAAAAbs/5ETWl4qXsFE/s1024/Shinjuku%252520Street.jpg", + "https://lh6.googleusercontent.com/-amhnySTM_MY/URqvAlb5KoI/AAAAAAAAAbs/pFCFgzlKsn0/s1024/Sierra%252520Heavens.jpg", + "https://lh5.googleusercontent.com/-dJgjepFrYSo/URqvBVJZrAI/AAAAAAAAAbs/v-F5QWpYO6s/s1024/Sierra%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-Z4zGiC5nWdc/URqvBdEwivI/AAAAAAAAAbs/ZRZR1VJ84QA/s1024/Sin%252520Lights.jpg", + "https://lh4.googleusercontent.com/-_0cYiWW8ccY/URqvBz3iM4I/AAAAAAAAAbs/9N_Wq8MhLTY/s1024/Starry%252520Lake.jpg", + "https://lh3.googleusercontent.com/-A9LMoRyuQUA/URqvCYx_JoI/AAAAAAAAAbs/s7sde1Bz9cI/s1024/Starry%252520Night.jpg", + "https://lh3.googleusercontent.com/-KtLJ3k858eY/URqvC_2h_bI/AAAAAAAAAbs/zzEBImwDA_g/s1024/Stream.jpg", + "https://lh5.googleusercontent.com/-dFB7Lad6RcA/URqvDUftwWI/AAAAAAAAAbs/BrhoUtXTN7o/s1024/Strip%252520Sunset.jpg", + "https://lh5.googleusercontent.com/-at6apgFiN20/URqvDyffUZI/AAAAAAAAAbs/clABCx171bE/s1024/Sunset%252520Hills.jpg", + "https://lh4.googleusercontent.com/-7-EHhtQthII/URqvEYTk4vI/AAAAAAAAAbs/QSJZoB3YjVg/s1024/Tenaya%252520Lake%2525202.jpg", + "https://lh6.googleusercontent.com/-8MrjV_a-Pok/URqvFC5repI/AAAAAAAAAbs/9inKTg9fbCE/s1024/Tenaya%252520Lake.jpg", + "https://lh5.googleusercontent.com/-B1HW-z4zwao/URqvFWYRwUI/AAAAAAAAAbs/8Peli53Bs8I/s1024/The%252520Cave%252520BW.jpg", + "https://lh3.googleusercontent.com/-PO4E-xZKAnQ/URqvGRqjYkI/AAAAAAAAAbs/42nyADFsXag/s1024/The%252520Fisherman.jpg", + "https://lh4.googleusercontent.com/-iLyZlzfdy7s/URqvG0YScdI/AAAAAAAAAbs/1J9eDKmkXtk/s1024/The%252520Night%252520is%252520Coming.jpg", + "https://lh6.googleusercontent.com/-G-k7YkkUco0/URqvHhah6fI/AAAAAAAAAbs/_taQQG7t0vo/s1024/The%252520Road.jpg", + "https://lh6.googleusercontent.com/-h-ALJt7kSus/URqvIThqYfI/AAAAAAAAAbs/ejiv35olWS8/s1024/Tokyo%252520Heights.jpg", + "https://lh5.googleusercontent.com/-Hy9k-TbS7xg/URqvIjQMOxI/AAAAAAAAAbs/RSpmmOATSkg/s1024/Tokyo%252520Highway.jpg", + "https://lh6.googleusercontent.com/-83oOvMb4OZs/URqvJL0T7lI/AAAAAAAAAbs/c5TECZ6RONM/s1024/Tokyo%252520Smog.jpg", + "https://lh3.googleusercontent.com/-FB-jfgREEfI/URqvJI3EXAI/AAAAAAAAAbs/XfyweiRF4v8/s1024/Tufa%252520at%252520Night.jpg", + "https://lh4.googleusercontent.com/-vngKD5Z1U8w/URqvJUCEgPI/AAAAAAAAAbs/ulxCMVcU6EU/s1024/Valley%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-DOz5I2E2oMQ/URqvKMND1kI/AAAAAAAAAbs/Iqf0IsInleo/s1024/Windmill%252520Sunrise.jpg", + "https://lh5.googleusercontent.com/-biyiyWcJ9MU/URqvKculiAI/AAAAAAAAAbs/jyPsCplJOpE/s1024/Windmill.jpg", + "https://lh4.googleusercontent.com/-PDT167_xRdA/URqvK36mLcI/AAAAAAAAAbs/oi2ik9QseMI/s1024/Windmills.jpg", + "https://lh5.googleusercontent.com/-kI_QdYx7VlU/URqvLXCB6gI/AAAAAAAAAbs/N31vlZ6u89o/s1024/Yet%252520Another%252520Rockaway%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-e9NHZ5k5MSs/URqvMIBZjtI/AAAAAAAAAbs/1fV810rDNfQ/s1024/Yosemite%252520Tree.jpg", + }; + + /** + * This are PicasaWeb thumbnail URLs and could potentially change. Ideally the PicasaWeb API + * should be used to fetch the URLs. + * + * Credit to Romain Guy for the photos: + * http://www.curious-creature.org/ + * https://plus.google.com/109538161516040592207/about + * http://www.flickr.com/photos/romainguy + */ + public final static String[] imageThumbUrls = new String[] { + "https://lh6.googleusercontent.com/-55osAWw3x0Q/URquUtcFr5I/AAAAAAAAAbs/rWlj1RUKrYI/s240-c/A%252520Photographer.jpg", + "https://lh4.googleusercontent.com/--dq8niRp7W4/URquVgmXvgI/AAAAAAAAAbs/-gnuLQfNnBA/s240-c/A%252520Song%252520of%252520Ice%252520and%252520Fire.jpg", + "https://lh5.googleusercontent.com/-7qZeDtRKFKc/URquWZT1gOI/AAAAAAAAAbs/hqWgteyNXsg/s240-c/Another%252520Rockaway%252520Sunset.jpg", + "https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s240-c/Antelope%252520Butte.jpg", + "https://lh6.googleusercontent.com/-8HO-4vIFnlw/URquZnsFgtI/AAAAAAAAAbs/WT8jViTF7vw/s240-c/Antelope%252520Hallway.jpg", + "https://lh4.googleusercontent.com/-WIuWgVcU3Qw/URqubRVcj4I/AAAAAAAAAbs/YvbwgGjwdIQ/s240-c/Antelope%252520Walls.jpg", + "https://lh6.googleusercontent.com/-UBmLbPELvoQ/URqucCdv0kI/AAAAAAAAAbs/IdNhr2VQoQs/s240-c/Apre%2525CC%252580s%252520la%252520Pluie.jpg", + "https://lh3.googleusercontent.com/-s-AFpvgSeew/URquc6dF-JI/AAAAAAAAAbs/Mt3xNGRUd68/s240-c/Backlit%252520Cloud.jpg", + "https://lh5.googleusercontent.com/-bvmif9a9YOQ/URquea3heHI/AAAAAAAAAbs/rcr6wyeQtAo/s240-c/Bee%252520and%252520Flower.jpg", + "https://lh5.googleusercontent.com/-n7mdm7I7FGs/URqueT_BT-I/AAAAAAAAAbs/9MYmXlmpSAo/s240-c/Bonzai%252520Rock%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-4CN4X4t0M1k/URqufPozWzI/AAAAAAAAAbs/8wK41lg1KPs/s240-c/Caterpillar.jpg", + "https://lh3.googleusercontent.com/-rrFnVC8xQEg/URqufdrLBaI/AAAAAAAAAbs/s69WYy_fl1E/s240-c/Chess.jpg", + "https://lh5.googleusercontent.com/-WVpRptWH8Yw/URqugh-QmDI/AAAAAAAAAbs/E-MgBgtlUWU/s240-c/Chihuly.jpg", + "https://lh5.googleusercontent.com/-0BDXkYmckbo/URquhKFW84I/AAAAAAAAAbs/ogQtHCTk2JQ/s240-c/Closed%252520Door.jpg", + "https://lh3.googleusercontent.com/-PyggXXZRykM/URquh-kVvoI/AAAAAAAAAbs/hFtDwhtrHHQ/s240-c/Colorado%252520River%252520Sunset.jpg", + "https://lh3.googleusercontent.com/-ZAs4dNZtALc/URquikvOCWI/AAAAAAAAAbs/DXz4h3dll1Y/s240-c/Colors%252520of%252520Autumn.jpg", + "https://lh4.googleusercontent.com/-GztnWEIiMz8/URqukVCU7bI/AAAAAAAAAbs/jo2Hjv6MZ6M/s240-c/Countryside.jpg", + "https://lh4.googleusercontent.com/-bEg9EZ9QoiM/URquklz3FGI/AAAAAAAAAbs/UUuv8Ac2BaE/s240-c/Death%252520Valley%252520-%252520Dunes.jpg", + "https://lh6.googleusercontent.com/-ijQJ8W68tEE/URqulGkvFEI/AAAAAAAAAbs/zPXvIwi_rFw/s240-c/Delicate%252520Arch.jpg", + "https://lh5.googleusercontent.com/-Oh8mMy2ieng/URqullDwehI/AAAAAAAAAbs/TbdeEfsaIZY/s240-c/Despair.jpg", + "https://lh5.googleusercontent.com/-gl0y4UiAOlk/URqumC_KjBI/AAAAAAAAAbs/PM1eT7dn4oo/s240-c/Eagle%252520Fall%252520Sunrise.jpg", + "https://lh3.googleusercontent.com/-hYYHd2_vXPQ/URqumtJa9eI/AAAAAAAAAbs/wAalXVkbSh0/s240-c/Electric%252520Storm.jpg", + "https://lh5.googleusercontent.com/-PyY_yiyjPTo/URqunUOhHFI/AAAAAAAAAbs/azZoULNuJXc/s240-c/False%252520Kiva.jpg", + "https://lh6.googleusercontent.com/-PYvLVdvXywk/URqunwd8hfI/AAAAAAAAAbs/qiMwgkFvf6I/s240-c/Fitzgerald%252520Streaks.jpg", + "https://lh4.googleusercontent.com/-KIR_UobIIqY/URquoCZ9SlI/AAAAAAAAAbs/Y4d4q8sXu4c/s240-c/Foggy%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-9lzOk_OWZH0/URquoo4xYoI/AAAAAAAAAbs/AwgzHtNVCwU/s240-c/Frantic.jpg", + "https://lh3.googleusercontent.com/-0X3JNaKaz48/URqupH78wpI/AAAAAAAAAbs/lHXxu_zbH8s/s240-c/Golden%252520Gate%252520Afternoon.jpg", + "https://lh6.googleusercontent.com/-95sb5ag7ABc/URqupl95RDI/AAAAAAAAAbs/g73R20iVTRA/s240-c/Golden%252520Gate%252520Fog.jpg", + "https://lh3.googleusercontent.com/-JB9v6rtgHhk/URqup21F-zI/AAAAAAAAAbs/64Fb8qMZWXk/s240-c/Golden%252520Grass.jpg", + "https://lh4.googleusercontent.com/-EIBGfnuLtII/URquqVHwaRI/AAAAAAAAAbs/FA4McV2u8VE/s240-c/Grand%252520Teton.jpg", + "https://lh4.googleusercontent.com/-WoMxZvmN9nY/URquq1v2AoI/AAAAAAAAAbs/grj5uMhL6NA/s240-c/Grass%252520Closeup.jpg", + "https://lh3.googleusercontent.com/-6hZiEHXx64Q/URqurxvNdqI/AAAAAAAAAbs/kWMXM3o5OVI/s240-c/Green%252520Grass.jpg", + "https://lh5.googleusercontent.com/-6LVb9OXtQ60/URquteBFuKI/AAAAAAAAAbs/4F4kRgecwFs/s240-c/Hanging%252520Leaf.jpg", + "https://lh4.googleusercontent.com/-zAvf__52ONk/URqutT_IuxI/AAAAAAAAAbs/D_bcuc0thoU/s240-c/Highway%2525201.jpg", + "https://lh6.googleusercontent.com/-H4SrUg615rA/URquuL27fXI/AAAAAAAAAbs/4aEqJfiMsOU/s240-c/Horseshoe%252520Bend%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-JhFi4fb_Pqw/URquuX-QXbI/AAAAAAAAAbs/IXpYUxuweYM/s240-c/Horseshoe%252520Bend.jpg", + "https://lh5.googleusercontent.com/-UGgssvFRJ7g/URquueyJzGI/AAAAAAAAAbs/yYIBlLT0toM/s240-c/Into%252520the%252520Blue.jpg", + "https://lh3.googleusercontent.com/-CH7KoupI7uI/URquu0FF__I/AAAAAAAAAbs/R7GDmI7v_G0/s240-c/Jelly%252520Fish%2525202.jpg", + "https://lh4.googleusercontent.com/-pwuuw6yhg8U/URquvPxR3FI/AAAAAAAAAbs/VNGk6f-tsGE/s240-c/Jelly%252520Fish%2525203.jpg", + "https://lh5.googleusercontent.com/-GoUQVw1fnFw/URquv6xbC0I/AAAAAAAAAbs/zEUVTQQ43Zc/s240-c/Kauai.jpg", + "https://lh6.googleusercontent.com/-8QdYYQEpYjw/URquwvdh88I/AAAAAAAAAbs/cktDy-ysfHo/s240-c/Kyoto%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-vPeekyDjOE0/URquwzJ28qI/AAAAAAAAAbs/qxcyXULsZrg/s240-c/Lake%252520Tahoe%252520Colors.jpg", + "https://lh4.googleusercontent.com/-xBPxWpD4yxU/URquxWHk8AI/AAAAAAAAAbs/ARDPeDYPiMY/s240-c/Lava%252520from%252520the%252520Sky.jpg", + "https://lh3.googleusercontent.com/-897VXrJB6RE/URquxxxd-5I/AAAAAAAAAbs/j-Cz4T4YvIw/s240-c/Leica%25252050mm%252520Summilux.jpg", + "https://lh5.googleusercontent.com/-qSJ4D4iXzGo/URquyDWiJ1I/AAAAAAAAAbs/k2pBXeWehOA/s240-c/Leica%25252050mm%252520Summilux.jpg", + "https://lh6.googleusercontent.com/-dwlPg83vzLg/URquylTVuFI/AAAAAAAAAbs/G6SyQ8b4YsI/s240-c/Leica%252520M8%252520%252528Front%252529.jpg", + "https://lh3.googleusercontent.com/-R3_EYAyJvfk/URquzQBv8eI/AAAAAAAAAbs/b9xhpUM3pEI/s240-c/Light%252520to%252520Sand.jpg", + "https://lh3.googleusercontent.com/-fHY5h67QPi0/URqu0Cp4J1I/AAAAAAAAAbs/0lG6m94Z6vM/s240-c/Little%252520Bit%252520of%252520Paradise.jpg", + "https://lh5.googleusercontent.com/-TzF_LwrCnRM/URqu0RddPOI/AAAAAAAAAbs/gaj2dLiuX0s/s240-c/Lone%252520Pine%252520Sunset.jpg", + "https://lh3.googleusercontent.com/-4HdpJ4_DXU4/URqu046dJ9I/AAAAAAAAAbs/eBOodtk2_uk/s240-c/Lonely%252520Rock.jpg", + "https://lh6.googleusercontent.com/-erbF--z-W4s/URqu1ajSLkI/AAAAAAAAAbs/xjDCDO1INzM/s240-c/Longue%252520Vue.jpg", + "https://lh6.googleusercontent.com/-0CXJRdJaqvc/URqu1opNZNI/AAAAAAAAAbs/PFB2oPUU7Lk/s240-c/Look%252520Me%252520in%252520the%252520Eye.jpg", + "https://lh3.googleusercontent.com/-D_5lNxnDN6g/URqu2Tk7HVI/AAAAAAAAAbs/p0ddca9W__Y/s240-c/Lost%252520in%252520a%252520Field.jpg", + "https://lh6.googleusercontent.com/-flsqwMrIk2Q/URqu24PcmjI/AAAAAAAAAbs/5ocIH85XofM/s240-c/Marshall%252520Beach%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-Y4lgryEVTmU/URqu28kG3gI/AAAAAAAAAbs/OjXpekqtbJ4/s240-c/Mono%252520Lake%252520Blue.jpg", + "https://lh4.googleusercontent.com/-AaHAJPmcGYA/URqu3PIldHI/AAAAAAAAAbs/lcTqk1SIcRs/s240-c/Monument%252520Valley%252520Overlook.jpg", + "https://lh4.googleusercontent.com/-vKxfdQ83dQA/URqu31Yq_BI/AAAAAAAAAbs/OUoGk_2AyfM/s240-c/Moving%252520Rock.jpg", + "https://lh5.googleusercontent.com/-CG62QiPpWXg/URqu4ia4vRI/AAAAAAAAAbs/0YOdqLAlcAc/s240-c/Napali%252520Coast.jpg", + "https://lh6.googleusercontent.com/-wdGrP5PMmJQ/URqu5PZvn7I/AAAAAAAAAbs/m0abEcdPXe4/s240-c/One%252520Wheel.jpg", + "https://lh6.googleusercontent.com/-6WS5DoCGuOA/URqu5qx1UgI/AAAAAAAAAbs/giMw2ixPvrY/s240-c/Open%252520Sky.jpg", + "https://lh6.googleusercontent.com/-u8EHKj8G8GQ/URqu55sM6yI/AAAAAAAAAbs/lIXX_GlTdmI/s240-c/Orange%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-74Z5qj4bTDE/URqu6LSrJrI/AAAAAAAAAbs/XzmVkw90szQ/s240-c/Orchid.jpg", + "https://lh6.googleusercontent.com/-lEQE4h6TePE/URqu6t_lSkI/AAAAAAAAAbs/zvGYKOea_qY/s240-c/Over%252520there.jpg", + "https://lh5.googleusercontent.com/-cauH-53JH2M/URqu66v_USI/AAAAAAAAAbs/EucwwqclfKQ/s240-c/Plumes.jpg", + "https://lh3.googleusercontent.com/-eDLT2jHDoy4/URqu7axzkAI/AAAAAAAAAbs/iVZE-xJ7lZs/s240-c/Rainbokeh.jpg", + "https://lh5.googleusercontent.com/-j1NLqEFIyco/URqu8L1CGcI/AAAAAAAAAbs/aqZkgX66zlI/s240-c/Rainbow.jpg", + "https://lh5.googleusercontent.com/-DRnqmK0t4VU/URqu8XYN9yI/AAAAAAAAAbs/LgvF_592WLU/s240-c/Rice%252520Fields.jpg", + "https://lh3.googleusercontent.com/-hwh1v3EOGcQ/URqu8qOaKwI/AAAAAAAAAbs/IljRJRnbJGw/s240-c/Rockaway%252520Fire%252520Sky.jpg", + "https://lh5.googleusercontent.com/-wjV6FQk7tlk/URqu9jCQ8sI/AAAAAAAAAbs/RyYUpdo-c9o/s240-c/Rockaway%252520Flow.jpg", + "https://lh6.googleusercontent.com/-6cAXNfo7D20/URqu-BdzgPI/AAAAAAAAAbs/OmsYllzJqwo/s240-c/Rockaway%252520Sunset%252520Sky.jpg", + "https://lh3.googleusercontent.com/-sl8fpGPS-RE/URqu_BOkfgI/AAAAAAAAAbs/Dg2Fv-JxOeg/s240-c/Russian%252520Ridge%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-gVtY36mMBIg/URqu_q91lkI/AAAAAAAAAbs/3CiFMBcy5MA/s240-c/Rust%252520Knot.jpg", + "https://lh6.googleusercontent.com/-GHeImuHqJBE/URqu_FKfVLI/AAAAAAAAAbs/axuEJeqam7Q/s240-c/Sailing%252520Stones.jpg", + "https://lh3.googleusercontent.com/-hBbYZjTOwGc/URqu_ycpIrI/AAAAAAAAAbs/nAdJUXnGJYE/s240-c/Seahorse.jpg", + "https://lh3.googleusercontent.com/-Iwi6-i6IexY/URqvAYZHsVI/AAAAAAAAAbs/5ETWl4qXsFE/s240-c/Shinjuku%252520Street.jpg", + "https://lh6.googleusercontent.com/-amhnySTM_MY/URqvAlb5KoI/AAAAAAAAAbs/pFCFgzlKsn0/s240-c/Sierra%252520Heavens.jpg", + "https://lh5.googleusercontent.com/-dJgjepFrYSo/URqvBVJZrAI/AAAAAAAAAbs/v-F5QWpYO6s/s240-c/Sierra%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-Z4zGiC5nWdc/URqvBdEwivI/AAAAAAAAAbs/ZRZR1VJ84QA/s240-c/Sin%252520Lights.jpg", + "https://lh4.googleusercontent.com/-_0cYiWW8ccY/URqvBz3iM4I/AAAAAAAAAbs/9N_Wq8MhLTY/s240-c/Starry%252520Lake.jpg", + "https://lh3.googleusercontent.com/-A9LMoRyuQUA/URqvCYx_JoI/AAAAAAAAAbs/s7sde1Bz9cI/s240-c/Starry%252520Night.jpg", + "https://lh3.googleusercontent.com/-KtLJ3k858eY/URqvC_2h_bI/AAAAAAAAAbs/zzEBImwDA_g/s240-c/Stream.jpg", + "https://lh5.googleusercontent.com/-dFB7Lad6RcA/URqvDUftwWI/AAAAAAAAAbs/BrhoUtXTN7o/s240-c/Strip%252520Sunset.jpg", + "https://lh5.googleusercontent.com/-at6apgFiN20/URqvDyffUZI/AAAAAAAAAbs/clABCx171bE/s240-c/Sunset%252520Hills.jpg", + "https://lh4.googleusercontent.com/-7-EHhtQthII/URqvEYTk4vI/AAAAAAAAAbs/QSJZoB3YjVg/s240-c/Tenaya%252520Lake%2525202.jpg", + "https://lh6.googleusercontent.com/-8MrjV_a-Pok/URqvFC5repI/AAAAAAAAAbs/9inKTg9fbCE/s240-c/Tenaya%252520Lake.jpg", + "https://lh5.googleusercontent.com/-B1HW-z4zwao/URqvFWYRwUI/AAAAAAAAAbs/8Peli53Bs8I/s240-c/The%252520Cave%252520BW.jpg", + "https://lh3.googleusercontent.com/-PO4E-xZKAnQ/URqvGRqjYkI/AAAAAAAAAbs/42nyADFsXag/s240-c/The%252520Fisherman.jpg", + "https://lh4.googleusercontent.com/-iLyZlzfdy7s/URqvG0YScdI/AAAAAAAAAbs/1J9eDKmkXtk/s240-c/The%252520Night%252520is%252520Coming.jpg", + "https://lh6.googleusercontent.com/-G-k7YkkUco0/URqvHhah6fI/AAAAAAAAAbs/_taQQG7t0vo/s240-c/The%252520Road.jpg", + "https://lh6.googleusercontent.com/-h-ALJt7kSus/URqvIThqYfI/AAAAAAAAAbs/ejiv35olWS8/s240-c/Tokyo%252520Heights.jpg", + "https://lh5.googleusercontent.com/-Hy9k-TbS7xg/URqvIjQMOxI/AAAAAAAAAbs/RSpmmOATSkg/s240-c/Tokyo%252520Highway.jpg", + "https://lh6.googleusercontent.com/-83oOvMb4OZs/URqvJL0T7lI/AAAAAAAAAbs/c5TECZ6RONM/s240-c/Tokyo%252520Smog.jpg", + "https://lh3.googleusercontent.com/-FB-jfgREEfI/URqvJI3EXAI/AAAAAAAAAbs/XfyweiRF4v8/s240-c/Tufa%252520at%252520Night.jpg", + "https://lh4.googleusercontent.com/-vngKD5Z1U8w/URqvJUCEgPI/AAAAAAAAAbs/ulxCMVcU6EU/s240-c/Valley%252520Sunset.jpg", + "https://lh6.googleusercontent.com/-DOz5I2E2oMQ/URqvKMND1kI/AAAAAAAAAbs/Iqf0IsInleo/s240-c/Windmill%252520Sunrise.jpg", + "https://lh5.googleusercontent.com/-biyiyWcJ9MU/URqvKculiAI/AAAAAAAAAbs/jyPsCplJOpE/s240-c/Windmill.jpg", + "https://lh4.googleusercontent.com/-PDT167_xRdA/URqvK36mLcI/AAAAAAAAAbs/oi2ik9QseMI/s240-c/Windmills.jpg", + "https://lh5.googleusercontent.com/-kI_QdYx7VlU/URqvLXCB6gI/AAAAAAAAAbs/N31vlZ6u89o/s240-c/Yet%252520Another%252520Rockaway%252520Sunset.jpg", + "https://lh4.googleusercontent.com/-e9NHZ5k5MSs/URqvMIBZjtI/AAAAAAAAAbs/1fV810rDNfQ/s240-c/Yosemite%252520Tree.jpg", + }; +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailActivity.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailActivity.java new file mode 100644 index 000000000..c2be1acfc --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailActivity.java @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.ui; + +import android.annotation.TargetApi; +import android.app.ActionBar; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; +import android.support.v4.app.NavUtils; +import android.support.v4.view.ViewPager; +import android.util.DisplayMetrics; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager.LayoutParams; +import android.widget.Toast; + +import com.example.android.displayingbitmaps.BuildConfig; +import com.example.android.displayingbitmaps.R; +import com.example.android.displayingbitmaps.provider.Images; +import com.example.android.displayingbitmaps.util.ImageCache; +import com.example.android.displayingbitmaps.util.ImageFetcher; +import com.example.android.displayingbitmaps.util.Utils; + +public class ImageDetailActivity extends FragmentActivity implements OnClickListener { + private static final String IMAGE_CACHE_DIR = "images"; + public static final String EXTRA_IMAGE = "extra_image"; + + private ImagePagerAdapter mAdapter; + private ImageFetcher mImageFetcher; + private ViewPager mPager; + + @TargetApi(VERSION_CODES.HONEYCOMB) + @Override + public void onCreate(Bundle savedInstanceState) { + if (BuildConfig.DEBUG) { + Utils.enableStrictMode(); + } + super.onCreate(savedInstanceState); + setContentView(R.layout.image_detail_pager); + + // Fetch screen height and width, to use as our max size when loading images as this + // activity runs full screen + final DisplayMetrics displayMetrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + final int height = displayMetrics.heightPixels; + final int width = displayMetrics.widthPixels; + + // For this sample we'll use half of the longest width to resize our images. As the + // image scaling ensures the image is larger than this, we should be left with a + // resolution that is appropriate for both portrait and landscape. For best image quality + // we shouldn't divide by 2, but this will use more memory and require a larger memory + // cache. + final int longest = (height > width ? height : width) / 2; + + ImageCache.ImageCacheParams cacheParams = + new ImageCache.ImageCacheParams(this, IMAGE_CACHE_DIR); + cacheParams.setMemCacheSizePercent(0.25f); // Set memory cache to 25% of app memory + + // The ImageFetcher takes care of loading images into our ImageView children asynchronously + mImageFetcher = new ImageFetcher(this, longest); + mImageFetcher.addImageCache(getSupportFragmentManager(), cacheParams); + mImageFetcher.setImageFadeIn(false); + + // Set up ViewPager and backing adapter + mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), Images.imageUrls.length); + mPager = (ViewPager) findViewById(R.id.pager); + mPager.setAdapter(mAdapter); + mPager.setPageMargin((int) getResources().getDimension(R.dimen.horizontal_page_margin)); + mPager.setOffscreenPageLimit(2); + + // Set up activity to go full screen + getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN); + + // Enable some additional newer visibility and ActionBar features to create a more + // immersive photo viewing experience + if (Utils.hasHoneycomb()) { + final ActionBar actionBar = getActionBar(); + + // Hide title text and set home as up + actionBar.setDisplayShowTitleEnabled(false); + actionBar.setDisplayHomeAsUpEnabled(true); + + // Hide and show the ActionBar as the visibility changes + mPager.setOnSystemUiVisibilityChangeListener( + new View.OnSystemUiVisibilityChangeListener() { + @Override + public void onSystemUiVisibilityChange(int vis) { + if ((vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { + actionBar.hide(); + } else { + actionBar.show(); + } + } + }); + + // Start low profile mode and hide ActionBar + mPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); + actionBar.hide(); + } + + // Set the current item based on the extra passed in to this activity + final int extraCurrentItem = getIntent().getIntExtra(EXTRA_IMAGE, -1); + if (extraCurrentItem != -1) { + mPager.setCurrentItem(extraCurrentItem); + } + } + + @Override + public void onResume() { + super.onResume(); + mImageFetcher.setExitTasksEarly(false); + } + + @Override + protected void onPause() { + super.onPause(); + mImageFetcher.setExitTasksEarly(true); + mImageFetcher.flushCache(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mImageFetcher.closeCache(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + NavUtils.navigateUpFromSameTask(this); + return true; + case R.id.clear_cache: + mImageFetcher.clearCache(); + Toast.makeText( + this, R.string.clear_cache_complete_toast,Toast.LENGTH_SHORT).show(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main_menu, menu); + return true; + } + + /** + * Called by the ViewPager child fragments to load images via the one ImageFetcher + */ + public ImageFetcher getImageFetcher() { + return mImageFetcher; + } + + /** + * The main adapter that backs the ViewPager. A subclass of FragmentStatePagerAdapter as there + * could be a large number of items in the ViewPager and we don't want to retain them all in + * memory at once but create/destroy them on the fly. + */ + private class ImagePagerAdapter extends FragmentStatePagerAdapter { + private final int mSize; + + public ImagePagerAdapter(FragmentManager fm, int size) { + super(fm); + mSize = size; + } + + @Override + public int getCount() { + return mSize; + } + + @Override + public Fragment getItem(int position) { + return ImageDetailFragment.newInstance(Images.imageUrls[position]); + } + } + + /** + * Set on the ImageView in the ViewPager children fragments, to enable/disable low profile mode + * when the ImageView is touched. + */ + @TargetApi(VERSION_CODES.HONEYCOMB) + @Override + public void onClick(View v) { + final int vis = mPager.getSystemUiVisibility(); + if ((vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { + mPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } else { + mPager.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailFragment.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailFragment.java new file mode 100644 index 000000000..506729a7e --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageDetailFragment.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.ui; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.example.android.displayingbitmaps.R; +import com.example.android.displayingbitmaps.util.ImageFetcher; +import com.example.android.displayingbitmaps.util.ImageWorker; +import com.example.android.displayingbitmaps.util.Utils; + +/** + * This fragment will populate the children of the ViewPager from {@link ImageDetailActivity}. + */ +public class ImageDetailFragment extends Fragment { + private static final String IMAGE_DATA_EXTRA = "extra_image_data"; + private String mImageUrl; + private ImageView mImageView; + private ImageFetcher mImageFetcher; + + /** + * Factory method to generate a new instance of the fragment given an image number. + * + * @param imageUrl The image url to load + * @return A new instance of ImageDetailFragment with imageNum extras + */ + public static ImageDetailFragment newInstance(String imageUrl) { + final ImageDetailFragment f = new ImageDetailFragment(); + + final Bundle args = new Bundle(); + args.putString(IMAGE_DATA_EXTRA, imageUrl); + f.setArguments(args); + + return f; + } + + /** + * Empty constructor as per the Fragment documentation + */ + public ImageDetailFragment() {} + + /** + * Populate image using a url from extras, use the convenience factory method + * {@link ImageDetailFragment#newInstance(String)} to create this fragment. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mImageUrl = getArguments() != null ? getArguments().getString(IMAGE_DATA_EXTRA) : null; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate and locate the main ImageView + final View v = inflater.inflate(R.layout.image_detail_fragment, container, false); + mImageView = (ImageView) v.findViewById(R.id.imageView); + return v; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + // Use the parent activity to load the image asynchronously into the ImageView (so a single + // cache can be used over all pages in the ViewPager + if (ImageDetailActivity.class.isInstance(getActivity())) { + mImageFetcher = ((ImageDetailActivity) getActivity()).getImageFetcher(); + mImageFetcher.loadImage(mImageUrl, mImageView); + } + + // Pass clicks on the ImageView to the parent activity to handle + if (OnClickListener.class.isInstance(getActivity()) && Utils.hasHoneycomb()) { + mImageView.setOnClickListener((OnClickListener) getActivity()); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (mImageView != null) { + // Cancel any pending image work + ImageWorker.cancelWork(mImageView); + mImageView.setImageDrawable(null); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridActivity.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridActivity.java new file mode 100644 index 000000000..f171955ae --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridActivity.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.ui; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentTransaction; + +import com.example.android.displayingbitmaps.BuildConfig; +import com.example.android.displayingbitmaps.util.Utils; + +/** + * Simple FragmentActivity to hold the main {@link ImageGridFragment} and not much else. + */ +public class ImageGridActivity extends FragmentActivity { + private static final String TAG = "ImageGridActivity"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + if (BuildConfig.DEBUG) { + Utils.enableStrictMode(); + } + super.onCreate(savedInstanceState); + + if (getSupportFragmentManager().findFragmentByTag(TAG) == null) { + final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.add(android.R.id.content, new ImageGridFragment(), TAG); + ft.commit(); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridFragment.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridFragment.java new file mode 100644 index 000000000..4eb1f1b35 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/ImageGridFragment.java @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.ui; + +import android.annotation.TargetApi; +import android.app.ActivityOptions; +import android.content.Context; +import android.content.Intent; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewTreeObserver; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.Toast; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; +import com.example.android.displayingbitmaps.R; +import com.example.android.displayingbitmaps.provider.Images; +import com.example.android.displayingbitmaps.util.ImageCache; +import com.example.android.displayingbitmaps.util.ImageFetcher; +import com.example.android.displayingbitmaps.util.Utils; + +/** + * The main fragment that powers the ImageGridActivity screen. Fairly straight forward GridView + * implementation with the key addition being the ImageWorker class w/ImageCache to load children + * asynchronously, keeping the UI nice and smooth and caching thumbnails for quick retrieval. The + * cache is retained over configuration changes like orientation change so the images are populated + * quickly if, for example, the user rotates the device. + */ +public class ImageGridFragment extends Fragment implements AdapterView.OnItemClickListener { + private static final String TAG = "ImageGridFragment"; + private static final String IMAGE_CACHE_DIR = "thumbs"; + + private int mImageThumbSize; + private int mImageThumbSpacing; + private ImageAdapter mAdapter; + private ImageFetcher mImageFetcher; + + /** + * Empty constructor as per the Fragment documentation + */ + public ImageGridFragment() {} + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + + mImageThumbSize = getResources().getDimensionPixelSize(R.dimen.image_thumbnail_size); + mImageThumbSpacing = getResources().getDimensionPixelSize(R.dimen.image_thumbnail_spacing); + + mAdapter = new ImageAdapter(getActivity()); + + ImageCache.ImageCacheParams cacheParams = + new ImageCache.ImageCacheParams(getActivity(), IMAGE_CACHE_DIR); + + cacheParams.setMemCacheSizePercent(0.25f); // Set memory cache to 25% of app memory + + // The ImageFetcher takes care of loading images into our ImageView children asynchronously + mImageFetcher = new ImageFetcher(getActivity(), mImageThumbSize); + mImageFetcher.setLoadingImage(R.drawable.empty_photo); + mImageFetcher.addImageCache(getActivity().getSupportFragmentManager(), cacheParams); + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + final View v = inflater.inflate(R.layout.image_grid_fragment, container, false); + final GridView mGridView = (GridView) v.findViewById(R.id.gridView); + mGridView.setAdapter(mAdapter); + mGridView.setOnItemClickListener(this); + mGridView.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int scrollState) { + // Pause fetcher to ensure smoother scrolling when flinging + if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { + // Before Honeycomb pause image loading on scroll to help with performance + if (!Utils.hasHoneycomb()) { + mImageFetcher.setPauseWork(true); + } + } else { + mImageFetcher.setPauseWork(false); + } + } + + @Override + public void onScroll(AbsListView absListView, int firstVisibleItem, + int visibleItemCount, int totalItemCount) { + } + }); + + // This listener is used to get the final width of the GridView and then calculate the + // number of columns and the width of each column. The width of each column is variable + // as the GridView has stretchMode=columnWidth. The column width is used to set the height + // of each view so we get nice square thumbnails. + mGridView.getViewTreeObserver().addOnGlobalLayoutListener( + new ViewTreeObserver.OnGlobalLayoutListener() { + @TargetApi(VERSION_CODES.JELLY_BEAN) + @Override + public void onGlobalLayout() { + if (mAdapter.getNumColumns() == 0) { + final int numColumns = (int) Math.floor( + mGridView.getWidth() / (mImageThumbSize + mImageThumbSpacing)); + if (numColumns > 0) { + final int columnWidth = + (mGridView.getWidth() / numColumns) - mImageThumbSpacing; + mAdapter.setNumColumns(numColumns); + mAdapter.setItemHeight(columnWidth); + if (BuildConfig.DEBUG) { + Log.d(TAG, "onCreateView - numColumns set to " + numColumns); + } + if (Utils.hasJellyBean()) { + mGridView.getViewTreeObserver() + .removeOnGlobalLayoutListener(this); + } else { + mGridView.getViewTreeObserver() + .removeGlobalOnLayoutListener(this); + } + } + } + } + }); + + return v; + } + + @Override + public void onResume() { + super.onResume(); + mImageFetcher.setExitTasksEarly(false); + mAdapter.notifyDataSetChanged(); + } + + @Override + public void onPause() { + super.onPause(); + mImageFetcher.setPauseWork(false); + mImageFetcher.setExitTasksEarly(true); + mImageFetcher.flushCache(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mImageFetcher.closeCache(); + } + + @TargetApi(VERSION_CODES.JELLY_BEAN) + @Override + public void onItemClick(AdapterView parent, View v, int position, long id) { + final Intent i = new Intent(getActivity(), ImageDetailActivity.class); + i.putExtra(ImageDetailActivity.EXTRA_IMAGE, (int) id); + if (Utils.hasJellyBean()) { + // makeThumbnailScaleUpAnimation() looks kind of ugly here as the loading spinner may + // show plus the thumbnail image in GridView is cropped. so using + // makeScaleUpAnimation() instead. + ActivityOptions options = + ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.getWidth(), v.getHeight()); + getActivity().startActivity(i, options.toBundle()); + } else { + startActivity(i); + } + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.main_menu, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.clear_cache: + mImageFetcher.clearCache(); + Toast.makeText(getActivity(), R.string.clear_cache_complete_toast, + Toast.LENGTH_SHORT).show(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** + * The main adapter that backs the GridView. This is fairly standard except the number of + * columns in the GridView is used to create a fake top row of empty views as we use a + * transparent ActionBar and don't want the real top row of images to start off covered by it. + */ + private class ImageAdapter extends BaseAdapter { + + private final Context mContext; + private int mItemHeight = 0; + private int mNumColumns = 0; + private int mActionBarHeight = 0; + private GridView.LayoutParams mImageViewLayoutParams; + + public ImageAdapter(Context context) { + super(); + mContext = context; + mImageViewLayoutParams = new GridView.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + // Calculate ActionBar height + TypedValue tv = new TypedValue(); + if (context.getTheme().resolveAttribute( + android.R.attr.actionBarSize, tv, true)) { + mActionBarHeight = TypedValue.complexToDimensionPixelSize( + tv.data, context.getResources().getDisplayMetrics()); + } + } + + @Override + public int getCount() { + // If columns have yet to be determined, return no items + if (getNumColumns() == 0) { + return 0; + } + + // Size + number of columns for top empty row + return Images.imageThumbUrls.length + mNumColumns; + } + + @Override + public Object getItem(int position) { + return position < mNumColumns ? + null : Images.imageThumbUrls[position - mNumColumns]; + } + + @Override + public long getItemId(int position) { + return position < mNumColumns ? 0 : position - mNumColumns; + } + + @Override + public int getViewTypeCount() { + // Two types of views, the normal ImageView and the top row of empty views + return 2; + } + + @Override + public int getItemViewType(int position) { + return (position < mNumColumns) ? 1 : 0; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getView(int position, View convertView, ViewGroup container) { + //BEGIN_INCLUDE(load_gridview_item) + // First check if this is the top row + if (position < mNumColumns) { + if (convertView == null) { + convertView = new View(mContext); + } + // Set empty view with height of ActionBar + convertView.setLayoutParams(new AbsListView.LayoutParams( + LayoutParams.MATCH_PARENT, mActionBarHeight)); + return convertView; + } + + // Now handle the main ImageView thumbnails + ImageView imageView; + if (convertView == null) { // if it's not recycled, instantiate and initialize + imageView = new RecyclingImageView(mContext); + imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); + imageView.setLayoutParams(mImageViewLayoutParams); + } else { // Otherwise re-use the converted view + imageView = (ImageView) convertView; + } + + // Check the height matches our calculated column width + if (imageView.getLayoutParams().height != mItemHeight) { + imageView.setLayoutParams(mImageViewLayoutParams); + } + + // Finally load the image asynchronously into the ImageView, this also takes care of + // setting a placeholder image while the background thread runs + mImageFetcher.loadImage(Images.imageThumbUrls[position - mNumColumns], imageView); + return imageView; + //END_INCLUDE(load_gridview_item) + } + + /** + * Sets the item height. Useful for when we know the column width so the height can be set + * to match. + * + * @param height + */ + public void setItemHeight(int height) { + if (height == mItemHeight) { + return; + } + mItemHeight = height; + mImageViewLayoutParams = + new GridView.LayoutParams(LayoutParams.MATCH_PARENT, mItemHeight); + mImageFetcher.setImageSize(height); + notifyDataSetChanged(); + } + + public void setNumColumns(int numColumns) { + mNumColumns = numColumns; + } + + public int getNumColumns() { + return mNumColumns; + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/RecyclingImageView.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/RecyclingImageView.java new file mode 100644 index 000000000..1db134c31 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/ui/RecyclingImageView.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.ui; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.util.AttributeSet; +import android.widget.ImageView; + +import com.example.android.displayingbitmaps.util.RecyclingBitmapDrawable; + +/** + * Sub-class of ImageView which automatically notifies the drawable when it is + * being displayed. + */ +public class RecyclingImageView extends ImageView { + + public RecyclingImageView(Context context) { + super(context); + } + + public RecyclingImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * @see android.widget.ImageView#onDetachedFromWindow() + */ + @Override + protected void onDetachedFromWindow() { + // This has been detached from Window, so clear the drawable + setImageDrawable(null); + + super.onDetachedFromWindow(); + } + + /** + * @see android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable) + */ + @Override + public void setImageDrawable(Drawable drawable) { + // Keep hold of previous Drawable + final Drawable previousDrawable = getDrawable(); + + // Call super to set new Drawable + super.setImageDrawable(drawable); + + // Notify new Drawable that it is being displayed + notifyDrawable(drawable, true); + + // Notify old Drawable so it is no longer being displayed + notifyDrawable(previousDrawable, false); + } + + /** + * Notifies the drawable that it's displayed state has changed. + * + * @param drawable + * @param isDisplayed + */ + private static void notifyDrawable(Drawable drawable, final boolean isDisplayed) { + if (drawable instanceof RecyclingBitmapDrawable) { + // The drawable is a CountingBitmapDrawable, so notify it + ((RecyclingBitmapDrawable) drawable).setIsDisplayed(isDisplayed); + } else if (drawable instanceof LayerDrawable) { + // The drawable is a LayerDrawable, so recurse on each layer + LayerDrawable layerDrawable = (LayerDrawable) drawable; + for (int i = 0, z = layerDrawable.getNumberOfLayers(); i < z; i++) { + notifyDrawable(layerDrawable.getDrawable(i), isDisplayed); + } + } + } + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/AsyncTask.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/AsyncTask.java new file mode 100644 index 000000000..dffade48e --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/AsyncTask.java @@ -0,0 +1,693 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of 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.example.android.displayingbitmaps.util; + +import android.annotation.TargetApi; +import android.os.Handler; +import android.os.Message; +import android.os.Process; + +import java.util.ArrayDeque; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * ************************************* + * Copied from JB release framework: + * https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/java/android/os/AsyncTask.java + * + * so that threading behavior on all OS versions is the same and we can tweak behavior by using + * executeOnExecutor() if needed. + * + * There are 3 changes in this copy of AsyncTask: + * -pre-HC a single thread executor is used for serial operation + * (Executors.newSingleThreadExecutor) and is the default + * -the default THREAD_POOL_EXECUTOR was changed to use DiscardOldestPolicy + * -a new fixed thread pool called DUAL_THREAD_EXECUTOR was added + * ************************************* + * + *

AsyncTask enables proper and easy use of the UI thread. This class allows to + * perform background operations and publish results on the UI thread without + * having to manipulate threads and/or handlers.

+ * + *

AsyncTask is designed to be a helper class around {@link Thread} and {@link android.os.Handler} + * and does not constitute a generic threading framework. AsyncTasks should ideally be + * used for short operations (a few seconds at the most.) If you need to keep threads + * running for long periods of time, it is highly recommended you use the various APIs + * provided by the java.util.concurrent pacakge such as {@link java.util.concurrent.Executor}, + * {@link java.util.concurrent.ThreadPoolExecutor} and {@link java.util.concurrent.FutureTask}.

+ * + *

An asynchronous task is defined by a computation that runs on a background thread and + * whose result is published on the UI thread. An asynchronous task is defined by 3 generic + * types, called Params, Progress and Result, + * and 4 steps, called onPreExecute, doInBackground, + * onProgressUpdate and onPostExecute.

+ * + *
+ * + *

Usage

+ *

AsyncTask must be subclassed to be used. The subclass will override at least + * one method ({@link #doInBackground}), and most often will override a + * second one ({@link #onPostExecute}.)

+ * + *

Here is an example of subclassing:

+ *
+ * private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
+ *     protected Long doInBackground(URL... urls) {
+ *         int count = urls.length;
+ *         long totalSize = 0;
+ *         for (int i = 0; i < count; i++) {
+ *             totalSize += Downloader.downloadFile(urls[i]);
+ *             publishProgress((int) ((i / (float) count) * 100));
+ *             // Escape early if cancel() is called
+ *             if (isCancelled()) break;
+ *         }
+ *         return totalSize;
+ *     }
+ *
+ *     protected void onProgressUpdate(Integer... progress) {
+ *         setProgressPercent(progress[0]);
+ *     }
+ *
+ *     protected void onPostExecute(Long result) {
+ *         showDialog("Downloaded " + result + " bytes");
+ *     }
+ * }
+ * 
+ * + *

Once created, a task is executed very simply:

+ *
+ * new DownloadFilesTask().execute(url1, url2, url3);
+ * 
+ * + *

AsyncTask's generic types

+ *

The three types used by an asynchronous task are the following:

+ *
    + *
  1. Params, the type of the parameters sent to the task upon + * execution.
  2. + *
  3. Progress, the type of the progress units published during + * the background computation.
  4. + *
  5. Result, the type of the result of the background + * computation.
  6. + *
+ *

Not all types are always used by an asynchronous task. To mark a type as unused, + * simply use the type {@link Void}:

+ *
+ * private class MyTask extends AsyncTask<Void, Void, Void> { ... }
+ * 
+ * + *

The 4 steps

+ *

When an asynchronous task is executed, the task goes through 4 steps:

+ *
    + *
  1. {@link #onPreExecute()}, invoked on the UI thread immediately after the task + * is executed. This step is normally used to setup the task, for instance by + * showing a progress bar in the user interface.
  2. + *
  3. {@link #doInBackground}, invoked on the background thread + * immediately after {@link #onPreExecute()} finishes executing. This step is used + * to perform background computation that can take a long time. The parameters + * of the asynchronous task are passed to this step. The result of the computation must + * be returned by this step and will be passed back to the last step. This step + * can also use {@link #publishProgress} to publish one or more units + * of progress. These values are published on the UI thread, in the + * {@link #onProgressUpdate} step.
  4. + *
  5. {@link #onProgressUpdate}, invoked on the UI thread after a + * call to {@link #publishProgress}. The timing of the execution is + * undefined. This method is used to display any form of progress in the user + * interface while the background computation is still executing. For instance, + * it can be used to animate a progress bar or show logs in a text field.
  6. + *
  7. {@link #onPostExecute}, invoked on the UI thread after the background + * computation finishes. The result of the background computation is passed to + * this step as a parameter.
  8. + *
+ * + *

Cancelling a task

+ *

A task can be cancelled at any time by invoking {@link #cancel(boolean)}. Invoking + * this method will cause subsequent calls to {@link #isCancelled()} to return true. + * After invoking this method, {@link #onCancelled(Object)}, instead of + * {@link #onPostExecute(Object)} will be invoked after {@link #doInBackground(Object[])} + * returns. To ensure that a task is cancelled as quickly as possible, you should always + * check the return value of {@link #isCancelled()} periodically from + * {@link #doInBackground(Object[])}, if possible (inside a loop for instance.)

+ * + *

Threading rules

+ *

There are a few threading rules that must be followed for this class to + * work properly:

+ *
    + *
  • The AsyncTask class must be loaded on the UI thread. This is done + * automatically as of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}.
  • + *
  • The task instance must be created on the UI thread.
  • + *
  • {@link #execute} must be invoked on the UI thread.
  • + *
  • Do not call {@link #onPreExecute()}, {@link #onPostExecute}, + * {@link #doInBackground}, {@link #onProgressUpdate} manually.
  • + *
  • The task can be executed only once (an exception will be thrown if + * a second execution is attempted.)
  • + *
+ * + *

Memory observability

+ *

AsyncTask guarantees that all callback calls are synchronized in such a way that the following + * operations are safe without explicit synchronizations.

+ *
    + *
  • Set member fields in the constructor or {@link #onPreExecute}, and refer to them + * in {@link #doInBackground}. + *
  • Set member fields in {@link #doInBackground}, and refer to them in + * {@link #onProgressUpdate} and {@link #onPostExecute}. + *
+ * + *

Order of execution

+ *

When first introduced, AsyncTasks were executed serially on a single background + * thread. Starting with {@link android.os.Build.VERSION_CODES#DONUT}, this was changed + * to a pool of threads allowing multiple tasks to operate in parallel. Starting with + * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, tasks are executed on a single + * thread to avoid common application errors caused by parallel execution.

+ *

If you truly want parallel execution, you can invoke + * {@link #executeOnExecutor(java.util.concurrent.Executor, Object[])} with + * {@link #THREAD_POOL_EXECUTOR}.

+ */ +public abstract class AsyncTask { + private static final String LOG_TAG = "AsyncTask"; + + private static final int CORE_POOL_SIZE = 5; + private static final int MAXIMUM_POOL_SIZE = 128; + private static final int KEEP_ALIVE = 1; + + private static final ThreadFactory sThreadFactory = new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); + + public Thread newThread(Runnable r) { + return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); + } + }; + + private static final BlockingQueue sPoolWorkQueue = + new LinkedBlockingQueue(10); + + /** + * An {@link java.util.concurrent.Executor} that can be used to execute tasks in parallel. + */ + public static final Executor THREAD_POOL_EXECUTOR + = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, + TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory, + new ThreadPoolExecutor.DiscardOldestPolicy()); + + /** + * An {@link java.util.concurrent.Executor} that executes tasks one at a time in serial + * order. This serialization is global to a particular process. + */ + public static final Executor SERIAL_EXECUTOR = Utils.hasHoneycomb() ? new SerialExecutor() : + Executors.newSingleThreadExecutor(sThreadFactory); + + public static final Executor DUAL_THREAD_EXECUTOR = + Executors.newFixedThreadPool(2, sThreadFactory); + + private static final int MESSAGE_POST_RESULT = 0x1; + private static final int MESSAGE_POST_PROGRESS = 0x2; + + private static final InternalHandler sHandler = new InternalHandler(); + + private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; + private final WorkerRunnable mWorker; + private final FutureTask mFuture; + + private volatile Status mStatus = Status.PENDING; + + private final AtomicBoolean mCancelled = new AtomicBoolean(); + private final AtomicBoolean mTaskInvoked = new AtomicBoolean(); + + @TargetApi(11) + private static class SerialExecutor implements Executor { + final ArrayDeque mTasks = new ArrayDeque(); + Runnable mActive; + + public synchronized void execute(final Runnable r) { + mTasks.offer(new Runnable() { + public void run() { + try { + r.run(); + } finally { + scheduleNext(); + } + } + }); + if (mActive == null) { + scheduleNext(); + } + } + + protected synchronized void scheduleNext() { + if ((mActive = mTasks.poll()) != null) { + THREAD_POOL_EXECUTOR.execute(mActive); + } + } + } + + /** + * Indicates the current status of the task. Each status will be set only once + * during the lifetime of a task. + */ + public enum Status { + /** + * Indicates that the task has not been executed yet. + */ + PENDING, + /** + * Indicates that the task is running. + */ + RUNNING, + /** + * Indicates that {@link AsyncTask#onPostExecute} has finished. + */ + FINISHED, + } + + /** @hide Used to force static handler to be created. */ + public static void init() { + sHandler.getLooper(); + } + + /** @hide */ + public static void setDefaultExecutor(Executor exec) { + sDefaultExecutor = exec; + } + + /** + * Creates a new asynchronous task. This constructor must be invoked on the UI thread. + */ + public AsyncTask() { + mWorker = new WorkerRunnable() { + public Result call() throws Exception { + mTaskInvoked.set(true); + + Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); + //noinspection unchecked + return postResult(doInBackground(mParams)); + } + }; + + mFuture = new FutureTask(mWorker) { + @Override + protected void done() { + try { + postResultIfNotInvoked(get()); + } catch (InterruptedException e) { + android.util.Log.w(LOG_TAG, e); + } catch (ExecutionException e) { + throw new RuntimeException("An error occured while executing doInBackground()", + e.getCause()); + } catch (CancellationException e) { + postResultIfNotInvoked(null); + } + } + }; + } + + private void postResultIfNotInvoked(Result result) { + final boolean wasTaskInvoked = mTaskInvoked.get(); + if (!wasTaskInvoked) { + postResult(result); + } + } + + private Result postResult(Result result) { + @SuppressWarnings("unchecked") + Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT, + new AsyncTaskResult(this, result)); + message.sendToTarget(); + return result; + } + + /** + * Returns the current status of this task. + * + * @return The current status. + */ + public final Status getStatus() { + return mStatus; + } + + /** + * Override this method to perform a computation on a background thread. The + * specified parameters are the parameters passed to {@link #execute} + * by the caller of this task. + * + * This method can call {@link #publishProgress} to publish updates + * on the UI thread. + * + * @param params The parameters of the task. + * + * @return A result, defined by the subclass of this task. + * + * @see #onPreExecute() + * @see #onPostExecute + * @see #publishProgress + */ + protected abstract Result doInBackground(Params... params); + + /** + * Runs on the UI thread before {@link #doInBackground}. + * + * @see #onPostExecute + * @see #doInBackground + */ + protected void onPreExecute() { + } + + /** + *

Runs on the UI thread after {@link #doInBackground}. The + * specified result is the value returned by {@link #doInBackground}.

+ * + *

This method won't be invoked if the task was cancelled.

+ * + * @param result The result of the operation computed by {@link #doInBackground}. + * + * @see #onPreExecute + * @see #doInBackground + * @see #onCancelled(Object) + */ + @SuppressWarnings({"UnusedDeclaration"}) + protected void onPostExecute(Result result) { + } + + /** + * Runs on the UI thread after {@link #publishProgress} is invoked. + * The specified values are the values passed to {@link #publishProgress}. + * + * @param values The values indicating progress. + * + * @see #publishProgress + * @see #doInBackground + */ + @SuppressWarnings({"UnusedDeclaration"}) + protected void onProgressUpdate(Progress... values) { + } + + /** + *

Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

+ * + *

The default implementation simply invokes {@link #onCancelled()} and + * ignores the result. If you write your own implementation, do not call + * super.onCancelled(result).

+ * + * @param result The result, if any, computed in + * {@link #doInBackground(Object[])}, can be null + * + * @see #cancel(boolean) + * @see #isCancelled() + */ + @SuppressWarnings({"UnusedParameters"}) + protected void onCancelled(Result result) { + onCancelled(); + } + + /** + *

Applications should preferably override {@link #onCancelled(Object)}. + * This method is invoked by the default implementation of + * {@link #onCancelled(Object)}.

+ * + *

Runs on the UI thread after {@link #cancel(boolean)} is invoked and + * {@link #doInBackground(Object[])} has finished.

+ * + * @see #onCancelled(Object) + * @see #cancel(boolean) + * @see #isCancelled() + */ + protected void onCancelled() { + } + + /** + * Returns true if this task was cancelled before it completed + * normally. If you are calling {@link #cancel(boolean)} on the task, + * the value returned by this method should be checked periodically from + * {@link #doInBackground(Object[])} to end the task as soon as possible. + * + * @return true if task was cancelled before it completed + * + * @see #cancel(boolean) + */ + public final boolean isCancelled() { + return mCancelled.get(); + } + + /** + *

Attempts to cancel execution of this task. This attempt will + * fail if the task has already completed, already been cancelled, + * or could not be cancelled for some other reason. If successful, + * and this task has not started when cancel is called, + * this task should never run. If the task has already started, + * then the mayInterruptIfRunning parameter determines + * whether the thread executing this task should be interrupted in + * an attempt to stop the task.

+ * + *

Calling this method will result in {@link #onCancelled(Object)} being + * invoked on the UI thread after {@link #doInBackground(Object[])} + * returns. Calling this method guarantees that {@link #onPostExecute(Object)} + * is never invoked. After invoking this method, you should check the + * value returned by {@link #isCancelled()} periodically from + * {@link #doInBackground(Object[])} to finish the task as early as + * possible.

+ * + * @param mayInterruptIfRunning true if the thread executing this + * task should be interrupted; otherwise, in-progress tasks are allowed + * to complete. + * + * @return false if the task could not be cancelled, + * typically because it has already completed normally; + * true otherwise + * + * @see #isCancelled() + * @see #onCancelled(Object) + */ + public final boolean cancel(boolean mayInterruptIfRunning) { + mCancelled.set(true); + return mFuture.cancel(mayInterruptIfRunning); + } + + /** + * Waits if necessary for the computation to complete, and then + * retrieves its result. + * + * @return The computed result. + * + * @throws java.util.concurrent.CancellationException If the computation was cancelled. + * @throws java.util.concurrent.ExecutionException If the computation threw an exception. + * @throws InterruptedException If the current thread was interrupted + * while waiting. + */ + public final Result get() throws InterruptedException, ExecutionException { + return mFuture.get(); + } + + /** + * Waits if necessary for at most the given time for the computation + * to complete, and then retrieves its result. + * + * @param timeout Time to wait before cancelling the operation. + * @param unit The time unit for the timeout. + * + * @return The computed result. + * + * @throws java.util.concurrent.CancellationException If the computation was cancelled. + * @throws java.util.concurrent.ExecutionException If the computation threw an exception. + * @throws InterruptedException If the current thread was interrupted + * while waiting. + * @throws java.util.concurrent.TimeoutException If the wait timed out. + */ + public final Result get(long timeout, TimeUnit unit) throws InterruptedException, + ExecutionException, TimeoutException { + return mFuture.get(timeout, unit); + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

Note: this function schedules the task on a queue for a single background + * thread or pool of threads depending on the platform version. When first + * introduced, AsyncTasks were executed serially on a single background thread. + * Starting with {@link android.os.Build.VERSION_CODES#DONUT}, this was changed + * to a pool of threads allowing multiple tasks to operate in parallel. Starting + * {@link android.os.Build.VERSION_CODES#HONEYCOMB}, tasks are back to being + * executed on a single thread to avoid common application errors caused + * by parallel execution. If you truly want parallel execution, you can use + * the {@link #executeOnExecutor} version of this method + * with {@link #THREAD_POOL_EXECUTOR}; however, see commentary there for warnings + * on its use. + * + *

This method must be invoked on the UI thread. + * + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + * + * @see #executeOnExecutor(java.util.concurrent.Executor, Object[]) + * @see #execute(Runnable) + */ + public final AsyncTask execute(Params... params) { + return executeOnExecutor(sDefaultExecutor, params); + } + + /** + * Executes the task with the specified parameters. The task returns + * itself (this) so that the caller can keep a reference to it. + * + *

This method is typically used with {@link #THREAD_POOL_EXECUTOR} to + * allow multiple tasks to run in parallel on a pool of threads managed by + * AsyncTask, however you can also use your own {@link java.util.concurrent.Executor} for custom + * behavior. + * + *

Warning: Allowing multiple tasks to run in parallel from + * a thread pool is generally not what one wants, because the order + * of their operation is not defined. For example, if these tasks are used + * to modify any state in common (such as writing a file due to a button click), + * there are no guarantees on the order of the modifications. + * Without careful work it is possible in rare cases for the newer version + * of the data to be over-written by an older one, leading to obscure data + * loss and stability issues. Such changes are best + * executed in serial; to guarantee such work is serialized regardless of + * platform version you can use this function with {@link #SERIAL_EXECUTOR}. + * + *

This method must be invoked on the UI thread. + * + * @param exec The executor to use. {@link #THREAD_POOL_EXECUTOR} is available as a + * convenient process-wide thread pool for tasks that are loosely coupled. + * @param params The parameters of the task. + * + * @return This instance of AsyncTask. + * + * @throws IllegalStateException If {@link #getStatus()} returns either + * {@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}. + * + * @see #execute(Object[]) + */ + public final AsyncTask executeOnExecutor(Executor exec, + Params... params) { + if (mStatus != Status.PENDING) { + switch (mStatus) { + case RUNNING: + throw new IllegalStateException("Cannot execute task:" + + " the task is already running."); + case FINISHED: + throw new IllegalStateException("Cannot execute task:" + + " the task has already been executed " + + "(a task can be executed only once)"); + } + } + + mStatus = Status.RUNNING; + + onPreExecute(); + + mWorker.mParams = params; + exec.execute(mFuture); + + return this; + } + + /** + * Convenience version of {@link #execute(Object...)} for use with + * a simple Runnable object. See {@link #execute(Object[])} for more + * information on the order of execution. + * + * @see #execute(Object[]) + * @see #executeOnExecutor(java.util.concurrent.Executor, Object[]) + */ + public static void execute(Runnable runnable) { + sDefaultExecutor.execute(runnable); + } + + /** + * This method can be invoked from {@link #doInBackground} to + * publish updates on the UI thread while the background computation is + * still running. Each call to this method will trigger the execution of + * {@link #onProgressUpdate} on the UI thread. + * + * {@link #onProgressUpdate} will note be called if the task has been + * canceled. + * + * @param values The progress values to update the UI with. + * + * @see #onProgressUpdate + * @see #doInBackground + */ + protected final void publishProgress(Progress... values) { + if (!isCancelled()) { + sHandler.obtainMessage(MESSAGE_POST_PROGRESS, + new AsyncTaskResult(this, values)).sendToTarget(); + } + } + + private void finish(Result result) { + if (isCancelled()) { + onCancelled(result); + } else { + onPostExecute(result); + } + mStatus = Status.FINISHED; + } + + private static class InternalHandler extends Handler { + @SuppressWarnings({"unchecked", "RawUseOfParameterizedType"}) + @Override + public void handleMessage(Message msg) { + AsyncTaskResult result = (AsyncTaskResult) msg.obj; + switch (msg.what) { + case MESSAGE_POST_RESULT: + // There is only one result + result.mTask.finish(result.mData[0]); + break; + case MESSAGE_POST_PROGRESS: + result.mTask.onProgressUpdate(result.mData); + break; + } + } + } + + private static abstract class WorkerRunnable implements Callable { + Params[] mParams; + } + + @SuppressWarnings({"RawUseOfParameterizedType"}) + private static class AsyncTaskResult { + final AsyncTask mTask; + final Data[] mData; + + AsyncTaskResult(AsyncTask task, Data... data) { + mTask = task; + mData = data; + } + } +} \ No newline at end of file diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/DiskLruCache.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/DiskLruCache.java new file mode 100644 index 000000000..4c14345ae --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/DiskLruCache.java @@ -0,0 +1,953 @@ +/* + * 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.example.android.displayingbitmaps.util; + +import java.io.BufferedInputStream; +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Array; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + ****************************************************************************** + * Taken from the JB source code, can be found in: + * libcore/luni/src/main/java/libcore/io/DiskLruCache.java + * or direct link: + * https://android.googlesource.com/platform/libcore/+/android-4.1.1_r1/luni/src/main/java/libcore/io/DiskLruCache.java + ****************************************************************************** + * + * A cache that uses a bounded amount of space on a filesystem. Each cache + * entry has a string key and a fixed number of values. Values are byte + * sequences, accessible as streams or files. Each value must be between {@code + * 0} and {@code Integer.MAX_VALUE} bytes in length. + * + *

The cache stores its data in a directory on the filesystem. This + * directory must be exclusive to the cache; the cache may delete or overwrite + * files from its directory. It is an error for multiple processes to use the + * same cache directory at the same time. + * + *

This cache limits the number of bytes that it will store on the + * filesystem. When the number of stored bytes exceeds the limit, the cache will + * remove entries in the background until the limit is satisfied. The limit is + * not strict: the cache may temporarily exceed it while waiting for files to be + * deleted. The limit does not include filesystem overhead or the cache + * journal so space-sensitive applications should set a conservative limit. + * + *

Clients call {@link #edit} to create or update the values of an entry. An + * entry may have only one editor at one time; if a value is not available to be + * edited then {@link #edit} will return null. + *

    + *
  • When an entry is being created it is necessary to + * supply a full set of values; the empty value should be used as a + * placeholder if necessary. + *
  • When an entry is being edited, it is not necessary + * to supply data for every value; values default to their previous + * value. + *
+ * Every {@link #edit} call must be matched by a call to {@link Editor#commit} + * or {@link Editor#abort}. Committing is atomic: a read observes the full set + * of values as they were before or after the commit, but never a mix of values. + * + *

Clients call {@link #get} to read a snapshot of an entry. The read will + * observe the value at the time that {@link #get} was called. Updates and + * removals after the call do not impact ongoing reads. + * + *

This class is tolerant of some I/O errors. If files are missing from the + * filesystem, the corresponding entries will be dropped from the cache. If + * an error occurs while writing a cache value, the edit will fail silently. + * Callers should handle other problems by catching {@code IOException} and + * responding appropriately. + */ +public final class DiskLruCache implements Closeable { + static final String JOURNAL_FILE = "journal"; + static final String JOURNAL_FILE_TMP = "journal.tmp"; + static final String MAGIC = "libcore.io.DiskLruCache"; + static final String VERSION_1 = "1"; + static final long ANY_SEQUENCE_NUMBER = -1; + private static final String CLEAN = "CLEAN"; + private static final String DIRTY = "DIRTY"; + private static final String REMOVE = "REMOVE"; + private static final String READ = "READ"; + + private static final Charset UTF_8 = Charset.forName("UTF-8"); + private static final int IO_BUFFER_SIZE = 8 * 1024; + + /* + * This cache uses a journal file named "journal". A typical journal file + * looks like this: + * libcore.io.DiskLruCache + * 1 + * 100 + * 2 + * + * CLEAN 3400330d1dfc7f3f7f4b8d4d803dfcf6 832 21054 + * DIRTY 335c4c6028171cfddfbaae1a9c313c52 + * CLEAN 335c4c6028171cfddfbaae1a9c313c52 3934 2342 + * REMOVE 335c4c6028171cfddfbaae1a9c313c52 + * DIRTY 1ab96a171faeeee38496d8b330771a7a + * CLEAN 1ab96a171faeeee38496d8b330771a7a 1600 234 + * READ 335c4c6028171cfddfbaae1a9c313c52 + * READ 3400330d1dfc7f3f7f4b8d4d803dfcf6 + * + * The first five lines of the journal form its header. They are the + * constant string "libcore.io.DiskLruCache", the disk cache's version, + * the application's version, the value count, and a blank line. + * + * Each of the subsequent lines in the file is a record of the state of a + * cache entry. Each line contains space-separated values: a state, a key, + * and optional state-specific values. + * o DIRTY lines track that an entry is actively being created or updated. + * Every successful DIRTY action should be followed by a CLEAN or REMOVE + * action. DIRTY lines without a matching CLEAN or REMOVE indicate that + * temporary files may need to be deleted. + * o CLEAN lines track a cache entry that has been successfully published + * and may be read. A publish line is followed by the lengths of each of + * its values. + * o READ lines track accesses for LRU. + * o REMOVE lines track entries that have been deleted. + * + * The journal file is appended to as cache operations occur. The journal may + * occasionally be compacted by dropping redundant lines. A temporary file named + * "journal.tmp" will be used during compaction; that file should be deleted if + * it exists when the cache is opened. + */ + + private final File directory; + private final File journalFile; + private final File journalFileTmp; + private final int appVersion; + private final long maxSize; + private final int valueCount; + private long size = 0; + private Writer journalWriter; + private final LinkedHashMap lruEntries + = new LinkedHashMap(0, 0.75f, true); + private int redundantOpCount; + + /** + * To differentiate between old and current snapshots, each entry is given + * a sequence number each time an edit is committed. A snapshot is stale if + * its sequence number is not equal to its entry's sequence number. + */ + private long nextSequenceNumber = 0; + + /* From java.util.Arrays */ + @SuppressWarnings("unchecked") + private static T[] copyOfRange(T[] original, int start, int end) { + final int originalLength = original.length; // For exception priority compatibility. + if (start > end) { + throw new IllegalArgumentException(); + } + if (start < 0 || start > originalLength) { + throw new ArrayIndexOutOfBoundsException(); + } + final int resultLength = end - start; + final int copyLength = Math.min(resultLength, originalLength - start); + final T[] result = (T[]) Array + .newInstance(original.getClass().getComponentType(), resultLength); + System.arraycopy(original, start, result, 0, copyLength); + return result; + } + + /** + * Returns the remainder of 'reader' as a string, closing it when done. + */ + public static String readFully(Reader reader) throws IOException { + try { + StringWriter writer = new StringWriter(); + char[] buffer = new char[1024]; + int count; + while ((count = reader.read(buffer)) != -1) { + writer.write(buffer, 0, count); + } + return writer.toString(); + } finally { + reader.close(); + } + } + + /** + * Returns the ASCII characters up to but not including the next "\r\n", or + * "\n". + * + * @throws java.io.EOFException if the stream is exhausted before the next newline + * character. + */ + public static String readAsciiLine(InputStream in) throws IOException { + // TODO: support UTF-8 here instead + + StringBuilder result = new StringBuilder(80); + while (true) { + int c = in.read(); + if (c == -1) { + throw new EOFException(); + } else if (c == '\n') { + break; + } + + result.append((char) c); + } + int length = result.length(); + if (length > 0 && result.charAt(length - 1) == '\r') { + result.setLength(length - 1); + } + return result.toString(); + } + + /** + * Closes 'closeable', ignoring any checked exceptions. Does nothing if 'closeable' is null. + */ + public static void closeQuietly(Closeable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (RuntimeException rethrown) { + throw rethrown; + } catch (Exception ignored) { + } + } + } + + /** + * Recursively delete everything in {@code dir}. + */ + // TODO: this should specify paths as Strings rather than as Files + public static void deleteContents(File dir) throws IOException { + File[] files = dir.listFiles(); + if (files == null) { + throw new IllegalArgumentException("not a directory: " + dir); + } + for (File file : files) { + if (file.isDirectory()) { + deleteContents(file); + } + if (!file.delete()) { + throw new IOException("failed to delete file: " + file); + } + } + } + + /** This cache uses a single background thread to evict entries. */ + private final ExecutorService executorService = new ThreadPoolExecutor(0, 1, + 60L, TimeUnit.SECONDS, new LinkedBlockingQueue()); + private final Callable cleanupCallable = new Callable() { + @Override public Void call() throws Exception { + synchronized (DiskLruCache.this) { + if (journalWriter == null) { + return null; // closed + } + trimToSize(); + if (journalRebuildRequired()) { + rebuildJournal(); + redundantOpCount = 0; + } + } + return null; + } + }; + + private DiskLruCache(File directory, int appVersion, int valueCount, long maxSize) { + this.directory = directory; + this.appVersion = appVersion; + this.journalFile = new File(directory, JOURNAL_FILE); + this.journalFileTmp = new File(directory, JOURNAL_FILE_TMP); + this.valueCount = valueCount; + this.maxSize = maxSize; + } + + /** + * Opens the cache in {@code directory}, creating a cache if none exists + * there. + * + * @param directory a writable directory + * @param appVersion + * @param valueCount the number of values per cache entry. Must be positive. + * @param maxSize the maximum number of bytes this cache should use to store + * @throws java.io.IOException if reading or writing the cache directory fails + */ + public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize) + throws IOException { + if (maxSize <= 0) { + throw new IllegalArgumentException("maxSize <= 0"); + } + if (valueCount <= 0) { + throw new IllegalArgumentException("valueCount <= 0"); + } + + // prefer to pick up where we left off + DiskLruCache cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); + if (cache.journalFile.exists()) { + try { + cache.readJournal(); + cache.processJournal(); + cache.journalWriter = new BufferedWriter(new FileWriter(cache.journalFile, true), + IO_BUFFER_SIZE); + return cache; + } catch (IOException journalIsCorrupt) { +// System.logW("DiskLruCache " + directory + " is corrupt: " +// + journalIsCorrupt.getMessage() + ", removing"); + cache.delete(); + } + } + + // create a new empty cache + directory.mkdirs(); + cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); + cache.rebuildJournal(); + return cache; + } + + private void readJournal() throws IOException { + InputStream in = new BufferedInputStream(new FileInputStream(journalFile), IO_BUFFER_SIZE); + try { + String magic = readAsciiLine(in); + String version = readAsciiLine(in); + String appVersionString = readAsciiLine(in); + String valueCountString = readAsciiLine(in); + String blank = readAsciiLine(in); + if (!MAGIC.equals(magic) + || !VERSION_1.equals(version) + || !Integer.toString(appVersion).equals(appVersionString) + || !Integer.toString(valueCount).equals(valueCountString) + || !"".equals(blank)) { + throw new IOException("unexpected journal header: [" + + magic + ", " + version + ", " + valueCountString + ", " + blank + "]"); + } + + while (true) { + try { + readJournalLine(readAsciiLine(in)); + } catch (EOFException endOfJournal) { + break; + } + } + } finally { + closeQuietly(in); + } + } + + private void readJournalLine(String line) throws IOException { + String[] parts = line.split(" "); + if (parts.length < 2) { + throw new IOException("unexpected journal line: " + line); + } + + String key = parts[1]; + if (parts[0].equals(REMOVE) && parts.length == 2) { + lruEntries.remove(key); + return; + } + + Entry entry = lruEntries.get(key); + if (entry == null) { + entry = new Entry(key); + lruEntries.put(key, entry); + } + + if (parts[0].equals(CLEAN) && parts.length == 2 + valueCount) { + entry.readable = true; + entry.currentEditor = null; + entry.setLengths(copyOfRange(parts, 2, parts.length)); + } else if (parts[0].equals(DIRTY) && parts.length == 2) { + entry.currentEditor = new Editor(entry); + } else if (parts[0].equals(READ) && parts.length == 2) { + // this work was already done by calling lruEntries.get() + } else { + throw new IOException("unexpected journal line: " + line); + } + } + + /** + * Computes the initial size and collects garbage as a part of opening the + * cache. Dirty entries are assumed to be inconsistent and will be deleted. + */ + private void processJournal() throws IOException { + deleteIfExists(journalFileTmp); + for (Iterator i = lruEntries.values().iterator(); i.hasNext(); ) { + Entry entry = i.next(); + if (entry.currentEditor == null) { + for (int t = 0; t < valueCount; t++) { + size += entry.lengths[t]; + } + } else { + entry.currentEditor = null; + for (int t = 0; t < valueCount; t++) { + deleteIfExists(entry.getCleanFile(t)); + deleteIfExists(entry.getDirtyFile(t)); + } + i.remove(); + } + } + } + + /** + * Creates a new journal that omits redundant information. This replaces the + * current journal if it exists. + */ + private synchronized void rebuildJournal() throws IOException { + if (journalWriter != null) { + journalWriter.close(); + } + + Writer writer = new BufferedWriter(new FileWriter(journalFileTmp), IO_BUFFER_SIZE); + writer.write(MAGIC); + writer.write("\n"); + writer.write(VERSION_1); + writer.write("\n"); + writer.write(Integer.toString(appVersion)); + writer.write("\n"); + writer.write(Integer.toString(valueCount)); + writer.write("\n"); + writer.write("\n"); + + for (Entry entry : lruEntries.values()) { + if (entry.currentEditor != null) { + writer.write(DIRTY + ' ' + entry.key + '\n'); + } else { + writer.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + } + } + + writer.close(); + journalFileTmp.renameTo(journalFile); + journalWriter = new BufferedWriter(new FileWriter(journalFile, true), IO_BUFFER_SIZE); + } + + private static void deleteIfExists(File file) throws IOException { +// try { +// Libcore.os.remove(file.getPath()); +// } catch (ErrnoException errnoException) { +// if (errnoException.errno != OsConstants.ENOENT) { +// throw errnoException.rethrowAsIOException(); +// } +// } + if (file.exists() && !file.delete()) { + throw new IOException(); + } + } + + /** + * Returns a snapshot of the entry named {@code key}, or null if it doesn't + * exist is not currently readable. If a value is returned, it is moved to + * the head of the LRU queue. + */ + public synchronized Snapshot get(String key) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (entry == null) { + return null; + } + + if (!entry.readable) { + return null; + } + + /* + * Open all streams eagerly to guarantee that we see a single published + * snapshot. If we opened streams lazily then the streams could come + * from different edits. + */ + InputStream[] ins = new InputStream[valueCount]; + try { + for (int i = 0; i < valueCount; i++) { + ins[i] = new FileInputStream(entry.getCleanFile(i)); + } + } catch (FileNotFoundException e) { + // a file must have been deleted manually! + return null; + } + + redundantOpCount++; + journalWriter.append(READ + ' ' + key + '\n'); + if (journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + + return new Snapshot(key, entry.sequenceNumber, ins); + } + + /** + * Returns an editor for the entry named {@code key}, or null if another + * edit is in progress. + */ + public Editor edit(String key) throws IOException { + return edit(key, ANY_SEQUENCE_NUMBER); + } + + private synchronized Editor edit(String key, long expectedSequenceNumber) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (expectedSequenceNumber != ANY_SEQUENCE_NUMBER + && (entry == null || entry.sequenceNumber != expectedSequenceNumber)) { + return null; // snapshot is stale + } + if (entry == null) { + entry = new Entry(key); + lruEntries.put(key, entry); + } else if (entry.currentEditor != null) { + return null; // another edit is in progress + } + + Editor editor = new Editor(entry); + entry.currentEditor = editor; + + // flush the journal before creating files to prevent file leaks + journalWriter.write(DIRTY + ' ' + key + '\n'); + journalWriter.flush(); + return editor; + } + + /** + * Returns the directory where this cache stores its data. + */ + public File getDirectory() { + return directory; + } + + /** + * Returns the maximum number of bytes that this cache should use to store + * its data. + */ + public long maxSize() { + return maxSize; + } + + /** + * Returns the number of bytes currently being used to store the values in + * this cache. This may be greater than the max size if a background + * deletion is pending. + */ + public synchronized long size() { + return size; + } + + private synchronized void completeEdit(Editor editor, boolean success) throws IOException { + Entry entry = editor.entry; + if (entry.currentEditor != editor) { + throw new IllegalStateException(); + } + + // if this edit is creating the entry for the first time, every index must have a value + if (success && !entry.readable) { + for (int i = 0; i < valueCount; i++) { + if (!entry.getDirtyFile(i).exists()) { + editor.abort(); + throw new IllegalStateException("edit didn't create file " + i); + } + } + } + + for (int i = 0; i < valueCount; i++) { + File dirty = entry.getDirtyFile(i); + if (success) { + if (dirty.exists()) { + File clean = entry.getCleanFile(i); + dirty.renameTo(clean); + long oldLength = entry.lengths[i]; + long newLength = clean.length(); + entry.lengths[i] = newLength; + size = size - oldLength + newLength; + } + } else { + deleteIfExists(dirty); + } + } + + redundantOpCount++; + entry.currentEditor = null; + if (entry.readable | success) { + entry.readable = true; + journalWriter.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + if (success) { + entry.sequenceNumber = nextSequenceNumber++; + } + } else { + lruEntries.remove(entry.key); + journalWriter.write(REMOVE + ' ' + entry.key + '\n'); + } + + if (size > maxSize || journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + } + + /** + * We only rebuild the journal when it will halve the size of the journal + * and eliminate at least 2000 ops. + */ + private boolean journalRebuildRequired() { + final int REDUNDANT_OP_COMPACT_THRESHOLD = 2000; + return redundantOpCount >= REDUNDANT_OP_COMPACT_THRESHOLD + && redundantOpCount >= lruEntries.size(); + } + + /** + * Drops the entry for {@code key} if it exists and can be removed. Entries + * actively being edited cannot be removed. + * + * @return true if an entry was removed. + */ + public synchronized boolean remove(String key) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (entry == null || entry.currentEditor != null) { + return false; + } + + for (int i = 0; i < valueCount; i++) { + File file = entry.getCleanFile(i); + if (!file.delete()) { + throw new IOException("failed to delete " + file); + } + size -= entry.lengths[i]; + entry.lengths[i] = 0; + } + + redundantOpCount++; + journalWriter.append(REMOVE + ' ' + key + '\n'); + lruEntries.remove(key); + + if (journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + + return true; + } + + /** + * Returns true if this cache has been closed. + */ + public boolean isClosed() { + return journalWriter == null; + } + + private void checkNotClosed() { + if (journalWriter == null) { + throw new IllegalStateException("cache is closed"); + } + } + + /** + * Force buffered operations to the filesystem. + */ + public synchronized void flush() throws IOException { + checkNotClosed(); + trimToSize(); + journalWriter.flush(); + } + + /** + * Closes this cache. Stored values will remain on the filesystem. + */ + public synchronized void close() throws IOException { + if (journalWriter == null) { + return; // already closed + } + for (Entry entry : new ArrayList(lruEntries.values())) { + if (entry.currentEditor != null) { + entry.currentEditor.abort(); + } + } + trimToSize(); + journalWriter.close(); + journalWriter = null; + } + + private void trimToSize() throws IOException { + while (size > maxSize) { +// Map.Entry toEvict = lruEntries.eldest(); + final Map.Entry toEvict = lruEntries.entrySet().iterator().next(); + remove(toEvict.getKey()); + } + } + + /** + * Closes the cache and deletes all of its stored values. This will delete + * all files in the cache directory including files that weren't created by + * the cache. + */ + public void delete() throws IOException { + close(); + deleteContents(directory); + } + + private void validateKey(String key) { + if (key.contains(" ") || key.contains("\n") || key.contains("\r")) { + throw new IllegalArgumentException( + "keys must not contain spaces or newlines: \"" + key + "\""); + } + } + + private static String inputStreamToString(InputStream in) throws IOException { + return readFully(new InputStreamReader(in, UTF_8)); + } + + /** + * A snapshot of the values for an entry. + */ + public final class Snapshot implements Closeable { + private final String key; + private final long sequenceNumber; + private final InputStream[] ins; + + private Snapshot(String key, long sequenceNumber, InputStream[] ins) { + this.key = key; + this.sequenceNumber = sequenceNumber; + this.ins = ins; + } + + /** + * Returns an editor for this snapshot's entry, or null if either the + * entry has changed since this snapshot was created or if another edit + * is in progress. + */ + public Editor edit() throws IOException { + return DiskLruCache.this.edit(key, sequenceNumber); + } + + /** + * Returns the unbuffered stream with the value for {@code index}. + */ + public InputStream getInputStream(int index) { + return ins[index]; + } + + /** + * Returns the string value for {@code index}. + */ + public String getString(int index) throws IOException { + return inputStreamToString(getInputStream(index)); + } + + @Override public void close() { + for (InputStream in : ins) { + closeQuietly(in); + } + } + } + + /** + * Edits the values for an entry. + */ + public final class Editor { + private final Entry entry; + private boolean hasErrors; + + private Editor(Entry entry) { + this.entry = entry; + } + + /** + * Returns an unbuffered input stream to read the last committed value, + * or null if no value has been committed. + */ + public InputStream newInputStream(int index) throws IOException { + synchronized (DiskLruCache.this) { + if (entry.currentEditor != this) { + throw new IllegalStateException(); + } + if (!entry.readable) { + return null; + } + return new FileInputStream(entry.getCleanFile(index)); + } + } + + /** + * Returns the last committed value as a string, or null if no value + * has been committed. + */ + public String getString(int index) throws IOException { + InputStream in = newInputStream(index); + return in != null ? inputStreamToString(in) : null; + } + + /** + * Returns a new unbuffered output stream to write the value at + * {@code index}. If the underlying output stream encounters errors + * when writing to the filesystem, this edit will be aborted when + * {@link #commit} is called. The returned output stream does not throw + * IOExceptions. + */ + public OutputStream newOutputStream(int index) throws IOException { + synchronized (DiskLruCache.this) { + if (entry.currentEditor != this) { + throw new IllegalStateException(); + } + return new FaultHidingOutputStream(new FileOutputStream(entry.getDirtyFile(index))); + } + } + + /** + * Sets the value at {@code index} to {@code value}. + */ + public void set(int index, String value) throws IOException { + Writer writer = null; + try { + writer = new OutputStreamWriter(newOutputStream(index), UTF_8); + writer.write(value); + } finally { + closeQuietly(writer); + } + } + + /** + * Commits this edit so it is visible to readers. This releases the + * edit lock so another edit may be started on the same key. + */ + public void commit() throws IOException { + if (hasErrors) { + completeEdit(this, false); + remove(entry.key); // the previous entry is stale + } else { + completeEdit(this, true); + } + } + + /** + * Aborts this edit. This releases the edit lock so another edit may be + * started on the same key. + */ + public void abort() throws IOException { + completeEdit(this, false); + } + + private class FaultHidingOutputStream extends FilterOutputStream { + private FaultHidingOutputStream(OutputStream out) { + super(out); + } + + @Override public void write(int oneByte) { + try { + out.write(oneByte); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void write(byte[] buffer, int offset, int length) { + try { + out.write(buffer, offset, length); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void close() { + try { + out.close(); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void flush() { + try { + out.flush(); + } catch (IOException e) { + hasErrors = true; + } + } + } + } + + private final class Entry { + private final String key; + + /** Lengths of this entry's files. */ + private final long[] lengths; + + /** True if this entry has ever been published */ + private boolean readable; + + /** The ongoing edit or null if this entry is not being edited. */ + private Editor currentEditor; + + /** The sequence number of the most recently committed edit to this entry. */ + private long sequenceNumber; + + private Entry(String key) { + this.key = key; + this.lengths = new long[valueCount]; + } + + public String getLengths() throws IOException { + StringBuilder result = new StringBuilder(); + for (long size : lengths) { + result.append(' ').append(size); + } + return result.toString(); + } + + /** + * Set lengths using decimal numbers like "10123". + */ + private void setLengths(String[] strings) throws IOException { + if (strings.length != valueCount) { + throw invalidLengths(strings); + } + + try { + for (int i = 0; i < strings.length; i++) { + lengths[i] = Long.parseLong(strings[i]); + } + } catch (NumberFormatException e) { + throw invalidLengths(strings); + } + } + + private IOException invalidLengths(String[] strings) throws IOException { + throw new IOException("unexpected journal line: " + Arrays.toString(strings)); + } + + public File getCleanFile(int i) { + return new File(directory, key + "." + i); + } + + public File getDirtyFile(int i) { + return new File(directory, key + "." + i + ".tmp"); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageCache.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageCache.java new file mode 100644 index 000000000..41da56c0b --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageCache.java @@ -0,0 +1,738 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.os.Environment; +import android.os.StatFs; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.util.LruCache; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; + +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.ref.SoftReference; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * This class handles disk and memory caching of bitmaps in conjunction with the + * {@link ImageWorker} class and its subclasses. Use + * {@link ImageCache#getInstance(android.support.v4.app.FragmentManager, ImageCacheParams)} to get an instance of this + * class, although usually a cache should be added directly to an {@link ImageWorker} by calling + * {@link ImageWorker#addImageCache(android.support.v4.app.FragmentManager, ImageCacheParams)}. + */ +public class ImageCache { + private static final String TAG = "ImageCache"; + + // Default memory cache size in kilobytes + private static final int DEFAULT_MEM_CACHE_SIZE = 1024 * 5; // 5MB + + // Default disk cache size in bytes + private static final int DEFAULT_DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB + + // Compression settings when writing images to disk cache + private static final CompressFormat DEFAULT_COMPRESS_FORMAT = CompressFormat.JPEG; + private static final int DEFAULT_COMPRESS_QUALITY = 70; + private static final int DISK_CACHE_INDEX = 0; + + // Constants to easily toggle various caches + private static final boolean DEFAULT_MEM_CACHE_ENABLED = true; + private static final boolean DEFAULT_DISK_CACHE_ENABLED = true; + private static final boolean DEFAULT_INIT_DISK_CACHE_ON_CREATE = false; + + private DiskLruCache mDiskLruCache; + private LruCache mMemoryCache; + private ImageCacheParams mCacheParams; + private final Object mDiskCacheLock = new Object(); + private boolean mDiskCacheStarting = true; + + private Set> mReusableBitmaps; + + /** + * Create a new ImageCache object using the specified parameters. This should not be + * called directly by other classes, instead use + * {@link ImageCache#getInstance(android.support.v4.app.FragmentManager, ImageCacheParams)} to fetch an ImageCache + * instance. + * + * @param cacheParams The cache parameters to use to initialize the cache + */ + private ImageCache(ImageCacheParams cacheParams) { + init(cacheParams); + } + + /** + * Return an {@link ImageCache} instance. A {@link RetainFragment} is used to retain the + * ImageCache object across configuration changes such as a change in device orientation. + * + * @param fragmentManager The fragment manager to use when dealing with the retained fragment. + * @param cacheParams The cache parameters to use if the ImageCache needs instantiation. + * @return An existing retained ImageCache object or a new one if one did not exist + */ + public static ImageCache getInstance( + FragmentManager fragmentManager, ImageCacheParams cacheParams) { + + // Search for, or create an instance of the non-UI RetainFragment + final RetainFragment mRetainFragment = findOrCreateRetainFragment(fragmentManager); + + // See if we already have an ImageCache stored in RetainFragment + ImageCache imageCache = (ImageCache) mRetainFragment.getObject(); + + // No existing ImageCache, create one and store it in RetainFragment + if (imageCache == null) { + imageCache = new ImageCache(cacheParams); + mRetainFragment.setObject(imageCache); + } + + return imageCache; + } + + /** + * Initialize the cache, providing all parameters. + * + * @param cacheParams The cache parameters to initialize the cache + */ + private void init(ImageCacheParams cacheParams) { + mCacheParams = cacheParams; + + //BEGIN_INCLUDE(init_memory_cache) + // Set up memory cache + if (mCacheParams.memoryCacheEnabled) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "Memory cache created (size = " + mCacheParams.memCacheSize + ")"); + } + + // If we're running on Honeycomb or newer, create a set of reusable bitmaps that can be + // populated into the inBitmap field of BitmapFactory.Options. Note that the set is + // of SoftReferences which will actually not be very effective due to the garbage + // collector being aggressive clearing Soft/WeakReferences. A better approach + // would be to use a strongly references bitmaps, however this would require some + // balancing of memory usage between this set and the bitmap LruCache. It would also + // require knowledge of the expected size of the bitmaps. From Honeycomb to JellyBean + // the size would need to be precise, from KitKat onward the size would just need to + // be the upper bound (due to changes in how inBitmap can re-use bitmaps). + if (Utils.hasHoneycomb()) { + mReusableBitmaps = + Collections.synchronizedSet(new HashSet>()); + } + + mMemoryCache = new LruCache(mCacheParams.memCacheSize) { + + /** + * Notify the removed entry that is no longer being cached + */ + @Override + protected void entryRemoved(boolean evicted, String key, + BitmapDrawable oldValue, BitmapDrawable newValue) { + if (RecyclingBitmapDrawable.class.isInstance(oldValue)) { + // The removed entry is a recycling drawable, so notify it + // that it has been removed from the memory cache + ((RecyclingBitmapDrawable) oldValue).setIsCached(false); + } else { + // The removed entry is a standard BitmapDrawable + + if (Utils.hasHoneycomb()) { + // We're running on Honeycomb or later, so add the bitmap + // to a SoftReference set for possible use with inBitmap later + mReusableBitmaps.add(new SoftReference(oldValue.getBitmap())); + } + } + } + + /** + * Measure item size in kilobytes rather than units which is more practical + * for a bitmap cache + */ + @Override + protected int sizeOf(String key, BitmapDrawable value) { + final int bitmapSize = getBitmapSize(value) / 1024; + return bitmapSize == 0 ? 1 : bitmapSize; + } + }; + } + //END_INCLUDE(init_memory_cache) + + // By default the disk cache is not initialized here as it should be initialized + // on a separate thread due to disk access. + if (cacheParams.initDiskCacheOnCreate) { + // Set up disk cache + initDiskCache(); + } + } + + /** + * Initializes the disk cache. Note that this includes disk access so this should not be + * executed on the main/UI thread. By default an ImageCache does not initialize the disk + * cache when it is created, instead you should call initDiskCache() to initialize it on a + * background thread. + */ + public void initDiskCache() { + // Set up disk cache + synchronized (mDiskCacheLock) { + if (mDiskLruCache == null || mDiskLruCache.isClosed()) { + File diskCacheDir = mCacheParams.diskCacheDir; + if (mCacheParams.diskCacheEnabled && diskCacheDir != null) { + if (!diskCacheDir.exists()) { + diskCacheDir.mkdirs(); + } + if (getUsableSpace(diskCacheDir) > mCacheParams.diskCacheSize) { + try { + mDiskLruCache = DiskLruCache.open( + diskCacheDir, 1, 1, mCacheParams.diskCacheSize); + if (BuildConfig.DEBUG) { + Log.d(TAG, "Disk cache initialized"); + } + } catch (final IOException e) { + mCacheParams.diskCacheDir = null; + Log.e(TAG, "initDiskCache - " + e); + } + } + } + } + mDiskCacheStarting = false; + mDiskCacheLock.notifyAll(); + } + } + + /** + * Adds a bitmap to both memory and disk cache. + * @param data Unique identifier for the bitmap to store + * @param value The bitmap drawable to store + */ + public void addBitmapToCache(String data, BitmapDrawable value) { + //BEGIN_INCLUDE(add_bitmap_to_cache) + if (data == null || value == null) { + return; + } + + // Add to memory cache + if (mMemoryCache != null) { + if (RecyclingBitmapDrawable.class.isInstance(value)) { + // The removed entry is a recycling drawable, so notify it + // that it has been added into the memory cache + ((RecyclingBitmapDrawable) value).setIsCached(true); + } + mMemoryCache.put(data, value); + } + + synchronized (mDiskCacheLock) { + // Add to disk cache + if (mDiskLruCache != null) { + final String key = hashKeyForDisk(data); + OutputStream out = null; + try { + DiskLruCache.Snapshot snapshot = mDiskLruCache.get(key); + if (snapshot == null) { + final DiskLruCache.Editor editor = mDiskLruCache.edit(key); + if (editor != null) { + out = editor.newOutputStream(DISK_CACHE_INDEX); + value.getBitmap().compress( + mCacheParams.compressFormat, mCacheParams.compressQuality, out); + editor.commit(); + out.close(); + } + } else { + snapshot.getInputStream(DISK_CACHE_INDEX).close(); + } + } catch (final IOException e) { + Log.e(TAG, "addBitmapToCache - " + e); + } catch (Exception e) { + Log.e(TAG, "addBitmapToCache - " + e); + } finally { + try { + if (out != null) { + out.close(); + } + } catch (IOException e) {} + } + } + } + //END_INCLUDE(add_bitmap_to_cache) + } + + /** + * Get from memory cache. + * + * @param data Unique identifier for which item to get + * @return The bitmap drawable if found in cache, null otherwise + */ + public BitmapDrawable getBitmapFromMemCache(String data) { + //BEGIN_INCLUDE(get_bitmap_from_mem_cache) + BitmapDrawable memValue = null; + + if (mMemoryCache != null) { + memValue = mMemoryCache.get(data); + } + + if (BuildConfig.DEBUG && memValue != null) { + Log.d(TAG, "Memory cache hit"); + } + + return memValue; + //END_INCLUDE(get_bitmap_from_mem_cache) + } + + /** + * Get from disk cache. + * + * @param data Unique identifier for which item to get + * @return The bitmap if found in cache, null otherwise + */ + public Bitmap getBitmapFromDiskCache(String data) { + //BEGIN_INCLUDE(get_bitmap_from_disk_cache) + final String key = hashKeyForDisk(data); + Bitmap bitmap = null; + + synchronized (mDiskCacheLock) { + while (mDiskCacheStarting) { + try { + mDiskCacheLock.wait(); + } catch (InterruptedException e) {} + } + if (mDiskLruCache != null) { + InputStream inputStream = null; + try { + final DiskLruCache.Snapshot snapshot = mDiskLruCache.get(key); + if (snapshot != null) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "Disk cache hit"); + } + inputStream = snapshot.getInputStream(DISK_CACHE_INDEX); + if (inputStream != null) { + FileDescriptor fd = ((FileInputStream) inputStream).getFD(); + + // Decode bitmap, but we don't want to sample so give + // MAX_VALUE as the target dimensions + bitmap = ImageResizer.decodeSampledBitmapFromDescriptor( + fd, Integer.MAX_VALUE, Integer.MAX_VALUE, this); + } + } + } catch (final IOException e) { + Log.e(TAG, "getBitmapFromDiskCache - " + e); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) {} + } + } + return bitmap; + } + //END_INCLUDE(get_bitmap_from_disk_cache) + } + + /** + * @param options - BitmapFactory.Options with out* options populated + * @return Bitmap that case be used for inBitmap + */ + protected Bitmap getBitmapFromReusableSet(BitmapFactory.Options options) { + //BEGIN_INCLUDE(get_bitmap_from_reusable_set) + Bitmap bitmap = null; + + if (mReusableBitmaps != null && !mReusableBitmaps.isEmpty()) { + synchronized (mReusableBitmaps) { + final Iterator> iterator = mReusableBitmaps.iterator(); + Bitmap item; + + while (iterator.hasNext()) { + item = iterator.next().get(); + + if (null != item && item.isMutable()) { + // Check to see it the item can be used for inBitmap + if (canUseForInBitmap(item, options)) { + bitmap = item; + + // Remove from reusable set so it can't be used again + iterator.remove(); + break; + } + } else { + // Remove from the set if the reference has been cleared. + iterator.remove(); + } + } + } + } + + return bitmap; + //END_INCLUDE(get_bitmap_from_reusable_set) + } + + /** + * Clears both the memory and disk cache associated with this ImageCache object. Note that + * this includes disk access so this should not be executed on the main/UI thread. + */ + public void clearCache() { + if (mMemoryCache != null) { + mMemoryCache.evictAll(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "Memory cache cleared"); + } + } + + synchronized (mDiskCacheLock) { + mDiskCacheStarting = true; + if (mDiskLruCache != null && !mDiskLruCache.isClosed()) { + try { + mDiskLruCache.delete(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "Disk cache cleared"); + } + } catch (IOException e) { + Log.e(TAG, "clearCache - " + e); + } + mDiskLruCache = null; + initDiskCache(); + } + } + } + + /** + * Flushes the disk cache associated with this ImageCache object. Note that this includes + * disk access so this should not be executed on the main/UI thread. + */ + public void flush() { + synchronized (mDiskCacheLock) { + if (mDiskLruCache != null) { + try { + mDiskLruCache.flush(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "Disk cache flushed"); + } + } catch (IOException e) { + Log.e(TAG, "flush - " + e); + } + } + } + } + + /** + * Closes the disk cache associated with this ImageCache object. Note that this includes + * disk access so this should not be executed on the main/UI thread. + */ + public void close() { + synchronized (mDiskCacheLock) { + if (mDiskLruCache != null) { + try { + if (!mDiskLruCache.isClosed()) { + mDiskLruCache.close(); + mDiskLruCache = null; + if (BuildConfig.DEBUG) { + Log.d(TAG, "Disk cache closed"); + } + } + } catch (IOException e) { + Log.e(TAG, "close - " + e); + } + } + } + } + + /** + * A holder class that contains cache parameters. + */ + public static class ImageCacheParams { + public int memCacheSize = DEFAULT_MEM_CACHE_SIZE; + public int diskCacheSize = DEFAULT_DISK_CACHE_SIZE; + public File diskCacheDir; + public CompressFormat compressFormat = DEFAULT_COMPRESS_FORMAT; + public int compressQuality = DEFAULT_COMPRESS_QUALITY; + public boolean memoryCacheEnabled = DEFAULT_MEM_CACHE_ENABLED; + public boolean diskCacheEnabled = DEFAULT_DISK_CACHE_ENABLED; + public boolean initDiskCacheOnCreate = DEFAULT_INIT_DISK_CACHE_ON_CREATE; + + /** + * Create a set of image cache parameters that can be provided to + * {@link ImageCache#getInstance(android.support.v4.app.FragmentManager, ImageCacheParams)} or + * {@link ImageWorker#addImageCache(android.support.v4.app.FragmentManager, ImageCacheParams)}. + * @param context A context to use. + * @param diskCacheDirectoryName A unique subdirectory name that will be appended to the + * application cache directory. Usually "cache" or "images" + * is sufficient. + */ + public ImageCacheParams(Context context, String diskCacheDirectoryName) { + diskCacheDir = getDiskCacheDir(context, diskCacheDirectoryName); + } + + /** + * Sets the memory cache size based on a percentage of the max available VM memory. + * Eg. setting percent to 0.2 would set the memory cache to one fifth of the available + * memory. Throws {@link IllegalArgumentException} if percent is < 0.01 or > .8. + * memCacheSize is stored in kilobytes instead of bytes as this will eventually be passed + * to construct a LruCache which takes an int in its constructor. + * + * This value should be chosen carefully based on a number of factors + * Refer to the corresponding Android Training class for more discussion: + * http://developer.android.com/training/displaying-bitmaps/ + * + * @param percent Percent of available app memory to use to size memory cache + */ + public void setMemCacheSizePercent(float percent) { + if (percent < 0.01f || percent > 0.8f) { + throw new IllegalArgumentException("setMemCacheSizePercent - percent must be " + + "between 0.01 and 0.8 (inclusive)"); + } + memCacheSize = Math.round(percent * Runtime.getRuntime().maxMemory() / 1024); + } + } + + /** + * @param candidate - Bitmap to check + * @param targetOptions - Options that have the out* value populated + * @return true if candidate can be used for inBitmap re-use with + * targetOptions + */ + @TargetApi(VERSION_CODES.KITKAT) + private static boolean canUseForInBitmap( + Bitmap candidate, BitmapFactory.Options targetOptions) { + //BEGIN_INCLUDE(can_use_for_inbitmap) + if (!Utils.hasKitKat()) { + // On earlier versions, the dimensions must match exactly and the inSampleSize must be 1 + return candidate.getWidth() == targetOptions.outWidth + && candidate.getHeight() == targetOptions.outHeight + && targetOptions.inSampleSize == 1; + } + + // From Android 4.4 (KitKat) onward we can re-use if the byte size of the new bitmap + // is smaller than the reusable bitmap candidate allocation byte count. + int width = targetOptions.outWidth / targetOptions.inSampleSize; + int height = targetOptions.outHeight / targetOptions.inSampleSize; + int byteCount = width * height * getBytesPerPixel(candidate.getConfig()); + return byteCount <= candidate.getAllocationByteCount(); + //END_INCLUDE(can_use_for_inbitmap) + } + + /** + * Return the byte usage per pixel of a bitmap based on its configuration. + * @param config The bitmap configuration. + * @return The byte usage per pixel. + */ + private static int getBytesPerPixel(Config config) { + if (config == Config.ARGB_8888) { + return 4; + } else if (config == Config.RGB_565) { + return 2; + } else if (config == Config.ARGB_4444) { + return 2; + } else if (config == Config.ALPHA_8) { + return 1; + } + return 1; + } + + /** + * Get a usable cache directory (external if available, internal otherwise). + * + * @param context The context to use + * @param uniqueName A unique directory name to append to the cache dir + * @return The cache dir + */ + public static File getDiskCacheDir(Context context, String uniqueName) { + // Check if media is mounted or storage is built-in, if so, try and use external cache dir + // otherwise use internal cache dir + final String cachePath = + Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || + !isExternalStorageRemovable() ? getExternalCacheDir(context).getPath() : + context.getCacheDir().getPath(); + + return new File(cachePath + File.separator + uniqueName); + } + + /** + * A hashing method that changes a string (like a URL) into a hash suitable for using as a + * disk filename. + */ + public static String hashKeyForDisk(String key) { + String cacheKey; + try { + final MessageDigest mDigest = MessageDigest.getInstance("MD5"); + mDigest.update(key.getBytes()); + cacheKey = bytesToHexString(mDigest.digest()); + } catch (NoSuchAlgorithmException e) { + cacheKey = String.valueOf(key.hashCode()); + } + return cacheKey; + } + + private static String bytesToHexString(byte[] bytes) { + // http://stackoverflow.com/questions/332079 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } + + /** + * Get the size in bytes of a bitmap in a BitmapDrawable. Note that from Android 4.4 (KitKat) + * onward this returns the allocated memory size of the bitmap which can be larger than the + * actual bitmap data byte count (in the case it was re-used). + * + * @param value + * @return size in bytes + */ + @TargetApi(VERSION_CODES.KITKAT) + public static int getBitmapSize(BitmapDrawable value) { + Bitmap bitmap = value.getBitmap(); + + // From KitKat onward use getAllocationByteCount() as allocated bytes can potentially be + // larger than bitmap byte count. + if (Utils.hasKitKat()) { + return bitmap.getAllocationByteCount(); + } + + if (Utils.hasHoneycombMR1()) { + return bitmap.getByteCount(); + } + + // Pre HC-MR1 + return bitmap.getRowBytes() * bitmap.getHeight(); + } + + /** + * Check if external storage is built-in or removable. + * + * @return True if external storage is removable (like an SD card), false + * otherwise. + */ + @TargetApi(VERSION_CODES.GINGERBREAD) + public static boolean isExternalStorageRemovable() { + if (Utils.hasGingerbread()) { + return Environment.isExternalStorageRemovable(); + } + return true; + } + + /** + * Get the external app cache directory. + * + * @param context The context to use + * @return The external cache dir + */ + @TargetApi(VERSION_CODES.FROYO) + public static File getExternalCacheDir(Context context) { + if (Utils.hasFroyo()) { + return context.getExternalCacheDir(); + } + + // Before Froyo we need to construct the external cache dir ourselves + final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/"; + return new File(Environment.getExternalStorageDirectory().getPath() + cacheDir); + } + + /** + * Check how much usable space is available at a given path. + * + * @param path The path to check + * @return The space available in bytes + */ + @TargetApi(VERSION_CODES.GINGERBREAD) + public static long getUsableSpace(File path) { + if (Utils.hasGingerbread()) { + return path.getUsableSpace(); + } + final StatFs stats = new StatFs(path.getPath()); + return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks(); + } + + /** + * Locate an existing instance of this Fragment or if not found, create and + * add it using FragmentManager. + * + * @param fm The FragmentManager manager to use. + * @return The existing instance of the Fragment or the new instance if just + * created. + */ + private static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { + //BEGIN_INCLUDE(find_create_retain_fragment) + // Check to see if we have retained the worker fragment. + RetainFragment mRetainFragment = (RetainFragment) fm.findFragmentByTag(TAG); + + // If not retained (or first time running), we need to create and add it. + if (mRetainFragment == null) { + mRetainFragment = new RetainFragment(); + fm.beginTransaction().add(mRetainFragment, TAG).commitAllowingStateLoss(); + } + + return mRetainFragment; + //END_INCLUDE(find_create_retain_fragment) + } + + /** + * A simple non-UI Fragment that stores a single Object and is retained over configuration + * changes. It will be used to retain the ImageCache object. + */ + public static class RetainFragment extends Fragment { + private Object mObject; + + /** + * Empty constructor as per the Fragment documentation + */ + public RetainFragment() {} + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Make sure this Fragment is retained over a configuration change + setRetainInstance(true); + } + + /** + * Store a single object in this Fragment. + * + * @param object The object to store + */ + public void setObject(Object object) { + mObject = object; + } + + /** + * Get the stored object. + * + * @return The stored object + */ + public Object getObject() { + return mObject; + } + } + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageFetcher.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageFetcher.java new file mode 100644 index 000000000..b9ccb68cf --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageFetcher.java @@ -0,0 +1,311 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.content.Context; +import android.graphics.Bitmap; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Build; +import android.widget.Toast; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; +import com.example.android.displayingbitmaps.R; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * A simple subclass of {@link ImageResizer} that fetches and resizes images fetched from a URL. + */ +public class ImageFetcher extends ImageResizer { + private static final String TAG = "ImageFetcher"; + private static final int HTTP_CACHE_SIZE = 10 * 1024 * 1024; // 10MB + private static final String HTTP_CACHE_DIR = "http"; + private static final int IO_BUFFER_SIZE = 8 * 1024; + + private DiskLruCache mHttpDiskCache; + private File mHttpCacheDir; + private boolean mHttpDiskCacheStarting = true; + private final Object mHttpDiskCacheLock = new Object(); + private static final int DISK_CACHE_INDEX = 0; + + /** + * Initialize providing a target image width and height for the processing images. + * + * @param context + * @param imageWidth + * @param imageHeight + */ + public ImageFetcher(Context context, int imageWidth, int imageHeight) { + super(context, imageWidth, imageHeight); + init(context); + } + + /** + * Initialize providing a single target image size (used for both width and height); + * + * @param context + * @param imageSize + */ + public ImageFetcher(Context context, int imageSize) { + super(context, imageSize); + init(context); + } + + private void init(Context context) { + checkConnection(context); + mHttpCacheDir = ImageCache.getDiskCacheDir(context, HTTP_CACHE_DIR); + } + + @Override + protected void initDiskCacheInternal() { + super.initDiskCacheInternal(); + initHttpDiskCache(); + } + + private void initHttpDiskCache() { + if (!mHttpCacheDir.exists()) { + mHttpCacheDir.mkdirs(); + } + synchronized (mHttpDiskCacheLock) { + if (ImageCache.getUsableSpace(mHttpCacheDir) > HTTP_CACHE_SIZE) { + try { + mHttpDiskCache = DiskLruCache.open(mHttpCacheDir, 1, 1, HTTP_CACHE_SIZE); + if (BuildConfig.DEBUG) { + Log.d(TAG, "HTTP cache initialized"); + } + } catch (IOException e) { + mHttpDiskCache = null; + } + } + mHttpDiskCacheStarting = false; + mHttpDiskCacheLock.notifyAll(); + } + } + + @Override + protected void clearCacheInternal() { + super.clearCacheInternal(); + synchronized (mHttpDiskCacheLock) { + if (mHttpDiskCache != null && !mHttpDiskCache.isClosed()) { + try { + mHttpDiskCache.delete(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "HTTP cache cleared"); + } + } catch (IOException e) { + Log.e(TAG, "clearCacheInternal - " + e); + } + mHttpDiskCache = null; + mHttpDiskCacheStarting = true; + initHttpDiskCache(); + } + } + } + + @Override + protected void flushCacheInternal() { + super.flushCacheInternal(); + synchronized (mHttpDiskCacheLock) { + if (mHttpDiskCache != null) { + try { + mHttpDiskCache.flush(); + if (BuildConfig.DEBUG) { + Log.d(TAG, "HTTP cache flushed"); + } + } catch (IOException e) { + Log.e(TAG, "flush - " + e); + } + } + } + } + + @Override + protected void closeCacheInternal() { + super.closeCacheInternal(); + synchronized (mHttpDiskCacheLock) { + if (mHttpDiskCache != null) { + try { + if (!mHttpDiskCache.isClosed()) { + mHttpDiskCache.close(); + mHttpDiskCache = null; + if (BuildConfig.DEBUG) { + Log.d(TAG, "HTTP cache closed"); + } + } + } catch (IOException e) { + Log.e(TAG, "closeCacheInternal - " + e); + } + } + } + } + + /** + * Simple network connection check. + * + * @param context + */ + private void checkConnection(Context context) { + final ConnectivityManager cm = + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + final NetworkInfo networkInfo = cm.getActiveNetworkInfo(); + if (networkInfo == null || !networkInfo.isConnectedOrConnecting()) { + Toast.makeText(context, R.string.no_network_connection_toast, Toast.LENGTH_LONG).show(); + Log.e(TAG, "checkConnection - no connection found"); + } + } + + /** + * The main process method, which will be called by the ImageWorker in the AsyncTask background + * thread. + * + * @param data The data to load the bitmap, in this case, a regular http URL + * @return The downloaded and resized bitmap + */ + private Bitmap processBitmap(String data) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "processBitmap - " + data); + } + + final String key = ImageCache.hashKeyForDisk(data); + FileDescriptor fileDescriptor = null; + FileInputStream fileInputStream = null; + DiskLruCache.Snapshot snapshot; + synchronized (mHttpDiskCacheLock) { + // Wait for disk cache to initialize + while (mHttpDiskCacheStarting) { + try { + mHttpDiskCacheLock.wait(); + } catch (InterruptedException e) {} + } + + if (mHttpDiskCache != null) { + try { + snapshot = mHttpDiskCache.get(key); + if (snapshot == null) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "processBitmap, not found in http cache, downloading..."); + } + DiskLruCache.Editor editor = mHttpDiskCache.edit(key); + if (editor != null) { + if (downloadUrlToStream(data, + editor.newOutputStream(DISK_CACHE_INDEX))) { + editor.commit(); + } else { + editor.abort(); + } + } + snapshot = mHttpDiskCache.get(key); + } + if (snapshot != null) { + fileInputStream = + (FileInputStream) snapshot.getInputStream(DISK_CACHE_INDEX); + fileDescriptor = fileInputStream.getFD(); + } + } catch (IOException e) { + Log.e(TAG, "processBitmap - " + e); + } catch (IllegalStateException e) { + Log.e(TAG, "processBitmap - " + e); + } finally { + if (fileDescriptor == null && fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) {} + } + } + } + } + + Bitmap bitmap = null; + if (fileDescriptor != null) { + bitmap = decodeSampledBitmapFromDescriptor(fileDescriptor, mImageWidth, + mImageHeight, getImageCache()); + } + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) {} + } + return bitmap; + } + + @Override + protected Bitmap processBitmap(Object data) { + return processBitmap(String.valueOf(data)); + } + + /** + * Download a bitmap from a URL and write the content to an output stream. + * + * @param urlString The URL to fetch + * @return true if successful, false otherwise + */ + public boolean downloadUrlToStream(String urlString, OutputStream outputStream) { + disableConnectionReuseIfNecessary(); + HttpURLConnection urlConnection = null; + BufferedOutputStream out = null; + BufferedInputStream in = null; + + try { + final URL url = new URL(urlString); + urlConnection = (HttpURLConnection) url.openConnection(); + in = new BufferedInputStream(urlConnection.getInputStream(), IO_BUFFER_SIZE); + out = new BufferedOutputStream(outputStream, IO_BUFFER_SIZE); + + int b; + while ((b = in.read()) != -1) { + out.write(b); + } + return true; + } catch (final IOException e) { + Log.e(TAG, "Error in downloadBitmap - " + e); + } finally { + if (urlConnection != null) { + urlConnection.disconnect(); + } + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (final IOException e) {} + } + return false; + } + + /** + * Workaround for bug pre-Froyo, see here for more info: + * http://android-developers.blogspot.com/2011/09/androids-http-clients.html + */ + public static void disableConnectionReuseIfNecessary() { + // HTTP connection reuse which was buggy pre-froyo + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) { + System.setProperty("http.keepAlive", "false"); + } + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageResizer.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageResizer.java new file mode 100644 index 000000000..be9109682 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageResizer.java @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; + +import java.io.FileDescriptor; + +/** + * A simple subclass of {@link ImageWorker} that resizes images from resources given a target width + * and height. Useful for when the input images might be too large to simply load directly into + * memory. + */ +public class ImageResizer extends ImageWorker { + private static final String TAG = "ImageResizer"; + protected int mImageWidth; + protected int mImageHeight; + + /** + * Initialize providing a single target image size (used for both width and height); + * + * @param context + * @param imageWidth + * @param imageHeight + */ + public ImageResizer(Context context, int imageWidth, int imageHeight) { + super(context); + setImageSize(imageWidth, imageHeight); + } + + /** + * Initialize providing a single target image size (used for both width and height); + * + * @param context + * @param imageSize + */ + public ImageResizer(Context context, int imageSize) { + super(context); + setImageSize(imageSize); + } + + /** + * Set the target image width and height. + * + * @param width + * @param height + */ + public void setImageSize(int width, int height) { + mImageWidth = width; + mImageHeight = height; + } + + /** + * Set the target image size (width and height will be the same). + * + * @param size + */ + public void setImageSize(int size) { + setImageSize(size, size); + } + + /** + * The main processing method. This happens in a background task. In this case we are just + * sampling down the bitmap and returning it from a resource. + * + * @param resId + * @return + */ + private Bitmap processBitmap(int resId) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "processBitmap - " + resId); + } + return decodeSampledBitmapFromResource(mResources, resId, mImageWidth, + mImageHeight, getImageCache()); + } + + @Override + protected Bitmap processBitmap(Object data) { + return processBitmap(Integer.parseInt(String.valueOf(data))); + } + + /** + * Decode and sample down a bitmap from resources to the requested width and height. + * + * @param res The resources object containing the image data + * @param resId The resource id of the image data + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @param cache The ImageCache used to find candidate bitmaps for use with inBitmap + * @return A bitmap sampled down from the original with the same aspect ratio and dimensions + * that are equal to or greater than the requested width and height + */ + public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, + int reqWidth, int reqHeight, ImageCache cache) { + + // BEGIN_INCLUDE (read_bitmap_dimensions) + // First decode with inJustDecodeBounds=true to check dimensions + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeResource(res, resId, options); + + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); + // END_INCLUDE (read_bitmap_dimensions) + + // If we're running on Honeycomb or newer, try to use inBitmap + if (Utils.hasHoneycomb()) { + addInBitmapOptions(options, cache); + } + + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + return BitmapFactory.decodeResource(res, resId, options); + } + + /** + * Decode and sample down a bitmap from a file to the requested width and height. + * + * @param filename The full path of the file to decode + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @param cache The ImageCache used to find candidate bitmaps for use with inBitmap + * @return A bitmap sampled down from the original with the same aspect ratio and dimensions + * that are equal to or greater than the requested width and height + */ + public static Bitmap decodeSampledBitmapFromFile(String filename, + int reqWidth, int reqHeight, ImageCache cache) { + + // First decode with inJustDecodeBounds=true to check dimensions + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(filename, options); + + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); + + // If we're running on Honeycomb or newer, try to use inBitmap + if (Utils.hasHoneycomb()) { + addInBitmapOptions(options, cache); + } + + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + return BitmapFactory.decodeFile(filename, options); + } + + /** + * Decode and sample down a bitmap from a file input stream to the requested width and height. + * + * @param fileDescriptor The file descriptor to read from + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @param cache The ImageCache used to find candidate bitmaps for use with inBitmap + * @return A bitmap sampled down from the original with the same aspect ratio and dimensions + * that are equal to or greater than the requested width and height + */ + public static Bitmap decodeSampledBitmapFromDescriptor( + FileDescriptor fileDescriptor, int reqWidth, int reqHeight, ImageCache cache) { + + // First decode with inJustDecodeBounds=true to check dimensions + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options); + + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); + + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + + // If we're running on Honeycomb or newer, try to use inBitmap + if (Utils.hasHoneycomb()) { + addInBitmapOptions(options, cache); + } + + return BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options); + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + private static void addInBitmapOptions(BitmapFactory.Options options, ImageCache cache) { + //BEGIN_INCLUDE(add_bitmap_options) + // inBitmap only works with mutable bitmaps so force the decoder to + // return mutable bitmaps. + options.inMutable = true; + + if (cache != null) { + // Try and find a bitmap to use for inBitmap + Bitmap inBitmap = cache.getBitmapFromReusableSet(options); + + if (inBitmap != null) { + options.inBitmap = inBitmap; + } + } + //END_INCLUDE(add_bitmap_options) + } + + /** + * Calculate an inSampleSize for use in a {@link android.graphics.BitmapFactory.Options} object when decoding + * bitmaps using the decode* methods from {@link android.graphics.BitmapFactory}. This implementation calculates + * the closest inSampleSize that is a power of 2 and will result in the final decoded bitmap + * having a width and height equal to or larger than the requested width and height. + * + * @param options An options object with out* params already populated (run through a decode* + * method with inJustDecodeBounds==true + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @return The value to be used for inSampleSize + */ + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + // BEGIN_INCLUDE (calculate_sample_size) + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int halfHeight = height / 2; + final int halfWidth = width / 2; + + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) > reqHeight + && (halfWidth / inSampleSize) > reqWidth) { + inSampleSize *= 2; + } + + // This offers some additional logic in case the image has a strange + // aspect ratio. For example, a panorama may have a much larger + // width than height. In these cases the total pixels might still + // end up being too large to fit comfortably in memory, so we should + // be more aggressive with sample down the image (=larger inSampleSize). + + long totalPixels = width * height / inSampleSize; + + // Anything more than 2x the requested pixels we'll sample down further + final long totalReqPixelsCap = reqWidth * reqHeight * 2; + + while (totalPixels > totalReqPixelsCap) { + inSampleSize *= 2; + totalPixels /= 2; + } + } + return inSampleSize; + // END_INCLUDE (calculate_sample_size) + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageWorker.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageWorker.java new file mode 100644 index 000000000..f44d00d5b --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/ImageWorker.java @@ -0,0 +1,485 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.TransitionDrawable; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.widget.ImageView; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; + +import java.lang.ref.WeakReference; + +/** + * This class wraps up completing some arbitrary long running work when loading a bitmap to an + * ImageView. It handles things like using a memory and disk cache, running the work in a background + * thread and setting a placeholder image. + */ +public abstract class ImageWorker { + private static final String TAG = "ImageWorker"; + private static final int FADE_IN_TIME = 200; + + private ImageCache mImageCache; + private ImageCache.ImageCacheParams mImageCacheParams; + private Bitmap mLoadingBitmap; + private boolean mFadeInBitmap = true; + private boolean mExitTasksEarly = false; + protected boolean mPauseWork = false; + private final Object mPauseWorkLock = new Object(); + + protected Resources mResources; + + private static final int MESSAGE_CLEAR = 0; + private static final int MESSAGE_INIT_DISK_CACHE = 1; + private static final int MESSAGE_FLUSH = 2; + private static final int MESSAGE_CLOSE = 3; + + protected ImageWorker(Context context) { + mResources = context.getResources(); + } + + /** + * Load an image specified by the data parameter into an ImageView (override + * {@link ImageWorker#processBitmap(Object)} to define the processing logic). A memory and + * disk cache will be used if an {@link ImageCache} has been added using + * {@link ImageWorker#addImageCache(android.support.v4.app.FragmentManager, ImageCache.ImageCacheParams)}. If the + * image is found in the memory cache, it is set immediately, otherwise an {@link AsyncTask} + * will be created to asynchronously load the bitmap. + * + * @param data The URL of the image to download. + * @param imageView The ImageView to bind the downloaded image to. + */ + public void loadImage(Object data, ImageView imageView) { + if (data == null) { + return; + } + + BitmapDrawable value = null; + + if (mImageCache != null) { + value = mImageCache.getBitmapFromMemCache(String.valueOf(data)); + } + + if (value != null) { + // Bitmap found in memory cache + imageView.setImageDrawable(value); + } else if (cancelPotentialWork(data, imageView)) { + //BEGIN_INCLUDE(execute_background_task) + final BitmapWorkerTask task = new BitmapWorkerTask(data, imageView); + final AsyncDrawable asyncDrawable = + new AsyncDrawable(mResources, mLoadingBitmap, task); + imageView.setImageDrawable(asyncDrawable); + + // NOTE: This uses a custom version of AsyncTask that has been pulled from the + // framework and slightly modified. Refer to the docs at the top of the class + // for more info on what was changed. + task.executeOnExecutor(AsyncTask.DUAL_THREAD_EXECUTOR); + //END_INCLUDE(execute_background_task) + } + } + + /** + * Set placeholder bitmap that shows when the the background thread is running. + * + * @param bitmap + */ + public void setLoadingImage(Bitmap bitmap) { + mLoadingBitmap = bitmap; + } + + /** + * Set placeholder bitmap that shows when the the background thread is running. + * + * @param resId + */ + public void setLoadingImage(int resId) { + mLoadingBitmap = BitmapFactory.decodeResource(mResources, resId); + } + + /** + * Adds an {@link ImageCache} to this {@link ImageWorker} to handle disk and memory bitmap + * caching. + * @param fragmentManager + * @param cacheParams The cache parameters to use for the image cache. + */ + public void addImageCache(FragmentManager fragmentManager, + ImageCache.ImageCacheParams cacheParams) { + mImageCacheParams = cacheParams; + mImageCache = ImageCache.getInstance(fragmentManager, mImageCacheParams); + new CacheAsyncTask().execute(MESSAGE_INIT_DISK_CACHE); + } + + /** + * Adds an {@link ImageCache} to this {@link ImageWorker} to handle disk and memory bitmap + * caching. + * @param activity + * @param diskCacheDirectoryName See + * {@link ImageCache.ImageCacheParams#ImageCacheParams(android.content.Context, String)}. + */ + public void addImageCache(FragmentActivity activity, String diskCacheDirectoryName) { + mImageCacheParams = new ImageCache.ImageCacheParams(activity, diskCacheDirectoryName); + mImageCache = ImageCache.getInstance(activity.getSupportFragmentManager(), mImageCacheParams); + new CacheAsyncTask().execute(MESSAGE_INIT_DISK_CACHE); + } + + /** + * If set to true, the image will fade-in once it has been loaded by the background thread. + */ + public void setImageFadeIn(boolean fadeIn) { + mFadeInBitmap = fadeIn; + } + + public void setExitTasksEarly(boolean exitTasksEarly) { + mExitTasksEarly = exitTasksEarly; + setPauseWork(false); + } + + /** + * Subclasses should override this to define any processing or work that must happen to produce + * the final bitmap. This will be executed in a background thread and be long running. For + * example, you could resize a large bitmap here, or pull down an image from the network. + * + * @param data The data to identify which image to process, as provided by + * {@link ImageWorker#loadImage(Object, android.widget.ImageView)} + * @return The processed bitmap + */ + protected abstract Bitmap processBitmap(Object data); + + /** + * @return The {@link ImageCache} object currently being used by this ImageWorker. + */ + protected ImageCache getImageCache() { + return mImageCache; + } + + /** + * Cancels any pending work attached to the provided ImageView. + * @param imageView + */ + public static void cancelWork(ImageView imageView) { + final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); + if (bitmapWorkerTask != null) { + bitmapWorkerTask.cancel(true); + if (BuildConfig.DEBUG) { + final Object bitmapData = bitmapWorkerTask.mData; + Log.d(TAG, "cancelWork - cancelled work for " + bitmapData); + } + } + } + + /** + * Returns true if the current work has been canceled or if there was no work in + * progress on this image view. + * Returns false if the work in progress deals with the same data. The work is not + * stopped in that case. + */ + public static boolean cancelPotentialWork(Object data, ImageView imageView) { + //BEGIN_INCLUDE(cancel_potential_work) + final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); + + if (bitmapWorkerTask != null) { + final Object bitmapData = bitmapWorkerTask.mData; + if (bitmapData == null || !bitmapData.equals(data)) { + bitmapWorkerTask.cancel(true); + if (BuildConfig.DEBUG) { + Log.d(TAG, "cancelPotentialWork - cancelled work for " + data); + } + } else { + // The same work is already in progress. + return false; + } + } + return true; + //END_INCLUDE(cancel_potential_work) + } + + /** + * @param imageView Any imageView + * @return Retrieve the currently active work task (if any) associated with this imageView. + * null if there is no such task. + */ + private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) { + if (imageView != null) { + final Drawable drawable = imageView.getDrawable(); + if (drawable instanceof AsyncDrawable) { + final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable; + return asyncDrawable.getBitmapWorkerTask(); + } + } + return null; + } + + /** + * The actual AsyncTask that will asynchronously process the image. + */ + private class BitmapWorkerTask extends AsyncTask { + private Object mData; + private final WeakReference imageViewReference; + + public BitmapWorkerTask(Object data, ImageView imageView) { + mData = data; + imageViewReference = new WeakReference(imageView); + } + + /** + * Background processing. + */ + @Override + protected BitmapDrawable doInBackground(Void... params) { + //BEGIN_INCLUDE(load_bitmap_in_background) + if (BuildConfig.DEBUG) { + Log.d(TAG, "doInBackground - starting work"); + } + + final String dataString = String.valueOf(mData); + Bitmap bitmap = null; + BitmapDrawable drawable = null; + + // Wait here if work is paused and the task is not cancelled + synchronized (mPauseWorkLock) { + while (mPauseWork && !isCancelled()) { + try { + mPauseWorkLock.wait(); + } catch (InterruptedException e) {} + } + } + + // If the image cache is available and this task has not been cancelled by another + // thread and the ImageView that was originally bound to this task is still bound back + // to this task and our "exit early" flag is not set then try and fetch the bitmap from + // the cache + if (mImageCache != null && !isCancelled() && getAttachedImageView() != null + && !mExitTasksEarly) { + bitmap = mImageCache.getBitmapFromDiskCache(dataString); + } + + // If the bitmap was not found in the cache and this task has not been cancelled by + // another thread and the ImageView that was originally bound to this task is still + // bound back to this task and our "exit early" flag is not set, then call the main + // process method (as implemented by a subclass) + if (bitmap == null && !isCancelled() && getAttachedImageView() != null + && !mExitTasksEarly) { + bitmap = processBitmap(mData); + } + + // If the bitmap was processed and the image cache is available, then add the processed + // bitmap to the cache for future use. Note we don't check if the task was cancelled + // here, if it was, and the thread is still running, we may as well add the processed + // bitmap to our cache as it might be used again in the future + if (bitmap != null) { + if (Utils.hasHoneycomb()) { + // Running on Honeycomb or newer, so wrap in a standard BitmapDrawable + drawable = new BitmapDrawable(mResources, bitmap); + } else { + // Running on Gingerbread or older, so wrap in a RecyclingBitmapDrawable + // which will recycle automagically + drawable = new RecyclingBitmapDrawable(mResources, bitmap); + } + + if (mImageCache != null) { + mImageCache.addBitmapToCache(dataString, drawable); + } + } + + if (BuildConfig.DEBUG) { + Log.d(TAG, "doInBackground - finished work"); + } + + return drawable; + //END_INCLUDE(load_bitmap_in_background) + } + + /** + * Once the image is processed, associates it to the imageView + */ + @Override + protected void onPostExecute(BitmapDrawable value) { + //BEGIN_INCLUDE(complete_background_work) + // if cancel was called on this task or the "exit early" flag is set then we're done + if (isCancelled() || mExitTasksEarly) { + value = null; + } + + final ImageView imageView = getAttachedImageView(); + if (value != null && imageView != null) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "onPostExecute - setting bitmap"); + } + setImageDrawable(imageView, value); + } + //END_INCLUDE(complete_background_work) + } + + @Override + protected void onCancelled(BitmapDrawable value) { + super.onCancelled(value); + synchronized (mPauseWorkLock) { + mPauseWorkLock.notifyAll(); + } + } + + /** + * Returns the ImageView associated with this task as long as the ImageView's task still + * points to this task as well. Returns null otherwise. + */ + private ImageView getAttachedImageView() { + final ImageView imageView = imageViewReference.get(); + final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); + + if (this == bitmapWorkerTask) { + return imageView; + } + + return null; + } + } + + /** + * A custom Drawable that will be attached to the imageView while the work is in progress. + * Contains a reference to the actual worker task, so that it can be stopped if a new binding is + * required, and makes sure that only the last started worker process can bind its result, + * independently of the finish order. + */ + private static class AsyncDrawable extends BitmapDrawable { + private final WeakReference bitmapWorkerTaskReference; + + public AsyncDrawable(Resources res, Bitmap bitmap, BitmapWorkerTask bitmapWorkerTask) { + super(res, bitmap); + bitmapWorkerTaskReference = + new WeakReference(bitmapWorkerTask); + } + + public BitmapWorkerTask getBitmapWorkerTask() { + return bitmapWorkerTaskReference.get(); + } + } + + /** + * Called when the processing is complete and the final drawable should be + * set on the ImageView. + * + * @param imageView + * @param drawable + */ + private void setImageDrawable(ImageView imageView, Drawable drawable) { + if (mFadeInBitmap) { + // Transition drawable with a transparent drawable and the final drawable + final TransitionDrawable td = + new TransitionDrawable(new Drawable[] { + new ColorDrawable(android.R.color.transparent), + drawable + }); + // Set background to loading bitmap + imageView.setBackgroundDrawable( + new BitmapDrawable(mResources, mLoadingBitmap)); + + imageView.setImageDrawable(td); + td.startTransition(FADE_IN_TIME); + } else { + imageView.setImageDrawable(drawable); + } + } + + /** + * Pause any ongoing background work. This can be used as a temporary + * measure to improve performance. For example background work could + * be paused when a ListView or GridView is being scrolled using a + * {@link android.widget.AbsListView.OnScrollListener} to keep + * scrolling smooth. + *

+ * If work is paused, be sure setPauseWork(false) is called again + * before your fragment or activity is destroyed (for example during + * {@link android.app.Activity#onPause()}), or there is a risk the + * background thread will never finish. + */ + public void setPauseWork(boolean pauseWork) { + synchronized (mPauseWorkLock) { + mPauseWork = pauseWork; + if (!mPauseWork) { + mPauseWorkLock.notifyAll(); + } + } + } + + protected class CacheAsyncTask extends AsyncTask { + + @Override + protected Void doInBackground(Object... params) { + switch ((Integer)params[0]) { + case MESSAGE_CLEAR: + clearCacheInternal(); + break; + case MESSAGE_INIT_DISK_CACHE: + initDiskCacheInternal(); + break; + case MESSAGE_FLUSH: + flushCacheInternal(); + break; + case MESSAGE_CLOSE: + closeCacheInternal(); + break; + } + return null; + } + } + + protected void initDiskCacheInternal() { + if (mImageCache != null) { + mImageCache.initDiskCache(); + } + } + + protected void clearCacheInternal() { + if (mImageCache != null) { + mImageCache.clearCache(); + } + } + + protected void flushCacheInternal() { + if (mImageCache != null) { + mImageCache.flush(); + } + } + + protected void closeCacheInternal() { + if (mImageCache != null) { + mImageCache.close(); + mImageCache = null; + } + } + + public void clearCache() { + new CacheAsyncTask().execute(MESSAGE_CLEAR); + } + + public void flushCache() { + new CacheAsyncTask().execute(MESSAGE_FLUSH); + } + + public void closeCache() { + new CacheAsyncTask().execute(MESSAGE_CLOSE); + } +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/RecyclingBitmapDrawable.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/RecyclingBitmapDrawable.java new file mode 100644 index 000000000..5534a6aea --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/RecyclingBitmapDrawable.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; + +import com.example.android.common.logger.Log; +import com.example.android.displayingbitmaps.BuildConfig; + +/** + * A BitmapDrawable that keeps track of whether it is being displayed or cached. + * When the drawable is no longer being displayed or cached, + * {@link android.graphics.Bitmap#recycle() recycle()} will be called on this drawable's bitmap. + */ +public class RecyclingBitmapDrawable extends BitmapDrawable { + + static final String TAG = "CountingBitmapDrawable"; + + private int mCacheRefCount = 0; + private int mDisplayRefCount = 0; + + private boolean mHasBeenDisplayed; + + public RecyclingBitmapDrawable(Resources res, Bitmap bitmap) { + super(res, bitmap); + } + + /** + * Notify the drawable that the displayed state has changed. Internally a + * count is kept so that the drawable knows when it is no longer being + * displayed. + * + * @param isDisplayed - Whether the drawable is being displayed or not + */ + public void setIsDisplayed(boolean isDisplayed) { + //BEGIN_INCLUDE(set_is_displayed) + synchronized (this) { + if (isDisplayed) { + mDisplayRefCount++; + mHasBeenDisplayed = true; + } else { + mDisplayRefCount--; + } + } + + // Check to see if recycle() can be called + checkState(); + //END_INCLUDE(set_is_displayed) + } + + /** + * Notify the drawable that the cache state has changed. Internally a count + * is kept so that the drawable knows when it is no longer being cached. + * + * @param isCached - Whether the drawable is being cached or not + */ + public void setIsCached(boolean isCached) { + //BEGIN_INCLUDE(set_is_cached) + synchronized (this) { + if (isCached) { + mCacheRefCount++; + } else { + mCacheRefCount--; + } + } + + // Check to see if recycle() can be called + checkState(); + //END_INCLUDE(set_is_cached) + } + + private synchronized void checkState() { + //BEGIN_INCLUDE(check_state) + // If the drawable cache and display ref counts = 0, and this drawable + // has been displayed, then recycle + if (mCacheRefCount <= 0 && mDisplayRefCount <= 0 && mHasBeenDisplayed + && hasValidBitmap()) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "No longer being used or cached so recycling. " + + toString()); + } + + getBitmap().recycle(); + } + //END_INCLUDE(check_state) + } + + private synchronized boolean hasValidBitmap() { + Bitmap bitmap = getBitmap(); + return bitmap != null && !bitmap.isRecycled(); + } + +} diff --git a/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/Utils.java b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/Utils.java new file mode 100644 index 000000000..505d0efb1 --- /dev/null +++ b/samples/browseable/DisplayingBitmaps/src/com.example.android.displayingbitmaps/util/Utils.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.displayingbitmaps.util; + +import android.annotation.TargetApi; +import android.os.Build; +import android.os.Build.VERSION_CODES; +import android.os.StrictMode; + +import com.example.android.displayingbitmaps.ui.ImageDetailActivity; +import com.example.android.displayingbitmaps.ui.ImageGridActivity; + +/** + * Class containing some static utility methods. + */ +public class Utils { + private Utils() {}; + + + @TargetApi(VERSION_CODES.HONEYCOMB) + public static void enableStrictMode() { + if (Utils.hasGingerbread()) { + StrictMode.ThreadPolicy.Builder threadPolicyBuilder = + new StrictMode.ThreadPolicy.Builder() + .detectAll() + .penaltyLog(); + StrictMode.VmPolicy.Builder vmPolicyBuilder = + new StrictMode.VmPolicy.Builder() + .detectAll() + .penaltyLog(); + + if (Utils.hasHoneycomb()) { + threadPolicyBuilder.penaltyFlashScreen(); + vmPolicyBuilder + .setClassInstanceLimit(ImageGridActivity.class, 1) + .setClassInstanceLimit(ImageDetailActivity.class, 1); + } + StrictMode.setThreadPolicy(threadPolicyBuilder.build()); + StrictMode.setVmPolicy(vmPolicyBuilder.build()); + } + } + + public static boolean hasFroyo() { + // Can use static final constants like FROYO, declared in later versions + // of the OS since they are inlined at compile time. This is guaranteed behavior. + return Build.VERSION.SDK_INT >= VERSION_CODES.FROYO; + } + + public static boolean hasGingerbread() { + return Build.VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD; + } + + public static boolean hasHoneycomb() { + return Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; + } + + public static boolean hasHoneycombMR1() { + return Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; + } + + public static boolean hasJellyBean() { + return Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; + } + + public static boolean hasKitKat() { + return Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT; + } +} diff --git a/samples/browseable/MediaRouter/AndroidManifest.xml b/samples/browseable/MediaRouter/AndroidManifest.xml new file mode 100644 index 000000000..0b5bec450 --- /dev/null +++ b/samples/browseable/MediaRouter/AndroidManifest.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/MediaRouter/_index.jd b/samples/browseable/MediaRouter/_index.jd new file mode 100644 index 000000000..a46cae8dc --- /dev/null +++ b/samples/browseable/MediaRouter/_index.jd @@ -0,0 +1,10 @@ + + + +page.tags="MediaRouter" +sample.group=Media +@jd:body + +

+ Demonstrates how to create a custom media route provider. +

diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_pause.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..d30ba3cd1da63439d7174cb76a48d8e36108b0aa GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GiJmTwAr-gYTy*4ZFyL{x$ZIIELW5-iGh@dp#w#0)m%nr2 zcpqPuIeX61%tSN$5bqbJD+Sx(67n WbT}=PTDHi6D5eH61ZjdT zwn>8+0y8@-8jHqa!SO$!v77B|Rg>u%L`jNy1~J48=O(wwvJhCI?7g$Ro19dvTko&$ z-1|P(3&^AA0X%>Q@Br=uWLcI%iHiW?hWDL7BS6e>eJ;z=umLoYLJ2^oxaI&^FxEgM zqXFFkWMCU$f0LWyI6jp({{=`YpFyUsYr`@E>mgvb7>#QvVs4{ir+YwLGS35%cB=PqV)VFXyUm9*U(sPB3W zd>6-JE&TSL7W$H91lD7u^)X-@fz>$BWr^sm&9cN5fF=&1b3E?|ssQq_^Ej7NPNsV6Bqi{w|ZI^cI5MMS8Z{d07erp0*ev;*5`pEhr4Y7Xph&Wk3ZV- n`A&!blg|Tq01sd{J_Q&6LT``1`hBUG00000NkvXXu0mjft=-kg literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_stop.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6c0f40a9547c44582a4c4540fb6cf82cbac4c3 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gex5FlAr-gYTr}imP~dTOJP_o%kTdXWORJy2p}jx(_ii!u zoK&(tPS)*+Rb@olxl?(2{xJfzp##rJU!tQM7#Yq?VzFTS7d#6j@9FC2vd$@?2>|&5 BGC2SM literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_launcher.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..d3401145152eb051f1d9daf65b9b67df06d4eb3b GIT binary patch literal 5062 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_media_stop.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_media_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ff13695d9b4e7bd2477b77bd4a20721d472bb8 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;M!Q z+(IDCc z@J>I##X6%x&9&)B@?L&%!J~hU{@VEX=bD?5Kg|=2_U?J{uc*-Wq1?_V-#6^pZTW&P zPARtgoaCprzK_RLO_mD);Hj(H;-AM8)=c7f@cwdD>4e0ee;V>9hB6klN-vx4!Mfzb+Nf~r zS7#;8%60L6w^npLxWZ0a%bU%hfsrSHf%yod<@_@~40n4BS(9tmHE~?nrs%g_H!alsN+o4IgBSBpK1Pg_|LzU>uddg+dr7_{Cz-@ z_Y5EX35(cB9}xn=`{P_)D~qQtoR0bmhLqlC4GB6J@G_*1`wK6o&HL$QUFwp9K^A|-!ZhlH;S|yqWV^b?r z3y21m1NY_wHOPQ$2+mI{DNig)WpGT%PfAsA%PdMQ&o9a@R&WkBE!_Ip45*I5)78&q Iol`;+0PnQX9{>OV literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_add.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_add.png new file mode 100644 index 0000000000000000000000000000000000000000..444e8a5ee85ce5235f16c482457fd5ce76a51047 GIT binary patch literal 2194 zcmZ{lX*kpk7smg_7&{}1ku-KDYK)z-HTE^KMAn(HGt5{r$et`Ql)Y?25uxmqC1l2) ztwhKc9uy@>@#y*Xet19J=XafRo%=dp&UH?rxv3sI3qK100PF_(Xp0jf|B4BG692Hu zvYi0rYNUq-juX-bJ5DlYfBhT86YBpbU7EN0-(s-8mir0+^8&-$DK-GWm}h|2x^COO zl^y0Y{_b>N$LFKl8XA~)sY{~oO9QmCdS1>;S=oGe4T&#)mgbo+zsISH_%S*mTkOeM zZ|&V?=wO*BWVOLkH93K*h%w33wdZP}WcF8f@|Uv<2f(AjeW{O>cSh3YzZCpQ2XB($ z??-=_jhxR4|FXAF9B$bcEMyJ$JjPRIZW;i5%|AjD9zw@clV|+Dh%d@-Z$t7a5OyY! z6iC<*NiBQm*j-BaG=x5=U=F%r&dNLe>TVs5Zi~*0;2GPMu1--U`nx8vZKW1hvjzPq)L$# z$k^e#=}tqsZQlag%D(R?*yz2;|7>tRweyls}&C)Xj#cZ>F7 zUSW}&h_%ElgpP!0&WZ@aR3fTL$NFRNSUih4wSO|Tz=X)#VL$1y(VsdyV1ss_d|nyb zBj}MgFnqZxjSrIJ^*b?>&^1EeQ8zv0hqGKv9xo1An*RL&Z9;b|9W-S%8%doPAMbbj zqgl0B_}P@fmirF++*B6?p3FJ=B&h`4l9f_@WZmu9)^`~(#gQub=FqXU-wXr0XW>7I zIg)EvymQM=V|3+;G6}^bD|ico`KOXK_~O^55)LH%E|N4B_7(47_7BwecM9h>hdn9i z5RgQQlqx#oJym?p$N1eKhd z;|_u@R9*d+_Q+HYQE*oKGZjX5R>?I~bm;T()*9clSTYbgXt*6o^7BJ14`mi%x{)6bngjfJE8U@ux#hLeh ztnI`iyQ0P&6UbcJOhU6miVJ$N`T}y%I@tX+9I!`<0h%MGfM^UusgqP^qMo@DteS&I z%NXF1rZqVj(Nh>1KM?i%SZW!m?ps7kX}A+35H(cuo=;vhogPY%|5G+K!XONQ=^f9E z-BJ3&|4ouxrEZtO=US3hppcTNmg0{K5sel!!pQ-lDBs?e$y=e@HM}_E5*=23&ApCCJ66?$>VJimdtor07i-&V+Rzl;1 z--xEH(}8t^M+eDQAy&${w1>%F3;RqU8R5uuNyL;*B|5OUNPM5Tl*B% zj@S$~T=_-Av=%p+Q>D87A||_|`uLpu0MHCYD$es-SZa zfn7E?Nvb-8_>{??Di~V+cwHxfthe(Eswx62$pru&`NGMzkhM@;@qt7K?#5?QrO|!Y zmulzKD{Ib8D~~-9Vbx?BEA5?ZnQQ&6aI7s?vpKrAy;{fe7?B0LR%BnI_f9vu zz!6G%Rq*{i5^z>7+-M;@A5f0JIU2c=ni_pOZ#PYG#jg^M zc;SolGYR`M0$#qcgI)C~RK_HS2bWnrMFQnW=;;AaOYOrBRCC`IGwqkcO%C-z%c-6{ zJ`3VNXACG}*ytVK{$-m(qkN=Xf5GDL^KE5^RXS`DeQmc+gMd%fQ3bJX6;-x-IE#nW zi#$UJKx&kUoTuze2u@5fr-3hy zHU2(Io-(@~_T9!u=Lpi^8D^;#2vY0D>{}`M?5h`B8$r5?WDQXZA`+E@@SfiMH%1k= z1`lYqV61xt|1(&tH=RL`R>(06ac=X*d~l?LJ>-1Pay$jB-p$w>qDwl=tgB0P68uEl zUb3bGiZZ&QMhbm;1tzS+?4;|gY5Mb*iC74P)t)7qT3GQ1%DE zIj_5KgpnN0}yppPdoD5P~6^Sf0 zCD8uI;ETt4x`qCK!z6cq(1`)|cY-C}EilA|fCIF!cvl?Uz}LkcXMuCUh6d1Zmrt4i M107RzwYGE2zYr|yT>t<8 literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_delete.png b/samples/browseable/MediaRouter/res/drawable-hdpi/ic_menu_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..24d8f6a4be54237073aa7f4862ac5afc55a7edca GIT binary patch literal 1413 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}trX+877l!}s{b%+Ad7K3vk;OpT z1B~5HX4`=T%L*LRfizez!?|}o;S3Bcy`CBRbl%lU8h&YQ!% zOS9*b?ewKlUB_=09oLxJyz*+Lo!UNrk*6~r6}G*rj7sm5&nWwC@#fRL2RGHv%gI;I zj97AZmsjBV5AU{pk=n03`}rd22BxR#Z1;>@mwQ;pg%9(`s$ zvNk45o+0&T4Ex#DsmB(*ed&_3R>EYF$TNkFcF#p4OM6`1FWo-dx;*d95rHJ@UppO( zRBY75zyDO9sWFA0@15ECC--^Q*14-FFIp1v*Ti+-h556t|GoL-)h4|YIeBU;A}7T$ z2!zbLHodQJUyzN?WTA;CH?9b=T&{lUyjFKHbNq2_>FZNUjP{pj{JUYze*gSxaaK`( zh8?A)x#w9IFX-5*5X^1v|KYV8!{w73TbX_~3$E+z>e{ls+M(fK!nNmYqN4h*zQ0&! zb9CNhnMxB@r&6U{`FFgbx5N7tUa1Dws7FgH2i%BV{4KRekE>|{LttQF$j1sBzTAuJ z7r8kzbuRY*n$zs1e#&@K&bMFBxgKABy7J)PgZ~!z_18vNn(JTh zc&cjmb{P|fGQRhcCfD;{u6^42G$Zc4QtE4dpt1#et2f8nX}ZO6)eN(>vW zUE5myQCYX^QmkaxY{ngVswb@))N2>&Gq46_zqXxX%5-Il${Ta0jkly-Z*@8RV(rke z4Or6Pb#`)EW(t!?aL!t7hK8lfR8lU?^!Hszs;3@F-h3~Osi(=;Cf22~t*ZUC^n(>kt!67MjFPz} zr@MIV!;KZL&$h(z8(nt}YgZQd@I0mNL4jV7W69euA(6YqU6?+%?+M#!X#MwgyyV5S zZ2_#8Tp#=M&+X9)%<4KOk!+x(q?IKUY(D*oh`h=DxIIORR;KZ%PlcrkZQsbj<8zFC z#*|ABPE>p;NYG%dj4bk9`%8P>rdc67GM^ngzk7#T>04oj1sWRufLXwmXw!Tg4o4dFOWDtn@#1W{>}$Zk|-n zz`kBC#5QQ<|d}62BjvZR2H60 RwE-$(@O1TaS?83{1OQadY$X5y literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-hdpi/tile.9.png b/samples/browseable/MediaRouter/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MQNTcjv*DdlK%YvZ_jLY;KT`zX$+@~lcus~rX(d9r71A} z`ThO9P5{3!^Gb##?W|{)7_*qnaG3jle#z^Ewh3!L+OJDkI{yJ07hC^5_4M=e{<^J- zDml>PE_~uZlFg^R4mI68TQwRo7c5S=!nl}EqV&KDW;a=bR}F#eJys0y-7h$|s5bl0 lli9jBL8OOCgh3#I;rk1rLp{$0<^b(t@O1TaS?83{1OU+IK{x;a literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_play.png b/samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_play.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3bf86fd380b747c6dd98b9c79521a83b02c4f0 GIT binary patch literal 375 zcmV--0f_#IP)H67b1<;yPK2|g>4L5++lJeogWtV*P z4WJdkJ3ONXL}>y*FWZoot!&H3$n>5w8SvTajbrR1HxmE}oOap7`Ubeu?kTyaprFEn zI|FKn6BJHOgfOMzHTNn|!+ic`p8EojR9J9-2hQ8+g7A-WCyQ)>LT+{)@LzyQux Vb0;(QlAHhl002ovPDHLkV1gubotXdt literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_stop.png b/samples/browseable/MediaRouter/res/drawable-mdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..ddaf37a268f0cc570bfb9364f0d3af762f09fb37 GIT binary patch literal 188 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 Vy^B>332OiV002ovPDHLkV1fxHmZksz literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_pause.png b/samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6b2a17b5626507ff2141f1bd5f893141be53c8 GIT binary patch literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KMV|vqMj~}As)xyPI2^Oaui@#U46h~$AZ_zA2^Sx|6sbm;Un*!h9CU; zMPD@aJ~AiWzAC%;W~Xd|&6J$d#w+$Is-hZo zX^;C)DKqV8sat$L;kxAPle_2jaY?XKs;7i_<3m6-KG0(Q8eV{r(~v8qG>QTwKBDUXka;TZ$40i49JGy v{Irtt#G+IN$CUh}R0X%pqSW&IqU>S?=U~&qt&h!s>KHs-{an^LB{Ts5uHw)V literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_play.png b/samples/browseable/MediaRouter/res/drawable-mdpi/ic_media_play.png new file mode 100644 index 0000000000000000000000000000000000000000..7966bbc5161a898264720bd6f5a6861ed4fc7ba5 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KR^{#o-U3d9>?!q_4OAH6k&Vtea_6x?Ac9DTP61S^ej8o?(o`u(M2`2 zcRlt8_Ev}MG{!&BH#D3$fkV;5X^Y;y-0iysBSR7u{QaRAa%lnq^9f9DE904SOo|*k-LO+o&#)*FW!bU1TI@^`bZ1 zr<-!CJgMswdJxsa8@Qx(R;s3GmbB6v4iey7aG+`1cv z(aq^L(!G+GpSr~`a&&MAd}KQx_bTUx@3~DbXWh0gOP`w-z*g|Axx=NwA=mqjlfl$K zG6q(>`)4LiUitllSRKEF;6#lJoxjelQ=1v>YszA!(l|GIOFfgG^=bt*p{2iXy(_Wb zb3g0q1>V&eP1+26`g{L~1u7(I|Id7L^2n|$&r*EaJz5($9CWfWvl6~M{#N+=OGsVJ zZM9cxIRpfg9=yKu;lhtBht<&&93#z7s7;&~e}9FwgMgsYqnxay39SHqHF&n&-BeOGTr1rqF?xQE$)sf9uzMckRvGs=eRu=t(T` zhlG} zUEq=Y_bbni#Q~G1Xo+h?iE~kEVo7Fxok4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?HN@zUM8KS05^o-U3d9>?EKImmm+fX8+JT(QO-4V(D14VZ-uoR9L%UC>>SG}l9> zYeK^f8LnJS&*)C&uc{N1_uuGCP7tcf-<0)G(2j|r{eq|2t8@OV!&rFco_v;f)%;eU z#>^`pJM)6vCtPWN!zz6*YT-PS5HGO@9xSMQlg|6v~`zvpoFL=nJ#Nl{+Z}obg22KVStHK3Ss~PmS zH-=r~XmD^l8sGW&{>}K%69Ez%m|{*=8kz(IZRcV-;^5C@p0>pCkl{az5XL`N*Zzmh z^AZVhHM+TDDbVAhC9V-A&PAz-C7Jno3L%-fsSM`&MrQhkhHvWy*8>%(f)u1AmZVxG zgH)w57#SEE>H?90d5EE*m8q$fp@FV}g_VJUR_~j?C>nC}Q!>*k(KHyFTA5lvG_V}F zHy@}$24q8Uep*R+Vo@rCV@iHfs)Ac)QEGX9QFgI{bFgXQ*2iW*bqt=aelF{r5}E+3 C3$wZa literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-mdpi/ic_menu_add.png b/samples/browseable/MediaRouter/res/drawable-mdpi/ic_menu_add.png new file mode 100644 index 0000000000000000000000000000000000000000..361c7c460ef8cd5225a54f6ccb636cad9b4e3aea GIT binary patch literal 1339 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_play.png b/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_play.png new file mode 100644 index 0000000000000000000000000000000000000000..7f709bbf146eea3dfc5cd496b6f9c4127a25c304 GIT binary patch literal 531 zcmV+u0_^>XP)N8~ZMCgBnV%n`$I`Fw3PmED7jW^P=nL8dW|fHqhv!n=UT1t9`~<`TqqRfCF#<4!{9809^YPU;qfm Vpkraw!TbOK002ovPDHLkV1h-P>@ENR literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_stop.png b/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..2b07de4c241a5d9257c1dad3ffb913662acbd83c GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xnmk<`Ln>~)xwVnEK|#PF(B#}A<_&GD?=x8R?rIE(ee$=h zYeIEPUyzFDB$doV(Wfd literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/MediaRouter/res/drawable-xhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..16bd6124501ed2f1038cec179399b5fbf140c62f GIT binary patch literal 7207 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_pause.png b/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b376a121dd4d3fa16954a6de51896ee44fa845 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XPJ6mIhE&{ob7v!Ovw?s^po3(inJ)JZFSbMvHpQvp1>UCx zENZ(HesW!??v;LB@1s+nZg_=GfQ2`>^V`bwc~vcN@0I z{NRZA^!wBDhMiB3+%?Q-f5s-y$jIWrz$oCrz#_mv3G;{UqxGH97uNkgx%;Wpd60L3 d-~g{I6A#0|Bmw75+Y);~BA%{(F6*2UngGICSIYnZ literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_play.png b/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_play.png new file mode 100644 index 0000000000000000000000000000000000000000..df5994710d7bb24ecaf2b9ecea8c2eadcec58a8b GIT binary patch literal 778 zcmV+l1NHogP)3 zo!NcUgjNdx000000000009K^i?QT+q)mZz=2kUe?=d$)>-A^Wy-;`Hhz=?b~mi1FU z|05FaDY3qQZCUHG4#U^7#v)=$sdWV;!b~`+w52&E*A8n8zs(%CJ0Dv=|{Lj z$Yabz!UF**hc$*IMVdS|jwHyBWdhytL#tzWk0q^F6*I2`X zfW=tjAhxAB0(1pb=R=4!Ha*1N76l~sTMlAx%L3ATIJ6vVSQoGuYnY3@y$DE{i@n<| zpO}fgz3qU-`H*6bX;bHeX93k?Yhz>Y5(Fe(V{ef#LO{N@lwyt0mL3t1hY)KVHzD>e zRX}wDL)+ume_$HNHId zW(Q>EJ0 zSfATCWM|q>T)Kc!Ec}>bsD7Uhg}>t-px@_jr0@eSVtM-fpzdQO0+#prf!47S0SfT} z0zT&|L5Et_*i*qsn2^6pc)e+ zpuzD$NdmIP#H9`j2V znAnQ|m+^rG0p??3%K}`)#3tcim;e9(000000002Ma{dZ10G2mS)pG@c;Q#;t07*qo IM6N<$f}v7av;Y7A literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_stop.png b/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..f42d5252a263509119f6aca37dc1879a933c7621 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGok|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XR(ZNOhE&{ob7!Mqg9493;Fp-g*H~|~D&AEMP7&O?eL+K8 z_4$)nw86@WE>gTe~DWM4f&=^p& literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/MediaRouter/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..4b1d92015cca091f02cbbf0e7f911ce4ab2dd1fb GIT binary patch literal 12868 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 z z25nTYX%6uPJJk^qKV)c*o0&~Q+gZgFH1UcT==`^*dpz)5onMlxuo@b;?aggOcyVLC z?rf|&1(%<_0%j785%`$eAn`jvtR*_%p6~E&zi>7{~(5I4}=E z9tkL$QxxSgkRXC0ltd(DkfLQJ4MH#&JhK+LEv;sj2e#Nr=i8KqnkaU=U7?#5NVFoN zLZOgyNK%GrWa9OJ+DRser-uwCj-AL0sYe2kGTKeDMs=Qf+7H1GtJM*45DyZ?QYI#L zC?WxhzMsa`(~fBk|90b8?YO=kVzGu}vKBe)JzCR4Fw5P)4W)|A8|`}Ju}85xCUMq$ z9MFoX^Xx`&Jy(O03K3FrP?2C>MMzbRyd}wMDXU6ltC$;d9EU|&lrt==WXY`PIB*?3Ya0D9g<4zsB9iy8n|ikvSu##qme63`ML0)9tAA z*-E;f zgPq4eUv%EQ{Bok#ii0V6bSHfN@!8IUb4;-RL5B}NeOJ*YNqc2MgPG4;U#zP`@HY- z`#s;+US3*~k(QmN)9EsNURMCD`P!SB48EN=1_ZEdP~BB(g;c9X8HLl?LsAU~`2?np z3vf)RIs6G%q|@C}%Ll8}D*q!iD+wk>(=o*a8K8B#qAf9*VH-FVs^RK*(FR|6|1=Eo zAsbvt_))*?$(D#b`hva4G}Eghnw!$87K-FAetEF#b}cg5gGtq|G>uqR{dK18YjC zmJYZ)%eH`IgX>jQrV%6>jhdonlcdxknAK|4IB?tuG>nmEQDtIAF_M#DaB&e<;boPV zL`Y*~YNRIB1_Mu*LJ(xXe}!0#EGG)242dx^f|*c65VW`!wIgbP`^Sw{wIji1nL`3x zL~2r4P>Vq zQJd~;pE%RDJJq0%rXSh6?>j@@o-aFp+je=v?UdP^zKy>1rn`@HbdDHV`GMkfU(Eb| zeq;Vsy>&d)o!sX>A#Z;rw{_}?vj?-QKRx+u|8RK{F|gV2=;-mTVCHL%yVjp7c{6Wq z=i@Jo9@3xrwHGz)30qJ@*08-Rn401Y*zeK%+QJvSCw714NSl9eP3eK|wex%b*q(H_ zV@LS(CG)kN`u4Gp;mX?h?cdgHdRs51557xH7ySr7Jmc_M7e-3d>B=YVH>kf}?_s+R f&y8RB^EOmBHZ=58ani+Sv_GKFUFv$nQT^24G*j%K literal 0 HcmV?d00001 diff --git a/samples/browseable/MediaRouter/res/drawable/list_background.xml b/samples/browseable/MediaRouter/res/drawable/list_background.xml new file mode 100644 index 000000000..be7240bb6 --- /dev/null +++ b/samples/browseable/MediaRouter/res/drawable/list_background.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/browseable/MediaRouter/res/layout-land/grid_layout_2.xml b/samples/browseable/MediaRouter/res/layout-land/grid_layout_2.xml new file mode 100644 index 000000000..da161230a --- /dev/null +++ b/samples/browseable/MediaRouter/res/layout-land/grid_layout_2.xml @@ -0,0 +1,63 @@ + + + + + + + + + + +