diff --git a/core/res/layout/list_item_simple.xml b/core/res/layout/list_item_simple.xml
new file mode 100644
index 00000000..cc5133ab
--- /dev/null
+++ b/core/res/layout/list_item_simple.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/src/org/transdroid/core/app/search/SearchHelper.java b/core/src/org/transdroid/core/app/search/SearchHelper.java
index b72cb7b8..1eca6cb5 100644
--- a/core/src/org/transdroid/core/app/search/SearchHelper.java
+++ b/core/src/org/transdroid/core/app/search/SearchHelper.java
@@ -7,6 +7,7 @@ import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.EBean.Scope;
import org.androidannotations.annotations.RootContext;
+import android.content.ContentProviderClient;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
@@ -49,8 +50,15 @@ public class SearchHelper {
*/
public List getAvailableSites() {
- // Try to access the TorrentSitesProvider to retrieve all available in-app torrent search sites
+ // Try to access the TorrentSitesProvider of the Torrent Search app
Uri uri = Uri.parse("content://org.transdroid.search.torrentsitesprovider/sites");
+ ContentProviderClient test = context.getContentResolver().acquireContentProviderClient(uri);
+ if (test == null) {
+ // Torrent Search package is not yet installed
+ return null;
+ }
+
+ // Query the available in-app torrent search sites
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor.moveToFirst()) {
List sites = new ArrayList();
@@ -63,7 +71,6 @@ public class SearchHelper {
return sites;
}
- // Torrent Search package is not yet installed
return null;
}
diff --git a/core/src/org/transdroid/core/gui/DetailsActivity.java b/core/src/org/transdroid/core/gui/DetailsActivity.java
index f4b81872..18a068ed 100644
--- a/core/src/org/transdroid/core/gui/DetailsActivity.java
+++ b/core/src/org/transdroid/core/gui/DetailsActivity.java
@@ -101,6 +101,7 @@ public class DetailsActivity extends SherlockFragmentActivity implements Torrent
@OptionsItem(resName = "action_refresh")
protected void refreshScreen() {
+ fragmentDetails.updateIsLoading(true);
refreshTorrent();
refreshTorrentDetails();
refreshTorrentFiles();
@@ -108,9 +109,7 @@ public class DetailsActivity extends SherlockFragmentActivity implements Torrent
@Background
protected void refreshTorrent() {
- fragmentDetails.updateIsLoading(true);
DaemonTaskResult result = RetrieveTask.create(currentConnection).execute();
- fragmentDetails.updateIsLoading(false);
if (result instanceof RetrieveTaskSuccessResult) {
onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(),
((RetrieveTaskSuccessResult) result).getLabels());
@@ -246,6 +245,7 @@ public class DetailsActivity extends SherlockFragmentActivity implements Torrent
@UiThread
protected void onCommunicationError(DaemonTaskFailureResult result) {
Log.i(this, result.getException().toString());
+ fragmentDetails.updateIsLoading(false);
Crouton.showText(this, getString(LocalTorrent.getResourceForDaemonException(result.getException())),
navigationHelper.CROUTON_ERROR_STYLE);
}
@@ -253,6 +253,7 @@ public class DetailsActivity extends SherlockFragmentActivity implements Torrent
@UiThread
protected void onTorrentsRetrieved(List torrents, List labels) {
// Update the details fragment
+ fragmentDetails.updateIsLoading(false);
fragmentDetails.perhapsUpdateTorrent(torrents);
}
diff --git a/core/src/org/transdroid/core/gui/TorrentsActivity.java b/core/src/org/transdroid/core/gui/TorrentsActivity.java
index c4e0c444..8601aaa4 100644
--- a/core/src/org/transdroid/core/gui/TorrentsActivity.java
+++ b/core/src/org/transdroid/core/gui/TorrentsActivity.java
@@ -325,29 +325,36 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
* If required, add torrents, switch to a specific server, etc.
*/
protected void handleStartIntent() {
-
+
Intent intent = getIntent();
Uri dataUri = intent.getData();
String data = intent.getDataString();
String action = intent.getAction();
-
- if (action.equals("org.transdroid.ADD_MULTIPLE")) {
+
+ // Adding multiple torrents at the same time (as found in the Intent extras Bundle)
+ if (action != null && action.equals("org.transdroid.ADD_MULTIPLE")) {
// Intent should have some extras pointing to possibly multiple torrents
- String[] urls = intent.getStringArrayExtra("TORRENT_URLS");
- String[] titles = intent.getStringArrayExtra("TORRENT_TITLES");
- if (urls != null) {
- for (int i = 0; i < urls.length; i++) {
- addTorrentByUrl(urls[i], (titles != null && titles.length >= i? titles[i]: "Torrent"));
- }
- }
- return;
+ String[] urls = intent.getStringArrayExtra("TORRENT_URLS");
+ String[] titles = intent.getStringArrayExtra("TORRENT_TITLES");
+ if (urls != null) {
+ for (int i = 0; i < urls.length; i++) {
+ addTorrentByUrl(urls[i], (titles != null && titles.length >= i ? titles[i] : "Torrent"));
+ }
+ }
+ return;
}
+
+ // Add a torrent from a local or remote data URI?
+ if (dataUri == null)
+ return;
+ // Adding a torrent from the Android downloads manager
if (dataUri.getScheme() != null && dataUri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
addTorrentFromDownloads(dataUri);
return;
}
+ // Adding a torrent from http or https URL
if (dataUri.getScheme().equals("http") || dataUri.getScheme().equals("https")) {
String title = data.substring(data.lastIndexOf("/"));
if (intent.hasExtra("TORRENT_TITLE")) {
@@ -357,17 +364,19 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
return;
}
+ // Adding a torrent from magnet URL
if (dataUri.getScheme().equals("magnet")) {
addTorrentByMagnetUrl(data);
return;
}
+ // Adding a local .torrent file
if (dataUri.getScheme().equals("file")) {
String title = data.substring(data.lastIndexOf("/"));
addTorrentByFile(data, title);
return;
}
-
+
}
@OptionsItem(resName = "action_add_fromurl")
@@ -509,7 +518,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi
try {
// Open the content uri as input stream
input = getContentResolver().openInputStream(contentUri);
-
+
// Write a temporary file with the torrent contents
File tempFile = File.createTempFile("transdroid_", ".torrent", getCacheDir());
FileOutputStream output = new FileOutputStream(tempFile);
diff --git a/core/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java b/core/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java
index f402ab53..e6b28e54 100644
--- a/core/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java
+++ b/core/src/org/transdroid/core/gui/lists/SimpleListItemAdapter.java
@@ -20,7 +20,7 @@ public class SimpleListItemAdapter extends BaseAdapter {
/**
* Allows updating of the full data list underlying this adapter, replacing all items
- * @param newItems The new list of filter items to display
+ * @param newItems The new list of simple list items to display
*/
public void update(List extends SimpleListItem> newItems) {
this.items = newItems;
diff --git a/core/src/org/transdroid/core/gui/lists/SimpleListItemView.java b/core/src/org/transdroid/core/gui/lists/SimpleListItemView.java
index 884bdbb0..2caaff61 100644
--- a/core/src/org/transdroid/core/gui/lists/SimpleListItemView.java
+++ b/core/src/org/transdroid/core/gui/lists/SimpleListItemView.java
@@ -11,7 +11,7 @@ import android.widget.TextView;
* View that represents some {@link SimpleListItem} object and simple prints out the text (in proper style)
* @author Eric Kok
*/
-@EViewGroup(resName="list_item_filter")
+@EViewGroup(resName="list_item_simple")
public class SimpleListItemView extends FrameLayout {
@ViewById
diff --git a/core/src/org/transdroid/core/gui/log/ErrorLogSender.java b/core/src/org/transdroid/core/gui/log/ErrorLogSender.java
index 26fcc129..1740c1ad 100644
--- a/core/src/org/transdroid/core/gui/log/ErrorLogSender.java
+++ b/core/src/org/transdroid/core/gui/log/ErrorLogSender.java
@@ -34,9 +34,13 @@ public class ErrorLogSender {
body.append("\n");
body.append(navigationHelper.getAppNameAndVersion());
body.append("\n");
- body.append(serverSetting.getType().toString());
- body.append(" settings: ");
- body.append(serverSetting.getHumanReadableIdentifier());
+ if (serverSetting == null) {
+ body.append("(No server settings)");
+ } else {
+ body.append(serverSetting.getType().toString());
+ body.append(" settings: ");
+ body.append(serverSetting.getHumanReadableIdentifier());
+ }
body.append("\n\nConnection and error log:");
// Print the individual error log messages as stored in the database
diff --git a/core/src/org/transdroid/core/gui/navigation/FilterListAdapter.java b/core/src/org/transdroid/core/gui/navigation/FilterListAdapter.java
index 9779be75..7cab7152 100644
--- a/core/src/org/transdroid/core/gui/navigation/FilterListAdapter.java
+++ b/core/src/org/transdroid/core/gui/navigation/FilterListAdapter.java
@@ -6,7 +6,6 @@ import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.RootContext;
import org.transdroid.core.R;
import org.transdroid.core.app.settings.ServerSetting;
-import org.transdroid.core.gui.lists.SimpleListItemAdapter;
import org.transdroid.core.gui.navigation.StatusType.StatusTypeFilter;
import android.content.Context;
@@ -24,9 +23,9 @@ public class FilterListAdapter extends MergeAdapter {
@RootContext
protected Context context;
- private SimpleListItemAdapter serverItems = null;
- private SimpleListItemAdapter statusTypeItems = null;
- private SimpleListItemAdapter labelItems = null;
+ private FilterListItemAdapter serverItems = null;
+ private FilterListItemAdapter statusTypeItems = null;
+ private FilterListItemAdapter labelItems = null;
private FilterSeparatorView statusTypeSeparator;
private FilterSeparatorView labelSeperator;
private FilterSeparatorView serverSeparator;
@@ -40,7 +39,7 @@ public class FilterListAdapter extends MergeAdapter {
serverSeparator = FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_servers));
serverSeparator.setVisibility(servers.isEmpty()? View.GONE: View.VISIBLE);
addView(serverSeparator, false);
- this.serverItems = new SimpleListItemAdapter(context, servers);
+ this.serverItems = new FilterListItemAdapter(context, servers);
addAdapter(serverItems);
} else if (this.serverItems != null && servers != null) {
serverSeparator.setVisibility(serverItems.isEmpty()? View.GONE: View.VISIBLE);
@@ -61,7 +60,7 @@ public class FilterListAdapter extends MergeAdapter {
context.getString(R.string.navigation_status));
statusTypeSeparator.setVisibility(statusTypes.isEmpty()? View.GONE: View.VISIBLE);
addView(statusTypeSeparator, false);
- this.statusTypeItems = new SimpleListItemAdapter(context, statusTypes);
+ this.statusTypeItems = new FilterListItemAdapter(context, statusTypes);
addAdapter(statusTypeItems);
} else if (this.statusTypeItems != null && statusTypes != null) {
statusTypeSeparator.setVisibility(statusTypeItems.isEmpty()? View.GONE: View.VISIBLE);
@@ -81,7 +80,7 @@ public class FilterListAdapter extends MergeAdapter {
labelSeperator = FilterSeparatorView_.build(context).setText(context.getString(R.string.navigation_labels));
labelSeperator.setVisibility(labels.isEmpty()? View.GONE: View.VISIBLE);
addView(labelSeperator, false);
- this.labelItems = new SimpleListItemAdapter(context, labels);
+ this.labelItems = new FilterListItemAdapter(context, labels);
addAdapter(labelItems);
} else if (this.labelItems != null && labels != null) {
labelSeperator.setVisibility(labelItems.isEmpty()? View.GONE: View.VISIBLE);
diff --git a/core/src/org/transdroid/core/gui/navigation/FilterListItemAdapter.java b/core/src/org/transdroid/core/gui/navigation/FilterListItemAdapter.java
new file mode 100644
index 00000000..62f21212
--- /dev/null
+++ b/core/src/org/transdroid/core/gui/navigation/FilterListItemAdapter.java
@@ -0,0 +1,60 @@
+package org.transdroid.core.gui.navigation;
+
+import java.util.List;
+
+import org.transdroid.core.gui.lists.SimpleListItem;
+import org.transdroid.core.gui.lists.SimpleListItemView;
+import org.transdroid.core.gui.lists.SimpleListItemView_;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+
+public class FilterListItemAdapter extends BaseAdapter {
+
+ private final Context context;
+ private List extends SimpleListItem> items;
+
+ public FilterListItemAdapter(Context context, List extends SimpleListItem> 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 extends SimpleListItem> 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 || !(convertView instanceof SimpleListItemView)) {
+ filterItemView = SimpleListItemView_.build(context);
+ } else {
+ filterItemView = (SimpleListItemView) convertView;
+ }
+ filterItemView.bind(getItem(position));
+ return filterItemView;
+ }
+
+}
\ No newline at end of file
diff --git a/core/src/org/transdroid/core/gui/navigation/FilterListItemView.java b/core/src/org/transdroid/core/gui/navigation/FilterListItemView.java
new file mode 100644
index 00000000..97165445
--- /dev/null
+++ b/core/src/org/transdroid/core/gui/navigation/FilterListItemView.java
@@ -0,0 +1,29 @@
+package org.transdroid.core.gui.navigation;
+
+import org.androidannotations.annotations.EViewGroup;
+import org.androidannotations.annotations.ViewById;
+import org.transdroid.core.gui.lists.SimpleListItem;
+
+import android.content.Context;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+/**
+ * View that represents some {@link SimpleListItem} object used to represent a navigation filter item
+ * @author Eric Kok
+ */
+@EViewGroup(resName="list_item_filter")
+public class FilterListItemView extends FrameLayout {
+
+ @ViewById
+ protected TextView itemText;
+
+ public FilterListItemView(Context context) {
+ super(context);
+ }
+
+ public void bind(SimpleListItem filterItem) {
+ itemText.setText(filterItem.getName());
+ }
+
+}
diff --git a/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java b/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
index 3b8e3df4..81de3bae 100644
--- a/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
+++ b/core/src/org/transdroid/core/gui/settings/MainSettingsActivity.java
@@ -86,6 +86,8 @@ public class MainSettingsActivity extends SherlockPreferenceActivity {
ListPreference setSite = (ListPreference) findPreference("header_setsearchsite");
// Retrieve the available in-app search sites (using the Torrent Search package)
List searchsites = searchHelper.getAvailableSites();
+ if (searchsites == null)
+ searchsites = new ArrayList();
List siteNames = new ArrayList(websearches.size() + searchsites.size());
List siteValues = new ArrayList(websearches.size() + searchsites.size());
for (SearchSite searchSite : searchsites) {