From 0f8cf752281766cbc5d463dbe5cc8bfb076415d7 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 15 Oct 2013 07:55:24 -0500 Subject: [PATCH] Remove GreenDroid --- astrid/build.gradle | 7 +- astrid/project.properties | 5 +- astrid/src/main/AndroidManifest.xml | 1 - .../todoroo/astrid/adapter/TaskAdapter.java | 68 +-- .../todoroo/astrid/adapter/UpdateAdapter.java | 99 +--- .../todoroo/astrid/helper/AsyncImageView.java | 37 +- .../astrid/notes/EditNoteActivity.java | 18 +- .../astrid/utility/ResourceDrawableCache.java | 80 --- .../src/main/res/drawable/icn_add_contact.png | Bin 508 -> 0 bytes astrid/src/main/res/drawable/icn_anyone.png | Bin 678 -> 0 bytes .../res/drawable/icn_anyone_transparent.png | Bin 571 -> 0 bytes .../res/drawable/icn_default_person_image.png | Bin 1845 -> 0 bytes .../src/main/res/layout/task_adapter_row.xml | 21 - .../res/layout/task_adapter_row_simple.xml | 21 - .../main/res/layout/update_adapter_row.xml | 33 +- .../layout/update_adapter_row_no_caption.xml | 77 --- astrid/src/main/res/values/keys.xml | 3 - .../src/main/res/values/strings-updates.xml | 3 - astrid/src/main/res/values/styles.xml | 6 +- greendroid/build.gradle | 29 -- greendroid/project.properties | 15 - greendroid/src/main/AndroidManifest.xml | 25 - .../greendroid/app/ActionBarActivity.java | 144 ------ .../main/java/greendroid/app/GDActivity.java | 303 ------------ .../java/greendroid/app/GDApplication.java | 152 ------ .../java/greendroid/app/GDListActivity.java | 180 ------- .../java/greendroid/app/GDTabActivity.java | 201 -------- .../graphics/drawable/ActionBarDrawable.java | 72 --- .../graphics/drawable/DrawableStateSet.java | 30 -- .../java/greendroid/image/ImageCache.java | 65 --- .../java/greendroid/image/ImageLoader.java | 201 -------- .../java/greendroid/image/ImageProcessor.java | 40 -- .../java/greendroid/image/ImageRequest.java | 130 ----- .../src/main/java/greendroid/util/Config.java | 40 -- .../main/java/greendroid/util/GDUtils.java | 65 --- .../main/java/greendroid/util/Md5Util.java | 38 -- .../src/main/java/greendroid/util/Time.java | 35 -- .../java/greendroid/widget/ActionBarHost.java | 62 --- .../java/greendroid/widget/ActionBarItem.java | 297 ----------- .../greendroid/widget/AsyncImageView.java | 466 ------------------ .../java/greendroid/widget/GDActionBar.java | 309 ------------ .../java/greendroid/widget/ItemAdapter.java | 453 ----------------- .../widget/LoaderActionBarItem.java | 74 --- .../widget/NormalActionBarItem.java | 59 --- .../java/greendroid/widget/QuickAction.java | 58 --- .../greendroid/widget/QuickActionBar.java | 150 ------ .../greendroid/widget/QuickActionGrid.java | 122 ----- .../greendroid/widget/QuickActionWidget.java | 326 ------------ .../greendroid/widget/SegmentedAdapter.java | 83 ---- .../java/greendroid/widget/SegmentedBar.java | 282 ----------- .../java/greendroid/widget/SegmentedHost.java | 181 ------- .../widget/item/DescriptionItem.java | 54 -- .../greendroid/widget/item/DrawableItem.java | 91 ---- .../java/greendroid/widget/item/Item.java | 134 ----- .../greendroid/widget/item/LongTextItem.java | 45 -- .../greendroid/widget/item/ProgressItem.java | 93 ---- .../greendroid/widget/item/SeparatorItem.java | 55 --- .../greendroid/widget/item/SubtextItem.java | 90 ---- .../greendroid/widget/item/SubtitleItem.java | 79 --- .../java/greendroid/widget/item/TextItem.java | 73 --- .../greendroid/widget/item/ThumbnailItem.java | 79 --- .../widget/itemview/DescriptionItemView.java | 45 -- .../widget/itemview/DrawableItemView.java | 60 --- .../greendroid/widget/itemview/ItemView.java | 26 - .../widget/itemview/LongTextItemView.java | 45 -- .../widget/itemview/ProgressItemView.java | 57 --- .../widget/itemview/SeparatorItemView.java | 46 -- .../widget/itemview/SubtextItemView.java | 51 -- .../widget/itemview/SubtitleItemView.java | 51 -- .../widget/itemview/TextItemView.java | 45 -- .../widget/itemview/ThumbnailItemView.java | 59 --- .../src/main/res/anim/gd_grow_from_bottom.xml | 38 -- .../gd_grow_from_bottomleft_to_topright.xml | 38 -- .../gd_grow_from_bottomright_to_topleft.xml | 38 -- .../src/main/res/anim/gd_grow_from_top.xml | 38 -- .../gd_grow_from_topleft_to_bottomright.xml | 38 -- .../gd_grow_from_topright_to_bottomleft.xml | 38 -- greendroid/src/main/res/anim/gd_rack.xml | 24 - .../main/res/anim/gd_shrink_from_bottom.xml | 38 -- .../gd_shrink_from_bottomleft_to_topright.xml | 38 -- .../gd_shrink_from_bottomright_to_topleft.xml | 38 -- .../src/main/res/anim/gd_shrink_from_top.xml | 38 -- .../gd_shrink_from_topleft_to_bottomright.xml | 38 -- .../gd_shrink_from_topright_to_bottomleft.xml | 38 -- .../res/drawable-hdpi/gd_action_bar_add.png | Bin 1343 -> 0 bytes .../gd_action_bar_all_friends.png | Bin 545 -> 0 bytes .../drawable-hdpi/gd_action_bar_compass.png | Bin 674 -> 0 bytes .../drawable-hdpi/gd_action_bar_compose.png | Bin 1390 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_edit.png | Bin 1393 -> 0 bytes .../drawable-hdpi/gd_action_bar_export.png | Bin 550 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_eye.png | Bin 491 -> 0 bytes .../drawable-hdpi/gd_action_bar_gallery.png | Bin 340 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_group.png | Bin 461 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_help.png | Bin 575 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_home.png | Bin 425 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_info.png | Bin 479 -> 0 bytes .../gd_action_bar_item_focused.9.png | Bin 253 -> 0 bytes .../gd_action_bar_item_pressed.9.png | Bin 258 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_list.png | Bin 246 -> 0 bytes .../drawable-hdpi/gd_action_bar_locate.png | Bin 591 -> 0 bytes .../gd_action_bar_locate_myself.png | Bin 1496 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_mail.png | Bin 456 -> 0 bytes .../drawable-hdpi/gd_action_bar_refresh.png | Bin 683 -> 0 bytes .../drawable-hdpi/gd_action_bar_search.png | Bin 641 -> 0 bytes .../drawable-hdpi/gd_action_bar_settings.png | Bin 566 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_share.png | Bin 681 -> 0 bytes .../drawable-hdpi/gd_action_bar_slideshow.png | Bin 372 -> 0 bytes .../gd_action_bar_sort_by_size.png | Bin 1229 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_star.png | Bin 1416 -> 0 bytes .../gd_action_bar_take_photo.png | Bin 1558 -> 0 bytes .../res/drawable-hdpi/gd_action_bar_talk.png | Bin 1180 -> 0 bytes .../drawable-hdpi/gd_action_bar_trashcan.png | Bin 413 -> 0 bytes .../gd_quick_action_arrow_up.png | Bin 620 -> 0 bytes .../gd_quick_action_bar_arrow_down.png | Bin 552 -> 0 bytes .../gd_quick_action_bar_background.png | Bin 1649 -> 0 bytes .../gd_quick_action_bar_bottom_frame.9.png | Bin 515 -> 0 bytes .../gd_quick_action_bar_grip_left.9.png | Bin 1353 -> 0 bytes .../gd_quick_action_bar_grip_right.9.png | Bin 1402 -> 0 bytes .../gd_quick_action_bar_item_normal.9.png | Bin 328 -> 0 bytes .../gd_quick_action_bar_item_pressed.9.png | Bin 233 -> 0 bytes .../gd_quick_action_bar_item_selected.9.png | Bin 237 -> 0 bytes .../gd_quick_action_grid_arrow_down.png | Bin 1486 -> 0 bytes .../gd_quick_action_grid_bg.9.png | Bin 248 -> 0 bytes .../gd_quick_action_grid_bottom_frame.9.png | Bin 1403 -> 0 bytes ...d_quick_action_grid_selector_focused.9.png | Bin 2185 -> 0 bytes ...d_quick_action_grid_selector_pressed.9.png | Bin 1963 -> 0 bytes .../gd_quick_action_top_frame.9.png | Bin 518 -> 0 bytes .../gd_segment_checkmark_off.png | Bin 795 -> 0 bytes .../drawable-hdpi/gd_segment_checkmark_on.png | Bin 982 -> 0 bytes .../res/drawable-hdpi/gd_segment_divider.png | Bin 316 -> 0 bytes .../gd_segment_label_focused.9.png | Bin 467 -> 0 bytes .../gd_segment_label_normal.9.png | Bin 436 -> 0 bytes .../gd_segment_label_pressed.9.png | Bin 461 -> 0 bytes .../gd_tab_indicator_normal.9.png | Bin 205 -> 0 bytes .../gd_tab_indicator_pressed.9.png | Bin 203 -> 0 bytes .../gd_tab_indicator_selected.9.png | Bin 203 -> 0 bytes .../gd_tab_indicator_unselected.9.png | Bin 2844 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_add.png | Bin 1459 -> 0 bytes .../gd_action_bar_all_friends.png | Bin 374 -> 0 bytes .../drawable-mdpi/gd_action_bar_compass.png | Bin 453 -> 0 bytes .../drawable-mdpi/gd_action_bar_compose.png | Bin 1327 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_edit.png | Bin 1392 -> 0 bytes .../drawable-mdpi/gd_action_bar_export.png | Bin 1275 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_eye.png | Bin 360 -> 0 bytes .../drawable-mdpi/gd_action_bar_gallery.png | Bin 291 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_group.png | Bin 368 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_help.png | Bin 409 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_home.png | Bin 1317 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_info.png | Bin 369 -> 0 bytes .../gd_action_bar_item_focused.9.png | Bin 1089 -> 0 bytes .../gd_action_bar_item_pressed.9.png | Bin 1089 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_list.png | Bin 213 -> 0 bytes .../drawable-mdpi/gd_action_bar_locate.png | Bin 1278 -> 0 bytes .../gd_action_bar_locate_myself.png | Bin 1688 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_mail.png | Bin 375 -> 0 bytes .../drawable-mdpi/gd_action_bar_refresh.png | Bin 1392 -> 0 bytes .../drawable-mdpi/gd_action_bar_search.png | Bin 1330 -> 0 bytes .../drawable-mdpi/gd_action_bar_settings.png | Bin 422 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_share.png | Bin 1373 -> 0 bytes .../drawable-mdpi/gd_action_bar_slideshow.png | Bin 316 -> 0 bytes .../gd_action_bar_sort_by_size.png | Bin 1294 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_star.png | Bin 1400 -> 0 bytes .../gd_action_bar_take_photo.png | Bin 1561 -> 0 bytes .../res/drawable-mdpi/gd_action_bar_talk.png | Bin 1166 -> 0 bytes .../drawable-mdpi/gd_action_bar_trashcan.png | Bin 311 -> 0 bytes .../gd_quick_action_arrow_up.png | Bin 404 -> 0 bytes .../gd_quick_action_bar_arrow_down.png | Bin 445 -> 0 bytes .../gd_quick_action_bar_background.png | Bin 1306 -> 0 bytes .../gd_quick_action_bar_bottom_frame.9.png | Bin 390 -> 0 bytes .../gd_quick_action_bar_grip_left.9.png | Bin 573 -> 0 bytes .../gd_quick_action_bar_grip_right.9.png | Bin 585 -> 0 bytes .../gd_quick_action_bar_item_normal.9.png | Bin 275 -> 0 bytes .../gd_quick_action_bar_item_pressed.9.png | Bin 250 -> 0 bytes .../gd_quick_action_bar_item_selected.9.png | Bin 250 -> 0 bytes .../gd_quick_action_grid_arrow_down.png | Bin 1209 -> 0 bytes .../gd_quick_action_grid_bg.9.png | Bin 1010 -> 0 bytes .../gd_quick_action_grid_bottom_frame.9.png | Bin 1191 -> 0 bytes ...d_quick_action_grid_selector_focused.9.png | Bin 1690 -> 0 bytes ...d_quick_action_grid_selector_pressed.9.png | Bin 1608 -> 0 bytes .../gd_quick_action_top_frame.9.png | Bin 380 -> 0 bytes .../gd_segment_checkmark_off.png | Bin 612 -> 0 bytes .../drawable-mdpi/gd_segment_checkmark_on.png | Bin 712 -> 0 bytes .../res/drawable-mdpi/gd_segment_divider.png | Bin 1059 -> 0 bytes .../gd_segment_label_focused.9.png | Bin 363 -> 0 bytes .../gd_segment_label_normal.9.png | Bin 315 -> 0 bytes .../gd_segment_label_pressed.9.png | Bin 349 -> 0 bytes .../gd_tab_indicator_normal.9.png | Bin 206 -> 0 bytes .../gd_tab_indicator_pressed.9.png | Bin 216 -> 0 bytes .../gd_tab_indicator_selected.9.png | Bin 224 -> 0 bytes .../gd_tab_indicator_unselected.9.png | Bin 2839 -> 0 bytes .../main/res/drawable/gd_action_bar_item.xml | 31 -- .../res/drawable/gd_quick_action_bar_item.xml | 39 -- .../gd_quick_action_grid_selector.xml | 35 -- .../res/drawable/gd_segment_checkmark.xml | 47 -- .../main/res/drawable/gd_segment_label.xml | 36 -- .../main/res/drawable/gd_tab_indicator.xml | 44 -- .../res/layout/gd_action_bar_dashboard.xml | 39 -- .../main/res/layout/gd_action_bar_empty.xml | 37 -- .../res/layout/gd_action_bar_item_base.xml | 24 - .../res/layout/gd_action_bar_item_loader.xml | 36 -- .../main/res/layout/gd_action_bar_normal.xml | 46 -- .../main/res/layout/gd_content_dashboard.xml | 44 -- .../src/main/res/layout/gd_content_empty.xml | 40 -- .../src/main/res/layout/gd_content_normal.xml | 39 -- .../res/layout/gd_description_item_view.xml | 28 -- .../main/res/layout/gd_drawable_item_view.xml | 45 -- .../res/layout/gd_list_content_dashboard.xml | 52 -- .../main/res/layout/gd_list_content_empty.xml | 52 -- .../res/layout/gd_list_content_normal.xml | 51 -- .../res/layout/gd_long_text_item_view.xml | 29 -- .../main/res/layout/gd_progress_item_view.xml | 53 -- .../main/res/layout/gd_quick_action_bar.xml | 90 ---- .../res/layout/gd_quick_action_bar_item.xml | 29 -- .../main/res/layout/gd_quick_action_grid.xml | 62 --- .../res/layout/gd_quick_action_grid_item.xml | 25 - greendroid/src/main/res/layout/gd_segment.xml | 31 -- .../res/layout/gd_separator_item_view.xml | 28 -- .../main/res/layout/gd_subtext_item_view.xml | 49 -- .../main/res/layout/gd_subtitle_item_view.xml | 53 -- .../src/main/res/layout/gd_tab_content.xml | 74 --- .../src/main/res/layout/gd_tab_indicator.xml | 31 -- .../src/main/res/layout/gd_text_item_view.xml | 31 -- .../res/layout/gd_thumbnail_item_view.xml | 57 --- .../src/main/res/values-de/gd_strings.xml | 50 -- .../src/main/res/values-fr/gd_strings.xml | 50 -- .../src/main/res/values-land/gd_styles.xml | 34 -- .../src/main/res/values-v5/gd_themes.xml | 100 ---- greendroid/src/main/res/values/gd_attrs.xml | 178 ------- greendroid/src/main/res/values/gd_colors.xml | 25 - greendroid/src/main/res/values/gd_dimens.xml | 41 -- greendroid/src/main/res/values/gd_ids.xml | 29 -- greendroid/src/main/res/values/gd_strings.xml | 50 -- greendroid/src/main/res/values/gd_styles.xml | 240 --------- greendroid/src/main/res/values/gd_themes.xml | 105 ---- settings.gradle | 1 - 235 files changed, 26 insertions(+), 9208 deletions(-) delete mode 100644 astrid/src/main/java/com/todoroo/astrid/utility/ResourceDrawableCache.java delete mode 100644 astrid/src/main/res/drawable/icn_add_contact.png delete mode 100644 astrid/src/main/res/drawable/icn_anyone.png delete mode 100644 astrid/src/main/res/drawable/icn_anyone_transparent.png delete mode 100644 astrid/src/main/res/drawable/icn_default_person_image.png delete mode 100644 astrid/src/main/res/layout/update_adapter_row_no_caption.xml delete mode 100644 greendroid/build.gradle delete mode 100644 greendroid/project.properties delete mode 100644 greendroid/src/main/AndroidManifest.xml delete mode 100644 greendroid/src/main/java/greendroid/app/ActionBarActivity.java delete mode 100644 greendroid/src/main/java/greendroid/app/GDActivity.java delete mode 100644 greendroid/src/main/java/greendroid/app/GDApplication.java delete mode 100644 greendroid/src/main/java/greendroid/app/GDListActivity.java delete mode 100644 greendroid/src/main/java/greendroid/app/GDTabActivity.java delete mode 100644 greendroid/src/main/java/greendroid/graphics/drawable/ActionBarDrawable.java delete mode 100644 greendroid/src/main/java/greendroid/graphics/drawable/DrawableStateSet.java delete mode 100644 greendroid/src/main/java/greendroid/image/ImageCache.java delete mode 100644 greendroid/src/main/java/greendroid/image/ImageLoader.java delete mode 100644 greendroid/src/main/java/greendroid/image/ImageProcessor.java delete mode 100644 greendroid/src/main/java/greendroid/image/ImageRequest.java delete mode 100644 greendroid/src/main/java/greendroid/util/Config.java delete mode 100644 greendroid/src/main/java/greendroid/util/GDUtils.java delete mode 100644 greendroid/src/main/java/greendroid/util/Md5Util.java delete mode 100644 greendroid/src/main/java/greendroid/util/Time.java delete mode 100644 greendroid/src/main/java/greendroid/widget/ActionBarHost.java delete mode 100644 greendroid/src/main/java/greendroid/widget/ActionBarItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/AsyncImageView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/GDActionBar.java delete mode 100644 greendroid/src/main/java/greendroid/widget/ItemAdapter.java delete mode 100644 greendroid/src/main/java/greendroid/widget/LoaderActionBarItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/NormalActionBarItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/QuickAction.java delete mode 100644 greendroid/src/main/java/greendroid/widget/QuickActionBar.java delete mode 100644 greendroid/src/main/java/greendroid/widget/QuickActionGrid.java delete mode 100644 greendroid/src/main/java/greendroid/widget/QuickActionWidget.java delete mode 100644 greendroid/src/main/java/greendroid/widget/SegmentedAdapter.java delete mode 100644 greendroid/src/main/java/greendroid/widget/SegmentedBar.java delete mode 100644 greendroid/src/main/java/greendroid/widget/SegmentedHost.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/DescriptionItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/DrawableItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/Item.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/LongTextItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/ProgressItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/SeparatorItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/SubtextItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/SubtitleItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/TextItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/item/ThumbnailItem.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/DescriptionItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/DrawableItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/ItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/LongTextItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/ProgressItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/SeparatorItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/SubtextItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/SubtitleItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/TextItemView.java delete mode 100644 greendroid/src/main/java/greendroid/widget/itemview/ThumbnailItemView.java delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_bottom.xml delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_bottomleft_to_topright.xml delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_bottomright_to_topleft.xml delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_top.xml delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_topleft_to_bottomright.xml delete mode 100644 greendroid/src/main/res/anim/gd_grow_from_topright_to_bottomleft.xml delete mode 100644 greendroid/src/main/res/anim/gd_rack.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_bottom.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_bottomleft_to_topright.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_bottomright_to_topleft.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_top.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_topleft_to_bottomright.xml delete mode 100644 greendroid/src/main/res/anim/gd_shrink_from_topright_to_bottomleft.xml delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_add.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_all_friends.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_compass.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_compose.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_edit.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_export.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_eye.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_gallery.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_group.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_help.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_home.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_info.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_item_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_item_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_list.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_locate.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_locate_myself.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_mail.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_refresh.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_search.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_settings.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_share.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_slideshow.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_sort_by_size.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_star.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_take_photo.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_talk.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_action_bar_trashcan.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_arrow_up.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_arrow_down.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_background.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_bottom_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_grip_left.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_grip_right.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_selected.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_arrow_down.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_bg.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_bottom_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_selector_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_selector_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_quick_action_top_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_checkmark_off.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_checkmark_on.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_divider.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_label_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_label_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_segment_label_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_selected.9.png delete mode 100644 greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_unselected.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_add.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_all_friends.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_compass.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_compose.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_edit.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_export.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_eye.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_gallery.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_group.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_help.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_home.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_info.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_list.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_locate.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_locate_myself.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_mail.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_refresh.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_search.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_settings.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_share.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_slideshow.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_sort_by_size.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_star.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_take_photo.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_talk.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_action_bar_trashcan.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_arrow_up.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_arrow_down.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_background.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_bottom_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_grip_left.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_grip_right.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_selected.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_arrow_down.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_bg.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_bottom_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_selector_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_selector_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_quick_action_top_frame.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_checkmark_off.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_checkmark_on.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_divider.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_label_focused.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_label_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_segment_label_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_normal.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_pressed.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_selected.9.png delete mode 100644 greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_unselected.9.png delete mode 100644 greendroid/src/main/res/drawable/gd_action_bar_item.xml delete mode 100644 greendroid/src/main/res/drawable/gd_quick_action_bar_item.xml delete mode 100644 greendroid/src/main/res/drawable/gd_quick_action_grid_selector.xml delete mode 100644 greendroid/src/main/res/drawable/gd_segment_checkmark.xml delete mode 100644 greendroid/src/main/res/drawable/gd_segment_label.xml delete mode 100644 greendroid/src/main/res/drawable/gd_tab_indicator.xml delete mode 100644 greendroid/src/main/res/layout/gd_action_bar_dashboard.xml delete mode 100644 greendroid/src/main/res/layout/gd_action_bar_empty.xml delete mode 100644 greendroid/src/main/res/layout/gd_action_bar_item_base.xml delete mode 100644 greendroid/src/main/res/layout/gd_action_bar_item_loader.xml delete mode 100644 greendroid/src/main/res/layout/gd_action_bar_normal.xml delete mode 100644 greendroid/src/main/res/layout/gd_content_dashboard.xml delete mode 100644 greendroid/src/main/res/layout/gd_content_empty.xml delete mode 100644 greendroid/src/main/res/layout/gd_content_normal.xml delete mode 100644 greendroid/src/main/res/layout/gd_description_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_drawable_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_list_content_dashboard.xml delete mode 100644 greendroid/src/main/res/layout/gd_list_content_empty.xml delete mode 100644 greendroid/src/main/res/layout/gd_list_content_normal.xml delete mode 100644 greendroid/src/main/res/layout/gd_long_text_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_progress_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_quick_action_bar.xml delete mode 100644 greendroid/src/main/res/layout/gd_quick_action_bar_item.xml delete mode 100644 greendroid/src/main/res/layout/gd_quick_action_grid.xml delete mode 100644 greendroid/src/main/res/layout/gd_quick_action_grid_item.xml delete mode 100644 greendroid/src/main/res/layout/gd_segment.xml delete mode 100644 greendroid/src/main/res/layout/gd_separator_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_subtext_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_subtitle_item_view.xml delete mode 100644 greendroid/src/main/res/layout/gd_tab_content.xml delete mode 100644 greendroid/src/main/res/layout/gd_tab_indicator.xml delete mode 100644 greendroid/src/main/res/layout/gd_text_item_view.xml delete mode 100755 greendroid/src/main/res/layout/gd_thumbnail_item_view.xml delete mode 100644 greendroid/src/main/res/values-de/gd_strings.xml delete mode 100644 greendroid/src/main/res/values-fr/gd_strings.xml delete mode 100644 greendroid/src/main/res/values-land/gd_styles.xml delete mode 100644 greendroid/src/main/res/values-v5/gd_themes.xml delete mode 100644 greendroid/src/main/res/values/gd_attrs.xml delete mode 100644 greendroid/src/main/res/values/gd_colors.xml delete mode 100644 greendroid/src/main/res/values/gd_dimens.xml delete mode 100644 greendroid/src/main/res/values/gd_ids.xml delete mode 100644 greendroid/src/main/res/values/gd_strings.xml delete mode 100644 greendroid/src/main/res/values/gd_styles.xml delete mode 100644 greendroid/src/main/res/values/gd_themes.xml diff --git a/astrid/build.gradle b/astrid/build.gradle index 4a5e1c16a..4acdf49e8 100644 --- a/astrid/build.gradle +++ b/astrid/build.gradle @@ -59,11 +59,14 @@ android.applicationVariants.all { variant -> dependencies { compile 'com.android.support:support-v4:18.0.0' + compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' + compile 'net.simonvt.menudrawer:menudrawer:3.0.4@aar' + compile project(":android-aac-enc") - compile project(":greendroid") compile project(":api") + compile fileTree(dir: "libs", includes: ["*.jar"]) - compile 'net.simonvt.menudrawer:menudrawer:3.0.4@aar' + compile group: 'com.google.guava', name: 'guava', version: '11.0.1', transitive: false compile group: 'com.google.code.gson', name: 'gson', version: '1.7.1', transitive: false compile group: 'org.codehaus.jackson', name: 'jackson-core-asl', version: '1.6.7', transitive: false diff --git a/astrid/project.properties b/astrid/project.properties index 9f9ec0703..1e91dc057 100644 --- a/astrid/project.properties +++ b/astrid/project.properties @@ -12,7 +12,6 @@ split.density=false # Project target. target=android-18 apk-configurations= -android.library.reference.1=../android-aac-enc -android.library.reference.2=../api -android.library.reference.3=../greendroid +android.library.reference.1=../api +android.library.reference.2=../android-aac-enc diff --git a/astrid/src/main/AndroidManifest.xml b/astrid/src/main/AndroidManifest.xml index 9dfaafc95..0ee0372e6 100644 --- a/astrid/src/main/AndroidManifest.xml +++ b/astrid/src/main/AndroidManifest.xml @@ -88,7 +88,6 @@ android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/Theme" - android:name="greendroid.app.GDApplication" android:hardwareAccelerated="false" android:manageSpaceActivity="com.todoroo.astrid.core.OldTaskPreferences"> diff --git a/astrid/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java index 713040a44..36debb2fc 100644 --- a/astrid/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java @@ -80,7 +80,6 @@ import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.data.User; import com.todoroo.astrid.files.FilesAction; import com.todoroo.astrid.files.FilesControlSet; -import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.helper.TaskAdapterAddOnManager; import com.todoroo.astrid.notes.NotesAction; import com.todoroo.astrid.notes.NotesDecorationExposer; @@ -90,7 +89,6 @@ import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.timers.TimerDecorationExposer; import com.todoroo.astrid.ui.CheckableImageView; import com.todoroo.astrid.utility.Constants; -import com.todoroo.astrid.utility.ResourceDrawableCache; /** * Adapter for displaying a user's tasks as a list @@ -358,8 +356,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { viewHolder.view = view; viewHolder.rowBody = (ViewGroup)view.findViewById(R.id.rowBody); viewHolder.nameView = (TextView)view.findViewById(R.id.title); - viewHolder.picture = (AsyncImageView)view.findViewById(R.id.picture); - viewHolder.pictureBorder = (ImageView)view.findViewById(R.id.pictureBorder); viewHolder.completeBox = (CheckableImageView)view.findViewById(R.id.completeBox); viewHolder.dueDate = (TextView)view.findViewById(R.id.dueDate); viewHolder.tagsView = (TextView)view.findViewById(R.id.tagsDisplay); @@ -447,8 +443,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { public ViewGroup rowBody; public TextView nameView; public CheckableImageView completeBox; - public AsyncImageView picture; - public ImageView pictureBorder; public TextView dueDate; public TextView tagsView; public TextView details1, details2; @@ -621,16 +615,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { viewHolder.completeBox.setOnTouchListener(otl); viewHolder.completeBox.setOnClickListener(completeBoxListener); - if (viewHolder.picture != null) { - viewHolder.picture.setOnTouchListener(otl); - viewHolder.picture.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - viewHolder.completeBox.performClick(); - } - }); - } - if (viewHolder.taskActionContainer != null) { viewHolder.taskActionContainer.setOnClickListener(new OnClickListener() { @Override @@ -1135,39 +1119,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { } } paint.setTextSize(detailTextSize); - - // image view - final AsyncImageView pictureView = viewHolder.picture; { - if (pictureView != null) { - if(Task.USER_ID_SELF.equals(task.getValue(Task.USER_ID))) { - pictureView.setVisibility(View.GONE); - if (viewHolder.pictureBorder != null) { - viewHolder.pictureBorder.setVisibility(View.GONE); - } - } else { - pictureView.setVisibility(View.VISIBLE); - if (viewHolder.pictureBorder != null) { - viewHolder.pictureBorder.setVisibility(View.VISIBLE); - } - pictureView.setUrl(null); - if (Task.USER_ID_UNASSIGNED.equals(task.getValue(Task.USER_ID))) { - pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_anyone_transparent)); - } else { - pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); - if (!TextUtils.isEmpty(viewHolder.imageUrl)) { - pictureView.setUrl(viewHolder.imageUrl); - } else if (!TextUtils.isEmpty(task.getValue(Task.USER))) { - try { - JSONObject user = new JSONObject(task.getValue(Task.USER)); - pictureView.setUrl(user.optString("picture")); //$NON-NLS-1$ - } catch (JSONException e) { - // - } - } - } - } - } - } } setupCompleteBox(viewHolder); @@ -1177,7 +1128,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { private void setupCompleteBox(ViewHolder viewHolder) { // complete box final Task task = viewHolder.task; - final AsyncImageView pictureView = viewHolder.picture; final CheckableImageView checkBoxView = viewHolder.completeBox; { boolean completed = task.isCompleted(); checkBoxView.setChecked(completed); @@ -1199,23 +1149,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { return; } - if (checkBoxView.isChecked()) { - if (pictureView != null) { - pictureView.setVisibility(View.GONE); - } - if (viewHolder.pictureBorder != null) { - viewHolder.pictureBorder.setVisibility(View.GONE); - } - } - - if (pictureView != null && pictureView.getVisibility() == View.VISIBLE) { - checkBoxView.setVisibility(View.INVISIBLE); - if (viewHolder.pictureBorder != null) { - viewHolder.pictureBorder.setBackgroundDrawable(IMPORTANCE_DRAWABLES_LARGE[value]); - } - } else { - checkBoxView.setVisibility(View.VISIBLE); - } + checkBoxView.setVisibility(View.VISIBLE); } } diff --git a/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java b/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java index e8f5afe78..3482a082c 100644 --- a/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java +++ b/astrid/src/main/java/com/todoroo/astrid/adapter/UpdateAdapter.java @@ -294,16 +294,6 @@ public class UpdateAdapter extends CursorAdapter { } private void setupUserActivityRow(View view, UserActivity activity, User user) { - final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); { - if (user.containsNonNullValue(USER_PICTURE)) { - String pictureUrl = user.getPictureUrl(USER_PICTURE, RemoteModel.PICTURE_THUMB); - pictureView.setUrl(pictureUrl); - } else { - pictureView.setUrl(null); - } - pictureView.setVisibility(View.VISIBLE); - } - final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); { String pictureThumb = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_MEDIUM); String pictureFull = activity.getPictureUrl(UserActivity.PICTURE, RemoteModel.PICTURE_LARGE); @@ -333,16 +323,6 @@ public class UpdateAdapter extends CursorAdapter { } private void setupHistoryRow(View view, History history, User user) { - final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); { - if (user.containsNonNullValue(USER_PICTURE)) { - String pictureUrl = user.getPictureUrl(USER_PICTURE, RemoteModel.PICTURE_THUMB); - pictureView.setUrl(pictureUrl); - } else { - pictureView.setUrl(null); - } - pictureView.setVisibility(View.VISIBLE); - } - final AsyncImageView commentPictureView = (AsyncImageView)view.findViewById(R.id.comment_picture); commentPictureView.setVisibility(View.GONE); @@ -376,7 +356,7 @@ public class UpdateAdapter extends CursorAdapter { if (pictureThumb != null && imageCache.contains(pictureThumb) && updateBitmap == null) { try { - commentPictureView.setDefaultImageBitmap(imageCache.get(pictureThumb)); + commentPictureView.setImageBitmap(imageCache.get(pictureThumb)); } catch (IOException e) { e.printStackTrace(); } @@ -390,7 +370,7 @@ public class UpdateAdapter extends CursorAdapter { AlertDialog image = new AlertDialog.Builder(fragment.getActivity()).create(); AsyncImageView imageView = new AsyncImageView(fragment.getActivity()); imageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); - imageView.setDefaultImageResource(android.R.drawable.ic_menu_gallery); + imageView.setImageResource(android.R.drawable.ic_menu_gallery); if (updateBitmap != null) { imageView.setImageBitmap(updateBitmap); } else { @@ -418,80 +398,7 @@ public class UpdateAdapter extends CursorAdapter { public static Spanned getUpdateComment(final AstridActivity context, UserActivity activity, User user, String linkColor, String fromView) { String message = activity.getValue(UserActivity.MESSAGE); - if (!Preferences.getBoolean(R.string.p_show_caption_comments, false)) { - return Html.fromHtml(message); - } - - String userDisplay; - if (activity.getValue(UserActivity.USER_UUID).equals(Task.USER_ID_SELF)) { - userDisplay = context.getString(R.string.update_string_user_self); - } else if (user == null) { - userDisplay = context.getString(R.string.ENA_no_user); - } else { - userDisplay = user.getDisplayName(USER_NAME, USER_FIRST_NAME, USER_LAST_NAME); - } - if (TextUtils.isEmpty(userDisplay)) { - userDisplay = context.getString(R.string.ENA_no_user); - } - String targetName = activity.getValue(UserActivity.TARGET_NAME); - String action = activity.getValue(UserActivity.ACTION); - - int commentResource = 0; - if (UserActivity.ACTION_TASK_COMMENT.equals(action)) { - if (fromView.equals(FROM_TASK_VIEW) || TextUtils.isEmpty(targetName)) { - commentResource = R.string.update_string_default_comment; - } else { - commentResource = R.string.update_string_task_comment; - } - } else if (UserActivity.ACTION_TAG_COMMENT.equals(action)) { - if (fromView.equals(FROM_TAG_VIEW) || TextUtils.isEmpty(targetName)) { - commentResource = R.string.update_string_default_comment; - } else { - commentResource = R.string.update_string_tag_comment; - } - } - - if (commentResource == 0) { - return Html.fromHtml(String.format("%s %s", userDisplay, message)); //$NON-NLS-1$ - } - - String original = context.getString(commentResource, userDisplay, targetName, message); - int taskLinkIndex = original.indexOf(TARGET_LINK_PREFIX); - - if (taskLinkIndex < 0) { - return Html.fromHtml(original); - } - - String[] components = original.split(" "); //$NON-NLS-1$ - SpannableStringBuilder builder = new SpannableStringBuilder(); - StringBuilder htmlStringBuilder = new StringBuilder(); - - for (String comp : components) { - Matcher m = TARGET_LINK_PATTERN.matcher(comp); - if (m.find()) { - builder.append(Html.fromHtml(htmlStringBuilder.toString())); - htmlStringBuilder.setLength(0); - - String linkType = m.group(1); - CharSequence link = getLinkSpan(context, activity, targetName, linkColor, linkType); - if (link != null) { - builder.append(link); - if (!m.hitEnd()) { - builder.append(comp.substring(m.end())); - } - builder.append(' '); - } - } else { - htmlStringBuilder.append(comp); - htmlStringBuilder.append(' '); - } - } - - if (htmlStringBuilder.length() > 0) { - builder.append(Html.fromHtml(htmlStringBuilder.toString())); - } - - return builder; + return Html.fromHtml(message); } public static String getHistoryComment(final AstridActivity context, History history, User user, String linkColor, String fromView) { diff --git a/astrid/src/main/java/com/todoroo/astrid/helper/AsyncImageView.java b/astrid/src/main/java/com/todoroo/astrid/helper/AsyncImageView.java index 8de1f4d57..cb8840755 100644 --- a/astrid/src/main/java/com/todoroo/astrid/helper/AsyncImageView.java +++ b/astrid/src/main/java/com/todoroo/astrid/helper/AsyncImageView.java @@ -5,27 +5,21 @@ */ package com.todoroo.astrid.helper; -import java.io.IOException; - import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.os.Looper; import android.text.TextUtils; import android.util.AttributeSet; +import android.widget.ImageView; import com.todoroo.andlib.service.ContextManager; +import java.io.IOException; + import edu.mit.mobile.android.imagecache.ImageCache; -/** - * Subclass of greendroid.widget.AsyncImageView, so that we can cache the image - * locally when user is offline - * - * IMPORTANT: cannot load a cached image by setting the url in an xml file. - * ImageDiskCache object is created after object is loaded from xml - */ -public class AsyncImageView extends greendroid.widget.AsyncImageView { +public class AsyncImageView extends ImageView { private final ImageCache imageDiskCache; private Bitmap cacheImage; @@ -42,7 +36,7 @@ public class AsyncImageView extends greendroid.widget.AsyncImageView { super(context, set, defStyle); imageDiskCache = getImageCache(); } - @Override + public void setUrl(String url) { if (cacheImage != null && cacheURL.equals(url) && !TextUtils.isEmpty(url)) { setImageBitmap(cacheImage); @@ -57,26 +51,6 @@ public class AsyncImageView extends greendroid.widget.AsyncImageView { // } } - super.setUrl(url); - } - - public Bitmap getImageBitmap() { - setDrawingCacheEnabled(true); - - // this is the important code :) - // Without it the view will have a dimension of 0,0 and the bitmap will be null - measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); - - buildDrawingCache(true); - Bitmap drawingCache = getDrawingCache(); - if (drawingCache == null) { - return null; - } - Bitmap b = Bitmap.createBitmap(getDrawingCache()); - setDrawingCacheEnabled(false); // clear drawing cache - return b; } private static volatile ImageCache imageCacheInstance = null; @@ -98,5 +72,4 @@ public class AsyncImageView extends greendroid.widget.AsyncImageView { } return imageCacheInstance; } - } diff --git a/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java index 038dd90f2..734a7f4c6 100644 --- a/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java @@ -60,7 +60,6 @@ import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.timers.TimerActionControlSet.TimerActionListener; -import com.todoroo.astrid.utility.ResourceDrawableCache; import org.json.JSONObject; import org.tasks.R; @@ -369,29 +368,14 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene public View getUpdateNotes(NoteOrUpdate note, ViewGroup parent) { - View convertView; - if (Preferences.getBoolean(R.string.p_show_caption_comments, false)) { - convertView = ((Activity)getContext()).getLayoutInflater().inflate( + View convertView = ((Activity)getContext()).getLayoutInflater().inflate( R.layout.update_adapter_row, parent, false); - } - else { - convertView = ((Activity)getContext()).getLayoutInflater().inflate( - R.layout.update_adapter_row_no_caption, parent, false); - } - bindView(convertView, note); return convertView; } /** Helper method to set the contents and visibility of each field */ public synchronized void bindView(View view, NoteOrUpdate item) { - // picture - if (Preferences.getBoolean(R.string.p_show_caption_comments, false)) { - final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); - pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); - pictureView.setUrl(item.picture); - } - // name final TextView nameView = (TextView)view.findViewById(R.id.title); { nameView.setText(item.title); diff --git a/astrid/src/main/java/com/todoroo/astrid/utility/ResourceDrawableCache.java b/astrid/src/main/java/com/todoroo/astrid/utility/ResourceDrawableCache.java deleted file mode 100644 index f98f186f2..000000000 --- a/astrid/src/main/java/com/todoroo/astrid/utility/ResourceDrawableCache.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.todoroo.astrid.utility; - -import android.content.res.Resources; -import android.graphics.drawable.Drawable; - -import org.tasks.R; -import com.todoroo.andlib.service.ContextManager; - -/** - * This class caches common images based on resource ID to avoid - * the performance hit from constantly loading them from disk - * @author Sam - * - */ -public class ResourceDrawableCache { - - private static Drawable ICN_DEFAULT_PERSON_IMAGE = null; - private static Drawable ICN_ANYONE = null; - private static Drawable ICN_ANYONE_TRANSPARENT = null; - private static Drawable ICN_ADD_CONTACT = null; - - private static Drawable DEFAULT_LIST_0 = null; - private static Drawable DEFAULT_LIST_1 = null; - private static Drawable DEFAULT_LIST_2 = null; - private static Drawable DEFAULT_LIST_3 = null; - - - public static Drawable getImageDrawableFromId(Resources r, int resId) { - if (r == null) { - r = ContextManager.getResources(); - } - switch(resId) { - case R.drawable.icn_default_person_image: - if (ICN_DEFAULT_PERSON_IMAGE == null) { - ICN_DEFAULT_PERSON_IMAGE = r.getDrawable(resId); - } - return ICN_DEFAULT_PERSON_IMAGE; - case R.drawable.icn_anyone: - if (ICN_ANYONE == null) { - ICN_ANYONE = r.getDrawable(resId); - } - return ICN_ANYONE; - case R.drawable.icn_anyone_transparent: - if (ICN_ANYONE_TRANSPARENT == null) { - ICN_ANYONE_TRANSPARENT = r.getDrawable(resId); - } - return ICN_ANYONE_TRANSPARENT; - case R.drawable.icn_add_contact: - if (ICN_ADD_CONTACT == null) { - ICN_ADD_CONTACT = r.getDrawable(resId); - } - return ICN_ADD_CONTACT; - - case R.drawable.default_list_0: - if (DEFAULT_LIST_0 == null) { - DEFAULT_LIST_0 = r.getDrawable(resId); - } - return DEFAULT_LIST_0; - case R.drawable.default_list_1: - if (DEFAULT_LIST_1 == null) { - DEFAULT_LIST_1 = r.getDrawable(resId); - } - return DEFAULT_LIST_1; - case R.drawable.default_list_2: - if (DEFAULT_LIST_2 == null) { - DEFAULT_LIST_2 = r.getDrawable(resId); - } - return DEFAULT_LIST_2; - case R.drawable.default_list_3: - if (DEFAULT_LIST_3 == null) { - DEFAULT_LIST_3 = r.getDrawable(resId); - } - return DEFAULT_LIST_3; - - default: - return r.getDrawable(resId); - } - } - -} diff --git a/astrid/src/main/res/drawable/icn_add_contact.png b/astrid/src/main/res/drawable/icn_add_contact.png deleted file mode 100644 index a45edcc191e42fa701f8b949c344fc91a663b012..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmV004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000XU000XU0RWnu z7ytkPf=NU{R9M69nbC2AKoEw%+@t_XpaUs^%KI^(o6T1Qi2IAlKKIIsrBCuCGO;1d}g-1}J|?et;|W zJ;mGr3Scwh{*4rb60*(OAZ~r5QqBQZKx7aX=~%A-k);(1LwGTORG@;XPk=-KAn^&X z5CB;C?g4zRA-R!xQ2+=4o&gR5IUIZf90dT5J^^+D06U)mCrb+)Y!5dQP5kL8Rt(?+ z=nUdI9qS#S(`VhWstv&>*$2KH#Y_fJJBkTAaR8VjKtw;V8mm&`Kx6|D)6aGq%;!Qw zZ0r&s1uA~Vh><|`8og#ZB|rh}fi3;;R$94Ud(Vhjle*I;E&V(*anP5EepY*rz0@CX zqmgPhOMBg{y1EK@)8s~eoKQpGwK~V|7y5jW{MM00Y^$;YUV#^&8!AveK=RjpQVkYL yXJ(f%wn`QKe_D^KrJCqB-Ien2F&6;-JHQzuXGSa#O-B0w00009ZJ)g?bEo-Djla!`x8Ig+ zzb)H;e0ln|+ixEhXzaF1(wutj_11m+zG_YEJ^naueYo>u&H(CGy diff --git a/astrid/src/main/res/drawable/icn_anyone_transparent.png b/astrid/src/main/res/drawable/icn_anyone_transparent.png deleted file mode 100644 index 9509455c40f6db06c8c71dba8ec2e7884b29742e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)7N)l z;D7@TI077SzySvw0S-9efCG*I2OMy~5vOovSxR=>s!CL4=JjuGstU7xcy^%mdhG;m zKH`_wKxKk`Q&oGjy*G%uu47&NY^3vURQ(9ix;pe*)$yI+G}c$gkbD&|2_0_R8gfHr zq3RqmT>1}aZM-a0xJ)pl^pE{c-|btq6W#v`IzWuIJdp0|V3T~!G>vJ!N5P;d(YoFrA`NnF6C0*nf{*WiXa*3A{1i?!;- zOe=<%JSV=u&7x^!A)Gv)fP0)`oCV!h&~cB$Q-Y>{Cl4+!Z0<4IQLx%*vUAyOK6hMS zw3F)#^bsx-qUjD>^_V;d4JUo{bTSM7OUM)8zTIX^ZXO7Xx{B}#E)fjT-1Xga3UIbZ zLWM7AzQLsexCpp@aQY5<1+IT?zFp8%;3D9juK?nXS^-DL0Y@ebr&kQMrIx_aaljGa zfCCOV@*Dmj0vvF_0Y`uX4mjX|BftR%9B{y)032|@g_^qn0|1C`z$e>upA!H8002ov JPDHLkV1gYC^X~uv diff --git a/astrid/src/main/res/drawable/icn_default_person_image.png b/astrid/src/main/res/drawable/icn_default_person_image.png deleted file mode 100644 index 5e652764f77b9b67671a9f56cdae3e70cd0b19b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1845 zcmV-52g>+~P)^T%OMCX?OR?qY7IrP`ge>2!K&M3ju>W?9XFD+W_xDdvPftut zgey_9S=i_2=k4w7)z#JG<74MyCTM48XYp-ZRei!S++M5I;zgc{WqqK9uifAmC z%OqsIUgzQZ`Z`i%rc!HbYvbeNIxMi{SmP(KdbmM;d4GRrL9C1iAHdmcmNeF1C1S%} zc=>z^azv@a8u;n6eUp=u^Yin-Zcc=h0xVlNGc&`2DwT>?5K2;YLPxc{yv#?z;mxec zOQLhw6cQ@9hJien%N2{o=jZ2!mx!pTsi_c2$j&0I1Td8^uEMssxQH8JG8N2xxU7)H zpPrt!B=(e-D=1O>`}=NUAm{mxaEs&9z>KH{e1qhU9^?lH2YfRAAO>+5q7_!d|6Z)- z$yEab10=25LWw0dGW6o&l4#9^im1ffQp|5|ZU|Rw-B>hWyry3olm5Ia z-iE;NGX)IMOTgo2yiJ93NB)l+`RwN1Fqox-MCBIU7 z{F$W%W>g!@PM}h{G^J%epBFIza#WF$MDYR!NvTwlo`C@7*JdHivdKFZV;0-gWWtru zRs5`D;3U)~tNBVoo$OF-7mLyMxSJ#q@GX5{md`8~W|#40h(Q7*37^T}k_3UzyjB*j zb8b+bUh>fZGYhTNYSOQS?)ca*$ZUOmohnNDL1qLb#1;z!tHzrcgqge+;J^6)?Htia z@QgSXeSJ8bl7_bl92`!mBML%yDXPyQ0NF~M=|znIX1kjk;TD)d3n%ji%1>O49yNwM zm(Gq4Cvkuc_$Xt8LC5_64^iNQ`M<3qs)=nD#3set>otqkh?79m%x{gE@WTl*XK0f` za*Nh-x!hLK>YqU=nM<<$(waofH-8h+TCdkB93on09E)AF`sdESUq-SK{UnKwaErbg zKq}D+c$nN@LWD5?J~t`Tqlo+zBHyUMg+c-SKqphFR8Vg*9>n=;p(OGZ*hF2#!+{W% zPNxyA*=&|FE20&}?mx=Xw19aS*%c!{g)qpB9cSxV37r{DyCiv(p!2VeNkSi%Z}-8X zj%eN7+*G1 z<#Hlg5l*zF{-Tvl2~31k!Uhx3N|001spmv5T+>ptHXqH}=Vy14%W(>#m9pGYwBmmq zhO_Lxr-)XP+$~z=yhUanIwwk2-f@M%-J+G+hG^wMvsXzathENws(+$j_g!WsT8##H zzv2Ei5pFa{{|%UBCT~y(Z3nDo@(E|MjXup}GBU=bKY__%^@b~A)?=2LJP%0phJHzI z!^7$*8A{zRiETs(MVkkN3awbn1`#nc@7OQFi~|uNgmm+z&IUuMs&g!hG0RLop*_7+ zN6WTiRx^41(>3)6F}7lsnY_>KkCuroV?Qe~tC_s%^inzyD=`BY*rwA<0L!q!KFlZ$ z84Q>nbkSPd>gQ^;%F;uet_hRdhxyL2g!$pN>W%hc7HLhl jXv$Ag^SoaDM}PqU=lw)1Lf=++00000NkvXXu0mjfam - - - - - - - - - - - @@ -49,7 +38,7 @@ android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_alignLeft="@id/title" - android:layout_marginLeft="54dip" + android:layout_marginLeft="5dip" android:paddingTop="1dip" style="@style/TextAppearance.TAd_ItemDueDate" android:textStyle="normal" @@ -58,19 +47,6 @@ android:textSize="12sp" android:singleLine="true"/> - - - - - @@ -79,10 +55,9 @@ android:layout_width="50dip" android:layout_height="50dip" android:layout_alignParentBottom="true" - android:layout_marginLeft="50dip" + android:layout_marginLeft="5dip" android:layout_marginBottom="4dip" android:visibility="gone" - astrid:defaultSrc="@android:drawable/ic_menu_gallery" android:scaleType="fitCenter"/> diff --git a/astrid/src/main/res/layout/update_adapter_row_no_caption.xml b/astrid/src/main/res/layout/update_adapter_row_no_caption.xml deleted file mode 100644 index 796448095..000000000 --- a/astrid/src/main/res/layout/update_adapter_row_no_caption.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/astrid/src/main/res/values/keys.xml b/astrid/src/main/res/values/keys.xml index 1c2833b4f..ebdcf7032 100644 --- a/astrid/src/main/res/values/keys.xml +++ b/astrid/src/main/res/values/keys.xml @@ -67,9 +67,6 @@ p_show_task_edit_comments - - p_show_caption_comments - p_save_and_cancel diff --git a/astrid/src/main/res/values/strings-updates.xml b/astrid/src/main/res/values/strings-updates.xml index e06e5b870..a8ed9cfe3 100644 --- a/astrid/src/main/res/values/strings-updates.xml +++ b/astrid/src/main/res/values/strings-updates.xml @@ -7,9 +7,6 @@ Please do not translate this part of the string. --> - %1$s commented: %3$s - %1$s on $link_task: %3$s - %1$s on %2$s: %3$s You yourself diff --git a/astrid/src/main/res/values/styles.xml b/astrid/src/main/res/values/styles.xml index 69f1b0b6b..650bed341 100644 --- a/astrid/src/main/res/values/styles.xml +++ b/astrid/src/main/res/values/styles.xml @@ -438,5 +438,9 @@ 14dip @android:color/black - + + + diff --git a/greendroid/build.gradle b/greendroid/build.gradle deleted file mode 100644 index 4c851536b..000000000 --- a/greendroid/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:0.5.+' - } -} - -apply plugin: 'android-library' - -repositories { - mavenCentral() -} - -android { - compileSdkVersion 18 - buildToolsVersion "18.1" - - defaultConfig { - minSdkVersion 7 - targetSdkVersion 18 - } -} - -dependencies { - compile 'com.android.support:support-v4:18.0.0' - compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' -} diff --git a/greendroid/project.properties b/greendroid/project.properties deleted file mode 100644 index a0f7c19da..000000000 --- a/greendroid/project.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -android.library=true -# Indicates whether an apk should be generated for each density. -split.density=false -# Project target. -target=android-18 - diff --git a/greendroid/src/main/AndroidManifest.xml b/greendroid/src/main/AndroidManifest.xml deleted file mode 100644 index dee01d77c..000000000 --- a/greendroid/src/main/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - diff --git a/greendroid/src/main/java/greendroid/app/ActionBarActivity.java b/greendroid/src/main/java/greendroid/app/ActionBarActivity.java deleted file mode 100644 index def9d4c12..000000000 --- a/greendroid/src/main/java/greendroid/app/ActionBarActivity.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.app; - -import greendroid.widget.GDActionBar; -import greendroid.widget.ActionBarItem; -import android.app.Activity; -import android.app.Application; -import android.view.View; -import android.widget.FrameLayout; - -/** - * Defines all methods related to Activities embedding an {@link GDActionBar} - * - * @author Cyril Mottier - */ -public interface ActionBarActivity { - - /** - * The optional title of the launched ActionBarActivity - * - * @see Activity#setTitle(CharSequence) - * @see Activity#setTitle(int) - */ - static final String GD_ACTION_BAR_TITLE = "greendroid.app.ActionBarActivity.GD_ACTION_BAR_TITLE"; - - /** - * An integer that can be used to force the ActionBar to a particular - * visibility. This is especially useful when using GDActivity inside a - * GDTabActivity. - * - * @see View#VISIBLE - * @see View#INVISIBLE - * @see View#GONE - */ - static final String GD_ACTION_BAR_VISIBILITY = "greendroid.app.ActionBarActivity.GD_ACTION_BAR_VISIBILITY"; - - /** - * Clients may use this method to listen to {@link ActionBarItem}s clicks. - * - * @param item The {@link ActionBarItem} that has been clicked - * @param position The position of the clicked item. This number is equal or - * greater to zero. 0 is the leftmost item. - * @return true if the method has handled the click on the - * {@link ActionBarItem} at position position. Otherwise it - * returns false. - */ - boolean onHandleActionBarItemClick(ActionBarItem item, int position); - - /** - * Returns the content view. Please note the content view is not the entire - * view but a {@link FrameLayout} that contains everything but the - * {@link GDActionBar}. - * - * @return The content view - */ - FrameLayout getContentView(); - - /** - * Returns the {@link GDActionBar}. Listening to {@link GDActionBar} events - * should be done via the - * {@link ActionBarActivity#onHandleActionBarItemClick(ActionBarItem, int)} - * method. Most of the time, this method don't need to be used directly. - * - * @see {@link ActionBarActivity#onHandleActionBarItemClick(ActionBarItem, int)} - * @see {@link ActionBarActivity#addActionBarItem(ActionBarItem)} - * @see {@link ActionBarActivity#addActionBarItem(greendroid.widget.ActionBarItem.Type)} - * @return The {@link GDActionBar} currently displayed on screen - */ - GDActionBar getGDActionBar(); - - /** - * A simple utility method that casts the {@link Application} returned by - * {@link #getApplication()} into a {@link GDApplication} - * - * @return The current {@link GDApplication} - */ - GDApplication getGDApplication(); - - /** - * Add a new item to the {@link GDActionBar}. - * - * @param item The item to add to the {@link GDActionBar} - */ - ActionBarItem addActionBarItem(ActionBarItem item); - - /** - * Add a new item to the {@link GDActionBar}. - * - * @param item The item to add to the {@link GDActionBar} - * @param itemId Unique item ID. Use {@link GDActionBar#NONE} if you do not - * need a unique ID. - */ - ActionBarItem addActionBarItem(ActionBarItem item, int itemId); - - /** - * Adds a new item of type type to the {@link GDActionBar}. - * - * @param actionBarItemType The item to add to the {@link GDActionBar} - */ - ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType); - - /** - * Adds a new item of type type to the {@link GDActionBar}. - * - * @param actionBarItemType The item to add to the {@link GDActionBar} - * @param itemId Unique item ID. Use {@link GDActionBar#NONE} if you do not - * need a unique ID. - */ - ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType, int itemId); - - /** - * Returns the identifier of the layout that needs to be created for this - * {@link ActionBarActivity} - * - * @return The layout identifier of the layout to create - */ - int createLayout(); - - /** - * Called at the beginning of the {@link Activity#onContentChanged()} - * method. This may be used to initialize all references on elements. - */ - void onPreContentChanged(); - - /** - * Called at the end of the {@link Activity#onContentChanged()} method. This - * may be use to initialize the content of the layout (titles, etc.) - */ - void onPostContentChanged(); -} diff --git a/greendroid/src/main/java/greendroid/app/GDActivity.java b/greendroid/src/main/java/greendroid/app/GDActivity.java deleted file mode 100644 index 241f5505f..000000000 --- a/greendroid/src/main/java/greendroid/app/GDActivity.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.app; - -import com.cyrilmottier.android.greendroid.R; - -import greendroid.util.Config; -import greendroid.widget.GDActionBar; -import greendroid.widget.ActionBarHost; -import greendroid.widget.ActionBarItem; -import greendroid.widget.GDActionBar.OnActionBarListener; -import greendroid.widget.GDActionBar.Type; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup.LayoutParams; -import android.widget.FrameLayout; - -/** - *

- * An {@link GDActivity} is a regular Activity that always hosts an - * {@link GDActionBar}. It is extremely simple to use as you have nothing - * particular to do. Indeed, the ActionBar is automatically added to your own - * layout when using the {@link #getContentView()} method. You can also use one - * of the setActionBarContentView utility methods. As a result, a basic - * {@link GDActivity} will often be initialized using the following snippet of - * code: - *

- * - *
- * protected void onCreate(Bundle savedInstanceState) {
- *     super.onCreate(savedInstanceState);
- * 
- *     setActionBarContentView(R.layout.main);
- * }
- * 
- *

- * An ActionBar is a widget that may contains actions items and a title. You can - * also set the title putting an extra string with the key - * {@link GD_ACTION_BAR_TITLE} in your Intent: - *

- * - *
- * Intent intent = new Intent(this, MyGDActivity.class);
- * intent.putExtra(ActionBarActivity.GD_ACTION_BAR_TITLE, "Next screen title");
- * startActivity(intent);
- * 
- *

- * Note: An {@link GDActivity} automatically handle the type of the ActionBar - * (Dashboard or Normal) depending on the value returned by the - * getHomeActivityClass of your {@link GDApplication}. However you can force the - * type of the action bar in your constructor. - *

- * - *
- * public MyGDActivity() {
- *     super(ActionBar.Type.Dashboard);
- * }
- * 
- *

- * All Activities that inherits from an {@link GDActivity} are notified when an - * action button is tapped in the onHandleActionBarItemClick(ActionBarItem, int) - * method. By default this method does nothing but return false. - *

- * - * @see {@link GDApplication#getHomeActivityClass()} - * @see {@link ActionBarActivity#GD_ACTION_BAR_TITLE} - * @see {@link GDActivity#setActionBarContentView(int)} - * @see {@link GDActivity#setActionBarContentView(View)} - * @see {@link GDActivity#setActionBarContentView(View, LayoutParams)} - * @author Cyril Mottier - */ -public class GDActivity extends Activity implements ActionBarActivity { - - private static final String LOG_TAG = GDActivity.class.getSimpleName(); - - private boolean mDefaultConstructorUsed = false; - - private Type mActionBarType; - private ActionBarHost mActionBarHost; - - public GDActivity() { - this(Type.Normal); - mDefaultConstructorUsed = true; - } - - public GDActivity(GDActionBar.Type actionBarType) { - super(); - mActionBarType = actionBarType; - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - ensureLayout(); - super.onRestoreInstanceState(savedInstanceState); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if (mDefaultConstructorUsed) { - // HACK cyril: This should have been done is the default - // constructor. Unfortunately, the getApplication() method returns - // null there. Hence, this has to be done here. - if (getClass().equals(getGDApplication().getHomeActivityClass())) { - mActionBarType = Type.Dashboard; - } - } - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - ensureLayout(); - } - - public GDActionBar.Type getActionBarType() { - return mActionBarType; - } - - public int createLayout() { - switch (mActionBarType) { - case Dashboard: - return R.layout.gd_content_dashboard; - case Empty: - return R.layout.gd_content_empty; - case Normal: - default: - return R.layout.gd_content_normal; - } - } - - protected void ensureLayout() { - if (!verifyLayout()) { - setContentView(createLayout()); - } - } - - protected boolean verifyLayout() { - return mActionBarHost != null; - } - - public GDApplication getGDApplication() { - return (GDApplication) getApplication(); - } - - @Override - public void onContentChanged() { - super.onContentChanged(); - - onPreContentChanged(); - onPostContentChanged(); - } - - public void onPreContentChanged() { - mActionBarHost = (ActionBarHost) findViewById(R.id.gd_action_bar_host); - if (mActionBarHost == null) { - throw new RuntimeException( - "Your content must have an ActionBarHost whose id attribute is R.id.gd_action_bar_host"); - } - mActionBarHost.getActionBar().setOnActionBarListener(mActionBarListener); - } - - public void onPostContentChanged() { - - boolean titleSet = false; - - final Intent intent = getIntent(); - if (intent != null) { - String title = intent.getStringExtra(ActionBarActivity.GD_ACTION_BAR_TITLE); - if (title != null) { - titleSet = true; - setTitle(title); - } - } - - if (!titleSet) { - // No title has been set via the Intent. Let's look in the - // ActivityInfo - try { - final ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(), 0); - if (activityInfo.labelRes != 0) { - setTitle(activityInfo.labelRes); - } - } catch (NameNotFoundException e) { - // Do nothing - } - } - - final int visibility = intent.getIntExtra(ActionBarActivity.GD_ACTION_BAR_VISIBILITY, View.VISIBLE); - getGDActionBar().setVisibility(visibility); - } - - @Override - public void setTitle(CharSequence title) { - getGDActionBar().setTitle(title); - } - - @Override - public void setTitle(int titleId) { - setTitle(getString(titleId)); - } - - public GDActionBar getGDActionBar() { - ensureLayout(); - return mActionBarHost.getActionBar(); - } - - public ActionBarItem addActionBarItem(ActionBarItem item) { - return getGDActionBar().addItem(item); - } - - public ActionBarItem addActionBarItem(ActionBarItem item, int itemId) { - return getGDActionBar().addItem(item, itemId); - } - - public ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType) { - return getGDActionBar().addItem(actionBarItemType); - } - - public ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType, int itemId) { - return getGDActionBar().addItem(actionBarItemType, itemId); - } - - public FrameLayout getContentView() { - ensureLayout(); - return mActionBarHost.getContentView(); - } - - public void setActionBarContentView(int resID) { - LayoutInflater.from(this).inflate(resID, getContentView()); - } - - public void setActionBarContentView(View view, LayoutParams params) { - getContentView().addView(view, params); - } - - public void setActionBarContentView(View view) { - getContentView().addView(view); - } - - public boolean onHandleActionBarItemClick(ActionBarItem item, int position) { - return false; - } - - private OnActionBarListener mActionBarListener = new OnActionBarListener() { - public void onActionBarItemClicked(int position) { - if (position == OnActionBarListener.HOME_ITEM) { - - final GDApplication app = getGDApplication(); - switch (mActionBarType) { - case Normal: - final Class klass = app.getHomeActivityClass(); - if (klass != null && !klass.equals(GDActivity.this.getClass())) { - if (Config.GD_INFO_LOGS_ENABLED) { - Log.i(LOG_TAG, "Going back to the home activity"); - } - Intent homeIntent = new Intent(GDActivity.this, klass); - homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(homeIntent); - } - break; - case Dashboard: - final Intent appIntent = app.getMainApplicationIntent(); - if (appIntent != null) { - if (Config.GD_INFO_LOGS_ENABLED) { - Log.i(LOG_TAG, "Launching the main application Intent"); - } - startActivity(appIntent); - } - break; - } - - } else { - if (!onHandleActionBarItemClick(getGDActionBar().getItem(position), position)) { - if (Config.GD_WARNING_LOGS_ENABLED) { - Log.w(LOG_TAG, "Click on item at position " + position + " dropped down to the floor"); - } - } - } - } - }; - -} diff --git a/greendroid/src/main/java/greendroid/app/GDApplication.java b/greendroid/src/main/java/greendroid/app/GDApplication.java deleted file mode 100644 index 72e2aa174..000000000 --- a/greendroid/src/main/java/greendroid/app/GDApplication.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.app; - -import greendroid.image.ImageCache; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; - -import android.app.Activity; -import android.app.Application; -import android.content.Intent; - -/** - * Defines various methods that should be overridden in order to style your - * application. - * - * @author Cyril Mottier - */ -public class GDApplication extends Application { - - /** - * Used for receiving low memory system notification. You should definitely - * use it in order to clear caches and not important data everytime the - * system need memory. - * - * @author Cyril Mottier - * @see GDApplication#registerOnLowMemoryListener(OnLowMemoryListener) - * @see GDApplication#unregisterOnLowMemoryListener(OnLowMemoryListener) - */ - public static interface OnLowMemoryListener { - public void onLowMemoryReceived(); - } - - private static final int CORE_POOL_SIZE = 5; - - private static final ThreadFactory sThreadFactory = new ThreadFactory() { - private final AtomicInteger mCount = new AtomicInteger(1); - - public Thread newThread(Runnable r) { - return new Thread(r, "GreenDroid thread #" + mCount.getAndIncrement()); - } - }; - - private ExecutorService mExecutorService; - private ImageCache mImageCache; - private ArrayList> mLowMemoryListeners; - - public GDApplication() { - mLowMemoryListeners = new ArrayList>(); - } - - public ExecutorService getExecutor() { - if (mExecutorService == null) { - mExecutorService = Executors.newFixedThreadPool(CORE_POOL_SIZE, sThreadFactory); - } - return mExecutorService; - } - - public ImageCache getImageCache() { - if (mImageCache == null) { - mImageCache = new ImageCache(this); - } - return mImageCache; - } - - /** - * Returns the class of the home {@link Activity}. The home {@link Activity} - * is the main entrance point of your application. This is usually where the - * dashboard/general menu is displayed. - * - * @return The Class of the home {@link Activity} - */ - public Class getHomeActivityClass() { - return null; - } - - /** - * Each application may have an "application intent" which will be used when - * the user clicked on the application button. - * - * @return The main application {@link Intent} (may be null if you don't - * want to use the main application {@link Intent} feature) - */ - public Intent getMainApplicationIntent() { - return null; - } - - /** - * Adds a new listener to the list - * - * @param listener The listener to unregister - * @see {@link OnLowMemoryListener} - */ - public void registerOnLowMemoryListener(OnLowMemoryListener listener) { - if (listener != null) { - mLowMemoryListeners.add(new WeakReference(listener)); - } - } - - /** - * Removes a previously registered listener - * - * @param listener The listener to unregister - * @see {@link OnLowMemoryListener} - */ - public void unregisterOnLowMemoryListener(OnLowMemoryListener listener) { - if (listener != null) { - int i = 0; - while (i < mLowMemoryListeners.size()) { - final OnLowMemoryListener l = mLowMemoryListeners.get(i).get(); - if (l == null || l == listener) { - mLowMemoryListeners.remove(i); - } else { - i++; - } - } - } - } - - @Override - public void onLowMemory() { - super.onLowMemory(); - int i = 0; - while (i < mLowMemoryListeners.size()) { - final OnLowMemoryListener listener = mLowMemoryListeners.get(i).get(); - if (listener == null) { - mLowMemoryListeners.remove(i); - } else { - listener.onLowMemoryReceived(); - i++; - } - } - } -} diff --git a/greendroid/src/main/java/greendroid/app/GDListActivity.java b/greendroid/src/main/java/greendroid/app/GDListActivity.java deleted file mode 100644 index c4e207757..000000000 --- a/greendroid/src/main/java/greendroid/app/GDListActivity.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.app; - -import greendroid.util.Config; -import greendroid.widget.GDActionBar; -import android.app.ListActivity; -import android.os.Handler; -import android.util.Log; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListAdapter; -import android.widget.ListView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * An equivalent to {@link ListActivity} that manages a ListView. - * - * @see {@link ListActivity} - * @author Cyril Mottier - */ -public class GDListActivity extends GDActivity { - - private static final String LOG_TAG = GDListActivity.class.getSimpleName(); - - private ListAdapter mAdapter; - private ListView mList; - private View mEmptyView; - - private Handler mHandler = new Handler(); - private boolean mFinishedStart = false; - - private Runnable mRequestFocus = new Runnable() { - public void run() { - mList.focusableViewAvailable(mList); - } - }; - - public GDListActivity() { - super(); - } - - public GDListActivity(GDActionBar.Type actionBarType) { - super(actionBarType); - } - - /** - * This method will be called when an item in the list is selected. - * Subclasses should override. Subclasses can call - * getListView().getItemAtPosition(position) if they need to access the data - * associated with the selected item. - * - * @param l The ListView where the click happened - * @param v The view that was clicked within the ListView - * @param position The position of the view in the list - * @param id The row id of the item that was clicked - */ - protected void onListItemClick(ListView l, View v, int position, long id) { - } - - /** - * Provide the cursor for the list view. - */ - public void setListAdapter(ListAdapter adapter) { - synchronized (this) { - ensureLayout(); - mAdapter = adapter; - mList.setAdapter(adapter); - } - } - - /** - * Set the currently selected list item to the specified position with the - * adapter's data - * - * @param position - */ - public void setSelection(int position) { - mList.setSelection(position); - } - - /** - * Get the position of the currently selected list item. - */ - public int getSelectedItemPosition() { - return mList.getSelectedItemPosition(); - } - - /** - * Get the cursor row ID of the currently selected list item. - */ - public long getSelectedItemId() { - return mList.getSelectedItemId(); - } - - /** - * Get the activity's list view widget. - */ - public ListView getListView() { - ensureLayout(); - return mList; - } - - /** - * Get the ListAdapter associated with this activity's ListView. - */ - public ListAdapter getListAdapter() { - return mAdapter; - } - - @Override - public int createLayout() { - if (Config.GD_INFO_LOGS_ENABLED) { - Log.d(LOG_TAG, "No layout specified : creating the default layout"); - } - - switch (getActionBarType()) { - case Dashboard: - return R.layout.gd_list_content_dashboard; - case Empty: - return R.layout.gd_list_content_empty; - case Normal: - default: - return R.layout.gd_list_content_normal; - } - } - - @Override - protected boolean verifyLayout() { - return super.verifyLayout() && mList != null; - } - - @Override - public void onPreContentChanged() { - super.onPreContentChanged(); - - mEmptyView = findViewById(android.R.id.empty); - mList = (ListView) findViewById(android.R.id.list); - if (mList == null) { - throw new RuntimeException("Your content must have a ListView whose id attribute is " - + "'android.R.id.list'"); - } - } - - @Override - public void onPostContentChanged() { - super.onPostContentChanged(); - - if (mEmptyView != null) { - mList.setEmptyView(mEmptyView); - } - mList.setOnItemClickListener(mOnClickListener); - if (mFinishedStart) { - setListAdapter(mAdapter); - } - mHandler.post(mRequestFocus); - mFinishedStart = true; - } - - private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() { - public void onItemClick(AdapterView parent, View v, int position, long id) { - onListItemClick((ListView) parent, v, position, id); - } - }; - -} diff --git a/greendroid/src/main/java/greendroid/app/GDTabActivity.java b/greendroid/src/main/java/greendroid/app/GDTabActivity.java deleted file mode 100644 index 2ca647dcd..000000000 --- a/greendroid/src/main/java/greendroid/app/GDTabActivity.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.app; - -import greendroid.util.Config; -import greendroid.widget.GDActionBar; -import greendroid.widget.GDActionBar.OnActionBarListener; -import greendroid.widget.ActionBarHost; -import greendroid.widget.ActionBarItem; -import android.app.TabActivity; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.TabHost; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * An equivalent to a TabActivity that manages fancy tabs and an ActionBar - * - * @author Cyril Mottier - */ -public class GDTabActivity extends TabActivity implements ActionBarActivity { - - private static final String LOG_TAG = GDTabActivity.class.getSimpleName(); - - private ActionBarHost mActionBarHost; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(createLayout()); - } - - public int createLayout() { - return R.layout.gd_tab_content; - } - - public GDApplication getGDApplication() { - return (GDApplication) getApplication(); - } - - @Override - public void onContentChanged() { - super.onContentChanged(); - - onPreContentChanged(); - onPostContentChanged(); - } - - public void onPreContentChanged() { - mActionBarHost = (ActionBarHost) findViewById(R.id.gd_action_bar_host); - if (mActionBarHost == null) { - throw new RuntimeException( - "Your content must have an ActionBarHost whose id attribute is R.id.gd_action_bar_host"); - } - mActionBarHost.getActionBar().setOnActionBarListener(mActionBarListener); - } - - public void onPostContentChanged() { - - boolean titleSet = false; - - final Intent intent = getIntent(); - if (intent != null) { - String title = intent.getStringExtra(ActionBarActivity.GD_ACTION_BAR_TITLE); - if (title != null) { - titleSet = true; - setTitle(title); - } - } - - if (!titleSet) { - // No title has been set via the Intent. Let's look in the - // ActivityInfo - try { - final ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(), 0); - if (activityInfo.labelRes != 0) { - setTitle(activityInfo.labelRes); - } - } catch (NameNotFoundException e) { - // Do nothing - } - } - - final int visibility = intent.getIntExtra(ActionBarActivity.GD_ACTION_BAR_VISIBILITY, View.VISIBLE); - getGDActionBar().setVisibility(visibility); - } - - // @Override - // protected void onTitleChanged(CharSequence title, int color) { - // setTitle(title); - // } - - @Override - public void setTitle(CharSequence title) { - getGDActionBar().setTitle(title); - } - - @Override - public void setTitle(int titleId) { - setTitle(getString(titleId)); - } - - public GDActionBar getGDActionBar() { - return mActionBarHost.getActionBar(); - } - - public ActionBarItem addActionBarItem(ActionBarItem item) { - return getGDActionBar().addItem(item); - } - - public ActionBarItem addActionBarItem(ActionBarItem item, int itemId) { - return getGDActionBar().addItem(item, itemId); - } - - public ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType) { - return getGDActionBar().addItem(actionBarItemType); - } - - public ActionBarItem addActionBarItem(ActionBarItem.Type actionBarItemType, int itemId) { - return getGDActionBar().addItem(actionBarItemType, itemId); - } - - public FrameLayout getContentView() { - return mActionBarHost.getContentView(); - } - - public boolean onHandleActionBarItemClick(ActionBarItem item, int position) { - return false; - } - - private OnActionBarListener mActionBarListener = new OnActionBarListener() { - public void onActionBarItemClicked(int position) { - if (position == OnActionBarListener.HOME_ITEM) { - - final Class klass = getGDApplication().getHomeActivityClass(); - if (klass != null && !klass.equals(GDTabActivity.class.getClass())) { - if (Config.GD_INFO_LOGS_ENABLED) { - Log.i(LOG_TAG, "Going back to the home activity"); - } - Intent homeIntent = new Intent(GDTabActivity.this, klass); - homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - startActivity(homeIntent); - } - - } else { - if (!onHandleActionBarItemClick(getGDActionBar().getItem(position), position)) { - if (Config.GD_WARNING_LOGS_ENABLED) { - Log.w(LOG_TAG, "Click on item at position " + position + " dropped down to the floor"); - } - } - } - } - }; - - /* - * GDTabActivity methods - */ - - public void addTab(String tag, int labelId, Intent intent) { - addTab(tag, getString(labelId), intent); - } - - public void addTab(String tag, CharSequence label, Intent intent) { - final TabHost host = getTabHost(); - - View indicator = createTabIndicator(label); - if (indicator == null) { - final TextView textIndicator = (TextView) getLayoutInflater().inflate(R.layout.gd_tab_indicator, - getTabWidget(), false); - textIndicator.setText(label); - indicator = textIndicator; - } - - host.addTab(host.newTabSpec(tag).setIndicator(indicator).setContent(intent)); - } - - protected View createTabIndicator(CharSequence label) { - return null; - } - -} diff --git a/greendroid/src/main/java/greendroid/graphics/drawable/ActionBarDrawable.java b/greendroid/src/main/java/greendroid/graphics/drawable/ActionBarDrawable.java deleted file mode 100644 index 17979aaef..000000000 --- a/greendroid/src/main/java/greendroid/graphics/drawable/ActionBarDrawable.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2011 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.graphics.drawable; - -import greendroid.widget.GDActionBar; -import android.content.res.Resources; -import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.LightingColorFilter; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.StateListDrawable; -import android.util.StateSet; - -/** - * A specialized {@link Drawable} that is dedicated to {@link ActionBarItem}s. - * It automatically adapts its color depending on its current state (black when - * pressed or focused and white otherwise). As a result, the - * {@link AutoColorDrawable} is a replacement {@link StateListDrawable} that - * should be used in {@link GDActionBar}s. - * - * @author Cyril Mottier - */ -public class ActionBarDrawable extends BitmapDrawable { - - private ColorFilter mNormalCf; - private ColorFilter mAltCf; - - public ActionBarDrawable(Resources res, int resId) { - this(res, res.getDrawable(resId), Color.WHITE, Color.BLACK); - } - - public ActionBarDrawable(Resources res, Drawable d) { - this(res, d, Color.WHITE, Color.BLACK); - } - - public ActionBarDrawable(Resources res, int resId, int normalColor, int altColor) { - this(res, res.getDrawable(resId), normalColor, altColor); - } - - public ActionBarDrawable(Resources res, Drawable d, int normalColor, int altColor) { - super(res, (d instanceof BitmapDrawable) ? ((BitmapDrawable) d).getBitmap() : null); - mNormalCf = new LightingColorFilter(Color.BLACK, normalColor); - mAltCf = new LightingColorFilter(Color.BLACK, altColor); - } - - @Override - public boolean isStateful() { - return true; - } - - @Override - protected boolean onStateChange(int[] stateSet) { - final boolean useAlt = StateSet.stateSetMatches(DrawableStateSet.ENABLED_PRESSED_STATE_SET, stateSet) - || StateSet.stateSetMatches(DrawableStateSet.ENABLED_FOCUSED_STATE_SET, stateSet); - setColorFilter(useAlt ? mAltCf : mNormalCf); - return true; - } -} diff --git a/greendroid/src/main/java/greendroid/graphics/drawable/DrawableStateSet.java b/greendroid/src/main/java/greendroid/graphics/drawable/DrawableStateSet.java deleted file mode 100644 index 10ccb877e..000000000 --- a/greendroid/src/main/java/greendroid/graphics/drawable/DrawableStateSet.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2011 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.graphics.drawable; - -public class DrawableStateSet { - - public static final int[] EMPTY_STATE_SET = {}; - - public static final int[] ENABLED_PRESSED_STATE_SET = { - android.R.attr.state_enabled, android.R.attr.state_pressed - }; - - public static final int[] ENABLED_FOCUSED_STATE_SET = { - android.R.attr.state_enabled, android.R.attr.state_focused - }; - -} diff --git a/greendroid/src/main/java/greendroid/image/ImageCache.java b/greendroid/src/main/java/greendroid/image/ImageCache.java deleted file mode 100644 index 603172729..000000000 --- a/greendroid/src/main/java/greendroid/image/ImageCache.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.image; - -import greendroid.app.GDApplication.OnLowMemoryListener; -import greendroid.util.GDUtils; - -import java.lang.ref.SoftReference; -import java.util.HashMap; - -import android.content.Context; -import android.graphics.Bitmap; - -public class ImageCache implements OnLowMemoryListener { - - private final HashMap> mSoftCache; - - public ImageCache(Context context) { - mSoftCache = new HashMap>(); - GDUtils.getGDApplication(context).registerOnLowMemoryListener(this); - } - - public static ImageCache from(Context context) { - return GDUtils.getImageCache(context); - } - - public Bitmap get(String url) { - final SoftReference ref = mSoftCache.get(url); - if (ref == null) { - return null; - } - - final Bitmap bitmap = ref.get(); - if (bitmap == null) { - mSoftCache.remove(url); - } - - return bitmap; - } - - public void put(String url, Bitmap bitmap) { - mSoftCache.put(url, new SoftReference(bitmap)); - } - - public void flush() { - mSoftCache.clear(); - } - - public void onLowMemoryReceived() { - flush(); - } -} diff --git a/greendroid/src/main/java/greendroid/image/ImageLoader.java b/greendroid/src/main/java/greendroid/image/ImageLoader.java deleted file mode 100644 index 6216e80f1..000000000 --- a/greendroid/src/main/java/greendroid/image/ImageLoader.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.image; - -import greendroid.util.Config; -import greendroid.util.GDUtils; - -import java.net.URL; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.Handler; -import android.os.Message; -import android.os.Process; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.Log; - -/** - * An ImageLoader asynchronously loads image from a given url. Client may be - * notified from the current image loading state using the - * {@link ImageLoaderCallback}. - *

- * Note: You normally don't need to use the {@link ImageLoader} - * class directly in your application. You'll generally prefer using an - * {@link ImageRequest} that takes care of the entire loading process. - *

- * - * @author Cyril Mottier - */ -public class ImageLoader { - - private static final String LOG_TAG = ImageLoader.class.getSimpleName(); - - public static interface ImageLoaderCallback { - - void onImageLoadingStarted(ImageLoader loader); - - void onImageLoadingEnded(ImageLoader loader, Bitmap bitmap); - - void onImageLoadingFailed(ImageLoader loader, Throwable exception); - } - - private static final int ON_START = 0x100; - private static final int ON_FAIL = 0x101; - private static final int ON_END = 0x102; - - private static ImageCache sImageCache; - private static ExecutorService sExecutor; - private static BitmapFactory.Options sDefaultOptions; - - public ImageLoader(Context context) { - if (sImageCache == null) { - sImageCache = GDUtils.getImageCache(context); - } - if (sExecutor == null) { - sExecutor = GDUtils.getExecutor(context); - } - if (sDefaultOptions == null) { - sDefaultOptions = new BitmapFactory.Options(); - sDefaultOptions.inDither = true; - sDefaultOptions.inScaled = true; - sDefaultOptions.inDensity = DisplayMetrics.DENSITY_MEDIUM; - sDefaultOptions.inTargetDensity = context.getResources().getDisplayMetrics().densityDpi; - } - } - - public Future loadImage(String url, ImageLoaderCallback callback) { - return loadImage(url, callback, null); - } - - public Future loadImage(String url, ImageLoaderCallback callback, ImageProcessor bitmapProcessor) { - return loadImage(url, callback, bitmapProcessor, null); - } - - public Future loadImage(String url, ImageLoaderCallback callback, ImageProcessor bitmapProcessor, BitmapFactory.Options options) { - return sExecutor.submit(new ImageFetcher(url, callback, bitmapProcessor, options)); - } - - private class ImageFetcher implements Runnable { - - private String mUrl; - private ImageHandler mHandler; - private ImageProcessor mBitmapProcessor; - private BitmapFactory.Options mOptions; - - public ImageFetcher(String url, ImageLoaderCallback callback, ImageProcessor bitmapProcessor, BitmapFactory.Options options) { - mUrl = url; - mHandler = new ImageHandler(url, callback); - mBitmapProcessor = bitmapProcessor; - mOptions = options; - } - - public void run() { - - Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); - - final Handler h = mHandler; - Bitmap bitmap = null; - Throwable throwable = null; - - h.sendMessage(Message.obtain(h, ON_START)); - - try { - - if (TextUtils.isEmpty(mUrl)) { - throw new Exception("The given URL cannot be null or empty"); - } - - // TODO Cyril: Use a AndroidHttpClient? - bitmap = BitmapFactory.decodeStream(new URL(mUrl).openStream(), null, (mOptions == null) ? sDefaultOptions : mOptions); - - if (mBitmapProcessor != null && bitmap != null) { - final Bitmap processedBitmap = mBitmapProcessor.processImage(bitmap); - if (processedBitmap != null) { - bitmap = processedBitmap; - } - } - - } catch (Exception e) { - // An error occured while retrieving the image - if (Config.GD_ERROR_LOGS_ENABLED) { - Log.e(LOG_TAG, "Error while fetching image", e); - } - throwable = e; - } - - if (bitmap == null) { - if (throwable == null) { - // Skia returned a null bitmap ... that's usually because - // the given url wasn't pointing to a valid image - throwable = new Exception("Skia image decoding failed"); - } - h.sendMessage(Message.obtain(h, ON_FAIL, throwable)); - } else { - h.sendMessage(Message.obtain(h, ON_END, bitmap)); - } - } - } - - private class ImageHandler extends Handler { - - private String mUrl; - private ImageLoaderCallback mCallback; - - private ImageHandler(String url, ImageLoaderCallback callback) { - mUrl = url; - mCallback = callback; - } - - @Override - public void handleMessage(Message msg) { - - switch (msg.what) { - - case ON_START: - if (mCallback != null) { - mCallback.onImageLoadingStarted(ImageLoader.this); - } - break; - - case ON_FAIL: - if (mCallback != null) { - mCallback.onImageLoadingFailed(ImageLoader.this, (Throwable) msg.obj); - } - break; - - case ON_END: - - final Bitmap bitmap = (Bitmap) msg.obj; - sImageCache.put(mUrl, bitmap); - - if (mCallback != null) { - mCallback.onImageLoadingEnded(ImageLoader.this, bitmap); - } - break; - - default: - super.handleMessage(msg); - break; - } - }; - } - -} diff --git a/greendroid/src/main/java/greendroid/image/ImageProcessor.java b/greendroid/src/main/java/greendroid/image/ImageProcessor.java deleted file mode 100644 index 6534fd454..000000000 --- a/greendroid/src/main/java/greendroid/image/ImageProcessor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.image; - -import android.graphics.Bitmap; - -/** - * An interface specifying a way to process an image prior storing it in the - * application-wide cache. A great way to use this interface is to prepare a - * Bitmap (resizing, adding rounded corners, changing the tint color, etc.) for - * faster drawing. - * - * @author Cyril Mottier - */ -public interface ImageProcessor { - - /** - * Called whenever the bitmap need to be processed. The returned may have - * been modified or completely different. - * - * @param bitmap - * The Bitmap to process - * @return A Bitmap that has been modified - */ - Bitmap processImage(Bitmap bitmap); - -} diff --git a/greendroid/src/main/java/greendroid/image/ImageRequest.java b/greendroid/src/main/java/greendroid/image/ImageRequest.java deleted file mode 100644 index 1ffdf777c..000000000 --- a/greendroid/src/main/java/greendroid/image/ImageRequest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.image; - -import greendroid.image.ImageLoader.ImageLoaderCallback; - -import java.util.concurrent.Future; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - -/** - * An {@link ImageRequest} may be used to request an image from the network. The - * process of requesting for an image is done in three steps: - *
    - *
  • Instantiate a new {@link ImageRequest}
  • - *
  • Call {@link #load(Context)} to start loading the image
  • - *
  • Listen to loading state changes using a {@link ImageRequestCallback}
  • - *
- * - * @author Cyril Mottier - */ -public class ImageRequest { - - /** - * @author Cyril Mottier - */ - public static interface ImageRequestCallback { - void onImageRequestStarted(ImageRequest request); - - void onImageRequestFailed(ImageRequest request, Throwable throwable); - - void onImageRequestEnded(ImageRequest request, Bitmap image); - - void onImageRequestCancelled(ImageRequest request); - } - - private static ImageLoader sImageLoader; - - private Future mFuture; - private String mUrl; - private ImageRequestCallback mCallback; - private ImageProcessor mBitmapProcessor; - private BitmapFactory.Options mOptions; - - public ImageRequest(String url, ImageRequestCallback callback) { - this(url, callback, null); - } - - public ImageRequest(String url, ImageRequestCallback callback, ImageProcessor bitmapProcessor) { - this(url, callback, bitmapProcessor, null); - } - - public ImageRequest(String url, ImageRequestCallback callback, ImageProcessor bitmapProcessor, BitmapFactory.Options options) { - mUrl = url; - mCallback = callback; - mBitmapProcessor = bitmapProcessor; - mOptions = options; - } - - public void setImageRequestCallback(ImageRequestCallback callback) { - mCallback = callback; - } - - public String getUrl() { - return mUrl; - } - - public void load(Context context) { - if (mFuture == null) { - if (sImageLoader == null) { - sImageLoader = new ImageLoader(context); - } - mFuture = sImageLoader.loadImage(mUrl, new InnerCallback(), mBitmapProcessor, mOptions); - } - } - - public void cancel() { - if (!isCancelled()) { - // Here we do not want to force the task to be interrupted. Indeed, - // it may be useful to keep the result in a cache for a further use - mFuture.cancel(false); - if (mCallback != null) { - mCallback.onImageRequestCancelled(this); - } - } - } - - public final boolean isCancelled() { - return mFuture.isCancelled(); - } - - private class InnerCallback implements ImageLoaderCallback { - - public void onImageLoadingStarted(ImageLoader loader) { - if (mCallback != null) { - mCallback.onImageRequestStarted(ImageRequest.this); - } - } - - public void onImageLoadingEnded(ImageLoader loader, Bitmap bitmap) { - if (mCallback != null && !isCancelled()) { - mCallback.onImageRequestEnded(ImageRequest.this, bitmap); - } - mFuture = null; - } - - public void onImageLoadingFailed(ImageLoader loader, Throwable exception) { - if (mCallback != null && !isCancelled()) { - mCallback.onImageRequestFailed(ImageRequest.this, exception); - } - mFuture = null; - } - } - -} diff --git a/greendroid/src/main/java/greendroid/util/Config.java b/greendroid/src/main/java/greendroid/util/Config.java deleted file mode 100644 index 9e301cb2c..000000000 --- a/greendroid/src/main/java/greendroid/util/Config.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.util; - -@SuppressWarnings("all") -public class Config { - - private Config() { - } - - private static final int GD_LOG_LEVEL_INFO = 3; - private static final int GD_LOG_LEVEL_WARNING = 2; - private static final int GD_LOG_LEVEL_ERROR = 1; - private static final int GD_LOG_LEVEL_NONE = 0; - - /** - * Set this flag to {@link Config#GD_LOG_LEVEL_NONE} when releasing your - * application in order to remove all logs generated by GreenDroid. - */ - private static final int GD_LOG_LEVEL = GD_LOG_LEVEL_NONE; - - public static final boolean GD_INFO_LOGS_ENABLED = (GD_LOG_LEVEL == GD_LOG_LEVEL_INFO); - public static final boolean GD_WARNING_LOGS_ENABLED = GD_INFO_LOGS_ENABLED - || (GD_LOG_LEVEL == GD_LOG_LEVEL_WARNING); - public static final boolean GD_ERROR_LOGS_ENABLED = GD_WARNING_LOGS_ENABLED || (GD_LOG_LEVEL == GD_LOG_LEVEL_ERROR); - -} diff --git a/greendroid/src/main/java/greendroid/util/GDUtils.java b/greendroid/src/main/java/greendroid/util/GDUtils.java deleted file mode 100644 index 313c45ab7..000000000 --- a/greendroid/src/main/java/greendroid/util/GDUtils.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.util; - -import greendroid.app.GDApplication; -import greendroid.image.ImageCache; - -import java.util.concurrent.ExecutorService; - -import android.content.Context; - -/** - * Class that provides several utility methods related to GreenDroid. - * - * @author Cyril Mottier - */ -public class GDUtils { - - private GDUtils() { - } - - /** - * Return the current {@link GDApplication} - * - * @param context The calling context - * @return The {@link GDApplication} the given context is linked to. - */ - public static GDApplication getGDApplication(Context context) { - return (GDApplication) context.getApplicationContext(); - } - - /** - * Return the {@link GDApplication} image cache - * - * @param context The calling context - * @return The image cache of the current {@link GDApplication} - */ - public static ImageCache getImageCache(Context context) { - return getGDApplication(context).getImageCache(); - } - - /** - * Return the {@link GDApplication} executors pool. - * - * @param context The calling context - * @return The executors pool of the current {@link GDApplication} - */ - public static ExecutorService getExecutor(Context context) { - return getGDApplication(context).getExecutor(); - } - -} diff --git a/greendroid/src/main/java/greendroid/util/Md5Util.java b/greendroid/src/main/java/greendroid/util/Md5Util.java deleted file mode 100644 index d63f30051..000000000 --- a/greendroid/src/main/java/greendroid/util/Md5Util.java +++ /dev/null @@ -1,38 +0,0 @@ -package greendroid.util; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class Md5Util { - - private static MessageDigest sMd5MessageDigest; - private static StringBuilder sStringBuilder; - - static { - try { - sMd5MessageDigest = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - // TODO cyril: I'm quite sure about my "MD5" algorithm - // but this is not a correct way to handle an exception ... - } - sStringBuilder = new StringBuilder(); - } - - private Md5Util() { - } - - public static String md5(String s) { - - sMd5MessageDigest.reset(); - sMd5MessageDigest.update(s.getBytes()); - - byte digest[] = sMd5MessageDigest.digest(); - - sStringBuilder.setLength(0); - for (int i=0; i - * A {@link AsyncImageView} is a network-aware {@link ImageView}. It may display - * images from the web according to a URL. {@link AsyncImageView} takes care of - * loading asynchronously images on the Internet. It also caches images in an - * application-wide cache to prevent loading images several times. - *

- *

- * Clients may listen the {@link OnImageViewLoadListener} to be notified of the - * current image loading state. - *

- *

- * {@link AsyncImageView} may be extremely useful in {@link ListView}'s row. To - * prevent your {@link AsyncImageView} from downloading while scrolling or - * flinging it is a good idea to pause it using {@link #setPaused(boolean)} - * method. Once the scrolling/flinging is over, un-pause your - * {@link AsyncImageView}s using setPaused(false) - *

- * - * @author Cyril Mottier - */ -public class AsyncImageView extends ImageView implements ImageRequestCallback { - - private static final String LOG_TAG = AsyncImageView.class.getSimpleName(); - - /** - * Clients may listen to {@link AsyncImageView} changes using a - * {@link OnImageViewLoadListener}. - * - * @author Cyril Mottier - */ - public static interface OnImageViewLoadListener { - - /** - * Called when the image started to load - * - * @param imageView - * The AsyncImageView that started loading - */ - void onLoadingStarted(AsyncImageView imageView); - - /** - * Called when the image ended to load that is when the image has been - * downloaded and is ready to be displayed on screen - * - * @param imageView - * The AsyncImageView that ended loading - */ - void onLoadingEnded(AsyncImageView imageView, Bitmap image); - - /** - * Called when the image loading failed - * - * @param imageView - * The AsyncImageView that failed to load - */ - void onLoadingFailed(AsyncImageView imageView, Throwable throwable); - } - - private static final int IMAGE_SOURCE_UNKNOWN = -1; - private static final int IMAGE_SOURCE_RESOURCE = 0; - private static final int IMAGE_SOURCE_DRAWABLE = 1; - private static final int IMAGE_SOURCE_BITMAP = 2; - - private int mImageSource; - private Bitmap mDefaultBitmap; - private Drawable mDefaultDrawable; - private int mDefaultResId; - - private String mUrl; - private ImageRequest mRequest; - private boolean mPaused; - - private Bitmap mBitmap; - private OnImageViewLoadListener mOnImageViewLoadListener; - private ImageProcessor mImageProcessor; - private BitmapFactory.Options mOptions; - - public AsyncImageView(Context context) { - this(context, null); - } - - public AsyncImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public AsyncImageView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - initializeDefaultValues(); - - TypedArray a = context.obtainStyledAttributes(attrs, - R.styleable.AsyncImageView); - - setUrl(a.getString(R.styleable.AsyncImageView_url)); - - Drawable d = a.getDrawable(R.styleable.AsyncImageView_defaultSrc); - if (d != null) { - setDefaultImageDrawable(d); - } - - final int inDensity = a.getInt(R.styleable.AsyncImageView_inDensity, -1); - if (inDensity != -1) { - setInDensity(inDensity); - } - - a.recycle(); - } - - private void initializeDefaultValues() { - mImageSource = IMAGE_SOURCE_UNKNOWN; - mPaused = false; - } - - /** - * Return true if this AsyncImageView is currently loading an image. - * - * @return true if this AsyncImageView is currently loading an image. - * Otherwise it returns false. - */ - public boolean isLoading() { - return mRequest != null; - } - - /** - * Return true if the displayed image has been correctly loaded. - * - * @return true if this AsyncImageView succeed to load the image at the - * given url. - */ - public boolean isLoaded() { - return mRequest == null && mBitmap != null; - } - - /** - * Pause this AsyncImageView preventing it from downloading the image. The - * download process will start back once setPaused(false) is called. - * - * @param paused - */ - public void setPaused(boolean paused) { - if (mPaused != paused) { - mPaused = paused; - if (!paused) { - reload(); - } - } - } - - /** - * Helper to {@link #setBitmapFactoryOptions(Options)} that simply - * sets the inDensity for loaded image. - * - * @param inDensity - * @see AsyncImageView#setBitmapFactoryOptions(Options) - */ - public void setInDensity(int inDensity) { - if (mOptions == null) { - mOptions = new BitmapFactory.Options(); - mOptions.inDither = true; - mOptions.inScaled = true; - mOptions.inTargetDensity = getContext().getResources().getDisplayMetrics().densityDpi; - } - - mOptions.inDensity = inDensity; - } - - /** - * Assign a {@link Options} object to this {@link AsyncImageView}. Those - * options are used internally by the {@link AsyncImageView} when decoding - * the image. This may be used to prevent the default behavior that loads - * all images as mdpi density. - * - * @param options - */ - public void setOptions(BitmapFactory.Options options) { - mOptions = options; - } - - /** - * Reload the image pointed by the given URL - */ - public void reload() { - reload(false); - } - - /** - * Reload the image pointed by the given URL. You may want to force - * reloading by setting the force parameter to true. - * - * @param force - * if true the AsyncImageView won't look into the - * application-wide cache. - */ - public void reload(boolean force) { - if (mRequest == null && mUrl != null) { - - // Prior downloading the image ... let's look in a cache ! - // TODO cyril: This is a synchronous call ... make it asynchronous - mBitmap = null; - if (!force) { - mBitmap = GDUtils.getImageCache(getContext()).get(mUrl); - } - - if (mBitmap != null) { - setImageBitmap(mBitmap); - return; - } - - if (Config.GD_INFO_LOGS_ENABLED) { - Log.i(LOG_TAG, - "Cache miss. Starting to load the image at the given URL"); - } - - setDefaultImage(); - mRequest = new ImageRequest(mUrl, this, mImageProcessor, mOptions); - mRequest.load(getContext()); - } - } - - /** - * Force the loading to be stopped. - */ - public void stopLoading() { - if (mRequest != null) { - mRequest.cancel(); - mRequest = null; - } - } - - /** - * Register a callback to be invoked when an event occured for this - * AsyncImageView. - * - * @param listener - * The listener that will be notified - */ - public void setOnImageViewLoadListener(OnImageViewLoadListener listener) { - mOnImageViewLoadListener = listener; - } - - /** - * Set the url of the image that will be used as the content of this - * AsyncImageView. The given may be null in order to display the default - * image. Please note the url may be a local url. For instance, you can - * asynchronously load images from the disk memory is the url scheme is - * file:// - * - * @param url - * The url of the image to set. Pass null to force the - * AsyncImageView to display the default image - */ - public void setUrl(String url) { - - // Check the url has changed - if (mBitmap != null && url != null && url.equals(mUrl)) { - return; - } - - stopLoading(); - mUrl = url; - - // Setting the url to an empty string force the displayed image to the - // default image - if (TextUtils.isEmpty(mUrl)) { - mBitmap = null; - setDefaultImage(); - } else { - if (!mPaused) { - reload(); - } else { - // We're paused: let's look in a synchronous and efficient cache - // prior using the default image. - mBitmap = GDUtils.getImageCache(getContext()).get(mUrl); - if (mBitmap != null) { - setImageBitmap(mBitmap); - return; - } else { - setDefaultImage(); - } - } - } - } - - /** - * Set the default bitmap as the content of this AsyncImageView - * - * @param bitmap - * The bitmap to set - */ - public void setDefaultImageBitmap(Bitmap bitmap) { - mImageSource = IMAGE_SOURCE_BITMAP; - mDefaultBitmap = bitmap; - setDefaultImage(); - } - - /** - * Set the default drawable as the content of this AsyncImageView - * - * @param drawable - * The drawable to set - */ - public void setDefaultImageDrawable(Drawable drawable) { - mImageSource = IMAGE_SOURCE_DRAWABLE; - mDefaultDrawable = drawable; - setDefaultImage(); - } - - /** - * Set the default resource as the content of this AsyncImageView - * - * @param resId - * The resource identifier to set - */ - public void setDefaultImageResource(int resId) { - mImageSource = IMAGE_SOURCE_RESOURCE; - mDefaultResId = resId; - setDefaultImage(); - } - - /** - * Set an image processor to this AsyncImageView. An ImageProcessor may be - * used in order to work on the retrieved Bitmap prior displaying it on - * screen. - * - * @param imageProcessor - * The {@link ImageProcessor} to set - * @see ImageProcessor - */ - public void setImageProcessor(ImageProcessor imageProcessor) { - mImageProcessor = imageProcessor; - } - - private void setDefaultImage() { - if (mBitmap == null) { - switch (mImageSource) { - case IMAGE_SOURCE_BITMAP: - setImageBitmap(mDefaultBitmap); - break; - case IMAGE_SOURCE_DRAWABLE: - setImageDrawable(mDefaultDrawable); - break; - case IMAGE_SOURCE_RESOURCE: - setImageResource(mDefaultResId); - break; - default: - setImageDrawable(null); - break; - } - } - } - - static class SavedState extends BaseSavedState { - String url; - - SavedState(Parcelable superState) { - super(superState); - } - - private SavedState(Parcel in) { - super(in); - url = in.readString(); - } - - @Override - public void writeToParcel(Parcel out, int flags) { - super.writeToParcel(out, flags); - out.writeString(url); - } - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - public SavedState createFromParcel(Parcel in) { - return new SavedState(in); - } - - public SavedState[] newArray(int size) { - return new SavedState[size]; - } - }; - } - - @Override - public Parcelable onSaveInstanceState() { - Parcelable superState = super.onSaveInstanceState(); - SavedState ss = new SavedState(superState); - - ss.url = mUrl; - - return ss; - } - - @Override - public void onRestoreInstanceState(Parcelable state) { - SavedState ss = (SavedState) state; - super.onRestoreInstanceState(ss.getSuperState()); - - setUrl(ss.url); - } - - public void onImageRequestStarted(ImageRequest request) { - if (mOnImageViewLoadListener != null) { - mOnImageViewLoadListener.onLoadingStarted(this); - } - } - - public void onImageRequestFailed(ImageRequest request, Throwable throwable) { - mRequest = null; - if (mOnImageViewLoadListener != null) { - mOnImageViewLoadListener.onLoadingFailed(this, throwable); - } - } - - public void onImageRequestEnded(ImageRequest request, Bitmap image) { - mBitmap = image; - setImageBitmap(image); - if (mOnImageViewLoadListener != null) { - mOnImageViewLoadListener.onLoadingEnded(this, image); - } - mRequest = null; - } - - public void onImageRequestCancelled(ImageRequest request) { - mRequest = null; - if (mOnImageViewLoadListener != null) { - mOnImageViewLoadListener.onLoadingFailed(this, null); - } - } -} diff --git a/greendroid/src/main/java/greendroid/widget/GDActionBar.java b/greendroid/src/main/java/greendroid/widget/GDActionBar.java deleted file mode 100644 index 044a78f53..000000000 --- a/greendroid/src/main/java/greendroid/widget/GDActionBar.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import greendroid.graphics.drawable.ActionBarDrawable; - -import java.util.LinkedList; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class GDActionBar extends LinearLayout { - - public static final int NONE = 0; - private static final int MAX_ITEMS_COUNT = 3; - - public enum Type { - Normal, Dashboard, Empty - } - - public interface OnActionBarListener { - - int HOME_ITEM = -1; - - /** - * Clients may listen to this method in order to be notified the user - * has clicked on an item. - * - * @param position The position of the item in the action bar. -1 means - * the user pressed the "Home" button. 0 means the user - * clicked the first action bar item (the leftmost item) and - * so on. - */ - void onActionBarItemClicked(int position); - } - - private TextView mTitleView; - private ImageButton mHomeButton; - - private boolean mMerging = false; - - private CharSequence mTitle; - private GDActionBar.Type mType; - private OnActionBarListener mOnActionBarListener; - private LinkedList mItems; - - private Drawable mDividerDrawable; - private Drawable mHomeDrawable; - private int mDividerWidth; - - public GDActionBar(Context context) { - this(context, null); - } - - public GDActionBar(Context context, AttributeSet attrs) { - this(context, attrs, R.attr.gdActionBarStyle); - } - - public GDActionBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); - - initActionBar(); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionBar, defStyle, 0); - - mTitle = a.getString(R.styleable.ActionBar_gdtitle); - - mDividerDrawable = a.getDrawable(R.styleable.ActionBar_dividerDrawable); - mDividerWidth = a.getDimensionPixelSize(R.styleable.ActionBar_dividerWidth, -1); - mHomeDrawable = a.getDrawable(R.styleable.ActionBar_homeDrawable); - if (mHomeDrawable == null) { - mHomeDrawable = new ActionBarDrawable(getResources(), R.drawable.gd_action_bar_home); - } - - int layoutID; - int type = a.getInteger(R.styleable.ActionBar_type, -1); - switch (type) { - case 2: - mType = Type.Empty; - layoutID = R.layout.gd_action_bar_empty; - break; - case 1: - mType = Type.Dashboard; - layoutID = R.layout.gd_action_bar_dashboard; - break; - case 0: - default: - mType = Type.Normal; - layoutID = R.layout.gd_action_bar_normal; - break; - } - - // HACK Cyril: Without this, the onFinishInflate is called twice !?! - // This issue is due to a bug when Android inflates a layout with a - // parent - which is compulsory with a tag. I've reported this - // bug to Romain Guy who fixed it (patch will probably be available in - // the Gingerbread release). - mMerging = true; - LayoutInflater.from(context).inflate(layoutID, this); - mMerging = false; - - a.recycle(); - } - - private void initActionBar() { - mItems = new LinkedList(); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - if (!mMerging) { - - switch (mType) { - case Dashboard: - mHomeButton = (ImageButton) findViewById(R.id.gd_action_bar_home_item); - mHomeButton.setOnClickListener(mClickHandler); - break; - - case Empty: - mTitleView = (TextView) findViewById(R.id.gd_action_bar_title); - setTitle(mTitle); - break; - - case Normal: - default: - mHomeButton = (ImageButton) findViewById(R.id.gd_action_bar_home_item); - mHomeButton.setOnClickListener(mClickHandler); - mHomeButton.setImageDrawable(mHomeDrawable); - mHomeButton.setContentDescription(getContext().getString(R.string.gd_go_home)); - mTitleView = (TextView) findViewById(R.id.gd_action_bar_title); - setTitle(mTitle); - break; - - } - } - } - - public void setOnActionBarListener(OnActionBarListener listener) { - mOnActionBarListener = listener; - } - - public void setTitle(CharSequence title) { - mTitle = title; - if (mTitleView != null) { - mTitleView.setText(title); - } - } - - public ActionBarItem addItem(ActionBarItem.Type actionBarItemType) { - return addItem(ActionBarItem.createWithType(this, actionBarItemType), NONE); - } - - public ActionBarItem addItem(ActionBarItem.Type actionBarItemType, int itemId) { - return addItem(ActionBarItem.createWithType(this, actionBarItemType), itemId); - } - - public ActionBarItem addItem(ActionBarItem item) { - return addItem(item, NONE); - } - - public ActionBarItem addItem(ActionBarItem item, int itemId) { - - if (mItems.size() >= MAX_ITEMS_COUNT) { - /* - * An ActionBar must contain as few items as possible. So let's keep - * a limit :) - */ - return null; - } - - if (item != null) { - - item.setItemId(itemId); - - if (mDividerDrawable != null) { - ImageView divider = new ImageView(getContext()); - int dividerWidth = (mDividerWidth > 0) ? mDividerWidth : mDividerDrawable.getIntrinsicWidth(); - final LinearLayout.LayoutParams lp = new LayoutParams(dividerWidth, LayoutParams.FILL_PARENT); - divider.setLayoutParams(lp); - divider.setBackgroundDrawable(mDividerDrawable); - addView(divider); - } - - final View itemView = item.getItemView(); - itemView.findViewById(R.id.gd_action_bar_item).setOnClickListener(mClickHandler); - - final int size = (int) getResources().getDimension(R.dimen.gd_action_bar_height); - addView(itemView, new LayoutParams(size, LayoutParams.FILL_PARENT)); - - mItems.add(item); - } - - return item; - } - - public ActionBarItem getItem(int position) { - if (position < 0 || position >= mItems.size()) { - return null; - } - return mItems.get(position); - } - - public void removeItem(ActionBarItem item) { - removeItem(mItems.indexOf(item)); - } - - public void removeItem(int position) { - - if (position < 0 || position >= mItems.size()) { - return; - } - - final int viewIndex = indexOfChild(mItems.get(position).getItemView()); - final int increment = (mDividerDrawable != null) ? 1 : 0; - removeViews(viewIndex - increment, 1 + increment); - mItems.remove(position); - } - - public void setType(Type type) { - if (type != mType) { - - removeAllViews(); - - int layoutId = 0; - switch (type) { - case Empty: - layoutId = R.layout.gd_action_bar_empty; - break; - case Dashboard: - layoutId = R.layout.gd_action_bar_dashboard; - break; - case Normal: - layoutId = R.layout.gd_action_bar_normal; - break; - } - - mType = type; - LayoutInflater.from(getContext()).inflate(layoutId, this); - - // Reset all items - LinkedList itemsCopy = new LinkedList(mItems); - mItems.clear(); - for (ActionBarItem item : itemsCopy) { - addItem(item); - } - } - } - - public ActionBarItem newActionBarItem(Class klass) { - try { - ActionBarItem item = klass.newInstance(); - item.setActionBar(this); - return item; - } catch (Exception e) { - throw new IllegalArgumentException("The given klass must have a default constructor"); - } - } - - private OnClickListener mClickHandler = new OnClickListener() { - - public void onClick(View v) { - if (mOnActionBarListener != null) { - - if (v == mHomeButton) { - mOnActionBarListener.onActionBarItemClicked(OnActionBarListener.HOME_ITEM); - return; - } - - final int itemCount = mItems.size(); - for (int i = 0; i < itemCount; i++) { - final ActionBarItem item = mItems.get(i); - final View itemButton = item.getItemView().findViewById(R.id.gd_action_bar_item); - if (v == itemButton) { - item.onItemClicked(); - mOnActionBarListener.onActionBarItemClicked(i); - break; - } - } - } - } - - }; - -} diff --git a/greendroid/src/main/java/greendroid/widget/ItemAdapter.java b/greendroid/src/main/java/greendroid/widget/ItemAdapter.java deleted file mode 100644 index 30a968c49..000000000 --- a/greendroid/src/main/java/greendroid/widget/ItemAdapter.java +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import greendroid.widget.item.DescriptionItem; -import greendroid.widget.item.DrawableItem; -import greendroid.widget.item.Item; -import greendroid.widget.item.LongTextItem; -import greendroid.widget.item.ProgressItem; -import greendroid.widget.item.SeparatorItem; -import greendroid.widget.item.SubtextItem; -import greendroid.widget.item.SubtitleItem; -import greendroid.widget.item.TextItem; -import greendroid.widget.item.ThumbnailItem; -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.util.AttributeSet; -import android.util.Xml; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.BaseAdapter; -import android.widget.ListAdapter; -import android.widget.ListView; - -/** - *

- * A {@link ListAdapter} that acts like an {@link ArrayAdapter}. It manages a - * ListView that is backed by an array of {@link Item}s. This is more advanced - * than a simple {@link ArrayAdapter} because it handles different types of - * cells internally. Adding, removing items from the internal array is also - * possible. - *

- *

- * The {@link ListView} can be notified manually using - * {@link notifyDataSetChanged} or automatically using the notifyOnChange flag. - *

- *

- * Finally, an ItemAdapter can be created via XML code using the createFromXml - * method. This is a very powerful feature when you want to display static data - * or if you want to prepopulate your ItemAdapter. - *

- * - * @author Cyril Mottier - */ -public class ItemAdapter extends BaseAdapter { - - private static final int DEFAULT_MAX_VIEW_TYPE_COUNT = 10; - - private static class TypeInfo { - int count; - int type; - } - - private List mItems; - private HashMap, TypeInfo> mTypes; - private Context mContext; - - private boolean mNotifyOnChange; - private int mMaxViewTypeCount; - - /** - * Constructs an empty ItemAdapter. - * - * @param context The context associated with this array adapter. - */ - public ItemAdapter(Context context) { - this(context, new ArrayList()); - } - - /** - * Constructs an ItemAdapter using the specified items. - *

- * Note : Using this constructor implies the internal array will be - * immutable. As a result, adding or removing items will result in an - * exception. - *

- * - * @param context The context associated with this array adapter. - * @param items The array of Items use as underlying data for this - * ItemAdapter - */ - public ItemAdapter(Context context, Item[] items) { - this(context, Arrays.asList(items), DEFAULT_MAX_VIEW_TYPE_COUNT); - } - - /** - * Constructs an ItemAdapter using the specified items. - *

- * - * @param context The context associated with this array adapter. - * @param items The list of Items used as data for this ItemAdapter - */ - public ItemAdapter(Context context, List items) { - this(context, items, DEFAULT_MAX_VIEW_TYPE_COUNT); - } - - /** - * Constructs an ItemAdapter using the specified items. - *

- * Note : Using this constructor implies the internal array will be - * immutable. As a result, adding or removing items will result in an - * exception. - *

- *

- * Note: A ListAdapter doesn't handle variable view type - * count (even after a notifyDataSetChanged). An ItemAdapter handles several - * types of cell are therefore use a trick to overcome the previous problem. - * This trick is to fool the ListView several types exist. If you already - * know the number of item types you can have, simply set it using this method - *

- * - * @param context The context associated with this array adapter. - * @param items The array of Items use as underlying data for this - * ItemAdapter - * @param maxViewTypeCount The maximum number of view type that may be - * generated by this ItemAdapter - */ - public ItemAdapter(Context context, Item[] items, int maxViewTypeCount) { - this(context, Arrays.asList(items), maxViewTypeCount); - } - - /** - * Constructs an ItemAdapter using the specified items. - *

- * Note: A ListAdapter doesn't handle variable view type - * count (even after a notifyDataSetChanged). An ItemAdapter handles several - * types of cell are therefore use a trick to overcome the previous problem. - * This trick is to fool the ListView several types exist. If you already - * know the number of item types you can have, simply set it using this method - *

- * - * @param context The context associated with this array adapter. - * @param items The list of Items used as data for this ItemAdapter - * @param maxViewTypeCount The maximum number of view type that may be - * generated by this ItemAdapter - */ - public ItemAdapter(Context context, List items, int maxViewTypeCount) { - mContext = context; - mItems = items; - mTypes = new HashMap, TypeInfo>(); - mMaxViewTypeCount = Integer.MAX_VALUE; - - for (Item item : mItems) { - addItem(item); - } - - mMaxViewTypeCount = Math.max(1, Math.max(mTypes.size(), maxViewTypeCount)); - } - - private void addItem(Item item) { - final Class klass = item.getClass(); - TypeInfo info = mTypes.get(klass); - - if (info == null) { - final int type = mTypes.size(); - if (type >= mMaxViewTypeCount) { - throw new RuntimeException("This ItemAdapter may handle only " + mMaxViewTypeCount - + " different view types."); - } - final TypeInfo newInfo = new TypeInfo(); - newInfo.count = 1; - newInfo.type = type; - mTypes.put(klass, newInfo); - } else { - info.count++; - } - } - - private void removeItem(Item item) { - final Class klass = item.getClass(); - TypeInfo info = mTypes.get(klass); - - if (info != null) { - info.count--; - if (info.count == 0) { - // TODO cyril: Creating a pool to keep all TypeInfo instances - // could be a great idea in the future. - mTypes.remove(klass); - } - } - } - - /** - * Returns the context associated with this array adapter. The context is - * used to create views from the resource passed to the constructor. - * - * @return The Context associated to this ItemAdapter - */ - public Context getContext() { - return mContext; - } - - /** - * Returns the current number of different views types used in this - * ItemAdapter. Having a getCurrentViewTypeCount equal to - * getViewTypeCount means you won't be able to add a new type of - * view in this adapter (The Adapter class doesn't allow variable view type - * count). - * - * @return The current number of different view types - */ - public int getActualViewTypeCount() { - return mTypes.size(); - } - - /** - * Adds the specified object at the end of the array. - * - * @param object The object to add at the end of the array. - */ - public void add(Item item) { - mItems.add(item); - addItem(item); - if (mNotifyOnChange) { - notifyDataSetChanged(); - } - } - - /** - * Inserts the specified object at the specified index in the array. - * - * @param item The object to insert into the array. - * @param index The index at which the object must be inserted. - */ - public void insert(Item item, int index) { - mItems.add(index, item); - addItem(item); - if (mNotifyOnChange) { - notifyDataSetChanged(); - } - } - - /** - * Removes the specified object from the array. - * - * @param object The object to remove. - */ - public void remove(Item item) { - if (mItems.remove(item)) { - removeItem(item); - if (mNotifyOnChange) { - notifyDataSetChanged(); - } - } - } - - /** - * Remove all elements from the list. - */ - public void clear() { - mItems.clear(); - mTypes.clear(); - if (mNotifyOnChange) { - notifyDataSetChanged(); - } - } - - /** - * Sorts the content of this adapter using the specified comparator. - * - * @param comparator The comparator used to sort the objects contained in - * this adapter. - */ - public void sort(Comparator comparator) { - Collections.sort(mItems, comparator); - if (mNotifyOnChange) { - notifyDataSetChanged(); - } - } - - /** - * Control whether methods that change the list ({@link #add}, - * {@link #insert}, {@link #remove}, {@link #clear}) automatically call - * {@link #notifyDataSetChanged}. If set to false, caller must manually call - * notifyDataSetChanged() to have the changes reflected in the attached - * view. The default is true, and calling notifyDataSetChanged() resets the - * flag to true. - * - * @param notifyOnChange if true, modifications to the list will - * automatically call {@link #notifyDataSetChanged} - */ - public void setNotifyOnChange(boolean notifyOnChange) { - mNotifyOnChange = notifyOnChange; - } - - /** - * Creates an ItemAdapter from a given resource ID - * - * @param context The Context in which the ItemAdapter will be used in - * @param xmlId The resource ID of an XML file that describes a set of - * {@link Item} - * @return a new ItemAdapter constructed with the content of the file - * pointed by xmlId - * @throws XmlPullParserException - * @throws IOException - */ - public static ItemAdapter createFromXml(Context context, int xmlId) throws XmlPullParserException, IOException { - return createFromXml(context, context.getResources().getXml(xmlId)); - } - - /** - * Creates an ItemAdapter from a given XML document. Called on a parser - * positioned at a tag in an XML document, tries to create an ItemAdapter - * from that tag. - * - * @param context The Context in which the ItemAdapter will be used in - * @param xmlId The resource ID of an XML file that describes a set of - * {@link Item} - * @return a new ItemAdapter constructed with the content of the file - * pointed by xmlId - * @throws XmlPullParserException - * @throws IOException - */ - public static ItemAdapter createFromXml(Context context, XmlPullParser parser) throws XmlPullParserException, - IOException { - AttributeSet attrs = Xml.asAttributeSet(parser); - - int type; - while ((type = parser.next()) != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT) { - // Empty loop - } - - if (type != XmlPullParser.START_TAG) { - throw new XmlPullParserException("No start tag found"); - } - - if (!parser.getName().equals("item-array")) { - throw new XmlPullParserException("Unknown start tag. Should be 'item-array'"); - } - - final List items = new ArrayList(); - final int innerDepth = parser.getDepth() + 1; - final Resources r = context.getResources(); - - int depth; - while ((type = parser.next()) != XmlPullParser.END_DOCUMENT - && ((depth = parser.getDepth()) >= innerDepth || type != XmlPullParser.END_TAG)) { - if (type != XmlPullParser.START_TAG) { - continue; - } - - if (depth > innerDepth) { - continue; - } - - String name = parser.getName(); - Item item; - if (name.equals("text-item")) { - item = new TextItem(); - } else if (name.equals("longtext-item")) { - item = new LongTextItem(); - } else if (name.equals("description-item")) { - item = new DescriptionItem(); - } else if (name.equals("separator-item")) { - item = new SeparatorItem(); - } else if (name.equals("progress-item")) { - item = new ProgressItem(); - } else if (name.equals("drawable-item")) { - item = new DrawableItem(); - } else if (name.equals("subtitle-item")) { - item = new SubtitleItem(); - } else if (name.equals("subtext-item")) { - item = new SubtextItem(); - } else if (name.equals("thumbnail-item")) { - item = new ThumbnailItem(); - } else { - // TODO cyril: Remove that so that we can extend from - // ItemAdapter and creates our own items via XML? - throw new XmlPullParserException(parser.getPositionDescription() + ": invalid item tag " + name); - } - - // TODO cyril: Here we should call a method that children may - // override to be able to create our own Items - - if (item != null) { - item.inflate(r, parser, attrs); - items.add(item); - } - } - - return new ItemAdapter(context, items); - } - - public int getCount() { - return mItems.size(); - } - - public Object getItem(int position) { - return mItems.get(position); - } - - public long getItemId(int position) { - return position; - } - - @Override - public int getItemViewType(int position) { - return mTypes.get(getItem(position).getClass()).type; - } - - @Override - public boolean isEnabled(int position) { - return ((Item) getItem(position)).enabled; - } - - @Override - public int getViewTypeCount() { - return mMaxViewTypeCount; - } - - public View getView(int position, View convertView, ViewGroup parent) { - - final Item item = (Item) getItem(position); - ItemView cell = (ItemView) convertView; - - if (cell == null) { - cell = item.newView(mContext, null); - cell.prepareItemView(); - } - - cell.setObject(item); - - return (View) cell; - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/LoaderActionBarItem.java b/greendroid/src/main/java/greendroid/widget/LoaderActionBarItem.java deleted file mode 100644 index 2f505d665..000000000 --- a/greendroid/src/main/java/greendroid/widget/LoaderActionBarItem.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import android.view.LayoutInflater; -import android.view.View; - -import com.cyrilmottier.android.greendroid.R; - -/** - * An extension of a {@link NormalActionBarItem} that supports a loading states. - * When in loading state, a {@link LoaderActionBarItem} display an indeterminate - * circular {@link ProgressBar}. This item is very handful with application - * fetching data from the network or performing long background tasks. - * - * @author Cyril Mottier - */ -public class LoaderActionBarItem extends NormalActionBarItem { - - private boolean mLoading; - private View mButton; - private View mProgressBar; - - public LoaderActionBarItem() { - mLoading = false; - } - - @Override - protected View createItemView() { - return LayoutInflater.from(mContext).inflate(R.layout.gd_action_bar_item_loader, mActionBar, false); - } - - @Override - protected void prepareItemView() { - super.prepareItemView(); - mButton = mItemView.findViewById(R.id.gd_action_bar_item); - mProgressBar = mItemView.findViewById(R.id.gd_action_bar_item_progress_bar); - } - - @Override - protected void onItemClicked() { - super.onItemClicked(); - setLoading(true); - } - - /** - * Sets the loading state of this {@link LoaderActionBarItem}. - * - * @param loading The new loading state. If true, an indeterminate - * {@link ProgressBar} is displayed. When false (default value) - * the {@link ActionBarItem} behaves exactly like a regular - * {@link NormalActionBarItem}. - */ - public void setLoading(boolean loading) { - if (loading != mLoading) { - mProgressBar.setVisibility(loading ? View.VISIBLE : View.GONE); - mButton.setVisibility(loading ? View.GONE : View.VISIBLE); - mLoading = loading; - } - } -} diff --git a/greendroid/src/main/java/greendroid/widget/NormalActionBarItem.java b/greendroid/src/main/java/greendroid/widget/NormalActionBarItem.java deleted file mode 100644 index 03d43665e..000000000 --- a/greendroid/src/main/java/greendroid/widget/NormalActionBarItem.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ImageButton; - -import com.cyrilmottier.android.greendroid.R; - -/** - * Default implementation of an {@link ActionBarItem}. A - * {@link NormalActionBarItem} is a simple {@link ActionBarItem} containing a - * single icon. - * - * @author Cyril Mottier - */ -public class NormalActionBarItem extends ActionBarItem { - - @Override - protected View createItemView() { - return LayoutInflater.from(mContext).inflate(R.layout.gd_action_bar_item_base, mActionBar, false); - } - - @Override - protected void prepareItemView() { - super.prepareItemView(); - final ImageButton imageButton = (ImageButton) mItemView.findViewById(R.id.gd_action_bar_item); - imageButton.setImageDrawable(mDrawable); - imageButton.setContentDescription(mContentDescription); - } - - @Override - protected void onContentDescriptionChanged() { - super.onContentDescriptionChanged(); - mItemView.findViewById(R.id.gd_action_bar_item).setContentDescription(mContentDescription); - } - - @Override - protected void onDrawableChanged() { - super.onDrawableChanged(); - ImageButton imageButton = (ImageButton) mItemView.findViewById(R.id.gd_action_bar_item); - imageButton.setImageDrawable(mDrawable); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/QuickAction.java b/greendroid/src/main/java/greendroid/widget/QuickAction.java deleted file mode 100644 index 9249056b2..000000000 --- a/greendroid/src/main/java/greendroid/widget/QuickAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import java.lang.ref.WeakReference; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.view.View; - -/** - * A QuickAction implements an item in a {@link QuickActionWidget}. A - * QuickAction represents a single action and may contain a text and an icon. - * - * @author Benjamin Fellous - * @author Cyril Mottier - */ -public class QuickAction { - - public Drawable mDrawable; - public CharSequence mTitle; - - /* package */WeakReference mView; - - public QuickAction(Drawable d, CharSequence title) { - mDrawable = d; - mTitle = title; - } - - public QuickAction(Context ctx, int drawableId, CharSequence title) { - mDrawable = ctx.getResources().getDrawable(drawableId); - mTitle = title; - } - - public QuickAction(Context ctx, Drawable d, int titleId) { - mDrawable = d; - mTitle = ctx.getResources().getString(titleId); - } - - public QuickAction(Context ctx, int drawableId, int titleId) { - mDrawable = ctx.getResources().getDrawable(drawableId); - mTitle = ctx.getResources().getString(titleId); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/QuickActionBar.java b/greendroid/src/main/java/greendroid/widget/QuickActionBar.java deleted file mode 100644 index 9fe475d85..000000000 --- a/greendroid/src/main/java/greendroid/widget/QuickActionBar.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import java.lang.ref.WeakReference; -import java.util.List; - -import android.content.Context; -import android.graphics.Rect; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.MeasureSpec; -import android.view.View.OnClickListener; -import android.view.ViewGroup; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.view.animation.Interpolator; -import android.widget.FrameLayout; -import android.widget.HorizontalScrollView; -import android.widget.ListView; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A QuickActionBar displays a set of {@link QuickAction} on a single row. In - * case too many items are added to the QuickActionBar, the user can - * horizontally scroll QuickActions. Using a QuickActionBar is a great - * replacement for the long click UI pattern. For instance, - * {@link QuickActionBar} adds secondary actions to an item of a - * {@link ListView}. - * - * @author Benjamin Fellous - * @author Cyril Mottier - */ -public class QuickActionBar extends QuickActionWidget { - - private HorizontalScrollView mScrollView; - private Animation mRackAnimation; - private ViewGroup mRack; - private ViewGroup mQuickActionItems; - - private List mQuickActions; - - public QuickActionBar(Context context) { - super(context); - - mRackAnimation = AnimationUtils.loadAnimation(context, R.anim.gd_rack); - - mRackAnimation.setInterpolator(new Interpolator() { - public float getInterpolation(float t) { - final float inner = (t * 1.55f) - 1.1f; - return 1.2f - inner * inner; - } - }); - - setContentView(R.layout.gd_quick_action_bar); - - final View v = getContentView(); - mRack = (ViewGroup) v.findViewById(R.id.gdi_rack); - mQuickActionItems = (ViewGroup) v.findViewById(R.id.gdi_quick_action_items); - mScrollView = (HorizontalScrollView) v.findViewById(R.id.gdi_scroll); - } - - @Override - public void show(View anchor) { - super.show(anchor); - mScrollView.scrollTo(0, 0); - } - - @Override - protected void onMeasureAndLayout(Rect anchorRect, View contentView) { - - contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY), - ViewGroup.LayoutParams.WRAP_CONTENT); - - int rootHeight = contentView.getMeasuredHeight(); - - int offsetY = getArrowOffsetY(); - int dyTop = anchorRect.top; - int dyBottom = getScreenHeight() - anchorRect.bottom; - - boolean onTop = (dyTop > dyBottom); - int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY; - - setWidgetSpecs(popupY, onTop); - } - - @Override - protected void populateQuickActions(List quickActions) { - - mQuickActions = quickActions; - - final LayoutInflater inflater = LayoutInflater.from(getContext()); - - for (QuickAction action : quickActions) { - TextView view = (TextView) inflater.inflate(R.layout.gd_quick_action_bar_item, mQuickActionItems, false); - view.setText(action.mTitle); - - view.setCompoundDrawablesWithIntrinsicBounds(null, action.mDrawable, null, null); - view.setOnClickListener(mClickHandlerInternal); - mQuickActionItems.addView(view); - action.mView = new WeakReference(view); - } - } - - @Override - protected void onClearQuickActions() { - super.onClearQuickActions(); - mQuickActionItems.removeAllViews(); - } - - private OnClickListener mClickHandlerInternal = new OnClickListener() { - - public void onClick(View view) { - - final OnQuickActionClickListener listener = getOnQuickActionClickListener(); - - if (listener != null) { - final int itemCount = mQuickActions.size(); - for (int i = 0; i < itemCount; i++) { - if (view == mQuickActions.get(i).mView.get()) { - listener.onQuickActionClicked(QuickActionBar.this, i); - break; - } - } - } - - if (getDismissOnClick()) { - dismiss(); - } - } - - }; - -} diff --git a/greendroid/src/main/java/greendroid/widget/QuickActionGrid.java b/greendroid/src/main/java/greendroid/widget/QuickActionGrid.java deleted file mode 100644 index 9692f7b45..000000000 --- a/greendroid/src/main/java/greendroid/widget/QuickActionGrid.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import java.util.List; - -import android.content.Context; -import android.graphics.Rect; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.MeasureSpec; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.BaseAdapter; -import android.widget.GridView; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A {@link QuickActionGrid} is an implementation of a {@link QuickActionWidget} - * that displays {@link QuickAction}s in a grid manner. This is usually used to create - * a shortcut to jump between different type of information on screen. - * - * @author Benjamin Fellous - * @author Cyril Mottier - */ -public class QuickActionGrid extends QuickActionWidget { - - private GridView mGridView; - - public QuickActionGrid(Context context) { - super(context); - - setContentView(R.layout.gd_quick_action_grid); - - final View v = getContentView(); - mGridView = (GridView) v.findViewById(R.id.gdi_grid); - } - - @Override - protected void populateQuickActions(final List quickActions) { - - mGridView.setAdapter(new BaseAdapter() { - - public View getView(int position, View view, ViewGroup parent) { - - TextView textView = (TextView) view; - - if (view == null) { - final LayoutInflater inflater = LayoutInflater.from(getContext()); - textView = (TextView) inflater.inflate(R.layout.gd_quick_action_grid_item, mGridView, false); - } - - QuickAction quickAction = quickActions.get(position); - textView.setText(quickAction.mTitle); - textView.setCompoundDrawablesWithIntrinsicBounds(null, quickAction.mDrawable, null, null); - - return textView; - - } - - public long getItemId(int position) { - return position; - } - - public Object getItem(int position) { - return null; - } - - public int getCount() { - return quickActions.size(); - } - }); - - mGridView.setOnItemClickListener(mInternalItemClickListener); - } - - @Override - protected void onMeasureAndLayout(Rect anchorRect, View contentView) { - - contentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); - contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY), - LayoutParams.WRAP_CONTENT); - - int rootHeight = contentView.getMeasuredHeight(); - - int offsetY = getArrowOffsetY(); - int dyTop = anchorRect.top; - int dyBottom = getScreenHeight() - anchorRect.bottom; - - boolean onTop = (dyTop > dyBottom); - int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY; - - setWidgetSpecs(popupY, onTop); - } - - private OnItemClickListener mInternalItemClickListener = new OnItemClickListener() { - public void onItemClick(AdapterView adapterView, View view, int position, long id) { - getOnQuickActionClickListener().onQuickActionClicked(QuickActionGrid.this, position); - if (getDismissOnClick()) { - dismiss(); - } - } - }; - -} diff --git a/greendroid/src/main/java/greendroid/widget/QuickActionWidget.java b/greendroid/src/main/java/greendroid/widget/QuickActionWidget.java deleted file mode 100644 index 13f3ffc37..000000000 --- a/greendroid/src/main/java/greendroid/widget/QuickActionWidget.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import java.util.ArrayList; -import java.util.List; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; -import android.util.Log; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.PopupWindow; - -import com.cyrilmottier.android.greendroid.R; - -/** - * Abstraction of a {@link QuickAction} wrapper. A QuickActionWidget is - * displayed on top of the user interface (it overlaps all UI elements but the - * notification bar). Clients may listen to user actions using a - * {@link OnQuickActionClickListener} . - * - * @author Benjamin Fellous - * @author Cyril Mottier - */ -public abstract class QuickActionWidget extends PopupWindow { - - private static final int MEASURE_AND_LAYOUT_DONE = 1 << 1; - - private final int[] mLocation = new int[2]; - protected final Rect mRect = new Rect(); - - private int mPrivateFlags; - - private Context mContext; - - private boolean mDismissOnClick; - private int mArrowOffsetY; - - private int mPopupY; - private boolean mIsOnTop; - - private int mScreenHeight; - private int mScreenWidth; - private boolean mIsDirty; - - private OnQuickActionClickListener mOnQuickActionClickListener; - private ArrayList mQuickActions = new ArrayList(); - - /** - * Interface that may be used to listen to clicks on quick actions. - * - * @author Benjamin Fellous - * @author Cyril Mottier - */ - public static interface OnQuickActionClickListener { - /** - * Clients may implement this method to be notified of a click on a - * particular quick action. - * - * @param position Position of the quick action that have been clicked. - */ - void onQuickActionClicked(QuickActionWidget widget, int position); - } - - /** - * Creates a new QuickActionWidget for the given context. - * - * @param context The context in which the QuickActionWidget is running in - */ - public QuickActionWidget(Context context) { - super(context); - - mContext = context; - - initializeDefault(); - - setFocusable(true); - setTouchable(true); - setOutsideTouchable(true); - setWidth(WindowManager.LayoutParams.WRAP_CONTENT); - setHeight(WindowManager.LayoutParams.WRAP_CONTENT); - - final WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - mScreenWidth = windowManager.getDefaultDisplay().getWidth(); - mScreenHeight = windowManager.getDefaultDisplay().getHeight(); - } - - /** - * Equivalent to {@link PopupWindow#setContentView(View)} but with a layout - * identifier. - * - * @param layoutId The layout identifier of the view to use. - */ - public void setContentView(int layoutId) { - setContentView(LayoutInflater.from(mContext).inflate(layoutId, null)); - } - - private void initializeDefault() { - mDismissOnClick = true; - mArrowOffsetY = mContext.getResources().getDimensionPixelSize(R.dimen.gd_arrow_offset); - } - - /** - * Returns the arrow offset for the Y axis. - * - * @see {@link #setArrowOffsetY(int)} - * @return The arrow offset. - */ - public int getArrowOffsetY() { - return mArrowOffsetY; - } - - /** - * Sets the arrow offset to a new value. Setting an arrow offset may be - * particular useful to warn which view the QuickActionWidget is related to. - * By setting a positive offset, the arrow will overlap the view given by - * {@link #show(View)}. The default value is 5dp. - * - * @param offsetY The offset for the Y axis - */ - public void setArrowOffsetY(int offsetY) { - mArrowOffsetY = offsetY; - } - - /** - * Returns the width of the screen. - * - * @return The width of the screen - */ - protected int getScreenWidth() { - return mScreenWidth; - } - - /** - * Returns the height of the screen. - * - * @return The height of the screen - */ - protected int getScreenHeight() { - return mScreenHeight; - } - - /** - * By default, a {@link QuickActionWidget} is dismissed once the user - * clicked on a {@link QuickAction}. This behavior can be changed using this - * method. - * - * @param dismissOnClick True if you want the {@link QuickActionWidget} to - * be dismissed on click else false. - */ - public void setDismissOnClick(boolean dismissOnClick) { - mDismissOnClick = dismissOnClick; - } - - public boolean getDismissOnClick() { - return mDismissOnClick; - } - - /** - * @param listener - */ - public void setOnQuickActionClickListener(OnQuickActionClickListener listener) { - mOnQuickActionClickListener = listener; - } - - /** - * Add a new QuickAction to this {@link QuickActionWidget}. Adding a new - * {@link QuickAction} while the {@link QuickActionWidget} is currently - * being shown does nothing. The new {@link QuickAction} will be displayed - * on the next call to {@link #show(View)}. - * - * @param action The new {@link QuickAction} to add - */ - public void addQuickAction(QuickAction action) { - if (action != null) { - mQuickActions.add(action); - mIsDirty = true; - } - } - - /** - * Removes all {@link QuickAction} from this {@link QuickActionWidget}. - */ - public void clearAllQuickActions() { - if (!mQuickActions.isEmpty()) { - mQuickActions.clear(); - mIsDirty = true; - } - } - - /** - * Call that method to display the {@link QuickActionWidget} anchored to the - * given view. - * - * @param anchor The view the {@link QuickActionWidget} will be anchored to. - */ - public void show(View anchor) { - - final View contentView = getContentView(); - - if (contentView == null) { - throw new IllegalStateException("You need to set the content view using the setContentView method"); - } - - // Replaces the background of the popup with a cleared background - setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - final int[] loc = mLocation; - anchor.getLocationOnScreen(loc); - mRect.set(loc[0], loc[1], loc[0] + anchor.getWidth(), loc[1] + anchor.getHeight()); - - if (mIsDirty) { - clearQuickActions(); - populateQuickActions(mQuickActions); - } - - onMeasureAndLayout(mRect, contentView); - - if ((mPrivateFlags & MEASURE_AND_LAYOUT_DONE) != MEASURE_AND_LAYOUT_DONE) { - throw new IllegalStateException("onMeasureAndLayout() did not set the widget specification by calling" - + " setWidgetSpecs()"); - } - - showArrow(); - prepareAnimationStyle(); - - try { - showAtLocation(anchor, Gravity.NO_GRAVITY, getShowAtX(), mPopupY); - } catch (Exception e) { - Log.w("quick-action-show", e); - } - } - - protected int getShowAtX() { - return 0; - } - - protected void clearQuickActions() { - if (!mQuickActions.isEmpty()) { - onClearQuickActions(); - } - } - - protected void onClearQuickActions() { - } - - protected abstract void populateQuickActions(List quickActions); - - protected abstract void onMeasureAndLayout(Rect anchorRect, View contentView); - - protected void setWidgetSpecs(int popupY, boolean isOnTop) { - mPopupY = popupY; - mIsOnTop = isOnTop; - - mPrivateFlags |= MEASURE_AND_LAYOUT_DONE; - } - - private void showArrow() { - - final View contentView = getContentView(); - final int arrowId = mIsOnTop ? R.id.gdi_arrow_down : R.id.gdi_arrow_up; - final View arrow = contentView.findViewById(arrowId); - final View arrowUp = contentView.findViewById(R.id.gdi_arrow_up); - final View arrowDown = contentView.findViewById(R.id.gdi_arrow_down); - - if (arrowId == R.id.gdi_arrow_up) { - arrowUp.setVisibility(View.VISIBLE); - arrowDown.setVisibility(View.INVISIBLE); - } else if (arrowId == R.id.gdi_arrow_down) { - arrowUp.setVisibility(View.INVISIBLE); - arrowDown.setVisibility(View.VISIBLE); - } - - ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) arrow.getLayoutParams(); - param.leftMargin = getArrowLeftMargin(arrow); - } - - protected int getArrowLeftMargin(View arrow) { - return mRect.centerX() - (arrow.getMeasuredWidth()) / 2; - } - - private void prepareAnimationStyle() { - - final int screenWidth = mScreenWidth; - final boolean onTop = mIsOnTop; - final int arrowPointX = mRect.centerX(); - - if (arrowPointX <= screenWidth / 4) { - setAnimationStyle(onTop ? R.style.GreenDroid_Animation_PopUp_Left - : R.style.GreenDroid_Animation_PopDown_Left); - } else if (arrowPointX >= 3 * screenWidth / 4) { - setAnimationStyle(onTop ? R.style.GreenDroid_Animation_PopUp_Right - : R.style.GreenDroid_Animation_PopDown_Right); - } else { - setAnimationStyle(onTop ? R.style.GreenDroid_Animation_PopUp_Center - : R.style.GreenDroid_Animation_PopDown_Center); - } - } - - protected Context getContext() { - return mContext; - } - - protected OnQuickActionClickListener getOnQuickActionClickListener() { - return mOnQuickActionClickListener; - } -} diff --git a/greendroid/src/main/java/greendroid/widget/SegmentedAdapter.java b/greendroid/src/main/java/greendroid/widget/SegmentedAdapter.java deleted file mode 100644 index 9e3f01e60..000000000 --- a/greendroid/src/main/java/greendroid/widget/SegmentedAdapter.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import android.database.DataSetObservable; -import android.database.DataSetObserver; -import android.view.View; -import android.view.ViewGroup; - -/** - * A SegmentedAdapter is a data source of a SegmentedHost/SegmentedHost. - * - * @author Cyril Mottier - */ -public abstract class SegmentedAdapter { - - private final DataSetObservable mDataSetObservable = new DataSetObservable(); - - /** - * How many segments have to be displayed - * - * @return The number of segment displayed by the underlying SegmentedBar - */ - public abstract int getCount(); - - /** - * Get the View associated to the segment at position position - * - * @param position The position of the item in the SegmentedAdapter - * @param parent The parent that this view will eventually be attached to - * @return A View corresponding to the segment at the given position - */ - public abstract View getView(int position, ViewGroup parent); - - /** - * Get the title for the segment at position position - * - * @param position The position of the segment in the SegmentedBar - * @return A title for the segment at the given position. - */ - public abstract String getSegmentTitle(int position); - - /** - * Register an observer that is called when changes happen to the data used - * by this adapter. - * - * @param observer The object that gets notified when the data set changes. - */ - public void registerDataSetObserver(DataSetObserver observer) { - mDataSetObservable.registerObserver(observer); - } - - /** - * Unregister an observer that has previously been registered with this - * adapter via {@link #unregisterDataSetObserver(DataSetObserver)} - * - * @param observer The object to unregister - */ - public void unregisterDataSetObserver(DataSetObserver observer) { - mDataSetObservable.unregisterObserver(observer); - } - - /** - * Notifies the attached View that the underlying data has changed and - * should refresh itself. - */ - public void notifyDataSetChanged() { - mDataSetObservable.notifyChanged(); - } -} diff --git a/greendroid/src/main/java/greendroid/widget/SegmentedBar.java b/greendroid/src/main/java/greendroid/widget/SegmentedBar.java deleted file mode 100644 index 1b8a34936..000000000 --- a/greendroid/src/main/java/greendroid/widget/SegmentedBar.java +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnFocusChangeListener; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.ImageView; -import android.widget.LinearLayout; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A SegmentedBar displays a set of Buttons. Only one segment in a SegmentedBar - * can be selected at a time. A SegmentedBar is very close to a TabWidget in - * term of functionalities. - * - * @author Cyril Mottier - */ -public class SegmentedBar extends LinearLayout implements OnFocusChangeListener { - - /** - * Clients may use this listener to be notified of any changes that occurs - * on the SegmentBar - * - * @author Cyril Mottier - */ - public static interface OnSegmentChangeListener { - /** - * Notification that the current segment has changed. - * - * @param index The index of the new selected segment. - * @param clicked Whether the segment has been selected via a user - * click. - */ - public void onSegmentChange(int index, boolean clicked); - } - - private OnSegmentChangeListener mOnSegmentChangeListener; - private int mCheckedSegment; - private Drawable mDividerDrawable; - private int mDividerWidth; - - public SegmentedBar(Context context) { - this(context, null); - } - - public SegmentedBar(Context context, AttributeSet attrs) { - this(context, attrs, R.attr.gdSegmentedBarStyle); - } - - public SegmentedBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); - initSegmentedBar(); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SegmentedBar, defStyle, 0); - - mDividerDrawable = a.getDrawable(R.styleable.SegmentedBar_dividerDrawable); - mDividerWidth = a.getDimensionPixelSize(R.styleable.SegmentedBar_dividerWidth, 0); - - a.recycle(); - } - - private void initSegmentedBar() { - mCheckedSegment = 0; - setOrientation(LinearLayout.HORIZONTAL); - - // Register ourselves so that we can handle focus on internal segments - setFocusable(true); - setOnFocusChangeListener(this); - } - - /** - * Sets the drawable that is used as divider between each segment. - * - * @param dividerDrawable The drawable to used as a divider. Note : using a - * ColorDrawable will not work properly as the intrinsic width of - * a ColorDrawable is -1. - */ - public void setDividerDrawable(Drawable dividerDrawable) { - mDividerDrawable = dividerDrawable; - } - - /** - * Sets the drawable that is used as divider between each segment. - * - * @param resId The identifier of the Drawable to use. - */ - public void setDividerDrawable(int resId) { - mDividerDrawable = getContext().getResources().getDrawable(resId); - } - - /** - * Sets the width of the divider that will be used as segment divider. If - * the dividerWidth has not been set, the intrinsic width of the divider - * drawable is used. - * - * @param width Width of the divider - */ - public void setDividerWidth(int width) { - mDividerWidth = width; - } - - /** - * Returns the current number of segment in this SegmentBar - * - * @return The number of segments in this SegmentBar - */ - public int getSegmentCount() { - int segmentCount = getChildCount(); - // If we have divider we'll have an odd number of child - if (mDividerDrawable != null) { - segmentCount = (segmentCount + 1) / 2; - } - return segmentCount; - } - - /** - * Use this method to register an OnSegmentChangeListener and listen to - * changes that occur on this SegmentBar - * - * @param listener The listener to use - */ - public void setOnSegmentChangeListener(OnSegmentChangeListener listener) { - mOnSegmentChangeListener = listener; - } - - /** - * Sets the current segment to the index index - * - * @param index The index of the segment to set. Client will be notified - * using this method of the segment change. - */ - public void setCurrentSegment(int index) { - if (index < 0 || index >= getSegmentCount()) { - return; - } - - ((CheckBox) getChildSegmentAt(mCheckedSegment)).setChecked(false); - mCheckedSegment = index; - ((CheckBox) getChildSegmentAt(mCheckedSegment)).setChecked(true); - } - - /** - * Returns the view representing the segment at the index index - * - * @param index The index of the segment to retrieve - * @return The view that represents the segment at index index - */ - public View getChildSegmentAt(int index) { - /* - * If we are using dividers, then instead of segments at 0, 1, 2, ... we - * have segments at 0, 2, 4, ... - */ - if (mDividerDrawable != null) { - index *= 2; - } - return getChildAt(index); - } - - /** - * Adds a segment to the SegmentBar. This method automatically adds a - * divider if needed. - * - * @param title The title of the segment to add. - */ - public void addSegment(String title) { - - final Context context = getContext(); - final LayoutInflater inflater = LayoutInflater.from(context); - - /* - * First of all, we have to check whether or not we need to add a - * divider. A divider is added when there is at least one segment - */ - if (mDividerDrawable != null && getSegmentCount() > 0) { - ImageView divider = new ImageView(context); - final int width = (mDividerWidth > 0) ? mDividerWidth : mDividerDrawable.getIntrinsicWidth(); - final LinearLayout.LayoutParams lp = new LayoutParams(width, LayoutParams.FILL_PARENT); - lp.setMargins(0, 0, 0, 0); - divider.setLayoutParams(lp); - divider.setBackgroundDrawable(mDividerDrawable); - addView(divider); - } - - CheckBox segment = (CheckBox) inflater.inflate(R.layout.gd_segment, this, false); - segment.setText(title); - - segment.setClickable(true); - segment.setFocusable(true); - segment.setOnFocusChangeListener(this); - segment.setOnCheckedChangeListener(new SegmentCheckedListener(getSegmentCount())); - segment.setOnClickListener(new SegmentClickedListener(getSegmentCount())); - - addView(segment); - } - - public void onFocusChange(View v, boolean hasFocus) { - - if (!hasFocus) { - return; - } - - if (v == this) { - final View segment = getChildSegmentAt(mCheckedSegment); - if (segment != null) { - segment.requestFocus(); - } - } - - else { - final int segmentCounts = getSegmentCount(); - for (int i = 0; i < segmentCounts; i++) { - if (getChildSegmentAt(i) == v) { - setCurrentSegment(i); - notifyListener(i, false); - break; - } - } - } - } - - private class SegmentClickedListener implements OnClickListener { - - private final int mSegmentIndex; - - private SegmentClickedListener(int segmentIndex) { - mSegmentIndex = segmentIndex; - } - - public void onClick(View v) { - final CheckBox segment = (CheckBox) getChildSegmentAt(mCheckedSegment); - if (mSegmentIndex == mCheckedSegment && !segment.isChecked()) { - segment.setChecked(true); - } else { - notifyListener(mSegmentIndex, true); - } - } - - } - - private class SegmentCheckedListener implements OnCheckedChangeListener { - - private final int mSegmentIndex; - - private SegmentCheckedListener(int segmentIndex) { - mSegmentIndex = segmentIndex; - } - - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - setCurrentSegment(mSegmentIndex); - } - } - } - - private void notifyListener(int index, boolean clicked) { - if (mOnSegmentChangeListener != null) { - mOnSegmentChangeListener.onSegmentChange(index, clicked); - } - } -} diff --git a/greendroid/src/main/java/greendroid/widget/SegmentedHost.java b/greendroid/src/main/java/greendroid/widget/SegmentedHost.java deleted file mode 100644 index e6c52aade..000000000 --- a/greendroid/src/main/java/greendroid/widget/SegmentedHost.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget; - -import greendroid.util.Config; -import greendroid.widget.SegmentedBar.OnSegmentChangeListener; -import android.content.Context; -import android.content.res.TypedArray; -import android.database.DataSetObserver; -import android.util.AttributeSet; -import android.util.Log; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.LinearLayout; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A SegmentedHost is a wrapper view that handle a SegmentedBar and a - * FrameLayout that hold the content. Data (titles, and content Views) are - * provided to the SegmentedHost via a {@link SegmentedAdapter}. - * - * @author Cyril Mottier - */ -public class SegmentedHost extends LinearLayout { - - private final static String LOG_TAG = SegmentedHost.class.getSimpleName(); - - private int mSegmentedBarId; - private SegmentedBar mSegmentedBar; - private int mSegmentedHostId; - private FrameLayout mContentView; - private int mSelectedSegment; - - private SegmentedAdapter mAdapter; - private View[] mViews; - private DataSetObserver mSegmentObserver = new DataSetObserver() { - - public void onChanged() { - setupSegmentedHost(mSelectedSegment); - } - - public void onInvalidated() { - // Do nothing - method never called - } - }; - - public SegmentedHost(Context context) { - this(context, null); - } - - public SegmentedHost(Context context, AttributeSet attrs) { - this(context, attrs, R.attr.gdSegmentedHostStyle); - } - - public SegmentedHost(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs); - initSegmentedView(); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SegmentedHost, defStyle, 0); - - mSegmentedBarId = a.getResourceId(R.styleable.SegmentedHost_segmentedBar, -1); - if (mSegmentedBarId <= 0) { - throw new IllegalArgumentException("The segmentedBar attribute is required and must refer " - + "to a valid child."); - } - - mSegmentedHostId = a.getResourceId(R.styleable.SegmentedHost_segmentedContentView, -1); - if (mSegmentedHostId <= 0) { - throw new IllegalArgumentException("The segmentedHost attribute is required and must refer " - + "to a valid child."); - } - } - - private void initSegmentedView() { - setOrientation(LinearLayout.VERTICAL); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - mSegmentedBar = (SegmentedBar) findViewById(mSegmentedBarId); - if (mSegmentedBar == null) { - throw new IllegalArgumentException("The segmentedBar attribute must refer to an existing child."); - } - mSegmentedBar.setOnSegmentChangeListener(new SegmentSwitcher()); - - mContentView = (FrameLayout) findViewById(mSegmentedHostId); - if (mContentView == null) { - throw new IllegalArgumentException("The segmentedHost attribute must refer to an existing child."); - } else if (!(mContentView instanceof FrameLayout)) { - throw new RuntimeException("The segmentedHost attribute must refer to a FrameLayout"); - - } - } - - public SegmentedBar getSegmentedBar() { - return mSegmentedBar; - } - - public FrameLayout getContentView() { - return mContentView; - } - - public void setAdapter(SegmentedAdapter adapter) { - - if (mAdapter != null) { - mAdapter.unregisterDataSetObserver(mSegmentObserver); - } - mAdapter = adapter; - - if (adapter != null) { - mAdapter.registerDataSetObserver(mSegmentObserver); - } - setupSegmentedHost(0); - } - - private void setupSegmentedHost(int selectedSegment) { - - if (Config.GD_INFO_LOGS_ENABLED) { - Log.i(LOG_TAG, "Preparing the SegmentedHost with the segment " + selectedSegment); - } - - mSegmentedBar.removeAllViews(); - mContentView.removeAllViews(); - mViews = null; - - if (mAdapter != null) { - // Add all segments to the Segmentedbar - final int count = mAdapter.getCount(); - for (int i = 0; i < count; i++) { - mSegmentedBar.addSegment(mAdapter.getSegmentTitle(i)); - } - - if (selectedSegment < 0) { - selectedSegment = 0; - } else if (selectedSegment > count) { - selectedSegment = count; - } - - if (count > 0) { - // Prepare the SegmentBar - mViews = new View[count]; - mSegmentedBar.setCurrentSegment(selectedSegment); - - // And displays the first view - setContentView(selectedSegment); - } - } - } - - private class SegmentSwitcher implements OnSegmentChangeListener { - public void onSegmentChange(int index, boolean clicked) { - setContentView(index); - } - } - - private void setContentView(int index) { - mSelectedSegment = index; - mContentView.removeAllViews(); - if (mViews[index] == null) { - mViews[index] = mAdapter.getView(index, SegmentedHost.this); - } - mContentView.addView(mViews[index]); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/DescriptionItem.java b/greendroid/src/main/java/greendroid/widget/item/DescriptionItem.java deleted file mode 100644 index 0c3e504da..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/DescriptionItem.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; -import android.content.Context; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A description item displays a text on several lines. The default - * implementation makes it disabled. - * - * @author Cyril Mottier - */ -public class DescriptionItem extends TextItem { - - /** - * @hide - */ - public DescriptionItem() { - this(null); - } - - /** - * Creates a new DescriptionItem with the given description. - * - * @param description The description for the current item. - */ - public DescriptionItem(String description) { - super(description); - enabled = false; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_description_item_view, parent); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/DrawableItem.java b/greendroid/src/main/java/greendroid/widget/item/DrawableItem.java deleted file mode 100644 index 3635529ec..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/DrawableItem.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A DrawableItem displays a single Drawable on the left of the item cell and a - * description text on the right. A DrawableItem takes care of adapting itself - * depending on the presence of its Drawable. - * - * @author Cyril Mottier - */ -public class DrawableItem extends TextItem { - - /** - * The resource identifier for the drawable. - */ - public int drawableId; - - /** - * @hide - */ - public DrawableItem() { - this(null); - } - - /** - * Constructs a new DrawableItem that has no Drawable and displays the given - * text. Used as it, a DrawableItem is very similar to a TextItem - * - * @param text The text of this DrawableItem - */ - public DrawableItem(String text) { - this(text, 0); - } - - /** - * Constructs a new DrawableItem that has no Drawable and displays the given - * text. Used as it, a DrawableItem is very similar to a TextItem - * - * @param text The text of this DrawableItem - * @param drawableId The resource identifier of the Drawable - */ - public DrawableItem(String text, int drawableId) { - super(text); - this.drawableId = drawableId; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_drawable_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.DrawableItem); - drawableId = a.getResourceId(R.styleable.DrawableItem_drawable, 0); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/Item.java b/greendroid/src/main/java/greendroid/widget/item/Item.java deleted file mode 100644 index 3fc17b179..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/Item.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.view.LayoutInflater; -import android.view.ViewGroup; -import android.widget.ListView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * Base class for all items used in GreenDroid. An item represents a wrapper of - * data. Each item contains at least all the information needed to display a - * single row in a {@link ListView}. - * - * @author Cyril Mottier - */ -public abstract class Item { - - private SparseArray mTags; - private Object mTag; - - /** - * Set to true when this item is enabled? - */ - public boolean enabled; - - /** - * Constructs a new item. - */ - public Item() { - // By default, an item is enabled - enabled = true; - } - - /** - * Returns the tag associated to that item. - * - * @return The tag associated to this item. - */ - public Object getTag() { - return mTag; - } - - /** - * Sets the tag associated with this item. A tag is often used to store - * extra information. - * - * @param tag The tag associated to this item - */ - public void setTag(Object tag) { - mTag = tag; - } - - /** - * Returns the tag associated with this item and the specified key. - * - * @param key The key of the tag to retrieve - * @return The tag associated to the key key or null if no tags are - * associated to that key - */ - public Object getTag(int key) { - return (mTags == null) ? null : mTags.get(key); - } - - /** - * Sets a tag associated with this item and a key. A tag is often used to - * store extra information. - * - * @param key The key for the specified tag - * @param tag A tag that will be associated to that item - */ - public void setTag(int key, Object tag) { - if (mTags == null) { - mTags = new SparseArray(); - } - mTags.put(key, tag); - } - - /** - * Returns a view that is associated to the current item. The returned view - * is normally capable of being a good recipient for all item's information. - * - * @param context The context in which the {@link ItemView} will be used - * @param parent The parent view of that new view. It is usually the parent - * ListView - * @return A new allocated view for the current Item - */ - public abstract ItemView newView(Context context, ViewGroup parent); - - /** - * Helper method to inflate a layout using a given Context and a layoutID. - * - * @param context The current context - * @param layoutID The identifier of the layout to inflate - * @return A newly inflated view - */ - protected static ItemView createCellFromXml(Context context, int layoutID, ViewGroup parent) { - return (ItemView) LayoutInflater.from(context).inflate(layoutID, parent, false); - } - - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - TypedArray a = r.obtainAttributes(attrs, R.styleable.Item); - enabled = a.getBoolean(R.styleable.Item_enabled, enabled); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/LongTextItem.java b/greendroid/src/main/java/greendroid/widget/item/LongTextItem.java deleted file mode 100644 index 6232d26a3..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/LongTextItem.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; -import android.content.Context; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A LongTextItem is very similar to a regular {@link TextItem}. The only - * difference is it may display the text on several lines. - * - * @author Cyril Mottier - */ -public class LongTextItem extends TextItem { - - public LongTextItem() { - this(null); - } - - public LongTextItem(String text) { - super(text); - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_long_text_item_view, parent); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/ProgressItem.java b/greendroid/src/main/java/greendroid/widget/item/ProgressItem.java deleted file mode 100644 index 280682782..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/ProgressItem.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * Progress indicator that displays a centered text with a circular progress bar - * when something is in progress.@ - * - * @author Cyril Mottier - */ -public class ProgressItem extends TextItem { - - private static final boolean DEFAULT_IS_IN_PROGRESS = false; - - /** - * The state of this item. When set to true, a circular progress bar - * indicates something is going on/being computed. - */ - public boolean isInProgress; - - /** - * @hide - */ - public ProgressItem() { - this(null); - } - - /** - * Constructs a ProgressItem with the given text. By default, the circular - * progress bar is not visible ... which indicates nothing is currently in - * progress. - * - * @param text The text for this item - */ - public ProgressItem(String text) { - this(text, DEFAULT_IS_IN_PROGRESS); - } - - /** - * Constructs a ProgressItem with the given text and state. - * - * @param text The text for this item - * @param isInProgress The state for this item - */ - public ProgressItem(String text, boolean isInProgress) { - super(text); - this.isInProgress = isInProgress; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_progress_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.ProgressItem); - isInProgress = a.getBoolean(R.styleable.ProgressItem_isInProgress, DEFAULT_IS_IN_PROGRESS); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/SeparatorItem.java b/greendroid/src/main/java/greendroid/widget/item/SeparatorItem.java deleted file mode 100644 index 1028e0975..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/SeparatorItem.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; -import android.content.Context; -import android.view.ViewGroup; -import android.widget.ListView; - -import com.cyrilmottier.android.greendroid.R; - -/** - * Acts as a separator between important {@link ListView} sections. A separator - * display a text on a single line. - * - * @author Cyril Mottier - */ -public class SeparatorItem extends TextItem { - - /** - * @hide - */ - public SeparatorItem() { - this(null); - } - - /** - * Constructs a SeparatorItem made of the given text - * - * @param text The text for this SeparatorItem - */ - public SeparatorItem(String text) { - super(text); - enabled = false; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_separator_item_view, parent); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/SubtextItem.java b/greendroid/src/main/java/greendroid/widget/item/SubtextItem.java deleted file mode 100644 index 20d81ad50..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/SubtextItem.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A SubtextItem is really similar to a SubtitleItem as it displays a two lines - * of text. The only difference between those two items are the number of lines - * occupied by the content. A SubtextItem may generally used to display a - * description text. As a result, it is disabled by default - * - * @author Cyril Mottier - */ -public class SubtextItem extends TextItem { - - /** - * The string that will be displayed above the title of the item (possibly - * on several lines). - */ - public String subtext; - - /** - * @hide - */ - public SubtextItem() { - this(null); - } - - /** - * @hide - */ - public SubtextItem(String text) { - this(text, null); - } - - /** - * Constructs a new SubtextItem - * - * @param text The main text for this item - * @param subtext The subtext - */ - public SubtextItem(String text, String subtext) { - super(text); - this.subtext = subtext; - enabled = false; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_subtext_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.SubtextItem); - subtext = a.getString(R.styleable.SubtextItem_subtext); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/SubtitleItem.java b/greendroid/src/main/java/greendroid/widget/item/SubtitleItem.java deleted file mode 100644 index a17322bab..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/SubtitleItem.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * An Item that contains two Strings : a text and a subtitle. The representation - * of this Item is a view containing two lines of text. Uf you want to be sure, - * the subtitle can occupy more than a single line, please use a - * {@link SubtextItem} - * - * @author Cyril Mottier - */ -public class SubtitleItem extends TextItem { - - /** - * The subtitle of this item - */ - public String subtitle; - - /** - * @hide - */ - public SubtitleItem() { - } - - /** - * Constructs a new SubtitleItem with the specified text and subtitle. - * - * @param text The text for this item - * @param subtitle The item's subtitle - */ - public SubtitleItem(String text, String subtitle) { - super(text); - this.subtitle = subtitle; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_subtitle_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.SubtitleItem); - subtitle = a.getString(R.styleable.SubtitleItem_gdsubtitle); - a.recycle(); - } -} diff --git a/greendroid/src/main/java/greendroid/widget/item/TextItem.java b/greendroid/src/main/java/greendroid/widget/item/TextItem.java deleted file mode 100644 index ca969f308..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/TextItem.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A TextItem is a very basic item that only contains a single text. This text - * will be displayed on a single line onto the screen. - * - * @author Cyril Mottier - */ -public class TextItem extends Item { - - /** - * The item's text. - */ - public String text; - - public TextItem() { - } - - /** - * Constructs a new TextItem with the specified text. - * - * @param text The text used to create this item. - */ - public TextItem(String text) { - this.text = text; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_text_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.TextItem); - text = a.getString(R.styleable.TextItem_text); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/item/ThumbnailItem.java b/greendroid/src/main/java/greendroid/widget/item/ThumbnailItem.java deleted file mode 100644 index 1b9c8b8ba..000000000 --- a/greendroid/src/main/java/greendroid/widget/item/ThumbnailItem.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.item; - -import greendroid.widget.itemview.ItemView; - -import java.io.IOException; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.ViewGroup; - -import com.cyrilmottier.android.greendroid.R; - -/** - * A ThumbnailItem item is a complex item that wraps a drawable and two strings - * : a title and a subtitle. The representation of that item is quite common to - * Android users: The drawable is on the left of the item view and on the right - * the title and the subtitle are displayed like a {@link SubtitleItem}. - * - * @author Cyril Mottier - */ -public class ThumbnailItem extends SubtitleItem { - - /** - * The resource ID for the drawable. - */ - public int drawableId; - - /** - * @hide - */ - public ThumbnailItem() { - } - - /** - * @param text - * @param subtitle - * @param drawableId - */ - public ThumbnailItem(String text, String subtitle, int drawableId) { - super(text, subtitle); - this.drawableId = drawableId; - } - - @Override - public ItemView newView(Context context, ViewGroup parent) { - return createCellFromXml(context, R.layout.gd_thumbnail_item_view, parent); - } - - @Override - public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, - IOException { - super.inflate(r, parser, attrs); - - TypedArray a = r.obtainAttributes(attrs, R.styleable.ThumbnailItem); - drawableId = a.getResourceId(R.styleable.ThumbnailItem_thumbnail, drawableId); - a.recycle(); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/DescriptionItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/DescriptionItemView.java deleted file mode 100644 index 71fd56e05..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/DescriptionItemView.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.TextItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.TextView; - -public class DescriptionItemView extends TextView implements ItemView { - - public DescriptionItemView(Context context) { - this(context, null); - } - - public DescriptionItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public DescriptionItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - } - - public void setObject(Item item) { - setText(((TextItem) item).text); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/DrawableItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/DrawableItemView.java deleted file mode 100644 index 834f2a4c0..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/DrawableItemView.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.DrawableItem; -import greendroid.widget.item.Item; -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class DrawableItemView extends LinearLayout implements ItemView { - - private TextView mTextView; - private ImageView mImageView; - - public DrawableItemView(Context context) { - this(context, null); - } - - public DrawableItemView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public void prepareItemView() { - mTextView = (TextView) findViewById(R.id.gd_text); - mImageView = (ImageView) findViewById(R.id.gd_drawable); - } - - public void setObject(Item object) { - final DrawableItem item = (DrawableItem) object; - mTextView.setText(item.text); - - final int drawableId = item.drawableId; - if (drawableId == 0) { - mImageView.setVisibility(View.GONE); - } else { - mImageView.setVisibility(View.VISIBLE); - mImageView.setImageResource(drawableId); - } - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/ItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/ItemView.java deleted file mode 100644 index 237df3793..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/ItemView.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; - -public interface ItemView { - - void prepareItemView(); - - void setObject(Item item); - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/LongTextItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/LongTextItemView.java deleted file mode 100644 index 497cfa1a8..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/LongTextItemView.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.LongTextItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.TextView; - -public class LongTextItemView extends TextView implements ItemView { - - public LongTextItemView(Context context) { - this(context, null); - } - - public LongTextItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public LongTextItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - } - - public void setObject(Item item) { - setText(((LongTextItem) item).text); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/ProgressItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/ProgressItemView.java deleted file mode 100644 index 00fd4ffba..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/ProgressItemView.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.ProgressItem; -import android.content.Context; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class ProgressItemView extends FrameLayout implements ItemView { - - private ProgressBar mProgressBar; - private TextView mTextView; - - public ProgressItemView(Context context) { - this(context, null); - } - - public ProgressItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ProgressItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - mProgressBar = (ProgressBar) findViewById(R.id.gd_progress_bar); - mTextView = (TextView) findViewById(R.id.gd_text); - } - - public void setObject(Item object) { - final ProgressItem item = (ProgressItem) object; - mProgressBar.setVisibility(item.isInProgress ? View.VISIBLE : View.GONE); - mTextView.setText(item.text); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/SeparatorItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/SeparatorItemView.java deleted file mode 100644 index 9c906eac6..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/SeparatorItemView.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.TextItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.TextView; - -public class SeparatorItemView extends TextView implements ItemView { - - public SeparatorItemView(Context context) { - this(context, null); - } - - public SeparatorItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SeparatorItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - } - - public void setObject(Item object) { - final TextItem item = (TextItem) object; - setText(item.text); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/SubtextItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/SubtextItemView.java deleted file mode 100644 index 2fdcf396c..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/SubtextItemView.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.SubtextItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class SubtextItemView extends LinearLayout implements ItemView { - - private TextView mTextView; - private TextView mSubtextView; - - public SubtextItemView(Context context) { - this(context, null); - } - - public SubtextItemView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public void prepareItemView() { - mTextView = (TextView) findViewById(R.id.gd_text); - mSubtextView = (TextView) findViewById(R.id.gd_subtext); - } - - public void setObject(Item object) { - final SubtextItem item = (SubtextItem) object; - mTextView.setText(item.text); - mSubtextView.setText(item.subtext); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/SubtitleItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/SubtitleItemView.java deleted file mode 100644 index 6dfcc562a..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/SubtitleItemView.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.SubtitleItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class SubtitleItemView extends LinearLayout implements ItemView { - - private TextView mTextView; - private TextView mSubtitleView; - - public SubtitleItemView(Context context) { - this(context, null); - } - - public SubtitleItemView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public void prepareItemView() { - mTextView = (TextView) findViewById(R.id.gd_text); - mSubtitleView = (TextView) findViewById(R.id.gd_subtitle); - } - - public void setObject(Item object) { - final SubtitleItem item = (SubtitleItem) object; - mTextView.setText(item.text); - mSubtitleView.setText(item.subtitle); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/TextItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/TextItemView.java deleted file mode 100644 index 3637790c2..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/TextItemView.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.TextItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.TextView; - -public class TextItemView extends TextView implements ItemView { - - public TextItemView(Context context) { - this(context, null); - } - - public TextItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public TextItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - } - - public void setObject(Item object) { - setText(((TextItem) object).text); - } - -} diff --git a/greendroid/src/main/java/greendroid/widget/itemview/ThumbnailItemView.java b/greendroid/src/main/java/greendroid/widget/itemview/ThumbnailItemView.java deleted file mode 100644 index 0d331d0b7..000000000 --- a/greendroid/src/main/java/greendroid/widget/itemview/ThumbnailItemView.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) - * - * 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 greendroid.widget.itemview; - -import greendroid.widget.item.Item; -import greendroid.widget.item.ThumbnailItem; -import android.content.Context; -import android.util.AttributeSet; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.cyrilmottier.android.greendroid.R; - -public class ThumbnailItemView extends RelativeLayout implements ItemView { - - private TextView mTextView; - private TextView mSubtitleView; - private ImageView mThumbnailView; - - public ThumbnailItemView(Context context) { - this(context, null); - } - - public ThumbnailItemView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public ThumbnailItemView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public void prepareItemView() { - mTextView = (TextView) findViewById(R.id.gd_text); - mSubtitleView = (TextView) findViewById(R.id.gd_subtitle); - mThumbnailView = (ImageView) findViewById(R.id.gd_thumbnail); - } - - public void setObject(Item object) { - final ThumbnailItem item = (ThumbnailItem) object; - mTextView.setText(item.text); - mSubtitleView.setText(item.subtitle); - mThumbnailView.setImageResource(item.drawableId); - } - -} diff --git a/greendroid/src/main/res/anim/gd_grow_from_bottom.xml b/greendroid/src/main/res/anim/gd_grow_from_bottom.xml deleted file mode 100644 index 0ac697564..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_bottom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/anim/gd_grow_from_bottomleft_to_topright.xml b/greendroid/src/main/res/anim/gd_grow_from_bottomleft_to_topright.xml deleted file mode 100644 index 954b7d7a6..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_bottomleft_to_topright.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_grow_from_bottomright_to_topleft.xml b/greendroid/src/main/res/anim/gd_grow_from_bottomright_to_topleft.xml deleted file mode 100644 index 1f1c87506..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_bottomright_to_topleft.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_grow_from_top.xml b/greendroid/src/main/res/anim/gd_grow_from_top.xml deleted file mode 100644 index a69a75187..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_top.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/anim/gd_grow_from_topleft_to_bottomright.xml b/greendroid/src/main/res/anim/gd_grow_from_topleft_to_bottomright.xml deleted file mode 100644 index 00460f66b..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_topleft_to_bottomright.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/anim/gd_grow_from_topright_to_bottomleft.xml b/greendroid/src/main/res/anim/gd_grow_from_topright_to_bottomleft.xml deleted file mode 100644 index 54eeaf0a0..000000000 --- a/greendroid/src/main/res/anim/gd_grow_from_topright_to_bottomleft.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_rack.xml b/greendroid/src/main/res/anim/gd_rack.xml deleted file mode 100644 index 850d5d92e..000000000 --- a/greendroid/src/main/res/anim/gd_rack.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_shrink_from_bottom.xml b/greendroid/src/main/res/anim/gd_shrink_from_bottom.xml deleted file mode 100644 index 0bdf50fda..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_bottom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/anim/gd_shrink_from_bottomleft_to_topright.xml b/greendroid/src/main/res/anim/gd_shrink_from_bottomleft_to_topright.xml deleted file mode 100644 index cdd7777e0..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_bottomleft_to_topright.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_shrink_from_bottomright_to_topleft.xml b/greendroid/src/main/res/anim/gd_shrink_from_bottomright_to_topleft.xml deleted file mode 100644 index b115a2324..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_bottomright_to_topleft.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/anim/gd_shrink_from_top.xml b/greendroid/src/main/res/anim/gd_shrink_from_top.xml deleted file mode 100644 index a6c07d861..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_top.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_shrink_from_topleft_to_bottomright.xml b/greendroid/src/main/res/anim/gd_shrink_from_topleft_to_bottomright.xml deleted file mode 100644 index d1a5d68be..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_topleft_to_bottomright.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/anim/gd_shrink_from_topright_to_bottomleft.xml b/greendroid/src/main/res/anim/gd_shrink_from_topright_to_bottomleft.xml deleted file mode 100644 index 784b6e7ed..000000000 --- a/greendroid/src/main/res/anim/gd_shrink_from_topright_to_bottomleft.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_add.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_add.png deleted file mode 100644 index 646721036c580994f7574fea629f1aa779cb0d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1343 zcmaJ>Z*0_L81Mc#$js>?=s*!`7uY_~YkR%BUdtV@UAJ*+&$(UVf{v`$zPBsuKieL6 z8zU|=nIbR}B4*J9Mf77?OyRi?3ChhyY zZ+^e$_dL)0JU!4BZ}n6^T8$uxC$^JshiilTuC9XLLyO}YT-H0yolb|5aIS3 z^a6$|as+!mAdrF?1!-kxzXdw_;|Zz1S7K#s`!+P3LV$VAbkYo!zqTNeH=-m#Rr3G zmYm|+`Ie#<+(odo-zBdaEQR|KHU*>xNg^#Jn+DlEX8yb zLq}bYV$#Ss5e!DUl!9go!m?xCE*1)wjL3;5L3v3+)7-oYXxnKAcf|fOD*InO9W7X26V@UK~aT>VB{QcNE!Du#z!zH;FT4b zi-vqub4w@~Wdb3J;#*jnr<%#8Mt_iMYK;0?TpgDi(``r8B~aojce#Oka=EAlM8~ia zhM|^jI;N@_+p*kZG};kx%fF<;154QpV7H_rN0JGDwLT)xox<4Gn||w`o)bLJQUsi&){SaJ-_+ zN=VqcuDLujaI-vhK!>Ad!I?soigE-g3&!}yMDDwV(Sx2LvS#>FXh-X$XJ&9DzgjPk zPm*OL<&TY*>1|Bt$jQx5RnPo3U-#p)i#1OO7bbsrS3u@!K05lix$4k{Ux(vU5A8qq z_hQra`Ko_L1JPAqe!QbL?FlP%+`M)3BB1l?*td@iR$n`|Yt7jqEpfW+{q7e|Z5muZ zJ~elI!_##6jkoHXySVfJ4qO%fJTZUx^U-?ttF>1?LHFI?Ze}rH7vZju;-82gj4@U!>!7S>m3u(>Z9Fj z!*j|PqXTpMu5NsB=IlB8=iAe~C$)Qe;|Gz`Y2n5zhwJmhUvH`GI=J=N$n5URk-b&3 z4^~Y**ZT7213x8dFP#s){`P%DmY$f^@6?WN9W(Ynh**7!9hBJXppWX|K`_V7d0Zlh#YCVa$YIX^(S5?0Wmm6UG+id^+aL3Nf>6dPQh+ zsx{kOHizKJvT2Fb=7{BzVwv^RF&% zQtIy*o{%(C88nE}qm3X(CSQR})EOeF^N?DMX%gSHTI+(U)q9xlgPQk)X;`sc>M2+u=jYRgSj>3Ae#rdC$#F|H%A*aMF(l6_k>#Qc?m6b)9!`~ zI=HWUp){;|(ryC0=JKWr`EBX1x^@9_dN=gE)JGHc`yv#@617;rjY|WyXPRsrnPY(h@;BB@~8vFQ+7EBiCY_n}TBfu_S#6?hMY> z2xlU$mspdEP!E=kO;8z}6d)JCp-EMZJB#X}i*MImycFk8go@A*GDGg0W0x0%4bo2| z#+PI5VyQsQc5~bBH)T<|c2V%!u{tzRtb!tg3LE4=ZEsAiCyaMkqwQ5xn+5XY*MH7u zjvaN#ZaN(2Y+Mt2VCNBt@j1f-ZgKo{acm=)3PSOo`@{w%)=XWSZ3Xc^YF=B^ih;QU zxd5R&#A2-NEDz}%;)JPb>R9wUw-OK8h!A%o#MQp{&vh3oBwmFb9kC=_hzgNn&Q2s{ zz9z@q9lL&1qLyi9$Hr=hG?OuM-f70Qdua{bOV09KVIfvxZDc5w>eQu?lrBA!%)AE0!z;}jRmLPrbsX{pZc35U>l=mIWS`(4@KXY9_r^9g8bbalJP(&5()ZX%trn{ z*dmmxss350#AcZsK~3&s%o~m!;?R4So|)j~2j+#Kul)!x0C%vVB1uA!LI3~&07*qo IM6N<$f}hJQ@&Et; diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_compose.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_compose.png deleted file mode 100644 index cdb09e4c6eaaaf6ea9e5875cdfcb37f7cf2ed1ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1390 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=itD}*Nfw8ltnWLGZp^KY^fvdTbqoKKxi=nfT ztC1^AuSMv>2~2MaLaz%>y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-`BiX&zK> z3U0SJ;nb@Sbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+39mBD~l!1Zqk*AAeNX4x; zGd#TyJBS>QPTrcgWog9P9YUf#3(Ny;UY=ZC&R^HpR8jC#<(^Gdsbz)Wo=Tx3tlf)N zM072>=Jbc(MzKxhT*{`-$`8uEmp$u!?w#4=8Fc-t%ap~6f*(6rQx^v=dTX(RRr6pO z^8>yqJL}G}b#iY~;6JsiVogx>y8lI=JE9$gcd+l(yQLpc9bZ%+VKRA+(nPt;!_W7G zH%)%PIp@;Pr7a7bcFtZ}U3P-2uPM8LVb=jQiHR}`N;kN;t3?-BcSX*-+aPY0USutI zM(*_jm*;E5tu^=Gcd6RIzGw1+K)ts?Z-mb@q&D9vw~2U~aw$>w9sBtOS<2-e{q8P( zz4w&P&M&+EyY9?Hv(No(Mhl#Zud@dDWH1%S_r8n%^K@5M*~ZrgWh~fMv9A`*Kflqj z{FrrDFyrZ!VMTS~+q_fSTTtfA~UfS#^?F6*2UngA9; B_aFcO diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_edit.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_edit.png deleted file mode 100644 index 4f6df07dd94842b8c426210a200e7b5ec81e11a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1393 zcmaJ>eN5D57%zbc>dq0j#m$|r6!(!yukH2jN*fM5?m%ww7y@$`h@scMcNF?@v~S@c zF(XR$t$}?+66Yji*)UNCf3QK^BKR?7nPwr2F-GQ?TV@PybJ>zbVOe_|$RCSM+V^?i z{C>~xd7k%q`bJgdcE_5HYY+r+geyYT*7}_N=B%>5Z~r@{Sj!WztPa*_G1$)Q011d% z6rf>+kArH!iyf^~pa?-Sk4m+5ur9KL6Ewxe+Zb0;Nmy(IDJn@Oc%cPAGz#L9>c@UR zc?v@%(T~0CjgXN<5Hv{@ojR!LtgIC}TLf0bN{Z27e?dC`lO+T2W zri(GII#iz4vUYx~3Bm+N5bf>lu6Ej`>2ZQ$S=RR9cH0$~>A`)44tQzS;StTQqe1f1{B%vsFUMaKztHJ#+{ugc3b|e5% z4GhiH1?xUy`AcN0b`KU>0*b;iE@A3&Do;@$fD9C%Lcxw~(SjmblV=F7rSx7t{d{ zHN95ThaNqQ3mk1$g(uf z#5^?4(}2ZkkB|4#j0mDEiKWTniiA^SigHt=mny_rPn5(Nw+G;?&nw_Ulowfsr)e)4 z#Rw}LQQ)8iWsq*IfDF@?EZNt~$-El3iinFK#+x$4ikmbA6cKjQ$dUz3S&J-Ug|F1{ ziY{A1TCHoF%QItbmZuJ=)~M;$Of`}BiV-BEDI5yaCa=!*-FECFb6-8T`tb~=G1JT} z|IPu|Z=Y~D1AW_$AWVE>tBh_vFnUM}ucZ@`Q;IRG93|6HfP{!kI|vCrG^eXQ#>D zJb3=lXIHv@`13TEH+E-!PisbSa(9HzoBgogKltkodNk*ehvjW;@4|lUO{05b!IrU> zhsKUQ`qY+tdq1u}yleL}*GeY>fRS$ipK z@bb~OUd(;+Qtkfcg@v`1k?EF$b^A97w@&OWjK46_@XBMY16Q*@SU3F6o0@?kEP)5kl0#x43{sm<&rVYa8D@J^!-2#`@lOIxcx(Vv<_QeuZYMK6qxcaSX5XQw z1J{#b_EvhP!9iclJO$z`63k7ZhU3U-EF=K&H#{}SH>9eLDwrHi($F^DJtT*L*j-4C o1*&1j(IMbb2aY-rKL7|Y0DH8*og#MLCjbBd07*qoM6N<$f~e!y8~^|S diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_eye.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_eye.png deleted file mode 100644 index a63d41df68752e3a759ba8bd017952badcd1268b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV-nFv=g|8bV!!vk2~9_k?JQsAvu@3hwpqo_EO5-J>y|_ z=g0!Hz$`Ee+!&9E{nhyV0{;A^z!KO1pMgiLE4!~NmpFFlD zK3y280&8MAMtqSI(zQFQ@6z)!B!QK~L8sW=7ZPIfhLo%+7L1;!`qb;L*Xo(ws5?tB*F=G>(o<*4%SPQKg`wVBLOtmxbD*5s(5tR9 zoXkr3&2(UTM`}sC#}R1jb)D9pRu;~7jlq8D z5HDMeTe0`^=o=1VQXD(s^Z~Jg1gbSB2t&YN8w66iaTb^b hW`SAYe-`*FzyK+#$*kM*H6s83002ovPDHLkV1hZQ+ZX@< diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_gallery.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_gallery.png deleted file mode 100644 index 071ae6e977f83d55ad9e63080b1c86c5b51d831b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XzInPhhE&{2`t$$4{ow>QAD(8J9;*pK2bx@U4pk>UFXRn?7y64(;L*@F&yDv@aaZ_jlg>K>&i#0Hpq9FGi+qw zt7KeJV;>dtqTR}l;iU36m7N0q)dlub?B^dTyIZMnj{VVhmu-JF^7tp++Qp{Y$XVee zJ+16I|F@!mge_{45GPo8wA)>1e4J3afN@Kc{1!zGhP4ma=Q8W_Oo*0C5KfViWs(Ca f{K(wEz|2sz(fOuzP|P1-2rziM`njxgN@xNA`}KXk diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_group.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_group.png deleted file mode 100644 index f4f05cfa59f39f34a32a258062307bfb6f0f152e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)261JG(+K$8=)XhFzIan=O!sd#+6)6weM5=G3-!6j*TyM0TgPnuTNAoJ(K>2rQ}3 zUwsh4D{Pg;14SP`=z@#lT=Bu>gE1)JWxzMX|2uA*sU(h!Xe)Ka5JTKv=@lKpginY! z;KX;zvjnK$N8d_PfIcWdYckpnQb`)X1H0sH<9i-VEfbfmc3qMAY?A5MT#2Fs-9@gH zf5(5EW(4I1l20|&V)SJ5aRoU}Ft(6yeFU2B#ezaK^9+#oxwT>jl);Bfh)coXLwi|hBk}1x_*-2N7~Thiz##C)cnUB8i=J%=P)?S}>jWHOjo{(T5lVSj86Sl`I?2$r zz*@M4@@DEv;9mH_2uEgd{f(iL6p}3>)+Wh8vWIAnBs0W&13dr3iQ*7(=EjACj}54r zyTuJcT#5`X6Jn~s7-2Nmyxl;ADi)f(&S0yd3ak*`TM{s8siZ=D@ZHq&s20B=4tNN^ zxmM?%y~SJ%(Ak`3$Djv~ z2Z&wq+7IeUHwAGS^8L)Wz}-w-34$}i`xl=AmGSFrTMtYdD1jG-@dWC&!UyvsCv3}q z1(6AHf!1;tdde2}e=r}l6oCiE_NWNnNWL?@ccr#l9U(dEEz^;h+>1v#mZF$)*dt8R zUGUx)ckHChB6}#4jmx$lGm{*JKa?(prqGkfQaBttL%1PuHO&>iZWb!b;l0C*nl=J& z-rOVaW#;!YIp=Q1G#8tYLKlJamx3U8 z0Ku&*!2`JR0D>z$fyZ#=83aMlLwF3uod|*=xDw(NQW-;&zGh0r1b*5Mq5YUDOQ0g@BK~m z0^{JG^7;bl#z1;hz$n}R;Y0$YLjg45#u^+Mk`qUQ4hL~khbYJI6}xVs&kCsQx_l~vPmD0tJxR(i%So3#7jqp z{YxEkm**{ce#aBs1RHnLL|0RcP TS(EB|00000NkvXXu0mjfwU)2z diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_info.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_info.png deleted file mode 100644 index f75e906bd029148fa51c261edebc04e42ac8b279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)}68WP+p8askxU21Fi@s^+z9n-kwi9_U))3xSYZUdM{w_g z5!eQH@j$7Ii-7KZQ3STSFB{1M9BO5g$lcl2#Yf=}nTw){dlH$sEIT=L2wYWjTVI`p z7t7+kHYqi21pd028}?=T{h5@~n_-q6)-_z!R|8Rd0#@3(cLZ#10nY+wfqMK1FaU>f VAH^$jkY4}*002ovPDHLkV1m-C%m4rY diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_item_focused.9.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_item_focused.9.png deleted file mode 100644 index 7c0ec2b2033e14bd46353ac3b1a2e95c9e156b53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoS!3HFo&+TvoQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JispN|IEGZ*dUHLHt3iQ>?ZMeK@2;(U6(YNAd0#-Fi);6! z1>)5&_}L!KV|kh!JmsX4)4qgf)st#p-*JikId%GjMJm<3$ENLTWB$d)GL4V5N+5z= zWQIe+Y{vw39)XK&Od5&|4Ugm$q6NHvFdMMA=_tsllfn3dZk2Bq2w_}lDIC3`Nue?FZRiINDJYD@<);T3K0RRQ| BTgd8U}fi7AzZCsS>Jik5h~IEGZ*dNVzctJ#3ZK{))YhV`QI8=R^3agMDAZ)_0M zVXl95{GR)g8S9-+KUQ6;7-~E@X2q-g;Ns_(j(wiET&CroHRtVD)+hE)WSB30j`__Iyr|ldJb_UHg8~* zZfS6tuEcu6(aJk-pVi5#|F;F2G$W^K#xO9g2%9^@^kQ?v(~f&Z4Ej4lS#C^~DLg%i z;m7n@g%>wB99`ZvE&o|_$L|-eA|Iy+f7IBeV$N^Mtk57*%INyHWTDa{TlRp^D|`NY sQE14&+9RI3@$n=E4uuA$xlB9^sjTvMB6pO02D*{K)78&qol`;+0Pta3lK=n! diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_locate.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_locate.png deleted file mode 100644 index 21b88856bc73b63da855c301c00f4cbb56e9a480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0g6+}=F1wjx*uvi?5#iCf0_ywL& z%3c0l+RM-nepAT3@ABTgOA=*_MO;=_#Bp^DhHbD9WIzGD0Ya@l*gP6Nt!b%u~k=a zSTMFlDQi{^R0Q(|ZKk+aQcr$qe-O-z+cYTZTcWljs@sZ9gJr?kvd?NPNX(aQ8oZFK zV4>lw+M3mW?)9u)u3p2Cs zZUv=W45bwlu>_EiKzY!54FSQJKqWvb5ej%KC}8R(kkSbFfG8=R+3pq|2oFv&GyggB zegFTR|1#|j^^2xWnLP!=uxX)Me+0dsHSb9i(X(^pkc3{dj6mFoDosX)(;(&%lmx^> z5|@M#$O*ZXU&AU4D;W}FaU&kCV|higawf)_l~lyWu&SD@%JD7Gz!NYj%5LJ%FOLwo zD7cA6N0g1)KueDSr$2vpuyo;DJAP{)=lL7vdA{KNdnJ9 zj21UBDk>gsz%TDgg4!%$h0%w#gwjLoWONfNkRF4G51TM)vc=VXJ+T4cSf=)n(lUK3SARAk)r z$R(7t;UF-N&+iIN|Jf5JX$v*@ScnZqV-r#g=7TkN?PMl zJ(|jjWR$yy2Py&uehjCkwN(C`0#Cvel%QrThw?Hou1aZX%r) z1r`7rP!3ROaoH1;g`w@x;&M883!mTw7sJ_X4k}>=G@aZ}Mmtsk@oArz33`K-KE@FM zz#nwk{2)MiJ$5JXdVF-S$PLN5!O1){1Djm&9+!D2m-T6oGZZbRD5+w*G&C!QqBkol z?u$C`Fvp9sxi)KAPzp8iRVV~CMZ)vNV8sW-r$8kI0Ar^ZnsQbG;B~rOUJ&p&ZNOXU zq0<(b#HeKIPX2reWB)bs@hemc4K--XR^Orf=ve z5lZN_%$4+(kIqa!Ik6LaQdr+RVOEg3SQ zpWf{pp0Ac)qBob;E?OTcedYJWgqhOd>@WEK1wHS*eKs^>a$ngwwx;4h+jqGL`+eW( z46b1nJ{JG*BPQs1trj}7FGy>&!dqwn9dn4FW`x^ViIS^fT7 zy)S>W@$QPvz1`}@4-SVX*`(e>XUBiMul1L6<4(@M5NivjT8D@EuNpfRbp5#OQdj4M zf!xWGm7D8Ik8O+McY`Ahx9egh2Oj-*jdS<56Xze;BhU=RKG53UoZ yyG~8L_SxlzT>OX}7`!&`)64HSwjI1aw-Cc z6F>nJKmjalE6e>g=xaufBj}qQ89RwZub_)AZ_2^I0ydxnIUfqbwPY~{U%)Ls+=14p zJ~P+_=cy3VSP-B_uo~~HOmG8whI?l)p!r(!!d)U{6 zJxQJrNZ;p@0Y^IrCQr!9X8|;^R3W5tWNJgoh>zXz#J0L$JpO~;K_ATc3+RtrU!!J< zSV2YNsbgG7GxZ!8x5+Nos#ubkm9b4?%E;C+{wN-!0UyE9F5wd%ZB9TM zQ#m#cF36}}Tw=q}S|IOuR*nQ8%fcI;|A00bH>f8(eon5v%Zw?qCAM1JN~#bS*E7L! y?)CySI_UYVv2iTq@0I`xpa2S>04CW@fB^tjUOi^($iS-r00000y=@e07=@i{MrE6@bM09OQi6XI`I(14Ztx~7elCqJqDea|9|BvsG%zW?7 zyj}J%A3tqx_Raj~z3=_M_cmzQ$kK{f@Vd|E-Ug< ze7vhdluNu9Qsm(Z9N|C2d)pt$9c1k8TLyM#2 zkmM_1Q8UGR*#WxPT4Ma!;%hYhO@3{LeDB_&eE?im$YLx-j*5$<#ijkuKv10hG!JgT z19$>kZVN^lL7LhL(8g2K&!0P0Z>`uI+&Z+kvsh0fNEVUdl2oqHl)9Pyn@J_1ZPX9Q z@yOBiJoD7#xh==vQN^fBZT>W=Bs#IAai3Q3;m~)(bi1XBc}>&ab?Kil5f~MOeS=vI zVG)oPHnI`ZS}a8yuXeW_qFv24|8MoXy56cQ@CA&3K5%RxF2nbEuGEg2cFT{T`(OK<$7AQ2 z%1->A>Y6zZ3oh5`P(I0ZI>xIy#3Mwt^#mM%Q{N}5;0Me=U?4CMSl##)U;s$9B>jDB R`#Asr002ovPDHLkV1f^IJ%a!M diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_search.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_search.png deleted file mode 100644 index 59de344e755b658e54ecd9d117fad8d63ee10b39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P)%d+fgDNAgZPMu2Zp-bmPr@eN_vZtbZhm`2B%BEYQh=?ww)he4-X_e{wc*FC| z-`AUFV}5+>Z`ONnzB|8tzu)hTVi-njkZmY7;1&st1cq(H0&|j}LP>!P=zumj0ekdQ zj*&FukvLcZUBlhZK-S0Fws;+=fg{78eS+$51u7mA^$2KzEc4w5*a1y&3sjJ&VJ~p= zm%(O`A>QJi%rQtij9&t8%=j-*2r9%mPF%y|!a8_l=3N9OaG$%0>SOUD_v5By3)EKe#XPX>s*qq2ieV(xP<*qpR8svHcx9cZ*xI*GsG4^gG)W;M!Ex|bR*g2I+8;d z!8Of|eVN^i38|&eKKj8H*VUNzM57|LVKqsD8rP{PRlWYJ zgZn9%cIb*UPz?Lcf}6)#!6H9i+MRclkX~SpgBoq&NHtou>lc;i4QnJY68O&r b{s=Gt9ClaVhD^{i00000NkvXXu0mjfAWVC!w~H;P z&Zsn6GQ;3vBTwz(N@FsD^9Bl&;Mys{X^Ou-B}fDyx?q1LNstXq23Ru|LpG(Ry0{^5 z3RtZ5zAeCb?2Nt|6&!#HbgKx&FJh;O1-OkoHA#zfPGQcSF$H9Q6u=fth>ToxYfKS zr7AN>ebaQ?xb%PYN`^}wI>4TY0Vu&5R|CCE58mm~WFdwJRv!73mN)<}OnaOFu0{J{EWNCo=kfz{0k{C1QN9Ei0NJW0re`YNbN~PV07*qoM6N<$ Eg6p5{FaQ7m diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_share.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_share.png deleted file mode 100644 index e748c85d2669d6d85a6c5a5e1f84e9ae406705c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 681 zcmV;a0#^NrP)JUFbC8 zhC+P@QUT}F12_UFbiE4Jz!0PVueR4%-vt4xg#TFGC2PcYRY{0Po`#D#xey3Pkk?u@iO>r&QTMfF~gc8WdF z3mi~${cVQuvl?mkQVegW`L!!0G?TRm#=$mt0iX0+WnxG!>Apj3Q`?uO&lYLEkncFf zOb2;_1BSh|-0~z2!JxrE1&&+#lnwp^oWp{ONzerEAVX~;!Cg?5lBiOfmwc9nu}K<% zW7?eO4y5E(z^h@diF?bE?*TWSO@c`&U{Le^ki(4^w|p<=);UopN5E59FHJdS5f;9i zVZPO6Ecz_k1hO6ChQ*tnsCj)+elJdjImGuCeQv@`@Z6$LG0Zs_`7$HUeH#q_b(`e; zK79mXmG)(wy-Qo26|q0~)-ptAx?3qR@jLHx()rh|uJe7clVIB<_$|NyfHri-1+x(U P00000NkvXXu0mjfL$o#C diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_slideshow.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_slideshow.png deleted file mode 100644 index 8e88c1da75b096bc1e8ac35636f56610095510dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmV-)0gL{LP)p%f$u+tJ8 zpd^!AprHd3pqQ*&OzRBM0FBn+Uk)B1lt#!1IjTFbaUdNyS{IKxaMXb#(SiOzydH?< z2crY~fp`ND2SDrT_`%{pejwft#06+A9Z*wgK2#oAElBJ=5a-jwf%?#j-2qRl1QeR~ z&~Cv4sF(n>Ex8`e161#m1VAmr2Ndws*|6lGIGA&>!e}uw>cEjOvOr7VNQna%P`TMp z62LX|0TX;cZ10PNp$%BmzmXbItUyT_M$0rv>nMFdX%vqZGoub1bs!V~1Q-BmFEu(= Sq~FK@0000Ply{;7@szhlxkvGP;|SMaSBqUlbJV@$?Qy%?k1UyO)+at0tP|Y`SY?n?EK5j zn`U-BXu1d2Qm=auM8u0A*j|KE!4|rEPas2w)XZ736v;S%4UtMlw&etJRHl-+GPYwkLy-vt zEtjdiq`J)uWX<&gsl%h+~&t^^&R7JQt>|DuD=iU*k%4BXJy@qP48 zj>))oPZk;j4SgTyg}#-X)6f}cK^rRcxOy0S8%mkN0(rwU?Uh%Auj)(iUNJ}A~fp0Ym-U+Wb=S-7-G>vk)PH?sM3Zc@wC`0@U+T9iRKGMRp3Pf zY7$G0$i{&KCu9IPzzSfRmI@k6i(CQHQc=)pT~iH7RC!)tHHyLM7`lv1WWiBuRV*~J zEHl1d*;1WFTtwP{JvFotb#}?MVTp;G#xgN9vG!QZfmn(AK$ne?xOHQ5e`fGzf9jxv zN6p7GRV!Wk70=^lL#cG4``XU#?#%6l^p!7iQ{jUzQ-7siIjv=9cit!Zsn3s1JyZE% zdi&N}ncVXk?Z>U->0kQC*I&(?NZ%c1>dO=FoViP^|1s=-aQW{kcXY}0Q&KfT>t<8 diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_star.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_star.png deleted file mode 100644 index db9ab8ad485ef1dc104010ab2dbf09a6ac6b5e51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1416 zcmaJ>e@xtT6z?%c03qtO#Edzq1p~|0YkR%BUMt6hJJ?P+L^zc{OtxP8y`#`xZ*6ZJ zY(r!TDzdp`Xw;yfn~6-f40VHrC7fo8ZW6a-#)&^>V&WXZ8Mhf3gvD=#p)5jXbN z*f@qtq8oeG;V1o34``CMwrilFy*41Uw+O6=Z7xU4;v96K0E0*4iX73oxEo9Q<)CdI z6BwF=7%gsWF{nm=9qLgvfI6%sE|5+Vby8M}wlfT~3AK?FNsu;zvf&iN(Ke1G(bR)M zHBAh0_1@}~7Tme9Cc}tw1ku{sYHg*hsum_FmSs&JHX9BRxZV~q_&6TXi_#vvKo>MA zYDj7XH9hh{HDsR;yOXM{@Yt$N9h2*e=msAVK$vRaX5adOc;c41I z1~CGLBMO`$88S$3+I8)o^$~zFm^1RPm5r|LCym3MKoV>5wa|Q`@b>~D& z5^^HTvAQq6uH=vGr%O6(k#&iz{MCu9t5w`#`{UpIP(IP|m2W(6|K9QbJy(hj9y#)H zAO7vCk^9N2gnqWOpm-Pz=jdw+D{=!}zYn$5z1zI8VBnx-x4P%@`=6dUG12kp+?COv zF1SZOnJK)uH^ZQx8+hRwl7gsY4IEElydR8|L|=VzHgloVdh(od zeekgZ87JhMx2AFq&G(#t-*mc~q%J{IG`8jlT zMXzOO%vIC5_LnvJ`!igbhn+?s0DW}l&Z zHavXKbfWCyy}G;UTHP1XOHY(0R{r+py3FI-Gx~;KA3b)%dFlELc;&&;{I)-{>yQ4O zJ3n8uqolbi^V~~=EoV=k5}IB7cVpP5us-wI&cdnw;%)nS#%}ihI#D<`d0rj)lKH4; d@aRGgiM;j}``#}5d)x+p5dN@9+vk1z z`#sO^eLlL)U-I14DYK^_2r|{X(i70$OY}Q?qV{aO+aqYNr`5u8wN$EBYiSuGPF4y* z)GN?o7=Scex9&8|N07`bT(Dd%_Z3r&Bp7HNV~7h;jg27r%i~d+sevjQf?-Z{U?ay) zU?|5ru+?TC>5IBygj<=AVQHcy$RuhQJBuwZK=b32=0Jcdjm8CDRH(QEOZlZVTi+%y zGzC#>9N0ZkdujCt@tg^{_a z%1I)sd!$2BOm$$I(tAe`qCVfaV^K*bN=q3Lr=tWgkc1%U=Sra!H309+cqm#4)s;N^($=__22J zMvzi_pD zyRey@HnnWxjqK}LaPy}#cIPxrrd&rdhO>mlXiNS2hOUhBh_vE~p{*s03&Knjy6)_* zY4-jvdT;%+?O^iC8OP`SzYQ`Ad!|=VeOdm;hUe|xb9rvg91}pV4ctL;&pR>)wv5ze zj3xk|Jw12$x~=Q@#5MR^hnU{%A9C)ltsmLDsWW%D)pfhd{YOsMq$lg=qM5<=6OH{F zzFe_SZg)G*P5bzqH2cO5Uov^TuC1WqaPBiry=4{I;eXs>U)?; zr~YnURk7E!<)_K56WUx%a+dSr=717EIafUGcr$XTvGtXfWh>|VcJ^c~Sp+ZceAhHI zGucuZa^I|N7=7)R=A)DMmP=&~=9wSGhg@HOcV_hME7qTF0sg?e-@9L$pcI^qFZ_O! zGQB&asIz5P)mGD*ue>*ocFeC#+~(eBn>Xj%a5pWOpLdqwNp3$rp{#M^(u1dWbVq)@ zmTiCUi1N<4u>aQ40~@YxIyLz6!uOkuKnc2hNXS`b4F)XA%hp<8*hz#wnG0?dkafE INmo_Ff89keD*ylh diff --git a/greendroid/src/main/res/drawable-hdpi/gd_action_bar_talk.png b/greendroid/src/main/res/drawable-hdpi/gd_action_bar_talk.png deleted file mode 100644 index cd355b0f7d190838d069d4961025cbb6e9072035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=$le43#v4NYVnWLGZp^KY^fvdTbqoKKxi=nfT ztC1^AuSMv>2~2MaT(6-4PQ9R{kXrz>*(J3ovn(~mttdZN0qkX~Ox$j9!D${; zZwgMg7`Wops}FRHJ}6?5A{r(HOg$hbJlO&{@Pwb52Tbinz-0aC?_zTX21Wr-7srr_ zTST^QK+0)PJz0U(h>t4TJBAFKk^7e;Q`Q$QU@N zdNFJ~+H-)xG9Y1#nq=vN70m9k79KJc2@Q9O8g8uWV~o10dEsIq|AJ82i-9(C&n+~c zJBRJHiIwTrWfN~FENxd_9(ZX{+d~rtJO9-7x5ux0xE||K={YMQaPv|j^CK^&omVGD zct?78oDlcW&~w;Xq}KZE!j=W|SdTn&*u&6$$94%P)z*r z&=DM=8`y5(2DKZs6IdtE5!j%10t(5Q5TZx{tugnKml#BN9Nckd$QTQjj7_j`pg>n_ z9lzgmo;2@U&Vut}J%ex(OWv3n-kgc;Jhoe$ai)fSBhClsZq6+}NY4#yWgiF#jNrMN z`wR-4H4~T0V!T>VIKTx~-)ET)`G^I_`n@=>Ln1=WO;RfpObHPQp1;OHGGn+Ss|?f) ztc*gi^^I5xRn$gc3Qj_GhuHBJiop+^^rpQMU+~(?5P54P1QG< zz!<12=)DwQ|Jvflw*@Q6|9oWCEsSM^5Pt!qKoqFQSAYQkzyLi$Jh`3d00000NkvXX Hu0mjfvazQY diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_arrow_up.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_arrow_up.png deleted file mode 100644 index 6daf90ac830d62c0bd4e1368e3becff297a92c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)*`s0@H02SGwV!XS%+X?6h zDRAKh6qEu9goTAo04ZRgF#r|gz#@AxuxLmFI^qyOfB^u@oWgV=nKxem0000ah~U? z{TA=O@BKTudo05+dk%-=Ae+tJn9b&W<{yqEN$-BY|FBZ2ycl?%@6p9uEEbFQ`~Bvo z&EWwrc*5I&AzgIx`TTP-ndFAUVQ*9B(1r)R;E9=Ox}?FE-EOa1t=4Eb9KJFdjoa%q zAB{%enM{UDr_)tFpF4sAQFsx|)Q!bZJIgTqpTfSEmCtx!e4BppjwbZIl4~;+|a0gAL{oJPm z!Rz&2HX4m2x~JTCLW@vgY6rHvtVboN53{KA@kD+wD$uyWNsj zbHYA?1MWnF(fbb|gd~b$-Q)3`2!imm2oDTlkHG#cDmKW#4XjWn-pPu^S5@uWZ~a qRjk&->g4?$3b8W@B^vY0m!rf0000cFMlo- zy4BkFBAC{d2O8Xaw_W({`fLCk2q-i_p#j({E(&Rm31x~p$3GQ*T$nR(WJM0$u6-*G zUGNtR)BfDp-sKAQ!9B@RzLX4SSQ6sp_~4>_NGvpfasYrr1AsyUfIpmBB8I34$KI#U3xpQQk?_-qNncja~HSscpe( zhxJx;yM--S0LlRX3Jm}X4M5&095$>7yfK^0ep|9HM=B+5aubi9Bls##p;+-;@Da0_ z?Ve=#aYK2p47!~h3k{$g0HDwSpwIv$okHCmG@%|^Z*^{+tln0RWA>-$6uMv6y`92r zk4D8!oOcIP54^g){eJY;kJir}k|_jG4ggSS08nTE@=jsgQb_R*Q@c|On`CQ_>c*}#Wvd)XBPGSv)1Gejm}8`$^ifh4Z!0$bj%UsYCDBMZ?y$0d*f

Oo zd^#2!TI9Gx#$33?!d_%Sagu%tma*#_Ksf+Fp#gXphc0ZAE!T2nx3!9!WOWYRa}1Oo z!F%S=ai<~+W5%w0CM-SNCo4W-+$V`mvH;2f016Gj^Eq_P5r+p*m==2;QgAD6l8rx0 zIfhV??1w{dRplIz+FB@Dk5yZymc!U23!oeTpwIy9jYGF=uUFDwau=Bq`qNYbo?r#}*E= zA+-TLKhpL8l*GzvLMR6~F6DS+*ltFc&3?a?g}z6yFJ+sDd?OCqx#UL)+x@=uYdMB} zIp$eMS(u_LE}L=}8!RgL3wP(-M4`o#ud?jc~O z=V|oNJQofa-=RW3z&58U?zd9<84hjznj|jAC{ZeecL0U1X?B6pisZqBnr1z&N7xP! zwi_`G(XZMngr|FQsZ3$nLI(l62UzGr+)XsqB2NeiN#R`XV3-M=lcvIUV#qe7)`ddQ zfNGo8EFsIJccst|_+!xX&r2yhC8lwm3(X!-iMI1Vjl3O79Kd(RwtvPeS- z%%yILXBe9B9+NgNK}ahw@J<{$rpq%?j>%v}nS7g8Z5OO-{}#GTkpsk?VtVXW3GEeZ zbDUUNZLP&ZgSX+(in-dvJlE>xbn9;N7OYpd(2C6#&26xda;(~|hqg?S$uO~kg$Bp6 z&|hC)tz8ifl1N5flX*U$T|?;3IUMHB7BlJJTin4Wr%q#|B_`)Y$xVL!k9Pb`?n;)z vc5pj#`EoU3Z?@Vn_wn5248MvW{1adRpAc0o>lVCo00000NkvXXu0mjf2j~d_ diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_bottom_frame.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_bottom_frame.9.png deleted file mode 100644 index 9fac22558db173a3015ec6921ef36660961c6f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmV+e0{s1nP)*a*n}Pb!8wnj}3SyFhlbfLsg&x(^>de8I-XCc!{M@cZ}gS3v3y*vC+@Z=XMZ zzQsUe@csMuhd}BFvc;bsJa}-7))v2f`SLQ5`hslnyOx%g9smCQ`$kKPH*Vax17sK6 zVqiS~J$drv-5WP<%%hd1Z{NN>)YsQ{4rmujP=mnpn3$NQU%!5(dRzl7`?qAtl4(HZ zYj}1-lKlJP#fv+=y}jjs{`~nwO^a{dyg9qGv-23x4!F52XfAsL%vz^JL_{)DQ&T6f zva*U%YU#6Q&o(+aIkkgA6s7RNR&oI?mvnb`*Y5A{ZxIj>Felg2YuBz#adC0!0R=J8 zo^Qw{9wV+I6DTPFq(oP)Tp4C+YMR8s!J$N~g}k+TO~_%Dq7DQ&2Rb7qyIp z%4(n@P;iURm@&giPfyQ8R8-W0o10q=OW|+_m`{P3>mIC diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_grip_left.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_grip_left.9.png deleted file mode 100644 index aab0e5832111e944aa0d6d669f160f920dcd160a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1353 zcmeAS@N?(olHy`uVBq!ia0vp^d_e5S!3HD+1l0EeDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf^)E`f^TASW*&$S zR`2U;<(XGpl9-pA>gi&u1T;Y}Gc(1?#Kpwe%*E8y#m(Hn(9p%r(!kiw(Z$ll)y&+~ z)y>!xrq?AuximL5uLPzy1)F! zZz3GM4;zT&?b>kiNN;9lqU}q4iPYt><-r2$?|n1=!`@VXWOw_&=6BoXmI+tAN-e9p z;qYd`wdpf^(=&E2>FHe8*xxom|NUNleNW*@DxJ%MI20W`Ib3;XYb{_}!IbsKyRw?c zz~tVCWQTh{Tgok%O&Hu6WIr%gF!N+`y%Z_9_x}6(-FM&luD-hI_19k;GZ=)mYrb?J zOelD6aV|7&&5RRChBKD>Eic~bYa)9!QpRol_1&r-nvzPJZ)BLwUUp_nhv7AirJ*x- zUS$m}z3FmcYm=)FgRdE@cQ?Dmd2=_HFk6Tf^AQ#_PH(g zxtI|rvn}_1rIlAznJ9X%_j_x z>zxafIqn^*q6GIx-3|9RB}$I|GxLTR~epT-1mCd_j%84 zTM~cBxL&NDwK^sE=RW^#eh#+%kFI}UW-4e?3Ve1liE~c)qF)}H^x~O#7(P6hTCnc8 R-Y-z$=IQF^vd$@?2>?ei>k{( zJaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWfo`&anSp|tp`M|! ziMhGCj)IYap@F`Ek-njkuA#Y=v5}R5fdUjL0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HT7t|lGSUUA&@HaaD@m--%_~-hnc$LIoLrPyP?DLSrvNfBF)6>a z#8wIDQivCF3*g4)6+?pw7-0Gpi3R$GdIlgb!4&%X;#ZoR3s+rS5|oN?FIIz#Ln;eW z^@CE2^Gl18ff1Lc46>@g%DE^tu_V7JBtJg~7K#BG`6cTZtCi0 zYzouslAm0fo0?Yw)0=|OYlKrTC@JI?0Bv?jEy^rQO>ryA&s6|>*(wvKTTI+=ng`XJ zg4-=jq}YQgQ1| zxV`@&2a)`ZflZx?uN3|>P3F@()7E(N2kRfDI<|B>#@UOHNtmlK2{*QOHW~%&TA*TT z7NGfj_bWB-dvt*Ku7KIGi~C)4ZZw)kSjst~R721}Ul zX$sm1<_6x`81Y7+V4l~~cSbYMr0$H_cYK0op;Tg_p0nNj{d!{E<_2#?zOQv@x)OAd ztM!oXq(x3DSsyF@@W{EJnSAU}bn2{S7f-VP@H}F(&~?Twqb2s|l^*IA?fkrDsnZ&B z8=+&9Pw}e=aq{nt^RMy$a@XYSeJMqkRo7qdW1Tjs;`Gy^>`68=eX1siB^gMZ;0#=S z)y$V;--FFP7fSD%%gxvj!m;v0OY4LBGijR}mwdR|ao^x{N2rs|8IHpSO~y^;aU6+X zU0Qz3U(8s}&VR{0`F4xP^2>5dT3>wsU1Yi_YHeOoZ-S&^tnvzhpog7Yj)yoFp88k+ zZe5 z`*5+$@wN#)e#<}K$T5pNowd<+N3MB>zh4 Q0F|-~p00i_>zopr07f4JyZ`_I diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_normal.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_normal.9.png deleted file mode 100644 index 9d3d7ad8ded9e8fdb81df00263d2c6680fbc78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmV-O0k{5%P)PbXFRCwCNmD>)3APhhYBgXl}wWdd_bevwN;FBUI)ua2=qvA6i^`|a8pXr6qU>w61dU)Lfw)4^zcsLO5KwDP=k7J z0|ra05d9Y#wASB19=omsW6W7dfg$B zMIc*P*EN=9iLzr1Ne!#2!lEb+Kx-}Lc`i`HLet)}_ddeKmD4x_)cv`N;r(1jG1a9| zb9KHZo9b`5|1bE6haqM)1HA`kbZF(rh2@g(+uV=yS2YT7bSR_s$AA8tfXU;Jy(NT~ a00RJsL;AA^tK7Q)0000e7NHUq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6?J>MIEGZ*O8WEvzdbXDfsql@%>R-Hb0#PRI7pmGV|%pU z;a~KO1*!oJ!X5jWe;z;B#FH+mnAXtnvEEIMO{am?=byW%jF#5QMY5a?OtUMxGagp# znrRu5bNro3fJ-Cme`S@K2X3;&7JRU*YjH7rThqeg5NNj{^~8ZyM`C|04j1ORz{NVx f-l3*}ftevrvvlQ*H_j)4&SLO%^>bP0l+XkKbR<;K diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_selected.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_bar_item_selected.9.png deleted file mode 100644 index 72d053b84198db97a2482a07e4c8ff0eead5a093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^tU&C?!3HE>e7NHUq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c74>_%IEGZ*O8WEvzdbXDfsql@%>R-Hb0#PRI7pmGV|%pU z;a{{E8%F?hlAppqz9YvEHvLaGl1X-8a8qN`VOaFne$|73K+oK6heqE$u3HLh?w*m+ z+Ll}{q_OBg(|^H9J{xk3D(+ZLT0BE9t!YusgsF-pp`5D)brM_cC)CS?Dc@-d72dEQ j$>Eg20)}jL^!OkI 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 diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_selector_focused.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_grid_selector_focused.9.png deleted file mode 100644 index a6add7acc4533f8211605fcec51e9e45e9ff82a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 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 bH!w29-*LC*Nx$+IRDF87`njxgN@xNALU05% diff --git a/greendroid/src/main/res/drawable-hdpi/gd_quick_action_top_frame.9.png b/greendroid/src/main/res/drawable-hdpi/gd_quick_action_top_frame.9.png deleted file mode 100644 index 4556bb2254b58f1a4a845f8a7d63d5b32a0b8d09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP))*d$e*F0H`0LlN&n{lPxU09f_aso?U7*wppacHkG#un(Y#3xA z&?4ItCr-@x@ZrPPPoF;hCkBJmg7kp&g3Q2SHcm@ry1TpMUcY|*oLCFdF-UJ)TU!js zENm8I#4#|KWY?};8|m!q+{DDh#Lhqg`1kMM&&``Rm&eA&t_9lj1UZhG&@7b#`qa_I z#ifN(OF;l+hOe)0C(ukMpxKgGQ#DY69q3D|)vH&pWnp0vWS}DW{rmSTCnu*6VB$Lo zwC@+l$H*4TUbt|fMM+61j)4Z?&Ye38jEs!xfc8Cx2Q?_$0DY^XsHhmpKqH{6tQ-xp z1DZt{U~w#1Sy|}@6lA59#UQiu^75>p1rgk0exQqN7-$T1b#50000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!y-7qtRCwC#mQ8CKQ51%AM;&!0M#Csk zBQdc^g$6>PxarnKMJRUdB8$-cll+MMif#g>>n^$|-P9IJ7Y(Vg)?$r1ANf#c`W`rf zgtnQKv2-yPUhZ6-nfuH=?>*-V$8nbamnM7|AI69AVSE@DO_t>ny8BQD3P1zs40?Ty z_D^7zmzNbh^VGI&c{-h1kcppdNs=OgKp++j1~rV|7>4m`p)i`JJwo>o6P@DYf8d%{ zU<%PoBq#(ZB^HZqpg-^T`_C5wv%bErpnKNscHd()hPbw%D`>(n6e<~tLP|23EJh-c z@2ytrgM2a6QqjWUaB?sh ze8F(Ulk1SlD`fGtKKK8Kz~P~?r!W91zytK<28$-YWY3J}L}9yNFj&ht3xz^?vV)s> zf^Ke76h*`CF?gcO8^)bAhc%v=*)+|5G#XXdPZKXzMr5;DX=P@d`v%C;4JZN~ z!@yH`&0%AE6Q+DVZ>7^|l_&WV$P9+=v2(ecid}W#HUh3->h=29L?W@~HukgoN~O}q z_V%`Z3;dm6oI;^sVvCx4dwXSmM%)4-c6N4RSedQ;{ryjF{BoB(V*%s@FE7?=wKX=R z_zj2zkAf?ihgF!qVpJi&#GB6o%Ycv{_kB*L3hr{9L!^6Xuzt~YyqtVC|i^V5c znE=B37QcPq+~ar!Lth-{D*fR2_&CvQHYY-e4!~MeEK!eg$VXZ1AQeCYb&SIE4*JH> zo)$_9O#&)F_jFy)wA*dD)9E2M-k$Pt2oXp5(*c0x(Y ziR`^AE(5d@ZLU#cw>#-?4_6ej5JM42gki4dO2MVu(0F<56mzogvI_oz+=uaD7TJCZ ZFaS8{Njl^^{DuGk002ovPDHLkV1h7gb7BAh diff --git a/greendroid/src/main/res/drawable-hdpi/gd_segment_checkmark_on.png b/greendroid/src/main/res/drawable-hdpi/gd_segment_checkmark_on.png deleted file mode 100644 index 6b6ffd33bd7c1b4493dc8531a1dbebe3b5a0c41e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmV;{11bE8P)50000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#cu7P-RCwC#m(NcVK@`W|%xss^ZrPIT7Fd2meTHa zXMEF^Xw;Azx5h&^`DU{7WBcj%y?HxJgb?t*T%-n5gQ>yPVE$(qLWm!mW|V^Zgi7M` z3jY*FRn-A(`bdE8Apy1v7`Q~5uZShS0G4=&V~YRyJ#AvZw&R?T3U((s z;4;*~-riofW6pRyp568?h$_uxfK6AFk}Ku(!~DTeVIO(}v>+rj&22Y3f?oq|IAQ*; zVMazqT+GXK;wKtyKnRU~2l?4oia>SPU@n1)b94%}Pxy7BH#!og$;nCE=k{5kQeK2m zQH=b4B`EohtrNF za3m60GE!PhWO=D$tI{M&l0}fDdA^f`Ur$U-B%Oj0qoboQ2lIV*#IkM4S^~0AiY;I; zdHJdhyBBxd7(O^0M`t!1b7p90=;P@_C*z%O+OFG+7VwNHhTs<IwFmPFCRb`1tr^?~J$M^4yi|b94Tz-NrPk%c4h1d4ffcV;K2T0UBf4(_?E# zruz@|Cvap%jym~nl0PSp3w^V*vjf-e&UkNY_l|vS$wYDuW|Q1OG)J=9s{4I(rTxLB zeHUMJcXubSa^J-@?`7beerrn?Rj}If zXf*l?=gpxOP`PTIXBf(d+KFnH2P@06wDt9MY8XbYe85^ny+bXRb464OW;0}J8A?Od zmm%}0b(vqNY^8bPaCFg2KJUf%>50HK9&Lr$e+Gynhq07*qoM6N<$ Ef-qgjIRF3v diff --git a/greendroid/src/main/res/drawable-hdpi/gd_segment_divider.png b/greendroid/src/main/res/drawable-hdpi/gd_segment_divider.png deleted file mode 100644 index 1fa7b7cf06c227fe37c972eda066123612cae67e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmV-C0mJ@@P)0ssI2))FX$0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy-bqA3RCwBSkzo#lAPj{o>6~28?9aUK zc8LA(7{VfH*A|C57>NNM-+R)6(|v+G9?!@8nwiVn3lcCI2j&~+Qwn_7A>YIL3WBDfMZfl#^x0Ovv+_vvU|^i(>EaktaqI5w{n|$gWsZN; zS6a%$*4zjJM-LTsw;nwt+FW$KHO6Y^u3c8C1{z&PcM6(!IcmCkb?rZ4X@Ac0-07)% z?%&r5TYr7IT>XK~zb`)j{Bz%a#}9i2HmrY9BeJGWs$sW`?r*W$duazxDd!m_JQcj2 zxnWbsuTZWvHjk7z!^A!o?&AWIbz_tlQ6!@BNFvJ`okg4M8G$-Bne&CoZL|hy-eb%IB&SHTX!oD^);!hKCavn=DWy}< zwm|Dv<^ip1@73GzspG33ka;PJ9cYf1bws7hBGENEkL>O-g~k_OJjd`17+DOSu6{1- HoD!M<(09yg diff --git a/greendroid/src/main/res/drawable-hdpi/gd_segment_label_normal.9.png b/greendroid/src/main/res/drawable-hdpi/gd_segment_label_normal.9.png deleted file mode 100644 index 9b4ff043a58d90b439bdd7d1ce0506056460151b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^hCuAf!3HEB>+_vvU|_8Fba4!+xb^mSu76X4#L>e2 zX?0h;M0g8lB^X_P7(6M_;>h#s%eP%CeC@mbmeut=+wZgg$loBHr{}eFee0xOTKA_c ze6^eL`QJ#f^-98m%kOfok|?|*x3EjF{SiZG&yD_qA%diM(c7C9(0O8Ib?S zwq46@&1KUNL#67|3%UeXUl#>3eS=mc9r={X8QSCVj5EYA$uQPIRQcIsOCVFqA86p@ zi!7@o1nrLl4Y-)V651o-<_y&EAQNa!N0nfR;Uf7jKvjG5_<^cQm{ugYY`+V%wj@dx z$h@8JEUFw8$GuA8q5Th_0cneY)_jNoD!sVE6zGDlS+YPWD?OkoVJjV{uI+eLD+(02 zV;PXDy{IUbP0l+XkKBHh4_ diff --git a/greendroid/src/main/res/drawable-hdpi/gd_segment_label_pressed.9.png b/greendroid/src/main/res/drawable-hdpi/gd_segment_label_pressed.9.png deleted file mode 100644 index d0b997e1f95f70f3a3ec6a1ca1af4b5aac28bf37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)8~B%+jsg@pwR3l=sOELhlBu&_{$qAZkB@{!DV$x9MxQktfuDQOZ3U&0t; zj4`;JlKVc{*t)K#ew*3->on(_=ebW1d@ls-E1V9&>Zbv?U!i4J(dXSVSb4Zc-(3QE05T00V|8hZ#03GN31u1l}9A&!O9{Yl67F^5s6x`@`%+M zu!=*Z4-~#+`ELuq{JFjWp}cBMZ|Ghf00000NkvXXu0mjf DEfmAU diff --git a/greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_normal.9.png b/greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_normal.9.png deleted file mode 100644 index ed6014cded7b1ab3eb5bb28a33515b4ec88bfa40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F!3HFaY)uV-6k~CayA#8@b22Z19JVBHcNd2L zAh=-f^2tCE&H|6fVg?4T4{XE)7O>#7K?{XE)7O>#7K?T=sBQ}x2KC^h{pNk zgads4l7&-T0ylC83oe#+;uU7*Y)I?+KRM@9eUOMT-wt-kO!0F%JV20sZcby%32R{< oRs&06Vc|=24tls`HLqr5kZk2&D7r0mCeT<0Pgg&ebxsLQ0KED)$N&HU diff --git a/greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_selected.9.png b/greendroid/src/main/res/drawable-hdpi/gd_tab_indicator_selected.9.png deleted file mode 100644 index f3f015641093915880182081a8185725d8d693a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F!3HFaY)uV-6k~CayA#8@b22Z19JVBHcNd2L zAh=-f^2tCE&H|6fVg?4T4{XE)7O>#7K?OP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000-NkleNYr-7~fM51!71oL@nJ}ls;f@ckgR&Hx4=OAg(;5 zlnI!zfn=B=vnd(V#!MT>aV81NiZat6hK#|QKBky*{3A6aZ8U43-Qz?4Xxy3I_j%v> z{hr_RJn!>tYeo5!8EMPX5Cq9^m$|&^x?Fn~q^RHa;hXE#WhpH2!%Ddp#yJHb4nYn8 z)GcvA;02se|9l@PK#;j_iatN|d)BhNEEzZrV@OC5m5m?;YZ4KTuLBSbfS?$*W22{g zF;o=n*anM-^hBIst60{cfXaq)AKy^NGXl1z5G_csssjl?4oyg*aFk8hv7}#CwY6gc zLz56#XU8Uk@_Q;!r>p?fVjyvzw34WmGEgQnP1E_Pk)%k1G!m2%r)bt>WJwa8dN5T@ z5o%elt8_|B-Py6N5Jp&nh{xlGxXB@c_qF(*N;pZTC?iE$C>ze010+rx%>ZYt79QsVoWRhW z$z&k|7@>wE@GKNz2u!t>BLt_ckf>cR8{)!2wTQR?YPnblVuf2}2^0`o(}YA7nzSZa z#4KOQ<5^ucjZ|A#GiPQ--ONlK2&=q8=>uD@d*TwHg)=sm;HeMOlE4{Z9IdBxYn zReR~?J%3)yxZ1jSeRGcZ$BJWPP`~=ZBa61|EwA=wrrh3n(KyEB=>F+}@vPxFH4pV~ z%so=}!SFdd9aI57Xl z!uzhZZ2InU-;b``v#s0Cz-{YJrZ&ao;k{U^mi6c e{8H%c)n_A}#}KQ&|JPCNH|j1acO5T&uK7QG%?D!u diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_all_friends.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_all_friends.png deleted file mode 100644 index ee9baea32521d1bce192a4f6ac7d636c0f4e68cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)fm*;dd2tgF*J61KV!v`#m8$bkb-qlWueujcH^u)0T*O=DNB3jU@8$dQ8|kr9LQzLNnIuEiR@{;|GWA>*h_!`0OyZU Uz-1NwUH||907*qoM6N<$f`yiuhX4Qo diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_compass.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_compass.png deleted file mode 100644 index ad91953759716924f351ddde2a1f63b804aac2ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 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 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_export.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_export.png deleted file mode 100644 index 04d3f523e0d8d556aafe5b93b704782f8aa61464..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0dc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=WrG>e(i-DP?iL-^Fp^KZPvzeKtlYz5=rG=}J zxtj${uSMv>2~2MaLa#Yay`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@ z3U0TU;?%1Tbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+3?cXL7!N9)m-{ zGnZKbUvTlW3xXDlX5E_P5ZQLzc9UcF-CC->r{h2=0*R?oFnD+hjFi2ZnD&u51MB;rcXW-qA>5)<&N8XUc9Qj zCYfA&EOgUxiPx*cdXsk?x3qD8GxPZ>hbc<06g$gu`9E4rPAg~XN`Y}H~Xg`Yt!=f15(_$$pZJ^@F)78&qol`;+0Ld=R6951J diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_eye.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_eye.png deleted file mode 100644 index 53786d8e4029e00a9384e4ee24aab71c932b78fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmV-u0hj)XP)3`F<&2m@?1>dA z`MLSrXa}|s47ra_rHrvYF*9614hfqJRvg8ORV=YU#Wmi~5Ng>-^As_1bfeIXaF|KC z?pBN#p#zn2iBrU;&sU9Zl+{Ux?ic0BwttXK>_5dm0t^6VLu`+2UOKS=00000+x%B0+ExwynWOER*7)!i$G!S~UVCYB^!?*r4rS3KR!enF^d m7Q@oYgBG{)mas8!7%;5=(X8{>eQqGoLkym-elF{r5}E-1nrpZK diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_group.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_group.png deleted file mode 100644 index 4d717198849c0b78a22dba8f1974a7c751bbebc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwKPP)|=W^o`sMlc6jCqo4^)OwUq>GbGvgDSCigjm5?>Znu|$dX8LBNemEZcVWB zT|{utiN&Hi;r|5+JKWSbubr6FhGL=hH;j1?z!b07-t%r^>=H{RYJICPLgl5km!vX` zY$Yu6A;K-t0BbK=RR>9hLPubZLaTS%)m<>>g14jpBXo%<{@ zs?I29jmU9a%Z#&JojrkPA}tS0%@eOVBe6$}!QK`_E2zhlrt5Qpl44h#XGYmkCY!HR z%s<<>D6iC^IWkdv%4OJmmq8P#(J(BM|99gj@DgAEd7k$&aF9l900000NkvXXu0mjf D%w?}+ diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_home.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_home.png deleted file mode 100644 index 65532b8f33ad990973b578fcdad378d363dba3a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0dc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=gxtWoniIcg7ql>Gdp^KZPo3pc}iK8npxJ;ca zP0V3>UGkGlb5rw5V0u#!dM$A31to>t0-((FMGaQgQ3e zw7p);fdZ|Y)!4RtWL(p#5W%LZ$s)+jEhw}xFktb=<(ogKx@-^;`NO#J;<@k*la6R4 zC1(e)1e&-7T#q^5${Ba8b9ebvhXalLn-1T#oHH{qUuJ2@inxm+tCCGxB6w8R-oIqL zc?tWS2Cf+!E3b!XFs{22zC%TVadQHzPSdvgU8T*7e#z-4$mK}vbX?hXf2QgI#*F39 znQkn<)Bf-ifiRIdgm8?yn3OK^VrRqJSR5Y5wLi2RB77uBgPhKJMCT` z{v!T;W{KUe|Jx6E_nbF*v$^f@a*2Lxv&rlaeIifn_dL2MY=7hpqws>$cWWEE)>=s6*ceTEdX~D6|D&n-GQN6D08sZ?fSm7bo$J$kH z{l9#O>>byqV~)Q2 zjDeZPppDsQEW%NE?D8~s8&%~6TbkILxv){(fx((4px^iP|CC!y>@C0mM|Gl;36^Pw P00000NkvXXu0mjfQgouj diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_focused.9.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_focused.9.png deleted file mode 100644 index 3286f4a317208e56ef674f5ce969872945d59fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmaJ=O-K|`93L&LM8Tv(A5hb{ibXpg`_a1NPU7ykIn;=(OL@?0oO!x~&Ae&m*^Uc^ zMk-w@I@KjTRA7(lW|Ic@Dp3)Aj+j?F@^UsylR%0;Qyz1?ke8apr&@z2D?#Ku>sMj!7e~bhSCF4K+*aS+ygO! zSVHOPcGNEKZG?U2Y{4&<13f zX8kI=l_j@wG#3m-B9Sd*faO?*4KQ55&qerPfM;29;iIrOTkGaiVsgP3wgf7Jki|1h zHk+lhK^odU3>S??J&i!Xj}d;S-$aV*H=U}yf(RVd)-9w%lk^moF4%_z3P<`o1;bjD zHJybr;es))Vlf=edMV|BviyIjVJxB@lmdU^{im>#?zaGw0uJo6RouAlD$kY0Cv2b~ zXs03EpRZzT1|sNWphYIy!lbOIy6M^TcvyU(6K z-cfpottfeM=G^4Z{_d`4-lLY9TEvO?z9YW?jXP|c diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_pressed.9.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_item_pressed.9.png deleted file mode 100644 index 936b8d5c1c2c4988f5549760ff6c60b07e9d14b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1089 zcmaJ=TWHfz7|wKf8Jl=TH!p)Nzi!PL4jncv{PJ*gav@p(+s$(`mv;<4KDCGenGa##I0qWE6U5ZrX0JYaEFoGTiIi@ z$v7mYnIW55C+qh3e7>!ui(wg>anY>H!TLD2i(?pa_M@;jL+;`de00_qwgOZRA)TY? zVzKBfx}DI-(yZU_w=`TX2Szx|9u0{lhi2L;3Oq0+L(!1}HPTWPGq8XH6pnNz1y!Gu z)y&y4;eyd6QKwlaW2IC93c~-Psyc@@Q3Cvl_n*RMsz(QO0+_I1NVsubHp`XHg$*Dg zXrv(Qu2iuj2N5)LP$$DlFDZzUqFMGdUJ$sLW+G9OK#UJiSiz|%GUs)BJ&}+*vaOYm zvMe9|c$pT;b`lj&oy+jk&=G8lH9ok99q@dINqEw_<#2s`P67 z-1a3S%u+skzIJ3^+1Bvw+Q7uTcC@+Ur9D4*^Xj9ols%MbdUE1Y_APyV%R7q74~)Vq zpARql*mp727td;;iGqE6_$2YNe{tEi$9+1@kNvp0Y~8)dDQ;@V!c}K)ImlmY-Y;DL z{nW~dr-Sdc&fxM7UphAi$1d29CD#%!Mn4*t3pU4{n$dIbI{Q}JcfP(~Y#e&ne_;2s q2S1O9wPoT$+ln{a9`1kMcBF}1{rUgjo_Q~WFthBz4_kX!d*|~XVG1#+XBLP* zl6sRxs^Z0?6W$8)FJ?OMG(7$D4f;ZY*=#B^EBcK(pw@ zac-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=Cqp^i65LlWxTNoO;xLG=znOQm+I2%}6xEh(e zS-|wVJMEtAE6B!f@Y|2(iEOO$zusjuy^r*FP80xPz>@Mpdb`$aDbspS?BHm3?Qe*fEMe@iktalB{-LBu&5dajg621BoyyEe(r>6R zTsw=Ez2S$j(0_|7PO~Duadn(u80oi}jemvAp8g~I{a#-aElT_|;0{an^LB{Ts5*@?4B diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_locate_myself.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_locate_myself.png deleted file mode 100644 index 85c5091e669ccb8f4cd9ca59baec826087db12f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmbVNdrT8|9Ip>Rn=v;vD7u8(u?#nC@2>BjRMHm@r6A?8GN<8sz0w=)UAbPRK**GA zz8LC^Zn`0&#)<<)5?B-vHN?kIRHVAe*mORUDJq#lTyTxMs|EeT_{T1}yYKIJpU?OE z`F$U`4a+i9qlNQ?0)ZepJ1-*~&_OCXxh#DMMtgg|(P6P@Hy&F&-oKx!fFEAV^B~xiP$$U;!&pL{b`XxZ?x} zkTwnYiQEL6+oLTrU1xA+(1z6E9`F7VXI` za}$u6@X%fc=jvgPA18CUdvl<1pbekExxI`tbWR%%5l+HIP^^a&g@hDw%F!%_OXZDG!TLIKcWy4f&kz_( zGr2VF9B-Fp4w|Js4%!XqbL4;t!%2!?^R)~sB^YuQVM}3X7Z552O1>sOjHqA)QOaPY z1XidJM5j=zb%;@`kRm#jLZS!5T-*Oj8pNrw;V4V8P9ofDLZT z@|S2UM;)ng|xdHd3~$P?;u|)0;&glyMO)q zZ2KS8`W+`1*dLsWt=v~|ydXaqtgDbpTcUS2fcmwT;Jw>t_c+0)wT6q7%skZBr;*k>BMzS6!zW$R2>|V0I_*#nce8r$p;@|phASSlJaXo5# zV|@Oku1%x&o4dsi0?Lnrx0kG`t5+_6aGKUTfrqw1(G zdfU_BO5xFs(Ra^mTvT`XLR@>q*)3-l&n}7UKDw`R?8YS^Dlc~JLrv@4qIdc~+|p^g7nq#H90hjoQj{{c|PeqsOs diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_mail.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_mail.png deleted file mode 100644 index 839f1aef3b7cd9f9c891578ec5061281bb115aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_#IP)! z2GQz9VKT^;7GU3tkwO`<^l>9rc4HOyhVNP`uCNxSnVAl$!8mAyh@LuFXQr#Xr=4c> zuB?3oCe#5tEIaFHN2>CMoT_ZyF$W6U&OV6^g?RjAu)OdQGYO6P$Artwl#S6@x#JOq zwtvtpN1crsiR7MVVof;`n?Yj3pk1NH5b^w><_?lhbn0U}pF9vQ7oJ7zXT)9t3;<;? V(gl7G-gp22002ovPDHLkV1jT3m|p+@ diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_refresh.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_refresh.png deleted file mode 100644 index 55c43c327eea642bcd4a822b093a0bb3c301915a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1392 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0dc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=Cqp^jntDBLfiL-^Fp^KZPvzeKtlYz5=rG=}J zxtj${uSMv>2~2MaLa#ASy`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@ z3U0R;;?%1Tbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+3UD@w%$H2h&#M8wwq~g|_ zYiG5W2Fe`x_&cU}<<91q%tMEo)B?@iP95@+oOHdFH9LCsPxfUlKl!J)oRv2Sj+ilP zkFS_mO7l96Peq@nO<#2IarLX^e#a~4Rhv!uwA%msz32bVoi2X&bMEu1eed1lv=>bb z@A-Z(=k1>9QaXKnJxR>$H;xLi1!h0FuJ}1pKg)bsV1J~&O`c&JQ%NFwWLo@7wpRyR z-^+PQ{*ak>bG~>``qvqgRBO7T&m_po2P&WOSSY}+cX~#5YVx(qE1Y~zcP|!P?)FY` zQQCfargy7^uikp@S@QVSiQN;=PE6kUZg<`U`&&9!e@$n7@-<0XGe#=cX1euhv%2>C z9&Bq4`1>q&c(RZ~a+~$$t246-)Vvoa887)4(yqQK@!3aTwO^dRX`6D*S8+~JmKP1$ zv6`=SJzIq1%9?+zWwr;m^F_E`IPq55adb!I{imB_Hz8BN2 zp6p8gOYN6AFJ(w(91F7!D!*U2{HdPwSBa=}!_!-nzC4uQHlcO>3-`^_%KPPiyx-NM ztN8rB;I$2X(x<;WpV;tK+9YDN$(#auGr2*7~9D!@d8fRu?zhav3l%e5^lW`NxD4R0evw`njxg HN@xNA^WO+) diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_search.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_search.png deleted file mode 100644 index 75339d906896b93ae0af276862f4fbba60d643f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1330 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0dc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L-^Aq1JP;qO z-q+X4Gq1QLF)umQ)5TT^Xo6m5W{Q=GlcA-HfvKsbiKCIBp^KZPvzeKtlYz5=rG=}J zxtj${uSMv>2~2MaLa!N4y`ZF!TL84#CABECEH%ZgC_h&L>}9J=+-@<(X&zK> z3U0TU;MA)Rbc{YIVv!;mCIn19ASOK70y*%6pPC0u?M1+3{rhQ*ECU1MGEW!BkcwMx zuI=?c>>zRc<1woY*Qk}!VV2TzFi#a7L^D( zuI#XQ5m3V@>*AQZ`Vsdw)jH;W)nnT-*KcjE_@J0sR9UCFbGOUo(z}6c!X9ZP{ob9p zH1gYPNAa49V}jcRPHLW&P>?K1k~aLCzWWHr95d5NMsvR?>$KkA*e9vubs>DVtEXLJ z?~aK{)*0JH)*O?0bSd3r{svafP5rBQSeGriFSN6-ocjFQVd={XeW7Uw zOm_x8-B5CeV_AjvnnR&444iG9G@07pPSc)R)>StrqVIQ6W#y_rhhr8X<9ui)~hGR zONy0*me3PAeisOyup>AV%e`g>^b?NO!h;4ICW;B&<3b3GGF7aO5bq-6PU6*S_5m_~ zAbb(Vwm5zAm7|H} ze-P}J+-Jy!7G0v2Te{{N#lFVHxUz&_ImdQ3x3m*C_02+%z5g5kBYp%J008PsJX%E( Q_5c6?07*qoM6N<$f{KK-5&!@I diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_share.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_share.png deleted file mode 100644 index cd3261a4fa95f11f2f57e3b3e308b9eae99f40fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 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 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_star.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_star.png deleted file mode 100644 index d5c58050a4c50e197ac8ace0e10f64be8cebcc52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 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 W5Ld5M&OdSg5ZQDee}2pEgYN)4g@#7} diff --git a/greendroid/src/main/res/drawable-mdpi/gd_action_bar_trashcan.png b/greendroid/src/main/res/drawable-mdpi/gd_action_bar_trashcan.png deleted file mode 100644 index a86dfc1117c65b236d3409c82de8e589c6fb33e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmV-70m%M|P)r-S^0^{ z#H5rU$lwDK+X0QgVIYI?135mMK!!yRa23LYO8wEKPc#4sFaX={=|;6cK}P@p002ov JPDHLkV1f)2czFN- diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_arrow_up.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_arrow_up.png deleted file mode 100644 index 1a6fa2e8fa61c486bb0e836d808464ebb553828f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)0x0Y4#*rne7G3Iu(h@A1yYX)>HxVI9|i*1jT<*sfBN+4KL~@^ATfga2pB4} zc=6)=j~_q&f*A~AgTz2`WEl(uQr+F%aUVW>_yIE%hCyN=IglEX3Jpy&p@ZTNkLRf z?;yB!&S1A*fpoT}=pY%K9D|!fhAx3@r8i)pTcvA@AR+__LesQjK*^AjHt{{sKqzff ze?Iug$@`w?83N%sjyvx4dW~YSc*_05v2EKZm&&CxsV^WTCM9ujEq?p$1mWGhd#?ur_;GYmL%zxn72%3 nOYsgp_7<=B0p?lEw*UhGWuqmI8SBg=00000NkvXXu0mjf002A)0ssI2ZV4tr0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$yh%hsRCwC#U0bpuAqbVKrtxXKuNe$Fx}R>QhZ!6(TmKw@!6U=WFRSku(p)sv=utFO#Od)r(dU1bqC?XK zW3nq224k^=fsU>UaA6!v@Hi7*f*H^r`xHmV720ph)n3TC7AGrR`irryg7A)Ir`kuChymOVTSsT z7ep6*IYeW89>Ww-EP_W}k|IU$UWlHJip=&M2houY{awZ`2Dd9zSrA=R3@-X;9Xx7K z;LJ#tY*4=y6RJ!oD8d+E@upbQER;ED4BR^S!dE+QeLxEN7=^DSvCY6y@bUY&~jaD*# zF#i-7UlPCg#BBcZ0}vf8cn05&F{X_5WVTtsez1$=dCj;+vc_Cg!ev}uK?s_(dVxF5+{se`8i%d;NW<_umFw^|wP za@`~*m_>R@z8}nRPO>eUaU_!AblMlkFAb-sSi-DmpGp-(!_KB0@PJW1_!9Z%_=N)@ z*0e@p3b0g`36kv1U`A?zZHz^e5olLlnH^?b8~Y;MN{k4Bg?r6VCKu5$6L=ScUFQeO zQ;NwLjloTT?T!SeZxAti>CdWO5*Tn?^M@r^f>%imM{#hG(ZM`QN3l#~WTkmJ$zCs* zvYv!{JtAfQh72C{E{;M+rVzv36y76|1(6nHWHG9j)R(EH4gLxO_k-V?!KCHvvYEsH z{69#+ITBwMq5*PBmU8E}#+kCGNLb#M!5A~K-~uHr!Dcz+ey6FA&19>FF z?3PMt415m>20wHv++#=V@1{dBmUe|Ie_5!KQJg%e&Q^H|X0lj2N$>*o3~+b>0y8kK zr8x;zPU&D0mPt2B=q>Nw&fqlkIGW-vT&H{`&1`E$-|zS6^dWrWoCF8fMcD#T=byPc z)lD#fPfr=l2$@MXNPL_fICacDt4xAp%;f)*&sv&6HyaO81644+Mt=kt0GA}Nys)d| QIsgCw07*qoM6N<$f(u4V00000 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_bottom_frame.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_bottom_frame.9.png deleted file mode 100644 index 6f843065f393b461e5c28e7f9182eea2ab6069aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSw3P)0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzC`m*?RCwBA{Qv(y12KS+krAl$KO<3! zp@tg$rvd<)V+b;m1>^!CL-)ah2anm=*<~5X1V4WKxCf+uf!It?FMWLZ^5t;`3II_5 zNg(wJY$#Oh&HDB0*8wf~M~;CYeH%7x*a$KQ9R9F~0tSQZi4!M!wtiO{tq8M93#a*kov&Dz)2we@RWj_q=2>v04dR(J9lPkYinmQ zF)^{@GVI^Ke?PBYy*ka^-F-U9K%hAvU`dY=J)HstL9Um|&CNB7jEoEt6%{q*=H^y| z$$$O&_15dxuTL*uzI@%}$&*h3g`OeD1y)0mBsqYT2oUoEF&C25Hz58DiWH#UAJ{Sp k*idL%r3wHgQGfsg0BJYR{j1b@?P)+pnOD-t_0W z1y`!;9J<>M{1zwqb1Q_ZdvkVn_Y2aSkH};4lsqG^$Xh9TLSB&f>T#tjwYM3BF5_HGD^YtX3;XSh!p+Az|TSv4G^^;e0-agoX6;K*GZ5bP9?2 ze!ExrZ^g-E0_Ai%A(2Qx&n%?d3W|ypJ+p8$8bQLs;cy7$cswE&i$TvU91I3fqS2^9 z&n)cs`;f4(*Xuz!91e&?BG5AnyWK97a5!wxGYdPN4kRpWx7$$m`#nOT5cJH#R;vXi z7z`Tp%)(}~2?-17afPzm?GOkApl24=>vbr8zu%x|7S?JtNLW~{R-vff!Rz%x&n&D| zDo{Kgk3r8YESJlWu#omdDC(hiyWP+;3yZ}f6qn0o&@+3u3WWkBY{h$r`FtJ{7Ups} zNLZN7W+7o=CX<2W;bA(RhJTqcuASg|9{X0uJ>@%Xjg z%{1}QbT}Lrw}m&3VOn|ObUJ_0Zt=$&N(cKV^2K_v|JPrITVH-}=L`{Tpc*k6mq0@uyw^GmDM+NY&ghwm(hO1WJA zPD}5|!>f?)fMcW4=oc-0AWv@$64(%w#fD$TX2(Y&k-#x} ziui$~cQK9bc4;=7`4M*<+U<7v&{T`GL;Q3&9N#P!%ioXT!@>TZyuI;Y|DV4K|GfSH XqHM~fO}J^500000NkvXXu0mjfr3x0A diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_normal.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_normal.9.png deleted file mode 100644 index a88d8072495de4084dd30cc8800a3d6883db27f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Q+r0V1Dld+`)VNtU=qlmzFem6RtIr7}3CUw+FJ!C!x0Zk4i``u$P-5V7 zDbQr*l$I0e6*Vdf#?3-Xc}*{NynH3_*!u}zS=5nlZ#RDuliOs&-9KZYgqKqj*H_Dj zi2*Y^7Dze%TUz9`vc<@vc#isaR-5KaJMXrya*H{y#Ut9kA^)_@^~LHKq{u$j}{5k!#@H(&c&Nl8BD<9|XkDnU5qu)LyNm}>#6aV@AspqqzStS^z Xx`cgRa`jRu&;tyfu6{1-oD!M7*cU7>CgZF_RJgxMn+AN4tB~j_$M)NaWUUK!z1uP zT;tm`)>DDZNq!o?tp()SUnf{_8?y2B{5N(gS-{oID9p^)5X^4dqvXpZk{7c5vHah^ zj>4xs4ZAq!F#UH{{jV(Y(6npfL;GckJ`bjJTwZbT*=NNmUJgr{ZG)6-z1Si+(>r4( vFdpqY?6o8Mgsc3S-#i&BU)g)`C>&tOc1Shdtf6%a=uQStS3j3^P6 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_selected.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_bar_item_selected.9.png deleted file mode 100644 index 1c37ffbdbf7c3de7712f061dfb7888f70f3b1f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Q+r0V1Dld+`)VNtU=qlmzFem6RtIr7}3C7*cU7>CgZF_RJgxMn+AN4tB~j_$M)NaWUUK!z1uP zT;tm`)>DDZNq!o?tp()Sz5mQVSM zFqK`?&9E`}LH&v+^({(!$_$v^9+;5Cq@ESjD`haBKh64rio;T7+aPOOFSZEI^v;+G vj7R$pd+mrm;VOUTH&4dOSN0w}3I`ab>`9zuqTa;`bSHzStDnm{r-UW|IzU!( diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_arrow_down.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_arrow_down.png deleted file mode 100644 index cc8b41ff50cd3ee5109af2035ad67b274454acd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEp!3HGLe)=8*Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?_nZLn2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1?ON>1>eNv%sdbu ztlrnx$}_LHBrz{J)zigR321^|W@d_&fwPmdqmhe~tErQ*p`nYLg_Dz;n}v&^o28kX zsfCFpOs`9Ra%paAUI|QZ3PP_lPQ9R{kXrz>*(J3ovn(~mttdZN0qkX~Ox$j<#AzN> zZwhX=IO5c+4|I$^C}NQ!8YToxJs>7L*#bH6grAxROzlO$WSwVWS^Ru&xMZBypS!XgDai^#WdkCEP@#*L1=dzPI=Jt;}amp{L~ zy*<5!hjk_6O4gSL4cKEDvUa4ny1KrwRydHV;la0rZHd@w$r~&S+q_H5%a7Oo`0$W@ z*Fpuu2{InMet&nUENDBe6Sv3W|KsER`xDxlZh&Os_Wn>=*mgSa&W?>zX$Bpwh|mRy!xZMGLd z6eg(nroPQLMG?_Q5fKG{;M2qx{{ux3!H3~s_0qMS57xlt?t6SbpYPARHeWnFGCVQN zFw96{PASp-5M8sO!}P!P`-MceFv(TO0xnUwEn`Z6M*ik3`UW`8_?$pX`m*~OR&RVRz;=G?lA7S@Yp zeSKL^8f@wmnDHelU?HLb-&(Of$(Px-u0+qlHP3=Jge=SKUQiWv9%QkLK#YSC9mXMu z3!D(0N+c2|fd~c2Ly;H6h>(z?q68u6d@S|m8a1h;f{_2o$v{ZV;KJk?y5nIXzk1>y(KWjQ2H% z7dRNC)CH>Q|Dl%ELwlrz_T&AhuvcDl5MM$bZn!#aTx~LNRCaqc@Y_T7h9m6vSjv+C7bW7*WnudV}X6S zJPn2q8v9qHyH|92f@5!NsnHvJWYcMP=~$oLIo6<0qE=ASW&cZcyVXh!h6V?&Fi*qj zH{U)#e02bfO-y`vxAAEB;CMJ3zBB%WIlB3=b*Z&`FH~I|dbT=S9?cxTG4}RI3U6h0 z?%yrn9NlCle-3^B_4Si8aI07u2%Xs8eSQ5v2r}o)s}Ig^4BZZ1VIfyk9%n9G{sV6w BK!^YU diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_bottom_frame.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_bottom_frame.9.png deleted file mode 100644 index b6c7a9c169485b1276d9a1973511bd8e0063487f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1191 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{e!3HEJoIX|yq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1+hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%fti7VnW3Jc zv5C34xsHO7fuVuEfswwUk*=Y+m9dePfq?=PC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3Uk4Ff!5ws?aU2%qvN((9J7WhMC}!TAW;zSx}OhpQivaF)=B> zw8T~k=u(Imatq+b<`qMO2^e7d6^RAQm|mCsATTyQdT|u{rx?^v9a-Ig9)4sV*j2!f4-f;=)93*?*G59 zudfg15owUOud`tevUki;TXEy~^YioNmmj$>T|ZuqIcWX_-rCJcN4t6*!v8B@e*Hge zecWEb6g~@|L_yXbj+@-#dRw$LHC-oXy=Z3VpZ5CY%c;y~t9ZHs)Kqqc$Hm13Hwc#X zh%h_8vbC{MW1P8u;#|Jt4hjrMR<-lXzx(~+;o*M&`F4Mgw>o}OC{_5XQ0tNQ$K6mw zi=$|-Phnx9fPuv{2IUX8j`z#|Z{lIPs9@(IqrxA=9@M|=zrFIhBm6wldeNA@_J z>724`Kl8`*fF%rH{~eg-d7!OHf+vJ&K?%P=0>k|q=f%7HFEE3O4o_DCjp@tH$c$|17)CsvLQ|fqD(g#WLG9^e~evn_rAY3&-45~-&}sg zo-jIX0}TKGx^xF5Csz;hW!q56uj)`hIk`9!p)o`xmO!MzdIS)uF(m>@Q8*EiBd|JM z*Np@MfF(nth#_KRy9Fu?Wx{3*(}?0E8vp`>j5w@HMhH-eBxABZ~mVm>vOnOt!a*?Z*cFI82U@ufM;)7szFE*eo`e#o>B$`~^N-0hwz(!Wzc@g-TU;cc17g0YM+&f+lH=9CtJGTHw_QFIAyAmqqD z@&2cP{*;LnFbe7KM#lqcqMIFKYHAV9?Dhe$Xgh|7`iLKnFZ zrb8hk`cPP?8Q>!Gt*rQ~g~lR_eeap>8p8zmb!_D5UJb|kx0 zSh&AOVT?*>eu;^r0Tnsl4|?LmHhz?;e5Xttb*}ZME4|C^sNCvCO$wgv%Zd4MtV!aq z1H!xM?_3eLemc@yVxYBe@8|>Sc^x}ldtRnlm4Cgrp(kPGK`MNn;^&feb*yVVs4{3w zPRZQpO#$kF+G_W!Wxjo%D%f9t$ZRI`WK+vDnogGy~!G#e`OwWECQ)N1h5-aY~ zCT>=UGXkLIlT^fRSfy{5=7tH*D(pVVbpxw^IP zWxvKJH#RDDMVeCJ{m9Ij?mpSWhLQbskK0Bi!Bux$t=(f+Rnup;SsVj9qt4g~dMus* zwS~HXP4(8#*B_4d%`J?z%MK7VZw}6LQnVJq#p@|sTO7NIu#$KxyEnYjvZmTtc4(-Y z{-N6u)UM%7g)+Rzad<>`U{yiMZ70a|JNh~INMD>=SgBL4{8^cgsqAXraCMnY(rH?h zMRk8vI4}T}*MXAjrNF+OB5keWn{8clgA*HnegGTyt#(|ei;uq_x+|k3b;wh9Vh&^n z*B0Z-jL0_Hm7F@g7yl{c8dSI~*eg3koYVitR7-ncI%xfjYWu^r@+kW$&q+$_%=N2R z3NV*qn&W1Vi(fgp%bIirwDF@q^#ftf?Vm*MKIQ%eHTe3ulheG49;p=n?(V)v&ADhq z?^@;UC$_kK)d|bkgbx_|1Ai?%PJ2`V#QDvPkNHntM!Hy{8e2E3WPo1&e8%G>cjwJx ze>j{%vX3^orzB<7Fb0Y(8}s32SiCCboVq-x@x_bh;HA=j`}+;CaW`n^J%iV-E4qB5 zH80LuqZpZdLwPuq?QjM@e_EJbW5-V F{RNh#i_ri8 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_selector_pressed.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_grid_selector_pressed.9.png deleted file mode 100644 index 6f53dddd1811709187db596bfb2a4188a73d8da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcmeAS@N?(olHy`uVBq!ia0vp^8bEBo!3HFgt1V^&DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf^)E`f^TASW*&$S zR`2U;<(XGpl9-pA>gi&u1T;Y}Gc(1?$i&##+0fY8)zsP1(9p%r$-=_X($dMz(9y-n z(9P5prq?AuximL5uLPzy1)(I z8@U<+&9lVr7Kq*yEN+47HNvS^ALtl;P{bldG)xGXdO%EgvITPB2|qOtnA(eg$@*vP zngq$7H|7?)122_2cnrZ8dsiE5Z*9xrLoYDyXUW(Z2Mc<+Wb0; zG5+d?a<=d9eEJ!~xS6FSH)-c2Jga$*%;R)3a zSAUi*y!V6iI>WCGRZra>7AzE4Tp+XJ_58PzCFWQDY25JV67)0NamjPhjh2nhCnmTy zf3e|fSFW{en09wP%ZUe@{FVuM?%kRA&N-|3xAWHtzDpLo^em7uVGm#mV=Q^!pVSbe zTX!b-?3?dl3%`Opm+hNQNsD>`(xDDS)6kmbnQsd-}R zX{MSy)EWf2Dx;QqGj) zs#94{pDJ)|_z)!0BKY*s-Tk6vsl~IF%v+*zgkkN5&X>+vGbZm`+Ap%em$6A8N?W9Q zfxrZbfRrCERyb!C%TBwXQOt8Ivmo=phBBkD``U9=%-98#mU5aZPV|>;7dC31H|Oq8 zmQ%H}Z&YS_mwu0(2_3omH%E1sZDie2uxO{{nkzwvuNwXh4LEo)!oofL zf5-y4aKmLWzb)UqnK|p?m3p5)KY7c(o64->`o<+JFYImieqvN4FZZq}OBb@MW)Z1;5ab6Mw<&;$USrD((e diff --git a/greendroid/src/main/res/drawable-mdpi/gd_quick_action_top_frame.9.png b/greendroid/src/main/res/drawable-mdpi/gd_quick_action_top_frame.9.png deleted file mode 100644 index 6d433058d6fc50908e2593a4c20f4441ddb9ba51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmV-?0fYXDP)0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz9!W$&RCwBA{Qv(y12KS+krAl$KO<3U zaTy9Ugab&405LBRbAp6`7^L_+5Pt^ZH$c5VuvyN6MUV+dNfj3to5jY)28oM{8*y=Q zse{CUhWz{X?c2?lFJGQpym;|Cpx7y(+Gikf6hlBRg<&8N0Akg{hY$CC`0(M!r%#{$ zadl9IA``0(LTe1@T8kb00lpni6kp-f1Q7TvL9N1mXdpcMlN z0Hl7~wrx2;rWj0&2^x-^wY9ZY^78WG3}gUBMa9U9iV6#8JN=1k^x9x zL_~x?G_}AD29!WdGEqCzG5w#fhF%Tb#tsu^ zlY)<;URA&Ey;tAsqQ38w_Z$iG&f|mN{}Zq_SOkSafxrpVb^UO&*_gI%U%~tva6m$VTi6%LWbyzcI?8wvn}9K< zu2w6_vaB&oOJKv319)ml;0YvY1hPLE45nC{JFBSGYKgKeml63rmJh&VKwt%q3_wTO z<|v=oXf&i)GVS$xtXi#RQEww~?EH0v*W5y>9#g554U%-+KCo-GnwiVx#31UhOZ0FD ztWv26m}xA6Y&L5)o6Y-ry{_S7G2&alR4Nraoeq;EX&tFk{=1HVJRXlv+wFD}jg$&$ zMy22HpFu&#fwDsV&@Jx)&+hYdI&BPx!{ul+x!2~7Od62+A+nA4FN)Fwm+!}m_Rq(Q00RJUQ2_NzeiJ1C0000x$oXLZ<;q> z&cpl;K?Adyk|-i$Fx?o)tb|r#g{#1JZKD2&phcS~2--!2(AHfsi;OG`L28O&%q&eE z$2ardySFo1LSQy85I3I3;d0+S=lt%+x%Z$_3ieVM?6DjG_8-7^`k6>101?4;U2q%+ z9J_*^^em-88%R|Gg*mSA4c*YeG)>@~Lq4Cc9k4Cc40gdni(eH-0vDO3H7Z9{RKa@> zIqwmAFi95czE{8)+YGLucEan1TlzVX(OQL$1_LDlVcLspPIAD;#Qh_Q8a2t8O3|DTjNuD!g;IS`&X@sz%Ilb-j|df(I+;_qzRrrG142Go`Gc?*u) z!;;x6BbVoW0feE;%ur@-taao`a7ruKs~dE;wzg(-=9H_&&uh^6w(Z63;hRqrP1efa z0Juv%VC7=D=l;Zl%)P~jgZYjxNiQaY-~j{*;%oZ*ne15m=(B;wl5;W-$2_5QC1fgL?5k<#(v%1=$ZQ#v&|Htq5`+vTXw$>wM zCA&%pf+$Ngi%Gn1#>>CO`){TEm+`g}HKkFz*^RQY4T(n8?1CVn%RMj&Wp(iM0<0s5 zB2r7GQCd32E2d7#9)@yt3$qELuEDirr57U51$#6@Aiq9*Oae_6$c`F`k*pZZXw5@5 zY#(Y(DMP(VL?s*QL7mHE0UaV4xO$)A@UB4Sba{OCu4xkFAgEU$SA$ARZ6Ida5Y$kN zUtww)P|H$mFvM|OH3%>)Lo)%I4ft7(4+eOK0c#(Lz1eCvpA_S3zOW^b8H6mJrnA{B zl?_s+-9xjHNW{|!1pFA`cLoh4yMDv* zl?fM&c4doZDaK1F50s?;Lv?)}?Vu#wi1(kuPHNDCbP_sdzpdcLb^AP579X>rj7&Ra zntk~ywq;CYIvLXfvGy7u$%mWhQz;V2iY3A3yi zkA}EFEE?v-reH9_1-Lv{G?jiG8Ys_IH@LBaTyGR~3wsu!tqnjmZksyDrOa!EV~G^h zTjQ#QV`(hNrExH{*Vw-roxj4<;~m$>78~n>4-Gu+HXdu?>dQI&B*qhBW6FJ#x_GpF z7Lu5e(-I4B|SDeovAYXOAFuQ6Zbdm*aOc#{jsuq;iTQ!d1z!GNWUJN zx-oG$zW?_tXO>_1Ic!`RSbX;(tR<_C*Ux?YwS4B$i%UciL0+HAKHDxl_nvK{sa2eb Ho;vpj6CztU diff --git a/greendroid/src/main/res/drawable-mdpi/gd_segment_label_focused.9.png b/greendroid/src/main/res/drawable-mdpi/gd_segment_label_focused.9.png deleted file mode 100644 index 56e27bcba92e2aa0be954a8864faed1cb6520c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hIoUP)ab+?lQi|~a&4AxP=yWxYH%VF&77=1*AtEk$tN0WjFXJue$2{WB^-Ug+ z;XIr;Cn7Hi`Pns+5!iBPiXLA;jMI3=y=`(6jgbe*1S-r_92)b4hcg^U0I N002ovPDHLkV1k@Od+-1N diff --git a/greendroid/src/main/res/drawable-mdpi/gd_segment_label_pressed.9.png b/greendroid/src/main/res/drawable-mdpi/gd_segment_label_pressed.9.png deleted file mode 100644 index 490bc7372ab24e3c8584f69c11fef464c68b2d73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)fBr?(`Bgx2bBNk=Xm}Dd};y^&ef}Azt3`%Q2KtwEx5eEW7q7IS~NK8hUl`-Vg znp_#gOdy<{LS`70l_(IP)^?xWLWEK v)6KcYzxYtQT;xV#zWw;V#x?zSdJ8ZB((+yC%0>b000000NkvXXu0mjf35|)N diff --git a/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_normal.9.png b/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_normal.9.png deleted file mode 100644 index 6358bb8d3d17752cd0a1fece3876c83480005695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L!3HEN&baUbDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#Xv0|K$y{KjmZq4AbW|YuPgg4RsmK{#hMo?zkou1o-U3d5|?ZH zFY+=tvamkS?EI&Fp~dUY^=EUQlna1>Gg<;$;o;e9#cWSrA@64E;ZN~OO u?f(Veq~CvjPGbz2s>I~!!V;?5z|Oiy?%C>miwi)L89ZJ6T-G@yGywoMlS88b diff --git a/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_pressed.9.png b/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_pressed.9.png deleted file mode 100644 index f0030f698e7509aea064ae146d3018d49a0d17a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L!3HEN&baUbDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#Xv0|K$y{KjmZq4AbW|YuPgg4RsmK{4!fv5(||$|o-U3d5|`)p z9pr5=;9)*5+ZdX_)|S@x;RQ?W*V9}tnOnn{zBa0QPn3;jJJ3J7f#1B7ufJWu?Q`qQ zmzisRdcE>ryR11SjbUHhZRL60UsH4=Zz)E2i#af}UzQR)9lnzpXa|F*tDnm{r-UW| DA|pj0 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_selected.9.png b/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_selected.9.png deleted file mode 100644 index a02efb1db482fa96680896762f979e469a987fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L!3HEN&baUbDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#Xv0|K$y{KjmZq4AbW|YuPgg4RsmKn$@=5xmji_oJY5_^BrYc> z0KtzKo`XC*JpU)&;PK(%_#nTGL9IcjlktP+zjP-vw%LAeMLnrUUMn0kPCsV=1b@Qg z^O(fQ*qAo1|z+U_2;y&Ubi2K!EEEM9h=fgxI2;^mADA3=U#@O1TaS?83{ F1OQsaNoD{5 diff --git a/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_unselected.9.png b/greendroid/src/main/res/drawable-mdpi/gd_tab_indicator_unselected.9.png deleted file mode 100644 index f47f042b13716574bf36e1264c60d9691739f9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2839 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 diff --git a/greendroid/src/main/res/drawable/gd_action_bar_item.xml b/greendroid/src/main/res/drawable/gd_action_bar_item.xml deleted file mode 100644 index 7ca896295..000000000 --- a/greendroid/src/main/res/drawable/gd_action_bar_item.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/drawable/gd_quick_action_bar_item.xml b/greendroid/src/main/res/drawable/gd_quick_action_bar_item.xml deleted file mode 100644 index 708f55897..000000000 --- a/greendroid/src/main/res/drawable/gd_quick_action_bar_item.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/drawable/gd_quick_action_grid_selector.xml b/greendroid/src/main/res/drawable/gd_quick_action_grid_selector.xml deleted file mode 100644 index 1478b924b..000000000 --- a/greendroid/src/main/res/drawable/gd_quick_action_grid_selector.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - diff --git a/greendroid/src/main/res/drawable/gd_segment_checkmark.xml b/greendroid/src/main/res/drawable/gd_segment_checkmark.xml deleted file mode 100644 index 1b1282ee5..000000000 --- a/greendroid/src/main/res/drawable/gd_segment_checkmark.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/greendroid/src/main/res/drawable/gd_segment_label.xml b/greendroid/src/main/res/drawable/gd_segment_label.xml deleted file mode 100644 index 6d206cce1..000000000 --- a/greendroid/src/main/res/drawable/gd_segment_label.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - diff --git a/greendroid/src/main/res/drawable/gd_tab_indicator.xml b/greendroid/src/main/res/drawable/gd_tab_indicator.xml deleted file mode 100644 index f34a012e0..000000000 --- a/greendroid/src/main/res/drawable/gd_tab_indicator.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - diff --git a/greendroid/src/main/res/layout/gd_action_bar_dashboard.xml b/greendroid/src/main/res/layout/gd_action_bar_dashboard.xml deleted file mode 100644 index 1cafc1142..000000000 --- a/greendroid/src/main/res/layout/gd_action_bar_dashboard.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_action_bar_empty.xml b/greendroid/src/main/res/layout/gd_action_bar_empty.xml deleted file mode 100644 index fd9f4b2da..000000000 --- a/greendroid/src/main/res/layout/gd_action_bar_empty.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_action_bar_item_base.xml b/greendroid/src/main/res/layout/gd_action_bar_item_base.xml deleted file mode 100644 index 3edec28f4..000000000 --- a/greendroid/src/main/res/layout/gd_action_bar_item_base.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_action_bar_item_loader.xml b/greendroid/src/main/res/layout/gd_action_bar_item_loader.xml deleted file mode 100644 index 0a0a2675d..000000000 --- a/greendroid/src/main/res/layout/gd_action_bar_item_loader.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - diff --git a/greendroid/src/main/res/layout/gd_action_bar_normal.xml b/greendroid/src/main/res/layout/gd_action_bar_normal.xml deleted file mode 100644 index 3a4b14d49..000000000 --- a/greendroid/src/main/res/layout/gd_action_bar_normal.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_content_dashboard.xml b/greendroid/src/main/res/layout/gd_content_dashboard.xml deleted file mode 100644 index 4853fc3e6..000000000 --- a/greendroid/src/main/res/layout/gd_content_dashboard.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_content_empty.xml b/greendroid/src/main/res/layout/gd_content_empty.xml deleted file mode 100644 index 1cc4ba55a..000000000 --- a/greendroid/src/main/res/layout/gd_content_empty.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_content_normal.xml b/greendroid/src/main/res/layout/gd_content_normal.xml deleted file mode 100644 index faf7136f7..000000000 --- a/greendroid/src/main/res/layout/gd_content_normal.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_description_item_view.xml b/greendroid/src/main/res/layout/gd_description_item_view.xml deleted file mode 100644 index 5b1607320..000000000 --- a/greendroid/src/main/res/layout/gd_description_item_view.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_drawable_item_view.xml b/greendroid/src/main/res/layout/gd_drawable_item_view.xml deleted file mode 100644 index 2b63e5527..000000000 --- a/greendroid/src/main/res/layout/gd_drawable_item_view.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/layout/gd_list_content_dashboard.xml b/greendroid/src/main/res/layout/gd_list_content_dashboard.xml deleted file mode 100644 index a7c8562a0..000000000 --- a/greendroid/src/main/res/layout/gd_list_content_dashboard.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_list_content_empty.xml b/greendroid/src/main/res/layout/gd_list_content_empty.xml deleted file mode 100644 index f99135097..000000000 --- a/greendroid/src/main/res/layout/gd_list_content_empty.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_list_content_normal.xml b/greendroid/src/main/res/layout/gd_list_content_normal.xml deleted file mode 100644 index edfe43066..000000000 --- a/greendroid/src/main/res/layout/gd_list_content_normal.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_long_text_item_view.xml b/greendroid/src/main/res/layout/gd_long_text_item_view.xml deleted file mode 100644 index 2db5cd4c5..000000000 --- a/greendroid/src/main/res/layout/gd_long_text_item_view.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_progress_item_view.xml b/greendroid/src/main/res/layout/gd_progress_item_view.xml deleted file mode 100644 index 06cf32710..000000000 --- a/greendroid/src/main/res/layout/gd_progress_item_view.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_quick_action_bar.xml b/greendroid/src/main/res/layout/gd_quick_action_bar.xml deleted file mode 100644 index bb68fe4ff..000000000 --- a/greendroid/src/main/res/layout/gd_quick_action_bar.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_quick_action_bar_item.xml b/greendroid/src/main/res/layout/gd_quick_action_bar_item.xml deleted file mode 100644 index 5d8a0b1ec..000000000 --- a/greendroid/src/main/res/layout/gd_quick_action_bar_item.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_quick_action_grid.xml b/greendroid/src/main/res/layout/gd_quick_action_grid.xml deleted file mode 100644 index dd62ad3af..000000000 --- a/greendroid/src/main/res/layout/gd_quick_action_grid.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_quick_action_grid_item.xml b/greendroid/src/main/res/layout/gd_quick_action_grid_item.xml deleted file mode 100644 index dfafab5a7..000000000 --- a/greendroid/src/main/res/layout/gd_quick_action_grid_item.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_segment.xml b/greendroid/src/main/res/layout/gd_segment.xml deleted file mode 100644 index 016671b74..000000000 --- a/greendroid/src/main/res/layout/gd_segment.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_separator_item_view.xml b/greendroid/src/main/res/layout/gd_separator_item_view.xml deleted file mode 100644 index ae0a2cb07..000000000 --- a/greendroid/src/main/res/layout/gd_separator_item_view.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_subtext_item_view.xml b/greendroid/src/main/res/layout/gd_subtext_item_view.xml deleted file mode 100644 index 1375ed770..000000000 --- a/greendroid/src/main/res/layout/gd_subtext_item_view.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_subtitle_item_view.xml b/greendroid/src/main/res/layout/gd_subtitle_item_view.xml deleted file mode 100644 index d0e814e73..000000000 --- a/greendroid/src/main/res/layout/gd_subtitle_item_view.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - diff --git a/greendroid/src/main/res/layout/gd_tab_content.xml b/greendroid/src/main/res/layout/gd_tab_content.xml deleted file mode 100644 index d883d6dc8..000000000 --- a/greendroid/src/main/res/layout/gd_tab_content.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/layout/gd_tab_indicator.xml b/greendroid/src/main/res/layout/gd_tab_indicator.xml deleted file mode 100644 index 5d6e78fe6..000000000 --- a/greendroid/src/main/res/layout/gd_tab_indicator.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_text_item_view.xml b/greendroid/src/main/res/layout/gd_text_item_view.xml deleted file mode 100644 index 2dcee1616..000000000 --- a/greendroid/src/main/res/layout/gd_text_item_view.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - diff --git a/greendroid/src/main/res/layout/gd_thumbnail_item_view.xml b/greendroid/src/main/res/layout/gd_thumbnail_item_view.xml deleted file mode 100755 index 557083db1..000000000 --- a/greendroid/src/main/res/layout/gd_thumbnail_item_view.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/values-de/gd_strings.xml b/greendroid/src/main/res/values-de/gd_strings.xml deleted file mode 100644 index 13fe2d6e3..000000000 --- a/greendroid/src/main/res/values-de/gd_strings.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Heim - Suchen - Sprechen - Erstellen - Export - Teilen - Neu laden - Foto aufnehmen - Foto auswählen - Lokalisieren - Bearbeiten - Hinzufügen - Stern - Nach Größe ordnen - Sich selbst lokalisieren - Kompass - Hilfe - Info - Einstellungen - Auflisten - Löschen - Siehe - Alle Freunde - Gruppe - Gallerie - Slideshow - E-Mail - - diff --git a/greendroid/src/main/res/values-fr/gd_strings.xml b/greendroid/src/main/res/values-fr/gd_strings.xml deleted file mode 100644 index 058f43c64..000000000 --- a/greendroid/src/main/res/values-fr/gd_strings.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Retourner à l\'accueil - Rechercher - Discuter - Composer - Exporter - Partager - Rafraichir - Prendre une photo - Choisir une photo - Localiser - Éditer - Ajouter - Ajouter aux favoris - Trier par taille - Me localiser - Naviguer - Aide - Informations - Paramètres - Lister - Supprimer - Voir - Tous les amis - Groupes - Galerie - Diaporama - Courriel - - diff --git a/greendroid/src/main/res/values-land/gd_styles.xml b/greendroid/src/main/res/values-land/gd_styles.xml deleted file mode 100644 index 2fd092426..000000000 --- a/greendroid/src/main/res/values-land/gd_styles.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/values-v5/gd_themes.xml b/greendroid/src/main/res/values-v5/gd_themes.xml deleted file mode 100644 index a027ea8d9..000000000 --- a/greendroid/src/main/res/values-v5/gd_themes.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/values/gd_attrs.xml b/greendroid/src/main/res/values/gd_attrs.xml deleted file mode 100644 index 7346e3fe4..000000000 --- a/greendroid/src/main/res/values/gd_attrs.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/greendroid/src/main/res/values/gd_colors.xml b/greendroid/src/main/res/values/gd_colors.xml deleted file mode 100644 index f01aef4ac..000000000 --- a/greendroid/src/main/res/values/gd_colors.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - #a8c24e - #7fff - - diff --git a/greendroid/src/main/res/values/gd_dimens.xml b/greendroid/src/main/res/values/gd_dimens.xml deleted file mode 100644 index 26142e940..000000000 --- a/greendroid/src/main/res/values/gd_dimens.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - 25dp - 16dp - - 64dp - 32dp - 6dp - - 50dp - 50dp - 6dp - - 20dp - 20dp - 6dp - - 45dp - - 5dp - - diff --git a/greendroid/src/main/res/values/gd_ids.xml b/greendroid/src/main/res/values/gd_ids.xml deleted file mode 100644 index c4563012a..000000000 --- a/greendroid/src/main/res/values/gd_ids.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/values/gd_strings.xml b/greendroid/src/main/res/values/gd_strings.xml deleted file mode 100644 index d2d62238d..000000000 --- a/greendroid/src/main/res/values/gd_strings.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - Go home - Search - Talk - Compose - Export - Share - Refresh - Take photo - Pick photo - Locate - Edit - Add - Star - Sort by size - Locate myself - Compass - Help - Info - Settings - List - Delete - See - All friends - Group - Gallery - Slideshow - Mail - - diff --git a/greendroid/src/main/res/values/gd_styles.xml b/greendroid/src/main/res/values/gd_styles.xml deleted file mode 100644 index 9ab48328f..000000000 --- a/greendroid/src/main/res/values/gd_styles.xml +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/greendroid/src/main/res/values/gd_themes.xml b/greendroid/src/main/res/values/gd_themes.xml deleted file mode 100644 index e0522feca..000000000 --- a/greendroid/src/main/res/values/gd_themes.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6f5b76062..ffd8230c7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,3 @@ include ':android-aac-enc' -include ':greendroid' include ':api' include ':astrid'