From 676a21fb920ff1595933ea2e6bffb53cb6143945 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Tue, 24 Mar 2015 13:47:01 +0100 Subject: [PATCH] New Material icons, reworking main screen design, corrting action bars... WIP --- app/build.gradle | 18 +- .../core/app/settings/SystemSettings.java | 2 +- .../transdroid/core/gui/DetailsActivity.java | 91 +++--- .../transdroid/core/gui/DetailsFragment.java | 202 +++++++------ .../core/gui/ServerSelectionView.java | 59 ++++ .../transdroid/core/gui/ServerStatusView.java | 39 +-- .../core/gui/TorrentTasksExecutor.java | 18 +- .../transdroid/core/gui/TorrentsActivity.java | 267 ++++++++++-------- .../transdroid/core/gui/TorrentsFragment.java | 103 +++---- .../core/gui/lists/SimpleListItemView.java | 16 +- .../core/gui/lists/TorrentDetailsView.java | 45 ++- .../core/gui/lists/TorrentFileView.java | 13 +- .../core/gui/lists/TorrentStatusLayout.java | 2 +- .../core/gui/lists/TorrentView.java | 17 +- .../core/gui/lists/TorrentsAdapter.java | 24 +- .../gui/navigation/FilterListAdapter.java | 20 +- .../gui/navigation/FilterListItemAdapter.java | 10 +- .../gui/navigation/FilterListItemView.java | 15 +- .../gui/navigation/FilterSeparatorView.java | 18 +- .../transdroid/core/gui/navigation/Label.java | 38 +-- .../core/gui/navigation/NavigationFilter.java | 14 +- .../core/gui/navigation/NavigationHelper.java | 43 ++- .../gui/navigation/RefreshableActivity.java | 9 +- .../core/gui/rss/RssfeedLoader.java | 23 +- .../transdroid/core/gui/rss/RssfeedView.java | 30 +- .../core/gui/rss/RssfeedsActivity.java | 57 ++-- .../core/gui/rss/RssfeedsAdapter.java | 24 +- .../core/gui/rss/RssfeedsFragment.java | 46 +-- .../core/gui/rss/RssitemStatusLayout.java | 4 +- .../transdroid/core/gui/rss/RssitemView.java | 17 +- .../core/gui/rss/RssitemsActivity.java | 23 +- .../core/gui/rss/RssitemsAdapter.java | 22 +- .../core/gui/rss/RssitemsFragment.java | 21 +- .../core/gui/search/BarcodeHelper.java | 3 + .../core/gui/search/SearchActivity.java | 32 +-- .../core/gui/search/SearchResultsAdapter.java | 18 +- .../gui/search/SearchResultsFragment.java | 158 ++++++----- .../core/gui/search/SearchSetting.java | 2 +- .../search/SearchSettingSelectionView.java | 9 +- .../search/SearchSettingsDropDownAdapter.java | 11 +- .../core/gui/search/SearchSiteView.java | 20 +- .../core/gui/search/SearchSitesAdapter.java | 24 +- .../core/gui/search/UrlEntryDialog.java | 60 ++-- .../main/res/drawable-hdpi/ic_action_add.png | Bin 0 -> 223 bytes .../drawable-hdpi/ic_action_discard_dark.png | Bin 1611 -> 0 bytes .../drawable-hdpi/ic_action_discard_light.png | Bin 1624 -> 0 bytes .../main/res/drawable-hdpi/ic_action_done.png | Bin 0 -> 309 bytes .../res/drawable-hdpi/ic_action_done_dark.png | Bin 1335 -> 0 bytes .../drawable-hdpi/ic_action_done_light.png | Bin 1320 -> 0 bytes .../res/drawable-hdpi/ic_action_drawer.png | Bin 0 -> 181 bytes .../drawable-hdpi/ic_action_filter_dark.png | Bin 580 -> 0 bytes .../drawable-hdpi/ic_action_filter_light.png | Bin 678 -> 0 bytes .../drawable-hdpi/ic_action_force_recheck.png | Bin 0 -> 221 bytes .../ic_action_forcerecheck_dark.png | Bin 556 -> 0 bytes .../ic_action_forcerecheck_light.png | Bin 652 -> 0 bytes .../main/res/drawable-hdpi/ic_action_info.png | Bin 0 -> 608 bytes .../res/drawable-hdpi/ic_action_info_dark.png | Bin 911 -> 0 bytes .../drawable-hdpi/ic_action_info_light.png | Bin 994 -> 0 bytes .../res/drawable-hdpi/ic_action_labels.png | Bin 0 -> 377 bytes .../drawable-hdpi/ic_action_labels_dark.png | Bin 1734 -> 0 bytes .../drawable-hdpi/ic_action_labels_light.png | Bin 1695 -> 0 bytes .../res/drawable-hdpi/ic_action_pause.png | Bin 0 -> 188 bytes .../drawable-hdpi/ic_action_pause_dark.png | Bin 1114 -> 0 bytes .../drawable-hdpi/ic_action_pause_light.png | Bin 1116 -> 0 bytes .../drawable-hdpi/ic_action_priority_high.png | Bin 0 -> 653 bytes .../ic_action_priority_high_dark.png | Bin 750 -> 0 bytes .../ic_action_priority_high_light.png | Bin 867 -> 0 bytes .../drawable-hdpi/ic_action_priority_low.png | Bin 0 -> 772 bytes .../ic_action_priority_low_dark.png | Bin 892 -> 0 bytes .../ic_action_priority_low_light.png | Bin 1027 -> 0 bytes .../ic_action_priority_medium.png | Bin 0 -> 713 bytes .../ic_action_priority_normal_dark.png | Bin 842 -> 0 bytes .../ic_action_priority_normal_light.png | Bin 961 -> 0 bytes .../drawable-hdpi/ic_action_priority_off.png | Bin 0 -> 800 bytes .../ic_action_priority_off_dark.png | Bin 912 -> 0 bytes .../ic_action_priority_off_light.png | Bin 1078 -> 0 bytes .../res/drawable-hdpi/ic_action_refresh.png | Bin 0 -> 531 bytes .../drawable-hdpi/ic_action_refresh_dark.png | Bin 3138 -> 0 bytes .../drawable-hdpi/ic_action_refresh_light.png | Bin 3171 -> 0 bytes .../res/drawable-hdpi/ic_action_remove.png | Bin 0 -> 246 bytes .../drawable-hdpi/ic_action_remove_dark.png | Bin 1285 -> 0 bytes .../drawable-hdpi/ic_action_remove_light.png | Bin 1358 -> 0 bytes .../res/drawable-hdpi/ic_action_resume.png | Bin 0 -> 360 bytes .../drawable-hdpi/ic_action_resume_dark.png | Bin 1521 -> 0 bytes .../drawable-hdpi/ic_action_resume_light.png | Bin 1477 -> 0 bytes .../res/drawable-hdpi/ic_action_rss.png.png | Bin 0 -> 759 bytes .../res/drawable-hdpi/ic_action_rss_dark.png | Bin 956 -> 0 bytes .../res/drawable-hdpi/ic_action_rss_light.png | Bin 1368 -> 0 bytes .../main/res/drawable-hdpi/ic_action_save.png | Bin 0 -> 341 bytes .../res/drawable-hdpi/ic_action_save_dark.png | Bin 394 -> 0 bytes .../drawable-hdpi/ic_action_save_light.png | Bin 398 -> 0 bytes .../main/res/drawable-hdpi/ic_action_sort.png | Bin 0 -> 209 bytes .../ic_action_sort_by_size_dark.png | Bin 1142 -> 0 bytes .../ic_action_sort_by_size_light.png | Bin 1141 -> 0 bytes .../res/drawable-hdpi/ic_action_start.png | Bin 0 -> 282 bytes .../drawable-hdpi/ic_action_start_dark.png | Bin 1410 -> 0 bytes .../drawable-hdpi/ic_action_start_light.png | Bin 1405 -> 0 bytes .../main/res/drawable-hdpi/ic_action_stop.png | Bin 0 -> 180 bytes .../res/drawable-hdpi/ic_action_stop_dark.png | Bin 1055 -> 0 bytes .../drawable-hdpi/ic_action_stop_light.png | Bin 1057 -> 0 bytes .../res/drawable-hdpi/ic_action_trackers.png | Bin 0 -> 198 bytes .../drawable-hdpi/ic_action_trackers_dark.png | Bin 1150 -> 0 bytes .../ic_action_trackers_light.png | Bin 1162 -> 0 bytes .../ic_action_turtle_disabled.png | Bin 0 -> 619 bytes .../ic_action_turtle_enabled.png | Bin 853 -> 517 bytes .../drawable-hdpi/ic_action_website_dark.png | Bin 2516 -> 0 bytes .../drawable-hdpi/ic_action_website_light.png | Bin 2529 -> 0 bytes .../main/res/drawable-hdpi/ic_btn_sort.png | Bin 0 -> 209 bytes .../main/res/drawable-xhdpi/ic_action_add.png | Bin 0 -> 198 bytes .../drawable-xhdpi/ic_action_discard_dark.png | Bin 1824 -> 0 bytes .../ic_action_discard_light.png | Bin 1848 -> 0 bytes .../res/drawable-xhdpi/ic_action_done.png | Bin 0 -> 363 bytes .../drawable-xhdpi/ic_action_done_dark.png | Bin 1599 -> 0 bytes .../drawable-xhdpi/ic_action_done_light.png | Bin 1546 -> 0 bytes .../res/drawable-xhdpi/ic_action_drawer.png | Bin 0 -> 192 bytes .../drawable-xhdpi/ic_action_filter_dark.png | Bin 521 -> 0 bytes .../drawable-xhdpi/ic_action_filter_light.png | Bin 552 -> 0 bytes .../ic_action_force_recheck.png | Bin 0 -> 204 bytes .../ic_action_forcerecheck_dark.png | Bin 698 -> 0 bytes .../ic_action_forcerecheck_light.png | Bin 783 -> 0 bytes .../res/drawable-xhdpi/ic_action_info.png | Bin 0 -> 779 bytes .../res/drawable-xhdpi/ic_action_labels.png | Bin 0 -> 471 bytes .../drawable-xhdpi/ic_action_labels_dark.png | Bin 2169 -> 0 bytes .../drawable-xhdpi/ic_action_labels_light.png | Bin 2055 -> 0 bytes .../res/drawable-xhdpi/ic_action_pause.png | Bin 0 -> 193 bytes .../drawable-xhdpi/ic_action_pause_dark.png | Bin 1181 -> 0 bytes .../drawable-xhdpi/ic_action_pause_light.png | Bin 1159 -> 0 bytes .../ic_action_priority_high.png | Bin 0 -> 795 bytes .../ic_action_priority_high_dark.png | Bin 1078 -> 0 bytes .../ic_action_priority_high_light.png | Bin 1234 -> 0 bytes .../drawable-xhdpi/ic_action_priority_low.png | Bin 0 -> 1017 bytes .../ic_action_priority_low_dark.png | Bin 1318 -> 0 bytes .../ic_action_priority_low_light.png | Bin 1523 -> 0 bytes .../ic_action_priority_medium.png | Bin 0 -> 909 bytes .../ic_action_priority_normal_dark.png | Bin 1224 -> 0 bytes .../ic_action_priority_normal_light.png | Bin 1409 -> 0 bytes .../drawable-xhdpi/ic_action_priority_off.png | Bin 0 -> 1096 bytes .../ic_action_priority_off_dark.png | Bin 1402 -> 0 bytes .../ic_action_priority_off_light.png | Bin 1653 -> 0 bytes .../res/drawable-xhdpi/ic_action_refresh.png | Bin 0 -> 637 bytes .../drawable-xhdpi/ic_action_refresh_dark.png | Bin 3219 -> 0 bytes .../ic_action_refresh_light.png | Bin 3272 -> 0 bytes .../res/drawable-xhdpi/ic_action_remove.png | Bin 0 -> 270 bytes .../drawable-xhdpi/ic_action_remove_dark.png | Bin 1348 -> 0 bytes .../drawable-xhdpi/ic_action_remove_light.png | Bin 1488 -> 0 bytes .../res/drawable-xhdpi/ic_action_resume.png | Bin 0 -> 386 bytes .../drawable-xhdpi/ic_action_resume_dark.png | Bin 1750 -> 0 bytes .../drawable-xhdpi/ic_action_resume_light.png | Bin 1732 -> 0 bytes .../main/res/drawable-xhdpi/ic_action_rss.png | Bin 0 -> 968 bytes .../res/drawable-xhdpi/ic_action_rss_dark.png | Bin 1222 -> 0 bytes .../drawable-xhdpi/ic_action_rss_light.png | Bin 1716 -> 0 bytes .../res/drawable-xhdpi/ic_action_save.png | Bin 0 -> 359 bytes .../drawable-xhdpi/ic_action_save_dark.png | Bin 441 -> 0 bytes .../drawable-xhdpi/ic_action_save_light.png | Bin 451 -> 0 bytes .../res/drawable-xhdpi/ic_action_sort.png | Bin 0 -> 198 bytes .../ic_action_sort_by_size_light.png | Bin 1244 -> 0 bytes .../res/drawable-xhdpi/ic_action_start.png | Bin 0 -> 318 bytes .../drawable-xhdpi/ic_action_start_dark.png | Bin 1620 -> 0 bytes .../drawable-xhdpi/ic_action_start_light.png | Bin 1578 -> 0 bytes .../res/drawable-xhdpi/ic_action_stop.png | Bin 0 -> 190 bytes .../drawable-xhdpi/ic_action_stop_dark.png | Bin 1114 -> 0 bytes .../drawable-xhdpi/ic_action_stop_light.png | Bin 1101 -> 0 bytes ...otification.png => ic_action_trackers.png} | Bin .../ic_action_trackers_dark.png | Bin 1360 -> 0 bytes .../ic_action_trackers_light.png | Bin 1387 -> 0 bytes .../ic_action_turtle_disabled.png | Bin 1660 -> 857 bytes .../ic_action_turtle_enabled.png | Bin 1225 -> 697 bytes .../drawable-xhdpi/ic_action_website_dark.png | Bin 3307 -> 0 bytes .../ic_action_website_light.png | Bin 3291 -> 0 bytes .../main/res/drawable-xhdpi/ic_btn_sort.png | Bin 0 -> 198 bytes .../drawable-xhdpi/ic_storage_white_24dp.png | Bin 0 -> 199 bytes .../res/drawable-xxhdpi/ic_action_add.png | Bin 0 -> 222 bytes .../res/drawable-xxhdpi/ic_action_done.png | Bin 0 -> 476 bytes .../res/drawable-xxhdpi/ic_action_drawer.png | Bin 0 -> 226 bytes .../drawable-xxhdpi/ic_action_filter_dark.png | Bin 915 -> 0 bytes .../ic_action_filter_light.png | Bin 993 -> 0 bytes .../ic_action_force_recheck.png | Bin 0 -> 229 bytes .../res/drawable-xxhdpi/ic_action_info.png | Bin 0 -> 1110 bytes .../res/drawable-xxhdpi/ic_action_labels.png | Bin 0 -> 562 bytes .../res/drawable-xxhdpi/ic_action_pause.png | Bin 0 -> 215 bytes .../ic_action_priority_high.png | Bin 0 -> 1144 bytes .../ic_action_priority_low.png | Bin 0 -> 1597 bytes .../ic_action_priority_medium.png | Bin 0 -> 1472 bytes .../ic_action_priority_off.png | Bin 0 -> 1753 bytes .../res/drawable-xxhdpi/ic_action_refresh.png | Bin 0 -> 875 bytes .../res/drawable-xxhdpi/ic_action_remove.png | Bin 0 -> 338 bytes .../res/drawable-xxhdpi/ic_action_resume.png | Bin 0 -> 496 bytes .../res/drawable-xxhdpi/ic_action_rss.png | Bin 0 -> 1481 bytes .../res/drawable-xxhdpi/ic_action_save.png | Bin 0 -> 489 bytes .../res/drawable-xxhdpi/ic_action_start.png | Bin 0 -> 399 bytes .../res/drawable-xxhdpi/ic_action_stop.png | Bin 0 -> 211 bytes .../drawable-xxhdpi/ic_action_trackers.png | Bin 0 -> 225 bytes .../ic_action_turtle_disabled.png | Bin 0 -> 1297 bytes .../ic_action_turtle_enabled.png | Bin 0 -> 920 bytes .../main/res/drawable-xxhdpi/ic_btn_sort.png | Bin 0 -> 218 bytes .../ic_insert_link_white_24dp.png | Bin 0 -> 670 bytes .../res/drawable-xxxhdpi/ic_action_drawer.png | Bin 0 -> 262 bytes .../res/drawable-xxxhdpi/ic_action_white.png | Bin 0 -> 269 bytes .../main/res/drawable-xxxhdpi/ic_btn_sort.png | Bin 0 -> 253 bytes .../res/drawable/elevation_shadow_reverse.xml | 8 + .../res/layout-w600dp/activity_torrents.xml | 85 ++++-- .../res/layout-w900dp/activity_rssfeeds.xml | 9 +- .../res/layout-w900dp/activity_torrents.xml | 108 +++++-- .../main/res/layout/actionbar_addbutton.xml | 39 +++ .../main/res/layout/actionbar_donebutton.xml | 12 +- .../res/layout/actionbar_serverselection.xml | 53 ++++ .../res/layout/actionbar_serverstatus.xml | 39 +-- app/src/main/res/layout/activity_details.xml | 20 +- app/src/main/res/layout/activity_rssfeeds.xml | 8 +- app/src/main/res/layout/activity_torrents.xml | 71 ++++- app/src/main/res/layout/fragment_details.xml | 28 +- app/src/main/res/layout/fragment_filters.xml | 28 -- app/src/main/res/layout/fragment_rssitems.xml | 2 +- app/src/main/res/layout/fragment_torrents.xml | 22 +- .../main/res/layout/widget_torrents_dark.xml | 18 +- .../main/res/layout/widget_torrents_light.xml | 6 +- .../res/menu/activity_deleteableprefs.xml | 6 +- app/src/main/res/menu/activity_details.xml | 6 +- app/src/main/res/menu/activity_search.xml | 17 +- app/src/main/res/menu/activity_torrents.xml | 97 ------- .../main/res/menu/activity_torrents_main.xml | 40 +++ .../res/menu/activity_torrents_secondary.xml | 74 +++++ app/src/main/res/menu/dialog_about.xml | 6 +- app/src/main/res/menu/fragment_details.xml | 76 ++--- .../main/res/menu/fragment_details_cab.xml | 32 +-- app/src/main/res/menu/fragment_rssfeeds.xml | 9 +- .../main/res/menu/fragment_rssitems_cab.xml | 28 +- .../res/menu/fragment_searchresults_cab.xml | 15 +- .../main/res/menu/fragment_torrents_cab.xml | 44 +-- app/src/main/res/values-v21/styles.xml | 62 ---- app/src/main/res/values-w600dp/dimens.xml | 7 + app/src/main/res/values/attrs.xml | 25 +- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/dimens.xml | 3 +- app/src/main/res/values/styles.xml | 74 +---- .../res/values/styles_transdroid_dark.xml | 8 + .../res/values/styles_transdroid_light.xml | 8 + build.gradle | 4 +- 238 files changed, 1559 insertions(+), 1326 deletions(-) create mode 100644 app/src/main/java/org/transdroid/core/gui/ServerSelectionView.java create mode 100755 app/src/main/res/drawable-hdpi/ic_action_add.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_discard_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_discard_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_done.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_done_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_done_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_drawer.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_filter_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_filter_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_force_recheck.png delete mode 100755 app/src/main/res/drawable-hdpi/ic_action_forcerecheck_dark.png delete mode 100755 app/src/main/res/drawable-hdpi/ic_action_forcerecheck_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_info.png delete mode 100755 app/src/main/res/drawable-hdpi/ic_action_info_dark.png delete mode 100755 app/src/main/res/drawable-hdpi/ic_action_info_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_labels.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_labels_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_labels_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_pause.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_pause_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_pause_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_high.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_high_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_high_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_low.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_low_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_low_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_medium.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_normal_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_normal_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_off.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_off_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_priority_off_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_refresh.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_refresh_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_refresh_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_remove.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_remove_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_remove_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_resume.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_resume_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_resume_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_rss.png.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_rss_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_rss_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_save.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_save_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_save_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_sort.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_sort_by_size_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_sort_by_size_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_start.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_start_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_start_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_stop.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_stop_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_stop_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_action_trackers.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_trackers_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_trackers_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_turtle_disabled.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_website_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_website_light.png create mode 100755 app/src/main/res/drawable-hdpi/ic_btn_sort.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_add.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_discard_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_discard_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_done.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_done_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_done_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_drawer.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_filter_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_filter_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_force_recheck.png delete mode 100755 app/src/main/res/drawable-xhdpi/ic_action_forcerecheck_dark.png delete mode 100755 app/src/main/res/drawable-xhdpi/ic_action_forcerecheck_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_info.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_labels.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_labels_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_labels_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_pause.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_pause_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_pause_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_high.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_high_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_high_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_low.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_low_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_low_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_medium.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_normal_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_normal_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_off.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_off_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_priority_off_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_refresh.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_refresh_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_refresh_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_remove.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_remove_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_remove_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_resume.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_resume_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_resume_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_rss.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_rss_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_rss_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_save.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_save_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_save_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_sort.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_sort_by_size_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_start.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_start_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_start_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_stop.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_stop_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_stop_light.png rename app/src/main/res/drawable-xhdpi/{ic_stat_notification.png => ic_action_trackers.png} (100%) delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_trackers_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_trackers_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_website_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_website_light.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_btn_sort.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_storage_white_24dp.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_add.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_done.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_drawer.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_force_recheck.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_info.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_labels.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_pause.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_priority_high.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_priority_low.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_priority_medium.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_priority_off.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_refresh.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_remove.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_resume.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_rss.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_save.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_start.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_stop.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_trackers.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_turtle_disabled.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_turtle_enabled.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_btn_sort.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_insert_link_white_24dp.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_drawer.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_white.png create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_btn_sort.png create mode 100644 app/src/main/res/drawable/elevation_shadow_reverse.xml create mode 100644 app/src/main/res/layout/actionbar_addbutton.xml create mode 100644 app/src/main/res/layout/actionbar_serverselection.xml delete mode 100644 app/src/main/res/layout/fragment_filters.xml delete mode 100644 app/src/main/res/menu/activity_torrents.xml create mode 100644 app/src/main/res/menu/activity_torrents_main.xml create mode 100644 app/src/main/res/menu/activity_torrents_secondary.xml create mode 100644 app/src/main/res/values-w600dp/dimens.xml diff --git a/app/build.gradle b/app/build.gradle index 33e20202..da7ead4b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.application' apply plugin: 'android-apt' android { - compileSdkVersion 21 - buildToolsVersion '21.1.1' + compileSdkVersion 22 + buildToolsVersion '21.1.2' defaultConfig { minSdkVersion 15 - targetSdkVersion 21 + targetSdkVersion 22 versionCode 217 versionName '2.5.0-SNAPSHOT' } @@ -33,16 +33,16 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'org.androidannotations:androidannotations-api:3.1' + compile 'org.androidannotations:androidannotations-api:3.2' compile 'com.j256.ormlite:ormlite-core:4.48' compile 'com.j256.ormlite:ormlite-android:4.48' compile 'de.keyboardsurfer.android.widget:crouton:1.8.5@aar' - compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.+' - compile 'com.android.support:appcompat-v7:21.0.0' + compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' + compile 'com.android.support:appcompat-v7:22.0.0' compile 'com.android.support:support-annotations:20.0.0' - compile 'com.getbase:floatingactionbutton:1.2.1' - compile 'com.afollestad:material-dialogs:0.3.6' - apt 'org.androidannotations:androidannotations:3.1' + compile 'com.getbase:floatingactionbutton:1.8.0' + compile 'com.afollestad:material-dialogs:0.6.3.3' + apt 'org.androidannotations:androidannotations:3.2' } apt { diff --git a/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java b/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java index 0a4b1af7..31449136 100644 --- a/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java +++ b/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java @@ -76,7 +76,7 @@ public class SystemSettings { * @param lastChecked The date/time at which the {@link AppUpdateService} last checked the server for updates */ public void setLastCheckedForAppUpdates(Date lastChecked) { - prefs.edit().putLong("system_lastappupdatecheck", lastChecked == null ? -1L : lastChecked.getTime()).commit(); + prefs.edit().putLong("system_lastappupdatecheck", lastChecked == null ? -1L : lastChecked.getTime()).apply(); } } diff --git a/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java b/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java index 38a32894..b87acaea 100644 --- a/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java @@ -16,8 +16,14 @@ */ package org.transdroid.core.gui; -import java.util.ArrayList; -import java.util.List; +import android.annotation.TargetApi; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.widget.Toolbar; +import android.widget.Toast; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Background; @@ -29,8 +35,11 @@ import org.androidannotations.annotations.InstanceState; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.UiThread; +import org.androidannotations.annotations.ViewById; import org.transdroid.R; -import org.transdroid.core.app.settings.*; +import org.transdroid.core.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.log.Log; import org.transdroid.core.gui.navigation.Label; @@ -63,23 +72,19 @@ import org.transdroid.daemon.task.SetTrackersTask; import org.transdroid.daemon.task.StartTask; import org.transdroid.daemon.task.StopTask; -import android.annotation.TargetApi; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.support.v7.app.ActionBarActivity; -import android.view.View; -import android.widget.Toast; +import java.util.ArrayList; +import java.util.List; + import de.keyboardsurfer.android.widget.crouton.Crouton; /** - * An activity that holds a single torrents details fragment. It is used on devices (i.e. phones) where there is no room - * to show details in the {@link TorrentsActivity} directly. Task execution, such as loading of more details and - * updating file priorities, is performed in this activity via background methods. + * An activity that holds a single torrents details fragment. It is used on devices (i.e. phones) where there is no room to show details in the {@link + * TorrentsActivity} directly. Task execution, such as loading of more details and updating file priorities, is performed in this activity via + * background methods. * @author Eric Kok */ -@EActivity(resName = "activity_details") -@OptionsMenu(resName = "activity_details") +@EActivity(R.layout.activity_details) +@OptionsMenu(R.menu.activity_details) public class DetailsActivity extends ActionBarActivity implements TorrentTasksExecutor, RefreshableActivity { @Extra @@ -101,7 +106,9 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx private IDaemonAdapter currentConnection = null; // Details view components - @FragmentById(resName = "torrentdetails_fragment") + @ViewById + protected Toolbar torrentsToolbar; + @FragmentById(R.id.torrentdetails_fragment) protected DetailsFragment fragmentDetails; @Override @@ -123,6 +130,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx } // Simple action bar with up, torrent name as title and refresh button + setSupportActionBar(torrentsToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(NavigationHelper.buildCondensedFontString(torrent.getName())); @@ -151,14 +159,19 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx /** * Attaches some view (perhaps contained in a fragment) to this activity's pull to refresh support - * @param view The view to attach + * @param container The refresh container to handle user refresh requests and show the progress */ @Override - public void addRefreshableView(View view) { - // TODO Add new style pull to refresh library + public void addSwipeRefreshLayout(SwipeRefreshLayout container) { + container.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + refreshScreen(); + } + }); } - @OptionsItem(resName = "action_refresh") + @OptionsItem(R.id.action_refresh) public void refreshScreen() { fragmentDetails.updateIsLoading(true, null); refreshTorrent(); @@ -170,8 +183,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx protected void refreshTorrent() { DaemonTaskResult result = RetrieveTask.create(currentConnection).execute(log); if (result instanceof RetrieveTaskSuccessResult) { - onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(), - ((RetrieveTaskSuccessResult) result).getLabels()); + onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(), ((RetrieveTaskSuccessResult) result).getLabels()); } else { onCommunicationError((DaemonTaskFailureResult) result, true); } @@ -179,8 +191,9 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @Background public void refreshTorrentDetails(Torrent torrent) { - if (!Daemon.supportsFineDetails(torrent.getDaemon())) + if (!Daemon.supportsFineDetails(torrent.getDaemon())) { return; + } DaemonTaskResult result = GetTorrentDetailsTask.create(currentConnection, torrent).execute(log); if (result instanceof GetTorrentDetailsTaskSuccessResult) { onTorrentDetailsRetrieved(torrent, ((GetTorrentDetailsTaskSuccessResult) result).getTorrentDetails()); @@ -191,8 +204,9 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @Background public void refreshTorrentFiles(Torrent torrent) { - if (!Daemon.supportsFileListing(torrent.getDaemon())) + if (!Daemon.supportsFileListing(torrent.getDaemon())) { return; + } DaemonTaskResult result = GetFileListTask.create(currentConnection, torrent).execute(log); if (result instanceof GetFileListTaskSuccessResult) { onTorrentFilesRetrieved(torrent, ((GetFileListTaskSuccessResult) result).getFiles()); @@ -255,8 +269,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx DaemonTaskResult result = RemoveTask.create(currentConnection, torrent, withData).execute(log); if (result instanceof DaemonTaskSuccessResult) { // Close the details activity (as the torrent is now removed) - closeActivity(getString(withData ? R.string.result_removed_with_data : R.string.result_removed, - torrent.getName())); + closeActivity(getString(withData ? R.string.result_removed_with_data : R.string.result_removed, torrent.getName())); } else { onCommunicationError((DaemonTaskFailureResult) result, false); } @@ -264,19 +277,18 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @UiThread protected void closeActivity(String closeText) { - setResult(RESULT_OK, - new Intent().putExtra("torrent_removed", true).putExtra("affected_torrent", torrent)); + setResult(RESULT_OK, new Intent().putExtra("torrent_removed", true).putExtra("affected_torrent", torrent)); finish(); - if (closeText != null) + if (closeText != null) { Toast.makeText(this, closeText, Toast.LENGTH_LONG).show(); + } } @Background @Override public void updateLabel(Torrent torrent, String newLabel) { torrent.mimicNewLabel(newLabel); - DaemonTaskResult result = SetLabelTask.create(currentConnection, torrent, newLabel == null ? "" : newLabel) - .execute(log); + DaemonTaskResult result = SetLabelTask.create(currentConnection, torrent, newLabel == null ? "" : newLabel).execute(log); if (result instanceof DaemonTaskSuccessResult) { onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_labelset, newLabel)); } else { @@ -290,8 +302,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx torrent.mimicCheckingStatus(); DaemonTaskResult result = ForceRecheckTask.create(currentConnection, torrent).execute(log); if (result instanceof DaemonTaskSuccessResult) { - onTaskSucceeded((DaemonTaskSuccessResult) result, - getString(R.string.result_recheckedstarted, torrent.getName())); + onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_recheckedstarted, torrent.getName())); } else { onCommunicationError((DaemonTaskFailureResult) result, false); } @@ -322,8 +333,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @Background @Override public void updatePriority(Torrent torrent, List files, Priority priority) { - DaemonTaskResult result = SetFilePriorityTask.create(currentConnection, torrent, priority, - new ArrayList(files)).execute(log); + DaemonTaskResult result = SetFilePriorityTask.create(currentConnection, torrent, priority, new ArrayList<>(files)).execute(log); if (result instanceof DaemonTaskSuccessResult) { onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_priotitiesset)); } else { @@ -334,8 +344,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @UiThread protected void onTaskSucceeded(DaemonTaskSuccessResult result, String successMessage) { // Set the activity result so the calling activity knows it needs to update its view - setResult(RESULT_OK, - new Intent().putExtra("torrent_updated", true).putExtra("affected_torrent", torrent)); + setResult(RESULT_OK, new Intent().putExtra("torrent_updated", true).putExtra("affected_torrent", torrent)); // Refresh the screen as well refreshTorrent(); refreshTorrentDetails(torrent); @@ -351,7 +360,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx @UiThread protected void onTorrentFilesRetrieved(Torrent torrent, List torrentFiles) { // Update the details fragment with the newly retrieved list of files - fragmentDetails.updateTorrentFiles(torrent, new ArrayList(torrentFiles)); + fragmentDetails.updateTorrentFiles(torrent, new ArrayList<>(torrentFiles)); } @UiThread @@ -359,8 +368,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx log.i(this, result.getException().toString()); String error = getString(LocalTorrent.getResourceForDaemonException(result.getException())); fragmentDetails.updateIsLoading(false, isCritical ? error : null); - Crouton.showText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), - NavigationHelper.CROUTON_ERROR_STYLE); + Crouton.showText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), NavigationHelper.CROUTON_ERROR_STYLE); } @UiThread @@ -368,8 +376,7 @@ public class DetailsActivity extends ActionBarActivity implements TorrentTasksEx // Update the details fragment accordingly fragmentDetails.updateIsLoading(false, null); fragmentDetails.perhapsUpdateTorrent(torrents); - fragmentDetails.updateLabels(Label.convertToNavigationLabels(labels, - getResources().getString(R.string.labels_unlabeled))); + fragmentDetails.updateLabels(Label.convertToNavigationLabels(labels, getResources().getString(R.string.labels_unlabeled))); } } diff --git a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java index 013bbbab..0c921e49 100644 --- a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java +++ b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java @@ -16,9 +16,22 @@ */ package org.transdroid.core.gui; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import android.annotation.SuppressLint; +import android.app.Fragment; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.support.v4.widget.SwipeRefreshLayout; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AbsListView.MultiChoiceModeListener; +import android.widget.ListView; +import android.widget.ProgressBar; +import android.widget.TextView; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; @@ -29,10 +42,16 @@ import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; import org.transdroid.R; -import org.transdroid.core.app.settings.*; +import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.gui.lists.DetailsAdapter; import org.transdroid.core.gui.lists.SimpleListItemAdapter; -import org.transdroid.core.gui.navigation.*; +import org.transdroid.core.gui.navigation.Label; +import org.transdroid.core.gui.navigation.NavigationHelper; +import org.transdroid.core.gui.navigation.NavigationHelper_; +import org.transdroid.core.gui.navigation.RefreshableActivity; +import org.transdroid.core.gui.navigation.SelectionManagerMode; +import org.transdroid.core.gui.navigation.SetLabelDialog; import org.transdroid.core.gui.navigation.SetLabelDialog.OnLabelPickedListener; import org.transdroid.core.gui.navigation.SetStorageLocationDialog; import org.transdroid.core.gui.navigation.SetStorageLocationDialog.OnStorageLocationUpdatedListener; @@ -44,33 +63,21 @@ import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentFile; -import android.annotation.SuppressLint; -import android.app.Fragment; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.view.ActionMode; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.AbsListView.MultiChoiceModeListener; -import android.widget.ListView; -import android.widget.ProgressBar; -import android.widget.TextView; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import de.keyboardsurfer.android.widget.crouton.Crouton; /** - * Fragment that shows detailed statistics about some torrent. These come from some already fetched {@link Torrent} - * object, but it also retrieves further detailed statistics. The actual execution of tasks is performed by the activity - * that contains this fragment, as per the {@link TorrentTasksExecutor} interface. + * Fragment that shows detailed statistics about some torrent. These come from some already fetched {@link Torrent} object, but it also retrieves + * further detailed statistics. The actual execution of tasks is performed by the activity that contains this fragment, as per the {@link + * TorrentTasksExecutor} interface. * @author Eric Kok */ -@EFragment(resName = "fragment_details") -@OptionsMenu(resName = "fragment_details") -public class DetailsFragment extends Fragment implements OnTrackersUpdatedListener, OnLabelPickedListener, - OnStorageLocationUpdatedListener { +@EFragment(R.layout.fragment_details) +@OptionsMenu(R.menu.fragment_details) +public class DetailsFragment extends Fragment implements OnTrackersUpdatedListener, OnLabelPickedListener, OnStorageLocationUpdatedListener { // Local data @InstanceState @@ -90,9 +97,11 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen private ServerSetting currentServerSettings = null; // Views - @ViewById(resName = "details_container") + @ViewById protected View detailsContainer; - @ViewById(resName = "details_list") + @ViewById + protected SwipeRefreshLayout swipeRefreshLayout; + @ViewById protected ListView detailsList; @ViewById protected TextView emptyText, errorText; @@ -118,16 +127,19 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen detailsList.setMultiChoiceModeListener(onDetailsSelected); detailsList.setFastScrollEnabled(true); if (getActivity() != null && getActivity() instanceof RefreshableActivity) { - ((RefreshableActivity) getActivity()).addRefreshableView(detailsList); + ((RefreshableActivity) getActivity()).addSwipeRefreshLayout(swipeRefreshLayout); } // Restore the fragment state (on orientation changes et al.) - if (torrent != null) + if (torrent != null) { updateTorrent(torrent); - if (torrentDetails != null) + } + if (torrentDetails != null) { updateTorrentDetails(torrent, torrentDetails); - if (torrentFiles != null) + } + if (torrentFiles != null) { updateTorrentFiles(torrent, torrentFiles); + } } @@ -165,13 +177,14 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen */ public void updateTorrentDetails(Torrent checkTorrent, TorrentDetails newTorrentDetails) { // Check if these are actually the details of the torrent we are now showing - if (torrentId == null || !torrentId.equals(checkTorrent.getUniqueID())) + if (torrentId == null || !torrentId.equals(checkTorrent.getUniqueID())) { return; + } this.torrentDetails = newTorrentDetails; - ((DetailsAdapter) detailsList.getAdapter()).updateTrackers( - SimpleListItemAdapter.SimpleStringItem.wrapStringsList(newTorrentDetails.getTrackers())); - ((DetailsAdapter) detailsList.getAdapter()).updateErrors( - SimpleListItemAdapter.SimpleStringItem.wrapStringsList(newTorrentDetails.getErrors())); + ((DetailsAdapter) detailsList.getAdapter()) + .updateTrackers(SimpleListItemAdapter.SimpleStringItem.wrapStringsList(newTorrentDetails.getTrackers())); + ((DetailsAdapter) detailsList.getAdapter()) + .updateErrors(SimpleListItemAdapter.SimpleStringItem.wrapStringsList(newTorrentDetails.getErrors())); } /** @@ -181,22 +194,23 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen */ public void updateTorrentFiles(Torrent checkTorrent, ArrayList newTorrentFiles) { // Check if these are actually the details of the torrent we are now showing - if (torrentId == null || !torrentId.equals(checkTorrent.getUniqueID())) + if (torrentId == null || !torrentId.equals(checkTorrent.getUniqueID())) { return; + } Collections.sort(newTorrentFiles); this.torrentFiles = newTorrentFiles; ((DetailsAdapter) detailsList.getAdapter()).updateTorrentFiles(newTorrentFiles); } /** - * Can be called if some outside activity returned new torrents, so we can perhaps piggyback on this by update our - * data as well. + * Can be called if some outside activity returned new torrents, so we can perhaps piggyback on this by update our data as well. * @param torrents The last of retrieved torrents */ public void perhapsUpdateTorrent(List torrents) { // Only try to update if we actually were showing a torrent - if (this.torrentId == null || torrents == null) + if (this.torrentId == null || torrents == null) { return; + } for (Torrent newTorrent : torrents) { if (newTorrent.getUniqueID().equals(torrentId)) { // Found, so we can update our data as well @@ -207,12 +221,12 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen } /** - * Updates the locally maintained list of labels that are active on the server. Used in the label picking dialog and - * should be updated every time after the list of torrents was retrieved to keep it updated. + * Updates the locally maintained list of labels that are active on the server. Used in the label picking dialog and should be updated every time + * after the list of torrents was retrieved to keep it updated. * @param currentLabels The list of known server labels */ public void updateLabels(ArrayList