diff --git a/core/res/layout-v11/activity_widgetconfig.xml b/core/res/layout-v11/activity_widgetconfig.xml
index 9cf2564f..9d7b4a1a 100644
--- a/core/res/layout-v11/activity_widgetconfig.xml
+++ b/core/res/layout-v11/activity_widgetconfig.xml
@@ -93,6 +93,13 @@
android:text="@string/widget_lookfeel"
android:textIsSelectable="false" />
+
+
.
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
.
-->
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/core/res/values-land/dimens.xml b/core/res/values-land/dimens.xml
index d886114c..bbe37d8d 100644
--- a/core/res/values-land/dimens.xml
+++ b/core/res/values-land/dimens.xml
@@ -22,8 +22,8 @@
1dp
2dp
19sp
- 12sp
- 12sp
+ 12dp
+ 12dp
53dp
diff --git a/core/res/values-sw600dp/dimens.xml b/core/res/values-sw600dp/dimens.xml
index 4f9b8522..95eab8d8 100644
--- a/core/res/values-sw600dp/dimens.xml
+++ b/core/res/values-sw600dp/dimens.xml
@@ -31,8 +31,8 @@
2dp
5dp
25sp
- 17sp
- 14sp
+ 17dp
+ 14dp
63dp
diff --git a/core/res/values/dimens.xml b/core/res/values/dimens.xml
index a7e05008..64129c14 100644
--- a/core/res/values/dimens.xml
+++ b/core/res/values/dimens.xml
@@ -37,8 +37,8 @@
2dp
3dp
21sp
- 15sp
- 13sp
+ 15dp
+ 13dp
53dp
diff --git a/core/res/values/strings.xml b/core/res/values/strings.xml
index 825a72e2..20c668cc 100644
--- a/core/res/values/strings.xml
+++ b/core/res/values/strings.xml
@@ -204,6 +204,7 @@
LOOK & FEEL
SORT ORDER
Reversed sort order
+ Server status instead of title
Use dark theme (no preview)
DONE
diff --git a/core/res/xml/listwidget_info.xml b/core/res/xml/listwidget_info.xml
index 685df506..27014dd5 100644
--- a/core/res/xml/listwidget_info.xml
+++ b/core/res/xml/listwidget_info.xml
@@ -20,7 +20,7 @@
android:initialKeyguardLayout="@layout/widget_torrents_light"
android:initialLayout="@layout/widget_torrents_light"
android:minHeight="110dip"
- android:minResizeHeight="110dip"
+ android:minResizeHeight="40dip"
android:minResizeWidth="110dp"
android:minWidth="180dp"
android:previewImage="@drawable/widget_preview"
diff --git a/core/src/org/transdroid/core/app/settings/ApplicationSettings.java b/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
index 8cfaf12c..2a1239c2 100644
--- a/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
+++ b/core/src/org/transdroid/core/app/settings/ApplicationSettings.java
@@ -527,10 +527,13 @@ public class ApplicationSettings {
if (!prefs.contains("widget_server_" + appWidgetId))
return null;
// @formatter:off
- return new ListWidgetConfig(prefs.getInt("widget_server_" + appWidgetId, -1), StatusType.valueOf(prefs.getString(
- "widget_status_" + appWidgetId, StatusType.ShowAll.name())), TorrentsSortBy.valueOf(prefs.getString(
- "widget_sortby_" + appWidgetId, TorrentsSortBy.Alphanumeric.name())), prefs.getBoolean(
- "widget_reverse_" + appWidgetId, false), prefs.getBoolean("widget_darktheme_" + appWidgetId, false));
+ return new ListWidgetConfig(
+ prefs.getInt("widget_server_" + appWidgetId, -1),
+ StatusType.valueOf(prefs.getString("widget_status_" + appWidgetId, StatusType.ShowAll.name())),
+ TorrentsSortBy.valueOf(prefs.getString("widget_sortby_" + appWidgetId, TorrentsSortBy.Alphanumeric.name())),
+ prefs.getBoolean("widget_reverse_" + appWidgetId, false),
+ prefs.getBoolean("widget_showstatus_" + appWidgetId, false),
+ prefs.getBoolean("widget_darktheme_" + appWidgetId, false));
// @formatter:on
}
@@ -549,6 +552,7 @@ public class ApplicationSettings {
edit.putString("widget_status_" + appWidgetId, settings.getStatusType().name());
edit.putString("widget_sortby_" + appWidgetId, settings.getSortBy().name());
edit.putBoolean("widget_reverse_" + appWidgetId, settings.shouldReserveSort());
+ edit.putBoolean("widget_showstatus_" + appWidgetId, settings.shouldShowStatusView());
edit.putBoolean("widget_darktheme_" + appWidgetId, settings.shouldUseDarkTheme());
edit.commit();
}
@@ -563,6 +567,7 @@ public class ApplicationSettings {
edit.remove("widget_status_" + appWidgetId);
edit.remove("widget_sortby_" + appWidgetId);
edit.remove("widget_reverse_" + appWidgetId);
+ edit.remove("widget_showstatus_" + appWidgetId);
edit.remove("widget_darktheme_" + appWidgetId);
edit.commit();
}
diff --git a/core/src/org/transdroid/core/widget/ListWidgetConfig.java b/core/src/org/transdroid/core/widget/ListWidgetConfig.java
index bbe76b25..06249db5 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetConfig.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetConfig.java
@@ -29,14 +29,16 @@ public class ListWidgetConfig {
private final StatusType statusType;
private final TorrentsSortBy sortBy;
private final boolean reserveSort;
+ private final boolean showStatusView;
private final boolean useDarkTheme;
public ListWidgetConfig(int serverId, StatusType statusType, TorrentsSortBy sortBy, boolean reverseSort,
- boolean useDarkTheme) {
+ boolean showStatusView, boolean useDarkTheme) {
this.serverId = serverId;
this.statusType = statusType;
this.sortBy = sortBy;
this.reserveSort = reverseSort;
+ this.showStatusView = showStatusView;
this.useDarkTheme = useDarkTheme;
}
@@ -56,6 +58,10 @@ public class ListWidgetConfig {
return reserveSort;
}
+ public boolean shouldShowStatusView() {
+ return showStatusView;
+ }
+
public boolean shouldUseDarkTheme() {
return useDarkTheme;
}
diff --git a/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java b/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
index b4d8c9d8..9015d1a1 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetConfigActivity.java
@@ -45,6 +45,7 @@ import org.transdroid.daemon.TorrentsSortBy;
import org.transdroid.daemon.task.DaemonTaskResult;
import org.transdroid.daemon.task.RetrieveTask;
import org.transdroid.daemon.task.RetrieveTaskSuccessResult;
+import org.transdroid.daemon.util.FileSizeConverter;
import android.annotation.TargetApi;
import android.appwidget.AppWidgetManager;
@@ -71,11 +72,15 @@ public class ListWidgetConfigActivity extends SherlockActivity {
@ViewById
protected Spinner serverSpinner, filterSpinner, sortSpinner;
@ViewById
- protected CheckBox reverseorderCheckBox, darkthemeCheckBox;
+ protected CheckBox reverseorderCheckBox, showstatusCheckBox, darkthemeCheckBox;
@ViewById
protected TextView filterText, serverText, errorText;
@ViewById
+ protected TextView downcountText, upcountText, downcountSign, upcountSign, downspeedText, upspeedText;
+ @ViewById
protected ListView torrentsList;
+ @ViewById
+ protected View navigationView, serverstatusView;
private List previewTorrents = null;
// Settings and helpers
@@ -122,6 +127,7 @@ public class ListWidgetConfigActivity extends SherlockActivity {
sortSpinner.setAdapter(new SimpleListItemSpinnerAdapter(this, 0, sortOrders));
// TODO: Update to AndroidAnnotations 3.0 and use @CheckedChanged
reverseorderCheckBox.setOnCheckedChangeListener(reverseorderCheckedChanged);
+ showstatusCheckBox.setOnCheckedChangeListener(showstatusCheckChanged);
torrentsList.setEmptyView(errorText);
// Set up action bar with a done button
@@ -157,6 +163,14 @@ public class ListWidgetConfigActivity extends SherlockActivity {
filterTorrents();
}
};
+
+ protected OnCheckedChangeListener showstatusCheckChanged = new OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ navigationView.setVisibility(showstatusCheckBox.isChecked()? View.GONE: View.VISIBLE);
+ serverstatusView.setVisibility(showstatusCheckBox.isChecked()? View.VISIBLE: View.GONE);
+ }
+ };
@Background
protected void loadTorrents() {
@@ -200,8 +214,9 @@ public class ListWidgetConfigActivity extends SherlockActivity {
// Get the already loaded torrents and filter and sort them
ArrayList filteredTorrents = new ArrayList(previewTorrents.size());
StatusTypeFilter statusTypeFilter = (StatusTypeFilter) filterSpinner.getSelectedItem();
+ boolean dormantAsInactive = systemSettings.treatDormantAsInactive();
for (Torrent torrent : previewTorrents) {
- if (statusTypeFilter.matches(torrent, systemSettings.treatDormantAsInactive()))
+ if (statusTypeFilter.matches(torrent, dormantAsInactive))
filteredTorrents.add(torrent);
}
if (filteredTorrents.size() == 0) {
@@ -212,6 +227,23 @@ public class ListWidgetConfigActivity extends SherlockActivity {
Daemon serverType = filteredTorrents.get(0).getDaemon();
Collections
.sort(filteredTorrents, new TorrentsComparator(serverType, sortBy, reverseorderCheckBox.isChecked()));
+
+ // Update the server status count and speeds
+ int downcount = 0, upcount = 0, downspeed = 0, upspeed = 0;
+ for (Torrent torrent : previewTorrents) {
+ if (torrent.isDownloading(dormantAsInactive)) {
+ downcount++;
+ upcount++;
+ } else if (torrent.isSeeding(dormantAsInactive)) {
+ upcount++;
+ }
+ downspeed += torrent.getRateDownload();
+ upspeed += torrent.getRateUpload();
+ }
+ downcountText.setText(Integer.toString(downcount));
+ upcountText.setText(Integer.toString(upcount));
+ downspeedText.setText(FileSizeConverter.getSize(downspeed) + "/s");
+ upspeedText.setText(FileSizeConverter.getSize(upspeed) + "/s");
// Finally update the widget preview with the live, filtered and sorted torrents list
torrentsList.setAdapter(new ListWidgetPreviewAdapter(this, 0, filteredTorrents));
@@ -243,8 +275,10 @@ public class ListWidgetConfigActivity extends SherlockActivity {
StatusType statusType = ((StatusTypeFilter) filterSpinner.getSelectedItem()).getStatusType();
TorrentsSortBy sortBy = ((SortByListItem) sortSpinner.getSelectedItem()).getSortBy();
boolean reverseSort = reverseorderCheckBox.isChecked();
+ boolean showstatus = showstatusCheckBox.isChecked();
boolean useDarkTheme = darkthemeCheckBox.isChecked();
- ListWidgetConfig config = new ListWidgetConfig(server, statusType, sortBy, reverseSort, useDarkTheme);
+ ListWidgetConfig config = new ListWidgetConfig(server, statusType, sortBy, reverseSort, showstatus,
+ useDarkTheme);
applicationSettings.setWidgetConfig(appWidgetId, config);
// Return the widget configuration result
diff --git a/core/src/org/transdroid/core/widget/ListWidgetProvider.java b/core/src/org/transdroid/core/widget/ListWidgetProvider.java
index 7213e316..68ad50bc 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetProvider.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetProvider.java
@@ -19,8 +19,10 @@ package org.transdroid.core.widget;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EReceiver;
import org.transdroid.core.R;
-import org.transdroid.core.app.settings.*;
-import org.transdroid.core.gui.*;
+import org.transdroid.core.app.settings.ApplicationSettings;
+import org.transdroid.core.app.settings.ApplicationSettings_;
+import org.transdroid.core.app.settings.ServerSetting;
+import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.core.gui.log.Log;
import org.transdroid.core.service.ControlService;
@@ -132,10 +134,11 @@ public class ListWidgetProvider extends AppWidgetProvider {
rv.setTextViewText(R.id.error_text, context.getString(R.string.widget_loading));
// Show the server and status type filter from the widget configuration in the 'action bar'
+ // NOTE: The ListWidgetViewsService will eventually decide to show these labels or the server status statistics
ServerSetting server = appSettings.getServerSetting(config.getServerId());
rv.setTextViewText(R.id.server_text, server.getName());
rv.setTextViewText(R.id.filter_text, config.getStatusType().getFilterItem(context).getName());
-
+
// Set up the START_SERVER intent for 'action bar' clicks to start Transdroid normally
Intent start = new Intent(context, TorrentsActivity_.class);
// start.setData(Uri.parse("intent://widget/" + appWidgetId + "/start/" + config.getServerId()));
diff --git a/core/src/org/transdroid/core/widget/ListWidgetViewsService.java b/core/src/org/transdroid/core/widget/ListWidgetViewsService.java
index c9102c3b..668096c8 100644
--- a/core/src/org/transdroid/core/widget/ListWidgetViewsService.java
+++ b/core/src/org/transdroid/core/widget/ListWidgetViewsService.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.androidannotations.annotations.EService;
import org.transdroid.core.R;
import org.transdroid.core.app.settings.*;
-import org.transdroid.core.app.settings.ServerSetting;
import org.transdroid.core.gui.lists.LocalTorrent;
import org.transdroid.core.gui.log.Log;
import org.transdroid.core.service.*;
@@ -34,12 +33,14 @@ import org.transdroid.daemon.TorrentsComparator;
import org.transdroid.daemon.task.DaemonTaskResult;
import org.transdroid.daemon.task.RetrieveTask;
import org.transdroid.daemon.task.RetrieveTaskSuccessResult;
+import org.transdroid.daemon.util.FileSizeConverter;
import android.annotation.TargetApi;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
+import android.view.View;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
@@ -112,7 +113,8 @@ class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory {
// We have data; filter, sort and store it to use later when getViewAt gets called
SystemSettings systemSettings = SystemSettings_.getInstance_(context);
ArrayList filteredTorrents = new ArrayList();
- for (Torrent torrent : ((RetrieveTaskSuccessResult) result).getTorrents()) {
+ List allTorrents = ((RetrieveTaskSuccessResult) result).getTorrents();
+ for (Torrent torrent : allTorrents) {
if (config.getStatusType().getFilterItem(context).matches(torrent, systemSettings.treatDormantAsInactive()))
filteredTorrents.add(torrent);
}
@@ -124,6 +126,33 @@ class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory {
}
torrents = filteredTorrents;
+ // If the user asked to show the server status statistics, we need to update the widget remote views again
+ RemoteViews rv = ListWidgetProvider.buildRemoteViews(context, appWidgetId, config);
+ if (config.shouldShowStatusView()) {
+
+ // Update the server status count and speeds in the 'action bar'
+ int downcount = 0, upcount = 0, downspeed = 0, upspeed = 0;
+ for (Torrent torrent : torrents) {
+ if (torrent.isDownloading(systemSettings.treatDormantAsInactive())) {
+ downcount++;
+ upcount++;
+ } else if (torrent.isSeeding(systemSettings.treatDormantAsInactive())) {
+ upcount++;
+ }
+ downspeed += torrent.getRateDownload();
+ upspeed += torrent.getRateUpload();
+ }
+ rv.setViewVisibility(R.id.navigation_view, View.GONE);
+ rv.setViewVisibility(R.id.serverstatus_view, View.VISIBLE);
+ rv.setTextViewText(R.id.downcount_text, Integer.toString(downcount));
+ rv.setTextViewText(R.id.upcount_text, Integer.toString(upcount));
+ rv.setTextViewText(R.id.downspeed_text, FileSizeConverter.getSize(downspeed) + "/s");
+ rv.setTextViewText(R.id.upspeed_text, FileSizeConverter.getSize(upspeed) + "/s");
+
+ AppWidgetManager.getInstance(context.getApplicationContext()).updateAppWidget(appWidgetId, rv);
+
+ }
+
}
@Override