From c92d881a51945034eee82e842e014e0e912fa7e1 Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Sat, 28 Sep 2013 12:11:30 +0000 Subject: [PATCH] Dynamically fetch current list of graphs --- res/values/arrays.xml | 6 -- .../router/activity/GraphActivity.java | 71 ++++++++++++++----- .../router/service/StatSummarizer.java | 3 + 3 files changed, 56 insertions(+), 24 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index d9ec951ec..3db19a3ba 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -17,12 +17,6 @@ <item>ERROR</item> <item>All</item> </string-array> - <string-array name="graph_list"> - <item>router.activePeers</item> - <item>router.memoryUsed</item> - <item>bw.sendRate</item> - <item>bw.recvRate</item> - </string-array> <string-array name="setting0to3"> <item>0</item> <item>1</item> diff --git a/src/net/i2p/android/router/activity/GraphActivity.java b/src/net/i2p/android/router/activity/GraphActivity.java index e3e95e694..402ee6ff7 100644 --- a/src/net/i2p/android/router/activity/GraphActivity.java +++ b/src/net/i2p/android/router/activity/GraphActivity.java @@ -1,7 +1,15 @@ package net.i2p.android.router.activity; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.TreeSet; + import net.i2p.android.router.R; import net.i2p.android.router.fragment.GraphFragment; +import net.i2p.android.router.service.StatSummarizer; +import net.i2p.android.router.service.SummaryListener; +import net.i2p.stat.Rate; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.widget.ArrayAdapter; @@ -20,27 +28,43 @@ public class GraphActivity extends I2PActivityBase { mDrawerToggle.setDrawerIndicatorEnabled(false); - SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, - R.array.graph_list, android.R.layout.simple_spinner_dropdown_item); - - ActionBar.OnNavigationListener mNavigationListener = new ActionBar.OnNavigationListener() { - String[] rates = getResources().getStringArray(R.array.graph_list); - - public boolean onNavigationItemSelected(int position, long itemId) { - String rateName = rates[position]; - long period = (60 * 1000); - GraphFragment f = GraphFragment.newInstance(rateName, period); - getSupportFragmentManager().beginTransaction() - .replace(R.id.main_fragment, f, rates[position]).commit(); - return true; + if (StatSummarizer.instance() != null) { + List<SummaryListener> listeners = StatSummarizer.instance().getListeners(); + TreeSet<SummaryListener> ordered = new TreeSet<SummaryListener>(new AlphaComparator()); + ordered.addAll(listeners); + final String[] mRates = new String[ordered.size()]; + final long[] mPeriods = new long[ordered.size()]; + int i = 0; + for (SummaryListener listener : ordered) { + Rate r = listener.getRate(); + mRates[i] = r.getRateStat().getName(); + mPeriods[i] = r.getPeriod(); + i++; } - }; - actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationListener); + SpinnerAdapter mSpinnerAdapter = new ArrayAdapter<String>(this, + android.R.layout.simple_spinner_dropdown_item, mRates); + + ActionBar.OnNavigationListener mNavigationListener = new ActionBar.OnNavigationListener() { + String[] rates = mRates; + long[] periods = mPeriods; + + public boolean onNavigationItemSelected(int position, long itemId) { + String rateName = rates[position]; + long period = periods[position]; + GraphFragment f = GraphFragment.newInstance(rateName, period); + getSupportFragmentManager().beginTransaction() + .replace(R.id.main_fragment, f, rates[position]).commit(); + return true; + } + }; + + actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationListener); - if (savedInstanceState != null) { - int selected = savedInstanceState.getInt(SELECTED_RATE); - actionBar.setSelectedNavigationItem(selected); + if (savedInstanceState != null) { + int selected = savedInstanceState.getInt(SELECTED_RATE); + actionBar.setSelectedNavigationItem(selected); + } } } @@ -50,4 +74,15 @@ public class GraphActivity extends I2PActivityBase { outState.putInt(SELECTED_RATE, getSupportActionBar().getSelectedNavigationIndex()); } + + private static class AlphaComparator implements Comparator<SummaryListener> { + public int compare(SummaryListener l, SummaryListener r) { + String lName = l.getRate().getRateStat().getName(); + String rName = r.getRate().getRateStat().getName(); + int rv = lName.compareTo(rName); + if (rv != 0) + return rv; + return (int) (l.getRate().getPeriod() - r.getRate().getPeriod()); + } + } } diff --git a/src/net/i2p/android/router/service/StatSummarizer.java b/src/net/i2p/android/router/service/StatSummarizer.java index f18d6f564..2af37f916 100644 --- a/src/net/i2p/android/router/service/StatSummarizer.java +++ b/src/net/i2p/android/router/service/StatSummarizer.java @@ -35,6 +35,9 @@ public class StatSummarizer implements Runnable { } } + /** list of SummaryListener instances */ + public List<SummaryListener> getListeners() { return _listeners; } + public SummaryListener getListener(String rateName, long period) { for (SummaryListener lsnr : _listeners) { if (lsnr.getName().equals(rateName + "." + period)) -- GitLab