From 3afe3828a13a40c7be2827b62c15a5677a67bdfb Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Wed, 27 Feb 2013 13:26:59 +0100 Subject: [PATCH 01/10] Started Transdroid Lite project, which also serves as new UI development project. --- .hgignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgignore b/.hgignore index 458cf85b..449f87c9 100644 --- a/.hgignore +++ b/.hgignore @@ -6,3 +6,4 @@ syntax: glob bin/ gen/ lint.xml +.apt_generated From 61fd105b8e87cf931e663a222563654e8e9801f6 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Wed, 27 Feb 2013 13:27:07 +0100 Subject: [PATCH 02/10] Started Transdroid Lite project, which also serves as new UI development project. --- lite/.classpath | 13 +++++++ lite/.factorypath | 3 ++ lite/.project | 33 ++++++++++++++++++ lite/.settings/org.eclipse.jdt.apt.core.prefs | 4 +++ lite/.settings/org.eclipse.jdt.core.prefs | 2 ++ lite/AndroidManifest.xml | 27 ++++++++++++++ .../androidannotations-3.0-SNAPSHOT.jar | Bin 0 -> 591631 bytes .../androidannotations-api-3.0-SNAPSHOT.jar | Bin 0 -> 43730 bytes lite/proguard-project.txt | 20 +++++++++++ lite/project.properties | 15 ++++++++ lite/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes lite/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes lite/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes lite/res/layout/activity_torrents.xml | 16 +++++++++ lite/res/menu/torrents.xml | 9 +++++ lite/res/values-sw600dp/dimens.xml | 8 +++++ lite/res/values-sw720dp-land/dimens.xml | 9 +++++ lite/res/values-v11/styles.xml | 7 ++++ lite/res/values-v14/styles.xml | 7 ++++ lite/res/values/dimens.xml | 7 ++++ lite/res/values/strings.xml | 8 +++++ lite/res/values/styles.xml | 15 ++++++++ .../src/org/transdroid/lite/gui/Torrents.java | 13 +++++++ 23 files changed, 216 insertions(+) create mode 100644 lite/.classpath create mode 100644 lite/.factorypath create mode 100644 lite/.project create mode 100644 lite/.settings/org.eclipse.jdt.apt.core.prefs create mode 100644 lite/.settings/org.eclipse.jdt.core.prefs create mode 100644 lite/AndroidManifest.xml create mode 100644 lite/compile-libs/androidannotations-3.0-SNAPSHOT.jar create mode 100644 lite/libs/androidannotations-api-3.0-SNAPSHOT.jar create mode 100644 lite/proguard-project.txt create mode 100644 lite/project.properties create mode 100644 lite/res/drawable-hdpi/ic_launcher.png create mode 100644 lite/res/drawable-mdpi/ic_launcher.png create mode 100644 lite/res/drawable-xhdpi/ic_launcher.png create mode 100644 lite/res/layout/activity_torrents.xml create mode 100644 lite/res/menu/torrents.xml create mode 100644 lite/res/values-sw600dp/dimens.xml create mode 100644 lite/res/values-sw720dp-land/dimens.xml create mode 100644 lite/res/values-v11/styles.xml create mode 100644 lite/res/values-v14/styles.xml create mode 100644 lite/res/values/dimens.xml create mode 100644 lite/res/values/strings.xml create mode 100644 lite/res/values/styles.xml create mode 100644 lite/src/org/transdroid/lite/gui/Torrents.java diff --git a/lite/.classpath b/lite/.classpath new file mode 100644 index 00000000..fa0fd3c0 --- /dev/null +++ b/lite/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lite/.factorypath b/lite/.factorypath new file mode 100644 index 00000000..026446ed --- /dev/null +++ b/lite/.factorypath @@ -0,0 +1,3 @@ + + + diff --git a/lite/.project b/lite/.project new file mode 100644 index 00000000..0654bfb6 --- /dev/null +++ b/lite/.project @@ -0,0 +1,33 @@ + + + TransdroidLite + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/lite/.settings/org.eclipse.jdt.apt.core.prefs b/lite/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 00000000..7d52ece5 --- /dev/null +++ b/lite/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=.apt_generated +org.eclipse.jdt.apt.reconcileEnabled=true diff --git a/lite/.settings/org.eclipse.jdt.core.prefs b/lite/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..0b3561ab --- /dev/null +++ b/lite/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.processAnnotations=enabled diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml new file mode 100644 index 00000000..ff80ba97 --- /dev/null +++ b/lite/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/compile-libs/androidannotations-3.0-SNAPSHOT.jar b/lite/compile-libs/androidannotations-3.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..310da002b3cd5d01b4842ea5df22207234d33df9 GIT binary patch literal 591631 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

VJODK%_Sc$u$khVq?Sk-cRAxgb^P0P}8NL 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


#&O6f%Y{hw(&w{EQFhJ5ILYcJ-}qj% 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π|R^4#adgJyJfyksaN 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 + + + + \ No newline at end of file diff --git a/lite/res/values-sw600dp/dimens.xml b/lite/res/values-sw600dp/dimens.xml new file mode 100644 index 00000000..d7cc90c8 --- /dev/null +++ b/lite/res/values-sw600dp/dimens.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/lite/res/values-sw720dp-land/dimens.xml b/lite/res/values-sw720dp-land/dimens.xml new file mode 100644 index 00000000..1b9fc52c --- /dev/null +++ b/lite/res/values-sw720dp-land/dimens.xml @@ -0,0 +1,9 @@ + + + + 128dp + + \ No newline at end of file diff --git a/lite/res/values-v11/styles.xml b/lite/res/values-v11/styles.xml new file mode 100644 index 00000000..c478de08 --- /dev/null +++ b/lite/res/values-v11/styles.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/lite/res/values-v14/styles.xml b/lite/res/values-v14/styles.xml new file mode 100644 index 00000000..48e5ada1 --- /dev/null +++ b/lite/res/values-v14/styles.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/lite/res/values/dimens.xml b/lite/res/values/dimens.xml new file mode 100644 index 00000000..1afdbd6c --- /dev/null +++ b/lite/res/values/dimens.xml @@ -0,0 +1,7 @@ + + + + 16dp + 16dp + + \ No newline at end of file diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml new file mode 100644 index 00000000..25ae5b89 --- /dev/null +++ b/lite/res/values/strings.xml @@ -0,0 +1,8 @@ + + + + Transdroid Lite + Settings + Hello world! + + \ No newline at end of file diff --git a/lite/res/values/styles.xml b/lite/res/values/styles.xml new file mode 100644 index 00000000..fdb33413 --- /dev/null +++ b/lite/res/values/styles.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/lite/src/org/transdroid/lite/gui/Torrents.java b/lite/src/org/transdroid/lite/gui/Torrents.java new file mode 100644 index 00000000..f3a1e05a --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/Torrents.java @@ -0,0 +1,13 @@ +package org.transdroid.lite.gui; + +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.OptionsMenu; +import org.transdroid.lite.R; + +import com.actionbarsherlock.app.SherlockFragmentActivity; + +@EActivity(R.layout.activity_torrents) +@OptionsMenu(R.menu.torrents) +public class Torrents extends SherlockFragmentActivity { + +} From ca37271340704341dc854c7ca328ab8124c45ce9 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Thu, 28 Feb 2013 14:57:42 +0100 Subject: [PATCH 03/10] Building the new UI. --- lite/.classpath | 1 + lite/AndroidManifest.xml | 3 +- .../ab_bottom_solid_transdroid.9.png | Bin 0 -> 205 bytes .../drawable-hdpi/ab_solid_transdroid.9.png | Bin 0 -> 213 bytes .../ab_stacked_solid_transdroid.9.png | Bin 0 -> 199 bytes .../ab_transparent_transdroid.9.png | Bin 0 -> 205 bytes lite/res/drawable-hdpi/ic_action_labels.png | Bin 0 -> 1734 bytes lite/res/drawable-hdpi/ic_action_new.png | Bin 0 -> 1142 bytes lite/res/drawable-hdpi/ic_action_pause.png | Bin 0 -> 1114 bytes lite/res/drawable-hdpi/ic_action_refresh.png | Bin 0 -> 3138 bytes lite/res/drawable-hdpi/ic_action_remove.png | Bin 0 -> 1285 bytes lite/res/drawable-hdpi/ic_action_resume.png | Bin 0 -> 1521 bytes lite/res/drawable-hdpi/ic_action_rss.png | Bin 0 -> 956 bytes lite/res/drawable-hdpi/ic_action_search.png | Bin 0 -> 1764 bytes .../drawable-hdpi/ic_action_sort_by_size.png | Bin 0 -> 1142 bytes lite/res/drawable-hdpi/ic_action_start.png | Bin 0 -> 1410 bytes lite/res/drawable-hdpi/ic_action_stop.png | Bin 0 -> 1055 bytes .../drawable-hdpi/ic_activity_torrents.png | Bin 0 -> 4778 bytes lite/res/drawable-hdpi/ic_empty_details.png | Bin 0 -> 10934 bytes .../list_focused_transdroid.9.png | Bin 0 -> 145 bytes .../menu_dropdown_panel_transdroid.9.png | Bin 0 -> 1231 bytes .../menu_hardkey_panel_transdroid.9.png | Bin 0 -> 867 bytes .../progress_bg_transdroid.9.png | Bin 0 -> 133 bytes .../progress_primary_transdroid.9.png | Bin 0 -> 802 bytes .../progress_secondary_transdroid.9.png | Bin 0 -> 139 bytes .../spinner_ab_default_transdroid.9.png | Bin 0 -> 376 bytes .../spinner_ab_disabled_transdroid.9.png | Bin 0 -> 358 bytes .../spinner_ab_focused_transdroid.9.png | Bin 0 -> 568 bytes .../spinner_ab_pressed_transdroid.9.png | Bin 0 -> 508 bytes .../tab_selected_focused_transdroid.9.png | Bin 0 -> 107 bytes .../tab_selected_pressed_transdroid.9.png | Bin 0 -> 107 bytes .../tab_selected_transdroid.9.png | Bin 0 -> 101 bytes .../tab_unselected_focused_transdroid.9.png | Bin 0 -> 100 bytes .../tab_unselected_pressed_transdroid.9.png | Bin 0 -> 100 bytes .../ab_bottom_solid_transdroid.9.png | Bin 0 -> 156 bytes .../drawable-mdpi/ab_solid_transdroid.9.png | Bin 0 -> 166 bytes .../ab_stacked_solid_transdroid.9.png | Bin 0 -> 166 bytes .../ab_transparent_transdroid.9.png | Bin 0 -> 164 bytes lite/res/drawable-mdpi/ic_action_labels.png | Bin 0 -> 1491 bytes lite/res/drawable-mdpi/ic_action_new.png | Bin 0 -> 1090 bytes lite/res/drawable-mdpi/ic_action_pause.png | Bin 0 -> 1107 bytes lite/res/drawable-mdpi/ic_action_refresh.png | Bin 0 -> 3033 bytes lite/res/drawable-mdpi/ic_action_remove.png | Bin 0 -> 1138 bytes lite/res/drawable-mdpi/ic_action_resume.png | Bin 0 -> 1316 bytes lite/res/drawable-mdpi/ic_action_rss.png | Bin 0 -> 586 bytes lite/res/drawable-mdpi/ic_action_search.png | Bin 0 -> 1394 bytes .../drawable-mdpi/ic_action_sort_by_size.png | Bin 0 -> 1095 bytes lite/res/drawable-mdpi/ic_action_start.png | Bin 0 -> 1248 bytes lite/res/drawable-mdpi/ic_action_stop.png | Bin 0 -> 1047 bytes .../drawable-mdpi/ic_activity_torrents.png | Bin 0 -> 4266 bytes lite/res/drawable-mdpi/ic_empty_details.png | Bin 0 -> 7258 bytes .../list_focused_transdroid.9.png | Bin 0 -> 117 bytes .../menu_dropdown_panel_transdroid.9.png | Bin 0 -> 817 bytes .../menu_hardkey_panel_transdroid.9.png | Bin 0 -> 624 bytes .../progress_bg_transdroid.9.png | Bin 0 -> 126 bytes .../progress_primary_transdroid.9.png | Bin 0 -> 514 bytes .../progress_secondary_transdroid.9.png | Bin 0 -> 126 bytes .../spinner_ab_default_transdroid.9.png | Bin 0 -> 314 bytes .../spinner_ab_disabled_transdroid.9.png | Bin 0 -> 308 bytes .../spinner_ab_focused_transdroid.9.png | Bin 0 -> 409 bytes .../spinner_ab_pressed_transdroid.9.png | Bin 0 -> 358 bytes .../tab_selected_focused_transdroid.9.png | Bin 0 -> 104 bytes .../tab_selected_pressed_transdroid.9.png | Bin 0 -> 104 bytes .../tab_selected_transdroid.9.png | Bin 0 -> 97 bytes .../tab_unselected_focused_transdroid.9.png | Bin 0 -> 98 bytes .../tab_unselected_pressed_transdroid.9.png | Bin 0 -> 97 bytes .../ab_bottom_solid_transdroid.9.png | Bin 0 -> 264 bytes .../drawable-xhdpi/ab_solid_transdroid.9.png | Bin 0 -> 277 bytes .../ab_stacked_solid_transdroid.9.png | Bin 0 -> 261 bytes .../ab_transparent_transdroid.9.png | Bin 0 -> 269 bytes .../drawable-xhdpi/action_sort_by_size.png | Bin 0 -> 1247 bytes lite/res/drawable-xhdpi/ic_action_labels.png | Bin 0 -> 2169 bytes lite/res/drawable-xhdpi/ic_action_new.png | Bin 0 -> 1221 bytes lite/res/drawable-xhdpi/ic_action_pause.png | Bin 0 -> 1181 bytes lite/res/drawable-xhdpi/ic_action_refresh.png | Bin 0 -> 3219 bytes lite/res/drawable-xhdpi/ic_action_remove.png | Bin 0 -> 1348 bytes lite/res/drawable-xhdpi/ic_action_resume.png | Bin 0 -> 1750 bytes lite/res/drawable-xhdpi/ic_action_rss.png | Bin 0 -> 1222 bytes lite/res/drawable-xhdpi/ic_action_search.png | Bin 0 -> 2127 bytes lite/res/drawable-xhdpi/ic_action_start.png | Bin 0 -> 1620 bytes lite/res/drawable-xhdpi/ic_action_stop.png | Bin 0 -> 1114 bytes .../drawable-xhdpi/ic_activity_torrents.png | Bin 0 -> 5896 bytes lite/res/drawable-xhdpi/ic_empty_details.png | Bin 0 -> 9975 bytes .../list_focused_transdroid.9.png | Bin 0 -> 151 bytes .../menu_dropdown_panel_transdroid.9.png | Bin 0 -> 1887 bytes .../menu_hardkey_panel_transdroid.9.png | Bin 0 -> 1276 bytes .../progress_bg_transdroid.9.png | Bin 0 -> 134 bytes .../progress_primary_transdroid.9.png | Bin 0 -> 1096 bytes .../progress_secondary_transdroid.9.png | Bin 0 -> 134 bytes .../spinner_ab_default_transdroid.9.png | Bin 0 -> 476 bytes .../spinner_ab_disabled_transdroid.9.png | Bin 0 -> 457 bytes .../spinner_ab_focused_transdroid.9.png | Bin 0 -> 737 bytes .../spinner_ab_pressed_transdroid.9.png | Bin 0 -> 670 bytes .../tab_selected_focused_transdroid.9.png | Bin 0 -> 111 bytes .../tab_selected_pressed_transdroid.9.png | Bin 0 -> 111 bytes .../tab_selected_transdroid.9.png | Bin 0 -> 105 bytes .../tab_unselected_focused_transdroid.9.png | Bin 0 -> 101 bytes .../tab_unselected_pressed_transdroid.9.png | Bin 0 -> 101 bytes .../drawable-xxhdpi/ic_activity_torrents.png | Bin 0 -> 6946 bytes .../pressed_background_transdroid.xml | 21 + .../progress_horizontal_transdroid.xml | 34 ++ lite/res/drawable/section_header.xml | 12 + .../selectable_background_transdroid.xml | 24 + .../spinner_background_ab_transdroid.xml | 27 + .../drawable/tab_indicator_ab_transdroid.xml | 36 ++ .../res/layout-v14/actionbar_progressitem.xml | 24 + lite/res/layout-w600dp/activity_torrents.xml | 24 + lite/res/layout-w720dp/activity_torrents.xml | 31 ++ lite/res/layout/actionbar_progressitem.xml | 24 + lite/res/layout/activity_torrents.xml | 21 +- lite/res/layout/fragment_details.xml | 22 + lite/res/layout/fragment_details_header.xml | 166 ++++++ lite/res/layout/fragment_filters.xml | 11 + lite/res/layout/fragment_torrents.xml | 11 + lite/res/layout/list_item_filter.xml | 13 + lite/res/layout/list_item_separator.xml | 14 + lite/res/menu/activity_torrents.xml | 54 ++ lite/res/menu/fragment_details.xml | 43 ++ lite/res/menu/fragment_details_file.xml | 28 + lite/res/menu/torrents.xml | 9 - lite/res/values-sw600dp/dimens.xml | 8 - lite/res/values-sw720dp-land/dimens.xml | 9 - lite/res/values-v11/styles.xml | 7 - lite/res/values-v11/styles_transdroid.xml | 95 ++++ lite/res/values-v14/styles.xml | 7 - lite/res/values/colors.xml | 4 + lite/res/values/colors_transdroid.xml | 21 + lite/res/values/dimens.xml | 5 +- lite/res/values/strings.xml | 47 +- lite/res/values/styles.xml | 35 +- lite/res/values/styles_transdroid.xml | 82 +++ .../commonsware/cwac/merge/MergeAdapter.java | 481 ++++++++++++++++++ .../cwac/sacklist/SackOfViewsAdapter.java | 177 +++++++ .../transdroid/lite/gui/DetailsFagment.java | 45 ++ .../src/org/transdroid/lite/gui/Torrents.java | 13 - .../transdroid/lite/gui/TorrentsActivity.java | 82 +++ .../transdroid/lite/gui/TorrentsFragment.java | 11 + .../lite/gui/navigation/FilterAdapter.java | 125 +++++ .../lite/gui/navigation/FilterItem.java | 12 + .../lite/gui/navigation/FilterItemView.java | 29 ++ .../gui/navigation/FilterSeparatorView.java | 42 ++ .../lite/gui/navigation/NavigationHelper.java | 30 ++ 142 files changed, 1939 insertions(+), 81 deletions(-) create mode 100644 lite/res/drawable-hdpi/ab_bottom_solid_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/ab_solid_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/ab_stacked_solid_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/ab_transparent_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/ic_action_labels.png create mode 100644 lite/res/drawable-hdpi/ic_action_new.png create mode 100644 lite/res/drawable-hdpi/ic_action_pause.png create mode 100644 lite/res/drawable-hdpi/ic_action_refresh.png create mode 100644 lite/res/drawable-hdpi/ic_action_remove.png create mode 100644 lite/res/drawable-hdpi/ic_action_resume.png create mode 100644 lite/res/drawable-hdpi/ic_action_rss.png create mode 100644 lite/res/drawable-hdpi/ic_action_search.png create mode 100644 lite/res/drawable-hdpi/ic_action_sort_by_size.png create mode 100644 lite/res/drawable-hdpi/ic_action_start.png create mode 100644 lite/res/drawable-hdpi/ic_action_stop.png create mode 100644 lite/res/drawable-hdpi/ic_activity_torrents.png create mode 100644 lite/res/drawable-hdpi/ic_empty_details.png create mode 100644 lite/res/drawable-hdpi/list_focused_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/menu_dropdown_panel_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/menu_hardkey_panel_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/progress_bg_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/progress_primary_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/progress_secondary_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/spinner_ab_default_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/spinner_ab_disabled_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/spinner_ab_focused_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/spinner_ab_pressed_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/tab_selected_focused_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/tab_selected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/tab_selected_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/tab_unselected_focused_transdroid.9.png create mode 100644 lite/res/drawable-hdpi/tab_unselected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/ab_bottom_solid_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/ab_solid_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/ab_stacked_solid_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/ab_transparent_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/ic_action_labels.png create mode 100644 lite/res/drawable-mdpi/ic_action_new.png create mode 100644 lite/res/drawable-mdpi/ic_action_pause.png create mode 100644 lite/res/drawable-mdpi/ic_action_refresh.png create mode 100644 lite/res/drawable-mdpi/ic_action_remove.png create mode 100644 lite/res/drawable-mdpi/ic_action_resume.png create mode 100644 lite/res/drawable-mdpi/ic_action_rss.png create mode 100644 lite/res/drawable-mdpi/ic_action_search.png create mode 100644 lite/res/drawable-mdpi/ic_action_sort_by_size.png create mode 100644 lite/res/drawable-mdpi/ic_action_start.png create mode 100644 lite/res/drawable-mdpi/ic_action_stop.png create mode 100644 lite/res/drawable-mdpi/ic_activity_torrents.png create mode 100644 lite/res/drawable-mdpi/ic_empty_details.png create mode 100644 lite/res/drawable-mdpi/list_focused_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/menu_dropdown_panel_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/menu_hardkey_panel_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/progress_bg_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/progress_primary_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/progress_secondary_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/spinner_ab_default_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/spinner_ab_disabled_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/spinner_ab_focused_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/spinner_ab_pressed_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/tab_selected_focused_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/tab_selected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/tab_selected_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/tab_unselected_focused_transdroid.9.png create mode 100644 lite/res/drawable-mdpi/tab_unselected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/ab_bottom_solid_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/ab_solid_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/ab_stacked_solid_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/ab_transparent_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/action_sort_by_size.png create mode 100644 lite/res/drawable-xhdpi/ic_action_labels.png create mode 100644 lite/res/drawable-xhdpi/ic_action_new.png create mode 100644 lite/res/drawable-xhdpi/ic_action_pause.png create mode 100644 lite/res/drawable-xhdpi/ic_action_refresh.png create mode 100644 lite/res/drawable-xhdpi/ic_action_remove.png create mode 100644 lite/res/drawable-xhdpi/ic_action_resume.png create mode 100644 lite/res/drawable-xhdpi/ic_action_rss.png create mode 100644 lite/res/drawable-xhdpi/ic_action_search.png create mode 100644 lite/res/drawable-xhdpi/ic_action_start.png create mode 100644 lite/res/drawable-xhdpi/ic_action_stop.png create mode 100644 lite/res/drawable-xhdpi/ic_activity_torrents.png create mode 100644 lite/res/drawable-xhdpi/ic_empty_details.png create mode 100644 lite/res/drawable-xhdpi/list_focused_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/menu_dropdown_panel_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/menu_hardkey_panel_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/progress_bg_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/progress_primary_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/progress_secondary_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/spinner_ab_default_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/spinner_ab_disabled_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/spinner_ab_focused_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/spinner_ab_pressed_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/tab_selected_focused_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/tab_selected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/tab_selected_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/tab_unselected_focused_transdroid.9.png create mode 100644 lite/res/drawable-xhdpi/tab_unselected_pressed_transdroid.9.png create mode 100644 lite/res/drawable-xxhdpi/ic_activity_torrents.png create mode 100644 lite/res/drawable/pressed_background_transdroid.xml create mode 100644 lite/res/drawable/progress_horizontal_transdroid.xml create mode 100644 lite/res/drawable/section_header.xml create mode 100644 lite/res/drawable/selectable_background_transdroid.xml create mode 100644 lite/res/drawable/spinner_background_ab_transdroid.xml create mode 100644 lite/res/drawable/tab_indicator_ab_transdroid.xml create mode 100644 lite/res/layout-v14/actionbar_progressitem.xml create mode 100644 lite/res/layout-w600dp/activity_torrents.xml create mode 100644 lite/res/layout-w720dp/activity_torrents.xml create mode 100644 lite/res/layout/actionbar_progressitem.xml create mode 100644 lite/res/layout/fragment_details.xml create mode 100644 lite/res/layout/fragment_details_header.xml create mode 100644 lite/res/layout/fragment_filters.xml create mode 100644 lite/res/layout/fragment_torrents.xml create mode 100644 lite/res/layout/list_item_filter.xml create mode 100644 lite/res/layout/list_item_separator.xml create mode 100644 lite/res/menu/activity_torrents.xml create mode 100644 lite/res/menu/fragment_details.xml create mode 100644 lite/res/menu/fragment_details_file.xml delete mode 100644 lite/res/menu/torrents.xml delete mode 100644 lite/res/values-sw600dp/dimens.xml delete mode 100644 lite/res/values-sw720dp-land/dimens.xml delete mode 100644 lite/res/values-v11/styles.xml create mode 100644 lite/res/values-v11/styles_transdroid.xml delete mode 100644 lite/res/values-v14/styles.xml create mode 100644 lite/res/values/colors.xml create mode 100644 lite/res/values/colors_transdroid.xml create mode 100644 lite/res/values/styles_transdroid.xml create mode 100644 lite/src/com/commonsware/cwac/merge/MergeAdapter.java create mode 100644 lite/src/com/commonsware/cwac/sacklist/SackOfViewsAdapter.java create mode 100644 lite/src/org/transdroid/lite/gui/DetailsFagment.java delete mode 100644 lite/src/org/transdroid/lite/gui/Torrents.java create mode 100644 lite/src/org/transdroid/lite/gui/TorrentsActivity.java create mode 100644 lite/src/org/transdroid/lite/gui/TorrentsFragment.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/FilterItem.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java diff --git a/lite/.classpath b/lite/.classpath index fa0fd3c0..350f40f7 100644 --- a/lite/.classpath +++ b/lite/.classpath @@ -9,5 +9,6 @@ + diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml index ff80ba97..1b6f7500 100644 --- a/lite/AndroidManifest.xml +++ b/lite/AndroidManifest.xml @@ -14,7 +14,8 @@ android:label="@string/app_name" android:theme="@style/TransdroidTheme" > diff --git a/lite/res/drawable-hdpi/ab_bottom_solid_transdroid.9.png b/lite/res/drawable-hdpi/ab_bottom_solid_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..64793735d40a0eb3b99437e31439b4cdc9db2005 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^Srg*wIhD5l(y|IzE!GOmla1Wd8 z;SHR!#sP-Rva=0%WV2bEmt3(FQ4zQQdeo>t`@pVk>OU>A4L`{m<^DA`ICJy4wtei4 zqtlW(RJZk|izRP7C8iw48Jg6gxQuH>rB&Mutp(3sN+hjnn6*5)V3u(s2Gonx%I{_j>z%}$DK4`O=spHdS3j3^P6`V;6_wkl74F~y;v{R3sQrXwB5&)T$)C5cnvlHvqKyl0j68?* zbAAkT^O|D0wri)%Rk5yIDJE$GF$tH2AqFv(fSSiKh^YkBJdQz3C7|YU3}Pw)HIHKu zQwgYf9Qz%yXtxV>sZaAbrsDNatR7QW_pzbcuKO6p9?EtTv%IUXv_4@6lD(1x$R=VH P00000NkvXXu0mjfsQOh` literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ab_stacked_solid_transdroid.9.png b/lite/res/drawable-hdpi/ab_stacked_solid_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..005445acc5725591164de3ddc5d1e607ff64647f GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^S`aE46Ln7SY&T!;9puod2+x~_2 zpZ~$1xc)Z#YJa)I%Du4XxoXZa%cFgJ^N(5FHvA-aDQY*{vdVY+wyoZ}OzT?p@)=7w zkEp~5wn-cbVak#_uCPof;Ijpr;nap%#|=AHvRtw0bM#SN@T~An`H{3cdRLa(oqar` z%iMlrkk_i;Hzbnp9@qF5w5>hjNpNlImyN=ulP58+{O)xK=rRURS3j3^P6XDU!9c*}Vh-cB zL{G7VM6m?VX^G6)CJOV8G+MI!wB$eiEY+{`k!|Gh*5oIqD#q-`4X*ce+|b=#tovog zWF56tN@`7_M+Aaduh_^s`-ld7F5xi@bvS$3@JI-wssC|^#P8`d-nP4?R-U|UD7v|L zW9jVk^Gb`C6=vR_r1R~gZ{EgP?_X)Ywku=^UTDm$SMskL=spHdS3j3^P6l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)+}P69&Dq4%$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1P0rUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn*5L znHU-wSmHDfsy79jTOfKJaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zZhg4s z1~9)^c)B=-RNQ(q(=$WFQKW6TakN^VBG<9M57>n6I0V{o=CQYSR9$FJaNvD1O{QnT zky_Td5+b7JCK`+6_H;bD*sP$`WPWflJFDx_7d};KxAs5C*O+x|<-1igzc`53sJxsP z@^AmEz2WPvr#-glbdw9qQ7{vb?%>^#EEmBR*AU;Ev4H&z`}u>m9~MsJIm2{#0q>Fn z@*kvZSl0iTS-2<9ByBd&+0E=etgZ%!Dyjd8La+`_}*FA;8R&3WAZ8kWzE&bfnRIym?kd#2v`=+CReo6_K>RK?W zRUL_5W0>lqwL3tI0!aVzk0{v&L_;B{ts-8p6MLjSMtA81r$Ds}pH+Bpx4_XIRA?1`bo^cf2=$H$nQjb%$sxh z1~ZeIyZkrrRD6{5_UnmIC^K2ta7Ty@^# z#Zg*x)tmEcy-$bhPoBKu<;Si#JaGr7-i!j~|11&=SAI8m@Xr1F093Phy85}Sb4q9e E0J_7PQvd(} literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_action_new.png b/lite/res/drawable-hdpi/ic_action_new.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8ada6bdfa0d08e96c96ef2e8fc6656efc31f34 GIT binary patch literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy(A34k#nsr<$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z4q0f*3(OQRJY5_^ zDsH`*smOQ8K%~vwiGeZv-~+WZOSZ=B1v}ZkA5bcg&|!bTpuiCPPfc~@%_GO8r_|{G zoD{$H=e4|Q-{R*n(~6#QC^RrIg@$%jp0M7yea4df9|g;jBtNOTHZI@cdUHutO?01w6Wim;H*=-YJSF-6)vTXc4;gaVh((-iXfZZqW+vo+u8V zBVlX)f0A7h-RPgQQ0YmtMO4nhGu#pz1)d)`lqGk1{e=6U^-ld^7jR%;WC0UGRzbha uDrBCXJI|cEda|~f-cO)#m75mj zEzcteVo_|f6vsR3|MTYHwQlCvA-pX^(Il#|no&k^AW^DWO^}QkN(+obMQhvj5Ec`} ztW|m-w3AH_~@)}jLfh_g}OkhByke;#AbOkR$WqAdB_RS1MW?fJ^LXC?`%GIQ3IgsRN zHlVUafGi5pAjI+^ejOQP0n30O!-fNZ6}Yg#0&?P`a5P727UEL*L@a!ZP$`6LfnhS4 z44o;YEvJP6JkK+1kO>9@*dyS!nMm;hrdyC>kf5tNx{Y+pBz;Du$!bLr3M(B?!LTQ3 zO?RS9xL}N@*bJaqKc$?bEdSrtFebfS6o-HHPD$)0+HA$)beTrgb7iyT)5 zSOB7c4*@w&fgDz{)K&wUD2LVlVvDB5`omz@II;vCeK*v~9m^oINelW^ zT0(pjgbSn7@=aj1>9vHW#WGk7*34x^+z799Z#8$sr$eCE*`tFx}jq2 z%l;Gbq{Atrv$HSjSN_#A_J?gFYeXo%f4V*rn= w+EkVPTzk6bTKZG(((Oyew#**~{k*zz=0f5ESCAImeGhzFELtgDDQi6V2TufSpa1{> literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_action_refresh.png b/lite/res/drawable-hdpi/ic_action_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9d855f77692343e173f814ca1e546393b707d8 GIT binary patch literal 3138 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 MSl>bq2X&7AABcbM^#A|> literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_action_remove.png b/lite/res/drawable-hdpi/ic_action_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..094eea589246b46e26d3cf02285f26c1abb33700 GIT binary patch literal 1285 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViu&CG&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z-u2mO3IhXUxu=U` zNX4x;5!QK!97IeyTqnMNpmcm8%M>G3-WWwz*F`c-$_jIgzI(VH*9}NfITIn}t^Miq zt^CxuFJV%VoA!QA+cW?BwdPGa!e?_6*v>Ra8Zf6F;K|54eBit62Bu9MQAS0(7sOrV zFmd6sVXA&0TEJNQze)M|Ji|-NYMq;OBp)a(&?%=8T3fK(ZA-OjPsrn-ICl#d^bMbWd5M3Yv*PdK6^%G=gKVBqt7Qj zN)BD@+%+et!bv%QPyM^iQh&ccXS^D`V!EqMm&!fysN*xMLvxC}Z?AaevTWCsfY>uD z^_GXqXN1UWzHe-uzC=arVY%9>ll3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVil*vZt`*}%fo$G&eP`1g19yq}RmI+|ttA0HX~7MSq=g-ff{q-5%@dAD`0uS@p1*ngB` z9eDCzk7p;(7onc!vI(gcok|8A_nK@D-|-1x)N*`SD!z;J2XByru>^Ce!Wzp?`#)=w z-(^o&HnaL<_56k(zAO=24)RanzSoc#kYzA&zJlzQLi5#s)-+ByxHUayV$ucXdyO?` z?^v{oH0WL6p2x21;Mx?uI&7O*Pea&*g){5DvZprIUEnNg5_z!Yn10o+R=N76yJkI8 zS~0h$q3YSS&DWTO3q+rbOmg?;Z4heD&6$2HXxk|^S&^V;H#FCB{0{L>pR*xrxBiXo z!FR1XoHOR+ez%>$933;~0E@-ig=JeCnftHH!}$D7P0Q^1H@!XEp!ngag8ix3 z$S0nA5`QKz3eR_ck^l5+YV#cq|6986ZtRJl>+Ig}=~eKC)9M#9?>e`IRWt3o_*~d# z=h_7rtR}@7rE~pm~4pI@1U|35#2tWdI>P(&oaOWpFup@exvPr9}&(1OxT=YfO#H-deih7A2qp#laBz! z{K*ibYrKC4qrp^zA-!Q8`lb;93aOIGM?i+&wuE}DV<1hyT*6CZc+3Zj!4fdAB!j{Y z+UYmz@~w}620GkSOn_Zy#H^%jE%2Q)rx9?fssb#pOeWuKyyC)1ZDJGfp20qYkDv>5 zV!5}4SmKe@ly3zt`$lX6!d$fxb%N{QUU(%zgyzOU2NAIecmbLIU?R{2wv#;3hKQ%3 zxv_}%LnTDSCLp&8Vc9_tngteuCtz*Jr+Gx4WC)(HWvbRvEnX-5Vgvbr&y%yA4 zR=$9UwotoP-k1JEMD+v&gs`$Uz7{aflpR3C6{~&%`Ex*G@{=WE4f&nseZM`a5wVZ*71b7?(2+F<7$UED)(4(|q^y4vj0HM7tqb-D zvo{>8mH=6KJ7l^bGK%~zu*{IjQr>QPVI%oQ^WH$+a}!1qcMI5)IkpgLfyfPu#mu9Vi870pI+rPRM5tt$3pt0-&J z*%NuX;+J}LP7Lefo&~;FL|36&xiXN~Mad~S--(0X%)cS68kP2hEPn*@(f!!6L@1o* zfSJJMidf8=S_rfh>pB|!uSF-n#@NU^gkt38G*lwM$xIP8N<0vuahl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)(9*=*)zHG!$-vFf5X3XIbTx5uc62i} zG&gZFgz0t3PcF?(%`1WFO+o0j#HkmQ7;+1MHoK%2WtOF;xE1B+Du6w0m5J3Y2F^}y zE>1YjgX&Ge>K3qGXPkQVfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;uyg*O2mt1n zFi#i9kcwMxX5P*g4iq?MeqHUBR%njnmW0b3zm{-xi3cqC%GT9Y-=L)QsQBYTjiwL* zQ5VNm{=WiPYXt*!emv`4R1xlT_0eA;?zI_Pugq9?|H1YREUD%vZ%*cYbAZ3>_M3U1 z=gu@XR_C0#EHh+tYp>RJ2L}ZOfqrb7mLU4AyVWH|NY* zQ^IzKO}@fjZcD>Y1y@7G0?{|jH@!F~c*?W)&e`MhOJ&F54VqgD7x3n=W>&q_yTREu zMN@!LZw0&f0pkxMTbg&APM3BRKha=UAkh+Q_qyY@$*$&y%G&i@GA#RJ?6egx^Q|lF zU&Hpgzxdm z0o;{y7qXw)*u936b3;UXgPPb%gU#n6Wt&)pt4V_e_XTU$-|uu^H+{|X zXZ1-)Ju5!3bk3Po7q(j27@Y8x4xMV6U@BAY;hOzWMd9=t;Y8C=!?>Wu3T zaP#eOXcUji;rddmYK6lR6#qHU^Ba<|-IJx*BXInxa_oeX8 z&koGeJ1b*sU*?``_TFR0-M1>UY_9anjWV7ajPD**^MBo$BXol|>{7KF|A+GjrSBb| zsdf3zhA`WcMl9}4?5PyAUL=N+fGo5O0o-4l-eZBPXoi)cTJa5{sjrl3T zJ#)!3`Is4Uu}nOCds^;h89V!&I~*UmWL|^xgL%65uYdH}JLO?Y=hl5^UucB6cwD^x zTCmM;im;^a4dJrMhwH@u=l}0{I&qPUi>PX|O*EhRHJA5)b$(R$DOpwCUu@L7YD?X1 zIfH+SN?wAi|7baEIxBa(%es@}w{L@}oNUj}|D7F%#=74ZGngx_5wSkHo@tJYN~A({ zY0APPSBajVQf>Z|uKs2?ud?r}!$S3aAOB7K_}x0>_&22|o9}lTWHfz7>=9D7+$7Mar$70BIw#&YP&UYajs3PRWnCd*dDy4$=MofazPc=WJ{F8bTjC+EF&N=WSP81V1~5?xtNp=-%3{4?Ff5!|0=B*vXmJ}F zWU**LFRvv~mTwZPmDjSSESAAy7_YT|wYucO^W&LQgNqMSqYq3x?=~Ln!MbM#{wUri zq?VNXeB$ipIfvNV*wtlE^S%f9`kueQ|$i+K6*^p)bt z+quE3*H$n6G@@1RtRfE(6?j?yD3tBHv2fse?Rn`7zi?|$%^UjQw%YX2aN*8}4?j<~ ztr~qj^m5+nbIg{9KMUJ@^Zhsd?{95Bz?~?JANHjdEPZz7GCU|>Sg~X9V))yls-e3_ z>gS6!_4zS+`~K{uWY1*$B({l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVil%*epP$->ms$G&eP`1g19yq1OzjUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfY zG!Lpb1-DyFaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zX5W^n&A`C;#nZ(x zq~g|_ncf;Mi4twk&)ik*))Wg1S`!e#DJ`w3xpa-rkxOAInTp&uPyC&9N6M^giB67+ zc3{fl2oJGE9L7Awd*b(Qo^SM}{-?jK>1^Y_?=Am--~0Z%{PEJ*{%5CO2i8S0hBb(O z@MpQwSagXV&I?e6{9ExV>cZ^B|-FO{8Zl}sEA54r7A42{%qR9u?C($i?vo2cidke4A%f+r)bmD`-VIDW&4B@n3Kw(+`Ur0it>5+2>#xf* z^Ay?0HQljlcf56(m}GkV4zgHW_{3II^UA#Ek@T6sWBH2h+|$LRmM*-Ty|U4uH)np~ z?-*}E_7_{k6Qte*c6^NWh$=DLk-Vhu(w3h5#Vc#|9_Iet&OXbBn`7f)nN7O$G7OFE zyF+*~#NJ$((NmtJzx_1xjAZ}%YXYh=c7>b?vt#~Dou(u5r1too=k8I5=7=npNr?U2 znP2DdTBtIkI#9f1rn~6Z;7wFBh@oYt{Aq+~WqMI@L$Ft`&(6tyn5s^9BPNJ$l)^Je1 zku9i=nks1Y$S@f4L?U1ytN_oLHeJz+(M?^EoP9G(gC+#mV)S-UMR^<~EeC-J!v$3? z3PF@-AkPWBa2A9($gwcQa)Uw0iIG8(gP`@%#G9j)#hjFG`69O%UB%cIS+-uUGxacI zITaQPg1~YiHWUgHM9`fzvEl_ycc85xAy;*D8|#({d_|>X&EObKBHd2GusgD*+bR<& z80#rE3mMK&sST9n|3eL3VYe`ABQ}RzYsOJY^gJeF!Kp-osZu*ucLzcyi>0-rHQAUc_QSVlgAd3*M)V zwRm72^j}x*`~<<+)T{5ePe@0i3;W0H(<@sqmgTo|#e1tCC%?R2`@G)Od`(+D8{NOZ zzROQ8Rm7D{<4w<#Z_E6d?u8G%OT%+fFB~`to4B3J{FU^tgrOcjSPuNT^uFu<)Psw+ j9<6Vl@7)H?-5s6pqF!bX)%q77%f2m>%1RFtmlys51>i~i literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_activity_torrents.png b/lite/res/drawable-hdpi/ic_activity_torrents.png new file mode 100644 index 0000000000000000000000000000000000000000..63728265364774d899fc302fbd5a4ca097b54ec6 GIT binary patch literal 4778 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/menu_dropdown_panel_transdroid.9.png b/lite/res/drawable-hdpi/menu_dropdown_panel_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bab5e3ba7c3dfe7a9eebb88a395b4ada0c2e19c4 GIT binary patch literal 1231 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/spinner_ab_default_transdroid.9.png b/lite/res/drawable-hdpi/spinner_ab_default_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd4aeba02fd50da20150a79bb6055a621fa9134 GIT binary patch literal 376 zcmV-;0f+vHP)C3<0003$Nkl*oX-X$i=vTvx^sDAnb(Aa~NYBBqX%9MvO6hmC_HB$HD-FU;ghk zuK~0gKFHT)G;*)-W$7>A5dx+!ElB2Xl3~l&gmMvv08B^Uypl2H08C#cAQ?!8ca=iV zK+l-nGkKmnQ4}@r;rxqL*T7|2t}(`5UDxLz2=3YjC4)3gv$t*AqvxaV`xh;k7Ghae zj1YQI%s~t08$y#Kfj*i W(hwfd;(_!40000C3<0003kNklF_L-*X%UYwPkR(Z>zVE}PY3^B;byhGVWEh64>$>l{u5VT_ zQwYI$2%*jjW)7jtVg<7Vv4UYijAPayMlo9uV;CNY5ezRxJ4OVe6(b7KhLM42!N@{( z$EZMd#S}$>f*`oi?n|4V=r(RwOj(u@*#ew>-$ybKdJo39dyt{Lg{Z2^C+%PP)Pg|z z-}M{P)C3<00061NklfM2Pt?dEfIsj!nj}zLBI0B>>Yq@@D!(4Z2Cw!16c8vi1PzcJ3yM8Xh<>D=*zQO_KxFr_e4a>n+|)HA7P{4T6%&LlQx z1V}+#W2&FgFmd&m<@&N95#P9=8W@9dKyXb06u9QSCxosMm@x>~x@FFvPxi{45tx4< zS%&EvftdoLUaa_GW`M*G;{p;d%p8#TU_5}t1LF}SdKe!d(Zcuyi4GLTVbUjD2RgZv0nHDD0*7;jPtP2QbP$O z3531`A+=zF#Ki5H6voG=N`j@=gox7BQzZ_YlIxY0XcZerw!nDXuI>|xim8nZB-z|9 zH7+JwJP4UB-cwLBtgYq8(NtRStllCRJxsQETnxv$`SlGiP0=k+!vw_u0000C3<0005QNkld|6tJ5C`G zLMR_)Sv)K!k{yQM{%1dCcM!54iZx@7ZRKYF2M_&212laXh&lkcQrT-^2Q&mk7pCK9 zt9|zwzvy)*w#@3G%KCe*f@Dr6u{U-#R+o2bNt(AwiQ ypu>l(<-BPqs-1uCaaqYFm^?)#o($(wi(h}&dx{=mi3!mF0000MaW9780+lT#WR{s&087#cOP zgx&QtY~*ZPdB)Otmcrpx(Vhjyhp#*{Y}mpt>G*|#kzvg`Q|75x=KlfeX7F_Nb6Mw< G&;$Usv>=WE literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/tab_selected_pressed_transdroid.9.png b/lite/res/drawable-hdpi/tab_selected_pressed_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..aa07ad6fbe99723de24bcca6986b2de69993d535 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1i!3HFsuehcLq>MaW9780+lT#WR{s&087#cOP zgx&MWYT;~KeSWpN?}WswYgKm4Ow9T$;c%{LfnnP!Q|8C7)h_~dGkCiCxvXe32sE@(Z)z4*}Q$iB}rFR;` literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/tab_unselected_focused_transdroid.9.png b/lite/res/drawable-hdpi/tab_unselected_focused_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..40613b470ecaf12a64ed8c7a804c10bfa7404b6e GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1c!3HD^Kbl$tDQ!;|#}JO_+ yVRt+ yVfTEpS~%NQpI@!+JArYRg%0`LC!qu>P%j^HRqWaPMFJP z(DcrJ!I literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ab_stacked_solid_transdroid.9.png b/lite/res/drawable-mdpi/ab_stacked_solid_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..fd09cb18694a6ba1dc43d9e2c563662467695a6f GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%xt=bLAs*hzDGL05*t3#VT(u)M zZrf(&p?vnh)z#sO>x4u_m#%bOAHQF2Ysa1p8D6VThj>?Ho4jyq=96Pu+?n`7rS1QL zUmZEug%%f@7zzk`MO?jL|H8$^CF7Pw<>zO-OA4LLyBo?bUU6S=OpT%9P!e;x+Zkb? O#SEUVelF{r5}E+-AUj_G literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ab_transparent_transdroid.9.png b/lite/res/drawable-mdpi/ab_transparent_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3b514f5e859cb519bfa4a8d562efa9ac3e4ce8 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%*`6+rAs*hzDGL05*t3#VT(u)U z{{R2K((|Irswg+NWBw{TyF$1pT=_4*wd2kOXl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)+}P69&Dp}#$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1O_pUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1> zG!Lpb1-Dzwaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zt}Nr5#lXPi>gnPb zQgQ3eb$^e^g)+xKo?U5qG&reCT)gSg!b8m+%bWN(OF0A&1uu7Tc@;86Tz{hPmxM3u zh9*|5a!N;pnskMlnp|Y1%HAlHXdF3nE5`r5d`**JwcPyYFK0SgR6MMhmwW&G`~S%| zHm$i(x3A0T_a7^c2kH*ix0<*FzFBZ;8}?eMeEBz3>QlCU)dQwi6OUESIU;D|);^!% zsGMDNZ{8mVR=1BF-!C?)rF_^FU|SFvD}R*P=7_D#;c(MuW`5#I4m`0{_HCX$k1h7i z+_~ghHQz%s2mUO>7Im(KsC}Irr@orMHEo&AkXB=D*dZyJA9R{Oky$w+ywKlvV>H9% zRdsg`8H?JldX#$OQ0UoqS5~g-mz{UNH5#utB(uy!d|Sw!mK{CYxhgrQr7RV(-jTN5 zYEIPxmiZG(0{8e|Kf7tqI=PM~Jnk~-d)ZE8)Eti$>DO2?lRKMB;M)5)8SK4J*Cw?c zaN{|@v8g=bnDmxcb@p}-l-WwwN^5DQRW z@78iJ+7ZlP+-GmtaK2*UWrM}f59SCQoy#=k)jiRggNa`qJPtZJij;E+T>Vl0{0!sk z^}05zFP|$fT+VPgtMuB#1zrzd#@SDk|C9dZKkE)FnCz_QqW8&^GYqz4zz;`~83ak9Vf8 zx4W*Uv4&xox>S#xraSOfbtV0~#o|x8Z6}E=>Bqw)uR4f{>Uao&l&OxOG*b2P{rfkEPKZeOOA%$<j@ z^LZ}6pTo`w4@FVrg&-dc2B=5C9k+;D2w3i}5`&Cf%`t3ZU<-JR>JT0y5tb_blY(il z(OT|mnP|cIf@<@S6TFm4j*9YsSJPbcc1aqo>-{IOn;EwepGGbob2Qqx;ay%RTZ%hK zCD_See5_Q(z8ogl&0!nF`@s zOUuihPr5ejIqj>wx@l(KH_-K|>gm9j#>cTqe|Blr0qHF4)vzWG;HqqD zqVvGwmW%!Yd3y81t{2s)w*FStmj!&PX`yEReb>^-2^BmSXTCMaTaw^j_vC%M@47G9 zT34UGGFWk8hj0G!t%i!vJw2y{53_rtJKs6J+HlLg*HgK-KC0lFQr&V^Jikcta~K>v lH-F>k;f_ny-P3+%!$xNJBes5e+wwl|Ri_fY^6l8*)Nc=SU$6iG literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_action_pause.png b/lite/res/drawable-mdpi/ic_action_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..a5aee6f2cb2e807e8e8f98be18766581bc7fad2e GIT binary patch literal 1107 zcmaJ=OK1~87+$rCtpuwPYYUcf^Xb*Z&DEIotdBi`~KHAgB|Ug zJry+-1VMP>tzrW2z+DR$;J=g4f5BTdYVJavW(s9w8xm2~?1mt&%RMjwWi_|&2@Dg& zyfs>~3w23tf@12F?D|ky-NI;s2sdOcS?Prcbi*Fah>#O^?~_1NBjh$tVk9dD(^_lZ zhMoELq>}Gdc$I9}1j1PX6X+1hAgk{+93dMar+5W?cFi;ird&{Ogq%*QOX>hI(}sYf z7@xw_v!Fgmu|b9p^6P=0VHukB(@e<6G6EM87#7TYB#vgQDIp=Y%*4XC2$@F65@{i3?g(CTeFa68o*_gyUjinA#tYDCFs^H zt>MhH2{(++$`;L1j9XICQIh`es_V1f4obj3`TmpGN#-m_C!k~Y*$N(9YPB265@I%# zk!dGQb8oSW9cdGpPTI6UtdpZyAjyhmxRxn|BnffDL9(I1xELWZ2c>DMz;OOhfRFK9 z6U(q{Gs_2AzB$+wi?(oVDA>dnv7)K;>Ciw$tojEVEs1r-pj$Yy2yJaYR9kFQ2UA50 zTIpOuCHZEsYUx}yl*H0F8QLA~U!yLXuzuX*tZ?yVR{GGudbhE#uV3xv@S}Jf7o*AS z%keYOiigZH@zitg?MbqB=uG7&iwYmwcw*$(?XmKkugm-2eje1uE)RHDtUa~r*R9I4 zElbLKhnH>LRR$Wjy?8$q2}ZwN5x+hi*?Dgz8m*dqG42`B>l$kh9I5><(*MSLr>5XT zh5Cw~Ij;iC=d}qxy@juj-h~^jU4g=e-2KywJ-JtN=T;VoGVoxc>SQ`OxnuI$$qVya zQ?I`t8ofB2XdMj^hwHqTw$#_q4ZBn8w*Lrxes+{NxcKAJJ;eEH?#8*}o<;66k2klA J!%cezeglElYo-7I literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_action_refresh.png b/lite/res/drawable-mdpi/ic_action_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..bd611e8e24d2e211a94d1658a49c823c4201716f GIT binary patch literal 3033 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 IFo%f$0VKS%G5`Po literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_action_remove.png b/lite/res/drawable-mdpi/ic_action_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..3336760d5f3efdfefefd6899317c3a09264430f6 GIT binary patch literal 1138 zcmaJ>U1$_X9AA6!D{>-O1V0|eJyDC^?#_9aWVd(G`!pxn5HHtyB?hy%JIO7{?re4^ zxy=>PXrxrIMX-W>4j7>*6vaXxn)qO8p(L~w;Yw*^d=VlMT0s=V*_ewycrNVD%%9)y z_y3&zva{o`zj0e5!!Z7ATPjCa;JxeC(63Xe{7;vyBwZj~xQ~<-8!>SW7ZJ!BN1`DobyYg@YGptbHTGaDh`JILFc49IYYdu>7#po2~Upxm0G^7d^$; z5+Rnv^W}1xD<9yn-Ooc&6nP=UheAP$2s)!CQQV;E1ZoN?FX2>Yem*{mdiv7#=DBeLr(BgssUyB{ZPYLK|3Ue-o*P(VJAOoAwGv3JZ!79aeV>L zl_e!@q!4W9F&?Z{v9p8;c1qX+$*u?ofvl*y=~TfLJTV1#uZ@eRHN^hT;mAAysZrJ&>qq3vt&*SmMxy)?HVwt>5|Kw*#N*A@?K`5dj8%Q7oWF` vOgVUDW_-_uZ1>R1kA7S8{aE&X&*@dne`UUN{`beD-d`Y_?nqrv^qzSISl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVil#L(Q*(%jh8$G&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zmYpXfu z@6dsS#Kf;_pZ=QvWTMBMZSJaGMgE_n^X}dIe5d+eaaHrY=d4_oPK`|b_6_m}_&=yK zAG!GC!|k9gR##Xr_6wTqV#zqJq!uvw>9M0Tj;Ul7w|FG*=;|@fE3FlnE#cI;^qudo z4UK_Q(m6hKR4<9CejvJi#UYEZ3sV(aR%%}sUbpzU^08&z65 z;}FxVSf&=)X1mNqc_j(F)>Xmtk9U_W;=LUabU>cf;P7RuwyPKSc0@VN__$#E?0^?a ztiSKG2L_y-cFj!o*xY&N%G_p5Ji?&2CHHe&Q-AJ`_Q*MlFBw&aT;~fZU-RH$P1S)l zl`fNKOP@`&cb>b`pC|nmF) zp1FQseQFYS%$?D-xKqErbIzUf|Ni$o=gf=|7Uataa{jQ8flvkhe+7I#UlAvz1qvYi zm#5~P`;KASFpNWgbNp67lTRTK^~=OxZ+l^&)t?C~17ir3sOlau8ZsfthM`>ybo_L` zm4PiLCg|iUgs!QIEJH4oK@}uhn7L=R%2*@qcDD^YA-DsnPzdsj=p!Nde4VuG zp_l#^ec6c1AkP`sD$tMkI^q$CPC_yCFy>)QHs2zw(I3#|Ss`Y)X`mYMa~1C;*1$Gn z-8!~Pe5PNm{SjiRQv>Elv9v`r3x+@*(O1wQ3AyCGA^Sm&r(9xEj;o_bvH4}By0(L( zmyv9?X>js7ZedxDezI-(MWo*Z%?OAYJ0B#HbjHyKiS1$sFu}3{0chHq5;72~K+r4j Y0e`gAAq1YeHUIzs07*qoM6N<$f`j7!(*OVf literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_action_search.png b/lite/res/drawable-mdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..587d9e0bf392fc928947f04293ba009f7fc77b29 GIT binary patch literal 1394 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 JtaD0e0syqNvA+NS literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_action_stop.png b/lite/res/drawable-mdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..20df415869bf4c224f577abc6fc30f107cada685 GIT binary patch literal 1047 zcmaJ=PiWIn9L}7ZI-QPzIEBe0lYwB9ye`>HSlrsCb%kZjuDTvPEKT0lu;tH^SKIYs znNAoCPYT1Uf{LJ`M-L7}QM@Xs$DL%Cfrxkz>r2;m9;|_v_uh~1`+k4l>g2@v&W;lu z6h(C=$CMP=L9q6>lfPdoeJ9&-9M9k>XBHPU4^a`r$s&-nv^kVQnz6L_4h>UO>nSsx z!5MX2(jAM@0t{2MT*9WP;gO=N>GKGKESfWIncjZ!k_M(B)6;^=scsDA%(0S(rb-iO zy)>_j20d~P3>PILU?Hr5qP1ZAQcx)M1DW|jt32%eYeouD%6B#1d40s_N@bZ!uW zL7ss;C-UMM5auAq!Z6DXg&-#hLlOr;?W2h|&zO}`N}}eA++;e3u`97`p-^B71B~O% zu}~C6mJ74taEKs6{*sNgV#xOU>Iw?-bDVAp)Ur+<%QT5}Ck4xG$l89bOr&6J zQFB?ya6w9SpsM~KYFQ1mk5gzj-hT@F=_MDjDdanOPbZC=?F(GFQp`gdcD%IXEYzzw znRBq?=NuQrrUV88Rntv7uv8hUDkW_nYqpM(icAv?#xxCy6XU{Jo`*sdauCL$$U`yC zM`MwM0EhS}taBAd&s)gGb*{0?4L9Wm!(h3@vw}SH3NjL&V}WYYlG!wtfkaci8rNtZ z3)hs(l3>`NwSTp`ZX)v&92@sco)o9SVB6-^(Q*5dcD?kC@7nJF*aF_`<)24Z4wpYip0)mtgzkT6;hvA( zT(0ESFPEn)Ii@GS@t`%)%Wah}>^rp8exR?r|5z7)ZDsW9Q*iO&Eq-kM?c#=c@6BG} kj`8W}+K)AY-Rz~hW~lBby{BW3UdzE#O~xmb$I+SPKUWG$(*OVf literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_activity_torrents.png b/lite/res/drawable-mdpi/ic_activity_torrents.png new file mode 100644 index 0000000000000000000000000000000000000000..ce606a7152cbfb3f5b19a2d6d75770baf82b3e66 GIT binary patch literal 4266 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 M07*qoM6N<$f~tA^n*aa+ literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/ic_empty_details.png b/lite/res/drawable-mdpi/ic_empty_details.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd58335ea5e6ccf91ed5ffdb8e09031f0368ed6 GIT binary patch literal 7258 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 Q0nK6XboFyt=akR{0B=hrvj6}9 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/menu_dropdown_panel_transdroid.9.png b/lite/res/drawable-mdpi/menu_dropdown_panel_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2458ef6a2b49772c8b7b0f39200f028843a24c GIT binary patch literal 817 zcmV-11J3-3P)!1&^0008`Nkl}R)ceBswfdZf@&2*ho(nOXFkf5(y~8Ej987sRf# zv#Xg;Gg@i3->W;CI`N}R_e(V>7A$??QGZBd6R$F} z+3ZDt!B9HkV!sNgp9lBX^SOZdpg zI`k?dAYKs&g#jSzi8KZRA)z1!QZ59=Et6xebIu0Eo|CjV#eiK)fdq93EI?WkC#sN8FZl=v78Qd;fT3sPBJ?_%oJl2S*4Zg}kV7SwzB{C$xxUyd zU@(B79!=M6OVx3@POp)*0t{8kOIQF9CNCa!{yJ=Arg(y6%AB3%$&vou zoshBSaItCqWbziH%p+|Lx3G?3Y^qPrWZP?i(PtS*`>vF0qdhf;*me&vV!!sR!Bu~{ vVqxQLE~o{c{r_2NVBHF;R?Yp(XYG6h7{OE`D?p>a00000NkvXXu0mjfaXxZd literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/menu_hardkey_panel_transdroid.9.png b/lite/res/drawable-mdpi/menu_hardkey_panel_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..19b2feb5142b1846071cdca6e4ca1f413418115c GIT binary patch literal 624 zcmV-$0+0QPP)+Mvg!|47cGp1r3H;GzM{tWb3KRL*R2pAU~VK4q02_|Jjiu2C{ z!G#jQ6jb(oztU_ruRPCnBlLeSQ52Oroz61Q3VXo4ObW5Ie~0#(-e2pd+}Q{^sU~!<5If4Tf=ZItNOFVdQ&MBb@09AV@0{{R3 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/progress_primary_transdroid.9.png b/lite/res/drawable-mdpi/progress_primary_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..27192ef1edb3a084e3f77e72dab4432db8317698 GIT binary patch literal 514 zcmV+d0{#7oP)5UuK}p0NXogcQDF#UhKa%mE@U!6M6CB+Wfg4vZcLh`d!+~hnG9s_-p0JsPFHK1@pQrOuX{cw`^)AgH@mw z_44~Fv?F`2mVd5PJ3Fp^kby?m={U-OuYjtHmT4`vnFkeDWx-_tJMf-u0X9a=10WVe zViOfHrHBx&JoDLyt^M;%@a5#=ff$WIhxihSA(y59g*AuH~R@Y6d|L)hLb{!v@;25U&N0~`1`IsgCw07*qoM6N<$ Ef*=s>PXGV_ literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/progress_secondary_transdroid.9.png b/lite/res/drawable-mdpi/progress_secondary_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2b240eae7afbee9cba9837ade5ea258d30323ae3 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^uAVNAArj%qDGd$(17-<&88=8M zIPPHZQHGeoUE-ZksK0Za(oKy|PU2#LA1as_ YY`x@}|6lFC3p9|y)78&qol`;+08LLPLjV8( literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/spinner_ab_default_transdroid.9.png b/lite/res/drawable-mdpi/spinner_ab_default_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..9aeafee201a6f9567b34f5c45a9656136477d73c GIT binary patch literal 314 zcmV-A0mc4_P)R#fsQ0%e&73+@%z9IHT??i$f6qAbfeT-db3 zNsN;;5#@RAg<%*AAudUhv~N3OEu9Uh^O1rA6u4sU{c;ELdilP<`@GWjEK?5v_ zqXE{$Q2<-w-T+A43*aKY8{jIw8z7}j7-MJsFmNyv^3*l=EX&N>#`dTv%krc*kJE28 zO;e@C%^b4FP6P3uML=i40l^Mj@5Y?`by(ollD`4aE+8+)o5KsjGg^-T0000zSyC_}cb&6J#A{f(jCnxyNN%pe_ zaBMI_Tk@|7#48{X2W*c(n{;;ue0c+8;%55_e5^`*>kTj`-Vor;8z4tKNxdJy0&zcp z0`dBQCF1n}CB&-(N{Uwl{6oANKqqon6=uiCWS5hPt$o5ci# z=rO&?^efkWl*A<>(D0Z#fY3ysBLRkDf)|{+0A7R;AH)QoaP;_v6^aRd;VLOYf^@i$ zAR8_qFvI^8V8j4zG&#Owdit`Yhp~m7(15#(*JwqY87!@~q21tqh*7elF{r5}E)^ C;~q!= literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/tab_selected_transdroid.9.png b/lite/res/drawable-mdpi/tab_selected_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa38d487cdaf517875dde4bdbb277136ff3fd51 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~!3HEJ|NhShq%=HT978ywlT#WR{s+vOD0qtT wVglzHCZ5%Ks*PJ)R-R2}&|ccfu<0;^l8YSkmNh4GfqED`UHx3vIVCg!0EIam00000 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/tab_unselected_focused_transdroid.9.png b/lite/res/drawable-mdpi/tab_unselected_focused_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..f9c9c6bd496b8ea1bc22a12c04ce50c53d2290af GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c0!3HFsSlX8YDNRoo#}JO_C)$`8cpi!{%kKGC0o26c>FVdQ&MBb@04U5ES^xk5 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-mdpi/tab_unselected_pressed_transdroid.9.png b/lite/res/drawable-mdpi/tab_unselected_pressed_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2acd0bbe28e390d90ae0960abf26e2fa3a485f88 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c0!3HFsSlX8YDGg5-#}JO_VDb9?d2Su2rH*(bh^)Pt4`njxgN@xNA@xT{g literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ab_bottom_solid_transdroid.9.png b/lite/res/drawable-xhdpi/ab_bottom_solid_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..abf5694bd8f585d659a168ac53c4a5cdb766b1c1 GIT binary patch literal 264 zcmV+j0r&oiP)d-=?8gYd+l9)$$=lR!bvAL~Pg4h(;g+t`-C~uGL744hm`n z0vp$ABt{1XH3ET+Yc&$1gMu1?z{a&2iP1qpjX+@IT8+f$prA$|uyL(MVsubYBM{iQ zRwFSwD5wz#Y+U;>vh8%5s1M5tyTv$^iMVY{_P2D3c>?;Etf?A O0000|oQIqFk> zysh7Znmwn@eV}ycR!v{zynT3)S*@W)W~HOPj7Bs95pcC2uyL(MVsubYBM{iQRwFSw zD5wz#Y+S367#$SU2n05+)kusE3Tgxb8`o+iMh68o0)dTdH4>wPf*OIq#rB00000NkvXXu0mjfr~qR7%-O`d^eW#`P}>7nxsU>ywX>n6mY1#rvlZcmcu#OoAWa00000 LNkvXXu0mjf*q>}* literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ab_transparent_transdroid.9.png b/lite/res/drawable-xhdpi/ab_transparent_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..24020e2351e5cc07b0484160dc0065762c04dcc9 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nETE1oWnAsNnZXC34{WFWw@lPRNl zl19TJjfP1Y&1^l2LXRwiN>-~#?Kj{4t><&`T%+tWvtF(F#V4OU$J%>Wdid4VQ-i)U z{(HvHFSNvWm5Gyvs-7qFo$PU&w8e9}8^_WVH)YRTOT3j^ zf{YeVRLQ-xRM1It=0%T5W-l*sESz#CL&bA;NoGrcSDMMBCBC~5#vM1h^iQi%A$F$a zw24y<%s&1+*kdzq`}z7!w@dflnZDdzE=8HI-tAdkS?$(m|6cRjOtxn(_Ibn&^dEz# LtDnm{r-UW|%k^ok literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/action_sort_by_size.png b/lite/res/drawable-xhdpi/action_sort_by_size.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2dff32b88940a77b17fb12c7a0cd33b339c164 GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$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%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=oxs!#Ho13AjlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLaz}{y`aR9TL84#CABECEH%ZgC_h&L>}jh^oNjS- z!)YE=ZwhX=7~s^a4|I$^C~A?S8YToxKOiPN;Q~4Eq@S7xOz%a&gspp0oQHvdG0@Y+ zF{I+wn;V8fha5zXeM}LY=_s?#;i;<5%e{@sy{+O0`lJh(`5%OCSpJEtkIiw)hqq_6 zH5587?(qJX|7^9<$&~t&X`ju`ezsXzycC?xP>2I*cQwjS>3lNWHg)5t4R0TK9_;j8 z`go!eyT#^>D(y@^!jn@wcZQiwTl;jC99CsImKaFNCj~^3(qQ;?30(n)0DcJX017)z9_PNPTw29g!~9X=g8PTbaHF)CU#LDccMZ0#U$o~4Tfyo((aN7Lf3n{6 z{?yh_BDdFnI5aQn8#lwjytS8k-p<^=PG!>VjI>3}5x4%#m;Ee~AjyK_Q6Q(`*VU*7 ZMg~TaQ`)O)t!IFwJzf1=);T3K0RXY#q__Y8 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_labels.png b/lite/res/drawable-xhdpi/ic_action_labels.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdcd1a23ec26ede35350206e05903f36b97419f GIT binary patch literal 2169 zcmaJ@Yg7~07M=i#pj;FL6@0`Hup%TGOn`(WJQ6^ZK#cT)xEd3Z0b?-jb_Lc5SoM|cnb)=AljFR1BnDOk?e)`A%Fxt=z}Ntd4mKB$&W$+ z(eED&5=|jYq;QyF?_(i58YUTrDYBDguuPdO zlcO1%NH`G9;tNDlv*jIv#iB$=l`vl_fFhVQ48nmEiG-9;-w-0`L+~So5W+w(6eJTt zawsu`5gbMW{fHspG?pn7q)H$uJdG88#QM*OH8+Dqjznfc3eo3~Fiatnpx-4;5zVZH zG$Y@8tZ-&6zB6L+h#0)Nw0|r0vu+rq7_&hd_% zhhI5;Z*Z$iuG{|9M0I zmH2if{dvh$iBgtwV|&d{m;3Uye;dHT-dQ}_ptW33x8MNF5Wux)*A@gVzesvO8Xsrw zPU7|e#-aFt!MTI?Q&#dwgY?1H-qavVxlNDd+gWrJ-MY}?iF-umYKv`J@1UrSPe|Ml zo|S3d#XA!}?0RrLqe&NR*mo#W7p@D?eRsnY=FvdYF+A&!J{Xx;J^qwrc!Q-jFda(l zmsVyvF7IwKJx)t^+jqgK^Pc-a{oGOD%NDGC+_k>I&0*u|#49Dk9R<5r_57*z;1xGT zbHSb1tl>R7GNtyW#p;3_sMzWb!MMw_v}#q)sMbAi(!<%8V_hx!B@Wx_A8m`e4~y9XF?G?PKyvPt=cpIA=>9>o0YW z(9hrWi8XlyN#zl36k5uoJlBzB%R74uI`}06lglo)u&d5DGPp@=j@<;4<2A1a zURjEpBa1F482xuqyBu-xilF@&#j($4IX}k`HMQYoVx2z z+dUkZB{_T5fgsM`9}<*v?sW~DZi_nc=og^7KaWkU`9rd>amsMd^iEmP4 zI)*lK+Xq&3ey-q4zcyBHu!G4UW$9bB*?@9^NWoS<{=Ir{XUQHF|7>xRgiS3Zp8TxnmfOsPA&y7maL zxAK~U!%*I_1%Ade^J?96(S;f12Z2kGlb{+Umf~~Wn;0mo^)$)e~sR)?<%}!+~2D8?ws7Oq~%}Wg-0$?L$V9iw|n&{ zPItNv)x{{c!sSf7Y!q;lmJynYWgaV|th()~(Vf>E*n-Ka!UETa*$2Mu+Id|!;!F2J zIo7-MAG*6vARr-2Z*b^!~Tr;}DgJbb=7+=1Q)}jE@q4^8b SBPZYe4Mc=SF;9o^GXD!V;)iSi literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_new.png b/lite/res/drawable-xhdpi/ic_action_new.png new file mode 100644 index 0000000000000000000000000000000000000000..23b9a1c1857791d618ce961f019585acf47ed1c5 GIT binary patch literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$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%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=Yp{a|7i;J77lYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaT(7GEPQ9SSkXrz>*(J3ovn(~mttdZN0qkk3Ox$j9 z!D${;ZwgMgxVYlfs}FRHJ}7FDq8cUyOg|tdJmCU4@T8xb2Tbopz=Z9QHRk~X1Eaa8 zi(^Q|tv9!Qxegf!v_0$$aeO>+Pjj{Ty#t#&%nKghv#wC7|G@s3W%Gt0l?z)0Kk?Oc zi)nuKlsdgd>iL{0F`)bj1}}DNopmzix@~^e@3RJL!XnFzoEvtTX|sy^CY}h?tI7Py zaKcE4S#u9eJu>}kRr-^C=T>+9>B)~>oeO=2&+p+?Fi3E>pdO#jmsf{h^)Sw@nwUb}i8V z%C7wR$ZLlyN)pD*a+Cf|4880>&wa#)f(I4n0Oe1ucaK-UG2dP67+QSb6Mw<&;$U2b(L5E literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_pause.png b/lite/res/drawable-xhdpi/ic_action_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..333c1b24dc7dc167ef81dab9baeb01c0bb65399d GIT binary patch literal 1181 zcmaJ=YiQF@6wWM)4#kNG>JJI=Ik8D@*K8)Pn`_g#ikY)3SP`~m$?Y0u9!u_QHc(W2 zp#Bi_ht3~@A|gHpqR4#V3x6p7P{fVR2h54$6crH#74)WCr-C(*d(S;N-*?VE=gaQ8 z+7(j@XBQF#F(pnW}6Io@WWXcE<%DU^|INK~n2GbCfW+ydiJRy*46 z!g7M}&C?P|l$2HpimB7G7el+ch0z32Ug=u0(h3pT3|llKM18n&ogy_gM6Kl{R(z?yh>G8kmas`33P~L($zN@j^KusQ!PK$Zq+5M=ovzl031fMq~{Vaxo06}U2i1?1>M;cT{=65?X@XfAvTQE7xM zfnhS444o;VO}m8wJkK+1fC&WrIKuCA7)W;ghBG(EAVNp6H4AB`L3)gGv)PV96s~mS z3c58$YdE8A!VP0w*xI-hUE1i4F@gap;)swt@$jn(L*q zgoq7gWZDVS+>q;HUD`yZlQu0fQqR$Vlw?ISJWm!ONkYtUkZdS0CWa`?L2H^Sut7cw z%1RG#HLlRdb*$7zR14Xe#YGG*Aw!{>F-Vv7Q)o3uhLgt!;#AwQcHT z_R@luzm}@Je4|)3e=Xs>SOyovc%%Je)HxT{k7tev7azu?4-Kq$8w>k!dg%g!D3}@( zs}k<(k{{p9((%RUZL+M$X? zb*tuFY3 zJ+Ha=WaBH}<*mDpe*Iqg6--<{RG}1~yD*&^x__jnwEg0=t`qZa@LYP<{>!j;Xy9T0 nuH&B@m4>dt;=dTV-t}7wh(&Gm&B@2s411qq(OR)P+_dc%7VLY1 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_refresh.png b/lite/res/drawable-xhdpi/ic_action_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fdc0dfcb1dc50bd0ebd2527d174398b8470797 GIT binary patch literal 3219 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_remove.png b/lite/res/drawable-xhdpi/ic_action_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..f391760ef134adb96dcce85abb2c5ab776f8e6bd GIT binary patch literal 1348 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$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%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=Qn~{aNsiT3ZlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaSg)mpp`{ycy`aR9TL84#CABECEH%ZgC_h&L>}jh^ zoNlpn#qAb|-W05E0r|ty4X0jxpkwqwQHvDSFd<<20WskT7s!Dp{nR{QdM^Sd?B#VK zwhRo6+dN$yLn>~)nYG{Vuz|p_xtDr9Y}g(Z&X{o2E!^$jnl&PB*UFqlh1Xx=-J0LX z5}o-&XYSP%L8^~_ob&jpQyVnp;J)8?Rd;R^iVpWMvC(79@%=9ac;6W$w!hgU`x>zZ9zS^V{6gJua|t<&QJLRD>XQY zHM_w1h41cCAG249C%AqIJvT4Xmv|;R_xq-{$)?AX4zIdmePH{E{~GCs>YnsR&D^2! zQ#8Qv3|Gmz^9$0{Rxq85WY3UT^{?ZpUQ3Zw&c}?EAx)M%=G8m1rXH%5G3eamsz2dT z$J6wyOC(=CnvnTKclW{l7HM*ougiW+Xznk1f6wZZ>NnMkLr(=hh-akT<(u!c_4eFLR-Jp&{_dM#I_LIWuj@(P tw;u2dG5>dMv-cEaU=%<_JcWO_3>bt2co&(3gwFt#Yo4xtF6*2UngBR*-eUj& literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_resume.png b/lite/res/drawable-xhdpi/ic_action_resume.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6b55884c99dbf2bbe8c7c7ae1598051152a2c0 GIT binary patch literal 1750 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_search.png b/lite/res/drawable-xhdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..3549f84dd8f5e38665849b46e252bc34f29be027 GIT binary patch literal 2127 zcmaJ?3p8749=`}>v|V&cXT7fIiVk^PBSY|2Yr&=v7ow6Rs?3P)tYO9UbY&YptXLrxq`<;8g@B5$M@ArS6bB_lH z?%ndy?>_cC6SB(G6&(~SQ-pY&KIiL0O0N^7qU1>umoho2|NJ>z0}@`26fXS$!Y;UEMb9iezHJJmQ&F0bjj+o#*9aU z?;w&S3i{WeA{oJ;HzI;TB94IN5L_V8#Tf@V6G+Y^N6?7?5%7=`p5Tgw2xOuwnE-+B zAGF$=h#OB1rTM=1rM^+ni4uvBjK|AlGMwx)93o1;nrZR=!^>O;c6UJUq#;$DF zaAB#T;l97>E*sSPM#W}D*%&vC9?NAupxYHKzlA!#x5!R$$}KEz`?K}h?B51n479y{ zQ?w+-T-{f_$ZXze2L9K&)Yu$QW7O|sondWutk)Q_JN)t9M!T--)21nHt$r5=vLfUe z#a~sbymPXRm$zn0t^*N@y}d^w!HQdfF;iuh84+$H+Z4+ka__aF6WZ>MRwfDAoU*_4 zKAt=6rl=k>E5ha}R?E)6T2N6Nf^OP-%$aH>Bc8h!4HjG5*0h$}RLuF0wJIdU zjbsxQA=8r?J*La4uKG`NBKyje7GpNe$A4*b?~}^!@0p@BU-D}9Y0|DSGj9_&&vy2n zQeDat7d%QfdZnZfB$RpBz3j0+qI>gE4|*|g|5_uvwMYuieyxZbW3|Ym*9t0tEK}11 zgB`JFNiGkc^uC#|FE~5P={}HhaMbF44G_^7>)*O~(scZ=-NEp+E*C;j>-o*bCxDi3 zXOy%zwU#lt!zkoitfTlMMv&ukM11wB<9Ly8m4A7rd4=8VmEuTqCE#F>RMNjFx!hDS z*^3*Aj}bPwVf3_cag!0d1gTf#oDN&Pd_dVdv;*a))ZL!>%mq7^3xp5xV>fH7@?30Q zVZ_0I3ioUK1=0^Dmsa~f=zf0w_-@SpBesVoWKv#w7qz2*hgn81*v0aQExoe8xC}Ud zTF)@Kr5w^Hd|ny~nn#~01FEkQYo=Zk?|RW2wR1u*{x~g|l2$HI8$O*Sc9iaR|5^LT z7z@^tH7CEpE{iyR=lRT`f)Gq&W#>w?$%+474im${sA7G49aR&=5h)*xuKt( zs=lY~A0X2EGC2yz*(%&NQ`6m4sFRdnpWY(BuzLy9{bqK?^RhtY*?v?Rb8IX~Z+jfI z;;~&!>dGdE5QDf>2lR{f*G!oe^^i@6bj6^de z|760+^ec-hFSDPm&usrXosE~R+77^4Qp$9A=Gi&x>XqsJg^B&;MqPy~i!R@{7aI(* zPp*h%eOKpxS5Nuohv%4z8e7tNq)^&ziI^HKVDgG4t07*+q|$&B9LYtwE& zuX8zyz5BF4SJBd78KhXt*r~-u9TxnaihZE<@~dg zf?Taq%d**36IX-_-{`-ie?JGKIv|#fpz>=msy(frIe0zoOg8uRrTKhIv%w?7`7Tcyl|isZ*ecw#u<}mcLbp((0&jng0SYa%AcN literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_start.png b/lite/res/drawable-xhdpi/ic_action_start.png new file mode 100644 index 0000000000000000000000000000000000000000..51124993df109972aa504c796b17e788a3ed0efd GIT binary patch literal 1620 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$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%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=8sgs4Ho0GGtlc9m3p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaNUxcZfrXQW5l+3J#E@G6wAm%KD6=dz#jPkmR{`v4 zt4!Q(al~mJRBsA4w?O>igj26R&@uX;s6~oum=G}ifSB-v3*^9)erg^ty%zx!_J7lB zJq!#?$2?seLn>~)neFc(k|=R3y~IRxAy0_LE)F>!F0O^mac8{6Tbo`8$hrvHlxTc; zbd;}@OFt>C-t=oiy@J4QmaD4#K@|axUzVx4$wejIUVHb>+scoU5iEzN6_%&nd*3X7 zT2Aa)^|!zGzE|F#x$*MLElVp!BTh{hJiw8_V!$N9*u&t~@IUIfLudp`!KNR+?5+~b zn-ij=S*A1>KaktO>z5&{!1`!`Kn%;{1;R2Hr?IGhS^U6Y2d7-KSVHz{rgZ|P5BMb5 z(htvJ`5skRXV!E%LCS_Xe#=h=!9^l5sY^4MQ*ZTLkQZQfcQmiynq_L`DELU+g7w!y zh2mB%?K#gjPDr_VBl)D*C6Wqc0;w!k+|(f_IFM!UHk2{jYG>1&uHD+qZ&I{_%fwCR5V?9cO2amDSu7o z!}_TS!Kx=e@>CrDvq9_|$BkN@q&>$@C$N-M=B{ow5cUb|@G6-5xt%*Mwt7O_B2KPA z?srX$)BH`DQn(aPezKXpCaxf6GQ-T{PV4?l%}BUi8`RCPP`~;2&&OU8tdm4iKW$m) z+K^P$^8JD0jO#*-NB7)Q{m^kX*z2%h!QoorJxM!`n>=CQ{2Y|`?WtpA;_>4T^|IM) z80K#cX;jLqyLn4;rMK{xXlKbSH=pD*UeBpflB#Jq%cB0R?9{2l9y;@xEO@^AuX%19 zHD|$`V#(6An`TZdmb;qJdbgl|L*+!q7v;Qr8+I3FCfY|>e`lPw#l)Ge`{PEb+uj5(S zW_r*6*i}r_{yi(7k;~{%Y|U?hi0w?fHVHb!++HI($vyS0&ONEg&s(0}`)97ra@uVD nSgTe~DWM4ftV38} literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_action_stop.png b/lite/res/drawable-xhdpi/ic_action_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5eda25c7c059489d86e8204ab96c9dc026df9f GIT binary patch literal 1114 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 hlKavmvRHHc66v zkDb}Mb;ts*s_H(9q6BE)0sixXeL3J|S#IMveqOKFk8Rt&rfIqt4?dUN{ofbYeFpP1f`r6C*qAJbDw%LPAUS~mCv({jPDn3f5SFf9)pX<8Qe z4AXMJXPTA)PB3jBoM_rE_zkA*f!}D_4mg8p^WaRT&4M$UHV4jZ+6?#trk4kYBZRQ) zy4~0#PMr(#NaSkRa*ae?*BQM237(-xWF63V9ze(&98VnByL_na2jBNMtiZM6IRgSt&#Hn)Bbs|ocqpnL@-2HP&?EBRC9F$Z zoN&R>m;8#Scu08YcTL1a94R1M1qtPCOvJrWB2OgZNGNY(BJPb6c_Mz|RaI@_Wu9CB zukgCARi5X&uIs+bvYZ~o^9gU7MrT>JAIEXm_x&e?pV){0Ngt+ZIw++Kh#%R9U!;vO zAMjFI>l6F%YiVn(c3Xpe_+0w3pIL|Bl4c)%Pnvc3BWbqb&!ky~W2D)IW2ISzFOg;w zzEqk;I7K>oI8{1o_$$)U!e5n+67EAfc(^a=py58HgN6H+4idhGbdd12ZQYOBclfoU zkT-CajQzmyS5Xx1@4bU|d%|s#VHmbcYOu3#U&TW72=ns?*sf1O3&%#RI49vN;@&)U zvf{}-VDrzP>O%-39{R&6;v$X}z<#T+d+_}X8SIoI-&O0}00000NkvXXu0mjfzqs1! literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/spinner_ab_focused_transdroid.9.png b/lite/res/drawable-xhdpi/spinner_ab_focused_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e4eddc17a7010ee277339226ada47ddc8e0cff71 GIT binary patch literal 737 zcmV<70v`Q|P)%-6o${a3(Hy=F;+Gf>lBKB37s*9{~&8EB+$uU;4feY30MnSnb;Cz>_}|TV!_15 z%78IJ1Aw%E6DUQr?$ii(Q`~JqaTN~r!bH@?*tIetVCuAo`Xpo6Zx0$pwArWHQ zsgYTIe0%9*1o^W4^cjHfrf^aC6fEG=liV~6!$9}j zp^u7>ijPV@8E`zR|8hEt%50c7o|#I=169Sir5YQtC|jM@b*ca^Qbz@_$z;C>nS;NV zL^(JrXAKn5?t!#vN!}2fUH#xN4e${W9!5frQ3iai9y~S;*ilr^!t(a6e(+AyQPEXB zc!KHp_Ndr+vT5Dm=a^Oue!gj);0~r0g1ed41%3(Bioh>tS_gOv(+a@TnJyQ+2h$~j z_hz~r@C;0s0G^HMV!<;sT_AY2ri%g3!F2xM*o6aq1zE|Of$*I}!moUY3EMW?NZUsy8XHCJ@N(-IL*EBZ;HovNOdHv5je-`oAGKcxAEqIA6yn@-oaS}f*}Nq+-AF_5fA~wLjtV*g~{zx4|1=z zyvD%OK3s%8gcoqWWbbZz;QO_e5*KlQ=oCICWZ>sTduQDPuhdqyeB_91NZ#IAHQ-_D zkG*l?8ZU=wEa+Tpyy(`r0S{_Yb$slN$MHVy)wlsytoTdD#~4>Nr7O-D*JV;Qk1?)lN>`jn1RmUU6yRD+ zhYYUIbeP~;O@{=o-*gDz-=KMq*x0$~IyLF-Mk2$QBfQOWH@TWGs&m2%{e2mEqPjX;epPL`7T5Ux0Vz=HBCQN9ApigX07*qoM6N<$ Ef^O(OV*mgE literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/tab_selected_focused_transdroid.9.png b/lite/res/drawable-xhdpi/tab_selected_focused_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6ccb7bef13d96121dd31ccba92a37a71505874 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^W}YsNArj%qDGd$(1Ekyxjha}( z?|K?KPU8rkS=@F?h-Y=4>cR-QWoG@1DaTi^*gSdY*rdCN!DX!*^UmIXr+_9fc)I$z JtaD0e0ss(PAz%Oi literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/tab_selected_pressed_transdroid.9.png b/lite/res/drawable-xhdpi/tab_selected_pressed_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bed352bdfb1bfb9faeab33d73b9a9b53b7e72e2c GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^W}YsNArj%qDGd$(1Ekyxjha}( z@A+i8OydZjAMT&Z*%rEeQh*MB@a*FZo03DAmdK II;Vst0PJKRYXATM literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/tab_selected_transdroid.9.png b/lite/res/drawable-xhdpi/tab_selected_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..794323de5c8df8000b3754c47681e5f5023a00ba GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^2A(dCArj%qDGd$(1Ekyxjht8= zO^kl{r*gK1Zl4sO!yi2RIK#G*5GJvA9~2IX1v1Qvw_;Y4swe~MW$<+Mb6Mw<&;$Ss CU>q(0 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/tab_unselected_focused_transdroid.9.png b/lite/res/drawable-xhdpi/tab_unselected_focused_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..564f40f571d5b99555a9ec9aa5adf73cdce75011 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#0V1dK=^Fzn9Zwg>5RT~Nl!k`?0a9*;Molc? xcRdXqr*Q<&EN(j`#N%Myv+<^*FK3P%3q!D#8nZ!G7%Na8gQu&X%Q~loCIA@=7r+1j literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/tab_unselected_pressed_transdroid.9.png b/lite/res/drawable-xhdpi/tab_unselected_pressed_transdroid.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3f885d604eadf0529141376b220a16762cc4e1db GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#0V1dK=^Fzn9Zwg>5RT~Nl!k`?0a9*;Molc? y_k6Nkrg4PN5BE>yWLqH1d*jW5Wh`d=Oblha)R;{q-4%iQ7(8A5T-G@yGywn}4Hypq literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xxhdpi/ic_activity_torrents.png b/lite/res/drawable-xxhdpi/ic_activity_torrents.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a1a817e13f07f8a3167837ef4415e30c4e9dd8 GIT binary patch literal 6946 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 + + + + + diff --git a/lite/res/drawable/progress_horizontal_transdroid.xml b/lite/res/drawable/progress_horizontal_transdroid.xml new file mode 100644 index 00000000..585c2b73 --- /dev/null +++ b/lite/res/drawable/progress_horizontal_transdroid.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + diff --git a/lite/res/drawable/section_header.xml b/lite/res/drawable/section_header.xml new file mode 100644 index 00000000..d6094f63 --- /dev/null +++ b/lite/res/drawable/section_header.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/lite/res/drawable/selectable_background_transdroid.xml b/lite/res/drawable/selectable_background_transdroid.xml new file mode 100644 index 00000000..de42f6a1 --- /dev/null +++ b/lite/res/drawable/selectable_background_transdroid.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/lite/res/drawable/spinner_background_ab_transdroid.xml b/lite/res/drawable/spinner_background_ab_transdroid.xml new file mode 100644 index 00000000..32edfe7b --- /dev/null +++ b/lite/res/drawable/spinner_background_ab_transdroid.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/lite/res/drawable/tab_indicator_ab_transdroid.xml b/lite/res/drawable/tab_indicator_ab_transdroid.xml new file mode 100644 index 00000000..5345f3e5 --- /dev/null +++ b/lite/res/drawable/tab_indicator_ab_transdroid.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/lite/res/layout-v14/actionbar_progressitem.xml b/lite/res/layout-v14/actionbar_progressitem.xml new file mode 100644 index 00000000..f6dfd64a --- /dev/null +++ b/lite/res/layout-v14/actionbar_progressitem.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/lite/res/layout-w600dp/activity_torrents.xml b/lite/res/layout-w600dp/activity_torrents.xml new file mode 100644 index 00000000..92b91914 --- /dev/null +++ b/lite/res/layout-w600dp/activity_torrents.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/lite/res/layout-w720dp/activity_torrents.xml b/lite/res/layout-w720dp/activity_torrents.xml new file mode 100644 index 00000000..19c5a3ad --- /dev/null +++ b/lite/res/layout-w720dp/activity_torrents.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/layout/actionbar_progressitem.xml b/lite/res/layout/actionbar_progressitem.xml new file mode 100644 index 00000000..5123e8df --- /dev/null +++ b/lite/res/layout/actionbar_progressitem.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/lite/res/layout/activity_torrents.xml b/lite/res/layout/activity_torrents.xml index 02d672cc..6e9f0815 100644 --- a/lite/res/layout/activity_torrents.xml +++ b/lite/res/layout/activity_torrents.xml @@ -1,16 +1,15 @@ - + + + tools:context=".TorrentsActivity" > - + - \ No newline at end of file + \ No newline at end of file diff --git a/lite/res/layout/fragment_details.xml b/lite/res/layout/fragment_details.xml new file mode 100644 index 00000000..e5663b46 --- /dev/null +++ b/lite/res/layout/fragment_details.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/lite/res/layout/fragment_details_header.xml b/lite/res/layout/fragment_details_header.xml new file mode 100644 index 00000000..56baea74 --- /dev/null +++ b/lite/res/layout/fragment_details_header.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/layout/fragment_filters.xml b/lite/res/layout/fragment_filters.xml new file mode 100644 index 00000000..30906fa2 --- /dev/null +++ b/lite/res/layout/fragment_filters.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/lite/res/layout/fragment_torrents.xml b/lite/res/layout/fragment_torrents.xml new file mode 100644 index 00000000..3365978d --- /dev/null +++ b/lite/res/layout/fragment_torrents.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/lite/res/layout/list_item_filter.xml b/lite/res/layout/list_item_filter.xml new file mode 100644 index 00000000..92114e79 --- /dev/null +++ b/lite/res/layout/list_item_filter.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/lite/res/layout/list_item_separator.xml b/lite/res/layout/list_item_separator.xml new file mode 100644 index 00000000..8a48e729 --- /dev/null +++ b/lite/res/layout/list_item_separator.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/lite/res/menu/activity_torrents.xml b/lite/res/menu/activity_torrents.xml new file mode 100644 index 00000000..1832ea34 --- /dev/null +++ b/lite/res/menu/activity_torrents.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/menu/fragment_details.xml b/lite/res/menu/fragment_details.xml new file mode 100644 index 00000000..9e763198 --- /dev/null +++ b/lite/res/menu/fragment_details.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/menu/fragment_details_file.xml b/lite/res/menu/fragment_details_file.xml new file mode 100644 index 00000000..edc1931c --- /dev/null +++ b/lite/res/menu/fragment_details_file.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/menu/torrents.xml b/lite/res/menu/torrents.xml deleted file mode 100644 index a363b607..00000000 --- a/lite/res/menu/torrents.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/lite/res/values-sw600dp/dimens.xml b/lite/res/values-sw600dp/dimens.xml deleted file mode 100644 index d7cc90c8..00000000 --- a/lite/res/values-sw600dp/dimens.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - \ No newline at end of file diff --git a/lite/res/values-sw720dp-land/dimens.xml b/lite/res/values-sw720dp-land/dimens.xml deleted file mode 100644 index 1b9fc52c..00000000 --- a/lite/res/values-sw720dp-land/dimens.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 128dp - - \ No newline at end of file diff --git a/lite/res/values-v11/styles.xml b/lite/res/values-v11/styles.xml deleted file mode 100644 index c478de08..00000000 --- a/lite/res/values-v11/styles.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/lite/res/values-v11/styles_transdroid.xml b/lite/res/values-v11/styles_transdroid.xml new file mode 100644 index 00000000..d3671383 --- /dev/null +++ b/lite/res/values-v11/styles_transdroid.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/values-v14/styles.xml b/lite/res/values-v14/styles.xml deleted file mode 100644 index 48e5ada1..00000000 --- a/lite/res/values-v14/styles.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/lite/res/values/colors.xml b/lite/res/values/colors.xml new file mode 100644 index 00000000..ba2e342f --- /dev/null +++ b/lite/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #8acc12 + diff --git a/lite/res/values/colors_transdroid.xml b/lite/res/values/colors_transdroid.xml new file mode 100644 index 00000000..88ea9872 --- /dev/null +++ b/lite/res/values/colors_transdroid.xml @@ -0,0 +1,21 @@ + + + + + #CCaada62 + diff --git a/lite/res/values/dimens.xml b/lite/res/values/dimens.xml index 1afdbd6c..e6f730d4 100644 --- a/lite/res/values/dimens.xml +++ b/lite/res/values/dimens.xml @@ -1,7 +1,6 @@ - - 16dp - 16dp + 16dp + 8dp \ No newline at end of file diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml index 25ae5b89..ce8d9e9b 100644 --- a/lite/res/values/strings.xml +++ b/lite/res/values/strings.xml @@ -1,8 +1,47 @@ - Transdroid Lite + Transdroid Lite + + Add + From file + From URL + Scan barcode + Search + Refresh + RSS + Enable turle mode + Disable turle mode + Sort list + Name + Status + Date done + Date added + Upload speed + Ratio + Filter list Settings - Hello world! - - \ No newline at end of file + + Start + Stop + Resume + Pause + Remove + Remove torrent + Remove and delete data + Set label + Update trackers + Off + Low + Normal + High + Remote play in VLC + Download using (S)FTP + + SERVERS + STATUS + LABELS + Connected, but no torrent are active on the server + Select a torrent to view its details + + diff --git a/lite/res/values/styles.xml b/lite/res/values/styles.xml index fdb33413..ae796309 100644 --- a/lite/res/values/styles.xml +++ b/lite/res/values/styles.xml @@ -1,15 +1,32 @@ - + - - + + + + \ No newline at end of file diff --git a/lite/res/values/styles_transdroid.xml b/lite/res/values/styles_transdroid.xml new file mode 100644 index 00000000..98e8c09c --- /dev/null +++ b/lite/res/values/styles_transdroid.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/src/com/commonsware/cwac/merge/MergeAdapter.java b/lite/src/com/commonsware/cwac/merge/MergeAdapter.java new file mode 100644 index 00000000..a713b862 --- /dev/null +++ b/lite/src/com/commonsware/cwac/merge/MergeAdapter.java @@ -0,0 +1,481 @@ +/*** + Copyright (c) 2008-2009 CommonsWare, LLC + Portions (c) 2009 Google, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.commonsware.cwac.merge; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListAdapter; +import android.widget.SectionIndexer; +import java.util.ArrayList; +import java.util.List; +import com.commonsware.cwac.sacklist.SackOfViewsAdapter; + +/** + * Adapter that merges multiple child adapters and views + * into a single contiguous whole. + * + * Adapters used as pieces within MergeAdapter must have + * view type IDs monotonically increasing from 0. Ideally, + * adapters also have distinct ranges for their row ids, as + * returned by getItemId(). + * + */ +public class MergeAdapter extends BaseAdapter implements SectionIndexer { + protected PieceStateRoster pieces=new PieceStateRoster(); + + /** + * Stock constructor, simply chaining to the superclass. + */ + public MergeAdapter() { + super(); + } + + /** + * Adds a new adapter to the roster of things to appear in + * the aggregate list. + * + * @param adapter + * Source for row views for this section + */ + public void addAdapter(ListAdapter adapter) { + pieces.add(adapter); + adapter.registerDataSetObserver(new CascadeDataSetObserver()); + } + + /** + * Adds a new View to the roster of things to appear in + * the aggregate list. + * + * @param view + * Single view to add + */ + public void addView(View view) { + addView(view, false); + } + + /** + * Adds a new View to the roster of things to appear in + * the aggregate list. + * + * @param view + * Single view to add + * @param enabled + * false if views are disabled, true if enabled + */ + public void addView(View view, boolean enabled) { + ArrayList list=new ArrayList(1); + + list.add(view); + + addViews(list, enabled); + } + + /** + * Adds a list of views to the roster of things to appear + * in the aggregate list. + * + * @param views + * List of views to add + */ + public void addViews(List views) { + addViews(views, false); + } + + /** + * Adds a list of views to the roster of things to appear + * in the aggregate list. + * + * @param views + * List of views to add + * @param enabled + * false if views are disabled, true if enabled + */ + public void addViews(List views, boolean enabled) { + if (enabled) { + addAdapter(new EnabledSackAdapter(views)); + } + else { + addAdapter(new SackOfViewsAdapter(views)); + } + } + + /** + * Get the data item associated with the specified + * position in the data set. + * + * @param position + * Position of the item whose data we want + */ + @Override + public Object getItem(int position) { + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + return(piece.getItem(position)); + } + + position-=size; + } + + return(null); + } + + /** + * Get the adapter associated with the specified position + * in the data set. + * + * @param position + * Position of the item whose adapter we want + */ + public ListAdapter getAdapter(int position) { + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + return(piece); + } + + position-=size; + } + + return(null); + } + + /** + * How many items are in the data set represented by this + * Adapter. + */ + @Override + public int getCount() { + int total=0; + + for (ListAdapter piece : getPieces()) { + total+=piece.getCount(); + } + + return(total); + } + + /** + * Returns the number of types of Views that will be + * created by getView(). + */ + @Override + public int getViewTypeCount() { + int total=0; + + for (PieceState piece : pieces.getRawPieces()) { + total+=piece.adapter.getViewTypeCount(); + } + + return(Math.max(total, 1)); // needed for + // setListAdapter() before + // content add' + } + + /** + * Get the type of View that will be created by getView() + * for the specified item. + * + * @param position + * Position of the item whose data we want + */ + @Override + public int getItemViewType(int position) { + int typeOffset=0; + int result=-1; + + for (PieceState piece : pieces.getRawPieces()) { + if (piece.isActive) { + int size=piece.adapter.getCount(); + + if (position < size) { + result=typeOffset + piece.adapter.getItemViewType(position); + break; + } + + position-=size; + } + + typeOffset+=piece.adapter.getViewTypeCount(); + } + + return(result); + } + + /** + * Are all items in this ListAdapter enabled? If yes it + * means all items are selectable and clickable. + */ + @Override + public boolean areAllItemsEnabled() { + return(false); + } + + /** + * Returns true if the item at the specified position is + * not a separator. + * + * @param position + * Position of the item whose data we want + */ + @Override + public boolean isEnabled(int position) { + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + return(piece.isEnabled(position)); + } + + position-=size; + } + + return(false); + } + + /** + * Get a View that displays the data at the specified + * position in the data set. + * + * @param position + * Position of the item whose data we want + * @param convertView + * View to recycle, if not null + * @param parent + * ViewGroup containing the returned View + */ + @Override + public View getView(int position, View convertView, ViewGroup parent) { + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + + return(piece.getView(position, convertView, parent)); + } + + position-=size; + } + + return(null); + } + + /** + * Get the row id associated with the specified position + * in the list. + * + * @param position + * Position of the item whose data we want + */ + @Override + public long getItemId(int position) { + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + return(piece.getItemId(position)); + } + + position-=size; + } + + return(-1); + } + + @Override + public int getPositionForSection(int section) { + int position=0; + + for (ListAdapter piece : getPieces()) { + if (piece instanceof SectionIndexer) { + Object[] sections=((SectionIndexer)piece).getSections(); + int numSections=0; + + if (sections != null) { + numSections=sections.length; + } + + if (section < numSections) { + return(position + ((SectionIndexer)piece).getPositionForSection(section)); + } + else if (sections != null) { + section-=numSections; + } + } + + position+=piece.getCount(); + } + + return(0); + } + + @Override + public int getSectionForPosition(int position) { + int section=0; + + for (ListAdapter piece : getPieces()) { + int size=piece.getCount(); + + if (position < size) { + if (piece instanceof SectionIndexer) { + return(section + ((SectionIndexer)piece).getSectionForPosition(position)); + } + + return(0); + } + else { + if (piece instanceof SectionIndexer) { + Object[] sections=((SectionIndexer)piece).getSections(); + + if (sections != null) { + section+=sections.length; + } + } + } + + position-=size; + } + + return(0); + } + + @Override + public Object[] getSections() { + ArrayList sections=new ArrayList(); + + for (ListAdapter piece : getPieces()) { + if (piece instanceof SectionIndexer) { + Object[] curSections=((SectionIndexer)piece).getSections(); + + if (curSections != null) { + for (Object section : curSections) { + sections.add(section); + } + } + } + } + + if (sections.size() == 0) { + return(new String[0]); + } + + return(sections.toArray(new Object[0])); + } + + public void setActive(ListAdapter adapter, boolean isActive) { + pieces.setActive(adapter, isActive); + notifyDataSetChanged(); + } + + public void setActive(View v, boolean isActive) { + pieces.setActive(v, isActive); + notifyDataSetChanged(); + } + + protected List getPieces() { + return(pieces.getPieces()); + } + + private static class PieceState { + ListAdapter adapter; + boolean isActive=true; + + PieceState(ListAdapter adapter, boolean isActive) { + this.adapter=adapter; + this.isActive=isActive; + } + } + + private static class PieceStateRoster { + protected ArrayList pieces=new ArrayList(); + protected ArrayList active=null; + + void add(ListAdapter adapter) { + pieces.add(new PieceState(adapter, true)); + } + + void setActive(ListAdapter adapter, boolean isActive) { + for (PieceState state : pieces) { + if (state.adapter==adapter) { + state.isActive=isActive; + active=null; + break; + } + } + } + + void setActive(View v, boolean isActive) { + for (PieceState state : pieces) { + if (state.adapter instanceof SackOfViewsAdapter && + ((SackOfViewsAdapter)state.adapter).hasView(v)) { + state.isActive=isActive; + active=null; + break; + } + } + } + + List getRawPieces() { + return(pieces); + } + + List getPieces() { + if (active == null) { + active=new ArrayList(); + + for (PieceState state : pieces) { + if (state.isActive) { + active.add(state.adapter); + } + } + } + + return(active); + } + } + + private static class EnabledSackAdapter extends SackOfViewsAdapter { + public EnabledSackAdapter(List views) { + super(views); + } + + @Override + public boolean areAllItemsEnabled() { + return(true); + } + + @Override + public boolean isEnabled(int position) { + return(true); + } + } + + private class CascadeDataSetObserver extends DataSetObserver { + @Override + public void onChanged() { + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + notifyDataSetInvalidated(); + } + } +} \ No newline at end of file diff --git a/lite/src/com/commonsware/cwac/sacklist/SackOfViewsAdapter.java b/lite/src/com/commonsware/cwac/sacklist/SackOfViewsAdapter.java new file mode 100644 index 00000000..2d248e58 --- /dev/null +++ b/lite/src/com/commonsware/cwac/sacklist/SackOfViewsAdapter.java @@ -0,0 +1,177 @@ +/*** + Copyright (c) 2008-2009 CommonsWare, LLC + Portions (c) 2009 Google, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.commonsware.cwac.sacklist; + +import java.util.ArrayList; +import java.util.List; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +/** + * Adapter that simply returns row views from a list. + * + * If you supply a size, you must implement newView(), to + * create a required view. The adapter will then cache these + * views. + * + * If you supply a list of views in the constructor, that + * list will be used directly. If any elements in the list + * are null, then newView() will be called just for those + * slots. + * + * Subclasses may also wish to override areAllItemsEnabled() + * (default: false) and isEnabled() (default: false), if some + * of their rows should be selectable. + * + * It is assumed each view is unique, and therefore will not + * get recycled. + * + * Note that this adapter is not designed for long lists. It + * is more for screens that should behave like a list. This + * is particularly useful if you combine this with other + * adapters (e.g., SectionedAdapter) that might have an + * arbitrary number of rows, so it all appears seamless. + */ +public class SackOfViewsAdapter extends BaseAdapter { + private List views=null; + + /** + * Constructor creating an empty list of views, but with + * a specified count. Subclasses must override newView(). + */ + public SackOfViewsAdapter(int count) { + super(); + + views=new ArrayList(count); + + for (int i=0;i views) { + super(); + + this.views=views; + } + + /** + * Get the data item associated with the specified + * position in the data set. + * @param position Position of the item whose data we want + */ + @Override + public Object getItem(int position) { + return(views.get(position)); + } + + /** + * How many items are in the data set represented by this + * Adapter. + */ + @Override + public int getCount() { + return(views.size()); + } + + /** + * Returns the number of types of Views that will be + * created by getView(). + */ + @Override + public int getViewTypeCount() { + return(getCount()); + } + + /** + * Get the type of View that will be created by getView() + * for the specified item. + * @param position Position of the item whose data we want + */ + @Override + public int getItemViewType(int position) { + return(position); + } + + /** + * Are all items in this ListAdapter enabled? If yes it + * means all items are selectable and clickable. + */ + @Override + public boolean areAllItemsEnabled() { + return(false); + } + + /** + * Returns true if the item at the specified position is + * not a separator. + * @param position Position of the item whose data we want + */ + @Override + public boolean isEnabled(int position) { + return(false); + } + + /** + * Get a View that displays the data at the specified + * position in the data set. + * @param position Position of the item whose data we want + * @param convertView View to recycle, if not null + * @param parent ViewGroup containing the returned View + */ + @Override + public View getView(int position, View convertView, + ViewGroup parent) { + View result=views.get(position); + + if (result==null) { + result=newView(position, parent); + views.set(position, result); + } + + return(result); + } + + /** + * Get the row id associated with the specified position + * in the list. + * @param position Position of the item whose data we want + */ + @Override + public long getItemId(int position) { + return(position); + } + + public boolean hasView(View v) { + return(views.contains(v)); + } + + /** + * Create a new View to go into the list at the specified + * position. + * @param position Position of the item whose data we want + * @param parent ViewGroup containing the returned View + */ + protected View newView(int position, ViewGroup parent) { + throw new RuntimeException("You must override newView()!"); + } +} \ No newline at end of file diff --git a/lite/src/org/transdroid/lite/gui/DetailsFagment.java b/lite/src/org/transdroid/lite/gui/DetailsFagment.java new file mode 100644 index 00000000..38f2e74a --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/DetailsFagment.java @@ -0,0 +1,45 @@ +package org.transdroid.lite.gui; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.FragmentArg; +import org.androidannotations.annotations.InstanceState; +import org.androidannotations.annotations.ViewById; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentDetails; +import org.transdroid.lite.R; + +import android.view.View; +import android.widget.TextView; + +import com.actionbarsherlock.app.SherlockFragment; + +/** + * Fragment that shown detailed statistics about some torrent. These come from some already fetched {@link Torrent} + * object, but it also retrieves further detailed statistics. + * + * @author Eric Kok + */ +@EFragment(R.layout.fragment_details) +public class DetailsFagment extends SherlockFragment { + + @FragmentArg + @InstanceState + protected Torrent torrent = null; + @InstanceState + protected TorrentDetails torrentDetails; + + @ViewById + protected TextView emptyText; + + @AfterViews + protected void init() { + + if (torrent == null) { + // No torrent specified; show the placeholder layout only + emptyText.setVisibility(View.VISIBLE); + } + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/Torrents.java b/lite/src/org/transdroid/lite/gui/Torrents.java deleted file mode 100644 index f3a1e05a..00000000 --- a/lite/src/org/transdroid/lite/gui/Torrents.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.transdroid.lite.gui; - -import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.OptionsMenu; -import org.transdroid.lite.R; - -import com.actionbarsherlock.app.SherlockFragmentActivity; - -@EActivity(R.layout.activity_torrents) -@OptionsMenu(R.menu.torrents) -public class Torrents extends SherlockFragmentActivity { - -} diff --git a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java new file mode 100644 index 00000000..248a7186 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java @@ -0,0 +1,82 @@ +package org.transdroid.lite.gui; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.FragmentById; +import org.androidannotations.annotations.FragmentByTag; +import org.androidannotations.annotations.ItemSelect; +import org.androidannotations.annotations.OptionsMenu; +import org.androidannotations.annotations.ViewById; +import org.transdroid.lite.R; +import org.transdroid.lite.gui.navigation.FilterAdapter; +import org.transdroid.lite.gui.navigation.FilterItem; +import org.transdroid.lite.gui.navigation.FilterSeparatorView; +import org.transdroid.lite.gui.navigation.NavigationHelper; + +import android.widget.ListView; + +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.app.ActionBar.OnNavigationListener; +import com.actionbarsherlock.app.SherlockFragmentActivity; + +@EActivity(R.layout.activity_torrents) +@OptionsMenu(R.menu.activity_torrents) +public class TorrentsActivity extends SherlockFragmentActivity implements OnNavigationListener { + + // Navigation components + @Bean + protected NavigationHelper navigationHelper; + @ViewById + protected ListView filtersList; + protected FilterAdapter navigationListAdapter = null; + protected FilterAdapter navigationSpinnerAdapter = null; + + // Torrents list components + @FragmentById(R.id.torrent_list) + protected TorrentsFragment fragmentTorrents; + + // Details view components + @FragmentById(R.id.torrent_details) + protected DetailsFagment fragmentDetails; + + @AfterViews + protected void init() { + + // Set up navigation + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + getSupportActionBar().setHomeButtonEnabled(false); + navigationSpinnerAdapter = new FilterAdapter(this); + getSupportActionBar().setListNavigationCallbacks(navigationSpinnerAdapter, this); + if (filtersList != null) { + navigationListAdapter = new FilterAdapter(this); + filtersList.setAdapter(navigationListAdapter); + } + + // Load settings + + } + + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + Object item = navigationSpinnerAdapter.getItem(itemPosition); + if (item instanceof FilterItem) { + // A filter item was selected form the navigation spinner + filterSelected(true, (FilterItem) item); + return true; + } + // A header was selected; no action + return false; + } + + /** + * A new filter was selected; update the view over the current data + * @param selected + * @param item + */ + @ItemSelect(R.id.filters_list) + protected void filterSelected(boolean selected, FilterItem item) { + // TODO: Update the view + } + +} diff --git a/lite/src/org/transdroid/lite/gui/TorrentsFragment.java b/lite/src/org/transdroid/lite/gui/TorrentsFragment.java new file mode 100644 index 00000000..f53a9e1d --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/TorrentsFragment.java @@ -0,0 +1,11 @@ +package org.transdroid.lite.gui; + +import org.androidannotations.annotations.EFragment; +import org.transdroid.lite.R; + +import com.actionbarsherlock.app.SherlockFragment; + +@EFragment(R.layout.fragment_torrents) +public class TorrentsFragment extends SherlockFragment { + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java b/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java new file mode 100644 index 00000000..0ffb0b8e --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java @@ -0,0 +1,125 @@ +package org.transdroid.lite.gui.navigation; + +import java.util.List; + +import org.transdroid.lite.R; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import com.commonsware.cwac.merge.MergeAdapter; + +/** + * List adapter that holds filter items, that is, servers, view types and labels. A header item is intersted where + * appropriate. + * @author Eric Kok + */ +public class FilterAdapter extends MergeAdapter { + + private Context context; + private FilterItemAdapter serverItems = null; + private FilterItemAdapter statusTypeItems = null; + private FilterItemAdapter labelItems = null; + + public FilterAdapter(Context context) { + this.context = context; + } + + /** + * Update the list of available servers. + * @param servers The new list of available servers + */ + public void updateServers(List servers) { + if (this.serverItems == null && servers != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_servers)), false); + this.serverItems = new FilterItemAdapter(context, servers); + addAdapter(serverItems); + } else if (this.serverItems != null && servers != null) { + this.serverItems.update(servers); + } else { + this.serverItems = null; + } + } + + /** + * Update the list of available status types. + * @param statusTypes The new list of available status types + */ + public void updateStatusTypes(List statusTypes) { + if (this.statusTypeItems == null && statusTypes != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_status)), false); + this.statusTypeItems = new FilterItemAdapter(context, statusTypes); + addAdapter(statusTypeItems); + } else if (this.statusTypeItems != null && statusTypes != null) { + this.statusTypeItems.update(statusTypes); + } else { + this.statusTypeItems = null; + } + } + + /** + * Update the list of available labels. + * @param labels The new list of available labels + */ + public void updateLabels(List labels) { + if (this.labelItems == null && labels != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_labels)), false); + this.labelItems = new FilterItemAdapter(context, labels); + addAdapter(labelItems); + } else if (this.serverItems != null && labels != null) { + this.labelItems.update(labels); + } else { + this.labelItems = null; + } + } + + protected class FilterItemAdapter extends BaseAdapter { + + private final Context context; + private List items; + + public FilterItemAdapter(Context context, List items) { + this.context = context; + this.items = items; + } + + /** + * Allows updating of the full data list underlying this adapter, replacing all items + * @param newItems The new list of filter items to display + */ + public void update(List newItems) { + this.items = newItems; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Override + public FilterItem getItem(int position) { + return items.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + FilterItemView filterItemView; + if (convertView == null) { + filterItemView = FilterItemView_.build(context); + } else { + filterItemView = (FilterItemView) convertView; + } + filterItemView.bind(getItem(position)); + return filterItemView; + } + + } +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterItem.java b/lite/src/org/transdroid/lite/gui/navigation/FilterItem.java new file mode 100644 index 00000000..81638d89 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterItem.java @@ -0,0 +1,12 @@ +package org.transdroid.lite.gui.navigation; + +/** + * Represents a filter item as shown in the navigation list or spinner. + * + * @author Eric Kok + */ +public interface FilterItem { + + public String getName(); + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java b/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java new file mode 100644 index 00000000..e7f6dc82 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java @@ -0,0 +1,29 @@ +package org.transdroid.lite.gui.navigation; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.lite.R; + +import android.content.Context; +import android.widget.LinearLayout; +import android.widget.TextView; + +/** + * View that represents some {@link FilterItem} object and simple prints out the text (in proper style) + * @author Eric Kok + */ +@EViewGroup(R.layout.list_item_filter) +public class FilterItemView extends LinearLayout { + + @ViewById + protected TextView itemText; + + public FilterItemView(Context context) { + super(context); + } + + public void bind(FilterItem filterItem) { + itemText.setText(filterItem.getName()); + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java b/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java new file mode 100644 index 00000000..09368d89 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java @@ -0,0 +1,42 @@ +package org.transdroid.lite.gui.navigation; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.lite.R; + +import android.content.Context; +import android.widget.LinearLayout; +import android.widget.TextView; + +/** + * A list item that shows a sub header or separator (in underlined Holo style). + * + * @author Eric Kok + */ +@EViewGroup(R.layout.list_item_separator) +public class FilterSeparatorView extends LinearLayout { + + protected String text; + + @ViewById + protected TextView separatorText; + + public FilterSeparatorView(Context context) { + super(context); + } + + public void bind(FilterItem filterItem) { + separatorText.setText(text); + } + + /** + * Sets the text that will be shown in this separator (sub header) + * @param text The new text to show + * @return Itself, for convenience of method chaining + */ + public FilterSeparatorView setText(String text) { + this.text = text; + return this; + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java b/lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java new file mode 100644 index 00000000..dd2ec575 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java @@ -0,0 +1,30 @@ +package org.transdroid.lite.gui.navigation; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.RootContext; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; + +@EBean +public class NavigationHelper { + + @RootContext + protected Context context; + + /** + * Whether the navigation of server types and labels as filter are shown in a separate fragment. + * @return True if navigation is in a separate fragment, false if the items are shown in the action bar spinner + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) + public boolean showFiltersInFragment() { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + if (context.getResources().getConfiguration().screenWidthDp >= 600) { + return true; + } + } + return false; + } + +} From 7206333e923e89ae735262ae16a56dbc8880d025 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Thu, 28 Feb 2013 19:10:28 +0100 Subject: [PATCH 04/10] Further work on new layout. --- lite/res/layout-w600dp/activity_torrents.xml | 7 +++++-- lite/res/layout-w720dp/activity_torrents.xml | 10 +++++++--- lite/res/layout/activity_torrents.xml | 2 +- lite/res/layout/fragment_details.xml | 7 +++++-- lite/res/layout/fragment_filters.xml | 6 ++++-- lite/res/layout/fragment_torrents.xml | 18 ++++++++++++++++-- .../transdroid/lite/gui/DetailsFagment.java | 2 ++ .../transdroid/lite/gui/TorrentsActivity.java | 10 ++++++---- 8 files changed, 46 insertions(+), 16 deletions(-) diff --git a/lite/res/layout-w600dp/activity_torrents.xml b/lite/res/layout-w600dp/activity_torrents.xml index 92b91914..2f96106f 100644 --- a/lite/res/layout-w600dp/activity_torrents.xml +++ b/lite/res/layout-w600dp/activity_torrents.xml @@ -12,13 +12,16 @@ android:id="@+id/filters_list" android:layout_width="0dip" android:layout_height="match_parent" - android:layout_weight="1" /> + android:layout_weight="1" + android:choiceMode="singleChoice" + android:listSelector="@drawable/selectable_background_transdroid" /> + class="org.transdroid.gui.TorrentsFragment" + tools:layout="@layout/fragment_torrents" /> \ No newline at end of file diff --git a/lite/res/layout-w720dp/activity_torrents.xml b/lite/res/layout-w720dp/activity_torrents.xml index 19c5a3ad..6575c30e 100644 --- a/lite/res/layout-w720dp/activity_torrents.xml +++ b/lite/res/layout-w720dp/activity_torrents.xml @@ -12,20 +12,24 @@ android:id="@+id/filters_list" android:layout_width="0dip" android:layout_height="match_parent" - android:layout_weight="1" /> + android:layout_weight="1" + android:choiceMode="singleChoice" + android:listSelector="@drawable/selectable_background_transdroid" /> + class="org.transdroid.gui.TorrentsFragment" + tools:layout="@layout/fragment_torrents" /> + class="org.transdroid.gui.DetailsFragment" + tools:layout="@layout/fragment_details" /> \ No newline at end of file diff --git a/lite/res/layout/activity_torrents.xml b/lite/res/layout/activity_torrents.xml index 6e9f0815..ee4dd9b6 100644 --- a/lite/res/layout/activity_torrents.xml +++ b/lite/res/layout/activity_torrents.xml @@ -10,6 +10,6 @@ android:id="@+id/torrent_list" android:layout_width="match_parent" android:layout_height="match_parent" - class="org.transdroid.gui.TorrentsFragment" /> + class="org.transdroid.gui.TorrentsFragment" tools:layout="@layout/fragment_torrents"/> \ No newline at end of file diff --git a/lite/res/layout/fragment_details.xml b/lite/res/layout/fragment_details.xml index e5663b46..bbbcdb0a 100644 --- a/lite/res/layout/fragment_details.xml +++ b/lite/res/layout/fragment_details.xml @@ -3,10 +3,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" > - + android:layout_height="match_parent" + android:choiceMode="multipleChoiceModal" + android:listSelector="@drawable/selectable_background_transdroid" + android:visibility="gone" /> - + android:layout_height="match_parent" + android:choiceMode="singleChoice" + android:listSelector="@drawable/selectable_background_transdroid" /> \ No newline at end of file diff --git a/lite/res/layout/fragment_torrents.xml b/lite/res/layout/fragment_torrents.xml index 3365978d..65ae6c53 100644 --- a/lite/res/layout/fragment_torrents.xml +++ b/lite/res/layout/fragment_torrents.xml @@ -3,9 +3,23 @@ android:layout_width="match_parent" android:layout_height="match_parent" > - + android:layout_height="match_parent" + android:choiceMode="multipleChoiceModal" + android:listSelector="@drawable/selectable_background_transdroid" + android:visibility="gone" /> + + \ No newline at end of file diff --git a/lite/src/org/transdroid/lite/gui/DetailsFagment.java b/lite/src/org/transdroid/lite/gui/DetailsFagment.java index 38f2e74a..1b3c7e10 100644 --- a/lite/src/org/transdroid/lite/gui/DetailsFagment.java +++ b/lite/src/org/transdroid/lite/gui/DetailsFagment.java @@ -40,6 +40,8 @@ public class DetailsFagment extends SherlockFragment { emptyText.setVisibility(View.VISIBLE); } + // TODO: Show the torrent details and load the advanced statistics + } } diff --git a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java index 248a7186..f368bc94 100644 --- a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java +++ b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java @@ -14,11 +14,10 @@ import org.transdroid.lite.gui.navigation.FilterItem; import org.transdroid.lite.gui.navigation.FilterSeparatorView; import org.transdroid.lite.gui.navigation.NavigationHelper; -import android.widget.ListView; - import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.view.SherlockListView; @EActivity(R.layout.activity_torrents) @OptionsMenu(R.menu.activity_torrents) @@ -28,7 +27,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @Bean protected NavigationHelper navigationHelper; @ViewById - protected ListView filtersList; + protected SherlockListView filtersList; protected FilterAdapter navigationListAdapter = null; protected FilterAdapter navigationSpinnerAdapter = null; @@ -57,6 +56,9 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi } + /** + * Called when an item in the action bar navigation spinner was selected + */ @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { Object item = navigationSpinnerAdapter.getItem(itemPosition); @@ -71,7 +73,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi /** * A new filter was selected; update the view over the current data - * @param selected + * @param selected True if * @param item */ @ItemSelect(R.id.filters_list) From e01555ae5ff7865ad89b2e93915a7164411e2173 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Mon, 4 Mar 2013 23:34:46 +0100 Subject: [PATCH 05/10] Creating new preferences screens. --- external/ColorPickerPreference/.classpath | 8 + external/ColorPickerPreference/.gitattributes | 2 + external/ColorPickerPreference/.gitignore | 4 + external/ColorPickerPreference/.project | 33 + .../ColorPickerPreference/AndroidManifest.xml | 18 + external/ColorPickerPreference/CHANGELOG.rst | 26 + external/ColorPickerPreference/LICENSE | 15 + external/ColorPickerPreference/README.rst | 47 + external/ColorPickerPreference/proguard.cfg | 34 + .../ColorPickerPreference/project.properties | 12 + .../res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes .../res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes .../res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes .../res/layout-land/dialog_color_picker.xml | 77 ++ .../res/layout/dialog_color_picker.xml | 78 ++ .../res/values/integer.xml | 5 + .../res/values/strings.xml | 21 + .../res/xml/settings.xml | 32 + external/ColorPickerPreference/screen_1.png | Bin 0 -> 124593 bytes external/ColorPickerPreference/screen_2.png | Bin 0 -> 68429 bytes .../colorpicker/AlphaPatternDrawable.java | 128 +++ .../colorpicker/ColorPickerDialog.java | 142 +++ .../colorpicker/ColorPickerPanelView.java | 171 ++++ .../colorpicker/ColorPickerPreference.java | 287 ++++++ .../colorpicker/ColorPickerView.java | 952 ++++++++++++++++++ .../preference/colorpicker/Test.java | 43 + lite/.factorypath | 2 +- lite/.project | 2 +- lite/AndroidManifest.xml | 17 +- lite/project.properties | 1 + lite/res/drawable-hdpi/ic_priority_high.png | Bin 0 -> 1194 bytes lite/res/drawable-hdpi/ic_priority_low.png | Bin 0 -> 848 bytes lite/res/drawable-hdpi/ic_priority_normal.png | Bin 0 -> 1206 bytes lite/res/drawable-hdpi/ic_priority_off.png | Bin 0 -> 1118 bytes lite/res/layout/list_item_torrent.xml | 89 ++ lite/res/values/attrs.xml | 7 + lite/res/values/colors.xml | 1 + lite/res/values/strings.xml | 141 ++- lite/res/xml/pref_about.xml | 20 + lite/res/xml/pref_main.xml | 52 + lite/res/xml/pref_notifications.xml | 47 + lite/res/xml/pref_rssfeed.xml | 21 + lite/res/xml/pref_server.xml | 108 ++ lite/res/xml/pref_websearch.xml | 16 + .../view/SherlockListView.java | 337 +++++++ .../widget/CheckableRelativeLayout.java | 100 ++ .../fr/marvinlabs/widget/InertCheckBox.java | 70 ++ .../lite/app/search/SearchHelper.java | 109 ++ .../lite/app/search/SearchResult.java | 64 ++ .../lite/app/search/SearchSite.java | 40 + .../lite/app/settings/AboutSettings.java | 30 + .../app/settings/ApplicationSettings.java | 140 +++ .../app/settings/NotificationSettings.java | 97 ++ .../lite/app/settings/RssfeedSetting.java | 67 ++ .../lite/app/settings/ServerSetting.java | 195 ++++ .../lite/app/settings/WebsearchSetting.java | 48 + .../transdroid/lite/gui/DetailsFagment.java | 2 +- .../transdroid/lite/gui/TorrentsActivity.java | 26 +- .../transdroid/lite/gui/TorrentsFragment.java | 2 +- .../lite/gui/lists/TorrentProgressBar.java | 110 ++ .../lite/gui/navigation/FilterAdapter.java | 14 +- .../lite/gui/navigation/FilterItemView.java | 2 +- .../gui/navigation/FilterSeparatorView.java | 2 +- .../transdroid/lite/gui/navigation/Label.java | 20 + .../lite/gui/navigation/StatusType.java | 75 ++ .../gui/settings/MainSettingsActivity.java | 164 +++ .../gui/settings/OtherSettingsActivity.java | 31 + .../lite/gui/settings/RssfeedPreference.java | 59 ++ .../gui/settings/RssfeedSettingsActivity.java | 46 + .../lite/gui/settings/ServerPreference.java | 59 ++ .../gui/settings/ServerSettingsActivity.java | 94 ++ .../gui/settings/WebsearchPreference.java | 59 ++ .../settings/WebsearchSettingsActivity.java | 45 + 73 files changed, 4740 insertions(+), 26 deletions(-) create mode 100644 external/ColorPickerPreference/.classpath create mode 100644 external/ColorPickerPreference/.gitattributes create mode 100644 external/ColorPickerPreference/.gitignore create mode 100644 external/ColorPickerPreference/.project create mode 100644 external/ColorPickerPreference/AndroidManifest.xml create mode 100644 external/ColorPickerPreference/CHANGELOG.rst create mode 100644 external/ColorPickerPreference/LICENSE create mode 100644 external/ColorPickerPreference/README.rst create mode 100644 external/ColorPickerPreference/proguard.cfg create mode 100644 external/ColorPickerPreference/project.properties create mode 100644 external/ColorPickerPreference/res/drawable-hdpi/icon.png create mode 100644 external/ColorPickerPreference/res/drawable-ldpi/icon.png create mode 100644 external/ColorPickerPreference/res/drawable-mdpi/icon.png create mode 100644 external/ColorPickerPreference/res/layout-land/dialog_color_picker.xml create mode 100644 external/ColorPickerPreference/res/layout/dialog_color_picker.xml create mode 100644 external/ColorPickerPreference/res/values/integer.xml create mode 100644 external/ColorPickerPreference/res/values/strings.xml create mode 100644 external/ColorPickerPreference/res/xml/settings.xml create mode 100644 external/ColorPickerPreference/screen_1.png create mode 100644 external/ColorPickerPreference/screen_2.png create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/AlphaPatternDrawable.java create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerDialog.java create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPanelView.java create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPreference.java create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerView.java create mode 100644 external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/Test.java create mode 100644 lite/res/drawable-hdpi/ic_priority_high.png create mode 100644 lite/res/drawable-hdpi/ic_priority_low.png create mode 100644 lite/res/drawable-hdpi/ic_priority_normal.png create mode 100644 lite/res/drawable-hdpi/ic_priority_off.png create mode 100644 lite/res/layout/list_item_torrent.xml create mode 100644 lite/res/values/attrs.xml create mode 100644 lite/res/xml/pref_about.xml create mode 100644 lite/res/xml/pref_main.xml create mode 100644 lite/res/xml/pref_notifications.xml create mode 100644 lite/res/xml/pref_rssfeed.xml create mode 100644 lite/res/xml/pref_server.xml create mode 100644 lite/res/xml/pref_websearch.xml create mode 100644 lite/src/com/actionbarsherlock/view/SherlockListView.java create mode 100644 lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java create mode 100644 lite/src/fr/marvinlabs/widget/InertCheckBox.java create mode 100644 lite/src/org/transdroid/lite/app/search/SearchHelper.java create mode 100644 lite/src/org/transdroid/lite/app/search/SearchResult.java create mode 100644 lite/src/org/transdroid/lite/app/search/SearchSite.java create mode 100644 lite/src/org/transdroid/lite/app/settings/AboutSettings.java create mode 100644 lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java create mode 100644 lite/src/org/transdroid/lite/app/settings/NotificationSettings.java create mode 100644 lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java create mode 100644 lite/src/org/transdroid/lite/app/settings/ServerSetting.java create mode 100644 lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java create mode 100644 lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/Label.java create mode 100644 lite/src/org/transdroid/lite/gui/navigation/StatusType.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/ServerPreference.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java create mode 100644 lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java diff --git a/external/ColorPickerPreference/.classpath b/external/ColorPickerPreference/.classpath new file mode 100644 index 00000000..a4763d1e --- /dev/null +++ b/external/ColorPickerPreference/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/external/ColorPickerPreference/.gitattributes b/external/ColorPickerPreference/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/external/ColorPickerPreference/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/external/ColorPickerPreference/.gitignore b/external/ColorPickerPreference/.gitignore new file mode 100644 index 00000000..4b1a60ae --- /dev/null +++ b/external/ColorPickerPreference/.gitignore @@ -0,0 +1,4 @@ +/bin +/gen +.classpath +.project \ No newline at end of file diff --git a/external/ColorPickerPreference/.project b/external/ColorPickerPreference/.project new file mode 100644 index 00000000..b3e7744d --- /dev/null +++ b/external/ColorPickerPreference/.project @@ -0,0 +1,33 @@ + + + ColorPickerPreference + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/external/ColorPickerPreference/AndroidManifest.xml b/external/ColorPickerPreference/AndroidManifest.xml new file mode 100644 index 00000000..e09215a9 --- /dev/null +++ b/external/ColorPickerPreference/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/ColorPickerPreference/CHANGELOG.rst b/external/ColorPickerPreference/CHANGELOG.rst new file mode 100644 index 00000000..5342d2ac --- /dev/null +++ b/external/ColorPickerPreference/CHANGELOG.rst @@ -0,0 +1,26 @@ +================================ +ColorPickerPreference Change Log +================================ + +2011-02-11 v1.11: +---------------- +fix: color controls not visible in landscape orientation +fix: colorPickerDialog constructor was protected + +2011-01-25 v1.1: +---------------- +* new: Alpha Slider is disabled by default +* new: Alpha Slider can be enabled: + * with preference XML using attribute alphaSlider="true" + * with function setAlphaSliderEnabled(true) +* new: defaultValue in preference XML now accepts HEX color code: + * #FF00FF, rgb + * #FF00FF00, argb + +2011-01-20 v1.01: +----------------- +fix: sometimes preview color disappear + +2011-01-19 v1.0: +---------------- +release \ No newline at end of file diff --git a/external/ColorPickerPreference/LICENSE b/external/ColorPickerPreference/LICENSE new file mode 100644 index 00000000..da9cd5cb --- /dev/null +++ b/external/ColorPickerPreference/LICENSE @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2011 Sergey Margaritov & Daniel Nilsson + * + * 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. + */ \ No newline at end of file diff --git a/external/ColorPickerPreference/README.rst b/external/ColorPickerPreference/README.rst new file mode 100644 index 00000000..bffa417a --- /dev/null +++ b/external/ColorPickerPreference/README.rst @@ -0,0 +1,47 @@ +===================== +ColorPickerPreference +===================== + +Generally used classes by Daniel Nilsson. +ColorPickerPreference class by Sergey Margaritov. +Packed by Sergey Margaritov. + +Features +======== + +* Color Area +* Hue Slider +* Alpha Slider (disabled by default) +* Old & New Color +* Color Preview in Preferences List + +Requirements +============ + +Tested with APIv7, but maybe will work with early versions + +Usage +===== + +You can see some tests inside + +:: + + + alphaSlider="true" + /> + +To enable Alpha Slider in your code use function: +:: + setAlphaSliderEnabled(boolean enable) + +Screens +======= + +* .. image:: https://github.com/attenzione/android-ColorPickerPreference/raw/master/screen_1.png + +* .. image:: https://github.com/attenzione/android-ColorPickerPreference/raw/master/screen_2.png \ No newline at end of file diff --git a/external/ColorPickerPreference/proguard.cfg b/external/ColorPickerPreference/proguard.cfg new file mode 100644 index 00000000..8ad7d335 --- /dev/null +++ b/external/ColorPickerPreference/proguard.cfg @@ -0,0 +1,34 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembernames class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembernames class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/external/ColorPickerPreference/project.properties b/external/ColorPickerPreference/project.properties new file mode 100644 index 00000000..616f300c --- /dev/null +++ b/external/ColorPickerPreference/project.properties @@ -0,0 +1,12 @@ +# 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 +# Project target. +target=android-16 diff --git a/external/ColorPickerPreference/res/drawable-hdpi/icon.png b/external/ColorPickerPreference/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/external/ColorPickerPreference/res/drawable-ldpi/icon.png b/external/ColorPickerPreference/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 zcmV;s21NOZP)AReP91Tc8>~sHP8V>Ys(CF=aT`Sk=;|pS}XrJPb~T1dys{sdO&0YpQBSz*~us zcN*3-J_EnE1cxrXiq*F~jZje~rkAe3vf3>;eR)3?Ox=jK*jEU7Do|T`2NqP{56w(* zBAf)rvPB_7rsfeKd0^!CaR%BHUC$tsP9m8a!i@4&TxxzagzsYHJvblx4rRUu#0Jlz zclZJwdC}7S3BvwaIMTiwb!98zRf|zoya>NudJkDGgEYs=q*HmC)>GExofw=92}s;l z_YgKLUT5`<1RBwq{f)K~I%M=gRE6d)b5BP`8{u9x0-wsG%H)w^ zRU7n9FwtlfsZSjiSB(k8~Y5+O>dyoSI477Ly?|FR?m))C!ci%BtY!2Sst8Uri#|SFX&)8{_Ou2 z9r5p3Vz9_GY#%D>%huqp_>U}K45YGy__TE!HZA@bMxX~@{;>cGYRgH~Ih*vd7EgV7h6Pg$#$lH+5=^lj{W80p{{l+;{7_t5cv3xVUy zl_BY4ht1JH*EEeRS{VwTC(QFIVu8zF&P8O$gJsMgsSO35SVvBrX`Vah$Yz2-5T>-`4DJNH;N zlSSY8-mfty+|1~*;BtTwLz_w5 z+lRv)J28~G%ouyvca(@|{2->WsPii&79&nju7ITE6hMX4AQc{|KqZN#)aAvemg3IZ zCr}Y+!r}JU&^>U1C2WyZC<=47itSYQ`?$5{VH?mtFMFFExfYTsfqK%*WzH@Onc#i` zI@a|rm-WbKk{5my{mF}H>Duc$bit&yLAgFfqo2vVbm~?FeG#0F?dSP*kxSo0Ff!o@ z(C}B;r&6pa-NY4;y~5lX8g&*MYQ>yLGd^tDWC4(sGy$Ow-*!eh%xt;>ve|J1q$*w< zh;B#cz!6l2=5bkX#nJ9PJQ`ew8t>7z$bxqf*QB=l2_UB$hK|1EIfloN-jQ=qcwChF zYAkkyp=;FwcnUB3v0=*tMYMA(HdyQ`Og{P|8RRXpj5bgrSmEzSMfBn+{{vpNxw?;5UX;iv9sYxy_`IQHs$i<61a_iv^L>h8s-`D(`e@|IgS*Fj zNGM876Gf;3D8*1UX9a%v>yJKD*QkCwW2AirU(L{qNA)JghmGItc;(H<$!ABY&gBy1vJIEUj-b8%el*o|VkG)LqNx#TG>Jvj^jIte!!+RY z)T4j$7+PoF1AkRBf}R#^T=-q|PaK1$c<4UH)Hpq3$4WA|xtr!ZQLC=*vNE>O6E9kp+5X0eKB$6>C(lPwI@3#oY zhS_%x7e|j!$yG?ECXmh~EH~^OeuK}+sWoJse3Z3?ha3n`MM9KvA?uqpEnBg4Q46)7 zM$p%a$@l;+O}vfvx%XjH`}a{(-HHth9!JaUwV0*VqGR48^gWNYN<&~7x)y$e!X>e` zZ5!6KZoxbKuV9XUDI%#M1~IVh?pNSdeb~6@$y`v|yk=XK+fHxnDqnUK4&=QRNyIVf zYbDM*cI>~qIy*a7=z7uqkw@agd(<=y-Q7L!ty_23SGdXmahO<;N=wB+j;lNm%=OHC zy zU|>La6h%92y4IPufI$9>Xu!@y`TaNgtg&41@PwMwBdmSm7)xAWDLoqjZ==P2#*k7! z3o1)cVSI3KP_!?d8G^Lg0FtLXC~JYdxi|c%h~lXEixY=%VSFF@!*3&&9>(Rb|iK54Cx5;s~PY5iaV1het%w`dgQFBAJ;aFK zImQC}(|QaCFYUm1JVfzSc)ebv=)ObI)0jwJb``}Zj9J0n0Xgn*Zc(rFM9$xh_makZbm-at_v5^SW zM1y1SW@%+FuIy*WR)i3A2N_q;(YO`O!A|Ts^%z}9ZepCj3ytlw#x%N_fNrKKtPh`< z|1{UqF`4LxHaCQ79+E=uUXCOZ35jAMRz%R%0(P!0FMv=sk>Nr8%+OzY^c-M9@+fz=G`qa@v4sF5u-2289-#$**LWnyNNDwDf1( zkUiMnw|y$tn>pQP=Vn!#|17L^5AGrjtBkN$D@v)Z7LXc5EFhLB4<;7Wehh)CMqX|W zqsiZaO^benJ_hwa&V0ub$-_HUk**?g6fm9|!@kguU6*zhK)$qn-<3*kFrYPIaqR=V zUaUvk>@F_89b@tHs8R!*QKY;INJ<2_U+K6Ca3e9Gsl2{qY0%a7J?uICWgHuLfj+MB z=GkAN1&ifT#2u}B+2S#~$5jA(Qn^;H%CCmIae4AE-Dsng|Hl*Ov!z72k3ZnJs{pp| z+pW`DDueC#mEWOf=ucJ!dTL}hzOeiS-i?m2E;`EKz4<&Lu~NnW?peqVU^@<+T3KKu z{yrI%Qy-Z%HEvLUz}n^~m?7x`xuCtNR#L2En!T>dQtIKdS#V-Hzt3RtwTeYtmQ&dR z6qXZvac*oc@BUYEH%@Ylv_1&tSjkbzzU6*h1(3^C`;1z;g_SmOtclS?KWk2VYE zM*oS<=C483XckW?GN|1jfh3Ro(h + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/ColorPickerPreference/res/layout/dialog_color_picker.xml b/external/ColorPickerPreference/res/layout/dialog_color_picker.xml new file mode 100644 index 00000000..00ee3753 --- /dev/null +++ b/external/ColorPickerPreference/res/layout/dialog_color_picker.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/ColorPickerPreference/res/values/integer.xml b/external/ColorPickerPreference/res/values/integer.xml new file mode 100644 index 00000000..e3626064 --- /dev/null +++ b/external/ColorPickerPreference/res/values/integer.xml @@ -0,0 +1,5 @@ + + + 0xff000000 + 0xff00ff00 + \ No newline at end of file diff --git a/external/ColorPickerPreference/res/values/strings.xml b/external/ColorPickerPreference/res/values/strings.xml new file mode 100644 index 00000000..251a66f4 --- /dev/null +++ b/external/ColorPickerPreference/res/values/strings.xml @@ -0,0 +1,21 @@ + + + + Hello World, Main! + ColorPickerPreference + + + Color Picker + Press on Color to apply + + + Category + Color 1 + black color by default, set by reference + Color 2 + not persistent color\nalpha slider added via code + Color 3 + picker with alpha slider + Color 4 + color set with HEX code in xml + diff --git a/external/ColorPickerPreference/res/xml/settings.xml b/external/ColorPickerPreference/res/xml/settings.xml new file mode 100644 index 00000000..0cd87af9 --- /dev/null +++ b/external/ColorPickerPreference/res/xml/settings.xml @@ -0,0 +1,32 @@ + + + + + + + + + \ No newline at end of file diff --git a/external/ColorPickerPreference/screen_1.png b/external/ColorPickerPreference/screen_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4798dae717ac258baec0c388b218221f258415b7 GIT binary patch literal 124593 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∋XWxe#A7 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 literal 0 HcmV?d00001 diff --git a/external/ColorPickerPreference/screen_2.png b/external/ColorPickerPreference/screen_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb2d671930d3c5e8557bcda386bb0f0146d3c24 GIT binary patch literal 68429 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 z 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 Z5vG4mEL+W+cOig(veHT~izJN${}25Pibwze literal 0 HcmV?d00001 diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/AlphaPatternDrawable.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/AlphaPatternDrawable.java new file mode 100644 index 00000000..ff9c3c84 --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/AlphaPatternDrawable.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2010 Daniel Nilsson + * + * 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 net.margaritov.preference.colorpicker; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +/** + * This drawable that draws a simple white and gray chessboard pattern. + * It's pattern you will often see as a background behind a + * partly transparent image in many applications. + * @author Daniel Nilsson + */ +public class AlphaPatternDrawable extends Drawable { + + private int mRectangleSize = 10; + + private Paint mPaint = new Paint(); + private Paint mPaintWhite = new Paint(); + private Paint mPaintGray = new Paint(); + + private int numRectanglesHorizontal; + private int numRectanglesVertical; + + /** + * Bitmap in which the pattern will be cahched. + */ + private Bitmap mBitmap; + + public AlphaPatternDrawable(int rectangleSize) { + mRectangleSize = rectangleSize; + mPaintWhite.setColor(0xffffffff); + mPaintGray.setColor(0xffcbcbcb); + } + + @Override + public void draw(Canvas canvas) { + canvas.drawBitmap(mBitmap, null, getBounds(), mPaint); + } + + @Override + public int getOpacity() { + return 0; + } + + @Override + public void setAlpha(int alpha) { + throw new UnsupportedOperationException("Alpha is not supported by this drawwable."); + } + + @Override + public void setColorFilter(ColorFilter cf) { + throw new UnsupportedOperationException("ColorFilter is not supported by this drawwable."); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + + int height = bounds.height(); + int width = bounds.width(); + + numRectanglesHorizontal = (int) Math.ceil((width / mRectangleSize)); + numRectanglesVertical = (int) Math.ceil(height / mRectangleSize); + + generatePatternBitmap(); + + } + + /** + * This will generate a bitmap with the pattern + * as big as the rectangle we were allow to draw on. + * We do this to chache the bitmap so we don't need to + * recreate it each time draw() is called since it + * takes a few milliseconds. + */ + private void generatePatternBitmap(){ + + if(getBounds().width() <= 0 || getBounds().height() <= 0){ + return; + } + + mBitmap = Bitmap.createBitmap(getBounds().width(), getBounds().height(), Config.ARGB_8888); + Canvas canvas = new Canvas(mBitmap); + + Rect r = new Rect(); + boolean verticalStartWhite = true; + for (int i = 0; i <= numRectanglesVertical; i++) { + + boolean isWhite = verticalStartWhite; + for (int j = 0; j <= numRectanglesHorizontal; j++) { + + r.top = i * mRectangleSize; + r.left = j * mRectangleSize; + r.bottom = r.top + mRectangleSize; + r.right = r.left + mRectangleSize; + + canvas.drawRect(r, isWhite ? mPaintWhite : mPaintGray); + + isWhite = !isWhite; + } + + verticalStartWhite = !verticalStartWhite; + + } + + } + +} \ No newline at end of file diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerDialog.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerDialog.java new file mode 100644 index 00000000..a63d48c3 --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerDialog.java @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2010 Daniel Nilsson + * + * 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 net.margaritov.preference.colorpicker; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.PixelFormat; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; + +public class ColorPickerDialog + extends + Dialog + implements + ColorPickerView.OnColorChangedListener, + View.OnClickListener { + + private ColorPickerView mColorPicker; + + private ColorPickerPanelView mOldColor; + private ColorPickerPanelView mNewColor; + + private OnColorChangedListener mListener; + + public interface OnColorChangedListener { + public void onColorChanged(int color); + } + + public ColorPickerDialog(Context context, int initialColor) { + super(context); + + init(initialColor); + } + + private void init(int color) { + // To fight color banding. + getWindow().setFormat(PixelFormat.RGBA_8888); + + setUp(color); + + } + + private void setUp(int color) { + + LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + View layout = inflater.inflate(R.layout.dialog_color_picker, null); + + setContentView(layout); + + setTitle(R.string.dialog_color_picker); + + mColorPicker = (ColorPickerView) layout.findViewById(R.id.color_picker_view); + mOldColor = (ColorPickerPanelView) layout.findViewById(R.id.old_color_panel); + mNewColor = (ColorPickerPanelView) layout.findViewById(R.id.new_color_panel); + + ((LinearLayout) mOldColor.getParent()).setPadding( + Math.round(mColorPicker.getDrawingOffset()), + 0, + Math.round(mColorPicker.getDrawingOffset()), + 0 + ); + + mOldColor.setOnClickListener(this); + mNewColor.setOnClickListener(this); + mColorPicker.setOnColorChangedListener(this); + mOldColor.setColor(color); + mColorPicker.setColor(color, true); + + } + + @Override + public void onColorChanged(int color) { + + mNewColor.setColor(color); + + /* + if (mListener != null) { + mListener.onColorChanged(color); + } + */ + + } + + public void setAlphaSliderVisible(boolean visible) { + mColorPicker.setAlphaSliderVisible(visible); + } + + /** + * Set a OnColorChangedListener to get notified when the color + * selected by the user has changed. + * @param listener + */ + public void setOnColorChangedListener(OnColorChangedListener listener){ + mListener = listener; + } + + public int getColor() { + return mColorPicker.getColor(); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.new_color_panel) { + if (mListener != null) { + mListener.onColorChanged(mNewColor.getColor()); + } + } + dismiss(); + } + + @Override + public Bundle onSaveInstanceState() { + Bundle state = super.onSaveInstanceState(); + state.putInt("old_color", mOldColor.getColor()); + state.putInt("new_color", mNewColor.getColor()); + return state; + } + + @Override + public void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + mOldColor.setColor(savedInstanceState.getInt("old_color")); + mColorPicker.setColor(savedInstanceState.getInt("new_color"), true); + } +} diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPanelView.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPanelView.java new file mode 100644 index 00000000..b0003662 --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPanelView.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2010 Daniel Nilsson + * + * 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 net.margaritov.preference.colorpicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +/** + * This class draws a panel which which will be filled with a color which can be set. + * It can be used to show the currently selected color which you will get from + * the {@link ColorPickerView}. + * @author Daniel Nilsson + * + */ +public class ColorPickerPanelView extends View { + + /** + * The width in pixels of the border + * surrounding the color panel. + */ + private final static float BORDER_WIDTH_PX = 1; + + private float mDensity = 1f; + + private int mBorderColor = 0xff6E6E6E; + private int mColor = 0xff000000; + + private Paint mBorderPaint; + private Paint mColorPaint; + + private RectF mDrawingRect; + private RectF mColorRect; + + private AlphaPatternDrawable mAlphaPattern; + + + public ColorPickerPanelView(Context context){ + this(context, null); + } + + public ColorPickerPanelView(Context context, AttributeSet attrs){ + this(context, attrs, 0); + } + + public ColorPickerPanelView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + private void init(){ + mBorderPaint = new Paint(); + mColorPaint = new Paint(); + mDensity = getContext().getResources().getDisplayMetrics().density; + } + + + @Override + protected void onDraw(Canvas canvas) { + + final RectF rect = mColorRect; + + if(BORDER_WIDTH_PX > 0){ + mBorderPaint.setColor(mBorderColor); + canvas.drawRect(mDrawingRect, mBorderPaint); + } + + if(mAlphaPattern != null){ + mAlphaPattern.draw(canvas); + } + + mColorPaint.setColor(mColor); + + canvas.drawRect(rect, mColorPaint); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + + setMeasuredDimension(width, height); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + mDrawingRect = new RectF(); + mDrawingRect.left = getPaddingLeft(); + mDrawingRect.right = w - getPaddingRight(); + mDrawingRect.top = getPaddingTop(); + mDrawingRect.bottom = h - getPaddingBottom(); + + setUpColorRect(); + + } + + private void setUpColorRect(){ + final RectF dRect = mDrawingRect; + + float left = dRect.left + BORDER_WIDTH_PX; + float top = dRect.top + BORDER_WIDTH_PX; + float bottom = dRect.bottom - BORDER_WIDTH_PX; + float right = dRect.right - BORDER_WIDTH_PX; + + mColorRect = new RectF(left,top, right, bottom); + + mAlphaPattern = new AlphaPatternDrawable((int)(5 * mDensity)); + + mAlphaPattern.setBounds( + Math.round(mColorRect.left), + Math.round(mColorRect.top), + Math.round(mColorRect.right), + Math.round(mColorRect.bottom) + ); + + } + + /** + * Set the color that should be shown by this view. + * @param color + */ + public void setColor(int color){ + mColor = color; + invalidate(); + } + + /** + * Get the color currently show by this view. + * @return + */ + public int getColor(){ + return mColor; + } + + /** + * Set the color of the border surrounding the panel. + * @param color + */ + public void setBorderColor(int color){ + mBorderColor = color; + invalidate(); + } + + /** + * Get the color of the border surrounding the panel. + */ + public int getBorderColor(){ + return mBorderColor; + } + +} \ No newline at end of file diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPreference.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPreference.java new file mode 100644 index 00000000..8dded67a --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerPreference.java @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2011 Sergey Margaritov + * + * 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 net.margaritov.preference.colorpicker; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.preference.Preference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; + +/** + * A preference type that allows a user to choose a time + * @author Sergey Margaritov + */ +public class ColorPickerPreference + extends + Preference + implements + Preference.OnPreferenceClickListener, + ColorPickerDialog.OnColorChangedListener { + + View mView; + ColorPickerDialog mDialog; + private int mValue = Color.BLACK; + private float mDensity = 0; + private boolean mAlphaSliderEnabled = false; + + public ColorPickerPreference(Context context) { + super(context); + init(context, null); + } + + public ColorPickerPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public ColorPickerPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context, attrs); + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + return a.getColor(index, Color.BLACK); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + onColorChanged(restoreValue ? getPersistedInt(mValue) : (Integer) defaultValue); + } + + private void init(Context context, AttributeSet attrs) { + mDensity = getContext().getResources().getDisplayMetrics().density; + setOnPreferenceClickListener(this); + if (attrs != null) { + mAlphaSliderEnabled = attrs.getAttributeBooleanValue(null, "alphaSlider", false); + } + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + mView = view; + setPreviewColor(); + } + + private void setPreviewColor() { + if (mView == null) return; + ImageView iView = new ImageView(getContext()); + LinearLayout widgetFrameView = ((LinearLayout)mView.findViewById(android.R.id.widget_frame)); + if (widgetFrameView == null) return; + widgetFrameView.setVisibility(View.VISIBLE); + widgetFrameView.setPadding( + widgetFrameView.getPaddingLeft(), + widgetFrameView.getPaddingTop(), + (int)(mDensity * 8), + widgetFrameView.getPaddingBottom() + ); + // remove already create preview image + int count = widgetFrameView.getChildCount(); + if (count > 0) { + widgetFrameView.removeViews(0, count); + } + widgetFrameView.addView(iView); + widgetFrameView.setMinimumWidth(0); + iView.setBackgroundDrawable(new AlphaPatternDrawable((int)(5 * mDensity))); + iView.setImageBitmap(getPreviewBitmap()); + } + + private Bitmap getPreviewBitmap() { + int d = (int) (mDensity * 31); //30dip + int color = mValue; + Bitmap bm = Bitmap.createBitmap(d, d, Config.ARGB_8888); + int w = bm.getWidth(); + int h = bm.getHeight(); + int c = color; + for (int i = 0; i < w; i++) { + for (int j = i; j < h; j++) { + c = (i <= 1 || j <= 1 || i >= w-2 || j >= h-2) ? Color.GRAY : color; + bm.setPixel(i, j, c); + if (i != j) { + bm.setPixel(j, i, c); + } + } + } + + return bm; + } + + @Override + public void onColorChanged(int color) { + if (isPersistent()) { + persistInt(color); + } + mValue = color; + setPreviewColor(); + try { + getOnPreferenceChangeListener().onPreferenceChange(this, color); + } catch (NullPointerException e) { + + } + } + + public boolean onPreferenceClick(Preference preference) { + showDialog(null); + return false; + } + + protected void showDialog(Bundle state) { + mDialog = new ColorPickerDialog(getContext(), mValue); + mDialog.setOnColorChangedListener(this); + if (mAlphaSliderEnabled) { + mDialog.setAlphaSliderVisible(true); + } + if (state != null) { + mDialog.onRestoreInstanceState(state); + } + mDialog.show(); + } + + /** + * Toggle Alpha Slider visibility (by default it's disabled) + * @param enable + */ + public void setAlphaSliderEnabled(boolean enable) { + mAlphaSliderEnabled = enable; + } + + /** + * For custom purposes. Not used by ColorPickerPreferrence + * @param color + * @author Unknown + */ + public static String convertToARGB(int color) { + String alpha = Integer.toHexString(Color.alpha(color)); + String red = Integer.toHexString(Color.red(color)); + String green = Integer.toHexString(Color.green(color)); + String blue = Integer.toHexString(Color.blue(color)); + + if (alpha.length() == 1) { + alpha = "0" + alpha; + } + + if (red.length() == 1) { + red = "0" + red; + } + + if (green.length() == 1) { + green = "0" + green; + } + + if (blue.length() == 1) { + blue = "0" + blue; + } + + return "#" + alpha + red + green + blue; + } + + /** + * For custom purposes. Not used by ColorPickerPreferrence + * @param argb + * @throws NumberFormatException + * @author Unknown + */ + public static int convertToColorInt(String argb) throws NumberFormatException { + + if (argb.startsWith("#")) { + argb = argb.replace("#", ""); + } + + int alpha = -1, red = -1, green = -1, blue = -1; + + if (argb.length() == 8) { + alpha = Integer.parseInt(argb.substring(0, 2), 16); + red = Integer.parseInt(argb.substring(2, 4), 16); + green = Integer.parseInt(argb.substring(4, 6), 16); + blue = Integer.parseInt(argb.substring(6, 8), 16); + } + else if (argb.length() == 6) { + alpha = 255; + red = Integer.parseInt(argb.substring(0, 2), 16); + green = Integer.parseInt(argb.substring(2, 4), 16); + blue = Integer.parseInt(argb.substring(4, 6), 16); + } + + return Color.argb(alpha, red, green, blue); + } + + @Override + protected Parcelable onSaveInstanceState() { + final Parcelable superState = super.onSaveInstanceState(); + if (mDialog == null || !mDialog.isShowing()) { + return superState; + } + + final SavedState myState = new SavedState(superState); + myState.dialogBundle = mDialog.onSaveInstanceState(); + return myState; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (state == null || !(state instanceof SavedState)) { + // Didn't save state for us in onSaveInstanceState + super.onRestoreInstanceState(state); + return; + } + + SavedState myState = (SavedState) state; + super.onRestoreInstanceState(myState.getSuperState()); + showDialog(myState.dialogBundle); + } + + private static class SavedState extends BaseSavedState { + Bundle dialogBundle; + + public SavedState(Parcel source) { + super(source); + dialogBundle = source.readBundle(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeBundle(dialogBundle); + } + + public SavedState(Parcelable superState) { + super(superState); + } + + @SuppressWarnings("unused") + 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]; + } + }; + } +} \ No newline at end of file diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerView.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerView.java new file mode 100644 index 00000000..c0ec0531 --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/ColorPickerView.java @@ -0,0 +1,952 @@ +/* + * Copyright (C) 2010 Daniel Nilsson + * + * 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 net.margaritov.preference.colorpicker; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ComposeShader; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Point; +import android.graphics.PorterDuff; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.Paint.Align; +import android.graphics.Paint.Style; +import android.graphics.Shader.TileMode; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +/** + * Displays a color picker to the user and allow them + * to select a color. A slider for the alpha channel is + * also available. Enable it by setting + * setAlphaSliderVisible(boolean) to true. + * @author Daniel Nilsson + */ +public class ColorPickerView extends View { + + private final static int PANEL_SAT_VAL = 0; + private final static int PANEL_HUE = 1; + private final static int PANEL_ALPHA = 2; + + /** + * The width in pixels of the border + * surrounding all color panels. + */ + private final static float BORDER_WIDTH_PX = 1; + + /** + * The width in dp of the hue panel. + */ + private float HUE_PANEL_WIDTH = 30f; + /** + * The height in dp of the alpha panel + */ + private float ALPHA_PANEL_HEIGHT = 20f; + /** + * The distance in dp between the different + * color panels. + */ + private float PANEL_SPACING = 10f; + /** + * The radius in dp of the color palette tracker circle. + */ + private float PALETTE_CIRCLE_TRACKER_RADIUS = 5f; + /** + * The dp which the tracker of the hue or alpha panel + * will extend outside of its bounds. + */ + private float RECTANGLE_TRACKER_OFFSET = 2f; + + + private float mDensity = 1f; + + private OnColorChangedListener mListener; + + private Paint mSatValPaint; + private Paint mSatValTrackerPaint; + + private Paint mHuePaint; + private Paint mHueTrackerPaint; + + private Paint mAlphaPaint; + private Paint mAlphaTextPaint; + + private Paint mBorderPaint; + + private Shader mValShader; + private Shader mSatShader; + private Shader mHueShader; + private Shader mAlphaShader; + + private int mAlpha = 0xff; + private float mHue = 360f; + private float mSat = 0f; + private float mVal = 0f; + + private String mAlphaSliderText = ""; + private int mSliderTrackerColor = 0xff1c1c1c; + private int mBorderColor = 0xff6E6E6E; + private boolean mShowAlphaPanel = false; + + /* + * To remember which panel that has the "focus" when + * processing hardware button data. + */ + private int mLastTouchedPanel = PANEL_SAT_VAL; + + /** + * Offset from the edge we must have or else + * the finger tracker will get clipped when + * it is drawn outside of the view. + */ + private float mDrawingOffset; + + + /* + * Distance form the edges of the view + * of where we are allowed to draw. + */ + private RectF mDrawingRect; + + private RectF mSatValRect; + private RectF mHueRect; + private RectF mAlphaRect; + + private AlphaPatternDrawable mAlphaPattern; + + private Point mStartTouchPoint = null; + + public interface OnColorChangedListener { + public void onColorChanged(int color); + } + + public ColorPickerView(Context context){ + this(context, null); + } + + public ColorPickerView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ColorPickerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + private void init(){ + mDensity = getContext().getResources().getDisplayMetrics().density; + PALETTE_CIRCLE_TRACKER_RADIUS *= mDensity; + RECTANGLE_TRACKER_OFFSET *= mDensity; + HUE_PANEL_WIDTH *= mDensity; + ALPHA_PANEL_HEIGHT *= mDensity; + PANEL_SPACING = PANEL_SPACING * mDensity; + + mDrawingOffset = calculateRequiredOffset(); + + initPaintTools(); + + //Needed for receiving trackball motion events. + setFocusable(true); + setFocusableInTouchMode(true); + } + + private void initPaintTools(){ + + mSatValPaint = new Paint(); + mSatValTrackerPaint = new Paint(); + mHuePaint = new Paint(); + mHueTrackerPaint = new Paint(); + mAlphaPaint = new Paint(); + mAlphaTextPaint = new Paint(); + mBorderPaint = new Paint(); + + + mSatValTrackerPaint.setStyle(Style.STROKE); + mSatValTrackerPaint.setStrokeWidth(2f * mDensity); + mSatValTrackerPaint.setAntiAlias(true); + + mHueTrackerPaint.setColor(mSliderTrackerColor); + mHueTrackerPaint.setStyle(Style.STROKE); + mHueTrackerPaint.setStrokeWidth(2f * mDensity); + mHueTrackerPaint.setAntiAlias(true); + + mAlphaTextPaint.setColor(0xff1c1c1c); + mAlphaTextPaint.setTextSize(14f * mDensity); + mAlphaTextPaint.setAntiAlias(true); + mAlphaTextPaint.setTextAlign(Align.CENTER); + mAlphaTextPaint.setFakeBoldText(true); + + + } + + private float calculateRequiredOffset(){ + float offset = Math.max(PALETTE_CIRCLE_TRACKER_RADIUS, RECTANGLE_TRACKER_OFFSET); + offset = Math.max(offset, BORDER_WIDTH_PX * mDensity); + + return offset * 1.5f; + } + + private int[] buildHueColorArray(){ + + int[] hue = new int[361]; + + int count = 0; + for(int i = hue.length -1; i >= 0; i--, count++){ + hue[count] = Color.HSVToColor(new float[]{i, 1f, 1f}); + } + + return hue; + } + + + @Override + protected void onDraw(Canvas canvas) { + + if(mDrawingRect.width() <= 0 || mDrawingRect.height() <= 0) return; + + drawSatValPanel(canvas); + drawHuePanel(canvas); + drawAlphaPanel(canvas); + + } + + private void drawSatValPanel(Canvas canvas){ + + final RectF rect = mSatValRect; + + if(BORDER_WIDTH_PX > 0){ + mBorderPaint.setColor(mBorderColor); + canvas.drawRect(mDrawingRect.left, mDrawingRect.top, rect.right + BORDER_WIDTH_PX, rect.bottom + BORDER_WIDTH_PX, mBorderPaint); + } + + if (mValShader == null) { + mValShader = new LinearGradient(rect.left, rect.top, rect.left, rect.bottom, + 0xffffffff, 0xff000000, TileMode.CLAMP); + } + + int rgb = Color.HSVToColor(new float[]{mHue,1f,1f}); + + mSatShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, + 0xffffffff, rgb, TileMode.CLAMP); + ComposeShader mShader = new ComposeShader(mValShader, mSatShader, PorterDuff.Mode.MULTIPLY); + mSatValPaint.setShader(mShader); + + canvas.drawRect(rect, mSatValPaint); + + Point p = satValToPoint(mSat, mVal); + + mSatValTrackerPaint.setColor(0xff000000); + canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS - 1f * mDensity, mSatValTrackerPaint); + + mSatValTrackerPaint.setColor(0xffdddddd); + canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS, mSatValTrackerPaint); + + } + + private void drawHuePanel(Canvas canvas){ + + final RectF rect = mHueRect; + + if(BORDER_WIDTH_PX > 0){ + mBorderPaint.setColor(mBorderColor); + canvas.drawRect(rect.left - BORDER_WIDTH_PX, + rect.top - BORDER_WIDTH_PX, + rect.right + BORDER_WIDTH_PX, + rect.bottom + BORDER_WIDTH_PX, + mBorderPaint); + } + + if (mHueShader == null) { + mHueShader = new LinearGradient(rect.left, rect.top, rect.left, rect.bottom, buildHueColorArray(), null, TileMode.CLAMP); + mHuePaint.setShader(mHueShader); + } + + canvas.drawRect(rect, mHuePaint); + + float rectHeight = 4 * mDensity / 2; + + Point p = hueToPoint(mHue); + + RectF r = new RectF(); + r.left = rect.left - RECTANGLE_TRACKER_OFFSET; + r.right = rect.right + RECTANGLE_TRACKER_OFFSET; + r.top = p.y - rectHeight; + r.bottom = p.y + rectHeight; + + + canvas.drawRoundRect(r, 2, 2, mHueTrackerPaint); + + } + + private void drawAlphaPanel(Canvas canvas){ + + if(!mShowAlphaPanel || mAlphaRect == null || mAlphaPattern == null) return; + + final RectF rect = mAlphaRect; + + if(BORDER_WIDTH_PX > 0){ + mBorderPaint.setColor(mBorderColor); + canvas.drawRect(rect.left - BORDER_WIDTH_PX, + rect.top - BORDER_WIDTH_PX, + rect.right + BORDER_WIDTH_PX, + rect.bottom + BORDER_WIDTH_PX, + mBorderPaint); + } + + + mAlphaPattern.draw(canvas); + + float[] hsv = new float[]{mHue,mSat,mVal}; + int color = Color.HSVToColor(hsv); + int acolor = Color.HSVToColor(0, hsv); + + mAlphaShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, + color, acolor, TileMode.CLAMP); + + + mAlphaPaint.setShader(mAlphaShader); + + canvas.drawRect(rect, mAlphaPaint); + + if(mAlphaSliderText != null && mAlphaSliderText!= ""){ + canvas.drawText(mAlphaSliderText, rect.centerX(), rect.centerY() + 4 * mDensity, mAlphaTextPaint); + } + + float rectWidth = 4 * mDensity / 2; + + Point p = alphaToPoint(mAlpha); + + RectF r = new RectF(); + r.left = p.x - rectWidth; + r.right = p.x + rectWidth; + r.top = rect.top - RECTANGLE_TRACKER_OFFSET; + r.bottom = rect.bottom + RECTANGLE_TRACKER_OFFSET; + + canvas.drawRoundRect(r, 2, 2, mHueTrackerPaint); + + } + + + private Point hueToPoint(float hue){ + + final RectF rect = mHueRect; + final float height = rect.height(); + + Point p = new Point(); + + p.y = (int) (height - (hue * height / 360f) + rect.top); + p.x = (int) rect.left; + + return p; + } + + private Point satValToPoint(float sat, float val){ + + final RectF rect = mSatValRect; + final float height = rect.height(); + final float width = rect.width(); + + Point p = new Point(); + + p.x = (int) (sat * width + rect.left); + p.y = (int) ((1f - val) * height + rect.top); + + return p; + } + + private Point alphaToPoint(int alpha){ + + final RectF rect = mAlphaRect; + final float width = rect.width(); + + Point p = new Point(); + + p.x = (int) (width - (alpha * width / 0xff) + rect.left); + p.y = (int) rect.top; + + return p; + + } + + private float[] pointToSatVal(float x, float y){ + + final RectF rect = mSatValRect; + float[] result = new float[2]; + + float width = rect.width(); + float height = rect.height(); + + if (x < rect.left){ + x = 0f; + } + else if(x > rect.right){ + x = width; + } + else{ + x = x - rect.left; + } + + if (y < rect.top){ + y = 0f; + } + else if(y > rect.bottom){ + y = height; + } + else{ + y = y - rect.top; + } + + + result[0] = 1.f / width * x; + result[1] = 1.f - (1.f / height * y); + + return result; + } + + private float pointToHue(float y){ + + final RectF rect = mHueRect; + + float height = rect.height(); + + if (y < rect.top){ + y = 0f; + } + else if(y > rect.bottom){ + y = height; + } + else{ + y = y - rect.top; + } + + return 360f - (y * 360f / height); + } + + private int pointToAlpha(int x){ + + final RectF rect = mAlphaRect; + final int width = (int) rect.width(); + + if(x < rect.left){ + x = 0; + } + else if(x > rect.right){ + x = width; + } + else{ + x = x - (int)rect.left; + } + + return 0xff - (x * 0xff / width); + + } + + + @Override + public boolean onTrackballEvent(MotionEvent event) { + + float x = event.getX(); + float y = event.getY(); + + boolean update = false; + + + if(event.getAction() == MotionEvent.ACTION_MOVE){ + + switch(mLastTouchedPanel){ + + case PANEL_SAT_VAL: + + float sat, val; + + sat = mSat + x/50f; + val = mVal - y/50f; + + if(sat < 0f){ + sat = 0f; + } + else if(sat > 1f){ + sat = 1f; + } + + if(val < 0f){ + val = 0f; + } + else if(val > 1f){ + val = 1f; + } + + mSat = sat; + mVal = val; + + update = true; + + break; + + case PANEL_HUE: + + float hue = mHue - y * 10f; + + if(hue < 0f){ + hue = 0f; + } + else if(hue > 360f){ + hue = 360f; + } + + mHue = hue; + + update = true; + + break; + + case PANEL_ALPHA: + + if(!mShowAlphaPanel || mAlphaRect == null){ + update = false; + } + else{ + + int alpha = (int) (mAlpha - x*10); + + if(alpha < 0){ + alpha = 0; + } + else if(alpha > 0xff){ + alpha = 0xff; + } + + mAlpha = alpha; + + + update = true; + } + + break; + } + + + } + + + if(update){ + + if(mListener != null){ + mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[]{mHue, mSat, mVal})); + } + + invalidate(); + return true; + } + + + return super.onTrackballEvent(event); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + boolean update = false; + + switch(event.getAction()){ + + case MotionEvent.ACTION_DOWN: + + mStartTouchPoint = new Point((int)event.getX(), (int)event.getY()); + + update = moveTrackersIfNeeded(event); + + break; + + case MotionEvent.ACTION_MOVE: + + update = moveTrackersIfNeeded(event); + + break; + + case MotionEvent.ACTION_UP: + + mStartTouchPoint = null; + + update = moveTrackersIfNeeded(event); + + break; + + } + + if(update){ + + if(mListener != null){ + mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[]{mHue, mSat, mVal})); + } + + invalidate(); + return true; + } + + + return super.onTouchEvent(event); + } + + private boolean moveTrackersIfNeeded(MotionEvent event){ + + if(mStartTouchPoint == null) return false; + + boolean update = false; + + int startX = mStartTouchPoint.x; + int startY = mStartTouchPoint.y; + + + if(mHueRect.contains(startX, startY)){ + mLastTouchedPanel = PANEL_HUE; + + mHue = pointToHue(event.getY()); + + update = true; + } + else if(mSatValRect.contains(startX, startY)){ + + mLastTouchedPanel = PANEL_SAT_VAL; + + float[] result = pointToSatVal(event.getX(), event.getY()); + + mSat = result[0]; + mVal = result[1]; + + update = true; + } + else if(mAlphaRect != null && mAlphaRect.contains(startX, startY)){ + + mLastTouchedPanel = PANEL_ALPHA; + + mAlpha = pointToAlpha((int)event.getX()); + + update = true; + } + + + return update; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int width = 0; + int height = 0; + + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + + int widthAllowed = MeasureSpec.getSize(widthMeasureSpec); + int heightAllowed = MeasureSpec.getSize(heightMeasureSpec); + + widthAllowed = chooseWidth(widthMode, widthAllowed); + heightAllowed = chooseHeight(heightMode, heightAllowed); + + if(!mShowAlphaPanel){ + + height = (int) (widthAllowed - PANEL_SPACING - HUE_PANEL_WIDTH); + + //If calculated height (based on the width) is more than the allowed height. + if(height > heightAllowed || getTag().equals("landscape")) { + height = heightAllowed; + width = (int) (height + PANEL_SPACING + HUE_PANEL_WIDTH); + } + else{ + width = widthAllowed; + } + } + else{ + + width = (int) (heightAllowed - ALPHA_PANEL_HEIGHT + HUE_PANEL_WIDTH); + + if(width > widthAllowed){ + width = widthAllowed; + height = (int) (widthAllowed - HUE_PANEL_WIDTH + ALPHA_PANEL_HEIGHT); + } + else{ + height = heightAllowed; + } + + } + + setMeasuredDimension(width, height); + } + + private int chooseWidth(int mode, int size){ + if (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) { + return size; + } else { // (mode == MeasureSpec.UNSPECIFIED) + return getPrefferedWidth(); + } + } + + private int chooseHeight(int mode, int size){ + if (mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) { + return size; + } else { // (mode == MeasureSpec.UNSPECIFIED) + return getPrefferedHeight(); + } + } + + private int getPrefferedWidth(){ + + int width = getPrefferedHeight(); + + if(mShowAlphaPanel){ + width -= (PANEL_SPACING + ALPHA_PANEL_HEIGHT); + } + + + return (int) (width + HUE_PANEL_WIDTH + PANEL_SPACING); + + } + + private int getPrefferedHeight(){ + + int height = (int)(200 * mDensity); + + if(mShowAlphaPanel){ + height += PANEL_SPACING + ALPHA_PANEL_HEIGHT; + } + + return height; + } + + + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + mDrawingRect = new RectF(); + mDrawingRect.left = mDrawingOffset + getPaddingLeft(); + mDrawingRect.right = w - mDrawingOffset - getPaddingRight(); + mDrawingRect.top = mDrawingOffset + getPaddingTop(); + mDrawingRect.bottom = h - mDrawingOffset - getPaddingBottom(); + + setUpSatValRect(); + setUpHueRect(); + setUpAlphaRect(); + } + + private void setUpSatValRect(){ + + final RectF dRect = mDrawingRect; + float panelSide = dRect.height() - BORDER_WIDTH_PX * 2; + + if(mShowAlphaPanel){ + panelSide -= PANEL_SPACING + ALPHA_PANEL_HEIGHT; + } + + float left = dRect.left + BORDER_WIDTH_PX; + float top = dRect.top + BORDER_WIDTH_PX; + float bottom = top + panelSide; + float right = left + panelSide; + + mSatValRect = new RectF(left,top, right, bottom); + } + + private void setUpHueRect(){ + final RectF dRect = mDrawingRect; + + float left = dRect.right - HUE_PANEL_WIDTH + BORDER_WIDTH_PX; + float top = dRect.top + BORDER_WIDTH_PX; + float bottom = dRect.bottom - BORDER_WIDTH_PX - (mShowAlphaPanel ? (PANEL_SPACING + ALPHA_PANEL_HEIGHT) : 0); + float right = dRect.right - BORDER_WIDTH_PX; + + mHueRect = new RectF(left, top, right, bottom); + } + + private void setUpAlphaRect() { + + if(!mShowAlphaPanel) return; + + final RectF dRect = mDrawingRect; + + float left = dRect.left + BORDER_WIDTH_PX; + float top = dRect.bottom - ALPHA_PANEL_HEIGHT + BORDER_WIDTH_PX; + float bottom = dRect.bottom - BORDER_WIDTH_PX; + float right = dRect.right - BORDER_WIDTH_PX; + + mAlphaRect = new RectF(left, top, right, bottom); + + mAlphaPattern = new AlphaPatternDrawable((int) (5 * mDensity)); + mAlphaPattern.setBounds( + Math.round(mAlphaRect.left), + Math.round(mAlphaRect.top), + Math.round(mAlphaRect.right), + Math.round(mAlphaRect.bottom) + ); + + } + + + /** + * Set a OnColorChangedListener to get notified when the color + * selected by the user has changed. + * @param listener + */ + public void setOnColorChangedListener(OnColorChangedListener listener){ + mListener = listener; + } + + /** + * Set the color of the border surrounding all panels. + * @param color + */ + public void setBorderColor(int color){ + mBorderColor = color; + invalidate(); + } + + /** + * Get the color of the border surrounding all panels. + */ + public int getBorderColor(){ + return mBorderColor; + } + + /** + * Get the current color this view is showing. + * @return the current color. + */ + public int getColor(){ + return Color.HSVToColor(mAlpha, new float[]{mHue,mSat,mVal}); + } + + /** + * Set the color the view should show. + * @param color The color that should be selected. + */ + public void setColor(int color){ + setColor(color, false); + } + + /** + * Set the color this view should show. + * @param color The color that should be selected. + * @param callback If you want to get a callback to + * your OnColorChangedListener. + */ + public void setColor(int color, boolean callback){ + + int alpha = Color.alpha(color); + int red = Color.red(color); + int blue = Color.blue(color); + int green = Color.green(color); + + float[] hsv = new float[3]; + + Color.RGBToHSV(red, green, blue, hsv); + + mAlpha = alpha; + mHue = hsv[0]; + mSat = hsv[1]; + mVal = hsv[2]; + + if(callback && mListener != null){ + mListener.onColorChanged(Color.HSVToColor(mAlpha, new float[]{mHue, mSat, mVal})); + } + + invalidate(); + } + + /** + * Get the drawing offset of the color picker view. + * The drawing offset is the distance from the side of + * a panel to the side of the view minus the padding. + * Useful if you want to have your own panel below showing + * the currently selected color and want to align it perfectly. + * @return The offset in pixels. + */ + public float getDrawingOffset(){ + return mDrawingOffset; + } + + /** + * Set if the user is allowed to adjust the alpha panel. Default is false. + * If it is set to false no alpha will be set. + * @param visible + */ + public void setAlphaSliderVisible(boolean visible){ + + if(mShowAlphaPanel != visible){ + mShowAlphaPanel = visible; + + /* + * Reset all shader to force a recreation. + * Otherwise they will not look right after + * the size of the view has changed. + */ + mValShader = null; + mSatShader = null; + mHueShader = null; + mAlphaShader = null;; + + requestLayout(); + } + + } + + public void setSliderTrackerColor(int color){ + mSliderTrackerColor = color; + + mHueTrackerPaint.setColor(mSliderTrackerColor); + + invalidate(); + } + + public int getSliderTrackerColor(){ + return mSliderTrackerColor; + } + + /** + * Set the text that should be shown in the + * alpha slider. Set to null to disable text. + * @param res string resource id. + */ + public void setAlphaSliderText(int res){ + String text = getContext().getString(res); + setAlphaSliderText(text); + } + + /** + * Set the text that should be shown in the + * alpha slider. Set to null to disable text. + * @param text Text that should be shown. + */ + public void setAlphaSliderText(String text){ + mAlphaSliderText = text; + invalidate(); + } + + /** + * Get the current value of the text + * that will be shown in the alpha + * slider. + * @return + */ + public String getAlphaSliderText(){ + return mAlphaSliderText; + } +} \ No newline at end of file diff --git a/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/Test.java b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/Test.java new file mode 100644 index 00000000..e5e167d9 --- /dev/null +++ b/external/ColorPickerPreference/src/net/margaritov/preference/colorpicker/Test.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2011 Sergey Margaritov + * + * 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 net.margaritov.preference.colorpicker; + +import net.margaritov.preference.colorpicker.R; + +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.PreferenceActivity; + +public class Test extends PreferenceActivity { + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.settings); + ((ColorPickerPreference)findPreference("color2")).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + preference.setSummary(ColorPickerPreference.convertToARGB(Integer.valueOf(String.valueOf(newValue)))); + return true; + } + + }); + ((ColorPickerPreference)findPreference("color2")).setAlphaSliderEnabled(true); + } +} \ No newline at end of file diff --git a/lite/.factorypath b/lite/.factorypath index 026446ed..d528d92e 100644 --- a/lite/.factorypath +++ b/lite/.factorypath @@ -1,3 +1,3 @@ - + diff --git a/lite/.project b/lite/.project index 0654bfb6..1b341fee 100644 --- a/lite/.project +++ b/lite/.project @@ -1,6 +1,6 @@ - TransdroidLite + Transdroid Core diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml index 1b6f7500..e33579dd 100644 --- a/lite/AndroidManifest.xml +++ b/lite/AndroidManifest.xml @@ -1,13 +1,20 @@ + android:versionName="2.0-alpha1" > + + + + + + + + \ No newline at end of file diff --git a/lite/project.properties b/lite/project.properties index 5f7d115e..b8863ad3 100644 --- a/lite/project.properties +++ b/lite/project.properties @@ -13,3 +13,4 @@ # Project target. target=android-16 android.library.reference.1=../external/JakeWharton-ActionBarSherlock/library +android.library.reference.2=../external/ColorPickerPreference diff --git a/lite/res/drawable-hdpi/ic_priority_high.png b/lite/res/drawable-hdpi/ic_priority_high.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd253bdeda94a1b5cbad49239b4591a03816e3 GIT binary patch literal 1194 zcmV;b1XcTqP)c5e|e! zygOM$9-$!2{F*bsGl)3iEk^>8=IhmqtP>LxfsKugA512bkWwnm&CM@{hldwuW@a8O zE-ro#ERPWP;dE+hYJMCU83{1~EeZ)tLqkKm=jZ3%Y&Khdd3h;LPEMWykM#HV|GBrf z=K)@3gkM}-h||;4=fGbgQXFZmTGQz0sIv$s8jZTlW^-F{aj{6HQm$k&8Et84x!&L3 zw}9!VM!4N>7l}l|eRg*CM|*qw`F|5g{*dhI>I&y@N=r)x{Rj!ar4oC3dX^r-T`rd> zDJc<0M@LUdZiJm*P1GYwkfbKHwzghcES6tUg>bvwA{LAJcXxN4b#--bQQ*1}j^Bu~ zvN8d=x+0NCl`erC1ze)J3lHH`0TRiTm6bu@MI35> zCEJX2OQ3nbL+4|XfaE}9zmCV_Imoe(8@(~Y6-7~#+}_^y-`w0-IDu75kmUsAWzsaP zu|?VL+1Xh?UF`LG7aqbL4u?RZ52mK3dRZnLRUz50g(~{``sTqdMr=vn!^6WMeIE=4 ze*+#j!l??I%_iWcL2fWrVUawU8O=>TpD$*$TIXR9^#`zE^V-_lM`&aQ>|Yt-m^ZaL zRP!hl3N`UoFl!0&x(O8Z_4TvRQqW{Ooldc}we^@-!T$^I!^vqoJ3E8iWGThJN73HE zh96?GMLL~UZv>tHA`-xT{|B$Csyb!Tg@q+qH+9)*}kH&u`$Gsqy!mF8g++YpA=tR zT?Of48Yr;c^ZWg8ps#}Hc?ieapvt1KZIoxKkU(Q^A0HnlSCkM->H+pVv9wH1PJRK_ z4kMfrkp5_Hn4Os5DzauyKtmyqkB`42jd|zX^!E0?CKhP=6C<3oC-z8mJuoovO3$8# zSZeIY#>PH_%|0QPbTe3R3HwEvo}O;NP}LgYl$0hL>-?q1<4Nk-YtIAKL9m)?O#KXBAJSYKZ+2a7MUCPYO=1vT<@Q&ZC=Bq&Ge0jzOD zoSp@cEz;T9NkbRY$x|4#?7_i-udS`^1zil55=~qJev1jM>*(m1$M_Q)c!p)U<4EW$_(y;N0Oit~VznlB0RR9107*qo IM6N<$f*+ME#{d8T literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_priority_low.png b/lite/res/drawable-hdpi/ic_priority_low.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8e7bfb7096ff45090d417ee242cdd5999e3189 GIT binary patch literal 848 zcmV-W1F!svP)k7RCwB) zR!eIdQ53#2j_*gT!J>jBfyU5HCEaA9-AD_?EOa4Fmi-r9`U~7g7ug$z(hxTmq#Kh} z=*plF;zq1ekVslz<70ZxaHdR4X4G8x7`PYjcfRjDuAD5(?7w9KSOHFeo4#hi0x$yn zCX4}7+SgseBYPa}Tk`q*o2#pR%^_xsPiUM~xW!^~>6ZWRiJ12}V#je@}) zx&$bBM$t{;@wm8v1!T|z*+v!ckBY;?!_sIp8lnoQCf07Z zGZeXv8j*iYg%N?Qt)@^YG_+VOC2Tl{!@)q!t75VEk}iLe0$F1fg6;0^eg^Lub~g4# zy7W`RJUWz@yXMg>O!n8*fJtJN|XJ>~&=Z<0tP z&dEk~Cdun4;MJjri4;X~YcLobKpvDs=!Z%q61k^_)SasQlIYD;hSqYqe8ls-l3?g& zwzs!eqzapminSDQWQ{U&VE#CIyp}wb zACfDQ?_*M-JFDK zT)-PKSta^q3X}@EzP`=~f}jjJj1=DoihjJxi>CJ`E4aM8+=Qs#!kAFr0!VH(7K{CW zv!TYGwHl4nPSe}l+tB|0{ujI)8jA&k!4mBMB7&v%C>I+1ZL!ne7CR+et(pO0yo!Q9 a0t^6}Z64v69v9sJ0000Z!BR+B{h!i3#@|KaW+KSe#n{+bfB|Sxw1Bn@BO@bw=jZ3HOeRwqjYh@E$;or%!-Io^ zf9>z@S0i6>ad9C|PfveD{xu@WketSg~N^z`%uvsk62rNU;jiAW^!Jw4Rd z*SAc0fDk1mCF1Dl=o!h1u<_Nva^ESCV|oc{UPnhq6v%%w8jXSw$6_(>-rkAv6Z{~h@_v4ESz+1c4JBe(Jal{FUm1#)^f!Im+z*}Mefs2eGY(zd?7{skJG z2CKI;1&AHkJPZT^t-SeX8RT?QQHZ9drg>;A=wv&cPO-hc{e;lAx3|C1^5nGL-Q8i` z=29^RLN_|p1$%mMvPCMDQVT%;zX=5LZhgMCw)Qmt6c-v55*IaS!)|A1XPC|doJwC4 zKA-PbVz;%m^;G=<`Tz+Ny}iA!SYB-=O;x!7dK25tg6a8;G$uPzLrHgfZed~JJ1WTb6)i0-0d`)3 zSrlX-u{7#z!JM&QUS9fX6FO*MvG4VI-$Qo^(MNfV4Pq97Z6kbk^abuP(4)6aOiYkl zN(epm0P~;Fo2I9yzXBTv6(If5+#u_&FpFCw+n9%5JM!}J@$nC&Jgtw||Az|{lt)FL_qWBye_L$aaQ$qOb&+OSZa9=;4E_~h04tH% U;?bhnUH||907*qoM6N<$f-v$pApigX literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_priority_off.png b/lite/res/drawable-hdpi/ic_priority_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e44ea25ab7e1d2755da9b4e84b41ee893bd678c9 GIT binary patch literal 1118 zcmV-k1flzhP)f-3#5{t#$+uPfs`Xd+&#)gN7|IkJR zu+PrUzRqT|Pw>Ai%S;r-4}m}+K{}keR|}wm7zPIiZz7S%+d`pW!wAFSuoVDSDFR_@ zYs++5Sjd|p-c zH#aw5f>FMsqk|!U!{PYU(9nRMmo=g+USn4#-q6cZPft%2LvLG=5A zc6oUjM8j4qrim3MCMLcRH6^l95ui*zQ87O?HFXHjU*Mf$=9m+kCLL#IXRlP_xI7+DnDp}mAXfuWX_9Ee z&G`8E1|+(KbbvwI!otEk@ZN=h7?sgzjE{_r9D#0*_DE!dRRbuKl0s8&Z*Q9C`S19n zrKN>6H8s7!#G-M?3+w9Y3RA@SO8i#?kTo<(ot>T0d_K=iCX-@V%?SV>`Fy@OabKW4 zvc4ku3RNm=b1^+V{R3!9p~qNNKoJuJ0jn!a`UQ>mtQLU(N*1`6LDnz|=nF*v@UPeF zT_-vv(v|h}RBbfq;DeKdvmA~07u`9G>V0TgM%Pc z46|4)N^((P4zXgf=viJ~_Rv^2Ya)3RKp?LydwYBJK*yNPW@9L=t*sjfgk6k4`}_ML zRhOLN^-=H@0Pg@+R#tqtvA(_@>B-H^%-~2)s!?Pz88IG@J9SZ11>iK?qeqxrKk|(N zUdP(n+Hx>9K4YRWBIpTYG#U+R0Pf|Y5`f}8BzFLk>qhUf_WSz!)=0F)9GXv7Z)K-1#%Ca$;z3qv$NASG&J-Lrl-8>p%x{f&LDUjDUBqh>QuQnFi kt6p0&bT-^wTmA_!0Qk+80bDP1`~Uy|07*qoM6N<$f-8Rf$^ZZW literal 0 HcmV?d00001 diff --git a/lite/res/layout/list_item_torrent.xml b/lite/res/layout/list_item_torrent.xml new file mode 100644 index 00000000..4041e535 --- /dev/null +++ b/lite/res/layout/list_item_torrent.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/lite/res/values/attrs.xml b/lite/res/values/attrs.xml new file mode 100644 index 00000000..a19eb9b9 --- /dev/null +++ b/lite/res/values/attrs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/lite/res/values/colors.xml b/lite/res/values/colors.xml index ba2e342f..f4cdf7fa 100644 --- a/lite/res/values/colors.xml +++ b/lite/res/values/colors.xml @@ -1,4 +1,5 @@ #8acc12 + #7dbb21 diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml index ce8d9e9b..780a7fcf 100644 --- a/lite/res/values/strings.xml +++ b/lite/res/values/strings.xml @@ -1,7 +1,7 @@ - Transdroid Lite + Transdroid Add From file @@ -21,7 +21,6 @@ Ratio Filter list Settings - Start Stop Resume @@ -41,7 +40,143 @@ SERVERS STATUS LABELS + All + Downloading + Uploading + Active + Inactive Connected, but no torrent are active on the server Select a torrent to view its details - + Servers + Add new server + Search sites + Set default site + Add web search site + RSS feeds + Add RSS feed + Other settings + + Name + Optional personal name + Direct search URL + %s will be replaced by the search query + Feed URL + Requires authentication + Opens links in the webbrowser for user login + + Server type + IP or host name + Port number + User name + Password + Deluge web password + Advanced settings + Local IP or host + When connected to the specified local network + Local network + The server\'s local (wifi) network + Folder + Usually empty + SCGI mount point + Optional settings + Finished notification + Notify when a torrent finishes + New torrent notification + Nofity when a torrent was added + Server OS + Download directory + Manually set absolute path for remote connections + Connection timeout + Number of seconds before a connection attempt is aborted + Base (S)FTP url + For example ftp://me@server/downloads/ + (S)FTP password + Use SSL + Connect using https + Custom SSL thumbprint (SHA-1) + Permit only connections to this specific certificate + Accept all SSL certificates + Allow all connections from any thumbprint + + Background notifications + Enable notifications + Enables the background service + Interval + How often to check the server + Sound + Vibrate + LED colour + If supported by your device + Support AWD notifications + Show torrent counter in ADW Launcher + + About Transdroid + Check for updates + Check transdroidorg for latest app version + Import settings + Export settings + Send error log + Get support or report a bug + About + + + BitComet + Bitflu 1.2+ + BitTorrent 6+ + Buffalo NAS -1.31 + Deluge 1.2+ + DLink Router BT + Ktorrent + qBittorrent + rTorrent + Torrentflux-b4rt + Transmission + µTorrent + Vuze + + + daemon_bitcomet + daemon_bitflu + daemon_bittorrent + daemon_buffalonas + daemon_deluge + daemon_dlinkrouterbt + daemon_ktorrent + daemon_qbittorrent + daemon_rtorrent + daemon_tfb4rt + daemon_transmission + daemon_utorrent + daemon_vuze + + + Windows + Mac + Linux + + + type_windows + type_mac + type_linux + + + 1 minute + 10 minutes + 30 minutes + 1 hour + 3 hours + 12 hours + 1 day + + + 60 + 600 + 1800 + 3600 + 10800 + 43200 + 86400 + + + \ No newline at end of file diff --git a/lite/res/xml/pref_about.xml b/lite/res/xml/pref_about.xml new file mode 100644 index 00000000..eb4dad12 --- /dev/null +++ b/lite/res/xml/pref_about.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_main.xml b/lite/res/xml/pref_main.xml new file mode 100644 index 00000000..19f3bf36 --- /dev/null +++ b/lite/res/xml/pref_main.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_notifications.xml b/lite/res/xml/pref_notifications.xml new file mode 100644 index 00000000..4a7a1a16 --- /dev/null +++ b/lite/res/xml/pref_notifications.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_rssfeed.xml b/lite/res/xml/pref_rssfeed.xml new file mode 100644 index 00000000..401c5aea --- /dev/null +++ b/lite/res/xml/pref_rssfeed.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_server.xml b/lite/res/xml/pref_server.xml new file mode 100644 index 00000000..9512a302 --- /dev/null +++ b/lite/res/xml/pref_server.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_websearch.xml b/lite/res/xml/pref_websearch.xml new file mode 100644 index 00000000..09674685 --- /dev/null +++ b/lite/res/xml/pref_websearch.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/lite/src/com/actionbarsherlock/view/SherlockListView.java b/lite/src/com/actionbarsherlock/view/SherlockListView.java new file mode 100644 index 00000000..3b2df828 --- /dev/null +++ b/lite/src/com/actionbarsherlock/view/SherlockListView.java @@ -0,0 +1,337 @@ +package com.actionbarsherlock.view; + +import android.annotation.TargetApi; +import android.content.Context; +import android.util.AttributeSet; +import android.util.SparseBooleanArray; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Checkable; +import android.widget.ListView; + +import com.actionbarsherlock.app.SherlockActivity; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; + +/** + * Provides backwards compatible multiple choice ActionMode support on Froyo+ using ActionBarSherlock. + */ +public class SherlockListView extends ListView { + // API 11+ reference, but ok because the value will be inlined. + public static final int CHOICE_MODE_MULTIPLE_MODAL_COMPAT = CHOICE_MODE_MULTIPLE_MODAL; + + /** + * Wrapper to intercept delegation of long click events, and pass to {@link #doLongPress} + */ + class OnItemLongClickListenerWrapper implements OnItemLongClickListener { + private OnItemLongClickListener wrapped; + + public void setWrapped(OnItemLongClickListener listener) { + this.wrapped = listener; + } + + @Override + public boolean onItemLongClick(AdapterView view, View child, int position, long id) { + // this would be easier if AbsListView.performLongPress wasn't package + // protected :-( + boolean handled = doLongPress(child, position, id); + if (!handled && wrapped != null) { + return wrapped.onItemLongClick(view, child, position, id); + } + return true; + } + } + + /** + * Hijack the onLongClickListener so we can intercept delegation. + */ + @Override + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + if (longClickListenerWrapper == null) { + longClickListenerWrapper = new OnItemLongClickListenerWrapper(); + } + longClickListenerWrapper.setWrapped(listener); + super.setOnItemLongClickListener(longClickListenerWrapper); + } + + /** + * A MultiChoiceModeListener receives events for {@link AbsListView#CHOICE_MODE_MULTIPLE_MODAL}. It acts as the + * {@link ActionMode.Callback} for the selection mode and also receives + * {@link #onItemCheckedStateChanged(ActionMode, int, long, boolean)} events when the user selects and deselects + * list items. + */ + @SuppressWarnings("javadoc") + public interface MultiChoiceModeListenerCompat extends ActionMode.Callback { + /** + * Called when an item is checked or unchecked during selection mode. + * @param mode The {@link ActionMode} providing the selection mode + * @param position Adapter position of the item that was checked or unchecked + * @param id Adapter ID of the item that was checked or unchecked + * @param checked true if the item is now checked, false if the item is now unchecked. + */ + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked); + } + + class MultiChoiceModeWrapper implements MultiChoiceModeListenerCompat { + private MultiChoiceModeListenerCompat wrapped; + + public void setWrapped(MultiChoiceModeListenerCompat wrapped) { + this.wrapped = wrapped; + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + if (wrapped == null) { + return false; + } + if (wrapped.onCreateActionMode(mode, menu)) { + // Initialize checked graphic state? + setLongClickable(false); + return true; + } + return false; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + if (wrapped == null) { + return false; + } + return wrapped.onPrepareActionMode(mode, menu); + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (wrapped == null) { + return false; + } + return wrapped.onActionItemClicked(mode, item); + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + if (wrapped == null) { + return; + } + wrapped.onDestroyActionMode(mode); + actionMode = null; + + // Ending selection mode means deselecting everything. + clearChoices(); + checkedItemCount = 0; + updateOnScreenCheckedViews(); + invalidateViews(); + setLongClickable(true); + requestLayout(); + invalidate(); + } + + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { + if (wrapped == null) { + return; + } + wrapped.onItemCheckedStateChanged(mode, position, id, checked); + + // If there are no items selected we no longer need the selection mode. + if (checkedItemCount == 0) { + mode.finish(); + } + } + } + + private com.actionbarsherlock.view.ActionMode actionMode; + private OnItemLongClickListenerWrapper longClickListenerWrapper; + private MultiChoiceModeWrapper choiceModeListener; + private int choiceMode; + private int checkedItemCount; + + public SherlockListView(Context context) { + super(context); + init(context); + } + + public SherlockListView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public SherlockListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context); + } + + void init(Context context) { + if (isInEditMode()) { + // Ignore when viewing in the UI designer + return; + } + if (!(context instanceof SherlockActivity || context instanceof SherlockFragmentActivity)) { + throw new IllegalStateException( + "This view must be hosted in a SherlockActivity or SherlockFragmentActivity"); + } + setOnItemLongClickListener(null); + } + + @Override + public void setChoiceMode(int mode) { + choiceMode = mode; + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + if (choiceMode != CHOICE_MODE_NONE) { + if (mode == CHOICE_MODE_MULTIPLE_MODAL_COMPAT) { + clearChoices(); + checkedItemCount = 0; + setLongClickable(true); + updateOnScreenCheckedViews(); + requestLayout(); + invalidate(); + mode = CHOICE_MODE_MULTIPLE; + } + super.setChoiceMode(mode); + } + } + + @Override + public int getChoiceMode() { + return choiceMode; + } + + public void setMultiChoiceModeListener(MultiChoiceModeListenerCompat listener) { + if (choiceModeListener == null) { + choiceModeListener = new MultiChoiceModeWrapper(); + } + choiceModeListener.setWrapped(listener); + } + + @Override + public boolean performItemClick(View view, int position, long id) { + boolean handled = false; + boolean dispatchItemClick = true; + boolean checkStateChanged = false; + if (choiceMode != CHOICE_MODE_NONE) { + handled = true; + if (choiceMode == CHOICE_MODE_MULTIPLE + || (choiceMode == CHOICE_MODE_MULTIPLE_MODAL_COMPAT && actionMode != null)) { + boolean newValue = !getCheckedItemPositions().get(position); + setItemChecked(position, newValue); + if (actionMode != null) { + choiceModeListener.onItemCheckedStateChanged(actionMode, position, id, newValue); + dispatchItemClick = false; + } + checkStateChanged = true; + return false; + } else if (choiceMode == CHOICE_MODE_SINGLE) { + boolean newValue = !getCheckedItemPositions().get(position); + setItemChecked(position, newValue); + checkStateChanged = true; + } + if (checkStateChanged) { + updateOnScreenCheckedViews(); + } + } + if (dispatchItemClick) { + handled |= super.performItemClick(view, position, id); + } + return handled; + } + + /** + * Perform a quick, in-place update of the checked or activated state on all visible item views. This should only be + * called when a valid choice mode is active. + *

+ * (Taken verbatim from AbsListView.java) + */ + @TargetApi(11) + private void updateOnScreenCheckedViews() { + final int firstPos = getFirstVisiblePosition(); + final int count = getChildCount(); + final boolean useActivated = getContext().getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.HONEYCOMB; + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + final int position = firstPos + i; + + if (child instanceof Checkable) { + ((Checkable) child).setChecked(getCheckedItemPositions().get(position)); + } else if (useActivated) { + child.setActivated(getCheckedItemPositions().get(position)); + } + } + } + + public ActionMode startActionMode(ActionMode.Callback callback) { + if (actionMode != null) { + return actionMode; + } + Context context = getContext(); + if (context instanceof SherlockActivity) { + actionMode = ((SherlockActivity) getContext()).startActionMode(callback); + } else if (context instanceof SherlockFragmentActivity) { + actionMode = ((SherlockFragmentActivity) context).startActionMode(callback); + } else { + throw new IllegalStateException( + "This view must be hosted in a SherlockActivity or SherlockFragmentActivity"); + } + return actionMode; + } + + boolean doLongPress(final View child, final int longPressPosition, final long longPressId) { + if (choiceMode == CHOICE_MODE_MULTIPLE_MODAL_COMPAT) { + if (actionMode == null && (actionMode = startActionMode(choiceModeListener)) != null) { + setItemChecked(longPressPosition, true); + } + return true; + } + return false; + } + + /** + * Sets the checked state of the specified position. The is only valid if the choice mode has been set to + * {@link #CHOICE_MODE_SINGLE} or {@link #CHOICE_MODE_MULTIPLE}. + * @param position The item whose checked state is to be checked + * @param value The new checked state for the item + */ + @Override + public void setItemChecked(int position, boolean value) { + if (choiceMode == CHOICE_MODE_NONE) { + return; + } + SparseBooleanArray checkStates = getCheckedItemPositions(); + + // Start selection mode if needed. We don't need to if we're unchecking + // something. + if (value && choiceMode == CHOICE_MODE_MULTIPLE_MODAL_COMPAT && actionMode == null) { + actionMode = startActionMode(choiceModeListener); + } + + if (choiceMode == CHOICE_MODE_MULTIPLE || choiceMode == CHOICE_MODE_MULTIPLE_MODAL) { + // boolean oldValue = checkStates.get(position); + checkStates.put(position, value); + if (value) { + checkedItemCount++; + } else { + checkedItemCount--; + } + if (actionMode != null) { + final long id = getAdapter().getItemId(position); + choiceModeListener.onItemCheckedStateChanged(actionMode, position, id, value); + } + } else { + if (value || isItemChecked(position)) { + checkStates.clear(); + } + // this may end up selecting the value we just cleared but this way + // we ensure length of checkStates is 1, a fact getCheckedItemPosition + // relies on + if (value) { + checkStates.put(position, true); + } + } + requestLayout(); + invalidate(); + } +} diff --git a/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java b/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java new file mode 100644 index 00000000..e8e92e9a --- /dev/null +++ b/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java @@ -0,0 +1,100 @@ +package fr.marvinlabs.widget; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Checkable; +import android.widget.RelativeLayout; + +/** + * Extension of a relative layout to provide a checkable behaviour + * + * @author marvinlabs + */ +public class CheckableRelativeLayout extends RelativeLayout implements Checkable { + + private boolean isChecked; + private List checkableViews; + + public CheckableRelativeLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + public CheckableRelativeLayout(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public CheckableRelativeLayout(Context context, int checkableId) { + super(context); + initialise(null); + } + + /* + * @see android.widget.Checkable#isChecked() + */ + public boolean isChecked() { + return isChecked; + } + + /* + * @see android.widget.Checkable#setChecked(boolean) + */ + public void setChecked(boolean isChecked) { + this.isChecked = isChecked; + for (Checkable c : checkableViews) { + c.setChecked(isChecked); + } + } + + /* + * @see android.widget.Checkable#toggle() + */ + public void toggle() { + this.isChecked = !this.isChecked; + for (Checkable c : checkableViews) { + c.toggle(); + } + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + final int childCount = this.getChildCount(); + for (int i = 0; i < childCount; ++i) { + findCheckableChildren(this.getChildAt(i)); + } + } + + /** + * Read the custom XML attributes + */ + private void initialise(AttributeSet attrs) { + this.isChecked = false; + this.checkableViews = new ArrayList(5); + } + + /** + * Add to our checkable list all the children of the view that implement the + * interface Checkable + */ + private void findCheckableChildren(View v) { + if (v instanceof Checkable) { + this.checkableViews.add((Checkable) v); + } + + if (v instanceof ViewGroup) { + final ViewGroup vg = (ViewGroup) v; + final int childCount = vg.getChildCount(); + for (int i = 0; i < childCount; ++i) { + findCheckableChildren(vg.getChildAt(i)); + } + } + } +} diff --git a/lite/src/fr/marvinlabs/widget/InertCheckBox.java b/lite/src/fr/marvinlabs/widget/InertCheckBox.java new file mode 100644 index 00000000..5dd3080b --- /dev/null +++ b/lite/src/fr/marvinlabs/widget/InertCheckBox.java @@ -0,0 +1,70 @@ +package fr.marvinlabs.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.widget.CheckBox; + +/** + * CheckBox that does not react to any user event in order to let the container handle them. + */ +public class InertCheckBox extends CheckBox { + + // Provide the same constructors as the superclass + public InertCheckBox(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + // Provide the same constructors as the superclass + public InertCheckBox(Context context, AttributeSet attrs) { + super(context, attrs); + } + + // Provide the same constructors as the superclass + public InertCheckBox(Context context) { + super(context); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onKeyPreIme(int keyCode, KeyEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onKeyShortcut(int keyCode, KeyEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + // Make the checkbox not respond to any user event + return false; + } + + @Override + public boolean onTrackballEvent(MotionEvent event) { + // Make the checkbox not respond to any user event + return false; + } +} diff --git a/lite/src/org/transdroid/lite/app/search/SearchHelper.java b/lite/src/org/transdroid/lite/app/search/SearchHelper.java new file mode 100644 index 00000000..11244a19 --- /dev/null +++ b/lite/src/org/transdroid/lite/app/search/SearchHelper.java @@ -0,0 +1,109 @@ +package org.transdroid.lite.app.search; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.EBean.Scope; +import org.androidannotations.annotations.RootContext; + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; + +@EBean(scope = Scope.Singleton) +public class SearchHelper { + + static final int CURSOR_SEARCH_ID = 0; + static final int CURSOR_SEARCH_NAME = 1; + static final int CURSOR_SEARCH_TORRENTURL = 2; + static final int CURSOR_SEARCH_DETAILSURL = 3; + static final int CURSOR_SEARCH_SIZE = 4; + static final int CURSOR_SEARCH_ADDED = 5; + static final int CURSOR_SEARCH_SEEDERS = 6; + static final int CURSOR_SEARCH_LEECHERS = 7; + + static final int CURSOR_SITE_ID = 0; + static final int CURSOR_SITE_CODE = 1; + static final int CURSOR_SITE_NAME = 2; + static final int CURSOR_SITE_RSSURL = 3; + + @RootContext + protected Context context; + + public enum SearchSortOrder { + Combined, BySeeders + } + + /** + * Return whether the Torrent Search package is installed and available to query against + * @return True if the available sites can be retrieved from the content provider, false otherwise + */ + public boolean isTorrentSearchInstalled() { + return getAvailableSites() != null; + } + + /** + * Queries the Torrent Search package for all available in-app search sites. This method is synchronous. + * @return A list of available search sites as POJOs, or null if the Torrent Search package is not installed + */ + public List getAvailableSites() { + + // Try to access the TorrentSitesProvider to retrieve all available in-app torrent search sites + Uri uri = Uri.parse("content://org.transdroid.search.torrentsitesprovider/sites"); + Cursor cursor = context.getContentResolver().query(uri, null, null, null, null); + if (cursor.moveToFirst()) { + List sites = new ArrayList(); + do { + // Read the cursor fields into the SearchSite object + sites.add(new SearchSite(cursor.getInt(CURSOR_SITE_ID), cursor.getString(CURSOR_SITE_CODE), cursor + .getString(CURSOR_SITE_NAME), cursor.getString(CURSOR_SITE_RSSURL))); + } while (cursor.moveToNext()); + cursor.close(); + return sites; + } + + // Torrent Search package is not yet installed + return null; + + } + + /** + * Queries the Torrent Search module to search for torrents on the web. This method is synchornous and should always + * be called in a background thread. + * @param query The search query to pass to the torrent site + * @param site The site to search, as retrieved from the TorrentSitesProvider, or null if the Torrent Search package + * @param sortBy.name() The sort order to request from the torrent site, if supported + * @return A list of torrent search results as POJOs, or null if the Torrent Search package is not installed + */ + public List search(String query, SearchSite site, SearchSortOrder sortBy) { + + // Try to query the TorrentSearchProvider to search for torrents on the web + Uri uri = Uri.parse("content://org.transdroid.search.torrentsearchprovider/search/" + query); + Cursor cursor; + if (site == null) { + // If no explicit site was supplied, rely on the Torrent Search package's default + cursor = context.getContentResolver().query(uri, null, null, null, sortBy.name()); + } else { + cursor = context.getContentResolver().query(uri, null, "SITE = ?", new String[] { site.getKey() }, + sortBy.name()); + } + if (cursor.moveToFirst()) { + List results = new ArrayList(); + do { + // Read the cursor fields into the SearchResult object + results.add(new SearchResult(cursor.getInt(CURSOR_SEARCH_ID), cursor.getString(CURSOR_SEARCH_NAME), + cursor.getString(CURSOR_SEARCH_TORRENTURL), cursor.getString(CURSOR_SEARCH_DETAILSURL), cursor + .getString(CURSOR_SEARCH_SIZE), cursor.getLong(CURSOR_SEARCH_ADDED), cursor + .getString(CURSOR_SEARCH_SEEDERS), cursor.getString(CURSOR_SEARCH_LEECHERS))); + } while (cursor.moveToNext()); + cursor.close(); + return results; + } + + // Torrent Search package is not yet installed + return null; + + } + +} diff --git a/lite/src/org/transdroid/lite/app/search/SearchResult.java b/lite/src/org/transdroid/lite/app/search/SearchResult.java new file mode 100644 index 00000000..77594909 --- /dev/null +++ b/lite/src/org/transdroid/lite/app/search/SearchResult.java @@ -0,0 +1,64 @@ +package org.transdroid.lite.app.search; + +import java.util.Date; + +/** + * Represents a search result as retrieved by querying the Torrent Search package. + * @author Eric Kok + */ +public class SearchResult { + + private final int id; + private final String name; + private final String torrentUrl; + private final String detailsUrl; + private final String size; + private final Date addedOn; + private final String seeders; + private final String leechers; + + public SearchResult(int id, String name, String torrentUrl, String detailsUrl, String size, long addedOnTime, + String seeders, String leechers) { + this.id = id; + this.name = name; + this.torrentUrl = torrentUrl; + this.detailsUrl = detailsUrl; + this.size = size; + this.addedOn = (addedOnTime == -1L) ? null : new Date(addedOnTime); + this.seeders = seeders; + this.leechers = leechers; + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public String getTorrentUrl() { + return torrentUrl; + } + + public String getDetailsUrl() { + return detailsUrl; + } + + public String getSize() { + return size; + } + + public Date getAddedOn() { + return addedOn; + } + + public String getSeeders() { + return seeders; + } + + public String getLeechers() { + return leechers; + } + +} diff --git a/lite/src/org/transdroid/lite/app/search/SearchSite.java b/lite/src/org/transdroid/lite/app/search/SearchSite.java new file mode 100644 index 00000000..2d7910df --- /dev/null +++ b/lite/src/org/transdroid/lite/app/search/SearchSite.java @@ -0,0 +1,40 @@ +package org.transdroid.lite.app.search; + +import org.transdroid.lite.gui.navigation.FilterItem; + +/** + * Represents an available torrent site that can be searched using the Torrent Search package. + * @author Eric Kok + */ +public class SearchSite implements FilterItem { + + private final int id; + private final String key; + private final String name; + private final String rssFeedUrl; + + public SearchSite(int id, String key, String name, String rssFeedUrl) { + this.id = id; + this.key = key; + this.name = name; + this.rssFeedUrl = rssFeedUrl; + } + + public int getId() { + return id; + } + + public String getKey() { + return key; + } + + @Override + public String getName() { + return name; + } + + public String getRssFeedUrl() { + return rssFeedUrl; + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/AboutSettings.java b/lite/src/org/transdroid/lite/app/settings/AboutSettings.java new file mode 100644 index 00000000..9dd745c7 --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/AboutSettings.java @@ -0,0 +1,30 @@ +package org.transdroid.lite.app.settings; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.RootContext; +import org.androidannotations.annotations.EBean.Scope; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +/** + * Allows instantiation of the settings specified in R.xml.pref_about. + * @author Eric Kok + */ +@EBean(scope = Scope.Singleton) +public class AboutSettings { + + @RootContext + protected Context context; + private SharedPreferences prefs; + + protected AboutSettings(Context context) { + prefs = PreferenceManager.getDefaultSharedPreferences(context); + } + + public boolean checkForUpdates() { + return prefs.getBoolean("about_checkupdates", true); + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java b/lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java new file mode 100644 index 00000000..75a4c09e --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java @@ -0,0 +1,140 @@ +package org.transdroid.lite.app.settings; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.EBean.Scope; +import org.androidannotations.annotations.RootContext; +import org.transdroid.daemon.Daemon; +import org.transdroid.daemon.OS; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +/** + * Singleton object to access all application settings, including stored servers, web search sites and RSS feeds. + * @author Eric Kok + */ +@EBean(scope = Scope.Singleton) +public class ApplicationSettings { + + @RootContext + protected Context context; + private SharedPreferences prefs; + + protected ApplicationSettings(Context context) { + prefs = PreferenceManager.getDefaultSharedPreferences(context); + } + + /** + * Returns all available user-configured servers + * @return A list of all stored server settings objects + */ + public List getServerSettings() { + List servers = new ArrayList(); + for (int i = 0; i <= getMaxServer(); i++) { + servers.add(getServerSetting(i)); + } + return servers; + } + + /** + * Returns the order number/identifying key of the last server + * @return The zero-based order number (index) of the last stored server settings + */ + public int getMaxServer() { + for (int i = 0; true; i++) { + if (prefs.getString("server_type_" + i, null) == null) + return i - 1; + } + } + + /** + * Returns the user-specified server settings for a specific server + * @param order The order number/identifying key of the settings to retrieve + * @return The server settings object, loaded from shared preferences + */ + public ServerSetting getServerSetting(int order) { + return new ServerSetting(order, prefs.getString("server_name_" + order, null), Daemon.fromCode(prefs.getString( + "server_type_" + order, null)), prefs.getString("server_address_" + order, null), prefs.getString( + "server_localaddress_" + order, null), prefs.getString("server_localnetwork_" + order, null), + prefs.getInt("server_port_" + order, -1), prefs.getBoolean("server_sslenabled_" + order, false), + prefs.getBoolean("server_ssltrustall_" + order, false), prefs.getString("server_ssltrustkey_" + order, + null), prefs.getString("server_folder_" + order, null), prefs.getBoolean("server_useauth_" + + order, true), prefs.getString("server_user_" + order, null), prefs.getString("server_pass_" + + order, null), prefs.getString("server_extrapass_" + order, null), OS.fromCode(prefs + .getString("server_os_" + order, null)), prefs.getString("server_downloaddir_" + order, null), + prefs.getString("server_ftpurl_" + order, null), prefs.getString("server_ftppass_" + order, null), + prefs.getInt("server_timeout_" + order, -1), prefs.getBoolean("server_alarmfinished_" + order, true), + prefs.getBoolean("server_alarmnew_" + order, false), false); + } + + /** + * Returns all available user-configured web-based (as opped to in-app) search sites + * @return A list of all stored web search site settings objects + */ + public List getWebsearchSettings() { + List websearches = new ArrayList(); + for (int i = 0; i <= getMaxWebsearch(); i++) { + websearches.add(getWebsearchSetting(i)); + } + return websearches; + } + + /** + * Returns the order number/identifying key of the last web search site + * @return The zero-based order number (index) of the last stored web search site + */ + public int getMaxWebsearch() { + for (int i = 0; true; i++) { + if (prefs.getString("websearch_url_" + i, null) == null) + return i - 1; + } + } + + /** + * Returns the user-specified web-based search site setting for a specific site + * @param order The order number/identifying key of the settings to retrieve + * @return The web search site settings object, loaded from shared preferences + */ + public WebsearchSetting getWebsearchSetting(int order) { + return new WebsearchSetting(order, prefs.getString("websearch_name_" + order, null), prefs.getString( + "websearch_url_" + order, null)); + } + + /** + * Returns all available user-configured RSS feeds + * @return A list of all stored RSS feed settings objects + */ + public List getRssfeedSettings() { + List rssfeeds = new ArrayList(); + for (int i = 0; i <= getMaxRssfeed(); i++) { + rssfeeds.add(getRssfeedSetting(i)); + } + return rssfeeds; + } + + /** + * Returns the order number/identifying key of the last stored RSS feed + * @return The zero-based order number (index) of the last stored RSS feed + */ + public int getMaxRssfeed() { + for (int i = 0; true; i++) { + if (prefs.getString("rssfeed_feedurl_" + i, null) == null) + return i - 1; + } + } + + /** + * Returns the user-specified RSS feed setting for a specific feed + * @param order The order number/identifying key of the settings to retrieve + * @return The RSS feed settings object, loaded from shared preferences + */ + public RssfeedSetting getRssfeedSetting(int order) { + return new RssfeedSetting(order, prefs.getString("rssfeed_name_" + order, null), prefs.getString( + "rssfeed_feedurl_" + order, null), prefs.getBoolean("rssfeed_reqauth_" + order, false)); + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/NotificationSettings.java b/lite/src/org/transdroid/lite/app/settings/NotificationSettings.java new file mode 100644 index 00000000..1a68aabd --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/NotificationSettings.java @@ -0,0 +1,97 @@ +package org.transdroid.lite.app.settings; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.EBean.Scope; +import org.androidannotations.annotations.RootContext; +import org.transdroid.core.R; + +import android.content.Context; +import android.content.SharedPreferences; +import android.net.Uri; +import android.preference.PreferenceManager; +import android.provider.Settings; + +/** + * Allows instantiation of the settings specified in R.xml.pref_notifications. + * @author Eric Kok + */ +@EBean(scope = Scope.Singleton) +public class NotificationSettings { + + @RootContext + protected Context context; + private SharedPreferences prefs; + + protected NotificationSettings(Context context) { + prefs = PreferenceManager.getDefaultSharedPreferences(context); + } + + /** + * Whether the background service is enabled, i.e. whether the user want to receive notifications + * @return True if the server should be checked for torrent status updates + */ + public boolean isEnabled() { + return prefs.getBoolean("notifications_enabled", true); + } + + private String getRawInverval() { + return prefs.getString("notifications_interval", "10800"); + } + + /** + * Returns the interval between two server checks + * @return The interval, in milliseconds + */ + public Long getInvervalInMilliseconds() { + return Long.parseLong(getRawInverval()) * 1000L; + } + + private String getRawSound() { + return prefs.getString("notifications_sound", null); + } + + /** + * Returns the sound (ring tone) to play on a new notification, or null if it should not play any + * @return Either the user-specified sound, null if the user specified 'Silent' or the system default notification sound + */ + public Uri getSound() { + String raw = getRawSound(); + if (raw == null) + return null; + if (raw.equals("")) + return Settings.System.DEFAULT_NOTIFICATION_URI; + return Uri.parse(raw); + } + + /** + * Whether the device should vibrate on a new notification + * @return + */ + public boolean shouldVibrate() { + return prefs.getBoolean("notifications_vibrate", false); + } + + private int getRawLedColour() { + return prefs.getInt("notifications_ledcolour", -1); + } + + /** + * Returns the LED colour to use on a new notification + * @return The integer value of the user-specified or default colour + */ + public int getDesiredLedColour() { + int raw = getRawLedColour(); + if (raw <= 0) + return context.getResources().getColor(R.color.ledgreen); + return raw; + } + + /** + * Whether the background service should report to ADW Launcher + * @return True if the user want Transdroid to report to ADW Launcher + */ + public boolean shouldReportToAdwLauncher() { + return prefs.getBoolean("notifications_adwnotify", false); + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java b/lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java new file mode 100644 index 00000000..69ee3823 --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java @@ -0,0 +1,67 @@ +package org.transdroid.lite.app.settings; + +import org.transdroid.lite.gui.navigation.FilterItem; + +import android.net.Uri; +import android.text.TextUtils; + +/** + * Represents a user-specified RSS feed. + * @author Eric Kok + */ +public class RssfeedSetting implements FilterItem { + + private static final String DEFAULT_NAME = "Default"; + + private final int order; + private final String name; + private final String url; + private final boolean requiresAuth; + private String lastNew; + + public RssfeedSetting(int order, String name, String baseUrl, boolean needsAuth) { + this.order = order; + this.name = name; + this.url = baseUrl; + this.requiresAuth = needsAuth; + this.lastNew = null; + } + + public int getOrder() { + return order; + } + + @Override + public String getName() { + if (!TextUtils.isEmpty(name)) + return name; + if (!TextUtils.isEmpty(url)) + return Uri.parse(url).getHost(); + return DEFAULT_NAME; + } + + public String getUrl() { + return url; + } + + public boolean requiresExternalAuthentication() { + return requiresAuth; + } + + /** + * Returns the URL of the item that was the newest last time we checked this feed + * @return The last new item's URL as URL-encoded string + */ + public String getLastNew() { + return this.lastNew; + } + + /** + * Record the URL of what is now the last item we retrieved + * @param lastNew The URL of the last new item as URL-encoded string + */ + public void setLastNew(String lastNew) { + this.lastNew = lastNew; + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/ServerSetting.java b/lite/src/org/transdroid/lite/app/settings/ServerSetting.java new file mode 100644 index 00000000..164be4ad --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/ServerSetting.java @@ -0,0 +1,195 @@ +package org.transdroid.lite.app.settings; + +import org.transdroid.daemon.Daemon; +import org.transdroid.daemon.OS; +import org.transdroid.lite.gui.navigation.FilterItem; + +import android.text.TextUtils; + +/** + * Represents a user-configured remote server. + * @author Eric Kok + */ +public class ServerSetting implements FilterItem { + + private static final String DEFAULT_NAME = "Default"; + + private final int key; + private final String name; + private final Daemon type; + private final String address; + private final String localAddress; + private final String localNetwork; + private final int port; + private final String folder; + private final boolean useAuthentication; + private final String username; + private final String password; + private final String extraPass; + private final OS os; + private final String downloadDir; + private final String ftpUrl; + private final String ftpPassword; + private final int timeout; + private final boolean alarmOnFinishedDownload; + private final boolean alarmOnNewTorrent; + private final boolean ssl; + private final boolean sslTrustAll; + private final String sslTrustKey; + private final boolean isAutoGenerated; + + /** + * Creates a daemon settings instance, providing full connection details + * @param name A name used to identify this server to the user + * @param type The server daemon type + * @param address The server domain name or IP address + * @param localAddress The server domain or IP address when connected to the server's local network + * @param localNetwork The server's local network SSID + * @param port The port on which the server daemon is running + * @param sslTrustKey The specific key that will be accepted. + * @param folder The server folder (like a virtual sub-folder or an SCGI mount point) + * @param useAuthentication Whether to use basic authentication + * @param username The user name to provide during authentication + * @param password The password to provide during authentication + * @param extraPass The Deluge web interface password + * @param downloadDir The default download directory (which may also be used as base directory for file paths) + * @param ftpUrl The partial URL to connect to when requesting FTP-style transfers + * @param timeout The number of seconds to wait before timing out a connection attempt + * @param isAutoGenerated Whether this setting was generated rather than manually inputed by the user + */ + public ServerSetting(int key, String name, Daemon type, String address, String localAddress, String localNetwork, + int port, boolean ssl, boolean sslTrustAll, String sslTrustKey, String folder, boolean useAuthentication, + String username, String password, String extraPass, OS os, String downloadDir, String ftpUrl, + String ftpPassword, int timeout, boolean alarmOnFinishedDownload, boolean alarmOnNewTorrent, + boolean isAutoGenerated) { + this.key = key; + this.name = name; + this.type = type; + this.address = address; + this.localAddress = localAddress; + this.localNetwork = localNetwork; + this.port = port; + this.ssl = ssl; + this.sslTrustAll = sslTrustAll; + this.sslTrustKey = sslTrustKey; + this.folder = folder; + this.useAuthentication = useAuthentication; + this.username = username; + this.password = password; + this.extraPass = extraPass; + this.os = os; + this.downloadDir = downloadDir; + this.ftpUrl = ftpUrl; + this.ftpPassword = ftpPassword; + this.timeout = timeout; + this.alarmOnFinishedDownload = alarmOnFinishedDownload; + this.alarmOnNewTorrent = alarmOnNewTorrent; + this.isAutoGenerated = isAutoGenerated; + } + + @Override + public String getName() { + return (name == null || name.equals("") ? DEFAULT_NAME : name); + } + + public Daemon getType() { + return type; + } + + public String getAddress() { + return address; + } + + public String getLocalAddress() { + return localAddress; + } + + public String getLocalNetwork() { + return localNetwork; + } + + public int getPort() { + return port; + } + + public boolean getSsl() { + return ssl; + } + + public boolean getSslTrustAll() { + return sslTrustAll; + } + + public String getSslTrustKey() { + return sslTrustKey; + } + + public String getFolder() { + return folder; + } + + public boolean shouldUseAuthentication() { + return useAuthentication; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public String getExtraPassword() { + return extraPass; + } + + public OS getOS() { + return os; + } + + public String getDownloadDir() { + return downloadDir; + } + + public String getFtpUrl() { + return ftpUrl; + } + + public String getFtpPassword() { + return ftpPassword; + } + + public int getTimeoutInMilliseconds() { + return timeout * 1000; + } + + public boolean shouldAlarmOnFinishedDownload() { + return alarmOnFinishedDownload; + } + + public boolean shouldAlarmOnNewTorrent() { + return alarmOnNewTorrent; + } + + public boolean isAutoGenerated() { + return isAutoGenerated; + } + + public int getOrder() { + return this.key; + } + + public String getHumanReadableIdentifier() { + if (isAutoGenerated) { + // Hide the 'implementation details'; just give the username and server + return (this.shouldUseAuthentication() && !TextUtils.isEmpty(this.getUsername()) ? this.getUsername() + "@" + : "") + getAddress(); + } + return (this.ssl ? "https://" : "http://") + + (this.shouldUseAuthentication() && !TextUtils.isEmpty(this.getUsername()) ? this.getUsername() + "@" + : "") + getAddress() + ":" + getPort() + + (Daemon.supportsCustomFolder(getType()) && getFolder() != null ? getFolder() : ""); + } + +} diff --git a/lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java b/lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java new file mode 100644 index 00000000..b4da7aed --- /dev/null +++ b/lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java @@ -0,0 +1,48 @@ +package org.transdroid.lite.app.settings; + +import org.transdroid.lite.gui.navigation.FilterItem; + +import android.net.Uri; +import android.text.TextUtils; + +/** + * Represents a user-specified website that can be searched (by starting the browser, rather than in-app) + * @author Eric Kok + */ +public class WebsearchSetting implements FilterItem { + + private static final String DEFAULT_NAME = "Default"; + private static final String KEY_PREFIX = "websearch_"; + + private final int order; + private final String name; + private final String baseUrl; + + public WebsearchSetting(int order, String name, String baseUrl) { + this.order = order; + this.name = name; + this.baseUrl = baseUrl; + } + + public int getOrder() { + return order; + } + + @Override + public String getName() { + if (!TextUtils.isEmpty(name)) + return name; + if (!TextUtils.isEmpty(baseUrl)) + return Uri.parse(baseUrl).getHost(); + return DEFAULT_NAME; + } + + public String getBaseUrl() { + return baseUrl; + } + + public String getKey() { + return KEY_PREFIX + getOrder(); + } + +} diff --git a/lite/src/org/transdroid/lite/gui/DetailsFagment.java b/lite/src/org/transdroid/lite/gui/DetailsFagment.java index 1b3c7e10..c43b8135 100644 --- a/lite/src/org/transdroid/lite/gui/DetailsFagment.java +++ b/lite/src/org/transdroid/lite/gui/DetailsFagment.java @@ -7,7 +7,7 @@ import org.androidannotations.annotations.InstanceState; import org.androidannotations.annotations.ViewById; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentDetails; -import org.transdroid.lite.R; +import org.transdroid.core.R; import android.view.View; import android.widget.TextView; diff --git a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java index f368bc94..1af298df 100644 --- a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java +++ b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java @@ -4,15 +4,15 @@ import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.FragmentById; -import org.androidannotations.annotations.FragmentByTag; import org.androidannotations.annotations.ItemSelect; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; -import org.transdroid.lite.R; +import org.transdroid.core.R; +import org.transdroid.lite.app.settings.ApplicationSettings; import org.transdroid.lite.gui.navigation.FilterAdapter; import org.transdroid.lite.gui.navigation.FilterItem; -import org.transdroid.lite.gui.navigation.FilterSeparatorView; import org.transdroid.lite.gui.navigation.NavigationHelper; +import org.transdroid.lite.gui.navigation.StatusType; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; @@ -30,6 +30,10 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi protected SherlockListView filtersList; protected FilterAdapter navigationListAdapter = null; protected FilterAdapter navigationSpinnerAdapter = null; + + // Settings + @Bean + protected ApplicationSettings applicationSettings; // Torrents list components @FragmentById(R.id.torrent_list) @@ -42,17 +46,23 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @AfterViews protected void init() { - // Set up navigation + // Set up navigation, with an action bar spinner and possibly (if room) with a filter list getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setHomeButtonEnabled(false); navigationSpinnerAdapter = new FilterAdapter(this); + // Servers are always added to the action bar spinner + navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); getSupportActionBar().setListNavigationCallbacks(navigationSpinnerAdapter, this); if (filtersList != null) { + // There was room for a dedicated filter list; add the status types navigationListAdapter = new FilterAdapter(this); filtersList.setAdapter(navigationListAdapter); + navigationListAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); + } else { + // Add status types directly to the action bar spinner + navigationSpinnerAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); } - // Load settings } @@ -73,12 +83,12 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi /** * A new filter was selected; update the view over the current data - * @param selected True if - * @param item + * @param selected True if the filter item was selected, false if it was deselected + * @param item The touched filter item */ @ItemSelect(R.id.filters_list) protected void filterSelected(boolean selected, FilterItem item) { - // TODO: Update the view + // TODO: Update the torrent list view } } diff --git a/lite/src/org/transdroid/lite/gui/TorrentsFragment.java b/lite/src/org/transdroid/lite/gui/TorrentsFragment.java index f53a9e1d..5dd796bb 100644 --- a/lite/src/org/transdroid/lite/gui/TorrentsFragment.java +++ b/lite/src/org/transdroid/lite/gui/TorrentsFragment.java @@ -1,7 +1,7 @@ package org.transdroid.lite.gui; import org.androidannotations.annotations.EFragment; -import org.transdroid.lite.R; +import org.transdroid.core.R; import com.actionbarsherlock.app.SherlockFragment; diff --git a/lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java b/lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java new file mode 100644 index 00000000..0dbe8fc1 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java @@ -0,0 +1,110 @@ +package org.transdroid.lite.gui.lists; + +import org.transdroid.core.R; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +/** + * Draws a progress bar indicating the download progress as well as the torrent status. + * + * @author Eric Kok + */ +public class TorrentProgressBar extends View { + + private final float scale = getContext().getResources().getDisplayMetrics().density; + private final int MINIMUM_HEIGHT = (int) (2 * scale + 0.5f); + // private final int RIGHT_MARGIN = (int)(3 * scale + 0.5f); + + private int progress; + private boolean isActive; + private boolean isError; + private final Paint notdonePaint = new Paint(); + private final Paint inactiveDonePaint = new Paint(); + private final Paint inactivePaint = new Paint(); + private final Paint progressPaint = new Paint(); + private final Paint donePaint = new Paint(); + private final Paint errorPaint = new Paint(); + private final RectF fullRect = new RectF(); + private final RectF progressRect = new RectF(); + + public void setProgress(int progress) { + this.progress = progress; + this.invalidate(); + } + + public void setActive(boolean isActive) { + this.isActive = isActive; + this.invalidate(); + } + + public void setError(boolean isError) { + this.isError = isError; + this.invalidate(); + } + + public TorrentProgressBar(Context context) { + super(context); + initPaints(); + } + + public TorrentProgressBar(Context context, AttributeSet attrs) { + super(context, attrs); + initPaints(); + + // Parse any set attributes from XML + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TorrentProgressBar); + if (a.hasValue(R.styleable.TorrentProgressBar_progress)) { + this.progress = a.getIndex(R.styleable.TorrentProgressBar_progress); + this.isActive = a.getBoolean(R.styleable.TorrentProgressBar_isActive, false); + } + a.recycle(); + } + + private void initPaints() { + notdonePaint.setColor(0xFFEEEEEE); + inactiveDonePaint.setColor(0xFFA759D4); + inactivePaint.setColor(0xFF9E9E9E); + progressPaint.setColor(0xFF42A8FA); + donePaint.setColor(0xFF8CCF29); + errorPaint.setColor(0xFFDE3939); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int ws = MeasureSpec.getSize(widthMeasureSpec);// - RIGHT_MARGIN; + int hs = Math.max(getHeight(), MINIMUM_HEIGHT); + setMeasuredDimension(ws, hs); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + int height = getHeight(); + int width = getWidth(); + fullRect.set(0, 0, width, height); + + // Error? + if (isError) { + canvas.drawRect(fullRect, errorPaint); + } else { + // Background rounded rectangle + canvas.drawRect(fullRect, notdonePaint); + + // Foreground progress indicator + if (progress > 0) { + progressRect.set(0, 0, width * ((float) progress / 100), height); + canvas.drawRect(progressRect, (isActive ? (progress == 100 ? donePaint : progressPaint) + : (progress == 100 ? inactiveDonePaint : inactivePaint))); + } + } + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java b/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java index 0ffb0b8e..22f9dbe6 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java @@ -2,7 +2,7 @@ package org.transdroid.lite.gui.navigation; import java.util.List; -import org.transdroid.lite.R; +import org.transdroid.core.R; import android.content.Context; import android.view.View; @@ -31,7 +31,7 @@ public class FilterAdapter extends MergeAdapter { * Update the list of available servers. * @param servers The new list of available servers */ - public void updateServers(List servers) { + public void updateServers(List servers) { if (this.serverItems == null && servers != null) { addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_servers)), false); this.serverItems = new FilterItemAdapter(context, servers); @@ -47,7 +47,7 @@ public class FilterAdapter extends MergeAdapter { * Update the list of available status types. * @param statusTypes The new list of available status types */ - public void updateStatusTypes(List statusTypes) { + public void updateStatusTypes(List statusTypes) { if (this.statusTypeItems == null && statusTypes != null) { addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_status)), false); this.statusTypeItems = new FilterItemAdapter(context, statusTypes); @@ -63,7 +63,7 @@ public class FilterAdapter extends MergeAdapter { * Update the list of available labels. * @param labels The new list of available labels */ - public void updateLabels(List labels) { + public void updateLabels(List labels) { if (this.labelItems == null && labels != null) { addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_labels)), false); this.labelItems = new FilterItemAdapter(context, labels); @@ -78,9 +78,9 @@ public class FilterAdapter extends MergeAdapter { protected class FilterItemAdapter extends BaseAdapter { private final Context context; - private List items; + private List items; - public FilterItemAdapter(Context context, List items) { + public FilterItemAdapter(Context context, List items) { this.context = context; this.items = items; } @@ -89,7 +89,7 @@ public class FilterAdapter extends MergeAdapter { * Allows updating of the full data list underlying this adapter, replacing all items * @param newItems The new list of filter items to display */ - public void update(List newItems) { + public void update(List newItems) { this.items = newItems; notifyDataSetChanged(); } diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java b/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java index e7f6dc82..532f85f3 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java @@ -2,7 +2,7 @@ package org.transdroid.lite.gui.navigation; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; -import org.transdroid.lite.R; +import org.transdroid.core.R; import android.content.Context; import android.widget.LinearLayout; diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java b/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java index 09368d89..ea6deaff 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java +++ b/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java @@ -2,7 +2,7 @@ package org.transdroid.lite.gui.navigation; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; -import org.transdroid.lite.R; +import org.transdroid.core.R; import android.content.Context; import android.widget.LinearLayout; diff --git a/lite/src/org/transdroid/lite/gui/navigation/Label.java b/lite/src/org/transdroid/lite/gui/navigation/Label.java new file mode 100644 index 00000000..6da5d20a --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/Label.java @@ -0,0 +1,20 @@ +package org.transdroid.lite.gui.navigation; + +/** + * Represents some label that is active or available on the server. + * @author Eric Kok + */ +public class Label implements FilterItem { + + private final String name; + + public Label(String name) { + this.name = name; + } + + @Override + public String getName() { + return this.name; + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/StatusType.java b/lite/src/org/transdroid/lite/gui/navigation/StatusType.java new file mode 100644 index 00000000..2aaac124 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/navigation/StatusType.java @@ -0,0 +1,75 @@ +package org.transdroid.lite.gui.navigation; + +import java.util.Arrays; +import java.util.List; + +import org.transdroid.core.R; + +import android.content.Context; + +/** + * Enumeration of all status types, which filter the list of shown torrents based on transfer activity. + * @author Eric Kok + */ +public enum StatusType { + + ShowAll { + StatusTypeFilter getFilterItem(Context context) { + return new StatusTypeFilter(context.getString(R.string.navigation_status_showall)); + } + }, + OnlyDownloading { + StatusTypeFilter getFilterItem(Context context) { + return new StatusTypeFilter(context.getString(R.string.navigation_status_onlydown)); + } + }, + OnlyUploading { + StatusTypeFilter getFilterItem(Context context) { + return new StatusTypeFilter(context.getString(R.string.navigation_status_onlyup)); + } + }, + OnlyActive { + StatusTypeFilter getFilterItem(Context context) { + return new StatusTypeFilter(context.getString(R.string.navigation_status_onlyactive)); + } + }, + OnlyInactive { + StatusTypeFilter getFilterItem(Context context) { + return new StatusTypeFilter(context.getString(R.string.navigation_status_onlyinactive)); + } + }; + + /** + * Returns a list with all status types, represented as filter item that can be shown in the GUI. + * @param context The Android UI context, to access translations + * @return A list of filter items for all available status types + */ + public static List getAllStatusTypes(Context context) { + return Arrays.asList(ShowAll.getFilterItem(context), OnlyDownloading.getFilterItem(context), + OnlyUploading.getFilterItem(context), OnlyActive.getFilterItem(context), + OnlyInactive.getFilterItem(context)); + } + + /** + * Every status type can return a filter item that represents it in the navigation + * @param context The Android UI context, to access translations + * @return A filter item object to show in the GUI + */ + abstract StatusTypeFilter getFilterItem(Context context); + + public static class StatusTypeFilter implements FilterItem { + + private final String name; + + StatusTypeFilter(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java b/lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java new file mode 100644 index 00000000..5240fee5 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java @@ -0,0 +1,164 @@ +package org.transdroid.lite.gui.settings; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.transdroid.core.R; +import org.transdroid.lite.app.search.SearchHelper; +import org.transdroid.lite.app.search.SearchSite; +import org.transdroid.lite.app.settings.ApplicationSettings; +import org.transdroid.lite.app.settings.RssfeedSetting; +import org.transdroid.lite.app.settings.ServerSetting; +import org.transdroid.lite.app.settings.WebsearchSetting; +import org.transdroid.lite.gui.settings.RssfeedPreference.OnRssfeedClickedListener; +import org.transdroid.lite.gui.settings.ServerPreference.OnServerClickedListener; +import org.transdroid.lite.gui.settings.WebsearchPreference.OnWebsearchClickedListener; + +import android.os.Bundle; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +/** + * The main activity that provides access to all application settings. It shows the configured serves, web search sites + * and RSS feeds along with other general settings. + * @author Eric Kok + */ +@EActivity +public class MainSettingsActivity extends SherlockPreferenceActivity { + + @Bean + protected ApplicationSettings applicationSettings; + @Bean + protected SearchHelper searchHelper; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preference menu and attack actions + addPreferencesFromResource(R.xml.pref_main); + findPreference("header_addserver").setOnPreferenceClickListener(onAddServer); + findPreference("header_addwebsearch").setOnPreferenceClickListener(onAddWebsearch); + findPreference("header_rssfeed").setOnPreferenceClickListener(onAddRssfeed); + findPreference("header_background").setOnPreferenceClickListener(onBackgroundSettings); + findPreference("header_system").setOnPreferenceClickListener(onSystemSettings); + + // Add existing servers + List servers = applicationSettings.getServerSettings(); + for (ServerSetting serverSetting : servers) { + getPreferenceScreen().addPreference( + new ServerPreference(this).setServerSetting(serverSetting).setOnServerClickedListener( + onServerClicked)); + } + + // Add existing websearch sites + List websearches = applicationSettings.getWebsearchSettings(); + for (WebsearchSetting websearchSetting : websearches) { + getPreferenceScreen().addPreference( + new WebsearchPreference(this).setWebsearchSetting(websearchSetting).setOnWebsearchClickedListener( + onWebsearchClicked)); + } + + // Add existing RSS feeds + List rssfeeds = applicationSettings.getRssfeedSettings(); + for (RssfeedSetting rssfeedSetting : rssfeeds) { + getPreferenceScreen().addPreference( + new RssfeedPreference(this).setRssfeedSetting(rssfeedSetting).setOnRssfeedClickedListener( + onRssfeedClicked)); + } + + // Construct list of all available search sites, in-app and web + ListPreference setSite = (ListPreference) findPreference("header_setsearchsite"); + // Retrieve the available in-app search sites (using the Torrent Search package) + List searchsites = searchHelper.getAvailableSites(); + List siteNames = new ArrayList(websearches.size() + searchsites.size()); + List siteValues = new ArrayList(websearches.size() + searchsites.size()); + for (SearchSite searchSite : searchsites) { + siteNames.add(searchSite.getName()); + siteValues.add(searchSite.getKey()); + } + for (WebsearchSetting websearch : websearches) { + siteNames.add(websearch.getName()); + siteValues.add(websearch.getKey()); + } + // Supply the Preference list names and values + setSite.setEntries(siteNames.toArray(new String[siteNames.size()])); + setSite.setEntryValues(siteValues.toArray(new String[siteValues.size()])); + + } + + @Override + public void onBuildHeaders(List

target) { + // TODO: Add two-pane support in settings + super.onBuildHeaders(target); + } + + private OnPreferenceClickListener onAddServer = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + ServerSettingsActivity_.intent(MainSettingsActivity.this).start(); + return true; + } + }; + + private OnPreferenceClickListener onAddWebsearch = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + WebsearchSettingsActivity_.intent(MainSettingsActivity.this).start(); + return true; + } + }; + + private OnPreferenceClickListener onAddRssfeed = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + RssfeedSettingsActivity_.intent(MainSettingsActivity.this).start(); + return true; + } + }; + + private OnPreferenceClickListener onBackgroundSettings = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + OtherSettingsActivity_.intent(MainSettingsActivity.this).preferencesResourceID(R.xml.pref_notifications) + .start(); + return true; + } + }; + + private OnPreferenceClickListener onSystemSettings = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + OtherSettingsActivity_.intent(MainSettingsActivity.this).preferencesResourceID(R.xml.pref_about).start(); + return true; + } + }; + + private OnServerClickedListener onServerClicked = new OnServerClickedListener() { + @Override + public void onServerClicked(ServerSetting serverSetting) { + ServerSettingsActivity_.intent(MainSettingsActivity.this).key(serverSetting.getOrder()).start(); + } + }; + + private OnWebsearchClickedListener onWebsearchClicked = new OnWebsearchClickedListener() { + @Override + public void onWebsearchClicked(WebsearchSetting websearchSetting) { + WebsearchSettingsActivity_.intent(MainSettingsActivity.this).key(websearchSetting.getOrder()).start(); + } + }; + + private OnRssfeedClickedListener onRssfeedClicked = new OnRssfeedClickedListener() { + @Override + public void onRssfeedClicked(RssfeedSetting rssfeedSetting) { + RssfeedSettingsActivity_.intent(MainSettingsActivity.this).key(rssfeedSetting.getOrder()).start(); + } + }; + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java b/lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java new file mode 100644 index 00000000..5e23ee79 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java @@ -0,0 +1,31 @@ +package org.transdroid.lite.gui.settings; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.Extra; +import org.transdroid.lite.app.settings.ApplicationSettings; + +import android.os.Bundle; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +@EActivity +public class OtherSettingsActivity extends SherlockPreferenceActivity { + + @Extra + protected int preferencesResourceID; + + @Bean + protected ApplicationSettings applicationSettings; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Just load the preferences from XML, of which the ID is supplied as extra + addPreferencesFromResource(preferencesResourceID); + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java b/lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java new file mode 100644 index 00000000..49a81046 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java @@ -0,0 +1,59 @@ +package org.transdroid.lite.gui.settings; + +import org.transdroid.lite.app.settings.RssfeedSetting; + +import android.content.Context; +import android.preference.Preference; + +/** + * Represents a {@link RssfeedSetting} in a preferences screen. + * @author Eric Kok + */ +public class RssfeedPreference extends Preference { + + private static final int ORDER_START = 201; + + private RssfeedSetting rssfeedSetting; + private OnRssfeedClickedListener onRssfeedClickedListener = null; + + public RssfeedPreference(Context context) { + super(context); + setOnPreferenceClickListener(onPreferenceClicked); + } + + /** + * Set the RSS feed settings object that is bound to this preference item + * @param rssfeedSetting The RSS feed settings + * @return Itself, for method chaining + */ + public RssfeedPreference setRssfeedSetting(RssfeedSetting rssfeedSetting) { + this.rssfeedSetting = rssfeedSetting; + setTitle(rssfeedSetting.getName()); + setOrder(ORDER_START + rssfeedSetting.getOrder()); + return this; + } + + /** + * Set a listener that will be notified of click events on this preference + * @param onRssfeedClickedListener The click listener to register + * @return Itself, for method chaining + */ + public RssfeedPreference setOnRssfeedClickedListener(OnRssfeedClickedListener onRssfeedClickedListener) { + this.onRssfeedClickedListener = onRssfeedClickedListener; + return this; + } + + private OnPreferenceClickListener onPreferenceClicked = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (onRssfeedClickedListener != null) + onRssfeedClickedListener.onRssfeedClicked(rssfeedSetting); + return true; + } + }; + + public interface OnRssfeedClickedListener { + public void onRssfeedClicked(RssfeedSetting rssfeedSetting); + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java b/lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java new file mode 100644 index 00000000..2b83f52f --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java @@ -0,0 +1,46 @@ +package org.transdroid.lite.gui.settings; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.Extra; +import org.transdroid.core.R; +import org.transdroid.lite.app.settings.ApplicationSettings; + +import android.os.Bundle; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +/** + * Activity that allows for a configuration of some RSS feed. The key can be supplied to update an + * existing RSS feed setting instead of creating a new one. + * @author Eric Kok + */ +@EActivity +public class RssfeedSettingsActivity extends SherlockPreferenceActivity { + + @Extra + protected int key = -1; + + @Bean + protected ApplicationSettings applicationSettings; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the raw preferences to show in this screen + addPreferencesFromResource(R.xml.pref_rssfeed); + + // Bind the preferences to the correct storage key, e.g. the first RSS feed setting stores its URL in the + // 'rssfeed_url_0' shared preferences field + if (key < 0) { + key = applicationSettings.getMaxRssfeed() + 1; + } + findPreference("rssfeed_name").setKey("rssfeed_name_" + key); + findPreference("rssfeed_url").setKey("rssfeed_url_" + key); + findPreference("rssfeed_reqauth").setKey("rssfeed_reqauth_" + key); + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/ServerPreference.java b/lite/src/org/transdroid/lite/gui/settings/ServerPreference.java new file mode 100644 index 00000000..802873e3 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/ServerPreference.java @@ -0,0 +1,59 @@ +package org.transdroid.lite.gui.settings; + +import org.transdroid.lite.app.settings.ServerSetting; + +import android.content.Context; +import android.preference.Preference; + +/** + * Represents a {@link ServerSetting} in a preferences screen. + * @author Eric Kok + */ +public class ServerPreference extends Preference { + + private static final int ORDER_START = 1; + + private ServerSetting serverSetting; + private OnServerClickedListener onServerClickedListener = null; + + public ServerPreference(Context context) { + super(context); + setOnPreferenceClickListener(onPreferenceClicked); + } + + /** + * Set the server settings object that is bound to this preference item + * @param serverSetting The server settings + * @return Itself, for method chaining + */ + public ServerPreference setServerSetting(ServerSetting serverSetting) { + this.serverSetting = serverSetting; + setTitle(serverSetting.getHumanReadableIdentifier()); + setOrder(ORDER_START + serverSetting.getOrder()); + return this; + } + + /** + * Set a listener that will be notified of click events on this preference + * @param onServerClickedListener The click listener to register + * @return Itself, for method chaining + */ + public ServerPreference setOnServerClickedListener(OnServerClickedListener onServerClickedListener) { + this.onServerClickedListener = onServerClickedListener; + return this; + } + + private OnPreferenceClickListener onPreferenceClicked = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (onServerClickedListener != null) + onServerClickedListener.onServerClicked(serverSetting); + return true; + } + }; + + public interface OnServerClickedListener { + public void onServerClicked(ServerSetting serverSetting); + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java b/lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java new file mode 100644 index 00000000..148a8b56 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java @@ -0,0 +1,94 @@ +package org.transdroid.lite.gui.settings; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.Extra; +import org.transdroid.daemon.Daemon; +import org.transdroid.core.R; +import org.transdroid.lite.app.settings.ApplicationSettings; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.PreferenceManager; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +/** + * Activity that allows for a configuration of a server. The key can be supplied to update an existing server setting + * instead of creating a new one. + * @author Eric Kok + */ +@EActivity +public class ServerSettingsActivity extends SherlockPreferenceActivity { + + @Extra + protected int key = -1; + + @Bean + protected ApplicationSettings applicationSettings; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the raw preferences to show in this screen + addPreferencesFromResource(R.xml.pref_server); + + // Bind the preferences to the correct storage key, e.g. the first server setting stores its address in the + // 'server_address_0' shared preferences field + if (key < 0) { + key = applicationSettings.getMaxWebsearch() + 1; + } + findPreference("server_name").setKey("server_name_" + key); + findPreference("server_type").setKey("server_type_" + key); + findPreference("server_address").setKey("server_address_" + key); + findPreference("server_port").setKey("server_port_" + key); + findPreference("server_user").setKey("server_user_" + key); + findPreference("server_pass").setKey("server_pass_" + key); + findPreference("server_extrapass").setKey("server_extrapass_" + key); + findPreference("server_localaddress").setKey("server_localaddress_" + key); + findPreference("server_localnetwork").setKey("server_localnetwork_" + key); + findPreference("server_folder").setKey("server_folder_" + key); + findPreference("server_timeout").setKey("server_timeout_" + key); + findPreference("server_alamrfinished").setKey("server_alamrfinished_" + key); + findPreference("server_alarnew").setKey("server_alarnew_" + key); + findPreference("server_os").setKey("server_os_" + key); + findPreference("server_downloaddir").setKey("server_downloaddir_" + key); + findPreference("server_ftpurl").setKey("server_ftpurl_" + key); + findPreference("server_ftppass").setKey("server_ftppass_" + key); + findPreference("server_sslenabled").setKey("server_sslenabled_" + key); + findPreference("server_ssltrustall").setKey("server_ssltrustall_" + key); + findPreference("server_ssltrustkey").setKey("server_ssltrustkey_" + key); + + // Monitor preference changes + getPreferenceScreen().setOnPreferenceChangeListener(onPreferenceChangeListener); + } + + private OnPreferenceChangeListener onPreferenceChangeListener = new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + updatePreferenceAvailability(); + return true; + } + }; + + @SuppressWarnings("deprecation") + private void updatePreferenceAvailability() { + + // Use daemon factory to see if the newly selected daemon supports the feature + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + Daemon daemonType = Daemon.fromCode(prefs.getString("server_type_" + key, null)); + findPreference("server_extrapass_" + key).setEnabled(Daemon.supportsExtraPassword(daemonType)); + findPreference("server_folder_" + key).setEnabled(daemonType == null? false: Daemon.supportsCustomFolder(daemonType)); + findPreference("server_downloaddir_" + key).setEnabled(daemonType == null? false: Daemon.needsManualPathSpecified(daemonType)); + //findPreference("server_ssltrustkey_" + key).setEnabled(sslValue && !sslTAValue); + + // Adjust title texts accordingly + findPreference("server_folder_" + key).setTitle(daemonType == Daemon.rTorrent? R.string.pref_scgifolder: R.string.pref_folder); + + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java b/lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java new file mode 100644 index 00000000..929f66a9 --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java @@ -0,0 +1,59 @@ +package org.transdroid.lite.gui.settings; + +import org.transdroid.lite.app.settings.WebsearchSetting; + +import android.content.Context; +import android.preference.Preference; + +/** + * Represents a {@link WebsearchSetting} in a preferences screen. + * @author Eric Kok + */ +public class WebsearchPreference extends Preference { + + private static final int ORDER_START = 102; + + private WebsearchSetting websearchSetting; + private OnWebsearchClickedListener onWebsearchClickedListener = null; + + public WebsearchPreference(Context context) { + super(context); + setOnPreferenceClickListener(onPreferenceClicked); + } + + /** + * Set the websearch settings object that is bound to this preference item + * @param websearchSetting The websearch settings + * @return Itself, for method chaining + */ + public WebsearchPreference setWebsearchSetting(WebsearchSetting websearchSetting) { + this.websearchSetting = websearchSetting; + setTitle(websearchSetting.getName()); + setOrder(ORDER_START + websearchSetting.getOrder()); + return this; + } + + /** + * Set a listener that will be notified of click events on this preference + * @param onWebsearchClickedListener The click listener to register + * @return Itself, for method chaining + */ + public WebsearchPreference setOnWebsearchClickedListener(OnWebsearchClickedListener onWebsearchClickedListener) { + this.onWebsearchClickedListener = onWebsearchClickedListener; + return this; + } + + private OnPreferenceClickListener onPreferenceClicked = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (onWebsearchClickedListener != null) + onWebsearchClickedListener.onWebsearchClicked(websearchSetting); + return true; + } + }; + + public interface OnWebsearchClickedListener { + public void onWebsearchClicked(WebsearchSetting serverSetting); + } + +} diff --git a/lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java b/lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java new file mode 100644 index 00000000..d5daae2e --- /dev/null +++ b/lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java @@ -0,0 +1,45 @@ +package org.transdroid.lite.gui.settings; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.Extra; +import org.transdroid.core.R; +import org.transdroid.lite.app.settings.ApplicationSettings; + +import android.os.Bundle; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +/** + * Activity that allows for a configuration of a web search site. The key can be supplied to update an existing web + * search site setting instead of creating a new one. + * @author Eric Kok + */ +@EActivity +public class WebsearchSettingsActivity extends SherlockPreferenceActivity { + + @Extra + protected int key = -1; + + @Bean + protected ApplicationSettings applicationSettings; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the raw preferences to show in this screen + addPreferencesFromResource(R.xml.pref_websearch); + + // Bind the preferences to the correct storage key, e.g. the first site setting stores its URL in the + // 'websearch_baseurl_0' shared preferences field + if (key < 0) { + key = applicationSettings.getMaxWebsearch() + 1; + } + findPreference("websearch_name").setKey("websearch_name_" + key); + findPreference("websearch_baseurl").setKey("websearch_baseurl_" + key); + + } + +} From fc83f907e18cf43714f3681778935a9c270d984e Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Wed, 6 Mar 2013 03:12:31 +0100 Subject: [PATCH 06/10] Build torrent and details fragment UI and started on logic. --- .../daemon/BitComet/BitCometAdapter.java | 6 +- .../daemon/Bitflu/BitfluAdapter.java | 3 +- .../daemon/BuffaloNas/BuffaloNasAdapter.java | 3 +- .../DLinkRouterBT/DLinkRouterBTAdapter.java | 3 +- .../daemon/Deluge/DelugeAdapter.java | 5 +- .../daemon/Ktorrent/StatsParser.java | 4 +- .../Qbittorrent/QbittorrentAdapter.java | 3 +- .../daemon/Rtorrent/RtorrentAdapter.java | 10 +- .../transdroid/daemon/Tfb4rt/StatsParser.java | 4 +- lib/src/org/transdroid/daemon/Torrent.java | 7 +- .../Transmission/TransmissionAdapter.java | 3 +- .../daemon/Utorrent/UtorrentAdapter.java | 3 +- .../transdroid/daemon/Vuze/VuzeAdapter.java | 16 +- .../daemon/util/FileSizeConverter.java | 84 ++++-- lite/.classpath | 2 +- lite/AndroidManifest.xml | 64 ++++- lite/res/layout-w600dp/activity_torrents.xml | 2 +- lite/res/layout-w720dp/activity_torrents.xml | 4 +- lite/res/layout/activity_details.xml | 16 ++ lite/res/layout/activity_torrents.xml | 3 +- lite/res/layout/fragment_details.xml | 1 + lite/res/layout/fragment_details_header.xml | 26 +- lite/res/layout/fragment_torrents.xml | 1 + lite/res/layout/list_item_torrent.xml | 11 +- lite/res/layout/list_item_torrentfile.xml | 58 ++++ lite/res/menu/activity_details.xml | 9 + lite/res/values/strings.xml | 59 +++- lite/res/xml/searchable.xml | 8 + .../app/search/SearchHelper.java | 2 +- .../app/search/SearchResult.java | 2 +- .../{lite => core}/app/search/SearchSite.java | 6 +- .../app/settings/AboutSettings.java | 2 +- .../app/settings/ApplicationSettings.java | 52 +++- .../app/settings/NotificationSettings.java | 2 +- .../app/settings/RssfeedSetting.java | 6 +- .../app/settings/ServerSetting.java | 33 ++- .../app/settings/WebsearchSetting.java | 6 +- .../transdroid/core/gui/DetailsActivity.java | 132 +++++++++ .../transdroid/core/gui/DetailsFagment.java | 113 ++++++++ .../core/gui/SearchHistoryProvider.java | 22 ++ .../transdroid/core/gui/TorrentsActivity.java | 253 ++++++++++++++++++ .../transdroid/core/gui/TorrentsFragment.java | 69 +++++ .../core/gui/lists/DetailsAdapter.java | 141 ++++++++++ .../core/gui/lists/LocalTorrent.java | 233 ++++++++++++++++ .../gui/lists/SimpleListItem.java} | 4 +- .../core/gui/lists/SimpleListItemAdapter.java | 91 +++++++ .../gui/lists/SimpleListItemView.java} | 10 +- .../core/gui/lists/TorrentDetailsView.java | 85 ++++++ .../core/gui/lists/TorrentFileView.java | 53 ++++ .../gui/lists/TorrentProgressBar.java | 2 +- .../core/gui/lists/TorrentView.java | 47 ++++ .../core/gui/lists/TorrentsAdapter.java | 67 +++++ .../gui/navigation/FilterListAdapter.java | 78 ++++++ .../gui/navigation/FilterSeparatorView.java | 5 +- .../{lite => core}/gui/navigation/Label.java | 6 +- .../gui/navigation/NavigationHelper.java | 2 +- .../gui/navigation/StatusType.java | 5 +- .../gui/settings/MainSettingsActivity.java | 20 +- .../gui/settings/OtherSettingsActivity.java | 4 +- .../gui/settings/RssfeedPreference.java | 4 +- .../gui/settings/RssfeedSettingsActivity.java | 4 +- .../gui/settings/ServerPreference.java | 4 +- .../gui/settings/ServerSettingsActivity.java | 4 +- .../gui/settings/WebsearchPreference.java | 4 +- .../settings/WebsearchSettingsActivity.java | 4 +- .../transdroid/lite/gui/DetailsFagment.java | 47 ---- .../transdroid/lite/gui/TorrentsActivity.java | 94 ------- .../transdroid/lite/gui/TorrentsFragment.java | 11 - .../lite/gui/navigation/FilterAdapter.java | 125 --------- 69 files changed, 1850 insertions(+), 422 deletions(-) create mode 100644 lite/res/layout/activity_details.xml create mode 100644 lite/res/layout/list_item_torrentfile.xml create mode 100644 lite/res/menu/activity_details.xml create mode 100644 lite/res/xml/searchable.xml rename lite/src/org/transdroid/{lite => core}/app/search/SearchHelper.java (99%) rename lite/src/org/transdroid/{lite => core}/app/search/SearchResult.java (96%) rename lite/src/org/transdroid/{lite => core}/app/search/SearchSite.java (80%) rename lite/src/org/transdroid/{lite => core}/app/settings/AboutSettings.java (94%) rename lite/src/org/transdroid/{lite => core}/app/settings/ApplicationSettings.java (72%) rename lite/src/org/transdroid/{lite => core}/app/settings/NotificationSettings.java (98%) rename lite/src/org/transdroid/{lite => core}/app/settings/RssfeedSetting.java (89%) rename lite/src/org/transdroid/{lite => core}/app/settings/ServerSetting.java (78%) rename lite/src/org/transdroid/{lite => core}/app/settings/WebsearchSetting.java (85%) create mode 100644 lite/src/org/transdroid/core/gui/DetailsActivity.java create mode 100644 lite/src/org/transdroid/core/gui/DetailsFagment.java create mode 100644 lite/src/org/transdroid/core/gui/SearchHistoryProvider.java create mode 100644 lite/src/org/transdroid/core/gui/TorrentsActivity.java create mode 100644 lite/src/org/transdroid/core/gui/TorrentsFragment.java create mode 100644 lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java create mode 100644 lite/src/org/transdroid/core/gui/lists/LocalTorrent.java rename lite/src/org/transdroid/{lite/gui/navigation/FilterItem.java => core/gui/lists/SimpleListItem.java} (64%) create mode 100644 lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java rename lite/src/org/transdroid/{lite/gui/navigation/FilterItemView.java => core/gui/lists/SimpleListItemView.java} (58%) create mode 100644 lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java create mode 100644 lite/src/org/transdroid/core/gui/lists/TorrentFileView.java rename lite/src/org/transdroid/{lite => core}/gui/lists/TorrentProgressBar.java (98%) create mode 100644 lite/src/org/transdroid/core/gui/lists/TorrentView.java create mode 100644 lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java create mode 100644 lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java rename lite/src/org/transdroid/{lite => core}/gui/navigation/FilterSeparatorView.java (86%) rename lite/src/org/transdroid/{lite => core}/gui/navigation/Label.java (62%) rename lite/src/org/transdroid/{lite => core}/gui/navigation/NavigationHelper.java (94%) rename lite/src/org/transdroid/{lite => core}/gui/navigation/StatusType.java (92%) rename lite/src/org/transdroid/{lite => core}/gui/settings/MainSettingsActivity.java (91%) rename lite/src/org/transdroid/{lite => core}/gui/settings/OtherSettingsActivity.java (87%) rename lite/src/org/transdroid/{lite => core}/gui/settings/RssfeedPreference.java (94%) rename lite/src/org/transdroid/{lite => core}/gui/settings/RssfeedSettingsActivity.java (92%) rename lite/src/org/transdroid/{lite => core}/gui/settings/ServerPreference.java (94%) rename lite/src/org/transdroid/{lite => core}/gui/settings/ServerSettingsActivity.java (97%) rename lite/src/org/transdroid/{lite => core}/gui/settings/WebsearchPreference.java (94%) rename lite/src/org/transdroid/{lite => core}/gui/settings/WebsearchSettingsActivity.java (92%) delete mode 100644 lite/src/org/transdroid/lite/gui/DetailsFagment.java delete mode 100644 lite/src/org/transdroid/lite/gui/TorrentsActivity.java delete mode 100644 lite/src/org/transdroid/lite/gui/TorrentsFragment.java delete mode 100644 lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java diff --git a/lib/src/org/transdroid/daemon/BitComet/BitCometAdapter.java b/lib/src/org/transdroid/daemon/BitComet/BitCometAdapter.java index 732a4e8a..525c9c0c 100644 --- a/lib/src/org/transdroid/daemon/BitComet/BitCometAdapter.java +++ b/lib/src/org/transdroid/daemon/BitComet/BitCometAdapter.java @@ -480,7 +480,8 @@ public class BitCometAdapter implements IDaemonAdapter { comment, dateAdded, null, - null)); + null, + settings.getType())); } } } @@ -557,7 +558,8 @@ public class BitCometAdapter implements IDaemonAdapter { label, dateAdded, null, - null)); // Not supported in the web interface + null, // Not supported in the web interface + settings.getType())); id++; // Stop/start/etc. requests are made by ID, which is the order number in the returned XML list :-S diff --git a/lib/src/org/transdroid/daemon/Bitflu/BitfluAdapter.java b/lib/src/org/transdroid/daemon/Bitflu/BitfluAdapter.java index 14e618bd..cfcc2fe0 100644 --- a/lib/src/org/transdroid/daemon/Bitflu/BitfluAdapter.java +++ b/lib/src/org/transdroid/daemon/Bitflu/BitfluAdapter.java @@ -214,7 +214,8 @@ public class BitfluAdapter implements IDaemonAdapter { null, // label null, // Not available null, // Not available - null)); // Not available + null, // Not available + settings.getType())); } } // Return the list diff --git a/lib/src/org/transdroid/daemon/BuffaloNas/BuffaloNasAdapter.java b/lib/src/org/transdroid/daemon/BuffaloNas/BuffaloNasAdapter.java index dbe6bea8..06db1af9 100644 --- a/lib/src/org/transdroid/daemon/BuffaloNas/BuffaloNasAdapter.java +++ b/lib/src/org/transdroid/daemon/BuffaloNas/BuffaloNasAdapter.java @@ -281,7 +281,8 @@ public class BuffaloNasAdapter implements IDaemonAdapter { null, null, null, - null)); + null, + settings.getType())); } // Return the list diff --git a/lib/src/org/transdroid/daemon/DLinkRouterBT/DLinkRouterBTAdapter.java b/lib/src/org/transdroid/daemon/DLinkRouterBT/DLinkRouterBTAdapter.java index 521333b7..b9eabbaf 100644 --- a/lib/src/org/transdroid/daemon/DLinkRouterBT/DLinkRouterBTAdapter.java +++ b/lib/src/org/transdroid/daemon/DLinkRouterBT/DLinkRouterBTAdapter.java @@ -376,7 +376,8 @@ public class DLinkRouterBTAdapter implements IDaemonAdapter { null, null, null, - null); + null, + settings.getType()); torrents.add(new_t); } diff --git a/lib/src/org/transdroid/daemon/Deluge/DelugeAdapter.java b/lib/src/org/transdroid/daemon/Deluge/DelugeAdapter.java index 8a7fa785..6ce49d45 100644 --- a/lib/src/org/transdroid/daemon/Deluge/DelugeAdapter.java +++ b/lib/src/org/transdroid/daemon/Deluge/DelugeAdapter.java @@ -593,8 +593,9 @@ public class DelugeAdapter implements IDaemonAdapter { 0f, // Not available tor.has(RPC_LABEL)? tor.getString(RPC_LABEL): null, tor.has(RPC_TIMEADDED)? new Date(tor.getInt(RPC_TIMEADDED) * 1000L): null, - null, - tor.getString(RPC_MESSAGE))); // Not available + null, // Not available + tor.getString(RPC_MESSAGE), + settings.getType())); } } diff --git a/lib/src/org/transdroid/daemon/Ktorrent/StatsParser.java b/lib/src/org/transdroid/daemon/Ktorrent/StatsParser.java index fb55a519..b6dd76f7 100644 --- a/lib/src/org/transdroid/daemon/Ktorrent/StatsParser.java +++ b/lib/src/org/transdroid/daemon/Ktorrent/StatsParser.java @@ -5,6 +5,7 @@ import java.io.Reader; import java.util.ArrayList; import java.util.List; +import org.transdroid.daemon.Daemon; import org.transdroid.daemon.DaemonException; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentStatus; @@ -85,7 +86,8 @@ public class StatsParser { null, // Not supported in the web interface null, // Not supported in the web interface null, // Not supported in the web interface - null)); // Not supported in the web interface + null, // Not supported in the web interface + Daemon.KTorrent)); id++; // Stop/start/etc. requests are made by ID, which is the order number in the returned XML list :-S } else if (next == XmlPullParser.START_TAG && name.equals("torrent")){ diff --git a/lib/src/org/transdroid/daemon/Qbittorrent/QbittorrentAdapter.java b/lib/src/org/transdroid/daemon/Qbittorrent/QbittorrentAdapter.java index fb6a3fc2..c96e3f82 100644 --- a/lib/src/org/transdroid/daemon/Qbittorrent/QbittorrentAdapter.java +++ b/lib/src/org/transdroid/daemon/Qbittorrent/QbittorrentAdapter.java @@ -394,7 +394,8 @@ public class QbittorrentAdapter implements IDaemonAdapter { null, null, // Only available in /json/propertiesGeneral on a per-torrent basis, unfortunately null, - null)); + null, + settings.getType())); } // Return the list diff --git a/lib/src/org/transdroid/daemon/Rtorrent/RtorrentAdapter.java b/lib/src/org/transdroid/daemon/Rtorrent/RtorrentAdapter.java index 7e06af29..fb71300b 100644 --- a/lib/src/org/transdroid/daemon/Rtorrent/RtorrentAdapter.java +++ b/lib/src/org/transdroid/daemon/Rtorrent/RtorrentAdapter.java @@ -350,10 +350,11 @@ public class RtorrentAdapter implements IDaemonAdapter { (Long)info[10], // totalSize ((Long)info[8]).floatValue() / ((Long)info[10]).floatValue(), // partDone 0f, // TODO: Add availability data - label, // See remark on rTorrent/groups above + label, added, finished, - error)); + error, + settings.getType())); } else { @@ -379,10 +380,11 @@ public class RtorrentAdapter implements IDaemonAdapter { (Integer)info[10], // totalSize ((Integer)info[8]).floatValue() / ((Integer)info[10]).floatValue(), // partDone 0f, // TODO: Add availability data - label, // See remark on rTorrent/groups above + label, added, finished, - error)); + error, + settings.getType())); } } diff --git a/lib/src/org/transdroid/daemon/Tfb4rt/StatsParser.java b/lib/src/org/transdroid/daemon/Tfb4rt/StatsParser.java index af7f5cc7..31dc7ae7 100644 --- a/lib/src/org/transdroid/daemon/Tfb4rt/StatsParser.java +++ b/lib/src/org/transdroid/daemon/Tfb4rt/StatsParser.java @@ -5,6 +5,7 @@ import java.io.Reader; import java.util.ArrayList; import java.util.List; +import org.transdroid.daemon.Daemon; import org.transdroid.daemon.DaemonException; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentStatus; @@ -80,7 +81,8 @@ public class StatsParser { null, // Not supported in the XML stats null, null, - null)); + null, + Daemon.Tfb4rt)); } else if (next == XmlPullParser.START_TAG && name.equals("transfer")){ diff --git a/lib/src/org/transdroid/daemon/Torrent.java b/lib/src/org/transdroid/daemon/Torrent.java index 2d5ec2a9..2125755d 100644 --- a/lib/src/org/transdroid/daemon/Torrent.java +++ b/lib/src/org/transdroid/daemon/Torrent.java @@ -55,6 +55,7 @@ public final class Torrent implements Parcelable, Comparable { final private Date dateAdded; final private Date dateDone; final private String error; + final private Daemon daemon; //public long getID() { return id; } //public String getHash() { return hash; } @@ -80,6 +81,7 @@ public final class Torrent implements Parcelable, Comparable { public Date getDateAdded() { return dateAdded; } public Date getDateDone() { return dateDone; } public String getError() { return error; } + public Daemon getDaemon() { return daemon; } private Torrent(Parcel in) { this.id = in.readLong(); @@ -108,12 +110,13 @@ public final class Torrent implements Parcelable, Comparable { long lDateDone = in.readLong(); this.dateDone = (lDateDone == -1)? null: new Date(lDateDone); this.error = in.readString(); + this.daemon = Daemon.valueOf(in.readString()); } public Torrent(long id, String hash, String name, TorrentStatus statusCode, String locationDir, int rateDownload, int rateUpload, int peersGettingFromUs, int peersSendingToUs, int peersConnected, int peersKnown, int eta, long downloadedEver, long uploadedEver, long totalSize, float partDone, float available, String label, - Date dateAdded, Date realDateDone, String error) { + Date dateAdded, Date realDateDone, String error, Daemon daemon) { this.id = id; this.hash = hash; this.name = name; @@ -149,6 +152,7 @@ public final class Torrent implements Parcelable, Comparable { this.dateDone = cal.getTime(); } this.error = error; + this.daemon = daemon; } /** @@ -296,6 +300,7 @@ public final class Torrent implements Parcelable, Comparable { dest.writeLong((dateAdded == null)? -1: dateAdded.getTime()); dest.writeLong((dateDone == null)? -1: dateDone.getTime()); dest.writeString(error); + dest.writeString(daemon.name()); } } diff --git a/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java b/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java index aa4bb4e1..0aeb6d1b 100644 --- a/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java +++ b/lib/src/org/transdroid/daemon/Transmission/TransmissionAdapter.java @@ -500,7 +500,8 @@ public class TransmissionAdapter implements IDaemonAdapter { null, // No label/category/group support in the RPC API for now new Date(tor.getLong(RPC_DATEADDED) * 1000L), new Date(tor.getLong(RPC_DATEDONE) * 1000L), - errorString)); + errorString, + settings.getType())); } // Return the list diff --git a/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java b/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java index 40b9214b..982fa079 100644 --- a/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java +++ b/lib/src/org/transdroid/daemon/Utorrent/UtorrentAdapter.java @@ -515,7 +515,8 @@ public class UtorrentAdapter implements IDaemonAdapter { addedOnDate, completedOnDate, // uTorrent doesn't give the error message, so just remind that there is some error - status == TorrentStatus.Error? "See GUI for error message": null)); + status == TorrentStatus.Error? "See GUI for error message": null, + settings.getType())); } return torrents; diff --git a/lib/src/org/transdroid/daemon/Vuze/VuzeAdapter.java b/lib/src/org/transdroid/daemon/Vuze/VuzeAdapter.java index b19ca94d..ba55e981 100644 --- a/lib/src/org/transdroid/daemon/Vuze/VuzeAdapter.java +++ b/lib/src/org/transdroid/daemon/Vuze/VuzeAdapter.java @@ -31,6 +31,7 @@ import java.util.Map; import org.apache.openjpa.lib.util.Base16Encoder; import org.transdroid.daemon.Daemon; import org.transdroid.daemon.DaemonException; +import org.transdroid.daemon.DaemonException.ExceptionType; import org.transdroid.daemon.DaemonMethod; import org.transdroid.daemon.DaemonSettings; import org.transdroid.daemon.IDaemonAdapter; @@ -38,7 +39,6 @@ import org.transdroid.daemon.Priority; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentFile; import org.transdroid.daemon.TorrentStatus; -import org.transdroid.daemon.DaemonException.ExceptionType; import org.transdroid.daemon.task.AddByFileTask; import org.transdroid.daemon.task.AddByUrlTask; import org.transdroid.daemon.task.DaemonTask; @@ -99,18 +99,27 @@ public class VuzeAdapter implements IDaemonAdapter { case AddByFile: byte[] bytes; + FileInputStream in = null; try { // Request to add a torrent by local .torrent file String file = ((AddByFileTask)task).getFile(); - FileInputStream in = new FileInputStream(new File(URI.create(file))); + in = new FileInputStream(new File(URI.create(file))); bytes = new byte[in.available()]; in.read(bytes, 0, in.available()); + in.close(); } catch (FileNotFoundException e) { return new DaemonTaskFailureResult(task, new DaemonException(ExceptionType.FileAccessError, e.toString())); } catch (IllegalArgumentException e) { return new DaemonTaskFailureResult(task, new DaemonException(ExceptionType.FileAccessError, "Invalid local URI")); } catch (Exception e) { return new DaemonTaskFailureResult(task, new DaemonException(ExceptionType.FileAccessError, e.toString())); + } finally { + try { + if (in != null) + in.close(); + } catch (IOException e) { + // Ignore; it was already closed or never opened + } } makeVuzeCall(DaemonMethod.AddByFile, "createFromBEncodedData[byte[]]", new String[] { Base16Encoder.encode(bytes) }); return new DaemonTaskSuccessResult(task); @@ -406,7 +415,8 @@ public class VuzeAdapter implements IDaemonAdapter { null, // TODO: Implement Vuze label support new Date((Long) statsinfo.get("time_started")), // dateAdded null, // Unsupported? - error)); + error, + settings.getType())); } diff --git a/lib/src/org/transdroid/daemon/util/FileSizeConverter.java b/lib/src/org/transdroid/daemon/util/FileSizeConverter.java index a31c9966..13f18e38 100644 --- a/lib/src/org/transdroid/daemon/util/FileSizeConverter.java +++ b/lib/src/org/transdroid/daemon/util/FileSizeConverter.java @@ -15,71 +15,99 @@ * along with Transdroid. If not, see . * */ - package org.transdroid.daemon.util; +package org.transdroid.daemon.util; /** * Quick and dirty file size formatter. - * * @author erickok - * */ public class FileSizeConverter { private static final String DECIMAL_FORMATTER = "%.1f"; - + /** * A quantity in which to express a file size. - * * @author erickok - * */ public enum SizeUnit { - B, - KB, - MB, - GB + B, KB, MB, GB } - + private static int INC_SIZE = 1024; - - // Returns a file size given in bytes to a different unit, as a formatted string - public static String getSize(long from, SizeUnit to) - { + + /** + * Returns a file size (in bytes) in a different unit, as a formatted string + * @param from The file size in bytes + * @param to The unit to convert to + * @return A formatted string with number (rounded to one decimal) and unit, e.g. 1177.4MB + */ + public static String getSize(long from, SizeUnit to) { String out; switch (to) { case B: out = String.valueOf(from); break; case KB: - out = String.format(DECIMAL_FORMATTER, ((double)from) / 1024); + out = String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE); break; case MB: - out = String.format(DECIMAL_FORMATTER, ((double)from) / 1024 / 1024); + out = String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE / INC_SIZE); break; default: - out = String.format(DECIMAL_FORMATTER, ((double)from) / 1024 / 1024 / 1024); + out = String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE / INC_SIZE / INC_SIZE); break; } - - return (out + " " + to.toString()); + + return (out + " " + to.toString()); } - // Returns a file size in bytes in a nice readable formatted string + /** + * Returns a file size as nice readable string, with unit, e.g. 1234567890 (bytes) returns 1,15GB + * @param from The file size in bytes + * @return A formatted string with number (rounded to one decimal), with unit text + */ public static String getSize(long from) { return getSize(from, true); } // Returns a file size in bytes in a nice readable formatted string + /** + * Returns a file size as nice readable string, e.g. 1234567890 (bytes) returns 1,15 or 1,15GB + * @param from The file size in bytes + * @param withUnit Whether to also append the appropriate unit (B, KB, MB, GB) as text + * @return A formatted string with number (rounded to one decimal) and optionally unit + */ public static String getSize(long from, boolean withUnit) { if (from < INC_SIZE) { - return String.valueOf(from) + (withUnit? SizeUnit.B.toString(): ""); - } else if (from < (INC_SIZE * INC_SIZE)) { - return String.format(DECIMAL_FORMATTER, ((double)from) / INC_SIZE) + (withUnit? SizeUnit.KB.toString(): ""); + return String.valueOf(from) + (withUnit ? SizeUnit.B.toString() : ""); + } else if (from < (INC_SIZE * INC_SIZE)) { + return String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE) + + (withUnit ? SizeUnit.KB.toString() : ""); } else if (from < (INC_SIZE * INC_SIZE * INC_SIZE)) { - return String.format(DECIMAL_FORMATTER, ((double)from) / INC_SIZE / INC_SIZE) + (withUnit? SizeUnit.MB.toString(): ""); - } else { - return String.format(DECIMAL_FORMATTER, ((double)from) / INC_SIZE / INC_SIZE / INC_SIZE) + (withUnit? SizeUnit.GB.toString(): ""); + return String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE / INC_SIZE) + + (withUnit ? SizeUnit.MB.toString() : ""); + } else { + return String.format(DECIMAL_FORMATTER, ((double) from) / INC_SIZE / INC_SIZE / INC_SIZE) + + (withUnit ? SizeUnit.GB.toString() : ""); } } - + + /** + * Returns the unit to display some file size (as returned by getSize(long)) in, e.g. 1234567890 (bytes) returns GB + * as it is 1.2GB big + * @param from The file size in bytes + * @return The unit, i.e. B, KB, MB or GB + */ + public static SizeUnit getSizeUnit(long from) { + if (from < INC_SIZE) { + return SizeUnit.B; + } else if (from < (INC_SIZE * INC_SIZE)) { + return SizeUnit.KB; + } else if (from < (INC_SIZE * INC_SIZE * INC_SIZE)) { + return SizeUnit.MB; + } else { + return SizeUnit.GB; + } + } + } diff --git a/lite/.classpath b/lite/.classpath index 350f40f7..08d23ddb 100644 --- a/lite/.classpath +++ b/lite/.classpath @@ -9,6 +9,6 @@ - + diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml index e33579dd..90b10a33 100644 --- a/lite/AndroidManifest.xml +++ b/lite/AndroidManifest.xml @@ -17,12 +17,13 @@ + + @@ -30,12 +31,59 @@ + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/layout-w600dp/activity_torrents.xml b/lite/res/layout-w600dp/activity_torrents.xml index 2f96106f..da228be0 100644 --- a/lite/res/layout-w600dp/activity_torrents.xml +++ b/lite/res/layout-w600dp/activity_torrents.xml @@ -21,7 +21,7 @@ android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="3" - class="org.transdroid.gui.TorrentsFragment" + class="org.transdroid.core.gui.TorrentsFragment_" tools:layout="@layout/fragment_torrents" /> \ No newline at end of file diff --git a/lite/res/layout-w720dp/activity_torrents.xml b/lite/res/layout-w720dp/activity_torrents.xml index 6575c30e..dfdbcad1 100644 --- a/lite/res/layout-w720dp/activity_torrents.xml +++ b/lite/res/layout-w720dp/activity_torrents.xml @@ -21,7 +21,7 @@ android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="2" - class="org.transdroid.gui.TorrentsFragment" + class="org.transdroid.core.gui.TorrentsFragment_" tools:layout="@layout/fragment_torrents" /> \ No newline at end of file diff --git a/lite/res/layout/activity_details.xml b/lite/res/layout/activity_details.xml new file mode 100644 index 00000000..f1d8b7c8 --- /dev/null +++ b/lite/res/layout/activity_details.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/lite/res/layout/activity_torrents.xml b/lite/res/layout/activity_torrents.xml index ee4dd9b6..feb3cba7 100644 --- a/lite/res/layout/activity_torrents.xml +++ b/lite/res/layout/activity_torrents.xml @@ -10,6 +10,7 @@ android:id="@+id/torrent_list" android:layout_width="match_parent" android:layout_height="match_parent" - class="org.transdroid.gui.TorrentsFragment" tools:layout="@layout/fragment_torrents"/> + class="org.transdroid.core.gui.TorrentsFragment_" + tools:layout="@layout/fragment_torrents" /> \ No newline at end of file diff --git a/lite/res/layout/fragment_details.xml b/lite/res/layout/fragment_details.xml index bbbcdb0a..245e60fc 100644 --- a/lite/res/layout/fragment_details.xml +++ b/lite/res/layout/fragment_details.xml @@ -19,6 +19,7 @@ android:drawableTop="@drawable/ic_empty_details" android:drawablePadding="8dip" android:text="@string/navigation_emptydetails" + android:gravity="center" android:textIsSelectable="false" android:visibility="gone" /> diff --git a/lite/res/layout/fragment_details_header.xml b/lite/res/layout/fragment_details_header.xml index 56baea74..141517d2 100644 --- a/lite/res/layout/fragment_details_header.xml +++ b/lite/res/layout/fragment_details_header.xml @@ -9,9 +9,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" - android:text="UNLABELED" android:textIsSelectable="true" - style="@style/LabelTextView" /> + style="@style/LabelTextView" + android:visibility="invisible" /> @@ -65,7 +62,6 @@ android:layout_below="@id/uploaded_text" android:layout_toRightOf="@id/separator" android:layout_marginLeft="@dimen/margin_half" - android:text="RATIO 18.7" android:textSize="12sp" android:textIsSelectable="false" /> @@ -77,7 +73,6 @@ android:layout_toRightOf="@id/separator" android:layout_marginLeft="@dimen/margin_half" android:layout_marginBottom="4dip" - android:text="↑1.4MB/s" android:textSize="22sp" android:textColor="#fff" android:fontFamily="sans-serif-light" @@ -90,18 +85,16 @@ android:layout_below="@id/upspeed_text" android:layout_toRightOf="@id/separator" android:layout_marginLeft="@dimen/margin_half" - android:text="56 (1208) SEEDERS" android:textSize="12sp" android:textIsSelectable="false" /> @@ -110,10 +103,9 @@ android:id="@+id/downloaded_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignBaseline="@id/uploaded_unit" - android:layout_toLeftOf="@id/downloaded_unit" + android:layout_alignBaseline="@id/uploadedunit_text" + android:layout_toLeftOf="@id/downloadedunit_text" android:layout_marginRight="4dip" - android:text="325.6" android:textColor="#fff" android:textSize="33sp" android:fontFamily="sans-serif-light" @@ -126,7 +118,6 @@ android:layout_alignBaseline="@id/ratio_text" android:layout_toLeftOf="@id/separator" android:layout_marginRight="@dimen/margin_half" - android:text="/ 388.8MB" android:textSize="12sp" android:textIsSelectable="false" /> @@ -137,7 +128,6 @@ android:layout_alignBaseline="@id/upspeed_text" android:layout_toLeftOf="@id/separator" android:layout_marginRight="@dimen/margin_half" - android:text="400.8KB/s↓" android:textSize="22sp" android:textColor="#fff" android:fontFamily="sans-serif-light" @@ -150,7 +140,6 @@ android:layout_alignBaseline="@id/seeders_text" android:layout_toLeftOf="@id/separator" android:layout_marginRight="@dimen/margin_half" - android:text="128 (128) LEECHERS" android:textSize="12sp" android:textIsSelectable="false" /> @@ -160,7 +149,6 @@ android:layout_height="wrap_content" android:layout_below="@id/separator" android:layout_marginBottom="@dimen/margin_half" - android:text="DOWNLADING (80%): ETA 38 SECONDS" android:textIsSelectable="false" /> \ No newline at end of file diff --git a/lite/res/layout/fragment_torrents.xml b/lite/res/layout/fragment_torrents.xml index 65ae6c53..ae070955 100644 --- a/lite/res/layout/fragment_torrents.xml +++ b/lite/res/layout/fragment_torrents.xml @@ -19,6 +19,7 @@ android:drawableTop="@drawable/ic_empty_details" android:drawablePadding="8dip" android:text="@string/navigation_emptytorrents" + android:gravity="center" android:textIsSelectable="false" android:visibility="gone" /> diff --git a/lite/res/layout/list_item_torrent.xml b/lite/res/layout/list_item_torrent.xml index 4041e535..7f4d8a0f 100644 --- a/lite/res/layout/list_item_torrent.xml +++ b/lite/res/layout/list_item_torrent.xml @@ -15,7 +15,8 @@ android:layout_height="wrap_content" android:layout_marginLeft="@dimen/margin_half" android:layout_marginTop="@dimen/margin_half" - android:src="@drawable/ic_priority_normal" /> + android:src="@drawable/ic_priority_normal" + android:contentDescription="@string/status_priority_normal" /> @@ -52,14 +51,14 @@ android:layout_alignBaseline="@id/ratio_text" android:layout_toLeftOf="@id/ratio_text" android:layout_toRightOf="@id/torrent_checkbox" - android:text="325.6MB OF 388.8MB (0%)" android:textSize="12sp" android:textIsSelectable="false" /> - @@ -71,7 +70,6 @@ android:layout_below="@id/torrent_progressbar" android:layout_alignParentRight="true" android:layout_marginLeft="@dimen/margin_half" - android:text="↓400.8KB/s ↑1.4MB/s" android:textSize="12sp" android:textIsSelectable="false" /> @@ -82,7 +80,6 @@ android:layout_alignBaseline="@id/speed_text" android:layout_toLeftOf="@id/speed_text" android:layout_toRightOf="@id/torrent_checkbox" - android:text="246 (288) LEECHERS" android:textSize="12sp" android:textIsSelectable="false" /> diff --git a/lite/res/layout/list_item_torrentfile.xml b/lite/res/layout/list_item_torrentfile.xml new file mode 100644 index 00000000..01562e78 --- /dev/null +++ b/lite/res/layout/list_item_torrentfile.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + diff --git a/lite/res/menu/activity_details.xml b/lite/res/menu/activity_details.xml new file mode 100644 index 00000000..d9ddd500 --- /dev/null +++ b/lite/res/menu/activity_details.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml index 780a7fcf..22fba165 100644 --- a/lite/res/values/strings.xml +++ b/lite/res/values/strings.xml @@ -45,9 +45,46 @@ Uploading Active Inactive - Connected, but no torrent are active on the server + Connected, but no torrent are active within the current filter Select a torrent to view its details + Waiting to check… + Verifying local data… + Waiting to download %s + Error… + %1$s OF %2$s (%3$s) + %1$s, UPLOADED %2$s + SINCE $s + ~ %1$s + ETA %1$s + UNKNOWN ETA + RATIO %1$s + %1$s OF %2$s PEERS + ↑ %1$s + ↓ %1$s + Downloading + Seeding + Paused + Queued + Stopped + Unknown status + Not downloaded + Low priority + Normal priority + High priority + TRACKERS + ERRORS + FILES + + All labels + Unlabeled + New label + Setting a label is not supported by your client + + Torrent search + Search for torrents + + Servers Add new server Search sites @@ -120,6 +157,26 @@ Get support or report a bug About + Error during communication; check your connection + Internal error building request + Error parsing server response (please check your settings) + Web interface not connected to a running daemon + Access denied (please check your settings) + Can\'t read .torrent file + Error while parsing the RSS feed + This URL is not well-formed + Your web search URL is invalid: + Input is not a valid IP address or host name + Port number is always numeric + Directory paths end with a / or \ + Timeout can not be empty and is a positive number + The RSS feed item didn\'t provide an URL enclosure or link tag pointing to the .torrent file + The RSS feed item does not provide a link to browse to + URL is not a (valid) RSS feed + SD card not available to read/write + File does not seem to contain Transdroid settings + There is no settings file found + BitComet Bitflu 1.2+ diff --git a/lite/res/xml/searchable.xml b/lite/res/xml/searchable.xml new file mode 100644 index 00000000..9f811c8c --- /dev/null +++ b/lite/res/xml/searchable.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/lite/src/org/transdroid/lite/app/search/SearchHelper.java b/lite/src/org/transdroid/core/app/search/SearchHelper.java similarity index 99% rename from lite/src/org/transdroid/lite/app/search/SearchHelper.java rename to lite/src/org/transdroid/core/app/search/SearchHelper.java index 11244a19..b72cb7b8 100644 --- a/lite/src/org/transdroid/lite/app/search/SearchHelper.java +++ b/lite/src/org/transdroid/core/app/search/SearchHelper.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.app.search; +package org.transdroid.core.app.search; import java.util.ArrayList; import java.util.List; diff --git a/lite/src/org/transdroid/lite/app/search/SearchResult.java b/lite/src/org/transdroid/core/app/search/SearchResult.java similarity index 96% rename from lite/src/org/transdroid/lite/app/search/SearchResult.java rename to lite/src/org/transdroid/core/app/search/SearchResult.java index 77594909..6bbfaa76 100644 --- a/lite/src/org/transdroid/lite/app/search/SearchResult.java +++ b/lite/src/org/transdroid/core/app/search/SearchResult.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.app.search; +package org.transdroid.core.app.search; import java.util.Date; diff --git a/lite/src/org/transdroid/lite/app/search/SearchSite.java b/lite/src/org/transdroid/core/app/search/SearchSite.java similarity index 80% rename from lite/src/org/transdroid/lite/app/search/SearchSite.java rename to lite/src/org/transdroid/core/app/search/SearchSite.java index 2d7910df..a30ad09e 100644 --- a/lite/src/org/transdroid/lite/app/search/SearchSite.java +++ b/lite/src/org/transdroid/core/app/search/SearchSite.java @@ -1,12 +1,12 @@ -package org.transdroid.lite.app.search; +package org.transdroid.core.app.search; -import org.transdroid.lite.gui.navigation.FilterItem; +import org.transdroid.core.gui.lists.SimpleListItem; /** * Represents an available torrent site that can be searched using the Torrent Search package. * @author Eric Kok */ -public class SearchSite implements FilterItem { +public class SearchSite implements SimpleListItem { private final int id; private final String key; diff --git a/lite/src/org/transdroid/lite/app/settings/AboutSettings.java b/lite/src/org/transdroid/core/app/settings/AboutSettings.java similarity index 94% rename from lite/src/org/transdroid/lite/app/settings/AboutSettings.java rename to lite/src/org/transdroid/core/app/settings/AboutSettings.java index 9dd745c7..577f9fc9 100644 --- a/lite/src/org/transdroid/lite/app/settings/AboutSettings.java +++ b/lite/src/org/transdroid/core/app/settings/AboutSettings.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; import org.androidannotations.annotations.EBean; import org.androidannotations.annotations.RootContext; diff --git a/lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java b/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java similarity index 72% rename from lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java rename to lite/src/org/transdroid/core/app/settings/ApplicationSettings.java index 75a4c09e..7f6393d5 100644 --- a/lite/src/org/transdroid/lite/app/settings/ApplicationSettings.java +++ b/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; import java.util.ArrayList; import java.util.List; @@ -52,7 +52,8 @@ public class ApplicationSettings { } /** - * Returns the user-specified server settings for a specific server + * Returns the user-specified server settings for a specific server. WARNING: This method does not check if the + * settings actually exist and may rely on empty defaults if called not a non-existing server. * @param order The order number/identifying key of the settings to retrieve * @return The server settings object, loaded from shared preferences */ @@ -71,6 +72,53 @@ public class ApplicationSettings { prefs.getBoolean("server_alarmnew_" + order, false), false); } + /** + * Returns the settings of the server that was last used by the user. As opposed to getLastUsedServerKey(int), this + * method checks whether a server was already registered as being last used and check whether the server still + * exists. It returns the first server if that fails. If no servers are configured, null is returned. + * @return A server settings object of the last used server (or, if not known, the first server), or null if no + * servers exist + */ + public ServerSetting getLastUsedServer() { + int max = getMaxServer(); // Zero-based index, so with max == 0 there is 1 server + if (max < 0) { + // No servers configured + return null; + } + int last = getLastUsedServerKey(); + if (last < 0 || last > max) { + // Last server was never set or no longer exists + return getServerSetting(0); + } + return getServerSetting(last); + } + + /** + * Returns the order number/unique key of the server that the used last used; use with getServerSettings(int) or + * call getLastUsedServer directly. WARNING: the returned integer may no longer refer to a known server settings + * object: check the bounds. + * @return An integer indicating the order number/key or the last used server, or -1 if it was not set + */ + public int getLastUsedServerKey() { + return prefs.getInt("system_lastusedserver", -1); + } + + /** + * Registers some server as being the last used by the user + * @param server The settings of the server that the user last used + */ + public void setLastUsedServer(ServerSetting server) { + setLastUsedServerKey(server.getOrder()); + } + + /** + * Registers the order number/unique key of some server as being last used by the user + * @param order The key identifying the specific server + */ + public void setLastUsedServerKey(int order) { + prefs.edit().putInt("system_lastusedserver", order).commit(); + } + /** * Returns all available user-configured web-based (as opped to in-app) search sites * @return A list of all stored web search site settings objects diff --git a/lite/src/org/transdroid/lite/app/settings/NotificationSettings.java b/lite/src/org/transdroid/core/app/settings/NotificationSettings.java similarity index 98% rename from lite/src/org/transdroid/lite/app/settings/NotificationSettings.java rename to lite/src/org/transdroid/core/app/settings/NotificationSettings.java index 1a68aabd..58bd4003 100644 --- a/lite/src/org/transdroid/lite/app/settings/NotificationSettings.java +++ b/lite/src/org/transdroid/core/app/settings/NotificationSettings.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; import org.androidannotations.annotations.EBean; import org.androidannotations.annotations.EBean.Scope; diff --git a/lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java b/lite/src/org/transdroid/core/app/settings/RssfeedSetting.java similarity index 89% rename from lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java rename to lite/src/org/transdroid/core/app/settings/RssfeedSetting.java index 69ee3823..b964cfb2 100644 --- a/lite/src/org/transdroid/lite/app/settings/RssfeedSetting.java +++ b/lite/src/org/transdroid/core/app/settings/RssfeedSetting.java @@ -1,6 +1,6 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; -import org.transdroid.lite.gui.navigation.FilterItem; +import org.transdroid.core.gui.lists.SimpleListItem; import android.net.Uri; import android.text.TextUtils; @@ -9,7 +9,7 @@ import android.text.TextUtils; * Represents a user-specified RSS feed. * @author Eric Kok */ -public class RssfeedSetting implements FilterItem { +public class RssfeedSetting implements SimpleListItem { private static final String DEFAULT_NAME = "Default"; diff --git a/lite/src/org/transdroid/lite/app/settings/ServerSetting.java b/lite/src/org/transdroid/core/app/settings/ServerSetting.java similarity index 78% rename from lite/src/org/transdroid/lite/app/settings/ServerSetting.java rename to lite/src/org/transdroid/core/app/settings/ServerSetting.java index 164be4ad..3070c730 100644 --- a/lite/src/org/transdroid/lite/app/settings/ServerSetting.java +++ b/lite/src/org/transdroid/core/app/settings/ServerSetting.java @@ -1,8 +1,10 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; +import org.transdroid.core.gui.lists.SimpleListItem; import org.transdroid.daemon.Daemon; +import org.transdroid.daemon.DaemonSettings; +import org.transdroid.daemon.IDaemonAdapter; import org.transdroid.daemon.OS; -import org.transdroid.lite.gui.navigation.FilterItem; import android.text.TextUtils; @@ -10,7 +12,7 @@ import android.text.TextUtils; * Represents a user-configured remote server. * @author Eric Kok */ -public class ServerSetting implements FilterItem { +public class ServerSetting implements SimpleListItem { private static final String DEFAULT_NAME = "Default"; @@ -192,4 +194,29 @@ public class ServerSetting implements FilterItem { + (Daemon.supportsCustomFolder(getType()) && getFolder() != null ? getFolder() : ""); } + @Override + public boolean equals(Object o) { + if (o instanceof ServerSetting) { + // Directly compare order numbers/unique keys + return ((ServerSetting) o).getOrder() == this.key; + } else if (o instanceof DaemonSettings) { + // Old-style DaemonSettings objects can be equal if they were constructed from a ServerSettings object: + // idString should reflect the local key/order + return ((DaemonSettings) o).getIdString().equals(Integer.toString(this.key)); + } + // Other objects are never equal to this + return false; + } + + public IDaemonAdapter createServerAdapter() { + // Convert local server settings into an old-style DaemonSetting object + // The local integer key is converted to the idString string + // TODO: Add localaddress and localnetwork to DaemonSettings, or solve properly rework the Connect library + // handling of settings + DaemonSettings daemonSettings = new DaemonSettings(name, type, address, port, ssl, sslTrustAll, sslTrustKey, + folder, useAuthentication, username, password, extraPass, os, downloadDir, ftpUrl, ftpPassword, + timeout, alarmOnFinishedDownload, alarmOnNewTorrent, Integer.toString(key), isAutoGenerated); + return type.createAdapter(daemonSettings); + } + } diff --git a/lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java b/lite/src/org/transdroid/core/app/settings/WebsearchSetting.java similarity index 85% rename from lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java rename to lite/src/org/transdroid/core/app/settings/WebsearchSetting.java index b4da7aed..d278544a 100644 --- a/lite/src/org/transdroid/lite/app/settings/WebsearchSetting.java +++ b/lite/src/org/transdroid/core/app/settings/WebsearchSetting.java @@ -1,6 +1,6 @@ -package org.transdroid.lite.app.settings; +package org.transdroid.core.app.settings; -import org.transdroid.lite.gui.navigation.FilterItem; +import org.transdroid.core.gui.lists.SimpleListItem; import android.net.Uri; import android.text.TextUtils; @@ -9,7 +9,7 @@ import android.text.TextUtils; * Represents a user-specified website that can be searched (by starting the browser, rather than in-app) * @author Eric Kok */ -public class WebsearchSetting implements FilterItem { +public class WebsearchSetting implements SimpleListItem { private static final String DEFAULT_NAME = "Default"; private static final String KEY_PREFIX = "websearch_"; diff --git a/lite/src/org/transdroid/core/gui/DetailsActivity.java b/lite/src/org/transdroid/core/gui/DetailsActivity.java new file mode 100644 index 00000000..5e57cfa3 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/DetailsActivity.java @@ -0,0 +1,132 @@ +package org.transdroid.core.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.Background; +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.Extra; +import org.androidannotations.annotations.FragmentById; +import org.androidannotations.annotations.InstanceState; +import org.androidannotations.annotations.OptionsItem; +import org.androidannotations.annotations.OptionsMenu; +import org.androidannotations.annotations.UiThread; +import org.transdroid.core.R; +import org.transdroid.core.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.gui.lists.LocalTorrent; +import org.transdroid.daemon.IDaemonAdapter; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentDetails; +import org.transdroid.daemon.TorrentFile; +import org.transdroid.daemon.task.DaemonTaskFailureResult; +import org.transdroid.daemon.task.DaemonTaskResult; +import org.transdroid.daemon.task.GetFileListTask; +import org.transdroid.daemon.task.GetFileListTaskSuccessResult; +import org.transdroid.daemon.task.GetTorrentDetailsTask; +import org.transdroid.daemon.task.GetTorrentDetailsTaskSuccessResult; +import org.transdroid.daemon.task.RetrieveTask; +import org.transdroid.daemon.task.RetrieveTaskSuccessResult; + +import android.widget.Toast; + +import com.actionbarsherlock.app.SherlockFragmentActivity; + +@EActivity(R.layout.activity_details) +@OptionsMenu(R.menu.activity_details) +public class DetailsActivity extends SherlockFragmentActivity { + + @Extra + @InstanceState + protected Torrent torrent; + + // Settings + @Bean + protected ApplicationSettings applicationSettings; + private IDaemonAdapter currentConnection = null; + + // Details view components + @FragmentById(R.id.torrent_details) + protected DetailsFagment fragmentDetails; + + @AfterViews + protected void init() { + + // Simple action bar with up, torrent name as title and refresh button + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setTitle(torrent.getName()); + + // Connect to the last used server + ServerSetting lastUsed = applicationSettings.getLastUsedServer(); + currentConnection = lastUsed.createServerAdapter(); + + // Load fine details and torrent files + refreshTorrentDetails(); + + } + + @OptionsItem(R.id.action_refresh) + protected void refreshScreen() { + refreshTorrent(); + refreshTorrentDetails(); + refreshTorrentFiles(); + } + + @Background + protected void refreshTorrent() { + DaemonTaskResult result = RetrieveTask.create(currentConnection).execute(); + if (result instanceof RetrieveTaskSuccessResult) { + onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(), ((RetrieveTaskSuccessResult) result).getLabels()); + } else { + onCommunicationError((DaemonTaskFailureResult)result); + } + } + + @UiThread + protected void onTorrentsRetrieved(List torrents, List labels) { + // Update the details fragment + fragmentDetails.perhapsUpdateTorrent(torrents); + } + + @Background + protected void refreshTorrentDetails() { + DaemonTaskResult result = GetTorrentDetailsTask.create(currentConnection, torrent).execute(); + if (result instanceof GetTorrentDetailsTaskSuccessResult) { + onTorrentDetailsRetrieved(((GetTorrentDetailsTaskSuccessResult) result).getTorrentDetails()); + } else { + onCommunicationError((DaemonTaskFailureResult)result); + } + } + + @UiThread + protected void onTorrentDetailsRetrieved(TorrentDetails torrentDetails) { + // Update the details fragment with the new fine details for the shown torrent + fragmentDetails.updateTorrentDetails(torrentDetails); + } + + @Background + protected void refreshTorrentFiles() { + DaemonTaskResult result = GetFileListTask.create(currentConnection, torrent).execute(); + if (result instanceof GetFileListTaskSuccessResult) { + onTorrentFilesRetrieved(((GetFileListTaskSuccessResult) result).getFiles()); + } else { + onCommunicationError((DaemonTaskFailureResult)result); + } + } + + @UiThread + protected void onTorrentFilesRetrieved(List torrentFiles) { + // Update the details fragment with the newly retrieved list of files + fragmentDetails.updateTorrentFiles(new ArrayList(torrentFiles)); + } + + @UiThread + protected void onCommunicationError(DaemonTaskFailureResult result) { + // TODO: Properly report this error + Toast.makeText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), + Toast.LENGTH_LONG).show(); + } + +} diff --git a/lite/src/org/transdroid/core/gui/DetailsFagment.java b/lite/src/org/transdroid/core/gui/DetailsFagment.java new file mode 100644 index 00000000..f05a8a3b --- /dev/null +++ b/lite/src/org/transdroid/core/gui/DetailsFagment.java @@ -0,0 +1,113 @@ +package org.transdroid.core.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.InstanceState; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.core.gui.lists.DetailsAdapter; +import org.transdroid.core.gui.lists.SimpleListItemAdapter; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentDetails; +import org.transdroid.daemon.TorrentFile; + +import android.widget.TextView; + +import com.actionbarsherlock.app.SherlockFragment; +import com.actionbarsherlock.view.SherlockListView; + +/** + * Fragment that shown detailed statistics about some torrent. These come from some already fetched {@link Torrent} + * object, but it also retrieves further detailed statistics. + * @author Eric Kok + */ +@EFragment(R.layout.fragment_details) +public class DetailsFagment extends SherlockFragment { + + // Local data + @InstanceState + protected Torrent torrent = null; + @InstanceState + protected TorrentDetails torrentDetails = null; + @InstanceState + protected ArrayList torrentFiles = null; + + // Views + @ViewById(R.id.details_list) + protected SherlockListView detailsList; + @ViewById + protected TextView emptyText; + + @AfterViews + protected void init() { + + detailsList.setAdapter(new DetailsAdapter()); + detailsList.setEmptyView(emptyText); // Shows a text that no torrent was selected yet + if (torrent != null) + updateTorrent(torrent); + if (torrentDetails != null) + updateTorrentDetails(torrentDetails); + if (torrentFiles != null) + updateTorrentFiles(torrentFiles); + + } + + /** + * Updates the details adapter header to show the new torrent data + * @param newTorrent The new torrent object + */ + public void updateTorrent(Torrent newTorrent) { + this.torrent = newTorrent; + ((DetailsAdapter) detailsList.getAdapter()).updateTorrent(newTorrent); + } + + /** + * Updates the details adapter to show the list of trackers and tracker errors + * @param newTorrentDetails The new fine details object of some torrent + */ + public void updateTorrentDetails(TorrentDetails newTorrentDetails) { + this.torrentDetails = newTorrentDetails; + ((DetailsAdapter) detailsList.getAdapter()).updateTrackers(SimpleListItemAdapter.SimpleStringItem + .wrapStringsList(newTorrentDetails.getTrackers())); + ((DetailsAdapter) detailsList.getAdapter()).updateErrors(SimpleListItemAdapter.SimpleStringItem + .wrapStringsList(newTorrentDetails.getErrors())); + } + + /** + * Updates the list adapter to show a new list of torrent files, replacing the old files list + * @param newTorrents The new, updated list of torrent file objects + */ + public void updateTorrentFiles(ArrayList 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 + * @param torrents The last of retrieved torrents + */ + public void perhapsUpdateTorrent(List torrents) { + for (Torrent newTorrent : torrents) { + if (newTorrent.getUniqueID().equals(this.torrent.getUniqueID())) { + // Found, so we can update our data as well + updateTorrent(newTorrent); + break; + } + } + } + + /** + * Clear the screen by fully clearing the internal merge list (with header and other lists) + */ + public void clear() { + detailsList.setAdapter(new DetailsAdapter()); + torrent = null; + torrentDetails = null; + torrentFiles = null; + } + +} diff --git a/lite/src/org/transdroid/core/gui/SearchHistoryProvider.java b/lite/src/org/transdroid/core/gui/SearchHistoryProvider.java new file mode 100644 index 00000000..da59bbf1 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/SearchHistoryProvider.java @@ -0,0 +1,22 @@ +package org.transdroid.core.gui; + +import android.content.Context; +import android.content.SearchRecentSuggestionsProvider; +import android.provider.SearchRecentSuggestions; + +public class SearchHistoryProvider extends SearchRecentSuggestionsProvider { + + public final static String AUTHORITY = "org.transdroid.core.gui.SearchHistoryProvider"; + public final static int MODE = DATABASE_MODE_QUERIES; + + public SearchHistoryProvider() { + super(); + setupSuggestions(AUTHORITY, MODE); + } + + public static void clearHistory(Context context) { + SearchRecentSuggestions suggestions = new SearchRecentSuggestions(context, + SearchHistoryProvider.AUTHORITY, SearchHistoryProvider.MODE); + suggestions.clearHistory(); + } +} diff --git a/lite/src/org/transdroid/core/gui/TorrentsActivity.java b/lite/src/org/transdroid/core/gui/TorrentsActivity.java new file mode 100644 index 00000000..cfd82a53 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/TorrentsActivity.java @@ -0,0 +1,253 @@ +package org.transdroid.core.gui; + +import java.util.ArrayList; +import java.util.List; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.Background; +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.androidannotations.annotations.FragmentById; +import org.androidannotations.annotations.InstanceState; +import org.androidannotations.annotations.OptionsItem; +import org.androidannotations.annotations.OptionsMenu; +import org.androidannotations.annotations.SystemService; +import org.androidannotations.annotations.UiThread; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.core.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.gui.lists.LocalTorrent; +import org.transdroid.core.gui.lists.SimpleListItem; +import org.transdroid.core.gui.navigation.FilterListAdapter; +import org.transdroid.core.gui.navigation.FilterListAdapter_; +import org.transdroid.core.gui.navigation.Label; +import org.transdroid.core.gui.navigation.NavigationHelper; +import org.transdroid.core.gui.navigation.StatusType; +import org.transdroid.core.gui.navigation.StatusType.StatusTypeFilter; +import org.transdroid.daemon.IDaemonAdapter; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.task.DaemonTaskFailureResult; +import org.transdroid.daemon.task.DaemonTaskResult; +import org.transdroid.daemon.task.RetrieveTask; +import org.transdroid.daemon.task.RetrieveTaskSuccessResult; + +import android.annotation.TargetApi; +import android.app.SearchManager; +import android.os.Build; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.Toast; + +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.app.ActionBar.OnNavigationListener; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +import com.actionbarsherlock.view.SherlockListView; +import com.actionbarsherlock.widget.SearchView; + +@EActivity(R.layout.activity_torrents) +@OptionsMenu(R.menu.activity_torrents) +public class TorrentsActivity extends SherlockFragmentActivity implements OnNavigationListener { + + // Navigation components + @Bean + protected NavigationHelper navigationHelper; + @ViewById + protected SherlockListView filtersList; + protected FilterListAdapter navigationListAdapter = null; + protected FilterListAdapter navigationSpinnerAdapter = null; + @SystemService + protected SearchManager searchManager; + + // Settings + @Bean + protected ApplicationSettings applicationSettings; + @InstanceState + boolean firstStart = true; + private IDaemonAdapter currentConnection = null; + + // Torrents list components + @FragmentById(R.id.torrent_list) + protected TorrentsFragment fragmentTorrents; + + // Details view components + @FragmentById(R.id.torrent_details) + protected DetailsFagment fragmentDetails; + + @AfterViews + protected void init() { + + // Set up navigation, with an action bar spinner and possibly (if room) with a filter list + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + getSupportActionBar().setHomeButtonEnabled(false); + navigationSpinnerAdapter = FilterListAdapter_.getInstance_(this); + // Servers are always added to the action bar spinner + navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); + getSupportActionBar().setListNavigationCallbacks(navigationSpinnerAdapter, this); + if (filtersList != null) { + // There was room for a dedicated filter list; add the status types + navigationListAdapter = FilterListAdapter_.getInstance_(this); + filtersList.setAdapter(navigationListAdapter); + navigationListAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); + filtersList.setOnItemSelectedListener(onFilterListItemSelected); + } else { + // Add status types directly to the action bar spinner + navigationSpinnerAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); + } + + // Connect to the last used server + ServerSetting lastUsed = applicationSettings.getLastUsedServer(); + if (lastUsed == null) { + // No server settings yet; + return; + } + // Set this as selection in the action bar spinner; we can use the server setting key since we have stable ids + // TODO: Does this call the action bar item selection callback? + getSupportActionBar().setSelectedNavigationItem(lastUsed.getOrder()); + + // Handle any start up intents or instead just refresh the torrents list + if (firstStart) { + handleStartIntent(); + } else { + refreshTorrents(); + } + + } + + @Override + protected void onResume() { + super.onResume(); + refreshTorrents(); + } + + @TargetApi(Build.VERSION_CODES.FROYO) + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + // For Android 2.1+, add an expandable SearchView to the action bar + MenuItem item = menu.findItem(R.id.action_search); + if (android.os.Build.VERSION.SDK_INT >= 8) { + final SearchView searchView = new SearchView(this); + searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); + searchView.setQueryRefinementEnabled(true); + item.setActionView(searchView); + } + return true; + } + + /** + * Called when an item in the action bar navigation spinner was selected + */ + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + Object item = navigationSpinnerAdapter.getItem(itemPosition); + if (item instanceof SimpleListItem) { + // A filter item was selected form the navigation spinner + filterSelected((SimpleListItem) item); + return true; + } + // A header was selected; no action + return false; + } + + // Handles clicks (selections) on the dedicated list of filter items (if it exists) + // NOTE: Unfortunately we cannot use the @ItemSelect(R.id.filters_list) annotation as it throws NPE exceptions when + // the list doesn't exist (read: on small screens) + protected OnItemSelectedListener onFilterListItemSelected = new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + filterSelected((SimpleListItem) filtersList.getAdapter().getItem(position)); + } + @Override + public void onNothingSelected(AdapterView parent) { + // TODO: Check if this happens + } + }; + + /** + * A new filter was selected; update the view over the current data + * @param selected True if the filter item was selected, false if it was deselected + * @param item The touched filter item + */ + protected void filterSelected(SimpleListItem item) { + + // Server selection + if (item instanceof ServerSetting) { + ServerSetting server = (ServerSetting) item; + + if (currentConnection != null && server.equals(currentConnection.getSettings())) { + // Already connected to this server; just ask for a refresh instead + refreshTorrents(); + return; + } + + // Update connection to the newly selected server and refresh + currentConnection = server.createServerAdapter(); + clearScreens(); + refreshTorrents(); + + } + + if (item instanceof StatusTypeFilter) { + // TODO: Update the torrent list view + } + + if (item instanceof Label) { + // TODO: Update the torrent list view + } + + } + + /** + * If required, add torrents, switch to a specific server, etc. + */ + protected void handleStartIntent() { + // TODO: Handle start intent + } + + @OptionsItem(R.id.action_refresh) + protected void refreshScreen() { + refreshTorrents(); + // TODO: Refresh TorentDetails and TorrentFiles as well + } + + private void clearScreens() { + // Clear the currently shown list of torrent and perhaps the details + fragmentTorrents.clear(); + if (fragmentDetails != null) { + fragmentDetails.clear(); + } + } + + @Background + protected void refreshTorrents() { + DaemonTaskResult result = RetrieveTask.create(currentConnection).execute(); + if (result instanceof RetrieveTaskSuccessResult) { + onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(), ((RetrieveTaskSuccessResult) result).getLabels()); + } else { + onCommunicationError((DaemonTaskFailureResult)result); + } + } + + @UiThread + protected void onTorrentsRetrieved(List torrents, List labels) { + // Report the newly retrieved list of torrents to the torrents fragment + fragmentTorrents.updateTorrents(new ArrayList(torrents)); + // Update the details fragment if the currently shown torrent is in the newly retrieved list + if (fragmentDetails != null) { + fragmentDetails.perhapsUpdateTorrent(torrents); + } + // TODO: Update local list of labels + } + + @UiThread + protected void onCommunicationError(DaemonTaskFailureResult result) { + // TODO: Properly report this error + Toast.makeText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), + Toast.LENGTH_LONG).show(); + } + +} diff --git a/lite/src/org/transdroid/core/gui/TorrentsFragment.java b/lite/src/org/transdroid/core/gui/TorrentsFragment.java new file mode 100644 index 00000000..a62dd8d2 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/TorrentsFragment.java @@ -0,0 +1,69 @@ +package org.transdroid.core.gui; + +import java.util.ArrayList; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.InstanceState; +import org.androidannotations.annotations.ItemClick; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.core.gui.lists.TorrentsAdapter; +import org.transdroid.daemon.Torrent; + +import android.view.View; +import android.widget.TextView; + +import com.actionbarsherlock.app.SherlockFragment; +import com.actionbarsherlock.view.SherlockListView; + +@EFragment(R.layout.fragment_torrents) +public class TorrentsFragment extends SherlockFragment { + + // Local data + @InstanceState + protected ArrayList torrents = null; + + // Views + @ViewById(R.id.torrent_list) + protected SherlockListView torrentsList; + @ViewById + protected TextView emptyText; + + @AfterViews + protected void init() { + torrentsList.setAdapter(new TorrentsAdapter()); + torrentsList.setEmptyView(emptyText); + if (torrents != null) + updateTorrents(torrents); + } + + /** + * Updates the list adapter to show a new list of torrent objects, replacing the old torrents completely + * @param newTorrents The new, updated list of torrents + */ + public void updateTorrents(ArrayList newTorrents) { + torrents = newTorrents; + if (newTorrents == null) { + // Hide list adapter as well as empty text + torrentsList.setVisibility(View.GONE); + emptyText.setVisibility(View.GONE); + } else { + ((TorrentsAdapter)torrentsList.getAdapter()).update(newTorrents); + // NOTE: This will also make visible again the list or empty view + } + } + + /** + * Clear currently visible list of torrents + */ + public void clear() { + updateTorrents(null); + } + + @ItemClick(R.id.torrent_list) + protected void torrentsListClicked(Torrent torrent) { + + } + +} diff --git a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java new file mode 100644 index 00000000..adb3b573 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java @@ -0,0 +1,141 @@ +package org.transdroid.core.gui.lists; + +import java.util.List; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.RootContext; +import org.transdroid.core.R; +import org.transdroid.core.gui.navigation.FilterSeparatorView_; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentFile; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import com.commonsware.cwac.merge.MergeAdapter; + +/** + * List adapter that holds a header view showing torrent details and show the list list contained by the torrent. + * @author Eric Kok + */ +@EBean +public class DetailsAdapter extends MergeAdapter { + + @RootContext + protected Context context; + private TorrentDetailsView torrentDetailsView = null; + private TorrentFilesAdapter torrentFilesAdapter = null; + private SimpleListItemAdapter trackersAdapter = null; + private SimpleListItemAdapter errorsAdapter = null; + + /** + * Update the torrent data in the details header of this merge adapter + * @param torrent The torrent for which detailed data is shown + */ + public void updateTorrent(Torrent torrent) { + if (this.torrentDetailsView == null) { + torrentDetailsView = TorrentDetailsView_.build(context); + addView(torrentDetailsView, false); + } + torrentDetailsView.update(torrent); + } + + /** + * Update the list of files contained in this torrent + * @param torrentFiles The new list of files + */ + public void updateTorrentFiles(List torrentFiles) { + if (this.torrentFilesAdapter == null && torrentFiles != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_files)), false); + this.torrentFilesAdapter = new TorrentFilesAdapter(context, torrentFiles); + addAdapter(torrentFilesAdapter); + } else if (this.torrentFilesAdapter != null && torrentFiles != null) { + this.torrentFilesAdapter.update(torrentFiles); + } else { + this.torrentFilesAdapter = null; + } + } + + /** + * Update the list of trackers + * @param trackers The new list of trackers known for this torrent + */ + public void updateTrackers(List trackers) { + if (this.trackersAdapter == null && trackers != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_trackers)), false); + this.trackersAdapter = new SimpleListItemAdapter(context, trackers); + addAdapter(trackersAdapter); + } else if (this.trackersAdapter != null && trackers != null) { + this.trackersAdapter.update(trackers); + } else { + this.trackersAdapter = null; + } + } + + /** + * Update the list of errors + * @param errors The new list of errors known for this torrent + */ + public void updateErrors(List errors) { + if (this.errorsAdapter == null && errors != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_errors)), false); + this.errorsAdapter = new SimpleListItemAdapter(context, errors); + addAdapter(errorsAdapter); + } else if (this.errorsAdapter != null && errors != null) { + this.errorsAdapter.update(errors); + } else { + this.errorsAdapter = null; + } + } + + protected class TorrentFilesAdapter extends BaseAdapter { + + private final Context context; + private List items; + + public TorrentFilesAdapter(Context context, List items) { + this.context = context; + this.items = items; + } + + /** + * Allows updating of the full data list underlying this adapter, replacing all items + * @param newItems The new list of files to display + */ + public void update(List newItems) { + this.items = newItems; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Override + public TorrentFile getItem(int position) { + return items.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TorrentFileView torrentFileView; + if (convertView == null) { + torrentFileView = TorrentFileView_.build(context); + } else { + torrentFileView = (TorrentFileView) convertView; + } + torrentFileView.bind(getItem(position)); + return torrentFileView; + } + + } + +} diff --git a/lite/src/org/transdroid/core/gui/lists/LocalTorrent.java b/lite/src/org/transdroid/core/gui/lists/LocalTorrent.java new file mode 100644 index 00000000..76722530 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/LocalTorrent.java @@ -0,0 +1,233 @@ +package org.transdroid.core.gui.lists; + +import java.util.Locale; + +import org.transdroid.core.R; +import org.transdroid.daemon.DaemonException; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentStatus; +import org.transdroid.daemon.util.FileSizeConverter; +import org.transdroid.daemon.util.TimespanConverter; + +import android.content.res.Resources; + +/** + * Wrapper around Torrent to provide some addition getters that give translatable or otherwise formatted Strings of + * torrent statistics. + * @author Eric Kok + */ +public class LocalTorrent { + + /** + * Creates the LocalTorrent object so that the translatable/formattable version of a Torrent can be used. + * @param torrent The Torrent object + * @return The torrent wrapped as LocalTorrent object + */ + public static LocalTorrent fromTorrent(Torrent torrent) { + return new LocalTorrent(torrent); + } + + private final Torrent t; + + private LocalTorrent(Torrent torrent) { + this.t = torrent; + } + + private static final String DECIMAL_FORMATTER = "%.1f"; + + /** + * Builds a string showing the upload/download seed ratio. If not downloading, it will base the ratio on the total + * size; so if you created the torrent yourself you will have downloaded 0 bytes, but the ratio will pretend you + * have 100%. + * @return A nicely formatted string containing the upload/download seed ratio + */ + public String getRatioString() { + long baseSize = t.getTotalSize(); + if (t.getStatusCode() == TorrentStatus.Downloading) { + baseSize = t.getDownloadedEver(); + } + if (baseSize <= 0) { + return String.format(Locale.getDefault(), DECIMAL_FORMATTER, 0d); + } else if (t.getRatio() == Double.POSITIVE_INFINITY) { + return "\u221E"; + } else { + return String.format(Locale.getDefault(), DECIMAL_FORMATTER, t.getRatio()); + } + } + + /** + * Returns a formatted string indicating the current progress in terms of transferred bytes + * @param r The context resources, to access translations + * @param withAvailability Whether to show file availability in-line + * @return A nicely formatted string indicating torrent status and, if applicable, progress in bytes + */ + public String getProgressSizeText(Resources r, boolean withAvailability) { + + switch (t.getStatusCode()) { + case Waiting: + case Checking: + case Error: + // Not downloading yet + return r.getString(R.string.status_waitingtodl, FileSizeConverter.getSize(t.getTotalSize())); + case Downloading: + // Downloading + return r.getString( + R.string.status_size1, + FileSizeConverter.getSize(t.getDownloadedEver()), + FileSizeConverter.getSize(t.getTotalSize()), + String.format(DECIMAL_FORMATTER, t.getDownloadedPercentage() * 100) + + "%" + + (!withAvailability ? "" : "/" + + String.format(DECIMAL_FORMATTER, t.getAvailability() * 100) + "%")); + case Seeding: + case Paused: + case Queued: + // Seeding or paused + return r.getString(R.string.status_size2, FileSizeConverter.getSize(t.getTotalSize()), + FileSizeConverter.getSize(t.getUploadedEver())); + default: + return ""; + } + + } + + /** + * Returns a formatted string indicating either the expected time to download (ETA) or, when seeding, the ratio + * @param r The context resources, to access translations + * @return A string like '~ 34 seconds', or 'RATIO 8.2' or an empty string + */ + public String getProgressEtaRatioText(Resources r) { + switch (t.getStatusCode()) { + case Downloading: + // Downloading + return getRemainingTimeString(r, true, false); + case Seeding: + case Paused: + case Queued: + // Seeding or paused + return r.getString(R.string.status_ratio, getRatioString()); + case Waiting: + case Checking: + case Error: + default: + return ""; + } + } + + /** + * Returns a formatted string indicating the torrent status and connected peers + * @param r The context resources, to access translations + * @return A string like 'Queued' or, when seeding or leeching, '2 OF 28 PEERS' + */ + public String getProgressConnectionText(Resources r) { + + switch (t.getStatusCode()) { + case Waiting: + return r.getString(R.string.status_waiting); + case Checking: + return r.getString(R.string.status_checking); + case Downloading: + return r.getString(R.string.status_peers, t.getPeersSendingToUs(), t.getPeersConnected()); + case Seeding: + return r.getString(R.string.status_peers, t.getPeersGettingFromUs(), t.getPeersConnected()); + case Paused: + return r.getString(R.string.status_paused); + case Queued: + return r.getString(R.string.status_stopped); + case Error: + return r.getString(R.string.status_error); + default: + return r.getString(R.string.status_unknown); + } + + } + + /** + * Returns a formatted string indicating current transfer speeds for the torrent + * @param r The context resources, to access translations + * @return A string like '↓ 28KB/s ↑ 1.8MB/s', or an empty string when not transferrring + */ + public String getProgressSpeedText(Resources r) { + + switch (t.getStatusCode()) { + case Waiting: + case Checking: + case Paused: + case Queued: + return ""; + case Downloading: + return r.getString(R.string.status_speed_down, FileSizeConverter.getSize(t.getRateDownload()) + "/s") + " " + + r.getString(R.string.status_speed_up, FileSizeConverter.getSize(t.getRateUpload()) + "/s"); + case Seeding: + return r.getString(R.string.status_speed_up, FileSizeConverter.getSize(t.getRateUpload()) + "/s"); + default: + return ""; + } + + } + + public String getProgressStatusEta(Resources r) { + switch (t.getStatusCode()) { + case Waiting: + return r.getString(R.string.status_waiting).toUpperCase(Locale.getDefault()); + case Checking: + return r.getString(R.string.status_checking).toUpperCase(Locale.getDefault()); + case Error: + return r.getString(R.string.status_error).toUpperCase(Locale.getDefault()); + case Downloading: + // Downloading + return r.getString(R.string.status_downloading).toUpperCase(Locale.getDefault()) + " (" + + String.format(DECIMAL_FORMATTER, t.getDownloadedPercentage() * 100) + "%), " + + getRemainingTimeString(r, false, true); + case Seeding: + return r.getString(R.string.status_seeding).toUpperCase(Locale.getDefault()); + case Paused: + return r.getString(R.string.status_paused).toUpperCase(Locale.getDefault()); + case Queued: + return r.getString(R.string.status_queued).toUpperCase(Locale.getDefault()); + default: + return r.getString(R.string.status_unknown).toUpperCase(Locale.getDefault()); + } + } + + /** + * Returns a formatted string indicating the remaining download time + * @param r The context resources, to access translations + * @param inDays Whether to show days or use hours for > 24 hours left instead + * @return A string like '4d 8h 34m 5s' or '2m 3s' + */ + public String getRemainingTimeString(Resources r, boolean abbreviate, boolean inDays) { + if (t.getEta() == -1 || t.getEta() == -2) { + return r.getString(R.string.status_unknowneta); + } + return r.getString(abbreviate ? R.string.status_eta : R.string.status_etalong, + TimespanConverter.getTime(t.getEta(), inDays)); + } + + /** + * Convert a DaemonException to a translatable human-readable error message + * @param e The exception that was thrown by the server + * @return A string resource ID to show to the user + */ + public static int getResourceForDaemonException(DaemonException e) { + switch (e.getType()) { + case MethodUnsupported: + return R.string.error_jsonrequesterror; + case ConnectionError: + return R.string.error_httperror; + case UnexpectedResponse: + return R.string.error_jsonresponseerror; + case ParsingFailed: + return R.string.error_jsonrequesterror; + case NotConnected: + return R.string.error_daemonnotconnected; + case AuthenticationFailure: + return R.string.error_401; + case FileAccessError: + return R.string.error_torrentfile; + default: + return R.string.error_httperror; + } + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterItem.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java similarity index 64% rename from lite/src/org/transdroid/lite/gui/navigation/FilterItem.java rename to lite/src/org/transdroid/core/gui/lists/SimpleListItem.java index 81638d89..605aa3ca 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterItem.java +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java @@ -1,11 +1,11 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.lists; /** * Represents a filter item as shown in the navigation list or spinner. * * @author Eric Kok */ -public interface FilterItem { +public interface SimpleListItem { public String getName(); diff --git a/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java new file mode 100644 index 00000000..f44c86f5 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java @@ -0,0 +1,91 @@ +package org.transdroid.core.gui.lists; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +public class SimpleListItemAdapter extends BaseAdapter { + + private final Context context; + private List items; + + public SimpleListItemAdapter(Context context, List items) { + this.context = context; + this.items = items; + } + + /** + * Allows updating of the full data list underlying this adapter, replacing all items + * @param newItems The new list of filter items to display + */ + public void update(List newItems) { + this.items = newItems; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return items.size(); + } + + @Override + public SimpleListItem getItem(int position) { + return items.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + SimpleListItemView filterItemView; + if (convertView == null) { + filterItemView = SimpleListItemView_.build(context); + } else { + filterItemView = (SimpleListItemView) convertView; + } + filterItemView.bind(getItem(position)); + return filterItemView; + } + + /** + * Represents a very simple list item that only contains a single string to show in the list. Use wrapStringsList to + * wrap an existing list of strings into a list of {@link SimpleListItem}s. + * @author Eric Kok + */ + public static class SimpleStringItem implements SimpleListItem { + + /** + * Wraps a simple string of strings into a list of SimpleStringItem to add as data to a + * {@link SimpleListItemAdapter} + * @param errorStrings A list of string + * @return A list of SimpleStringItem objects representing the input strings + */ + public static List wrapStringsList(List errorStrings) { + ArrayList errors = new ArrayList(); + for (String errorString : errorStrings) { + errors.add(new SimpleStringItem(errorString)); + } + return errors; + } + + private final String string; + + public SimpleStringItem(String string) { + this.string = string; + } + + @Override + public String getName() { + return this.string; + } + + } + +} \ No newline at end of file diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItemView.java similarity index 58% rename from lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java rename to lite/src/org/transdroid/core/gui/lists/SimpleListItemView.java index 532f85f3..d428939f 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterItemView.java +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItemView.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.lists; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; @@ -9,20 +9,20 @@ import android.widget.LinearLayout; import android.widget.TextView; /** - * View that represents some {@link FilterItem} object and simple prints out the text (in proper style) + * View that represents some {@link SimpleListItem} object and simple prints out the text (in proper style) * @author Eric Kok */ @EViewGroup(R.layout.list_item_filter) -public class FilterItemView extends LinearLayout { +public class SimpleListItemView extends LinearLayout { @ViewById protected TextView itemText; - public FilterItemView(Context context) { + public SimpleListItemView(Context context) { super(context); } - public void bind(FilterItem filterItem) { + public void bind(SimpleListItem filterItem) { itemText.setText(filterItem.getName()); } diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java new file mode 100644 index 00000000..c2975105 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java @@ -0,0 +1,85 @@ +package org.transdroid.core.gui.lists; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.daemon.Daemon; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.util.FileSizeConverter; + +import android.content.Context; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +/** + * Represents a group of views that show torrent status, sizes, speeds and other details. + * @author Eric Kok + */ +@EViewGroup(R.layout.fragment_details_header) +public class TorrentDetailsView extends RelativeLayout { + + @ViewById + protected TextView labelText, dateaddedText, uploadedText, uploadedunitText, ratioText, upspeedText, seedersText, + downloadedunitText, downloadedText, totalsizeText, downspeedText, leechersText, statusText; + + public TorrentDetailsView(Context context) { + super(context); + } + + /** + * Update the text fields with new/updated torrent details + * @param torrent The torrent for which to show details + */ + public void update(Torrent torrent) { + + LocalTorrent local = LocalTorrent.fromTorrent(torrent); + + // Set label text + if (Daemon.supportsLabels(torrent.getDaemon())) { + if (TextUtils.isEmpty(torrent.getLabelName())) { + labelText.setText(getResources().getString(R.string.labels_unlabeled)); + } else { + labelText.setText(torrent.getLabelName()); + } + labelText.setVisibility(View.VISIBLE); + } else { + labelText.setVisibility(View.INVISIBLE); + } + + // Set status texts + if (torrent.getDateAdded() != null) { + dateaddedText.setText(getResources().getString( + R.string.status_sincedate, + DateUtils.getRelativeDateTimeString(getContext(), torrent.getDateAdded().getTime(), + DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, DateUtils.FORMAT_ABBREV_MONTH))); + dateaddedText.setVisibility(View.VISIBLE); + } else { + dateaddedText.setVisibility(View.INVISIBLE); + } + statusText.setText(local.getProgressStatusEta(getResources())); + ratioText.setText(getResources().getString(R.string.status_ratio, local.getRatioString())); + // TODO: Implement separate numbers of seeders and leechers + seedersText.setText(getResources().getString(R.string.status_peers, torrent.getPeersSendingToUs(), + torrent.getPeersConnected())); + leechersText.setText(getResources().getString(R.string.status_peers, torrent.getPeersSendingToUs(), + torrent.getPeersConnected())); + // TODO: Add field that displays torrent errors (as opposed to tracker errors) + // TODO: Add field that displays availability + + // Sizes and speeds texts + totalsizeText.setText(FileSizeConverter.getSize(torrent.getTotalSize())); + downloadedText.setText(FileSizeConverter.getSize(torrent.getDownloadedEver(), false)); + downloadedunitText.setText(FileSizeConverter.getSizeUnit(torrent.getDownloadedEver()).toString()); + uploadedText.setText(FileSizeConverter.getSize(torrent.getUploadedEver(), false)); + uploadedunitText.setText(FileSizeConverter.getSizeUnit(torrent.getUploadedEver()).toString()); + downspeedText.setText(getResources().getString(R.string.status_speed_down, + FileSizeConverter.getSize(torrent.getRateDownload()) + "/s")); + upspeedText.setText(getResources().getString(R.string.status_speed_up, + FileSizeConverter.getSize(torrent.getRateUpload()) + "/s")); + + } + +} diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentFileView.java b/lite/src/org/transdroid/core/gui/lists/TorrentFileView.java new file mode 100644 index 00000000..0c9b3684 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/TorrentFileView.java @@ -0,0 +1,53 @@ +package org.transdroid.core.gui.lists; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.daemon.TorrentFile; + +import android.content.Context; +import android.widget.ImageView; +import android.widget.TextView; +import fr.marvinlabs.widget.CheckableRelativeLayout; + +/** + * View that represents some {@link TorrentFile} object and show the file's name, status and priority + * @author Eric Kok + */ +@EViewGroup(R.layout.list_item_torrentfile) +public class TorrentFileView extends CheckableRelativeLayout { + + @ViewById + protected TextView nameText, progressText, sizesText; + @ViewById + protected ImageView priorityImage; + + public TorrentFileView(Context context) { + super(context, null); + } + + public void bind(TorrentFile torrentFile) { + nameText.setText(torrentFile.getName()); + sizesText.setText(torrentFile.getDownloadedAndTotalSizeText()); + progressText.setText(torrentFile.getProgressText()); + switch (torrentFile.getPriority()) { + case Off: + priorityImage.setImageResource(R.drawable.ic_priority_off); + priorityImage.setContentDescription(getResources().getString(R.string.status_priority_low)); + break; + case Low: + priorityImage.setImageResource(R.drawable.ic_priority_low); + priorityImage.setContentDescription(getResources().getString(R.string.status_priority_normal)); + break; + case Normal: + priorityImage.setImageResource(R.drawable.ic_priority_normal); + priorityImage.setContentDescription(getResources().getString(R.string.status_priority_normal)); + break; + case High: + priorityImage.setImageResource(R.drawable.ic_priority_high); + priorityImage.setContentDescription(getResources().getString(R.string.status_priority_high)); + break; + } + } + +} diff --git a/lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java b/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java similarity index 98% rename from lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java rename to lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java index 0dbe8fc1..34123a99 100644 --- a/lite/src/org/transdroid/lite/gui/lists/TorrentProgressBar.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.gui.lists; +package org.transdroid.core.gui.lists; import org.transdroid.core.R; diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentView.java b/lite/src/org/transdroid/core/gui/lists/TorrentView.java new file mode 100644 index 00000000..bf8ff662 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/TorrentView.java @@ -0,0 +1,47 @@ +package org.transdroid.core.gui.lists; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.core.R; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentStatus; + +import android.content.Context; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; +import fr.marvinlabs.widget.CheckableRelativeLayout; + +/** + * View that represents some {@link Torrent} object and displays progress, status, speeds, etc. + * @author Eric Kok + */ +@EViewGroup(R.layout.list_item_torrent) +public class TorrentView extends CheckableRelativeLayout { + + @ViewById + protected ImageView priorityImage; + @ViewById + protected TextView nameText, ratioText, progressText, speedText, peersText; + @ViewById + protected TorrentProgressBar torrentProgressbar; + + public TorrentView(Context context) { + super(context, null); + } + + public void bind(Torrent torrent) { + LocalTorrent local = LocalTorrent.fromTorrent(torrent); + nameText.setText(torrent.getName()); + ratioText.setText(local.getProgressEtaRatioText(getResources())); + progressText.setText(local.getProgressSizeText(getResources(), false)); + speedText.setText(local.getProgressSpeedText(getResources())); + peersText.setText(local.getProgressConnectionText(getResources())); + torrentProgressbar.setProgress((int) (torrent.getDownloadedPercentage() * 100)); + torrentProgressbar.setActive(torrent.canPause());; + torrentProgressbar.setError(torrent.getStatusCode() == TorrentStatus.Error); + // TODO: Implement per-torrent priority and set priorityImage + priorityImage.setVisibility(View.INVISIBLE); + } + +} diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java b/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java new file mode 100644 index 00000000..1ebf2390 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java @@ -0,0 +1,67 @@ +package org.transdroid.core.gui.lists; + +import java.util.ArrayList; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.RootContext; +import org.transdroid.core.gui.lists.TorrentView_; +import org.transdroid.daemon.Torrent; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +/** + * Adapter that contains a list of torrent objects to show. + * @author Eric Kok + */ +@EBean +public class TorrentsAdapter extends BaseAdapter { + + private ArrayList torrents = null; + + @RootContext + protected Context context; + + /** + * Allows updating the full internal list of torrents at once, replacing the old list + * @param newTorrents The new list of torrent objects + */ + public void update(ArrayList newTorrents) { + this.torrents = newTorrents; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + if (torrents == null) + return 0; + return torrents.size(); + } + + @Override + public Torrent getItem(int position) { + if (torrents == null) + return null; + return torrents.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + TorrentView torrentView; + if (convertView == null) { + torrentView = TorrentView_.build(context); + } else { + torrentView = (TorrentView) convertView; + } + torrentView.bind(getItem(position)); + return torrentView; + } + +} diff --git a/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java b/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java new file mode 100644 index 00000000..d155e801 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java @@ -0,0 +1,78 @@ +package org.transdroid.core.gui.navigation; + +import java.util.List; + +import org.androidannotations.annotations.EBean; +import org.androidannotations.annotations.RootContext; +import org.transdroid.core.R; +import org.transdroid.core.gui.lists.SimpleListItem; +import org.transdroid.core.gui.lists.SimpleListItemAdapter; +import org.transdroid.core.gui.navigation.FilterSeparatorView_; + +import android.content.Context; + +import com.commonsware.cwac.merge.MergeAdapter; + +/** + * List adapter that holds filter items, that is, servers, view types and labels. A header item is inserted where + * appropriate. + * @author Eric Kok + */ +@EBean +public class FilterListAdapter extends MergeAdapter { + + @RootContext + protected Context context; + private SimpleListItemAdapter serverItems = null; + private SimpleListItemAdapter statusTypeItems = null; + private SimpleListItemAdapter labelItems = null; + + /** + * Update the list of available servers + * @param servers The new list of available servers + */ + public void updateServers(List servers) { + if (this.serverItems == null && servers != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_servers)), false); + this.serverItems = new SimpleListItemAdapter(context, servers); + addAdapter(serverItems); + } else if (this.serverItems != null && servers != null) { + this.serverItems.update(servers); + } else { + this.serverItems = null; + } + } + + /** + * Update the list of available status types + * @param statusTypes The new list of available status types + */ + public void updateStatusTypes(List statusTypes) { + if (this.statusTypeItems == null && statusTypes != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_status)), false); + this.statusTypeItems = new SimpleListItemAdapter(context, statusTypes); + addAdapter(statusTypeItems); + } else if (this.statusTypeItems != null && statusTypes != null) { + this.statusTypeItems.update(statusTypes); + } else { + this.statusTypeItems = null; + } + } + + /** + * Update the list of available labels + * @param labels The new list of available labels + */ + public void updateLabels(List labels) { + if (this.labelItems == null && labels != null) { + addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_labels)), false); + this.labelItems = new SimpleListItemAdapter(context, labels); + addAdapter(labelItems); + } else if (this.serverItems != null && labels != null) { + this.labelItems.update(labels); + } else { + this.labelItems = null; + } + } + +} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java b/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java similarity index 86% rename from lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java rename to lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java index ea6deaff..9ea2a411 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterSeparatorView.java +++ b/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java @@ -1,8 +1,9 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.navigation; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; import org.transdroid.core.R; +import org.transdroid.core.gui.lists.SimpleListItem; import android.content.Context; import android.widget.LinearLayout; @@ -25,7 +26,7 @@ public class FilterSeparatorView extends LinearLayout { super(context); } - public void bind(FilterItem filterItem) { + public void bind(SimpleListItem filterItem) { separatorText.setText(text); } diff --git a/lite/src/org/transdroid/lite/gui/navigation/Label.java b/lite/src/org/transdroid/core/gui/navigation/Label.java similarity index 62% rename from lite/src/org/transdroid/lite/gui/navigation/Label.java rename to lite/src/org/transdroid/core/gui/navigation/Label.java index 6da5d20a..2a27e6b6 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/Label.java +++ b/lite/src/org/transdroid/core/gui/navigation/Label.java @@ -1,10 +1,12 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.navigation; + +import org.transdroid.core.gui.lists.SimpleListItem; /** * Represents some label that is active or available on the server. * @author Eric Kok */ -public class Label implements FilterItem { +public class Label implements SimpleListItem { private final String name; diff --git a/lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java b/lite/src/org/transdroid/core/gui/navigation/NavigationHelper.java similarity index 94% rename from lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java rename to lite/src/org/transdroid/core/gui/navigation/NavigationHelper.java index dd2ec575..c5d0d364 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/NavigationHelper.java +++ b/lite/src/org/transdroid/core/gui/navigation/NavigationHelper.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.navigation; import org.androidannotations.annotations.EBean; import org.androidannotations.annotations.RootContext; diff --git a/lite/src/org/transdroid/lite/gui/navigation/StatusType.java b/lite/src/org/transdroid/core/gui/navigation/StatusType.java similarity index 92% rename from lite/src/org/transdroid/lite/gui/navigation/StatusType.java rename to lite/src/org/transdroid/core/gui/navigation/StatusType.java index 2aaac124..d7a86cad 100644 --- a/lite/src/org/transdroid/lite/gui/navigation/StatusType.java +++ b/lite/src/org/transdroid/core/gui/navigation/StatusType.java @@ -1,9 +1,10 @@ -package org.transdroid.lite.gui.navigation; +package org.transdroid.core.gui.navigation; import java.util.Arrays; import java.util.List; import org.transdroid.core.R; +import org.transdroid.core.gui.lists.SimpleListItem; import android.content.Context; @@ -57,7 +58,7 @@ public enum StatusType { */ abstract StatusTypeFilter getFilterItem(Context context); - public static class StatusTypeFilter implements FilterItem { + public static class StatusTypeFilter implements SimpleListItem { private final String name; diff --git a/lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java similarity index 91% rename from lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java index 5240fee5..dce00a47 100644 --- a/lite/src/org/transdroid/lite/gui/settings/MainSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java @@ -1,4 +1,4 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; import java.util.ArrayList; import java.util.List; @@ -6,15 +6,15 @@ import java.util.List; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.transdroid.core.R; -import org.transdroid.lite.app.search.SearchHelper; -import org.transdroid.lite.app.search.SearchSite; -import org.transdroid.lite.app.settings.ApplicationSettings; -import org.transdroid.lite.app.settings.RssfeedSetting; -import org.transdroid.lite.app.settings.ServerSetting; -import org.transdroid.lite.app.settings.WebsearchSetting; -import org.transdroid.lite.gui.settings.RssfeedPreference.OnRssfeedClickedListener; -import org.transdroid.lite.gui.settings.ServerPreference.OnServerClickedListener; -import org.transdroid.lite.gui.settings.WebsearchPreference.OnWebsearchClickedListener; +import org.transdroid.core.app.search.SearchHelper; +import org.transdroid.core.app.search.SearchSite; +import org.transdroid.core.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.RssfeedSetting; +import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.app.settings.WebsearchSetting; +import org.transdroid.core.gui.settings.RssfeedPreference.OnRssfeedClickedListener; +import org.transdroid.core.gui.settings.ServerPreference.OnServerClickedListener; +import org.transdroid.core.gui.settings.WebsearchPreference.OnWebsearchClickedListener; import android.os.Bundle; import android.preference.ListPreference; diff --git a/lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java similarity index 87% rename from lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java index 5e23ee79..fdd62df7 100644 --- a/lite/src/org/transdroid/lite/gui/settings/OtherSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java @@ -1,9 +1,9 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; -import org.transdroid.lite.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ApplicationSettings; import android.os.Bundle; diff --git a/lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java b/lite/src/org/transdroid/core/gui/settings/RssfeedPreference.java similarity index 94% rename from lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java rename to lite/src/org/transdroid/core/gui/settings/RssfeedPreference.java index 49a81046..59d86415 100644 --- a/lite/src/org/transdroid/lite/gui/settings/RssfeedPreference.java +++ b/lite/src/org/transdroid/core/gui/settings/RssfeedPreference.java @@ -1,6 +1,6 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; -import org.transdroid.lite.app.settings.RssfeedSetting; +import org.transdroid.core.app.settings.RssfeedSetting; import android.content.Context; import android.preference.Preference; diff --git a/lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java similarity index 92% rename from lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java index 2b83f52f..e0e8e44c 100644 --- a/lite/src/org/transdroid/lite/gui/settings/RssfeedSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java @@ -1,10 +1,10 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.transdroid.core.R; -import org.transdroid.lite.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ApplicationSettings; import android.os.Bundle; diff --git a/lite/src/org/transdroid/lite/gui/settings/ServerPreference.java b/lite/src/org/transdroid/core/gui/settings/ServerPreference.java similarity index 94% rename from lite/src/org/transdroid/lite/gui/settings/ServerPreference.java rename to lite/src/org/transdroid/core/gui/settings/ServerPreference.java index 802873e3..0aa0bbb2 100644 --- a/lite/src/org/transdroid/lite/gui/settings/ServerPreference.java +++ b/lite/src/org/transdroid/core/gui/settings/ServerPreference.java @@ -1,6 +1,6 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; -import org.transdroid.lite.app.settings.ServerSetting; +import org.transdroid.core.app.settings.ServerSetting; import android.content.Context; import android.preference.Preference; diff --git a/lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java similarity index 97% rename from lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java index 148a8b56..6398d547 100644 --- a/lite/src/org/transdroid/lite/gui/settings/ServerSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java @@ -1,11 +1,11 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.transdroid.daemon.Daemon; import org.transdroid.core.R; -import org.transdroid.lite.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ApplicationSettings; import android.content.SharedPreferences; import android.os.Bundle; diff --git a/lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java b/lite/src/org/transdroid/core/gui/settings/WebsearchPreference.java similarity index 94% rename from lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java rename to lite/src/org/transdroid/core/gui/settings/WebsearchPreference.java index 929f66a9..a4a5d173 100644 --- a/lite/src/org/transdroid/lite/gui/settings/WebsearchPreference.java +++ b/lite/src/org/transdroid/core/gui/settings/WebsearchPreference.java @@ -1,6 +1,6 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; -import org.transdroid.lite.app.settings.WebsearchSetting; +import org.transdroid.core.app.settings.WebsearchSetting; import android.content.Context; import android.preference.Preference; diff --git a/lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java similarity index 92% rename from lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java index d5daae2e..53194bcc 100644 --- a/lite/src/org/transdroid/lite/gui/settings/WebsearchSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java @@ -1,10 +1,10 @@ -package org.transdroid.lite.gui.settings; +package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.transdroid.core.R; -import org.transdroid.lite.app.settings.ApplicationSettings; +import org.transdroid.core.app.settings.ApplicationSettings; import android.os.Bundle; diff --git a/lite/src/org/transdroid/lite/gui/DetailsFagment.java b/lite/src/org/transdroid/lite/gui/DetailsFagment.java deleted file mode 100644 index c43b8135..00000000 --- a/lite/src/org/transdroid/lite/gui/DetailsFagment.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.transdroid.lite.gui; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.EFragment; -import org.androidannotations.annotations.FragmentArg; -import org.androidannotations.annotations.InstanceState; -import org.androidannotations.annotations.ViewById; -import org.transdroid.daemon.Torrent; -import org.transdroid.daemon.TorrentDetails; -import org.transdroid.core.R; - -import android.view.View; -import android.widget.TextView; - -import com.actionbarsherlock.app.SherlockFragment; - -/** - * Fragment that shown detailed statistics about some torrent. These come from some already fetched {@link Torrent} - * object, but it also retrieves further detailed statistics. - * - * @author Eric Kok - */ -@EFragment(R.layout.fragment_details) -public class DetailsFagment extends SherlockFragment { - - @FragmentArg - @InstanceState - protected Torrent torrent = null; - @InstanceState - protected TorrentDetails torrentDetails; - - @ViewById - protected TextView emptyText; - - @AfterViews - protected void init() { - - if (torrent == null) { - // No torrent specified; show the placeholder layout only - emptyText.setVisibility(View.VISIBLE); - } - - // TODO: Show the torrent details and load the advanced statistics - - } - -} diff --git a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java b/lite/src/org/transdroid/lite/gui/TorrentsActivity.java deleted file mode 100644 index 1af298df..00000000 --- a/lite/src/org/transdroid/lite/gui/TorrentsActivity.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.transdroid.lite.gui; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Bean; -import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.FragmentById; -import org.androidannotations.annotations.ItemSelect; -import org.androidannotations.annotations.OptionsMenu; -import org.androidannotations.annotations.ViewById; -import org.transdroid.core.R; -import org.transdroid.lite.app.settings.ApplicationSettings; -import org.transdroid.lite.gui.navigation.FilterAdapter; -import org.transdroid.lite.gui.navigation.FilterItem; -import org.transdroid.lite.gui.navigation.NavigationHelper; -import org.transdroid.lite.gui.navigation.StatusType; - -import com.actionbarsherlock.app.ActionBar; -import com.actionbarsherlock.app.ActionBar.OnNavigationListener; -import com.actionbarsherlock.app.SherlockFragmentActivity; -import com.actionbarsherlock.view.SherlockListView; - -@EActivity(R.layout.activity_torrents) -@OptionsMenu(R.menu.activity_torrents) -public class TorrentsActivity extends SherlockFragmentActivity implements OnNavigationListener { - - // Navigation components - @Bean - protected NavigationHelper navigationHelper; - @ViewById - protected SherlockListView filtersList; - protected FilterAdapter navigationListAdapter = null; - protected FilterAdapter navigationSpinnerAdapter = null; - - // Settings - @Bean - protected ApplicationSettings applicationSettings; - - // Torrents list components - @FragmentById(R.id.torrent_list) - protected TorrentsFragment fragmentTorrents; - - // Details view components - @FragmentById(R.id.torrent_details) - protected DetailsFagment fragmentDetails; - - @AfterViews - protected void init() { - - // Set up navigation, with an action bar spinner and possibly (if room) with a filter list - getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); - getSupportActionBar().setHomeButtonEnabled(false); - navigationSpinnerAdapter = new FilterAdapter(this); - // Servers are always added to the action bar spinner - navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); - getSupportActionBar().setListNavigationCallbacks(navigationSpinnerAdapter, this); - if (filtersList != null) { - // There was room for a dedicated filter list; add the status types - navigationListAdapter = new FilterAdapter(this); - filtersList.setAdapter(navigationListAdapter); - navigationListAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); - } else { - // Add status types directly to the action bar spinner - navigationSpinnerAdapter.updateStatusTypes(StatusType.getAllStatusTypes(this)); - } - - - } - - /** - * Called when an item in the action bar navigation spinner was selected - */ - @Override - public boolean onNavigationItemSelected(int itemPosition, long itemId) { - Object item = navigationSpinnerAdapter.getItem(itemPosition); - if (item instanceof FilterItem) { - // A filter item was selected form the navigation spinner - filterSelected(true, (FilterItem) item); - return true; - } - // A header was selected; no action - return false; - } - - /** - * A new filter was selected; update the view over the current data - * @param selected True if the filter item was selected, false if it was deselected - * @param item The touched filter item - */ - @ItemSelect(R.id.filters_list) - protected void filterSelected(boolean selected, FilterItem item) { - // TODO: Update the torrent list view - } - -} diff --git a/lite/src/org/transdroid/lite/gui/TorrentsFragment.java b/lite/src/org/transdroid/lite/gui/TorrentsFragment.java deleted file mode 100644 index 5dd796bb..00000000 --- a/lite/src/org/transdroid/lite/gui/TorrentsFragment.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.transdroid.lite.gui; - -import org.androidannotations.annotations.EFragment; -import org.transdroid.core.R; - -import com.actionbarsherlock.app.SherlockFragment; - -@EFragment(R.layout.fragment_torrents) -public class TorrentsFragment extends SherlockFragment { - -} diff --git a/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java b/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java deleted file mode 100644 index 22f9dbe6..00000000 --- a/lite/src/org/transdroid/lite/gui/navigation/FilterAdapter.java +++ /dev/null @@ -1,125 +0,0 @@ -package org.transdroid.lite.gui.navigation; - -import java.util.List; - -import org.transdroid.core.R; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; - -import com.commonsware.cwac.merge.MergeAdapter; - -/** - * List adapter that holds filter items, that is, servers, view types and labels. A header item is intersted where - * appropriate. - * @author Eric Kok - */ -public class FilterAdapter extends MergeAdapter { - - private Context context; - private FilterItemAdapter serverItems = null; - private FilterItemAdapter statusTypeItems = null; - private FilterItemAdapter labelItems = null; - - public FilterAdapter(Context context) { - this.context = context; - } - - /** - * Update the list of available servers. - * @param servers The new list of available servers - */ - public void updateServers(List servers) { - if (this.serverItems == null && servers != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_servers)), false); - this.serverItems = new FilterItemAdapter(context, servers); - addAdapter(serverItems); - } else if (this.serverItems != null && servers != null) { - this.serverItems.update(servers); - } else { - this.serverItems = null; - } - } - - /** - * Update the list of available status types. - * @param statusTypes The new list of available status types - */ - public void updateStatusTypes(List statusTypes) { - if (this.statusTypeItems == null && statusTypes != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_status)), false); - this.statusTypeItems = new FilterItemAdapter(context, statusTypes); - addAdapter(statusTypeItems); - } else if (this.statusTypeItems != null && statusTypes != null) { - this.statusTypeItems.update(statusTypes); - } else { - this.statusTypeItems = null; - } - } - - /** - * Update the list of available labels. - * @param labels The new list of available labels - */ - public void updateLabels(List labels) { - if (this.labelItems == null && labels != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_labels)), false); - this.labelItems = new FilterItemAdapter(context, labels); - addAdapter(labelItems); - } else if (this.serverItems != null && labels != null) { - this.labelItems.update(labels); - } else { - this.labelItems = null; - } - } - - protected class FilterItemAdapter extends BaseAdapter { - - private final Context context; - private List items; - - public FilterItemAdapter(Context context, List items) { - this.context = context; - this.items = items; - } - - /** - * Allows updating of the full data list underlying this adapter, replacing all items - * @param newItems The new list of filter items to display - */ - public void update(List newItems) { - this.items = newItems; - notifyDataSetChanged(); - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public FilterItem getItem(int position) { - return items.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - FilterItemView filterItemView; - if (convertView == null) { - filterItemView = FilterItemView_.build(context); - } else { - filterItemView = (FilterItemView) convertView; - } - filterItemView.bind(getItem(position)); - return filterItemView; - } - - } -} From 34376e26e778ab827ebd0860c6d86c028f45a6e3 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Thu, 7 Mar 2013 09:12:46 +0100 Subject: [PATCH 07/10] Getting the details screen lay out properly. --- lite/AndroidManifest.xml | 27 +++-- lite/res/drawable-hdpi/ic_action_discard.png | Bin 0 -> 1611 bytes lite/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 12113 bytes lite/res/drawable-mdpi/ic_action_discard.png | Bin 0 -> 1358 bytes lite/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 5025 bytes lite/res/drawable-xhdpi/ic_action_discard.png | Bin 0 -> 1824 bytes lite/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 14733 bytes lite/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 25819 bytes lite/res/layout/fragment_details.xml | 2 + lite/res/layout/fragment_torrents.xml | 12 ++ lite/res/layout/list_item_filter.xml | 9 +- lite/res/layout/list_item_torrent.xml | 29 +++-- lite/res/layout/list_item_torrentfile.xml | 24 ++-- lite/res/menu/activity_deleteableprefs.xml | 9 ++ lite/res/menu/activity_torrents.xml | 14 ++- lite/res/menu/fragment_torrents_cab.xml | 29 +++++ lite/res/values/strings.xml | 13 ++- lite/res/values/styles.xml | 1 + lite/res/xml/pref_main.xml | 2 +- lite/res/xml/pref_notifications.xml | 7 +- lite/res/xml/pref_server.xml | 8 +- .../xml/{pref_about.xml => pref_system.xml} | 14 ++- lite/res/xml/pref_websearch.xml | 2 +- .../widget/CheckableRelativeLayout.java | 2 +- .../app/settings/ApplicationSettings.java | 21 ++-- ...AboutSettings.java => SystemSettings.java} | 8 +- .../transdroid/core/gui/DetailsActivity.java | 26 ++++- ...tailsFagment.java => DetailsFragment.java} | 8 +- .../transdroid/core/gui/TorrentsActivity.java | 69 ++++++++++-- .../transdroid/core/gui/TorrentsFragment.java | 94 ++++++++++++++-- .../core/gui/lists/DetailsAdapter.java | 103 ++++++++++++------ .../core/gui/lists/SimpleListItemAdapter.java | 6 +- .../core/gui/lists/TorrentProgressBar.java | 5 +- .../core/gui/lists/TorrentView.java | 2 +- .../core/gui/lists/TorrentsAdapter.java | 5 + .../gui/settings/MainSettingsActivity.java | 7 +- ...java => NotificationSettingsActivity.java} | 11 +- .../gui/settings/RssfeedSettingsActivity.java | 2 + .../gui/settings/ServerSettingsActivity.java | 9 +- .../gui/settings/SystemSettingsActivity.java | 71 ++++++++++++ .../settings/WebsearchSettingsActivity.java | 2 + 41 files changed, 515 insertions(+), 138 deletions(-) create mode 100644 lite/res/drawable-hdpi/ic_action_discard.png create mode 100644 lite/res/drawable-mdpi/ic_action_discard.png create mode 100644 lite/res/drawable-xhdpi/ic_action_discard.png create mode 100644 lite/res/drawable-xxhdpi/ic_launcher.png create mode 100644 lite/res/menu/activity_deleteableprefs.xml create mode 100644 lite/res/menu/fragment_torrents_cab.xml rename lite/res/xml/{pref_about.xml => pref_system.xml} (59%) rename lite/src/org/transdroid/core/app/settings/{AboutSettings.java => SystemSettings.java} (82%) rename lite/src/org/transdroid/core/gui/{DetailsFagment.java => DetailsFragment.java} (93%) rename lite/src/org/transdroid/core/gui/settings/{OtherSettingsActivity.java => NotificationSettingsActivity.java} (63%) create mode 100644 lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java diff --git a/lite/AndroidManifest.xml b/lite/AndroidManifest.xml index 90b10a33..6b16a6ad 100644 --- a/lite/AndroidManifest.xml +++ b/lite/AndroidManifest.xml @@ -15,17 +15,25 @@ android:smallScreens="true" android:xlargeScreens="true" /> + + + + + + + android:theme="@style/Theme.Sherlock" > + android:icon="@drawable/ic_activity_torrents" + android:uiOptions="splitActionBarWhenNarrow" + android:theme="@style/TransdroidTheme" > @@ -41,7 +49,9 @@ + android:icon="@drawable/ic_activity_torrents" + android:uiOptions="splitActionBarWhenNarrow" + android:theme="@style/TransdroidTheme" > @@ -49,12 +59,15 @@ - - + + + + android:label="@string/search_torrentsearch" + android:icon="@drawable/ic_activity_torrents" + android:theme="@style/TransdroidTheme" > diff --git a/lite/res/drawable-hdpi/ic_action_discard.png b/lite/res/drawable-hdpi/ic_action_discard.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd19d9e80b07c6fdf216f2b728a9337e438d1c4 GIT binary patch literal 1611 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)*~rk%+1S<8$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19ytk=TX(Za+Lr(RHE$SnZc?2=lPS(cjOR+OKs0QR(1 zCT_Pl<1`PdHwCL(!2WQ-saGH97=2LGB1JV!2$+6AOnAZta^OinH4m8Hi+~Ax_NSC; z1_q|Ro-U3d6}R5ZjQ19GlsHyi)<2I+TTnztb;AoS-#^X*68FllPJeMI@3Zm`!B2}$ zFY3P_-tj{3qKL~y1+S*APcKf!oWE&o+kE~|fyMEXv~zE~tUok2pFX$m{F&eB_X0gM zn?KtedN8No$wBc!y?8*8ML5g5M#c$qHYA*W5G=>))4*D=@@(6ugT z1GX1zi+Vr4x@n^EypUZ;Y9I46$2FWQn6S< zt9D%C>|Ix=e#lI3+AhDD)=ORFnzSOA&L3>|%%>3`{oP$bstt}e(f~YY53RoV9rdrXH4v&H=~_{ub%sV zt+S;#w3h2e`GndpfzRh0-FhnXxIWtkZE>qdbMCRI^f8CcnwRIxDq~^ex177^L9oM8 z=ExO~f*W2q*l^8fdS&x{$F0WL%Ug1^7F;YTOx0E}vyHmVQ83p{I&#N^ZYPPfhfXhd zuPamd6x+%CZDZ0llYelb#{Ni?uWQ|IJ&xn-(=TK<5f7DoCcXLWylc+4*#kb# k{{>7-3j`*-{Gok-LH)?F>j~0pmV=6SPgg&ebxsLQ0FuvZE&u=k literal 0 HcmV?d00001 diff --git a/lite/res/drawable-hdpi/ic_launcher.png b/lite/res/drawable-hdpi/ic_launcher.png index 96a442e5b8e9394ccf50bab9988cb2316026245d..bb8449f45b13d44339e3bfde4a4d9939b2425cf5 100644 GIT binary patch literal 12113 zcmV-XFRsvuP)H#=?!ktB zp(v_NH+b_<*AAW%g=mUy{!5Z2{C~OSRm9L5^yt7Wm@tI}NdBMH9`dhWN0IfwKX`zU z$>dtc3)_=}Pqg{HFfaB$OCBi1P%L_EP&TUyhlD37yq$WP9MV)8U&pV4Uky=7It~*W zDBt+jq3*ImWaS<-r9txt9))`__`TxWDVGIh^q;5gbVm@ab%Q=*oW4e3$)_nTA?~=l z!;KLMoEa0?%HZdeYYbt)ya7izOw^=@zlvHl_KxsK{Cb-l(hmGuAbwEt6CoRZvm*lE zLo1&(*YnS#b>k87~owyK)`{=+- zCxaD&CCmYVM?*FoefDv;+jZ5@Y1|9&no}Q-)xfv}63LxA zAf0|hMt!SY#nX6AW1sn7cJsb-Ti((~2W8QV(vmCZ_CFHq73zi`D*f_WjSWk@5lx%; zkZHq`_m(uGC8!=V&xG$ec2Cad(+=lC6ZI!FL9H@A#Doz0EqstZe9F>;H^kuIjab4R8d{GfQ3KM?Re6tf^)tmibc`9r z^)$}9k&>yM5|FJC{@pf_XlVZcn|klD#ze#@)jQS83*O&MIlOv{{9$8l-3KsNZOL{;`U!`QKK3ajQPk zYqnbLWFCyhhxB2>m1)O!aqGYQ2{7}xZAX@0z4p*^qs-Akeb9xZk>dyT>fLQnLACs9 zAq6H1G3T8B#elJF$C6($GZ_AXDbRtbf#?2}Hpnj%2GHoCZ%fE$w=xdm%tc@h@he)y z8QD&?ny)@FQ@mY6hhqn?!$^onoK}OFsGxb=1JqcH%~-$ergJ+`1ITs^_D z@W+UVh!T+c57LJ<;h)-izR<$ZOcarD1Vj!Xqm3Pr;a~V^R>sHsbq0SN$jc}-|M=sN`yQK|jbn)(GSwlLzaur^ z3>2jPDR#9?h~AL%=trfVF(*FSd&8SGI|i)k-7u1s<xf&u>5 z>&!8t)_BkmBN8M<7y!SkA5BaI35z9_AtHGVTnD%b<}A!dld+hl>qOD+%HjJL(_xtnl^Tqgf zVp}r?f0zb@9wxeTk;P;KJKR+=RW7qn**dpSKDpB88&Xr=klQ~X`3NKh=>VjRu**f=J*S?LGVUb)0J0 zbK}4M{lN|8-t@#U95!eJ_&rrgHo+`J;Ww7bz<~cW4PeNkS`vXwQ0N{x(*05T7(b#U zo%%_=8>Eak-ak6<6fGL_86B&JK1z-Td_+(dPv>uttp3*i1-HC+C>;U6a~MVGj5OjR znZd4@j}q4%uOB60-yR!>qiF`~8;%S(*`Wc{2DecJgjMGxpF#hA^)1lzs}cmthC8zB=x|#g8=F5 zTrcn$I-?>KpdsKNASXzR2Cv8C@rBk(B4!fL(5i-BS_ar2>VE*77vy6g`QpLD`~H!k zK`b@CkJ3liVM%g=1cD6*ct@$h7|BnnHol|Px;5rgrof*B2|+cCUeOkjNBBP!#2C&~ zF4mYW4c@hD*J`FFPmP7Z5sw<|3%ta-;Wyyl`AfwBabfD^Kd^il7Z;X%tgqw7^aR_m z(%F6YLF6I_BrmVUjut7w7q+_K_<}7YTfQig-rAIKP!2Skm1fq^m^qS+vJaP5+_Yd$ z)XmI((B9(3cEUor-08A+GQYfI*xaF<^m-0)oE&rx&F_{Pd}aKW4Ru#k zy9zs-!x`+jF^clD>5+9eMK52zJnt;-{ecW%vUhp2k|%Z|s;eLj$?1}Eob~>rBefcn zGB+7rLNn7AXstmUqs1tRV~0*bANhi(kS5BHVmm2#f@2KG-)POl+GAO=WJ#bsA#!_j zL4j`<7i8jqiiZ#$M=4l!X{2S%IM8t@HkDE^yP^ivpJqV)frNk9U+Fbr$YO}Z>oP)G z1ev%ftAJ5|m^mh(c;4`{&UCHS)l~ zfuvAKjUtEwK_8N!uBMd(KM zmPr^Tl2iamGob&(Lg0mY1T_XHYk^=6f@cBCd{s?lhTzt?)~#Dtt|B2E;mZb~5uhYB zZs<@A&@VnRTDPa*!<)N@T@~dtCCT#Xb_)OCnA@wey{nXRAOgbw_jOv(_@9>35ENH+ z(wAa18Uvd*Z~m*(>5KzY+!QF!UUpO~;QPFH{qeze@-zM91IBahTrPJ1|l} zu3T?Z5UPeGQesB4M< zS{Q8%(&_ZbU4!Ni7T?@7dGh3fbL2+Og1{H50iGvDq}IK)cfcBFlr)VZHB@j?G7d@v zBSYy)!mDMJ`Cs>-)N&Fe_l#T&_6;#CCa*?kBB?>B-m#LUJZoKaO3w*y>xJTLx)mld zu4wYTu9*^@Mx!k{9^|w}L>h{blf?b&L%e z*l;p9#zM-H;3Rp$hkU#n@t7$P-IBC4m{_?3=A>p;B{fqEYX$-E`+3X&6ZXEHs@{2Q z^Y`7mclR|kG#Z-{DD7sqc; z6=sTsPE_g<>8Tn28|{qutX;ddC{zi&Ai7?l69!4LK$$T;Jzd)AdvK-6Y?vewcoszM zu9d0|P9Z!`h{drMWYxx?aD6vq)<&V~Vm~^OQI0B08c;AOqMC9SnKOeOU|1Apl8!?5 zNDf7H)goPFBdX^Mk=tK`1Rk3TEoP)fOX?4RW;%iizyJYjr`HWhM!Ig>oA$pC8#uOZ z^ytwgAN=!5Ji@?Sovb<-<}n@TSwV{fkkcvIb|HOL>Y4j?6}Xl(j)7>0Q2#1ma7)^{H~!pw~5 zGeRdx5|4#rHy+uLFT-^7;NOMTXn^&dy~8ipYb{SS)$)COexKPZ)P>_H9O+C93X3pc za}ciDX&$w;!&+9WQ#g<#_poxEP>iWR(s*Oh<}Xvx;h*!6!DvJliv^iXCS}nytu)@M z^Hri$`Lsk~hM3J}^1CETNFQH;xNf;vn%szCDWo?uh~so5Wuw3*m+&6mJ=hj%=$#-+cZx;3nwj)kN$0eLE7kQAMTn3z*Y#BwOx{TQ=Dy_jqB{1pvCM4N#4U^bz~ z4Fxmk&eJg3ZVbnEsz?c6U)8C~iQiIvF2~HC$2Q?$i>gUX*4*D`jP*wiN1NCX)~6IS zAgiecl7VZJLKLj33+6WYF?1y%Jm-SBCcm6VZ z;K9c8IZFCG5(POP^R?X(~ikGbnbA1wV%6jWJRX^f1F zM9*#Pvp77Ko33T`Y7xHefD6`wJ}-_B1Z1VV6*|!1SAsZJ3kp(malJi3BuTwvi|h}0U5j2?^>kyM z=OjjJwfLg%w{SXr9v=Xj5r@YZj6SB#z5m7Q3{>P+a9S`FX`x#^Nd8(3U@63Es_%_T zviPlUJ^SgVJLqw&2*Lhqrqg#SdkXLMUVf+OVe3fOHIJ z(4g81@4m{?hB{2Q+IQc5S5z&G_Ch0J3*`Lq&k3R=^x2!W`tr0>TQ92mI)A#Bq>Caq>ID=C^OP>$QJ}teyFJ&cYE}|5_)N0QBY;u+Rj5@ z1RyDFAjD>xmN{`ulbkmuQ^@^n5$WRY(30GcQfy@1h`4+mvlLMxUwXpDOM zB%8x9LvovvGBY!|mK>(fwEdoKQ=YFWl%DsyMTz%{#JdM&KdFyOp}?yRaE&xSVJSCi z9q3ec`KDo4j1WKn{PX6-71@NRO6f(h|1IuIsoP*@UcQ}bstveHj|Wyka7lJx0(7O? zwnn7pvv{cqLv{}`YQj;1g;U-9=MG{jeEtHA?uE_c;*gAgmvVtwW2FA?Cpq!IPTf2-}m0jJ?&{@4xxAPw?f66)RTM78Mo!3X+}`3EOP8qWb#!&MwzoU+gM;H`nU) zeT?n1g+9HzrS;^8ybP9e98n|QFBA*)mbzo*#{eG-5LXNtGK3{IR5cM7!wHAd8Iq*7 zu;Xx;R)oo)vA43u@20X17N);4U$Je`0G_tMizMe{U>wr6jcF^Nowal$zL)`F6(+v- z%rfOU#o2DR7mpe>%5~#_S5lfzI&P#zQ!(VLC$x6$ z+6GuFsQl}%zn%b@P-3GY{csTn*kv5s_)1GltHIW+%$^D+fv+p~rxFJWT0&86Sf|=g z#85~O5NF1;yhZ{gVgw?NPwRCG*;naL5CJdPxYiI{n-d zFV~j)nygkUvwHRF_z@#U7|dpKVw1HgcF*2DB=H6W=zylH2+tXK$*>&vGq1H}<&FOStZ>}c}hU{8t`5BS;G*tpVcwiM!ZIlNx4Co3z< zYl-C@WA3)hg1JJ5wryr81WA=0`;@HpmFK(OTQqOS(xTjY5GxnN0xjp%k^wgSyL6=F z`+K>eDflmn4P9=#V|!f;h&cl;G4PTan3<`tROF7UYBPYMBv;S4M?K=p~Vm!ExV zNozI0>+uow=Q9UB!FoEC6%`dehZlbt5J0EXk@N&XE8@l34%#fA0Es0<6QIz8BVuXC zj-5|OU4}OIoD?_;!6HEKwlhF+$f3=JKtHH!!`}_A>g}eA2@fZR4K2Fz$}3&JO2*+o z0)g_V#k^aynj&_XLS8?XTmg#Qe(XqP)zQ$cAAoG|;sbvCfm)I6+qbVbGBRq0$K%a$ zdpyXC%~L=KD7zhrBW5~$K+`ZdOZXfCYgt%WIO^K9n{@PO#@p|||Nf?tlY48(3)-^2 z=Ai^*u>TGFVZ<_eWY;C2IP);1^IVp-9%dXHniH2An+3M2~ApTcWWn2npD}ZU%wfCpYNF4l9HdB)v36?_0Jc?A46Fb4+zJ2>juDk9!5kG(b;lqa) zV<+7Q5D>f$d_hNU2L-}}>H$#S0OF^mrLTDAnP-;Z$TWBIe>dG2#t>S~%!;g@9M(e(1mFZ)`;(X&1!F)^`f(4av_v2+&q zH_!OGY-g9NQP7aB#c@CgBe!;t?lBG%R?8rfb$9l7JoKztvx3pl(S;KyPOKO@bm)CS zQA~q;z0dDMK|nzi>JZ!yCM|S7htr9=ckhlev$9ssn>X)0YzneHUDxrLLB^o$PbT}- z+EX3FW(W%_bW!`4zW(F=^QOPM5EFkprsrX`CJft|e$~fwzIp(I?R4z;31cTD-yknE z7`UEF=QG>f;MA&ra6S*i5g1Bye6O0C8v5C1pEZ7U{1(E5F=NKm3>!LZwj_#&ydJ15 z`AG>;Io^h8^B`?AqC}SKbU4vvnD{47oLoES!8!lD`R1FC+D88({H@!^pw@AMP1klB-{H zrCn~juY-)9>U0u-yYdM(nKv^3Ybd;*R@sgGw@vogN6I`@uXczAfhs8OS8$BY>}52K-N zfQ)C{3KENopGnH7 z-Eg%;Nm`_COKLOPYes#_c3jS&b>8#Buq88IzH$t{tLa=BzLs$STr}+|es9Fl{2iZ( zGVe6owWL3XQgiyv%}}VVttdf+?LVq5^A~P?-#2;M)aezL(R=Ha`^)I&?w?Y%wY7-{ z4<0n{*}MA<4Xc@CGMkXmXjIFU^zURTm9+?hKmt0z`3VUL&=s-sh8u2t8ed9XopWa( zv_bpEu8V;v*RRRB?^T%+G}7B=dR4O6Nw@O zmj`O?XBFk47I4!;$$Vkc&v)ufvd!)^D0vMWnD~6q?CK>Y#nZ%Z?P+neYKC;k>fqvg zPZlOU`Q(#w&Z;CfREhdJ_ih<$LjI5;LtJCWjC%r`kZ-{!_^?R|`2^C5c3!y2kk>(< zj@4pC3GoTY)#ToH+ilaI1GBR_=dOTaC>S)g+YcH`mAn@e=de(}eXbg%l^gz+(zFcBr{LCgzX1|=A9NYN{GV<5|I&A72eCi1~_sWU> z66c$&KjM&{wILxOBTtjsh^6K_+BO(cH#OUIsK+4ZeAXD~{K5+_aG?_s;pdvXd*$tQ zPn^Qxx@X+D@lRtWe1iivgkuL{(?coibJ=~QN+C#oe0)3>9DfRSwol{t9>&k}@EMF+ zc!7i?mei3cg=;2h7#)5;i$aB=whSmZ`F$eRR1QTNd!r=VIAjU*DNWl}vw8llOXuC1 zy!d`sfxYg)fdl^E>X^&NNCVonbv|#+#gIOn8KKKggN){SW+9$-3MbUipkIeSe91HxVNU{i` zZ2gH@F1h)DCgm|Pa$#a>YN~0^o;{BVoSw&u*;qG-TVZ$YqZi49cY&Z zP%W&V6qLLx-###Rc50QO!8 z3M8Qy9Tg2s$-C*Mn;t1IFaHJ4)&0$hSwZFeHws;s^qw73?M2m@SFicyg}+B6at5=( zP8f5#6xmj_mPmUd&j(P^@%oRRz4^zN7B61xe&B%zJm@o|+Zb zNo&$GRu#<%?aEg+V=2`n2)x{|erf7+U;T66E>PKxCmyK;o2qC-hzV~c9y@l-xO3Oe zd+}W70uz)14o%Dsq!@7UbrR$JN3rSLjpy#d%nVZGWEKe|A5JbpA<#v~z9VBTJs$w_dG=Nv&o8NWUlruKQyD+*f6NLn17gA(Iu) zZVPYYlDx)%ao^gzlS8&JBiY5I~>_5pN`BW@Z}p?%i`I{_Mxi zW($I1QDkHkXhZRg88hY`J$iH(o_o`#Q;&e!qiehT6I2a?tZ@gkzn}2$^pD0xcQI+h z9bqJBQcllmd#YWb-|6jIWM2X{@w`9Ku;Qfy*X~$*;_!$?smyN+|({75MJdW2#?J zm@vliazb8Sp7H0O_fC(AiFqP6HkQ_Cv=uXF&YXvR#dbXJMofGj;PVY#KZFQ0IS}+; zv2oA)6LPAy_mAyrLpGb8RIE-HnA%EwLEpek9FC=2;W_G*XQ!oP_oHJ+6yzjpIZZBR- zgX&zm;L#h#_SCON{F1$4fZi@xW0I`MptUOT0@+&CKFJ4P==bp?_%-S6$f$9U4TL(@ zLIlbks6;sh>7QB4uYU7yfBRd`xpv5$lL7cSTTM+3w{zbQk!8M={*oj|8clkKHG=Bp zqpKoCF&Jrc7~)!P&Te<53Q?*#QcM!59|+PZtz`Q)(K_l-C(GsK*vvFwDFgH5<9R*- z&r!xO(-#&NCPYO=#bBrkr{cy|Hx$LD=5FnE^wiE?GUswc#F~-KZYHOT%`}h*LZ7~>Z*!{s=AuS`pop)lFam+9335&JAeLsYWno)8R(3IJ$};% ztXZ>$!C`!CadEK`V{x&dpg_hF$6&~({mUH7-@9BE^Tg>M8o2}6z^FkPqn_WU9(N{d z3XE)IhFKF;W6{QWjGAyU(%juu?aH?{da5mTt}=U7U6He(GBd#wsE#&Twa6B($3dS_ z>HjB*xAsZ>*&4tjkK2!=0DI`pD?WK#^~El=1;smg@?;9fEd0ie8zCFYU$6$8!@-jV z$ZgxUIl`j3#1d}(MjSmlWEFaKbPZQIP)|Wfp_b*4y#+rc1Toz62C<_HlIj!q2B>(k z8XD=0knT`+@+*58nC2R7N6u4LkK*A49Hrv`?AUJ4y{;1xdp`Q;qcSznl3M&cFATkq z5|^^CLg7^WfwH9!$$rVvGH-q{jvZ4rLPKsw-4&^(dRaz`w6uh6xp>C0ks(-1w_sZ6 zXi2%l=Sh)m1+br4j{=N@B9oXqYmWu?9655ta4v^?-hQQ4e5PKIeBI04$0ji>O(b8* z97@d+OErHJMhERiSNlp8C6!tfc<6IGe|5vRd{zes)gcleIzdQou{Rq222^OabE6Ci zm6w0>%{O~dE6$L+(84FY&Uc_}Ss$83Hl>SL`8p9m6MTRt!CC02FY4kPlhJ|z;<*Qs z+FUgH{i+^C@O>c2E3lJNzRw0AC!8b1=`|>+zwIFm1RQB;Y2h8M0fr%CyXs$DKJ^xk zHX*&nP7cg~MK|z8sMb|Y3ev1DRR8+#djNBx#t`sH$Y!-8i?$OvEe0ZX*biXW`H|Dn zG%~%sv|mF*Ln?kt?S*Iodx7fb|L(-&U44H4PMX(hPv%rr1p~DVqYd)qRmJ%d?Pso> z(&b%9^{Pjm{MRvnY)6$4Nrx96bFDb=!`9=;Lwd(EEJePZDKgrgAZs|*=n&#CJU*sc z4Y8v%z&z6VY+Xi1#_KCqtU$|`FDK9k<8RS!w^Q@~Ire%TV^uro1U0n(?|OhfOZ#AlpK_)F&3{qOwIH2>hP)bxu664S_?zZ_26=Aw?^WiJW_$9a3s751vSu& z>%p@K;-H8|p?v(G$>EA37A8SNoKE?!GY}@|D-HOSWAM4~rYozft1~au)?X|J7z>;B z_oP{h9NT5mM3RkZKA}O%Z#tTZ(LuDqNINNt`BT|@au5|JsZnnY3U#)Fkujb63CL~q zY3h(c=R%IC0IIWkFRMOKuj|&W8=IGxcgYyw4@&$*BW*_Dw| z6fDWj(QJDTOzId@Bcqlz=+hCsa_$f>y3if>O=S$MvnGQs{y9V?bG*rd+ukZPp4d8eDQ@#bwC6G=sBZ4^nEaJMg%MhwjhDS z<~R*$5xG=njE0C$cFF{meFTyVr8>SIPq?&2wv;4GwimrFL!o9=>^xYJMLE=u#_DV(JwdSj zr?#%P3HvRJK~E!e$qspyu#*jvo+pFe?9yuVMnUq>u#-m!D4A9Wx>%iT5k--3WozL} zL2OFhl6=HHC-Eh^1>xmOr2%Mr@f#uBs}@xlAU>EPqfCi*sB)RvD01>)MQLr``meuP z8r$7y>_0N@Mdb@|P>TeY(v_xsp)=h9U*dB*Id|s0fn@L{Jw}rOH56%fe7b1ky4lZN zcdIFko#^v>X%6~Wby`%H@6-7Gq?d|PG*+QDUN?z@#&uqRE~N=V^jQ*22*%wqbF>X& zcMI1Exhj~G3*Y&0%U3JDfv$&~hhMrj>54JEi1~rQjqEPRkWW-w$sw`T(mct(3XZ5V z{x6?(J#;N}LJJ(O3T0Fx(Hdm~Na!uFnU41g#ow>nofaS2Cw=g^E?+piqr1by?PIm9 zffmHWlFRFo)C_co=ej!Ji`?jQIcMMQf)8|jpz)W_KHjwIofp3V#|(uEIJU)?l~Sy^ zCS5bZ6W;;6qKM33gb$) zRylze4u>L5TpF&1W+j`e$-@SCk!%)`WhHs&b$jccdg>`%SXfw5|D^HE@vP&|q*w2E zB#%hAUvFYrf1_ViEH2&QKC1)1&i3p>nV@zsB&V)bu=R5p|g?OXzKYI_QMHWa+SbN%rJp$1w~lEe%Gn+$~+IKSWL7LXTzoRgV~E?x)~m5s`JrSJB1NW5ZiGM z8CeHf^XbZ6=?8NU_PuQA-AttGRaPtYb42P9G#{VL$Sb%kDH`T0?J9m-=F#r@v7Hw* zsPkvkyqDB`{PBO538Kzs34U%*>AO(H1iKJCy{{kymQX#G;uCoBy=#hv%-gTOV`WKE zc}he?M0QnGl~7ym-`=^4`7VH~dJay~O+-aGjR$WX^TP5)tLE%a=xJX_z5)^3bymY7 zD;EnX;vM&2_x9T5KRoHz7{vMH)3D7q8*RwbBxD{WbKe*7vrzS9wDMK&%TWoMP{#1Sj|^2;xmGYsRI zJ$rWdoE+1_lH&*V#l-qJ;byA|o^b3RVgZ*Mg)>}neqlbL-u ze9fwjLSbQ{{Ml!pk)s{+>VFcu*(U%*ab{M0zsIDvcj22frIW_|?X~=qg+Ir|#T9?} z;fF$D{h`7AhxFXyaM~Gww?BQqZ`mEwW-Y-)F8kz@PYhXESv0RJe82C2ZWB$KC~4lT z=cXpb^)7kswbwFo>$dQqJ<;s2`1JI2eM;IsgW#v61q&AB;?MWC)~F z=RLPB%TE4ZRg_=RP*hYzVd9g>xypN70u8D1<_N{v?rKgJH*&Id`klAm`wAw0D%Oxn ztRYQTUwyTqZ{G!bmwoy6SJ*V&?sv&WGw+`N&9rIL{Hs^5u4k={EYtf=bacYu}YH^*z&N=~`n(0%fOzHFDi!Z`4``R<^p)D&b zBlp;_VFP?aw&r5YwVlb#_G^HAkqYqYuFcaMYR>+k=#wW;nvWhmD&KhHjj$DnKgVm7 z=t(W1$`@g>?dgH)5DmEGsr%5mn18~@uQcHQAD8Cwe*z2ujBe4(PsS%m00000NkvXX Hu0mjfN&J${ literal 9397 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_launcher.png b/lite/res/drawable-xhdpi/ic_launcher.png index 71c6d760f05183ef8a47c614d8d13380c8528499..e2a946584857250c9e0f32a2c31e6bef82fcba7b 100644 GIT binary patch literal 14733 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 F{|EQY!AAf9 literal 14383 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 diff --git a/lite/res/drawable-xxhdpi/ic_launcher.png b/lite/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91ea69c23f4c991eceb20dfe0086e4856c055773 GIT binary patch literal 25819 zcmV*oKu5ocP) z0tDdAZ9o73ZrB8d;W+$%P#4PN3IHSw0H%w?*+KxM5CAfA6*2_?G713fq;#1A03`qb zTOJ!14}fX`06S%pPXhpU(j@l+0JbPoDgr>G06-?n6o~-P4ggq}qZEq(uwVcv%8`h3 z0kE3@V3MKClmKAw0Dzq-7Gwhu7yw|R5DQZQ2=)NLkVi%E00=VyD2$Y^c+yu~A!AINCaVwW$9Z{ELWe@Q#JLh_3eL-t ziX;k2mK2vr|C5P-v+NI;ylVhp)qV!{LR(O~$_DJ0E+DYzfFK@c*+L|BM6Vt|+;)`%m*MP?y>NH7wC#36}D3L-_6$WmlAQi7BtRmfhX9{C7|KA|s2*yD+M!(38x2CE(D`Tzx(Llj3(*Z|C0c_XLYvXE z=oR!9+KWC%$1uR?7zZ=NY%ngy!$PrmEE$ty%dujt0;|Cqu{Nv|yMgs$BiMTaiNGS@ z1RH`oA&@YaAS5gzEGLu_st5-N&4doZ4MHDbl<=9zBT%>LK-$#>ix{Hrbl&K@KGg$O>{1 zc{}+K`84@Dd4T+mLZ=u|94Y>kc#4!#K&hY{q@1E$rwmfYscKYHsv9+wDxxl?mQib| zZPcsO0qQtSon}t+pheNrXsc+Iv_{%_+C$naI-PDrccq8ZCG?f_O8Q~?MS36oJwtCX;E#^kT*{70eCHdgeLiW9B;*mWr(kUqz&{LZw=zS>?LQ z3stJBsj9c?0@Zxg3e}^kS5-&UsA^_vJT-yZah$}`!vpJ^s_LQF^k6%vR1QdS?5^;Y!cg?&1a{vOW5DByV;|f8k#dS zqc!t1t2Iw*_HrV>*%V3s)#9)iTX@h6DChm=A;FWj>K5D3I z7-*<8+-ulvIBsNaG}oxWsLAM&G0m83oNT02{%vlz3rW-Vqz=33@_^L+CL^M@8p3r~wh7Bv<(ElHMK%XG_~me;IMD<`W|t7@yO z)~L0!wZwX-b`d(9?KatU+I_Zn zvd^%uwSVBC;V|2wz@g3IH%BW+p<}h<&FReP{?k`XZ=L>fhV=~bj9oMCI5S6S0C3Et|wgIyE(fl+>W^Y>Tctn?tajH zXr}p0@yyzp{T@ah0*}2Oy|eIHiL>_1>h(1A6nNHnKJha45_#2m4SHL8r+FXpe&J*9 zBlkJx^OonvTgE%%i}?ol7W;PlY52|ctMYs7Z{(li-{3zQ;1sYV;7lMfFeq?S;2pjm zU&ycLkIr_Py=-?QME!`u_BZjF^n3OiE^A=5eWpG+o+}rJt3T)g!Z(70G%Rxh>kd zXjC2~uggZV=V!Mn*b14VOKG88qwLF>l~bMbE;l;&Xr6kWG_Py1)#CMw2lM^&zg?sbH9l6Bqdr?20>{&TUY_;QJTNkz%WQeo-kZydg<{AOZ9 z@`mm*=dxWJNgJgbZ*TJ4bf8?lJiokubI9iAE%=t=Ew8sO++@f7m10b9ZmR-sT#!nu>j- zeL4G{)<)NMe#`x~zD}pEr0&yx>HgjW5eGWzUFz!(>K-g>KpT_|!-o^R0cR@{sWv6JT3QtX(&ObeNMs{Z8Y|7dG_J!>a&c&X)*%98+eLm>? z#S8uy&UJcsp1$aD@x&#!OUEyBFSlHAzS7*~)OGA9r=N~>J9jrbX7l_T4)PcY5!N?hf6{xcBmY&i(NRD<2Xc7C%yZRPk8% zam~+`KR5L{_nz$Y?dy6H`Q$;ru>bi#vj6dMpzta4X~m$yVEvHe(1~IH;cL(4JsWr~ zdp44_~BQtU%N(QM+aWYUrzj1`bzuN{?{{Jw~vL5J${q(_` zg8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+24YJ`L;(K){{a7>y{D4^000Sa zNLh0L01FcU01FcV0GgZ_003E(NklwwXy|=aP>e{fZi(*+DDhLWlFVagOKp-T9^xj{8@7DSK@sbD%7|{TJe}1kL3Cx{4 zbMCok&YW}R455_bFZ_jL1#_Z1@E88v;5zmBbjj0kC%WIq43-)Y41@s?!V4S~ z4LlS*c*Od#!a)4vAOA2dUAEMwQ<=+1@9q8c(@z6glO(k@TzbU&7~OzSFiZdf(I8Mx zAW-%2i5~v%!q?9>{NnG@)6)<6o$E?N!=_qK^jMAw1PsdO_vgNR^;;VNe(>PI!P(z^ z5M1YdTx$)N9Hu_O7msh@-TPgpwHudZE~|Q?-(yqPEZVwtYxuhBuGN36{MeZn<)_mJPvt(p=)T?)^7rnHx%RT##aL-PdvJY@8c@9`Te#xVtK(ym zEK`^5ervEG5Mjhc;{E%}cO|S{wu3pp*Sq||_vkXg7ysNVWTf|w{`ixRE_LZqZ zmRC6ue83kLU50e_#M7ZW+2>CtflPcf#=D*;L%4_7A>2c3Hg_WtSo0Cshrx!gTlohb zcp#xw-FLPp)R5GF3SQ_p&NhBW-u8st?}GgBxW6$B;Q$agL#Hsy7i|#lyz9>KTS~q@ z#lscYtyU{ssTke+RA%y9Z_hAlJ`0=WI)?xRs!XutKP`MBe~S6(r=OmhSG@ev@3*}& zmKXv9$6b&%u%x8KGQfEmcO?3S{lEa`ZgvRw5Ie%~7;|2)cgcySZ?{RH6F!di;`d18 zmW%#rnKuHkyvPyI#R(!3CQre<>)J=1#^dzbZbC5o`vj7d}P zjeayaTO9U}fBYlPotwoDjlG(9n>766)~^hU7cWi<>5Y>&ReaLZ6=xy>X9mYJ+@Ny| z*O%4r?m6p&kI1mN>o}e@VDVecZ2k|_bo=eMk1ML$cIp4tJT$}@=Mw-T#%CC&9VjWb zl91gTZR+!jzV$FoB(v_SF-{qFhjZeP8{;mYa-ZGEIeALx38(RI6+wS0JCNTOWb*Rz zEdQK&SKm3S-Wnwcyz#nekH=Im>d&VdPd#MFb^B#5DZYoz8pDjJ4sVQem}9{Z4$gQ( z#uYEbKNFq854hlh3t}o)CGwta{kcJz<4rj^In#dF_39|q*kH669nhhH=LN*1as6{H zHD3F|3olq(N*QM7B84qmZ?ddevu0dEn)Alj=3O<~mf;qoV_ncxO2qh zJ20%b7&%6SPGvA4h)FW_zVfAn$E?v@=54p#7WehLo1J&vbyxrWbsHuYwJnZ!*zF*M zfv(Hohya6;NAJ<%1+jh9krO6NFm3xrw#}bEe`H*;{hGJu-+YQC#Vy9i$AV=zFf72E zw2U@=U+=1_D#M7Fn*{)12#2~w!+6h*OxtIleKum;X=5Iov*E>OH#NWdM)r{O)QpS_ z2Uj(MIq`JMn6YFV1evjzeH8dX4{gCQJ~l4Z%c;NjRiS%aMN{PWMpj2V|RZPCtG z2N@ldGw^0;x&jIcLKyIz0k#+}KIbyyO|5Osi8J5*q-W1QDVP6m`IBSY_#MuqlvuC~ z4_#Nm3oLj8!zkwJ(@V<^h)RGnXl+jN-c1!k!vQVk+qvJJbLttR?s)yn+o!H6c{@we z{jvRr_UuzuRu&TJ#sS~rxb*%` z@SFjP9s&gg%kdCRGFVsh$danPQQJ4hG|hQgH9mgF+p!m1c)=x=4SUa-`TfI#gQmT< z)c$6K0um@!-><&Dew#7fVxl??6Q--*|A|Kzr?Bq3VoljNCGk%9cK609iFbk_++pi6 zU;siG0K8ACa~Rl&aZ{rT<4P3AUjI_x|4qCuWt^;rtOW%Hu1S+7^{)2p92!)cjVuwN zL+SjkBD#hSj^WwNG0d$+%ID`TD|$I2Cdo_$*4WNG^pK|utO*WllyT%G!reayg9eR0jdW?wOy zBo^AThQ&kR4UoeW8t+L81OnogxjxZTuN`*uM$QG_?%o)aco$Adyc2dIxm({0`Ey7h zfjA>wgU$ah%=1qw4AX+!=o-1LW9TjR7>2e07Qg(>CPbh6?WWu>#c^*ikG-R z2sBNKOiPRiP7so(-QMH%Q_t-=>+IgoeK#a~%oVdXUY$u;mLULisvY!P3Z3d;hz>%C zp+Z_Q-joz(L@pK@l@F0VK!-4A!4d(SNgC3k{75tU#xNXffTo8*+uJ4p7{Wjld6=EL z;ONsl`G)K}tNZrP{M)}jz2&Sujo-(o4CR^F_(U*-g)9X@b%1igcuA7DjEoGn*=z=& zbbhvcTNYXP)dp_;R|j}aX3R5;>&W}>zwbF`%D>ew3oqAxjl$iHE;3N}h*Saw7hQ0f zC>jLwtoct5PjilxpM2!`o$o!AXY4hgHhjsgrv^>E%T=FT2dc>o)d|N5Oq8qz>>va> zv-MBR9;rI?z(1}H z6_e_HA>)I0y_b6S*=L^`lssc| z4=n1l51&Mzc4fk%>vOIv-dnJ@4WxZuK7r^G19cadx3^1KhS#EE?Y`>zRVk}$UU)Dr zbHLQszPNQxW$s;b-+Al3`nx92HUl8{-g__HQf04>7kFsjbm+PSg;H>g2(!^*?T|8* zYQHiDdYJZ(y)FR(AuI?(1+&pAn2cuVRE4TbpwK#H6+>9CECX3n`Jme5T(V?I_{Sgj zi+A36XWEtTTzRUZ%Hw}n`^muNJ3dKOo%=0`eR-1VJY8t0X-WQe@!UZAMF{>mBv3bY z@`4A`=>DZmDrKYt@y;F-8NxCixvJl$hIg`!>8|Tu{P^10j~ux7tNgtE{yXltW7yWZ z4|8;?fB}!li~Ol?6p^L6uBjj-^7oYLp!oUp)&0<^23ZS%5CRI?uDBoC4~DSd1O@?B z<2P>oQScs!qKg(Sx`H>5N%L3D%$~P)Mmn|C8x#8&V2d$BRaNL=ku7T~a~wEO!lZ*a z?&JD7PW&>SQo1vDAG3b7p*8yyN4s7jgC#r(Yi(({jUU`+jY_z1>?Koo`NEAtb6b6~ zLc-NmPeEHVTGDAXzDSjx& zM90N}7X)~HZD1KAsAQ64StcjJ00ErfDXjhLp^Bt4N=Ww-5JZ&I5Hv_&837y-d9PC4 zYklo&JvNnp;+EtP-TE&IO~v z1OSk=AY@5})noxx*#OJ3Iw6GqmgRPLq1&b~juD|N1i?@U0Kf|btZ=xR9m^xe+rAJ6 zr4%|8=$ZzN$lw?eEF-X*&=SQ86dV!T4R^=Zx03|~h?oW#1Co0hhst^Ynf6$)jDUmn zH=RaSku1YQS4n{5IGvD#J+D8ts7e&7Lc#MqOeRz0W2DNlb+8NQq6GSFU>On4>PyMo zSsTpr=g$`bXnjwyYiR>a;n;Lh9XiQL=}&f*o9Bkkt zoj?BcpwOVvpS|OskB<|!0*L$Z z#~=4S`ohh$rmnJTc*+Z_RQ}jwk9kBu|NGy2;p%DUns@l$KH+ov$qHQq{6RPBDw)k4QwQ7cz4+dw z_&ei!#>U3rG8fJ_<8=eeDu9EKEMw4--pO7e)(c}xDc*T6ceM9ysYgll?kEcEI; zYh(x^p!6?B>Hr}G3`5Y?;?)++T~YJI6HjKHf8n%ok{al*00jLp(Myp)nK=Nxa!;{B02_|M$T#EG!NIn#_hyyV7|E z(__!M|DN-8&)U`^t6-B^TMP?prV%j~11KXQ(L6M~YXMgtiry&Z=H{xYC!T?RJ4WS< zqM|r2SXJn2@O$JMt3&LeQ3V79EMou<6DYv@^_r+gsW3_l=owa%J>pwBNo*V^3mC$| zB-$aEEEd&B{24+=r_O$Q8a=h0w{F&Lv0|c5iVuqfzo~J{KmdPgsAu6nPCoQ`eR8M|$k#s-) zcKzR!a6t3dl?L-b076)R0F+SZ(4azwLc@@02#Owpq6eWvMZ~xH+n@P=x#*w~TIoTk zREiYH(4azx4o%lUDT8QB57d^m?TU$x)ha3~e50m2^<#eSAI3n(7!p|?SS7P88_NH& zZ3m@9BZO^#aN@a`DU|Oa))XH z8H26AW2?s>#6X8@ngPIq0Y_M{orS?q7r}({24TQ}0in8*KwZeIlrdny5auL!75}#i zs18k0VK&&HdCi5IM1qne1w4VqaBQlv^Np~CIp|%nVA>UhV`raZRH6w8#tN^qmt1(I zsivluj2t;4oSmJmhN5yo*)Riup#aGvb4XP~DHrr<_2s*R+Xsw`?!{0IIyyYlf8mb+ zr4*`6!5fTpPhRQn*w|P-H#fJfp~gdU7dm(X=)HRN(tD>4V-|i;#LSs9R{$V<@c#RO z)20s6<`my}%$Dk7QlbeMTyo)+hWgqj`>U_L+~d5dm-J4EPa*{c1z}m1!vH#peAhW( z09dQ((%O2m5-bs*Q?-4<`U`&)s7}z>Tqo_{8s1l1E&8s%{`$lL177RRFpLp^=yJJC zsi~>v^M=d%?YG~Sci|OhyLay_sF^tJ6crR9(nX!;=Qt)i5CK6=O)Zz66&1^7Z+!ln z+#S7*CL^_5T_J%ps3yTF8F-5_X zxMY82%N-Bjepz;AbiaUHA|S!(Z}@cW3~f*_~D02&hT-bxvvz@zx_X%mzu0*2SWr9 z(h;cI5&YS{wrcmJtGaZEzx^-#0U)H)rbfWRWley?qT=A_1_~V^#S0_nK!$Nj%S{*0 zSbXV)(d_QsyVa;15CU>cO6f5#y2OX zv>&0pKTHDs5<#^UHQE~O&O7gvN_GVIl89mH>zeA@$`cb40|!cqJ!k$c;dd>EyQTvjVTo7bS*4#k z{%JiYC#UVl&-VN;CEGNPvuQTAUEk><6CX!nqFoBopG3T({j_hMM*7Td81>9Xi5c1ujb>gkWmpH~*WlYV_#Q(ym>*YEuU@ za<3t_-_`Hm70%&P8qh#DYnT50OzHlcx9q6c6Z$cGwBg*Js-HX*jYt_4imE_WRe%CK zYlhw6fK`lzk$1t!*&(tPaEt*AiEJBE^blk%2ubxKq_)8;)x#HTLn!EjriHh~Jn%&y{rC3uH>|=UC9=vQ zIFRRou7cU?`!BQn{YEZ2DkfaJ&Gu#gk>*o)PKeS@3S(hpdeU?ivLZv*D2%)fv9@Hy zn0mp=B_q_v!r!2yx!#Mq>LxVS*Fx8TfG-4H(_pciVK4}=*i49tPeoK>7F-S;jMIk@ zQ;U{h89e@Ggb;)vvJeCT9Ls}5l0lsC@vEu|suKi#a^128>lde_qo6DvM8((;lN61#emxKy z--K3qKU#ft@CAb~n0Sby2$tbaC?j<&S>!Oqie;&C?B>5yG?pXai7n{q@)H|LCKSQ2Zm?QdYK3yBg$IGo>Gu zfy&Fv@x~i(7_Po$T0-`C<3o$K{AX}YQ?a$xUu|d&)EEPDlYtR*B8UtG1A)mVAjY9d`|gQVLa<5e|hRaAssDzT5_EKAvFLu#cKe5-h9S!;qAWd-6+H<}`&qpG#dj#)R{@*Vj?Bzn zFc=JxtQZUfhG9U+ZwN>rhgwGzRe_=^U|ANTC_>~7@Kyo7x(wKQn_)~mfS}I{MGnI1 z(7|(tNTRIc{AuZwLZvbYVPF4Md1*y5)9EpBgNbg6$;&#~txEij0N{Oamz z4H3z7RQ#$A^ys6Hsuy0ETeaxjntz^sXUyA|lfJJI*8cZe=Se9+y;lTW%(m>aBghC-GiULtI zKwypV6{Ucww}9_ah_KuQs)u290wQk!0ef6%(@7($LDj~FXH8(fYy?ghnTeogCKJ)BTKki=q-Rr%_sV_R? zWYK6eb*7{HQ-s={bAf_P&P-fad++J~U40#uV=ivmQ!2pnf70y^xUk)#ixk*(9gP!LX25;Cn* zm1iIOXz8A<)xOl|Qo3o=CSOnuHVQ^P!OCFc=8v9dkM@-V!K$?fIGC4;?bJ%pxko9z3!T=jz>LBYHiT3K-HCY)+WcTPy#5L1Wg4pVn%^?XSP1`;M;38 z38A#~REVMgp5r4^7hz6VAs~=t8R2jk9Ls}gO>0JDua&-5EgbZsJL?=Dk28U;E0Dt~6778vrH}AEao3D_wUv!KQqxjpK@cK_K#uMH z>8h(!nxY^qg~9U%)gB(axUs^KYh08y(lIPKE#@kg z@I=S)*-=WNAsCWiGsdBZ<#gr0FD_iMac%DEGtM}}WHcCcy*(20WJ6dE0~9naCdr+* zB56ibR8cR{#7*Eh83NBnEY`;X8r30(bcjw9{pPbDKHt1PZ{g_Cqnq~a+gD|Z4F|4z zYS7^`haLf4VxU!@*D^K50WOXi$!BKDvAMaqX`xUkZFkAqZ3XK4qd1=SmbE}cyYEI& zP$-H776P)O&!j89*}L(xS>G<2IB{Z`EXz?W$EwiKnUVfv0$~V3;gH60TzKN?=eR%k za^F3+88dV{M6!eH4hSn0XZ03wF7xwGdzYIWqb8|DtvK*y4jcfxx$CbYKtTVS*B{cd_S?qw&JnKvYDYK1{h z+`Vgi!R{}={IYfV@~y#z@0F+kq=bY7MNt&Jxw-kU?H$5E7K;V%zyCgS{q@&d&p6`@ z@rfs%$jr&f8RGUe52ub-n?&>_h-GwPC9dH+lIM|{+Bu2Hr62O z(I9Ml+R*OpKSji~L3Iiya=N+bk!liJ!{rJ4S{IIS*?Kg_#rI!-&0S}`^2YO@w)O0p z5gIUHpavlH^R^B*g^}!0(T**_=dN$t*)&-StBj+sh*U=$45F$1fwcWtfDXn1x>xj4 zD2faNZ$`3pxcr<(EdBf8QI)GR1h#=2n&Yr?P+4D&=M+6ZV2wZtj84P z{5Q^+^ig_x^jm>Ipbm#&pkF8p4?p~{I=cV#+P%xQS6G(a<%|_!v5DY#F5*+65)@tT z%p7_=pi>QstRcqQ0~Ptc+}%6&?H)LAU|{dwy-m|@&rs1GPD&Wk9*%nQ6^0@0hYdxr ztLbZc(WTS1KAHX8>%OV~N>Qjk@;Z*6{zhqJ!4cWH5kgRP!y9UZMpY!32SRKZUb^Z% zX~B+-#r)c}YY)rShe#k*RZ(AGufOy5yWHM_{L(G?%bu-emploRcbM4`hSg>O&xw&( zpX2Dq(Nql#1VkBnNgsT^V%flfgFZB5kR4UU|WNjvtUbxac{qY~X=SnP0U>QGVS z`(Ata;fKS2zvbHE@_hg1ej}}CcK>4Jm!Qz0YBEBhFdXK1WI86$(p;(Hk=y?{&up~G zDbDqD`}Xb9VaIjwFMhutQ>IK&Uw-*ze{xc)I;8g*W$~eNpV$44&At{@^R$H_tI|QC zs>j1~L!l@t%tjj&kEL<*+Pp2ph7D8q?%mru_QC|sY;PC)9bfy2HXI(spcvt6(n-4# z_iEi9%jsdi*1BtD>+;B{XdO18Z`A+*REZA*w~<7=s<;qg?Rk&$K`N1+<5=}_iH@QWAhH?ANA_8yMwf8BGtl-JsJ>s z<3Yx+Zd9Hrg(~ZCSQAmR*R#dxhz{tw?uE${95!JPJ=g$uaGcM{hRF1KP+!3yptQgg zRiO+RFd(>XanZ&r9vtLj1lHOy?(RiL43&&sI?OTQn z8B(!%^XAHymKHy7cq88t?Lf~x_nhkWdYhho_F2VXFlf0u950o+m(=>Tk}Iel7M-yS zghQC9TgcwNL6N{B#7PU5?#LZEawM~R_wI%fQ({$TobjNVKX-YYTwso{I^&;DWz1dURd+)u5E?Y!=|(MFod;se{>y%rs`k` z56Gq#fi*RxrKM?KfBm(8+LJ>L_16$|N}rQb0<|Ym|Ear?zBh&T)2JS*3_#ktq$V$| zPxJ(afaz}6kPZz}NP)>0YqQwhVZ|IxVcb~)IsM)Y#Lro|Y`qhw*qcV`H zs(ACwH|ZG{_Vs-A-dZ^j2)IGg=G5;FASKoL5Mdx{y4a+D(uP>Ba8^VQDXMzmNS{RK$Kel`a zT?38qr`Hp5|7YeGuPvItc}qq{hR#n_gB*Si*rqf!h<{sw$r=&ZrCGp+WD0 zC{l(Y(Dg%?%O?vuq@t>7I&i45aBs_e9f0I%l1g+LA>PPY2w_3GQ35f9g~==;43&%N z8yp;;Zp^E$u4>u8e}8!3kZgYJ$O+Qw&l{-M>piM-`e+QqIvft+o_p?zd;008Cwu&@ z6TVvV_TY7UXQ!nN0nU;D^T?g&687hY&}tXi|YIp9%!E|VdK zpu61~EDXE_W*2XXpOSjPsgnkcu}ax*p@t4$?%n1uzWAbNzy8@5RMhSp``w!Nv+KjV zT}i!7Onj0HqG;^gXO3c6dPBcpFmQ_5Y-Tv_P~Inmv~LPL zIpcuCzQLA~N(Hd#SP#D}6Ew2!(wzxIv@L`~DdP_8jCF>z;6QIXH@ z_fN7~tqjlehb)ad80TbMg#nQ`>5h$zk^WLps=;oz>uqiB-D}sbn>FgnQ?HGTn(1ch z9^5YtDvk7o5&;aOTRcknWTaILzWBk+&wlv0@N2iXwQca=!C+bTklh-c3}mrbNPK*} zUeLI-=fcth7yB)q)ZU{FFdEI^7!ed|=L;eS{p?N<5D-eBYARHPhIj*C(z|!>$BT>i z6Q9p_md$26go#c@FZ_`}DTS&ku-om>G;P-hAAImizkdA+9S(;|;l}X@?f6-bA`Wt@ zKvN=#F*sI;AANSp1H&hzj2q&Z@IW{mE~b?FanQWl`KiXl#E>;>)~LzCxSgoY`a7>g zuLEUOcZ(0r&CLjgeb7!odOAV~6j=r%$~*w6prD|5^ypLW=Xw4cuh*-ps(Qj5rN6ZR z5fh2i>4K_i+unS0#uH6VOJ_rv9L5NRkMBkwoksEr_yayb`%a4P?hkZmngU6Zz%mA; zxcVWq_zx?v>DW{y$ ze8m-4=qU-k7^cR!xM@$t9zM}|wkxLYbbq+j<&9G@FyUF!Ebq4ltR^1SS%JQ2x8%L z&pr1-RaMmnN~s5c?e^PmH<#+4Mt9`5?cOPjLZcdFISfq&qAY1hwT+~qCbRFucb64> z{n>)8eqS)Jcke!B27{sDn{U2pY-?-tU48Y{hqQ9YQl_x55QT+>>e8i4n?CvE6JK(2 za%)UXjIXRLsy@&dwb`6jd7huE7~yFSi(EVl*1(~=)o706psNzV1mhG%VNFa7>x%ba z_@yCv@vPbVCy&4MU-k9%@Or&h+3j{-5Kc}eqLf0@G?>k1YOz?#pL+7Ce^gdhu47r^ z9&>I_ZSDLLlAe*0zP}Nf)G@KX+1enpIM++W$0MQ9%oOuf?fBnh_ z2QHg-)ARN9^@`W)z1HDyh$kBpbuf>~XoAsXEPwvF=bx^rsaXZUeevA`RkO{&n!=f? zSFRl@Yat`r_po=Xia-G=tif!sXsrhfd!K&hnN3?a?%1D@kWf5!?AW@NmX^j%n>ID6 zs@lOghqWghb^giA%cFPQbyr|x#jMh`Yu6SWC@$TTop|Q%w!JZ*a?~2&S!4Tg+}#w# zM;LG%2cBo4kzlk>YBWbhMVX^by+83C_OHdLMZ_iVareJwL-(j==-t{ z?(G)?L158b?`!&a<~K99Y}o!;|Ni~g=H%oQ<>%+`4>R?(s;Y(&3FA1TG3r+p7+IFd z<2Qc5x3;!AUwrX}OQu{n`jL#$c!K4r<>26`?kWu7AR2jqlU?3WV_YB*;B9I)*YWQb zhls16?W27<_nit!lK$g#I^XtsJOM>f(2>gJL>67wA@Dpb7E9HeZ@&4jhK7cfs;0DD zcK={?(v^Lv6wsiC7%@3HIiWRNnyFEhqn#;px^s2Q!elZdCfO8s_AQAI1Qx<-~`x1XiTrGt7Fm}qf7?Y)>+39ZNQB$4OYKh@==+hC^MZ-=Nn#+ zH>}7?dmAK@p7%Hwh7izp=81}mYM$}tjF;-_>XrtAzQ*Y{Wh>Kf%%&_$P*Lb++%-hF z=%R}T*7$cM6GGaG-+Dzsn4C~3Rj2Ume+|ttWLrY6b{j?kV$`{``kamnMcX>5`{`u!yd{X`Bwos*$0S5}b zn`wG*;9W$>SnP(lzdted`RO+dnkvcR_`7d`KX1ZLif3&r^J(46Hcb$jhI5-@R=KuWXKQFblwaqOrFR#1u zp&{~xw-4+*m!hV`kLtau@VCER*T1M~)d+^+2t$~Iwq|#~0g<*Rn$n+|DpvDn3g3of`IVbGvK!qZPbeMBZYgn@XTM^;uAlbV`pn?Ha4u;jG3Ti*ZnsY&I* z9}}}jBodb^8amn?sicDrq}vN2EQ}@ttS-T>nd&FZn>SAvm`M&-f5gO8TBgmb z2BXi8jg5KHZj)sh zga8afx}{L6gAjtKs3_m(pMUXISy|b<@`|#m^KR)UopW6_Wm%@Pf8J&pJC-*Ix8Hty z--?#JQ#^9Djbp@v^vdIRMOapcs)rF)e2}SM%o=6A=(bl!-G9c}BOE<@_B7pn_uXQb zrZ78_#;_8$sfm?YZ{#3uK25<&ovw+&vu7m^%qKVtgeRRYuPg&`bFCIg&t#?B>JQE9!hCD^F#+{&;IJ2 zf`Wpt%F0VCrd-!MbkQAy>B0SCi2*z2F#NQs7dX>0lFr;!wWP1XU?2o+XTG5Br)m2s z(6nPuSO~#j5V}fXWSxjL_hrW9jGcDH{X?G!$gSy$q8yfiexYJN^2j5UQd*r%;vWn& z)t}1>`h{FLwzaiB>u@+?OeWJG7WScO z5vdUs6&;*AckX-Jwr%^kva+)BvipXFr{6U2kfksIuzpc7dGGbrLR(wgn4;QEr!|F& zqT(Gfk>i<2_vRRg{1@?m$+8mB*H{rQa|)tNJ>W9*K-j|uHm=I6UcGGd){^~Iv+ufn z03(XxVTpAJ1Iekyr$*@wyeP^L(_T>$m!eD&@V{p zV(VLr(bnvP#iqh!Hi0>|1E7BcBD#=4G$KAt?{)5tSvSpkb><5!%huli+%4?Zh7UBI zs)xOE_?by``-%niDcU*n;^X7xhQ@|x2*V_s%_jWb_-S3&00KnE#02KfojY^o%9XPk z8X79Ed2~d0@>P9*k*h!GQL*~#62q5Ye%TY8G=1~_ulm~J3=GTg(DZgats7}bp+S;D z2nQ8JIT8?W&4N=*hp!plZHx13S1x_Gc+SY7!oK;j?UDt(i3dLGN zaVuWj-HJOY?jGFT-K}_WElzQFDemsU-L(+p%X|4>{23$3)y~K{S=ncuIiI;y%K&TM zhJ7&JnBX$TAC7Gce73nA_R*p6%-clcPm!G8_|F|3Z`T1F+K+8o`@ zB;_!{WE?yekK4e7zM_OBUQ+L~nM_<8KS-ObrGl674+ip(K*@c(lKkQ^hvt7LW-AUpK0c={C=_UdDv%W~a}ckqo<04Bigw%KY4%4~ zXXnMIW)PT}XQGos&rTS#t6j8*{cF|?usqfAbQ~~~; zJ?2J7%XXj3Gq@8qj47RHthZsA^txZrP#9&_@_*=hPN6I7)Z3#u7Hb1O!(@~Aq0Xna zxOYE{X69au@MBSu*_F(#@VFeY)`WbBZlX%gSb$ zJidOLw$j(=u6Og>hGt1p!Rza~E^CbLTK27n<=2iQO&qD)@fF#jN!+!9y5voBS0%7n=H26#!#O9gb-;cDXG;9!W3jrHw0cUubkPVS;v=`RSe+M_yc zi-T^qt{ZKxx0}%2ksCfxWaWt)6IIXak>%B4s%l*(eQHzN_UW#0#YCR#Z5A;TOoEqW zyeE$&M>&VWE7ZjwW@OZa-?LV9w#N`mPQ`0>nxdhvg+)l%ZvWpdadUf1?|t|y1N!Zx zu@cT}rBYD!#%5(Tgj@y*9{jD zF7ToDO*;|~wXm=tWuZdD|8`c6Sr9YttI)z10axwfw_9_R7!=ob@q>O`F3s-uH;4+_ zmxs1^TtUIXoFW3f$zKn)D65VI#PDHPEcgr&am~@#)pA{Hc!$JS+u@{5`p_c1@Sp6U z=PCI|y}yV%bb6@EohMgsnKt+GLkY0bF3Z{p{ZRN-A9RhEntkDZ1|Wkymi&>jetgM! zftc}C<#3Lt(K|hJxAz{E8t1-cNo+PA`z2VdLrj`ls@;2jfaHpo%hPTDQWKk$^u1>3 zbmG#mpskFKtR zZvRT?fMVOL5!#-0%JnM6?cesx4sOqrhI;1A?u)A0FpF+pK0Z_!OYTlm(qrcuz=T9|k?yFOxCp*JB_k>+uE*F+r2Ep)i*vSlE5^Y_eHvpyuLw0LBm1 zb7Ot@A$$DkRY$QzMW@@Zzb{_+%_EFq401jbwv|MhQ%GaR!@ovF_Q3hfxkA<3e_&VL;JR~D1354SkA%?542n^dZ6!dOejq&K+jFe9*`d$~{ z?-|!Ilec%NIsM|<3Gh$>B2z_tIv6Put&&oOeOc1x2y(J*P6DdJ7I zD*YZwSMZjveQeL?DHQ*DNy&e(Jo#}i&r!<8WW3cfS&9CdNvqA& zR#*20o+Q4V1uupL7!Lm>f+c9Y)bZ-YnRI9i3mC_ zIjf|(f}8df5*&j%a=2(6W`mFZ-e!i18D({KvyL+%?Z#am<)Z-WvyV-JxVKZ)DkWyq zA)h9?pkcnM_;{t3q4VprD`Yqk?=2jdWgEB7ni`AOit4WC%JOnVNq!$Cf2TjGt78kS ztUYrKCL{b+>km(L`^U%zq%TJ%@tYgd>Q1|3q#Jyjzvhjn2$GQsEhL9L>u3_~h;Kr% zzI?UEV(M}p7F;RZan|=f=Ny_OwQfaQ`^Pk)C}qZ;HWsQ(YYNq39ZPks74=`wVCl5D z6tToZe#6kt@H@XtOd_4Xg&u8-ticaZ7^fTUCZ3rKzF+Tyzt}zqHa~@*aJK5Wtxitr z8{u;qmtL-SqbEPdIvzuzKI9>}*qmAHHoqR>-70RbO-G0xre(%+%#0z=0;s;%g5!jc z+fMft%Kdc|m7fR|WT`rpUs0pz(&#}YM5QK~U>Yq1F5k3)Ul_0Dln{Peuwh-J;s{2o0BENt8 z14t?s2#erfwNc2X%z`H_BZGosf!^2VS()qrDTBK9!Znt22?+mln60f^qyl$ucC|6P+meWQx+z*K&FFDk#i;RFg4xgpyz15TIYVkLIo@Ff8U`LB+A*<=Xk z(Xny5)I;HX$tTL3h;;=4CkdA64UjLqiUA4SLFO^gjN}pQNl!xwMDVC4BK6zkC$X($@Bx8Bf1twzITcSy^8_O80pZX#=@&UOo`*pIxPm!9u6O_nI{X*x8!4a#!5yuwtAlrk zsy=!hrd7sYTQ@Ey%k#^~#|DmAh=!{Q0A2D_r8H6d4l&4k1zP$HY*A9rtM74eQ#d`> z_1#rWX z`Dsp+8-pw9&tm|*QM%!hI50oYjh$2)@|Ch<<*ZmfvZ8-sElwqmK@JFsK*`Ndj)JiX z`B_>6aNuk|&AOjRaolf2{L^=HKG|fL!uhRNd?%6E;qNlJQ$k0qHpIpC>ky_aIh|1h zCj?lt$$k2IsLu2;w6A8xCa|T2XT^qVEO|D7VazDFH!pJnbR|&T(9qzaqoX6Jrl!`- zgLA3jYlK|b*ogCA&Mdq0RNZnduyMlAy(N?-#8M?Trdj%66g5LDX=I?dq=c}(zWzM^ zZMR9TsKs_yR2q_gt;a3xN{9|S{h)>^wi2OgjG!!w7_XW=PrxKM&slEC#-XbDKJ=g+a%<0@ysWJFQAb0B; z8#M=;jKHG^lu4cC+>0N*lZ}tFu&`iTpR# zL45pVF~l(xVCLZv19P>9>pngCE>)*8tN41b6@Rx!$V`qvMBiu3&E_j9ZgBNfzRs&( z-F&yNVPN>s;8XFoN!K*iRnxBraXOV2i?nLHU(}JhtkP%AVy7(_PG5~R9a`&mJ_AXw zb^%2$hvUV}EK~y(Qy#z+{)=Sst*9drA95!gnXD=;b2ElC81?%xNk$V+2uDia`VQ_c@sshBcO_%aKGD32^!Fi!VKmJ7=A1MZ5jmPLNVeLV+wTI>QQNhUl*6OGxxk^ryZAUG zLG`RGD$$cySvrCx*ifR6zf9>QIWh1V7S1G0k0Z!L{3-^PfdU5L5N-_w){_!d2XII7 z=+gk+-{H}ru$#ne0$vhqCOJvMvLi}4Nn93o^{6r@KDB=6Trr5}4~Oo>?bCsH5*|L; zXszFDw;o($xJw+VFq5u!Cykl?M3f&eHTmmoDgqr$aoGatLz}OYikKb`01eqx!j9ay zMf+1`D+(@XV~o{!z})q7PUVX^B5d9;pZMSo#7KQ4E1-SYxOpvt?54wTYhr}%TCze= z)}_scI=TlRjk=csbS7M1*Jhf{8PwoqYD~Rd4RTzV;V*fUEb~ zUj?Wwh^ql{!i>~X&D4MZoVZ<|wm;!houDJ}Lc?$jV%0RoBHxF1GFr{Bz{=2-lhvpl z&X4Z6AA+z9wbYk5Vz)gN^YR#eC#O-$%yUc}Mb&x!X+80(YAeVoGmmyWNv<^Ux?x=l zEZx%3gioP&<7y}>F^%dE4~@nP6XhXF6(osYUtKMiPAme-j_hmbrn*dWLX8p&xcqK~ zvG@QKL^xPibT>&spM=4L@7!|?> zB`Po{JtIlSwO#Q{ibmZwSpj+P5ia8^uK{t=Sd+|ezEA5u`F`od0UVu)RD?yk#EbV~acEiZpe??zyh~1bWPa+BwfcbS6*6mWs_Jz8>Rz z)79YK?-=xzy|l&czh95h{wb1vMnqh2wP-_Co6Dmk_#j3W^}Rj&h?$xX0Lb|BJ=Lr< z3MnjhZwj;`9Z7`#R|E_3O5o#%{QOvjSnJt-R!J;`_M{xWWRdO-yLwQsJ{zBT<*#3# zQ?$NvO0b87mXG~R#^O+e?-AKUXMs+Ks0=!2k}NOdt6d4{J`)coyXg%LHj*|%cdLm0 z9QLz@NQ4IusUL=DD(LWOSco?;c!uuYwV7+Jk;UF=)w`i>f7DLr&Mh`DPSl``$?_oS zvkH1aXk_Ylzj|4!(hRhO#$Kz)z|i=>l=#qZwfVjhPfrs3aa!aklHruTN_Z_`YDP`;;Vq8h(Rmm*28YLg&@lsJS$U|X9 zvy_$=-P$yzQ*EJA3&!0Vp9qYu+lm<;M+51?uO8$nVF81++jS}}USKz=?jZu};{hEz=QAvVt4RNapka{IadZ_l74 zjTThv%}S(f8g2HyTU7m*6az(MbY%UGdL zB3U+2=PmM&Q#M#woLyd~^%fv`hX%xg7% z#N$HGmM2D7*5C2POeyI*H@iw=UtC-UM0cZOcoUZcx%-Sc2zV!phWm^EB3O@&X+LV< z&I9c2v9Wg&8UCYh(~a#n^OVv z&M?vsKLNHodtDjygF(*K1QM`@D_MHWFTU_V*A+<-K5kif1OTACSOisWnu9osi1j<4 zu6j+(m486w*D>dAZWt}~UKTXXxWF08?_2znrqRE|@xnrjj}1Moij$o}us~Z8E@(tE z!Enm3<$vCUgq5}GA_049Y-@`EXPDBzAZ3(d*R>CAthGiVpFrcC5=)$VNHF?aWOyyP z3lS0Av7--e89_f#B~r-8P&NA~1{dMg$uVN9IPcBWLI*%4jzn|Yyid+zs3S0Dy|PWK zA^*gk@f04ol-Pq}5Rz74L?Z^2Skd6s7JD4#D``>1TxBt`4^R|yxv*eLzglMysjuE5 zx?f5y{xy54T{Dya(x0$~c--*mNVWd+XI@zWC_5e?7Q=}G97JoF|CVFlWzgx{`$7s* z>L>yakaS`*gE06icBfFYt&{=i7}i;D3*oJqPTaoP?vQ>BG&#~=Tkt+_rYEDsMEQMNd$#pxhTw(IcX*P6!XvHnV5aa= zltoqyRF#`NZ)ayG0#nC1M|`u)2PpXm5mVH|!KXCaKhX+-A(OQr&QdlGC+Y)~+`;yV zl$qb^D7~vx?LfaC#R87b;y4zH75`F}=}8j?(r=4B+{p-~-&lPu$If z(xd?3-0W-y6t?zj^?!fU2Lf)t-O^*IenCk44U$rlIr-$?RuDc83WkT2ulumz6>(Lh zWT6?c(x}4$;o5&zBK&qLo6s;<(vajH_i}aI4u603QPRou{*S>p{>5r?B0!>Kt*@WM z4?t}V^0Q=yM*`UJn;f0vFL8$S8!5;37(4VH-dc1uk?qFppcuuk`+E&qN+tRm3-sVq@ig9QwUKy~#1RW)ZR& z8g@(_-m0IK(K4>>zj5VQF`hy~+GBBuR=kUu$hVLw)8j1pm-|EWwxMK)&t@iHRGl)U2n(PVSF`i!WHzqHl@37$ zL+T;o6Oo&I9YeoqjmXa=Lfr9HNP;xczF&1nlRBv>Ro#Yw(@p}$cg-VILbqmwjjF0D zQKeG-T2r-Wg8B2`e7Nh`+1Yxl>{a$qD0}eHzGbH?GYazzJbuk!!j>uXSi%Z%%`znZ z05!h{jG}k&^p^QR1Nyx^JOt$x6*{-Kw;LdS(hR?IY1h%e6c)6!yE$@T6+$a*SB1G# z&A1|%fb!v=W;no9Kud`JYS?dY*<9b9{nj6v`YYxGh}elLyG|c4^lDwtzM&(1pH>xF za@nX3i|Dr`4>J7s*Mq;9vYQ#X5?32uY)y;w-<E)S!mS$7{5U3kDp3&V(FeHFRY?@@Acak}Wjf;!w_jhIRmXreUEZQhB>T1@O z3=i`}KYhWB%Y92rT=?sD&0lgsnAll2hlY6CI6*;s07cIK#4Fl_6H zG3Q@bd9mal(uoME5l5dmKSy`3w4H{QyzxWobd)an53)!eryq!lv%hA+)m4gYDM;6# zO_TV$4915-P;tR81C)wUK*@T6k4ZBKWX5+YlsM26SCdvnOJBCh?)&UQMNM7YWYF#R z)>q(b4|z5FJ1G8mU!@>~OO611;NfVJxi6r#f&w`Z44Km+cVuVrp_Na>$er)M%4Vgi z8B+qpccN-%lgK0cFINfQrS#1eNuy3LGv%wh?b#~b<`N!czQGJX<9MPc{}@QGyB8!R zq@T+5nb06yvd>OSN~&Klt|j{S2D!wPPiOn9(^BE&@95_Wl+xyg`ALO>=20Yt*&pY+ z|5r)yX7*9Cu+^p?6Jp-X@$UvlLShIGpA0&;Mr{$x`ZTg2+ZEFF3hG^LIocaN_&PT> z(b#)lg)TJgBt<}sDgoSX7&PiHC-#IhcL?t{nkv9CSQ4iqkPXKq1ZG+taFdx0S6UGgOIQnS&Z}KWgml&#U6I2}!(Hhgo1xS6YAHNg<(` zefX#V6m`LniL+T%E|>><&hERN5 z8K-EnplzGI^kqyP?MOJU-2J46cspv(eE$o?STz3T;PTteQ5zEuF0LH0rMY6*ERIWA zYJ&5tBip5Wp1E+Eko{)I)--FUtPtd;kVfD4*rd7t!r}r7w@qwzdRHW|7x+|nJ9P6| z`3Mi-L5`rU=-a*A!$r$>Ty%y61*ups#cB$YfgsrHapG}O#nkom%7~(zo}Rwqq6>0y zRn-iB>2HuzY`59E3YkL-3WVZhv7de#p2}%Vg45eQ#q2H`Eay6)9y3!Wmu<$d;w1S8qO1eF>7R{U?za~^k=Rp-4>-%PAyMr7LQF)Vgm3FnCqm{AGH?*vOkVx08X(}W(M<7jGE)0x5OXBThrs)mz zzfksv+!faVfE5)Ty~bs`s=7u`&w2MiqjWl18X>1p7$s!;tolBb>!a&w=suSN+s~#H z-&`X4sPh^xe6>}O?fGOqDg6GDvA({JTCs4F&gWWQM*wNlABCAl z*Fg0vVu_Sb>m=?x^%~$wRt_0&oR6ey)6m>}O|PM}E|lL*WGz%=e|~*yDoPgLFjEki zF?~}w(hg%2YNKChBSzc4%UfNqbA`BFa)W&+&Q=>gDoiNMruesuc>YUYEA4eSO5?YC zDLaYb2LG7?t2b>WXQ?Q0&+r^?hLh@bKt+cA|Eh35j+kE-KhA3t@`9+auk+jg_0+%^ zstxnk=b_#_h;itI%ME+DJ9~BZrp@eu~1VdTCFCT#K}jo5!=y&dujr znHd>-bCU#RxeN^#-=LxZuab)}|0i`{uc7GnlF$T7e#`T(wGg@Joa%k!raa`kCkLb^P~z4Tsjo8T`qVU8#+Q-jL$soB9Y4y z>T@kVzf-$J2BK9~(J#aiqG1reLEiYg3C4PVc|MQQGdm0A8mx7gZBT%x3{-`k_J)5l zjB!p(C`^1z^Qi#c$zN7hpCme+Ry8|?{OtS@@RTbP;dKCJ7Oqp>3YBf&*lgnWcVEl6 zmvc>H?7Ah9cnmi-G3n?JN9VQ!CqPCf*Z2ABo=qERqjr?!<$n(DWqHjDUBi!tfh54+84A_^jDZci_L5lFxBM?Az*IVg5zZ`yksW*?&7bi3dr1OCcSRy+=h-m zWQEqSUB_9J+=4Lcd0Pk*E7s79r#fP|sB~fwCp0)<+z+j}WoQEE96EAW#jg82j>7jo zYQ{np8#`&8UgJ-e>*I#I4k{`t!G>M);X$Tdu~Z%+B69rD?)5|#ZxS;zvv~%zY`8Z) zg5O3gA1k0k;CQoX;xSy%@{)f*eFW168o)p30AW_|hck*r|E)k|0Y^v2UMOKi&}0vu z{PN`slCMy%7c?M3de56tY$=pmz57p;&u*QkhQYgF2wZh!N*4V$Xiky;T>P=5eTGWU z|Y>aH&s;r!RoLqb??DQryV8 literal 0 HcmV?d00001 diff --git a/lite/res/layout/fragment_details.xml b/lite/res/layout/fragment_details.xml index 245e60fc..6c17e9e2 100644 --- a/lite/res/layout/fragment_details.xml +++ b/lite/res/layout/fragment_details.xml @@ -9,6 +9,8 @@ android:layout_height="match_parent" android:choiceMode="multipleChoiceModal" android:listSelector="@drawable/selectable_background_transdroid" + android:divider="@null" + android:dividerHeight="0dip" android:visibility="gone" /> + + \ No newline at end of file diff --git a/lite/res/layout/list_item_filter.xml b/lite/res/layout/list_item_filter.xml index 92114e79..5dff7d2f 100644 --- a/lite/res/layout/list_item_filter.xml +++ b/lite/res/layout/list_item_filter.xml @@ -1,8 +1,11 @@ - + android:paddingTop="@dimen/margin_half" + android:paddingBottom="@dimen/margin_half" + android:paddingLeft="@dimen/margin_default" + android:paddingRight="@dimen/margin_default" > - \ No newline at end of file + \ No newline at end of file diff --git a/lite/res/layout/list_item_torrent.xml b/lite/res/layout/list_item_torrent.xml index 7f4d8a0f..c87f9742 100644 --- a/lite/res/layout/list_item_torrent.xml +++ b/lite/res/layout/list_item_torrent.xml @@ -4,10 +4,9 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:layout_marginTop="@dimen/margin_half" - android:layout_marginBottom="@dimen/margin_half" - android:layout_marginLeft="@dimen/margin_half" - android:layout_marginRight="@dimen/margin_default"> + android:paddingTop="@dimen/margin_half" + android:paddingBottom="@dimen/margin_half" + android:paddingRight="@dimen/margin_default"> + android:contentDescription="@string/status_priority_normal" + android:focusable="false" /> + android:layout_below="@id/priority_image" + android:layout_marginRight="4dip" + android:focusable="false" /> + android:textIsSelectable="false" + android:focusable="false" /> + android:textIsSelectable="false" + android:focusable="false" /> + android:textIsSelectable="false" + android:focusable="false" /> + android:layout_marginBottom="@dimen/margin_half" + android:focusable="false" /> + android:textIsSelectable="false" + android:focusable="false" /> + android:paddingTop="@dimen/margin_half" + android:paddingBottom="@dimen/margin_half" + android:paddingRight="@dimen/margin_default"> + android:layout_height="wrap_content" + android:focusable="false" /> + android:textSize="15sp" + android:textIsSelectable="false" + android:focusable="false" /> + android:textIsSelectable="false" + android:focusable="false" /> + android:textSize="12sp" + android:focusable="false" /> + android:contentDescription="@string/status_priority_normal" + android:focusable="false" /> diff --git a/lite/res/menu/activity_deleteableprefs.xml b/lite/res/menu/activity_deleteableprefs.xml new file mode 100644 index 00000000..ad353807 --- /dev/null +++ b/lite/res/menu/activity_deleteableprefs.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/lite/res/menu/activity_torrents.xml b/lite/res/menu/activity_torrents.xml index 1832ea34..0d086f85 100644 --- a/lite/res/menu/activity_torrents.xml +++ b/lite/res/menu/activity_torrents.xml @@ -4,7 +4,13 @@ android:id="@+id/action_add" android:icon="@drawable/ic_action_new" android:showAsAction="always" - android:title="@string/action_add"/> + android:title="@string/action_add"> + + + + + + + \ No newline at end of file diff --git a/lite/res/menu/fragment_torrents_cab.xml b/lite/res/menu/fragment_torrents_cab.xml new file mode 100644 index 00000000..ae62819e --- /dev/null +++ b/lite/res/menu/fragment_torrents_cab.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml index 22fba165..ccd9f810 100644 --- a/lite/res/values/strings.xml +++ b/lite/res/values/strings.xml @@ -21,6 +21,7 @@ Ratio Filter list Settings + Help Start Stop Resume @@ -36,6 +37,7 @@ High Remote play in VLC Download using (S)FTP + Remove settings SERVERS STATUS @@ -47,6 +49,7 @@ Inactive Connected, but no torrent are active within the current filter Select a torrent to view its details + Transdroid allows you to monitor and manage the torrent client you run at home or on your seedbox. Setting things up can be a bit tricky, but we offer step-by-step guides and promise it\'ll be worth it! Waiting to check… Verifying local data… @@ -54,7 +57,7 @@ Error… %1$s OF %2$s (%3$s) %1$s, UPLOADED %2$s - SINCE $s + SINCE $1%s ~ %1$s ETA %1$s UNKNOWN ETA @@ -145,16 +148,18 @@ Vibrate LED colour If supported by your device - Support AWD notifications - Show torrent counter in ADW Launcher + Support AWD notifications + Show torrent counter in ADW Launcher - About Transdroid + System Check for updates Check transdroidorg for latest app version Import settings Export settings Send error log Get support or report a bug + View install guides + Recent changes About Error during communication; check your connection diff --git a/lite/res/values/styles.xml b/lite/res/values/styles.xml index ae796309..9daedc4b 100644 --- a/lite/res/values/styles.xml +++ b/lite/res/values/styles.xml @@ -3,6 +3,7 @@ diff --git a/lite/res/xml/pref_main.xml b/lite/res/xml/pref_main.xml index 19f3bf36..09c61a50 100644 --- a/lite/res/xml/pref_main.xml +++ b/lite/res/xml/pref_main.xml @@ -13,7 +13,7 @@ + android:defaultValue="false" + android:dependency="notifications_enabled" /> diff --git a/lite/res/xml/pref_server.xml b/lite/res/xml/pref_server.xml index 9512a302..c34556f7 100644 --- a/lite/res/xml/pref_server.xml +++ b/lite/res/xml/pref_server.xml @@ -18,8 +18,7 @@ android:inputType="textUri" /> + android:inputType="numberSigned" + android:defaultValue="8" /> + + + + \ No newline at end of file diff --git a/lite/res/xml/pref_websearch.xml b/lite/res/xml/pref_websearch.xml index 09674685..f2efdec1 100644 --- a/lite/res/xml/pref_websearch.xml +++ b/lite/res/xml/pref_websearch.xml @@ -8,7 +8,7 @@ android:inputType="textNoSuggestions" /> diff --git a/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java b/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java index e8e92e9a..91932561 100644 --- a/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java +++ b/lite/src/fr/marvinlabs/widget/CheckableRelativeLayout.java @@ -30,7 +30,7 @@ public class CheckableRelativeLayout extends RelativeLayout implements Checkable initialise(attrs); } - public CheckableRelativeLayout(Context context, int checkableId) { + public CheckableRelativeLayout(Context context) { super(context); initialise(null); } diff --git a/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java b/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java index 7f6393d5..9bd6d723 100644 --- a/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java +++ b/lite/src/org/transdroid/core/app/settings/ApplicationSettings.java @@ -61,15 +61,16 @@ public class ApplicationSettings { return new ServerSetting(order, prefs.getString("server_name_" + order, null), Daemon.fromCode(prefs.getString( "server_type_" + order, null)), prefs.getString("server_address_" + order, null), prefs.getString( "server_localaddress_" + order, null), prefs.getString("server_localnetwork_" + order, null), - prefs.getInt("server_port_" + order, -1), prefs.getBoolean("server_sslenabled_" + order, false), - prefs.getBoolean("server_ssltrustall_" + order, false), prefs.getString("server_ssltrustkey_" + order, - null), prefs.getString("server_folder_" + order, null), prefs.getBoolean("server_useauth_" - + order, true), prefs.getString("server_user_" + order, null), prefs.getString("server_pass_" - + order, null), prefs.getString("server_extrapass_" + order, null), OS.fromCode(prefs - .getString("server_os_" + order, null)), prefs.getString("server_downloaddir_" + order, null), - prefs.getString("server_ftpurl_" + order, null), prefs.getString("server_ftppass_" + order, null), - prefs.getInt("server_timeout_" + order, -1), prefs.getBoolean("server_alarmfinished_" + order, true), - prefs.getBoolean("server_alarmnew_" + order, false), false); + Integer.parseInt(prefs.getString("server_port_" + order, "-1")), prefs.getBoolean("server_sslenabled_" + + order, false), prefs.getBoolean("server_ssltrustall_" + order, false), prefs.getString( + "server_ssltrustkey_" + order, null), prefs.getString("server_folder_" + order, null), + prefs.getBoolean("server_useauth_" + order, true), prefs.getString("server_user_" + order, null), + prefs.getString("server_pass_" + order, null), prefs.getString("server_extrapass_" + order, null), + OS.fromCode(prefs.getString("server_os_" + order, null)), prefs.getString( + "server_downloaddir_" + order, null), prefs.getString("server_ftpurl_" + order, null), + prefs.getString("server_ftppass_" + order, null), prefs.getInt("server_timeout_" + order, 8), + prefs.getBoolean("server_alarmfinished_" + order, true), prefs.getBoolean("server_alarmnew_" + order, + false), false); } /** @@ -87,7 +88,7 @@ public class ApplicationSettings { } int last = getLastUsedServerKey(); if (last < 0 || last > max) { - // Last server was never set or no longer exists + // Last server was never set or no longer exists return getServerSetting(0); } return getServerSetting(last); diff --git a/lite/src/org/transdroid/core/app/settings/AboutSettings.java b/lite/src/org/transdroid/core/app/settings/SystemSettings.java similarity index 82% rename from lite/src/org/transdroid/core/app/settings/AboutSettings.java rename to lite/src/org/transdroid/core/app/settings/SystemSettings.java index 577f9fc9..3030af70 100644 --- a/lite/src/org/transdroid/core/app/settings/AboutSettings.java +++ b/lite/src/org/transdroid/core/app/settings/SystemSettings.java @@ -9,22 +9,22 @@ import android.content.SharedPreferences; import android.preference.PreferenceManager; /** - * Allows instantiation of the settings specified in R.xml.pref_about. + * Allows instantiation of the settings specified in R.xml.pref_system. * @author Eric Kok */ @EBean(scope = Scope.Singleton) -public class AboutSettings { +public class SystemSettings { @RootContext protected Context context; private SharedPreferences prefs; - protected AboutSettings(Context context) { + protected SystemSettings(Context context) { prefs = PreferenceManager.getDefaultSharedPreferences(context); } public boolean checkForUpdates() { - return prefs.getBoolean("about_checkupdates", true); + return prefs.getBoolean("system_checkupdates", true); } } diff --git a/lite/src/org/transdroid/core/gui/DetailsActivity.java b/lite/src/org/transdroid/core/gui/DetailsActivity.java index 5e57cfa3..68076526 100644 --- a/lite/src/org/transdroid/core/gui/DetailsActivity.java +++ b/lite/src/org/transdroid/core/gui/DetailsActivity.java @@ -17,6 +17,7 @@ import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ServerSetting; import org.transdroid.core.gui.lists.LocalTorrent; +import org.transdroid.daemon.Daemon; import org.transdroid.daemon.IDaemonAdapter; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentDetails; @@ -30,6 +31,9 @@ import org.transdroid.daemon.task.GetTorrentDetailsTaskSuccessResult; import org.transdroid.daemon.task.RetrieveTask; import org.transdroid.daemon.task.RetrieveTaskSuccessResult; +import android.annotation.TargetApi; +import android.content.Intent; +import android.os.Build; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragmentActivity; @@ -49,11 +53,17 @@ public class DetailsActivity extends SherlockFragmentActivity { // Details view components @FragmentById(R.id.torrent_details) - protected DetailsFagment fragmentDetails; + protected DetailsFragment fragmentDetails; @AfterViews protected void init() { + // We require a torrent to be specified; otherwise close the activity + if (torrent == null) { + finish(); + return; + } + // Simple action bar with up, torrent name as title and refresh button getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(torrent.getName()); @@ -62,11 +72,19 @@ public class DetailsActivity extends SherlockFragmentActivity { ServerSetting lastUsed = applicationSettings.getLastUsedServer(); currentConnection = lastUsed.createServerAdapter(); - // Load fine details and torrent files + // Show details and load fine stats and torrent files + fragmentDetails.updateTorrent(torrent); refreshTorrentDetails(); + refreshTorrentFiles(); } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @OptionsItem(android.R.id.home) + protected void navigateUp() { + TorrentsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start(); + } + @OptionsItem(R.id.action_refresh) protected void refreshScreen() { refreshTorrent(); @@ -92,6 +110,8 @@ public class DetailsActivity extends SherlockFragmentActivity { @Background protected void refreshTorrentDetails() { + if (!Daemon.supportsFineDetails(torrent.getDaemon())) + return; DaemonTaskResult result = GetTorrentDetailsTask.create(currentConnection, torrent).execute(); if (result instanceof GetTorrentDetailsTaskSuccessResult) { onTorrentDetailsRetrieved(((GetTorrentDetailsTaskSuccessResult) result).getTorrentDetails()); @@ -108,6 +128,8 @@ public class DetailsActivity extends SherlockFragmentActivity { @Background protected void refreshTorrentFiles() { + if (!Daemon.supportsFileListing(torrent.getDaemon())) + return; DaemonTaskResult result = GetFileListTask.create(currentConnection, torrent).execute(); if (result instanceof GetFileListTaskSuccessResult) { onTorrentFilesRetrieved(((GetFileListTaskSuccessResult) result).getFiles()); diff --git a/lite/src/org/transdroid/core/gui/DetailsFagment.java b/lite/src/org/transdroid/core/gui/DetailsFragment.java similarity index 93% rename from lite/src/org/transdroid/core/gui/DetailsFagment.java rename to lite/src/org/transdroid/core/gui/DetailsFragment.java index f05a8a3b..f1d85081 100644 --- a/lite/src/org/transdroid/core/gui/DetailsFagment.java +++ b/lite/src/org/transdroid/core/gui/DetailsFragment.java @@ -25,7 +25,7 @@ import com.actionbarsherlock.view.SherlockListView; * @author Eric Kok */ @EFragment(R.layout.fragment_details) -public class DetailsFagment extends SherlockFragment { +public class DetailsFragment extends SherlockFragment { // Local data @InstanceState @@ -44,8 +44,8 @@ public class DetailsFagment extends SherlockFragment { @AfterViews protected void init() { - detailsList.setAdapter(new DetailsAdapter()); - detailsList.setEmptyView(emptyText); // Shows a text that no torrent was selected yet + detailsList.setAdapter(new DetailsAdapter(getActivity())); + detailsList.setEmptyView(emptyText); if (torrent != null) updateTorrent(torrent); if (torrentDetails != null) @@ -104,7 +104,7 @@ public class DetailsFagment extends SherlockFragment { * Clear the screen by fully clearing the internal merge list (with header and other lists) */ public void clear() { - detailsList.setAdapter(new DetailsAdapter()); + ((DetailsAdapter)detailsList.getAdapter()).clear(); torrent = null; torrentDetails = null; torrentFiles = null; diff --git a/lite/src/org/transdroid/core/gui/TorrentsActivity.java b/lite/src/org/transdroid/core/gui/TorrentsActivity.java index cfd82a53..f4242fd5 100644 --- a/lite/src/org/transdroid/core/gui/TorrentsActivity.java +++ b/lite/src/org/transdroid/core/gui/TorrentsActivity.java @@ -25,6 +25,8 @@ import org.transdroid.core.gui.navigation.Label; import org.transdroid.core.gui.navigation.NavigationHelper; import org.transdroid.core.gui.navigation.StatusType; import org.transdroid.core.gui.navigation.StatusType.StatusTypeFilter; +import org.transdroid.core.gui.settings.MainSettingsActivity_; +import org.transdroid.daemon.Daemon; import org.transdroid.daemon.IDaemonAdapter; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.task.DaemonTaskFailureResult; @@ -68,6 +70,8 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @InstanceState boolean firstStart = true; private IDaemonAdapter currentConnection = null; + @InstanceState + protected boolean turleModeEnabled = false; // Torrents list components @FragmentById(R.id.torrent_list) @@ -75,7 +79,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi // Details view components @FragmentById(R.id.torrent_details) - protected DetailsFagment fragmentDetails; + protected DetailsFragment fragmentDetails; @AfterViews protected void init() { @@ -105,14 +109,12 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi return; } // Set this as selection in the action bar spinner; we can use the server setting key since we have stable ids - // TODO: Does this call the action bar item selection callback? + // TODO: Does this call the action bar item selection callback? And refreshes? getSupportActionBar().setSelectedNavigationItem(lastUsed.getOrder()); - // Handle any start up intents or instead just refresh the torrents list + // Handle any start up intents if (firstStart) { handleStartIntent(); - } else { - refreshTorrents(); } } @@ -120,7 +122,16 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @Override protected void onResume() { super.onResume(); - refreshTorrents(); + + // Refresh server settings + navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); + ServerSetting lastUsed = applicationSettings.getLastUsedServer(); + if (lastUsed == null) { + // Still no settings + return; + } + // There is a server now: select it to establish a connection + filterSelected(lastUsed); } @TargetApi(Build.VERSION_CODES.FROYO) @@ -138,6 +149,45 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi return true; } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + + // No connection yet; hide all menu options except settings + if (currentConnection == null) { + menu.findItem(R.id.action_add).setVisible(false); + menu.findItem(R.id.action_search).setVisible(false); + menu.findItem(R.id.action_rss).setVisible(false); + menu.findItem(R.id.action_enableturtle).setVisible(false); + menu.findItem(R.id.action_disableturtle).setVisible(false); + menu.findItem(R.id.action_refresh).setVisible(false); + menu.findItem(R.id.action_sort).setVisible(false); + menu.findItem(R.id.action_filter).setVisible(false); + menu.findItem(R.id.action_settings).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + menu.findItem(R.id.action_help).setVisible(true); + fragmentTorrents.updateConnectionStatus(false); + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + return true; + } + + // There is a connection (read: settings to some server known) + menu.findItem(R.id.action_add).setVisible(true); + menu.findItem(R.id.action_search).setVisible(true); + menu.findItem(R.id.action_rss).setVisible(true); + boolean hasAltMode = Daemon.supportsSetAlternativeMode(currentConnection.getType()); + menu.findItem(R.id.action_enableturtle).setVisible(hasAltMode && !turleModeEnabled); + menu.findItem(R.id.action_disableturtle).setVisible(hasAltMode && turleModeEnabled); + menu.findItem(R.id.action_refresh).setVisible(true); + menu.findItem(R.id.action_sort).setVisible(true); + menu.findItem(R.id.action_filter).setVisible(true); + menu.findItem(R.id.action_settings).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + menu.findItem(R.id.action_help).setVisible(false); + fragmentTorrents.updateConnectionStatus(true); + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + + return true; + } + /** * Called when an item in the action bar navigation spinner was selected */ @@ -211,7 +261,12 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @OptionsItem(R.id.action_refresh) protected void refreshScreen() { refreshTorrents(); - // TODO: Refresh TorentDetails and TorrentFiles as well + // TODO: Retrieve turtle mode status + } + + @OptionsItem(R.id.action_settings) + protected void openSettings() { + MainSettingsActivity_.intent(this).start(); } private void clearScreens() { diff --git a/lite/src/org/transdroid/core/gui/TorrentsFragment.java b/lite/src/org/transdroid/core/gui/TorrentsFragment.java index a62dd8d2..25ef7d28 100644 --- a/lite/src/org/transdroid/core/gui/TorrentsFragment.java +++ b/lite/src/org/transdroid/core/gui/TorrentsFragment.java @@ -1,21 +1,28 @@ package org.transdroid.core.gui; import java.util.ArrayList; +import java.util.List; import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.InstanceState; import org.androidannotations.annotations.ItemClick; import org.androidannotations.annotations.ViewById; import org.transdroid.core.R; import org.transdroid.core.gui.lists.TorrentsAdapter; +import org.transdroid.core.gui.lists.TorrentsAdapter_; import org.transdroid.daemon.Torrent; import android.view.View; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.SherlockListView; +import com.actionbarsherlock.view.SherlockListView.MultiChoiceModeListenerCompat; @EFragment(R.layout.fragment_torrents) public class TorrentsFragment extends SherlockFragment { @@ -23,21 +30,24 @@ public class TorrentsFragment extends SherlockFragment { // Local data @InstanceState protected ArrayList torrents = null; - + // Views @ViewById(R.id.torrent_list) protected SherlockListView torrentsList; @ViewById protected TextView emptyText; - + @ViewById + protected TextView nosettingsText; + @AfterViews protected void init() { - torrentsList.setAdapter(new TorrentsAdapter()); + torrentsList.setAdapter(TorrentsAdapter_.getInstance_(getActivity())); torrentsList.setEmptyView(emptyText); + torrentsList.setMultiChoiceModeListener(onTorrentsSelected); if (torrents != null) updateTorrents(torrents); } - + /** * Updates the list adapter to show a new list of torrent objects, replacing the old torrents completely * @param newTorrents The new, updated list of torrents @@ -49,7 +59,7 @@ public class TorrentsFragment extends SherlockFragment { torrentsList.setVisibility(View.GONE); emptyText.setVisibility(View.GONE); } else { - ((TorrentsAdapter)torrentsList.getAdapter()).update(newTorrents); + ((TorrentsAdapter) torrentsList.getAdapter()).update(newTorrents); // NOTE: This will also make visible again the list or empty view } } @@ -61,9 +71,79 @@ public class TorrentsFragment extends SherlockFragment { updateTorrents(null); } + private MultiChoiceModeListenerCompat onTorrentsSelected = new MultiChoiceModeListenerCompat() { + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + // Show contextual action bar to start/stop/remove/etc. torrents in batch mode + mode.getMenuInflater().inflate(R.menu.fragment_torrents_cab, menu); + return true; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + + // Get checked torrents + List checked = new ArrayList(); + for (int i = 0; i < torrentsList.getCheckedItemPositions().size(); i++) { + if (torrentsList.getCheckedItemPositions().get(i)) + checked.add((Torrent) torrentsList.getAdapter().getItem(i)); + } + + // Execute the requested action + // TODO: Add the other actions + switch (item.getItemId()) { + case R.id.action_start: + startTorrents(checked); + mode.finish(); + return true; + default: + return false; + } + } + + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { + // TODO: Update title or otherwise show number of selected torrents? + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + } + + }; + @ItemClick(R.id.torrent_list) protected void torrentsListClicked(Torrent torrent) { - + DetailsActivity_.intent(getActivity()).torrent(torrent).start(); + } + + /** + * Updates the shown screen depending on whether we have a connection (so torrents can be shown) or not (in case we + * need to show a message suggesting help) + * @param hasAConnection True if the user has servers configured and therefor has a conenction that can be used + */ + public void updateConnectionStatus(boolean hasAConnection) { + if (!hasAConnection) { + clear(); + torrentsList.setVisibility(View.GONE); + emptyText.setVisibility(View.GONE); + nosettingsText.setVisibility(View.VISIBLE); + } else { + nosettingsText.setVisibility(View.GONE); + torrentsList.setVisibility(torrentsList.getAdapter().isEmpty()? View.GONE: View.VISIBLE); + emptyText.setVisibility(torrentsList.getAdapter().isEmpty()? View.VISIBLE: View.GONE); + } } - + + @Background + protected void startTorrents(List torrents) { + // TODO: Implement action + } + } diff --git a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java index adb3b573..11f8e986 100644 --- a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java @@ -1,10 +1,10 @@ package org.transdroid.core.gui.lists; +import java.util.ArrayList; import java.util.List; -import org.androidannotations.annotations.EBean; -import org.androidannotations.annotations.RootContext; import org.transdroid.core.R; +import org.transdroid.core.gui.navigation.FilterSeparatorView; import org.transdroid.core.gui.navigation.FilterSeparatorView_; import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentFile; @@ -20,77 +20,110 @@ import com.commonsware.cwac.merge.MergeAdapter; * List adapter that holds a header view showing torrent details and show the list list contained by the torrent. * @author Eric Kok */ -@EBean public class DetailsAdapter extends MergeAdapter { - @RootContext - protected Context context; private TorrentDetailsView torrentDetailsView = null; - private TorrentFilesAdapter torrentFilesAdapter = null; + private FilterSeparatorView trackersSeparatorView = null; private SimpleListItemAdapter trackersAdapter = null; + private FilterSeparatorView errorsSeparatorView = null; private SimpleListItemAdapter errorsAdapter = null; + private FilterSeparatorView torrentFilesSeparatorView = null; + private TorrentFilesAdapter torrentFilesAdapter = null; + public DetailsAdapter(Context context) { + // Immediately bind the adapters, or the MergeAdapter will not be able to determine the view types and instead + // display nothing at all + + // Torrent details header + torrentDetailsView = TorrentDetailsView_.build(context); + torrentDetailsView.setVisibility(View.GONE); + addView(torrentDetailsView, true); + + // Trackers + trackersSeparatorView = FilterSeparatorView_.build(context).setText(context.getString(R.string.status_trackers)); + trackersSeparatorView.setVisibility(View.GONE); + addView(trackersSeparatorView, true); + this.trackersAdapter = new SimpleListItemAdapter(context, new ArrayList()); + addAdapter(trackersAdapter); + + // Tracker errors + errorsSeparatorView = FilterSeparatorView_.build(context).setText(context.getString(R.string.status_errors)); + errorsSeparatorView.setVisibility(View.GONE); + addView(errorsSeparatorView, true); + this.errorsAdapter = new SimpleListItemAdapter(context, new ArrayList()); + addAdapter(errorsAdapter); + + // Torrent files + torrentFilesSeparatorView = FilterSeparatorView_.build(context).setText(context.getString(R.string.status_files)); + torrentFilesSeparatorView.setVisibility(View.GONE); + addView(torrentFilesSeparatorView, true); + this.torrentFilesAdapter = new TorrentFilesAdapter(context, new ArrayList()); + addAdapter(torrentFilesAdapter); + + } + /** * Update the torrent data in the details header of this merge adapter * @param torrent The torrent for which detailed data is shown */ public void updateTorrent(Torrent torrent) { - if (this.torrentDetailsView == null) { - torrentDetailsView = TorrentDetailsView_.build(context); - addView(torrentDetailsView, false); - } torrentDetailsView.update(torrent); + torrentDetailsView.setVisibility(torrent == null? View.GONE: View.VISIBLE); } /** * Update the list of files contained in this torrent - * @param torrentFiles The new list of files + * @param torrentFiles The new list of files, or null if the list and header should be hidden */ public void updateTorrentFiles(List torrentFiles) { - if (this.torrentFilesAdapter == null && torrentFiles != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_files)), false); - this.torrentFilesAdapter = new TorrentFilesAdapter(context, torrentFiles); - addAdapter(torrentFilesAdapter); - } else if (this.torrentFilesAdapter != null && torrentFiles != null) { - this.torrentFilesAdapter.update(torrentFiles); + if (torrentFiles == null) { + torrentFilesAdapter.update(new ArrayList()); + torrentFilesSeparatorView.setVisibility(View.GONE); } else { - this.torrentFilesAdapter = null; + torrentFilesAdapter.update(torrentFiles); + torrentFilesSeparatorView.setVisibility(View.GONE); } } /** * Update the list of trackers - * @param trackers The new list of trackers known for this torrent + * @param trackers The new list of trackers known for this torrent, or null if the list and header should be hidden */ public void updateTrackers(List trackers) { - if (this.trackersAdapter == null && trackers != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_trackers)), false); - this.trackersAdapter = new SimpleListItemAdapter(context, trackers); - addAdapter(trackersAdapter); - } else if (this.trackersAdapter != null && trackers != null) { - this.trackersAdapter.update(trackers); + if (trackers == null) { + trackersAdapter.update(new ArrayList()); + trackersSeparatorView.setVisibility(View.GONE); } else { - this.trackersAdapter = null; + trackersAdapter.update(trackers); + trackersSeparatorView.setVisibility(View.GONE); } } /** * Update the list of errors - * @param errors The new list of errors known for this torrent + * @param errors The new list of errors known for this torrent, or null if the list and header should be hidden */ public void updateErrors(List errors) { - if (this.errorsAdapter == null && errors != null) { - addView(FilterSeparatorView_.build(context).setText(context.getString(R.string.status_errors)), false); - this.errorsAdapter = new SimpleListItemAdapter(context, errors); - addAdapter(errorsAdapter); - } else if (this.errorsAdapter != null && errors != null) { - this.errorsAdapter.update(errors); + if (errors == null) { + errorsAdapter.update(new ArrayList()); + errorsSeparatorView.setVisibility(View.GONE); } else { - this.errorsAdapter = null; + errorsAdapter.update(errors); + errorsSeparatorView.setVisibility(View.GONE); } } - protected class TorrentFilesAdapter extends BaseAdapter { + /** + * Clear currently visible torrent, including header and shown lists + */ + public void clear() { + updateTorrent(null); + updateTorrentFiles(null); + updateErrors(null); + updateTrackers(null); + } + + protected static class TorrentFilesAdapter extends BaseAdapter { private final Context context; private List items; diff --git a/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java index f44c86f5..43c92426 100644 --- a/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java @@ -69,8 +69,10 @@ public class SimpleListItemAdapter extends BaseAdapter { */ public static List wrapStringsList(List errorStrings) { ArrayList errors = new ArrayList(); - for (String errorString : errorStrings) { - errors.add(new SimpleStringItem(errorString)); + if (errorStrings != null) { + for (String errorString : errorStrings) { + errors.add(new SimpleStringItem(errorString)); + } } return errors; } diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java b/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java index 34123a99..c6347cee 100644 --- a/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentProgressBar.java @@ -18,8 +18,7 @@ import android.view.View; public class TorrentProgressBar extends View { private final float scale = getContext().getResources().getDisplayMetrics().density; - private final int MINIMUM_HEIGHT = (int) (2 * scale + 0.5f); - // private final int RIGHT_MARGIN = (int)(3 * scale + 0.5f); + private final int MINIMUM_HEIGHT = (int) (3 * scale + 0.5f); private int progress; private boolean isActive; @@ -77,7 +76,7 @@ public class TorrentProgressBar extends View { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int ws = MeasureSpec.getSize(widthMeasureSpec);// - RIGHT_MARGIN; + int ws = MeasureSpec.getSize(widthMeasureSpec); int hs = Math.max(getHeight(), MINIMUM_HEIGHT); setMeasuredDimension(ws, hs); } diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentView.java b/lite/src/org/transdroid/core/gui/lists/TorrentView.java index bf8ff662..897a6b0e 100644 --- a/lite/src/org/transdroid/core/gui/lists/TorrentView.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentView.java @@ -27,7 +27,7 @@ public class TorrentView extends CheckableRelativeLayout { protected TorrentProgressBar torrentProgressbar; public TorrentView(Context context) { - super(context, null); + super(context); } public void bind(Torrent torrent) { diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java b/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java index 1ebf2390..eeb17774 100644 --- a/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentsAdapter.java @@ -33,6 +33,11 @@ public class TorrentsAdapter extends BaseAdapter { notifyDataSetChanged(); } + @Override + public boolean hasStableIds() { + return true; + } + @Override public int getCount() { if (torrents == null) diff --git a/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java index dce00a47..0c7b97d1 100644 --- a/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/MainSettingsActivity.java @@ -45,7 +45,7 @@ public class MainSettingsActivity extends SherlockPreferenceActivity { addPreferencesFromResource(R.xml.pref_main); findPreference("header_addserver").setOnPreferenceClickListener(onAddServer); findPreference("header_addwebsearch").setOnPreferenceClickListener(onAddWebsearch); - findPreference("header_rssfeed").setOnPreferenceClickListener(onAddRssfeed); + findPreference("header_addrssfeed").setOnPreferenceClickListener(onAddRssfeed); findPreference("header_background").setOnPreferenceClickListener(onBackgroundSettings); findPreference("header_system").setOnPreferenceClickListener(onSystemSettings); @@ -126,8 +126,7 @@ public class MainSettingsActivity extends SherlockPreferenceActivity { private OnPreferenceClickListener onBackgroundSettings = new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - OtherSettingsActivity_.intent(MainSettingsActivity.this).preferencesResourceID(R.xml.pref_notifications) - .start(); + NotificationSettingsActivity_.intent(MainSettingsActivity.this).start(); return true; } }; @@ -135,7 +134,7 @@ public class MainSettingsActivity extends SherlockPreferenceActivity { private OnPreferenceClickListener onSystemSettings = new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - OtherSettingsActivity_.intent(MainSettingsActivity.this).preferencesResourceID(R.xml.pref_about).start(); + SystemSettingsActivity_.intent(MainSettingsActivity.this).start(); return true; } }; diff --git a/lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/NotificationSettingsActivity.java similarity index 63% rename from lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java rename to lite/src/org/transdroid/core/gui/settings/NotificationSettingsActivity.java index fdd62df7..29f9bdec 100644 --- a/lite/src/org/transdroid/core/gui/settings/OtherSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/NotificationSettingsActivity.java @@ -2,7 +2,7 @@ package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.Extra; +import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; import android.os.Bundle; @@ -10,11 +10,8 @@ import android.os.Bundle; import com.actionbarsherlock.app.SherlockPreferenceActivity; @EActivity -public class OtherSettingsActivity extends SherlockPreferenceActivity { +public class NotificationSettingsActivity extends SherlockPreferenceActivity { - @Extra - protected int preferencesResourceID; - @Bean protected ApplicationSettings applicationSettings; @@ -23,8 +20,8 @@ public class OtherSettingsActivity extends SherlockPreferenceActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // Just load the preferences from XML, of which the ID is supplied as extra - addPreferencesFromResource(preferencesResourceID); + // Just load the notification-related preferences from XML + addPreferencesFromResource(R.xml.pref_notifications); } diff --git a/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java index e0e8e44c..b32b9e91 100644 --- a/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/RssfeedSettingsActivity.java @@ -3,6 +3,7 @@ package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; +import org.androidannotations.annotations.OptionsMenu; import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; @@ -16,6 +17,7 @@ import com.actionbarsherlock.app.SherlockPreferenceActivity; * @author Eric Kok */ @EActivity +@OptionsMenu(R.menu.activity_deleteableprefs) public class RssfeedSettingsActivity extends SherlockPreferenceActivity { @Extra diff --git a/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java index 6398d547..98551451 100644 --- a/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/ServerSettingsActivity.java @@ -3,6 +3,7 @@ package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; +import org.androidannotations.annotations.OptionsMenu; import org.transdroid.daemon.Daemon; import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; @@ -21,6 +22,7 @@ import com.actionbarsherlock.app.SherlockPreferenceActivity; * @author Eric Kok */ @EActivity +@OptionsMenu(R.menu.activity_deleteableprefs) public class ServerSettingsActivity extends SherlockPreferenceActivity { @Extra @@ -53,15 +55,17 @@ public class ServerSettingsActivity extends SherlockPreferenceActivity { findPreference("server_localnetwork").setKey("server_localnetwork_" + key); findPreference("server_folder").setKey("server_folder_" + key); findPreference("server_timeout").setKey("server_timeout_" + key); - findPreference("server_alamrfinished").setKey("server_alamrfinished_" + key); - findPreference("server_alarnew").setKey("server_alarnew_" + key); + findPreference("server_alarmfinished").setKey("server_alarmfinished_" + key); + findPreference("server_alarmnew").setKey("server_alarmnew_" + key); findPreference("server_os").setKey("server_os_" + key); findPreference("server_downloaddir").setKey("server_downloaddir_" + key); findPreference("server_ftpurl").setKey("server_ftpurl_" + key); findPreference("server_ftppass").setKey("server_ftppass_" + key); findPreference("server_sslenabled").setKey("server_sslenabled_" + key); findPreference("server_ssltrustall").setKey("server_ssltrustall_" + key); + findPreference("server_ssltrustall_" + key).setDependency("server_sslenabled_" + key); findPreference("server_ssltrustkey").setKey("server_ssltrustkey_" + key); + findPreference("server_ssltrustkey_" + key).setDependency("server_sslenabled_" + key); // Monitor preference changes getPreferenceScreen().setOnPreferenceChangeListener(onPreferenceChangeListener); @@ -70,6 +74,7 @@ public class ServerSettingsActivity extends SherlockPreferenceActivity { private OnPreferenceChangeListener onPreferenceChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { + // TODO: This doesn't get called updatePreferenceAvailability(); return true; } diff --git a/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java new file mode 100644 index 00000000..20a9d611 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java @@ -0,0 +1,71 @@ +package org.transdroid.core.gui.settings; + +import org.androidannotations.annotations.Bean; +import org.androidannotations.annotations.EActivity; +import org.transdroid.core.R; +import org.transdroid.core.app.settings.ApplicationSettings; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; + +import com.actionbarsherlock.app.SherlockPreferenceActivity; + +@EActivity +public class SystemSettingsActivity extends SherlockPreferenceActivity { + + protected static final String INSTALLHELP_URI = "http://www.transdroid.org/download/"; + + @Bean + protected ApplicationSettings applicationSettings; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Just load the system-related preferences from XML + addPreferencesFromResource(R.xml.pref_notifications); + + // Handle outgoing links + findPreference("system_sendlog").setOnPreferenceClickListener(onSendLogClick); + findPreference("system_installhelp").setOnPreferenceClickListener(onInstallHelpClick); + findPreference("system_changelog").setOnPreferenceClickListener(onChangeLogClick); + findPreference("system_about").setOnPreferenceClickListener(onAboutClick); + } + + private OnPreferenceClickListener onSendLogClick = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + // TODO: Implement error log collection and sending + return true; + } + }; + + private OnPreferenceClickListener onInstallHelpClick = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(INSTALLHELP_URI))); + return true; + } + }; + + private OnPreferenceClickListener onChangeLogClick = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + // TODO: Implement about change log screen + return true; + } + }; + + private OnPreferenceClickListener onAboutClick = new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + // TODO: Implement about screen with app version, developer name and used open source libraries + return true; + } + }; + +} diff --git a/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java index 53194bcc..ae2e6fe9 100644 --- a/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/WebsearchSettingsActivity.java @@ -3,6 +3,7 @@ package org.transdroid.core.gui.settings; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; +import org.androidannotations.annotations.OptionsMenu; import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; @@ -16,6 +17,7 @@ import com.actionbarsherlock.app.SherlockPreferenceActivity; * @author Eric Kok */ @EActivity +@OptionsMenu(R.menu.activity_deleteableprefs) public class WebsearchSettingsActivity extends SherlockPreferenceActivity { @Extra From ee824238d05197df50e4befd95b7b8be96573415 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Fri, 8 Mar 2013 18:56:39 +0100 Subject: [PATCH 08/10] Fixing the details fragment to show and with a proper layout of headers.\nStarting task execution. --- lite/res/layout/list_item_filter.xml | 4 +- lite/res/layout/list_item_separator.xml | 2 + lite/res/menu/fragment_details.xml | 2 +- lite/res/values/strings.xml | 14 ++++ lite/res/xml/pref_system.xml | 3 +- .../transdroid/core/gui/DetailsFragment.java | 42 ++++++++++ .../transdroid/core/gui/TorrentsActivity.java | 84 ++++++++++++++++++- .../transdroid/core/gui/TorrentsFragment.java | 7 ++ .../core/gui/lists/DetailsAdapter.java | 15 +++- .../core/gui/lists/TorrentDetailsView.java | 12 +++ .../gui/navigation/FilterSeparatorView.java | 7 +- .../gui/settings/SystemSettingsActivity.java | 2 +- 12 files changed, 178 insertions(+), 16 deletions(-) diff --git a/lite/res/layout/list_item_filter.xml b/lite/res/layout/list_item_filter.xml index 5dff7d2f..66f6ae72 100644 --- a/lite/res/layout/list_item_filter.xml +++ b/lite/res/layout/list_item_filter.xml @@ -2,8 +2,8 @@ diff --git a/lite/res/layout/list_item_separator.xml b/lite/res/layout/list_item_separator.xml index 8a48e729..65389da3 100644 --- a/lite/res/layout/list_item_separator.xml +++ b/lite/res/layout/list_item_separator.xml @@ -2,6 +2,8 @@ \ No newline at end of file diff --git a/lite/res/values/strings.xml b/lite/res/values/strings.xml index ccd9f810..43c447a3 100644 --- a/lite/res/values/strings.xml +++ b/lite/res/values/strings.xml @@ -84,6 +84,20 @@ New label Setting a label is not supported by your client + Torrent added (refreshing) + %1$s removed + %1$s removed and data deleted + %1$s resumed (refreshing) + %1$s stopped + %1$s started (refreshing) + %1$s paused + Torrents paused + Torrents resumed (refreshing) + Torrents stopped + Torrents started (refreshing) + Trackers updated + Torrent moved to \'%1$s\' + Torrent search Search for torrents diff --git a/lite/res/xml/pref_system.xml b/lite/res/xml/pref_system.xml index b186a063..8968dc62 100644 --- a/lite/res/xml/pref_system.xml +++ b/lite/res/xml/pref_system.xml @@ -10,8 +10,7 @@ - + android:summary="@string/pref_sendlog_info" /> torrents) { + // TODO Auto-generated method stub + + } + + @Override + public void pauseTorrents(List torrents) { + // TODO Auto-generated method stub + + } + + @Override + public void removeTorrents(List torrents, boolean withData) { + // TODO Auto-generated method stub + + } + + @Override + public void setLabels(List torrents) { + // TODO Auto-generated method stub + + } + } diff --git a/lite/src/org/transdroid/core/gui/TorrentsFragment.java b/lite/src/org/transdroid/core/gui/TorrentsFragment.java index 25ef7d28..afaba547 100644 --- a/lite/src/org/transdroid/core/gui/TorrentsFragment.java +++ b/lite/src/org/transdroid/core/gui/TorrentsFragment.java @@ -146,4 +146,11 @@ public class TorrentsFragment extends SherlockFragment { // TODO: Implement action } + public interface TorrentsTasksExecutor { + void resumeTorrents(List torrents); + void pauseTorrents(List torrents); + void removeTorrents(List torrents, boolean withData); + void setLabels(List torrents); + } + } diff --git a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java index 11f8e986..ba60ee43 100644 --- a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java @@ -81,7 +81,7 @@ public class DetailsAdapter extends MergeAdapter { torrentFilesSeparatorView.setVisibility(View.GONE); } else { torrentFilesAdapter.update(torrentFiles); - torrentFilesSeparatorView.setVisibility(View.GONE); + torrentFilesSeparatorView.setVisibility(View.VISIBLE); } } @@ -95,7 +95,7 @@ public class DetailsAdapter extends MergeAdapter { trackersSeparatorView.setVisibility(View.GONE); } else { trackersAdapter.update(trackers); - trackersSeparatorView.setVisibility(View.GONE); + trackersSeparatorView.setVisibility(View.VISIBLE); } } @@ -109,10 +109,19 @@ public class DetailsAdapter extends MergeAdapter { errorsSeparatorView.setVisibility(View.GONE); } else { errorsAdapter.update(errors); - errorsSeparatorView.setVisibility(View.GONE); + errorsSeparatorView.setVisibility(View.VISIBLE); } } + /** + * The details adapter is empty if it is not showing any torrent (regardless of errors, trackers and files) + */ + @Override + public boolean isEmpty() { + //return torrentDetailsView.isBound(); + return false; + } + /** * Clear currently visible torrent, including header and shown lists */ diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java index c2975105..2245e4b7 100644 --- a/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java @@ -21,6 +21,8 @@ import android.widget.TextView; @EViewGroup(R.layout.fragment_details_header) public class TorrentDetailsView extends RelativeLayout { + private boolean isShowingData = false; + @ViewById protected TextView labelText, dateaddedText, uploadedText, uploadedunitText, ratioText, upspeedText, seedersText, downloadedunitText, downloadedText, totalsizeText, downspeedText, leechersText, statusText; @@ -35,6 +37,12 @@ public class TorrentDetailsView extends RelativeLayout { */ public void update(Torrent torrent) { + if (torrent == null) { + isShowingData = false; + return; + } + + isShowingData = true; LocalTorrent local = LocalTorrent.fromTorrent(torrent); // Set label text @@ -82,4 +90,8 @@ public class TorrentDetailsView extends RelativeLayout { } + public boolean isBound() { + return isShowingData ; + } + } diff --git a/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java b/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java index 9ea2a411..a26516dc 100644 --- a/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java +++ b/lite/src/org/transdroid/core/gui/navigation/FilterSeparatorView.java @@ -3,7 +3,6 @@ package org.transdroid.core.gui.navigation; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; import org.transdroid.core.R; -import org.transdroid.core.gui.lists.SimpleListItem; import android.content.Context; import android.widget.LinearLayout; @@ -26,17 +25,13 @@ public class FilterSeparatorView extends LinearLayout { super(context); } - public void bind(SimpleListItem filterItem) { - separatorText.setText(text); - } - /** * Sets the text that will be shown in this separator (sub header) * @param text The new text to show * @return Itself, for convenience of method chaining */ public FilterSeparatorView setText(String text) { - this.text = text; + separatorText.setText(text); return this; } diff --git a/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java b/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java index 20a9d611..7f697f93 100644 --- a/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java +++ b/lite/src/org/transdroid/core/gui/settings/SystemSettingsActivity.java @@ -27,7 +27,7 @@ public class SystemSettingsActivity extends SherlockPreferenceActivity { super.onCreate(savedInstanceState); // Just load the system-related preferences from XML - addPreferencesFromResource(R.xml.pref_notifications); + addPreferencesFromResource(R.xml.pref_system); // Handle outgoing links findPreference("system_sendlog").setOnPreferenceClickListener(onSendLogClick); From d46bf03eebd8553efe0dde98702d3481c2b2d461 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Thu, 14 Mar 2013 17:34:19 +0100 Subject: [PATCH 09/10] Working on task execution and navigation list. --- android/res/values/changelog.xml | 10 + lite/res/drawable/loading_progress.xml | 5 + lite/res/layout/fragment_details.xml | 2 +- lite/res/layout/fragment_torrents.xml | 7 + lite/res/layout/list_item_navigation.xml | 22 ++ lite/res/menu/fragment_details.xml | 11 +- lite/res/values/strings.xml | 10 +- .../transdroid/core/gui/DetailsActivity.java | 143 ++++++++++-- .../transdroid/core/gui/DetailsFragment.java | 74 ++++-- .../core/gui/TorrentTasksExecutor.java | 16 ++ .../transdroid/core/gui/TorrentsActivity.java | 211 ++++++++++++------ .../transdroid/core/gui/TorrentsFragment.java | 109 ++++++--- .../core/gui/lists/DetailsAdapter.java | 9 - .../core/gui/lists/SimpleListItem.java | 1 + .../core/gui/lists/SimpleListItemAdapter.java | 2 +- .../core/gui/lists/TorrentDetailsView.java | 10 +- .../gui/navigation/FilterListAdapter.java | 30 ++- .../transdroid/core/gui/navigation/Label.java | 35 ++- .../core/gui/navigation/NavigationFilter.java | 27 +++ .../navigation/NavigationSelectionView.java | 52 +++++ .../core/gui/navigation/StatusType.java | 77 ++++++- 21 files changed, 702 insertions(+), 161 deletions(-) create mode 100644 lite/res/drawable/loading_progress.xml create mode 100644 lite/res/layout/list_item_navigation.xml create mode 100644 lite/src/org/transdroid/core/gui/TorrentTasksExecutor.java create mode 100644 lite/src/org/transdroid/core/gui/navigation/NavigationFilter.java create mode 100644 lite/src/org/transdroid/core/gui/navigation/NavigationSelectionView.java diff --git a/android/res/values/changelog.xml b/android/res/values/changelog.xml index 923175ba..49e661a5 100644 --- a/android/res/values/changelog.xml +++ b/android/res/values/changelog.xml @@ -1,6 +1,16 @@ +Transdroid 1.1.12\n +- Option to disable app update checking\n +- Transmission: support non-Western characters in directories\n +- Deluge: don\'t treat trackers errors as blocking\n +- Added Pirate Bay mirror search support\n +\n +Transdroid 1.1.11\n +- rTorrent: fix crash with creationtime and non-i8 dialect\n +- Fixed picking up local .torrent files\n +\n Transdroid 1.1.10\n - Updated translations (thanks to all translators)\n - Special thanks Tom Briden for the following contributions:\n diff --git a/lite/res/drawable/loading_progress.xml b/lite/res/drawable/loading_progress.xml new file mode 100644 index 00000000..df2175ef --- /dev/null +++ b/lite/res/drawable/loading_progress.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/lite/res/layout/fragment_details.xml b/lite/res/layout/fragment_details.xml index 6c17e9e2..d627b53b 100644 --- a/lite/res/layout/fragment_details.xml +++ b/lite/res/layout/fragment_details.xml @@ -23,6 +23,6 @@ android:text="@string/navigation_emptydetails" android:gravity="center" android:textIsSelectable="false" - android:visibility="gone" /> + android:visibility="visible" /> \ No newline at end of file diff --git a/lite/res/layout/fragment_torrents.xml b/lite/res/layout/fragment_torrents.xml index 634058ed..869766dc 100644 --- a/lite/res/layout/fragment_torrents.xml +++ b/lite/res/layout/fragment_torrents.xml @@ -11,6 +11,13 @@ android:listSelector="@drawable/selectable_background_transdroid" android:visibility="gone" /> + + + + + + + + + \ No newline at end of file diff --git a/lite/res/menu/fragment_details.xml b/lite/res/menu/fragment_details.xml index aea9239e..5b32d61d 100644 --- a/lite/res/menu/fragment_details.xml +++ b/lite/res/menu/fragment_details.xml @@ -13,12 +13,17 @@ + android:showAsAction="ifRoom" + android:title="@string/action_start"> + + + + + Settings Help Start + Normal start + Force start Stop Resume Pause @@ -39,6 +41,9 @@ Download using (S)FTP Remove settings + Transdroid allows you to monitor and manage the torrent client you run at home or on your seedbox. Setting things up can be a bit tricky, but we offer step-by-step guides and promise it\'ll be worth it! + Connected, but no torrent are active within the current filter + Select a torrent to view its details SERVERS STATUS LABELS @@ -47,10 +52,8 @@ Uploading Active Inactive - Connected, but no torrent are active within the current filter - Select a torrent to view its details - Transdroid allows you to monitor and manage the torrent client you run at home or on your seedbox. Setting things up can be a bit tricky, but we offer step-by-step guides and promise it\'ll be worth it! + Status: %1%s Waiting to check… Verifying local data… Waiting to download %s @@ -96,6 +99,7 @@ Torrents stopped Torrents started (refreshing) Trackers updated + Label set to \'%1$s\' Torrent moved to \'%1$s\' Torrent search diff --git a/lite/src/org/transdroid/core/gui/DetailsActivity.java b/lite/src/org/transdroid/core/gui/DetailsActivity.java index 68076526..0f597715 100644 --- a/lite/src/org/transdroid/core/gui/DetailsActivity.java +++ b/lite/src/org/transdroid/core/gui/DetailsActivity.java @@ -24,12 +24,21 @@ import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentFile; import org.transdroid.daemon.task.DaemonTaskFailureResult; import org.transdroid.daemon.task.DaemonTaskResult; +import org.transdroid.daemon.task.DaemonTaskSuccessResult; import org.transdroid.daemon.task.GetFileListTask; import org.transdroid.daemon.task.GetFileListTaskSuccessResult; import org.transdroid.daemon.task.GetTorrentDetailsTask; import org.transdroid.daemon.task.GetTorrentDetailsTaskSuccessResult; +import org.transdroid.daemon.task.PauseTask; +import org.transdroid.daemon.task.RemoveTask; +import org.transdroid.daemon.task.ResumeTask; import org.transdroid.daemon.task.RetrieveTask; import org.transdroid.daemon.task.RetrieveTaskSuccessResult; +import org.transdroid.daemon.task.SetDownloadLocationTask; +import org.transdroid.daemon.task.SetLabelTask; +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; @@ -40,7 +49,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity; @EActivity(R.layout.activity_details) @OptionsMenu(R.menu.activity_details) -public class DetailsActivity extends SherlockFragmentActivity { +public class DetailsActivity extends SherlockFragmentActivity implements TorrentTasksExecutor { @Extra @InstanceState @@ -102,12 +111,6 @@ public class DetailsActivity extends SherlockFragmentActivity { } } - @UiThread - protected void onTorrentsRetrieved(List torrents, List labels) { - // Update the details fragment - fragmentDetails.perhapsUpdateTorrent(torrents); - } - @Background protected void refreshTorrentDetails() { if (!Daemon.supportsFineDetails(torrent.getDaemon())) @@ -120,12 +123,6 @@ public class DetailsActivity extends SherlockFragmentActivity { } } - @UiThread - protected void onTorrentDetailsRetrieved(TorrentDetails torrentDetails) { - // Update the details fragment with the new fine details for the shown torrent - fragmentDetails.updateTorrentDetails(torrentDetails); - } - @Background protected void refreshTorrentFiles() { if (!Daemon.supportsFileListing(torrent.getDaemon())) @@ -138,12 +135,106 @@ public class DetailsActivity extends SherlockFragmentActivity { } } + @Background + @Override + public void resumeTorrent(Torrent torrent) { + torrent.mimicResume(); + DaemonTaskResult result = ResumeTask.create(currentConnection, torrent).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_resumed); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void pauseTorrent(Torrent torrent) { + torrent.mimicPause(); + DaemonTaskResult result = PauseTask.create(currentConnection, torrent).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_paused); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void startTorrent(Torrent torrent, boolean forced) { + torrent.mimicStart(); + DaemonTaskResult result = StartTask.create(currentConnection, torrent, forced).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_started); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void stopTorrent(Torrent torrent) { + torrent.mimicStop(); + DaemonTaskResult result = StopTask.create(currentConnection, torrent).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_stopped); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void removeTorrent(Torrent torrent, boolean withData) { + DaemonTaskResult result = RemoveTask.create(currentConnection, torrent, withData).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, withData ? R.string.result_removed_with_data + : R.string.result_removed); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void updateLabel(Torrent torrent, String newLabel) { + torrent.mimicNewLabel(newLabel); + DaemonTaskResult result = SetLabelTask.create(currentConnection, torrent, newLabel).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_labelset, newLabel); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void updateTrackers(Torrent torrent, List newTrackers) { + DaemonTaskResult result = SetTrackersTask.create(currentConnection, torrent, newTrackers).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_trackersupdated); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + + @Background + @Override + public void updateLocation(Torrent torrent, String newLocation) { + DaemonTaskResult result = SetDownloadLocationTask.create(currentConnection, torrent, newLocation).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_locationset, newLocation); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } + } + @UiThread - protected void onTorrentFilesRetrieved(List torrentFiles) { - // Update the details fragment with the newly retrieved list of files - fragmentDetails.updateTorrentFiles(new ArrayList(torrentFiles)); + protected void onTaskSucceeded(DaemonTaskSuccessResult result, int successMessageId, String... messageParams) { + // TODO: Properly report this success + Toast.makeText(this, getString(successMessageId, (Object[]) messageParams), Toast.LENGTH_LONG).show(); } - + @UiThread protected void onCommunicationError(DaemonTaskFailureResult result) { // TODO: Properly report this error @@ -151,4 +242,22 @@ public class DetailsActivity extends SherlockFragmentActivity { Toast.LENGTH_LONG).show(); } + @UiThread + protected void onTorrentsRetrieved(List torrents, List labels) { + // Update the details fragment + fragmentDetails.perhapsUpdateTorrent(torrents); + } + + @UiThread + protected void onTorrentDetailsRetrieved(TorrentDetails torrentDetails) { + // Update the details fragment with the new fine details for the shown torrent + fragmentDetails.updateTorrentDetails(torrentDetails); + } + + @UiThread + protected void onTorrentFilesRetrieved(List torrentFiles) { + // Update the details fragment with the newly retrieved list of files + fragmentDetails.updateTorrentFiles(new ArrayList(torrentFiles)); + } + } diff --git a/lite/src/org/transdroid/core/gui/DetailsFragment.java b/lite/src/org/transdroid/core/gui/DetailsFragment.java index bb4738a4..685a5527 100644 --- a/lite/src/org/transdroid/core/gui/DetailsFragment.java +++ b/lite/src/org/transdroid/core/gui/DetailsFragment.java @@ -17,6 +17,7 @@ import org.transdroid.daemon.Torrent; import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentFile; +import android.view.View; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; @@ -50,7 +51,6 @@ public class DetailsFragment extends SherlockFragment { protected void init() { detailsList.setAdapter(new DetailsAdapter(getActivity())); - detailsList.setEmptyView(emptyText); if (torrent != null) updateTorrent(torrent); if (torrentDetails != null) @@ -68,6 +68,9 @@ public class DetailsFragment extends SherlockFragment { clear(); this.torrent = newTorrent; ((DetailsAdapter) detailsList.getAdapter()).updateTorrent(newTorrent); + // Make the list (with detials header) visible + detailsList.setVisibility(View.VISIBLE); + emptyText.setVisibility(View.INVISIBLE); // Also update the available actions in the action bar getActivity().supportInvalidateOptionsMenu(); } @@ -112,7 +115,9 @@ public class DetailsFragment extends SherlockFragment { * Clear the screen by fully clearing the internal merge list (with header and other lists) */ public void clear() { - ((DetailsAdapter)detailsList.getAdapter()).clear(); + detailsList.setAdapter(new DetailsAdapter(getActivity())); + detailsList.setVisibility(View.INVISIBLE); + emptyText.setVisibility(View.VISIBLE); torrent = null; torrentDetails = null; torrentFiles = null; @@ -136,20 +141,59 @@ public class DetailsFragment extends SherlockFragment { menu.findItem(R.id.action_updatetrackers).setVisible(setTrackers); } - - @OptionsItem(R.id.action_start) - protected void startTorrent() { - + + @OptionsItem(R.id.action_resume) + protected void resumeTorrent() { + getTasksExecutor().resumeTorrent(torrent); } - - public interface DetailsTasksExecutor { - void resumeTorrent(Torrent torrent); - void pauseTorrent(Torrent torrent); - void startTorrent(Torrent torrent); - void stopTorrent(Torrent torrent); - void removeTorrent(Torrent torrent, boolean withData); - void setLabel(Torrent torrent); - void updateTrackers(Torrent torrent); + + @OptionsItem(R.id.action_pause) + protected void pauseTorrent() { + getTasksExecutor().pauseTorrent(torrent); + } + + @OptionsItem(R.id.action_start_default) + protected void startTorrentDefault() { + getTasksExecutor().startTorrent(torrent, false); + } + + @OptionsItem(R.id.action_start_forced) + protected void startTorrentForced() { + getTasksExecutor().startTorrent(torrent, true); + } + + @OptionsItem(R.id.action_stop) + protected void stopTorrent() { + getTasksExecutor().stopTorrent(torrent); + } + + @OptionsItem(R.id.action_remove_default) + protected void removeTorrentDefault() { + getTasksExecutor().removeTorrent(torrent, false); + } + + @OptionsItem(R.id.action_remove_withdata) + protected void removeTorrentWithData() { + getTasksExecutor().removeTorrent(torrent, true); + } + + @OptionsItem(R.id.action_setlabel) + protected void setLabel() { + // TODO: Show label selection dialog + } + + @OptionsItem(R.id.action_updatetrackers) + protected void updateTrackers() { + // TODO: Show trackers edit dialog + } + + /** + * Returns the object responsible for executing torrent tasks against a connected server + * @return The executor for tasks on some torrent + */ + private TorrentTasksExecutor getTasksExecutor() { + // NOTE: Assumes the activity implements all the required torrent tasks + return (TorrentTasksExecutor) getActivity(); } } diff --git a/lite/src/org/transdroid/core/gui/TorrentTasksExecutor.java b/lite/src/org/transdroid/core/gui/TorrentTasksExecutor.java new file mode 100644 index 00000000..c8bc7e55 --- /dev/null +++ b/lite/src/org/transdroid/core/gui/TorrentTasksExecutor.java @@ -0,0 +1,16 @@ +package org.transdroid.core.gui; + +import java.util.List; + +import org.transdroid.daemon.Torrent; + +public interface TorrentTasksExecutor { + void resumeTorrent(Torrent torrent); + void pauseTorrent(Torrent torrent); + void startTorrent(Torrent torrent, boolean forced); + void stopTorrent(Torrent torrent); + void removeTorrent(Torrent torrent, boolean withData); + void updateLabel(Torrent torrent, String newLabel); + void updateTrackers(Torrent torrent, List newTrackers); + void updateLocation(Torrent torrent, String newLocation); +} \ No newline at end of file diff --git a/lite/src/org/transdroid/core/gui/TorrentsActivity.java b/lite/src/org/transdroid/core/gui/TorrentsActivity.java index d8cc073c..0493cc99 100644 --- a/lite/src/org/transdroid/core/gui/TorrentsActivity.java +++ b/lite/src/org/transdroid/core/gui/TorrentsActivity.java @@ -17,16 +17,14 @@ import org.androidannotations.annotations.ViewById; import org.transdroid.core.R; import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ServerSetting; -import org.transdroid.core.gui.DetailsFragment.DetailsTasksExecutor; -import org.transdroid.core.gui.TorrentsFragment.TorrentsTasksExecutor; import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.SimpleListItem; import org.transdroid.core.gui.navigation.FilterListAdapter; import org.transdroid.core.gui.navigation.FilterListAdapter_; -import org.transdroid.core.gui.navigation.Label; +import org.transdroid.core.gui.navigation.NavigationFilter; import org.transdroid.core.gui.navigation.NavigationHelper; +import org.transdroid.core.gui.navigation.NavigationSelectionView.NavigationFilterManager; import org.transdroid.core.gui.navigation.StatusType; -import org.transdroid.core.gui.navigation.StatusType.StatusTypeFilter; import org.transdroid.core.gui.settings.MainSettingsActivity_; import org.transdroid.daemon.Daemon; import org.transdroid.daemon.IDaemonAdapter; @@ -34,9 +32,19 @@ import org.transdroid.daemon.Torrent; import org.transdroid.daemon.task.DaemonTaskFailureResult; import org.transdroid.daemon.task.DaemonTaskResult; import org.transdroid.daemon.task.DaemonTaskSuccessResult; +import org.transdroid.daemon.task.GetStatsTask; +import org.transdroid.daemon.task.GetStatsTaskSuccessResult; +import org.transdroid.daemon.task.PauseTask; +import org.transdroid.daemon.task.RemoveTask; import org.transdroid.daemon.task.ResumeTask; import org.transdroid.daemon.task.RetrieveTask; import org.transdroid.daemon.task.RetrieveTaskSuccessResult; +import org.transdroid.daemon.task.SetAlternativeModeTask; +import org.transdroid.daemon.task.SetDownloadLocationTask; +import org.transdroid.daemon.task.SetLabelTask; +import org.transdroid.daemon.task.SetTrackersTask; +import org.transdroid.daemon.task.StartTask; +import org.transdroid.daemon.task.StopTask; import android.annotation.TargetApi; import android.app.SearchManager; @@ -56,7 +64,7 @@ import com.actionbarsherlock.widget.SearchView; @EActivity(R.layout.activity_torrents) @OptionsMenu(R.menu.activity_torrents) -public class TorrentsActivity extends SherlockFragmentActivity implements OnNavigationListener, DetailsTasksExecutor, TorrentsTasksExecutor { +public class TorrentsActivity extends SherlockFragmentActivity implements OnNavigationListener, TorrentTasksExecutor, NavigationFilterManager { // Navigation components @Bean @@ -75,6 +83,8 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi boolean firstStart = true; private IDaemonAdapter currentConnection = null; @InstanceState + protected NavigationFilter currentFilter = null; + @InstanceState protected boolean turleModeEnabled = false; // Torrents list components @@ -91,7 +101,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi // Set up navigation, with an action bar spinner and possibly (if room) with a filter list getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setHomeButtonEnabled(false); - navigationSpinnerAdapter = FilterListAdapter_.getInstance_(this); + navigationSpinnerAdapter = FilterListAdapter_.getInstance_(this).setNavigationFilterManager(this); // Servers are always added to the action bar spinner navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); getSupportActionBar().setListNavigationCallbacks(navigationSpinnerAdapter, this); @@ -240,21 +250,35 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi // Update connection to the newly selected server and refresh currentConnection = server.createServerAdapter(); + applicationSettings.setLastUsedServer(server); clearScreens(); refreshTorrents(); + return; } - if (item instanceof StatusTypeFilter) { - // TODO: Update the torrent list view - } - - if (item instanceof Label) { - // TODO: Update the torrent list view + // Status type or label selection - both of which are navigation filters + if (item instanceof NavigationFilter) { + currentFilter = (NavigationFilter) item; + fragmentTorrents.applyFilter(currentFilter); + // Clear the details view + if (fragmentDetails != null) { + fragmentDetails.clear(); + } } } + @Override + public String getActiveFilterText() { + return currentFilter.getName(); + } + + @Override + public String getActiveServerText() { + return currentConnection.getSettings().getName(); + } + /** * If required, add torrents, switch to a specific server, etc. */ @@ -265,7 +289,17 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @OptionsItem(R.id.action_refresh) protected void refreshScreen() { refreshTorrents(); - // TODO: Retrieve turtle mode status + getAdditionalStats(); + } + + @OptionsItem(R.id.action_enableturtle) + protected void enableTurtleMode() { + updateTurtleMode(true); + } + + @OptionsItem(R.id.action_disableturtle) + protected void disableTurtleMode() { + updateTurtleMode(false); } @OptionsItem(R.id.action_settings) @@ -291,28 +325,25 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi } } - @UiThread - protected void onTorrentsRetrieved(List torrents, List labels) { - // Report the newly retrieved list of torrents to the torrents fragment - fragmentTorrents.updateTorrents(new ArrayList(torrents)); - // Update the details fragment if the currently shown torrent is in the newly retrieved list - if (fragmentDetails != null) { - fragmentDetails.perhapsUpdateTorrent(torrents); + @Background + protected void getAdditionalStats() { + DaemonTaskResult result = GetStatsTask.create(currentConnection).execute(); + if (result instanceof GetStatsTaskSuccessResult) { + onTurtleModeRetrieved(((GetStatsTaskSuccessResult) result).isAlternativeModeEnabled()); + } else { + onCommunicationError((DaemonTaskFailureResult)result); } - // TODO: Update local list of labels - } - - @UiThread - protected void onTaskSucceeded(DaemonTaskSuccessResult result, int successMessageId, Torrent target) { - // TODO: Properly report this success - Toast.makeText(this, getString(successMessageId, target.getName()),Toast.LENGTH_LONG).show(); } - - @UiThread - protected void onCommunicationError(DaemonTaskFailureResult result) { - // TODO: Properly report this error - Toast.makeText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), - Toast.LENGTH_LONG).show(); + + @Background + protected void updateTurtleMode(boolean enable) { + DaemonTaskResult result = SetAlternativeModeTask.create(currentConnection, enable).execute(); + if (result instanceof GetStatsTaskSuccessResult) { + // Success; no need to retrieve it again - just update the visual indicator + onTurtleModeRetrieved(enable); + } else { + onCommunicationError((DaemonTaskFailureResult)result); + } } @Background @@ -321,70 +352,122 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi torrent.mimicResume(); DaemonTaskResult result = ResumeTask.create(currentConnection, torrent).execute(); if (result instanceof DaemonTaskResult) { - onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_resumed, torrent); + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_resumed); } else { onCommunicationError((DaemonTaskFailureResult) result); } } + @Background @Override public void pauseTorrent(Torrent torrent) { - // TODO Auto-generated method stub - + torrent.mimicPause(); + DaemonTaskResult result = PauseTask.create(currentConnection, torrent).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_paused); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override - public void startTorrent(Torrent torrent) { - // TODO Auto-generated method stub - + public void startTorrent(Torrent torrent, boolean forced) { + torrent.mimicStart(); + DaemonTaskResult result = StartTask.create(currentConnection, torrent, forced).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_started); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override public void stopTorrent(Torrent torrent) { - // TODO Auto-generated method stub - + torrent.mimicStop(); + DaemonTaskResult result = StopTask.create(currentConnection, torrent).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_stopped); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override public void removeTorrent(Torrent torrent, boolean withData) { - // TODO Auto-generated method stub - + DaemonTaskResult result = RemoveTask.create(currentConnection, torrent, withData).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, withData ? R.string.result_removed_with_data + : R.string.result_removed); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override - public void setLabel(Torrent torrent) { - // TODO Auto-generated method stub - + public void updateLabel(Torrent torrent, String newLabel) { + torrent.mimicNewLabel(newLabel); + DaemonTaskResult result = SetLabelTask.create(currentConnection, torrent, newLabel).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_labelset, newLabel); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override - public void updateTrackers(Torrent torrent) { - // TODO Auto-generated method stub - + public void updateTrackers(Torrent torrent, List newTrackers) { + DaemonTaskResult result = SetTrackersTask.create(currentConnection, torrent, newTrackers).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_trackersupdated); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } + @Background @Override - public void resumeTorrents(List torrents) { - // TODO Auto-generated method stub - + public void updateLocation(Torrent torrent, String newLocation) { + DaemonTaskResult result = SetDownloadLocationTask.create(currentConnection, torrent, newLocation).execute(); + if (result instanceof DaemonTaskResult) { + onTaskSucceeded((DaemonTaskSuccessResult) result, R.string.result_locationset, newLocation); + } else { + onCommunicationError((DaemonTaskFailureResult) result); + } } - @Override - public void pauseTorrents(List torrents) { - // TODO Auto-generated method stub - + @UiThread + protected void onTaskSucceeded(DaemonTaskSuccessResult result, int successMessageId, String... messageParams) { + // TODO: Properly report this success + Toast.makeText(this, getString(successMessageId, (Object[]) messageParams), Toast.LENGTH_LONG).show(); } - @Override - public void removeTorrents(List torrents, boolean withData) { - // TODO Auto-generated method stub - + @UiThread + protected void onCommunicationError(DaemonTaskFailureResult result) { + // TODO: Properly report this error + Toast.makeText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())), + Toast.LENGTH_LONG).show(); } - @Override - public void setLabels(List torrents) { - // TODO Auto-generated method stub - + @UiThread + protected void onTorrentsRetrieved(List torrents, List labels) { + // Report the newly retrieved list of torrents to the torrents fragment + fragmentTorrents.updateTorrents(new ArrayList(torrents)); + // Update the details fragment if the currently shown torrent is in the newly retrieved list + if (fragmentDetails != null) { + fragmentDetails.perhapsUpdateTorrent(torrents); + } + // TODO: Update local list of labels + } + + @UiThread + protected void onTurtleModeRetrieved(boolean turtleModeEnabled) { + turleModeEnabled = turtleModeEnabled; + supportInvalidateOptionsMenu(); } } diff --git a/lite/src/org/transdroid/core/gui/TorrentsFragment.java b/lite/src/org/transdroid/core/gui/TorrentsFragment.java index afaba547..d0bbeaa1 100644 --- a/lite/src/org/transdroid/core/gui/TorrentsFragment.java +++ b/lite/src/org/transdroid/core/gui/TorrentsFragment.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.InstanceState; import org.androidannotations.annotations.ItemClick; @@ -12,9 +11,12 @@ import org.androidannotations.annotations.ViewById; import org.transdroid.core.R; import org.transdroid.core.gui.lists.TorrentsAdapter; import org.transdroid.core.gui.lists.TorrentsAdapter_; +import org.transdroid.core.gui.navigation.NavigationFilter; +import org.transdroid.core.gui.navigation.StatusType; import org.transdroid.daemon.Torrent; import android.view.View; +import android.widget.ProgressBar; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; @@ -30,6 +32,12 @@ public class TorrentsFragment extends SherlockFragment { // Local data @InstanceState protected ArrayList torrents = null; + @InstanceState + protected NavigationFilter currentFilter = null; + @InstanceState + protected boolean hasAConnection = false; + @InstanceState + protected boolean isLoading = false; // Views @ViewById(R.id.torrent_list) @@ -38,11 +46,12 @@ public class TorrentsFragment extends SherlockFragment { protected TextView emptyText; @ViewById protected TextView nosettingsText; + @ViewById + protected ProgressBar loadingProgress; @AfterViews protected void init() { torrentsList.setAdapter(TorrentsAdapter_.getInstance_(getActivity())); - torrentsList.setEmptyView(emptyText); torrentsList.setMultiChoiceModeListener(onTorrentsSelected); if (torrents != null) updateTorrents(torrents); @@ -54,14 +63,7 @@ public class TorrentsFragment extends SherlockFragment { */ public void updateTorrents(ArrayList newTorrents) { torrents = newTorrents; - if (newTorrents == null) { - // Hide list adapter as well as empty text - torrentsList.setVisibility(View.GONE); - emptyText.setVisibility(View.GONE); - } else { - ((TorrentsAdapter) torrentsList.getAdapter()).update(newTorrents); - // NOTE: This will also make visible again the list or empty view - } + applyFilter(null); // Resets the filter and shown list of torrents } /** @@ -71,6 +73,26 @@ public class TorrentsFragment extends SherlockFragment { updateTorrents(null); } + /** + * Apply a filter on the current list of all torrents, showing the appropriate sublist of torrents only + * @param currentFilter + */ + public void applyFilter(NavigationFilter currentFilter) { + this.currentFilter = currentFilter; + if (this.currentFilter == null) + this.currentFilter = StatusType.getShowAllType(getActivity()); + if (torrents != null) { + // Build a local list of torrents that match the selected navigation filter + ArrayList filteredTorrents = new ArrayList(); + for (Torrent torrent : torrents) { + if (currentFilter.matches(torrent)) + filteredTorrents.add(torrent); + } + ((TorrentsAdapter) torrentsList.getAdapter()).update(filteredTorrents); + } + updateViewVisibility(); + } + private MultiChoiceModeListenerCompat onTorrentsSelected = new MultiChoiceModeListenerCompat() { @Override @@ -91,10 +113,33 @@ public class TorrentsFragment extends SherlockFragment { } // Execute the requested action - // TODO: Add the other actions switch (item.getItemId()) { - case R.id.action_start: - startTorrents(checked); + case R.id.action_resume: + for (Torrent torrent : checked) { + getTasksExecutor().resumeTorrent(torrent); + } + mode.finish(); + return true; + case R.id.action_pause: + for (Torrent torrent : checked) { + getTasksExecutor().pauseTorrent(torrent); + } + mode.finish(); + return true; + case R.id.action_remove_default: + for (Torrent torrent : checked) { + getTasksExecutor().removeTorrent(torrent, false); + } + mode.finish(); + return true; + case R.id.action_remove_withdata: + for (Torrent torrent : checked) { + getTasksExecutor().removeTorrent(torrent, true); + } + mode.finish(); + return true; + case R.id.action_setlabel: + // TODO: Open label selection dialogue mode.finish(); return true; default: @@ -126,31 +171,37 @@ public class TorrentsFragment extends SherlockFragment { /** * Updates the shown screen depending on whether we have a connection (so torrents can be shown) or not (in case we * need to show a message suggesting help) - * @param hasAConnection True if the user has servers configured and therefor has a conenction that can be used + * @param hasAConnection True if the user has servers configured and therefore has a connection that can be used */ public void updateConnectionStatus(boolean hasAConnection) { - if (!hasAConnection) { + this.hasAConnection = hasAConnection; + if (!hasAConnection) clear(); + updateViewVisibility(); + } + + private void updateViewVisibility() { + if (!hasAConnection) { torrentsList.setVisibility(View.GONE); emptyText.setVisibility(View.GONE); + loadingProgress.setVisibility(View.GONE); nosettingsText.setVisibility(View.VISIBLE); - } else { - nosettingsText.setVisibility(View.GONE); - torrentsList.setVisibility(torrentsList.getAdapter().isEmpty()? View.GONE: View.VISIBLE); - emptyText.setVisibility(torrentsList.getAdapter().isEmpty()? View.VISIBLE: View.GONE); + return; } + boolean isEmpty = torrents == null || torrentsList.getAdapter().isEmpty(); + nosettingsText.setVisibility(View.GONE); + torrentsList.setVisibility(!isLoading && !isEmpty? View.GONE: View.VISIBLE); + loadingProgress.setVisibility(isLoading? View.VISIBLE: View.GONE); + emptyText.setVisibility(!isLoading && isEmpty? View.VISIBLE: View.GONE); } - @Background - protected void startTorrents(List torrents) { - // TODO: Implement action + /** + * Returns the object responsible for executing torrent tasks against a connected server + * @return The executor for tasks on some torrent + */ + private TorrentTasksExecutor getTasksExecutor() { + // NOTE: Assumes the activity implements all the required torrent tasks + return (TorrentTasksExecutor) getActivity(); } - public interface TorrentsTasksExecutor { - void resumeTorrents(List torrents); - void pauseTorrents(List torrents); - void removeTorrents(List torrents, boolean withData); - void setLabels(List torrents); - } - } diff --git a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java index ba60ee43..77460a11 100644 --- a/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/DetailsAdapter.java @@ -113,15 +113,6 @@ public class DetailsAdapter extends MergeAdapter { } } - /** - * The details adapter is empty if it is not showing any torrent (regardless of errors, trackers and files) - */ - @Override - public boolean isEmpty() { - //return torrentDetailsView.isBound(); - return false; - } - /** * Clear currently visible torrent, including header and shown lists */ diff --git a/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java index 605aa3ca..0128a20d 100644 --- a/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItem.java @@ -1,5 +1,6 @@ package org.transdroid.core.gui.lists; + /** * Represents a filter item as shown in the navigation list or spinner. * diff --git a/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java index 43c92426..f402ab53 100644 --- a/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java +++ b/lite/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java @@ -45,7 +45,7 @@ public class SimpleListItemAdapter extends BaseAdapter { @Override public View getView(int position, View convertView, ViewGroup parent) { SimpleListItemView filterItemView; - if (convertView == null) { + if (convertView == null || !(convertView instanceof SimpleListItemView)) { filterItemView = SimpleListItemView_.build(context); } else { filterItemView = (SimpleListItemView) convertView; diff --git a/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java index 2245e4b7..db714017 100644 --- a/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java +++ b/lite/src/org/transdroid/core/gui/lists/TorrentDetailsView.java @@ -21,8 +21,6 @@ import android.widget.TextView; @EViewGroup(R.layout.fragment_details_header) public class TorrentDetailsView extends RelativeLayout { - private boolean isShowingData = false; - @ViewById protected TextView labelText, dateaddedText, uploadedText, uploadedunitText, ratioText, upspeedText, seedersText, downloadedunitText, downloadedText, totalsizeText, downspeedText, leechersText, statusText; @@ -38,11 +36,9 @@ public class TorrentDetailsView extends RelativeLayout { public void update(Torrent torrent) { if (torrent == null) { - isShowingData = false; return; } - isShowingData = true; LocalTorrent local = LocalTorrent.fromTorrent(torrent); // Set label text @@ -67,7 +63,7 @@ public class TorrentDetailsView extends RelativeLayout { } else { dateaddedText.setVisibility(View.INVISIBLE); } - statusText.setText(local.getProgressStatusEta(getResources())); + statusText.setText(getResources().getString(R.string.status_status, local.getProgressStatusEta(getResources()))); ratioText.setText(getResources().getString(R.string.status_ratio, local.getRatioString())); // TODO: Implement separate numbers of seeders and leechers seedersText.setText(getResources().getString(R.string.status_peers, torrent.getPeersSendingToUs(), @@ -90,8 +86,4 @@ public class TorrentDetailsView extends RelativeLayout { } - public boolean isBound() { - return isShowingData ; - } - } diff --git a/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java b/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java index d155e801..98a365a9 100644 --- a/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java +++ b/lite/src/org/transdroid/core/gui/navigation/FilterListAdapter.java @@ -7,9 +7,12 @@ import org.androidannotations.annotations.RootContext; import org.transdroid.core.R; import org.transdroid.core.gui.lists.SimpleListItem; import org.transdroid.core.gui.lists.SimpleListItemAdapter; -import org.transdroid.core.gui.navigation.FilterSeparatorView_; +import org.transdroid.core.gui.navigation.NavigationSelectionView.NavigationFilterManager; import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SpinnerAdapter; import com.commonsware.cwac.merge.MergeAdapter; @@ -19,14 +22,25 @@ import com.commonsware.cwac.merge.MergeAdapter; * @author Eric Kok */ @EBean -public class FilterListAdapter extends MergeAdapter { +public class FilterListAdapter extends MergeAdapter implements SpinnerAdapter { @RootContext protected Context context; private SimpleListItemAdapter serverItems = null; private SimpleListItemAdapter statusTypeItems = null; private SimpleListItemAdapter labelItems = null; + private NavigationFilterManager navigationFilterManager; + /** + * Stores which screen, or manager, handles navigation selection and display + * @param manager The navigation manager, which knows about the currently selected filter and server + * @return Itself, for method chaining + */ + public FilterListAdapter setNavigationFilterManager(NavigationFilterManager manager) { + this.navigationFilterManager = manager; + return this; + } + /** * Update the list of available servers * @param servers The new list of available servers @@ -75,4 +89,16 @@ public class FilterListAdapter extends MergeAdapter { } } + @Override + public View getDropDownView(int position, View convertView, ViewGroup parent) { + NavigationSelectionView filterItemView; + if (convertView == null || !(convertView instanceof NavigationSelectionView)) { + filterItemView = NavigationSelectionView_.build(context).setNavigationFilterManager(navigationFilterManager); + } else { + filterItemView = (NavigationSelectionView) convertView; + } + filterItemView.bind(); + return filterItemView; + } + } diff --git a/lite/src/org/transdroid/core/gui/navigation/Label.java b/lite/src/org/transdroid/core/gui/navigation/Label.java index 2a27e6b6..748d3a7e 100644 --- a/lite/src/org/transdroid/core/gui/navigation/Label.java +++ b/lite/src/org/transdroid/core/gui/navigation/Label.java @@ -1,12 +1,16 @@ package org.transdroid.core.gui.navigation; import org.transdroid.core.gui.lists.SimpleListItem; +import org.transdroid.daemon.Torrent; + +import android.os.Parcel; +import android.os.Parcelable; /** * Represents some label that is active or available on the server. * @author Eric Kok */ -public class Label implements SimpleListItem { +public class Label implements SimpleListItem, NavigationFilter { private final String name; @@ -19,4 +23,33 @@ public class Label implements SimpleListItem { return this.name; } + @Override + public boolean matches(Torrent torrent) { + return torrent.getLabelName() != null && torrent.getLabelName().equals(name); + } + + private Label(Parcel in) { + this.name = in.readString(); + } + + public static final Parcelable.Creator

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%0DYsi_tDGLXD77?~ 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 z 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 Gy8i>d9Yb;e literal 0 HcmV?d00001 diff --git a/lite/libs/androidannotations-api-3.0-SNAPSHOT.jar b/lite/libs/androidannotations-api-3.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..bf0bfae584bfc41368267671fa0063c0c4bb87a2 GIT binary patch literal 43730 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 osO?>%6_kF4K&L`9r|n3#ts(U@pVoQ)(ZPc(6i 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 literal 0 HcmV?d00001 diff --git a/lite/res/drawable-xhdpi/ic_launcher.png b/lite/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..71c6d760f05183ef8a47c614d8d13380c8528499 GIT binary patch literal 14383 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 literal 0 HcmV?d00001 diff --git a/lite/res/layout/activity_torrents.xml b/lite/res/layout/activity_torrents.xml new file mode 100644 index 00000000..02d672cc --- /dev/null +++ b/lite/res/layout/activity_torrents.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/lite/res/menu/torrents.xml b/lite/res/menu/torrents.xml new file mode 100644 index 00000000..a363b607 --- /dev/null +++ b/lite/res/menu/torrents.xml @@ -0,0 +1,9 @@ +

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�j+Q>jG_ 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