From 34376e26e778ab827ebd0860c6d86c028f45a6e3 Mon Sep 17 00:00:00 2001 From: Eric Kok Date: Thu, 7 Mar 2013 09:12:46 +0100 Subject: [PATCH] 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 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 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 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 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