From b5b2692cee7db41f17e9099a48f1a0ee0a24cbb4 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Fri, 24 Jun 2011 04:21:19 +0000 Subject: [PATCH] log update handler --- .../android/router/activity/LogActivity.java | 82 ++++++++++++++++++- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/src/net/i2p/android/router/activity/LogActivity.java b/src/net/i2p/android/router/activity/LogActivity.java index a4ba44e85..907bc0b23 100644 --- a/src/net/i2p/android/router/activity/LogActivity.java +++ b/src/net/i2p/android/router/activity/LogActivity.java @@ -3,6 +3,7 @@ package net.i2p.android.router.activity; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; +import android.os.Handler; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -18,8 +19,13 @@ import net.i2p.android.router.R; public class LogActivity extends ListActivity { boolean errorsOnly; + private Handler _handler; + private Runnable _updater; + private ArrayAdapter<String> _adap; + private TextView _headerView; final static String ERRORS_ONLY = "errors_only"; + private static final int MAX = 250; @Override public void onCreate(Bundle savedInstanceState) @@ -54,17 +60,85 @@ public class LogActivity extends ListActivity { } // set the header - TextView tv = (TextView) getLayoutInflater().inflate(R.layout.logs_header, null); - tv.setText(header); + _headerView = (TextView) getLayoutInflater().inflate(R.layout.logs_header, null); + _headerView.setText(header); ListView lv = getListView(); - lv.addHeaderView(tv, "", false); - setListAdapter(new ArrayAdapter<String>(this, R.layout.logs_list_item, msgs)); + lv.addHeaderView(_headerView, "", false); + _adap = new ArrayAdapter<String>(this, R.layout.logs_list_item, msgs); + setListAdapter(_adap); +/*** // set the callback lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView parent, View view, int pos, long id) { // make it bigger or something } }); +***/ + + _handler = new Handler(); + _updater = new Updater(); + } + + @Override + public void onStart() { + super.onStart(); + _handler.removeCallbacks(_updater); + _handler.postDelayed(_updater, 2500); + } + + @Override + public void onStop() { + super.onStop(); + _handler.removeCallbacks(_updater); } + + private class Updater implements Runnable { + private int counter; + + public void run() { + I2PAppContext ctx = I2PAppContext.getCurrentContext(); + if (ctx != null) { + List<String> msgs; + if (errorsOnly) { + msgs = ctx.logManager().getBuffer().getMostRecentCriticalMessages(); + } else { + msgs = ctx.logManager().getBuffer().getMostRecentMessages(); + } + int sz = msgs.size(); + if (sz > 0) { + Collections.reverse(msgs); + String oldNewest = _adap.getCount() > 0 ? _adap.getItem(0) : null; + boolean changed = false; + for (int i = 0; i < sz; i++) { + String newItem = msgs.get(i); + if (newItem.equals(oldNewest)) + break; + _adap.insert(newItem, i); + changed = true; + } + int newSz = _adap.getCount(); + for (int i = newSz - 1; i > MAX; i--) { + _adap.remove(_adap.getItem(i)); + } + if (changed) { + // fixme update header + newSz = _adap.getCount(); + String header; + if (newSz == 0) { + header = "No messages"; + } else if (newSz == 1) { + header = "1 message"; + } else { + header = sz + " messages, newest first"; + } + _headerView.setText(header); + _adap.notifyDataSetChanged(); + } + } + } + _handler.postDelayed(this, 1500); + } + } + } -- GitLab