diff --git a/core/project.properties b/core/project.properties index 2c3a9595..0a043162 100644 --- a/core/project.properties +++ b/core/project.properties @@ -11,7 +11,7 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-16 +target=android-17 android.library.reference.1=../external/JakeWharton-ActionBarSherlock/library android.library.reference.2=../external/ColorPickerPreference android.library=true diff --git a/core/res/layout/actionbar_serverstatus.xml b/core/res/layout/actionbar_serverstatus.xml new file mode 100644 index 00000000..1a8d4baa --- /dev/null +++ b/core/res/layout/actionbar_serverstatus.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/res/values-land/dimens.xml b/core/res/values-land/dimens.xml new file mode 100644 index 00000000..c8a1d911 --- /dev/null +++ b/core/res/values-land/dimens.xml @@ -0,0 +1,27 @@ + + + + 16dp + 8dp + 16dp + + + 12sp + 15sp + 15sp + 22sp + 33sp + 12sp + + + 15sp + 12sp + 110dp + 1dp + 2dp + 19sp + 12sp + 12sp + 53dp + + \ No newline at end of file diff --git a/core/res/values-sw500dp/dimens.xml b/core/res/values-sw600dp/dimens.xml similarity index 65% rename from core/res/values-sw500dp/dimens.xml rename to core/res/values-sw600dp/dimens.xml index ce641b92..f4926c5c 100644 --- a/core/res/values-sw500dp/dimens.xml +++ b/core/res/values-sw600dp/dimens.xml @@ -17,5 +17,11 @@ 18sp 15sp 125dp + 2dp + 5dp + 25sp + 17sp + 14sp + 63dp \ No newline at end of file diff --git a/core/res/values/dimens.xml b/core/res/values/dimens.xml index 518bbae0..46d7ea75 100644 --- a/core/res/values/dimens.xml +++ b/core/res/values/dimens.xml @@ -17,5 +17,11 @@ 17sp 14sp 110dp + 2dp + 3dp + 21sp + 15sp + 13sp + 53dp \ No newline at end of file diff --git a/core/res/values/strings.xml b/core/res/values/strings.xml index d846679c..870ba5ca 100644 --- a/core/res/values/strings.xml +++ b/core/res/values/strings.xml @@ -73,8 +73,8 @@ UNKNOWN ETA RATIO %1$s %1$s OF %2$s PEERS - ↑ %1$s - ↓ %1$s + ↑ %1$s + ↓ %1$s Downloading Seeding Paused diff --git a/core/src/org/transdroid/core/gui/ServerStatusView.java b/core/src/org/transdroid/core/gui/ServerStatusView.java new file mode 100644 index 00000000..8bbda367 --- /dev/null +++ b/core/src/org/transdroid/core/gui/ServerStatusView.java @@ -0,0 +1,65 @@ +package org.transdroid.core.gui; + +import java.util.List; + +import org.androidannotations.annotations.EViewGroup; +import org.androidannotations.annotations.ViewById; +import org.transdroid.daemon.Torrent; +import org.transdroid.daemon.TorrentStatus; +import org.transdroid.daemon.util.FileSizeConverter; + +import android.content.Context; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +@EViewGroup(resName="actionbar_serverstatus") +public class ServerStatusView extends RelativeLayout { + + @ViewById + protected TextView downcountText, upcountText, downcountSign, upcountSign, downspeedText, upspeedText; + + public ServerStatusView(Context context) { + super(context); + } + + /** + * Updates the statistics as shown in the action bar through this server status view. + * @param torrents The most recently received list of torrents + */ + public void update(List torrents) { + + if (torrents == null) { + downcountText.setText(null); + upcountText.setText(null); + downspeedText.setText(null); + upspeedText.setText(null); + downcountSign.setVisibility(View.INVISIBLE); + upcountSign.setVisibility(View.INVISIBLE); + } + + int downcount = 0, upcount = 0, downspeed = 0, upspeed = 0; + for (Torrent torrent : torrents) { + + // Downloading torrents count towards downloads and uploads, seeding torrents towards uploads + if (torrent.getStatusCode() == TorrentStatus.Downloading) { + downcount++; + upcount++; + } else if (torrent.getStatusCode() == TorrentStatus.Seeding) { + upcount++; + } + downspeed += torrent.getRateDownload(); + upspeed += torrent.getRateUpload(); + + } + + downcountText.setText(Integer.toString(downcount)); + upcountText.setText(Integer.toString(upcount)); + downspeedText.setText(FileSizeConverter.getSize(downspeed)); + upspeedText.setText(FileSizeConverter.getSize(upspeed)); + downcountSign.setVisibility(View.VISIBLE); + upcountSign.setVisibility(View.VISIBLE); + + } + +} diff --git a/core/src/org/transdroid/core/gui/TorrentsActivity.java b/core/src/org/transdroid/core/gui/TorrentsActivity.java index ae218244..0019add9 100644 --- a/core/src/org/transdroid/core/gui/TorrentsActivity.java +++ b/core/src/org/transdroid/core/gui/TorrentsActivity.java @@ -101,6 +101,7 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi protected SherlockListView filtersList; protected FilterListAdapter navigationListAdapter = null; protected FilterListDropDownAdapter navigationSpinnerAdapter = null; + protected ServerStatusView serverStatusView; @SystemService protected SearchManager searchManager; @@ -135,10 +136,14 @@ public class TorrentsActivity extends SherlockFragmentActivity implements OnNavi @AfterViews protected void init() { - // Set up navigation, with an action bar spinner and possibly (if room) with a filter list + // Set up navigation, with an action bar spinner, server status indicator and possibly (if room) with a filter + // list + serverStatusView = ServerStatusView_.build(this); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setHomeButtonEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false); + getSupportActionBar().setDisplayShowCustomEnabled(true); + getSupportActionBar().setCustomView(serverStatusView); navigationSpinnerAdapter = FilterListDropDownAdapter_.getInstance_(this); // Servers are always added to the action bar spinner navigationSpinnerAdapter.updateServers(applicationSettings.getServerSettings()); @@ -780,13 +785,16 @@ 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.updateIsLoading(false); 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); } + // Update local list of labels in the navigation List