limit ui refresh rate

iNPUTmice created

Change summary

src/main/java/eu/siacs/conversations/Config.java                       |  3 
src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java | 19 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java    | 22 
src/main/java/eu/siacs/conversations/ui/ConversationActivity.java      | 49 
src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java     | 15 
src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java | 25 
src/main/java/eu/siacs/conversations/ui/VerifyOTRActivity.java         | 12 
src/main/java/eu/siacs/conversations/ui/XmppActivity.java              | 29 
8 files changed, 81 insertions(+), 93 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -21,7 +21,8 @@ public final class Config {
 	public static final int PAGE_SIZE = 50;
 	public static final int MAX_NUM_PAGES = 3;
 
-	public static final int  PROGRESS_UI_UPDATE_INTERVAL = 750;
+	public static final int PROGRESS_UI_UPDATE_INTERVAL = 750;
+	public static final int REFRESH_UI_INTERVAL = 500;
 
 	public static final boolean NO_PROXY_LOOKUP = false; //useful to debug ibb
 

src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java 🔗

@@ -144,24 +144,17 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
 
 	@Override
 	public void onConversationUpdate() {
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				updateView();
-			}
-		});
+		refreshUi();
 	}
 
 	@Override
 	public void onMucRosterUpdate() {
-		runOnUiThread(new Runnable() {
+		refreshUi();
+	}
 
-			@Override
-			public void run() {
-				updateView();
-			}
-		});
+	@Override
+	protected void refreshUiReal() {
+		updateView();
 	}
 
 	@Override

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -139,26 +139,18 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 
 	@Override
 	public void onRosterUpdate() {
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				invalidateOptionsMenu();
-				populateView();
-			}
-		});
+		refreshUi();
 	}
 
 	@Override
 	public void onAccountUpdate() {
-		runOnUiThread(new Runnable() {
+		refreshUi();
+	}
 
-			@Override
-			public void run() {
-				invalidateOptionsMenu();
-				populateView();
-			}
-		});
+	@Override
+	protected void refreshUiReal() {
+		invalidateOptionsMenu();
+		populateView();
 	}
 
 	@Override

src/main/java/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -1006,56 +1006,39 @@ public class ConversationActivity extends XmppActivity
 	}
 
 	@Override
-	public void onAccountUpdate() {
-		runOnUiThread(new Runnable() {
+	protected void refreshUiReal() {
+		updateConversationList();
+		if (conversationList.size() == 0) {
+			startActivity(new Intent(getApplicationContext(),
+					StartConversationActivity.class));
+			finish();
+		}
+		ConversationActivity.this.mConversationFragment.updateMessages();
+		updateActionBarTitle();
+	}
 
-			@Override
-			public void run() {
-				updateConversationList();
-				ConversationActivity.this.mConversationFragment.updateMessages();
-				updateActionBarTitle();
-			}
-		});
+	@Override
+	public void onAccountUpdate() {
+		this.refreshUi();
 	}
 
 	@Override
 	public void onConversationUpdate() {
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				updateConversationList();
-				if (conversationList.size() == 0) {
-					startActivity(new Intent(getApplicationContext(),
-								StartConversationActivity.class));
-					finish();
-				}
-				ConversationActivity.this.mConversationFragment.updateMessages();
-				updateActionBarTitle();
-			}
-		});
+		this.refreshUi();
 	}
 
 	@Override
 	public void onRosterUpdate() {
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				updateConversationList();
-				ConversationActivity.this.mConversationFragment.updateMessages();
-				updateActionBarTitle();
-			}
-		});
+		this.refreshUi();
 	}
 
 	@Override
 	public void OnUpdateBlocklist(Status status) {
+		this.refreshUi();
 		runOnUiThread(new Runnable() {
 			@Override
 			public void run() {
 				invalidateOptionsMenu();
-				ConversationActivity.this.mConversationFragment.updateMessages();
 			}
 		});
 	}

src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java 🔗

@@ -32,18 +32,17 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
 
 	@Override
 	public void onAccountUpdate() {
+		refreshUi();
+	}
+
+	@Override
+	protected void refreshUiReal() {
 		synchronized (this.accountList) {
 			accountList.clear();
 			accountList.addAll(xmppConnectionService.getAccounts());
 		}
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				invalidateOptionsMenu();
-				mAccountAdapter.notifyDataSetChanged();
-			}
-		});
+		invalidateOptionsMenu();
+		mAccountAdapter.notifyDataSetChanged();
 	}
 
 	@Override

src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -176,15 +176,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 
 	@Override
 	public void onRosterUpdate() {
-		runOnUiThread(new Runnable() {
-
-			@Override
-			public void run() {
-				if (mSearchEditText != null) {
-					filter(mSearchEditText.getText().toString());
-				}
-			}
-		});
+		this.refreshUi();
 	}
 
 	@Override
@@ -711,15 +703,14 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 
 	@Override
 	public void OnUpdateBlocklist(final Status status) {
-		runOnUiThread(new Runnable() {
+		refreshUi();
+	}
 
-			@Override
-			public void run() {
-				if (mSearchEditText != null) {
-					filter(mSearchEditText.getText().toString());
-				}
-			}
-		});
+	@Override
+	protected void refreshUiReal() {
+		if (mSearchEditText != null) {
+			filter(mSearchEditText.getText().toString());
+		}
 	}
 
 	public static class MyListFragment extends ListFragment {

src/main/java/eu/siacs/conversations/ui/VerifyOTRActivity.java 🔗

@@ -436,11 +436,11 @@ public class VerifyOTRActivity extends XmppActivity implements XmppConnectionSer
 	}
 
 	public void onConversationUpdate() {
-		runOnUiThread(new Runnable() {
-			@Override
-			public void run() {
-				updateView();
-			}
-		});
+		refreshUi();
+	}
+
+	@Override
+	protected void refreshUiReal() {
+		updateView();
 	}
 }

src/main/java/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -33,7 +33,9 @@ import android.nfc.NfcEvent;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.SystemClock;
 import android.preference.PreferenceManager;
 import android.text.InputType;
 import android.util.DisplayMetrics;
@@ -99,6 +101,33 @@ public abstract class XmppActivity extends Activity {
 	protected int mTheme;
 	protected boolean mUsingEnterKey = false;
 
+	private long mLastUiRefresh = 0;
+	private Handler mRefreshUiHandler = new Handler();
+	private Runnable mRefreshUiRunnable = new Runnable() {
+		@Override
+		public void run() {
+			mLastUiRefresh = SystemClock.elapsedRealtime();
+			refreshUiReal();
+		}
+	};
+
+
+	protected void refreshUi() {
+		final long diff = SystemClock.elapsedRealtime() - mLastUiRefresh;
+		if (diff > Config.REFRESH_UI_INTERVAL) {
+			mRefreshUiHandler.removeCallbacks(mRefreshUiRunnable);
+			runOnUiThread(mRefreshUiRunnable);
+		} else {
+			final long next = Config.REFRESH_UI_INTERVAL - diff;
+			mRefreshUiHandler.removeCallbacks(mRefreshUiRunnable);
+			mRefreshUiHandler.postDelayed(mRefreshUiRunnable,next);
+		}
+	}
+
+	protected void refreshUiReal() {
+
+	};
+
 	protected interface OnValueEdited {
 		public void onValueEdited(String value);
 	}