diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index e113a9a08577a2ab832c730755652840f3e8d1a0..683bc6bd409b36ef012ea9e4b9884a17b2e2b3a9 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -153,7 +153,6 @@ public class ContactListFragment extends BaseFragment implements EventListener { list.setLayoutManager(new LinearLayoutManager(getContext())); list.setAdapter(adapter); list.setEmptyText(getString(R.string.no_contacts)); - list.periodicallyUpdateContent(); return contentView; } @@ -183,6 +182,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { super.onResume(); eventBus.addListener(this); loadContacts(); + list.startPeriodicUpdate(); } @Override @@ -190,6 +190,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { super.onPause(); adapter.clear(); eventBus.removeListener(this); + list.stopPeriodicUpdate(); } private void loadContacts() { diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java index c85e84d8c449cbdda01c18b7420e76676347603d..4a936be8deef6a2ac8ee681a4a36b8bfcbdc94e7 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java @@ -170,7 +170,6 @@ public class ConversationActivity extends BriarActivity list.setLayoutManager(new LinearLayoutManager(this)); list.setAdapter(adapter); list.setEmptyText(getString(R.string.no_private_messages)); - list.periodicallyUpdateContent(); content = (EditText) findViewById(R.id.input_text); sendButton = findViewById(R.id.btn_send); @@ -205,6 +204,7 @@ public class ConversationActivity extends BriarActivity notificationManager.blockNotification(groupId); notificationManager.clearPrivateMessageNotification(groupId); loadData(); + list.startPeriodicUpdate(); } @Override @@ -212,6 +212,7 @@ public class ConversationActivity extends BriarActivity super.onPause(); eventBus.removeListener(this); notificationManager.unblockNotification(groupId); + list.stopPeriodicUpdate(); if (isFinishing()) markMessagesRead(); } diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java index dec9c69847111484b8dfb41dfaebb712cbfbe3e2..a949dc50089364d47b03730a424629d9331bf50d 100644 --- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java +++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java @@ -119,7 +119,7 @@ public class ForumActivity extends BriarActivity implements forumAdapter = new ForumAdapter( forumController.getForumEntries()); recyclerView.setAdapter(forumAdapter); - recyclerView.periodicallyUpdateContent(); + recyclerView.startPeriodicUpdate(); if (state != null) { byte[] replyId = state.getByteArray(KEY_REPLY_ID); @@ -250,12 +250,18 @@ public class ForumActivity extends BriarActivity implements super.onResume(); notificationManager.blockNotification(groupId); notificationManager.clearForumPostNotification(groupId); + if (recyclerView.getRecyclerView().getAdapter() != null) { + recyclerView.startPeriodicUpdate(); + } } @Override public void onPause() { super.onPause(); notificationManager.unblockNotification(groupId); + if (recyclerView.getRecyclerView().getAdapter() != null) { + recyclerView.stopPeriodicUpdate(); + } } public void sendMessage(View view) { diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java index 1916bce322bd3fbc27663b28aadbf2d07f5f6fc5..cca381a80fdcfd86a403740080cd4c000f170b4d 100644 --- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java +++ b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java @@ -84,7 +84,6 @@ public class ForumListFragment extends BaseEventFragment implements list.setLayoutManager(new LinearLayoutManager(getActivity())); list.setAdapter(adapter); list.setEmptyText(getString(R.string.no_forums)); - list.periodicallyUpdateContent(); snackbar = Snackbar.make(list, "", LENGTH_INDEFINITE); snackbar.getView().setBackgroundResource(R.color.briar_primary); @@ -111,6 +110,7 @@ public class ForumListFragment extends BaseEventFragment implements loadForumHeaders(); loadAvailableForums(); + list.startPeriodicUpdate(); } @Override @@ -118,6 +118,7 @@ public class ForumListFragment extends BaseEventFragment implements super.onPause(); adapter.clear(); + list.stopPeriodicUpdate(); } @Override diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/org/briarproject/android/util/AndroidUtils.java index 077dc8aa58f95d366a678bb18fffbd3f403047d7..0488e927f64c0ed7aa8a0566a73eb3633bc06485 100644 --- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java +++ b/briar-android/src/org/briarproject/android/util/AndroidUtils.java @@ -30,6 +30,8 @@ import static android.text.format.DateUtils.WEEK_IN_MILLIS; public class AndroidUtils { + static final long MIN_RESOLUTION = MINUTE_IN_MILLIS; + // Fake Bluetooth address returned by BluetoothAdapter on API 23 and later private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00"; @@ -97,22 +99,20 @@ public class AndroidUtils { } public static String formatDate(Context ctx, long time) { - // update BriarRecyclerView#DEFAULT_REFRESH_INTERVAL along with this - long minResolution = MINUTE_IN_MILLIS; int flags = FORMAT_ABBREV_RELATIVE | FORMAT_SHOW_DATE | FORMAT_ABBREV_TIME | FORMAT_ABBREV_MONTH; long diff = System.currentTimeMillis() - time; - if (diff < minResolution) return ctx.getString(R.string.now); + if (diff < MIN_RESOLUTION) return ctx.getString(R.string.now); if (diff >= DAY_IN_MILLIS && diff < WEEK_IN_MILLIS) { // also show time when older than a day, but newer than a week - return DateUtils.getRelativeDateTimeString(ctx, time, minResolution, - WEEK_IN_MILLIS, flags).toString(); + return DateUtils.getRelativeDateTimeString(ctx, time, + MIN_RESOLUTION, WEEK_IN_MILLIS, flags).toString(); } // otherwise just show "...ago" or date string return DateUtils .getRelativeTimeSpanString(time, System.currentTimeMillis(), - minResolution, flags).toString(); + MIN_RESOLUTION, flags).toString(); } } diff --git a/briar-android/src/org/briarproject/android/util/BriarRecyclerView.java b/briar-android/src/org/briarproject/android/util/BriarRecyclerView.java index 6cd36dd6b0e71c06c815d7f4f5d0cf44ebb7d2fd..40884487aa17cb7a4e1bc0a496c3599163b7d026 100644 --- a/briar-android/src/org/briarproject/android/util/BriarRecyclerView.java +++ b/briar-android/src/org/briarproject/android/util/BriarRecyclerView.java @@ -17,6 +17,7 @@ import org.briarproject.R; import java.util.logging.Logger; import static android.text.format.DateUtils.MINUTE_IN_MILLIS; +import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION; public class BriarRecyclerView extends FrameLayout { @@ -28,7 +29,7 @@ public class BriarRecyclerView extends FrameLayout { private boolean isScrollingToEnd = false; private final Logger LOG = Logger.getLogger(getClass().getName()); - private final long DEFAULT_REFRESH_INTERVAL = MINUTE_IN_MILLIS; + private final long DEFAULT_REFRESH_INTERVAL = MIN_RESOLUTION; public BriarRecyclerView(Context context) { this(context, null, 0); @@ -52,10 +53,7 @@ public class BriarRecyclerView extends FrameLayout { @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - if (refresher != null) { - LOG.info("Removing Handler Callback"); - removeCallbacks(refresher); - } + stopPeriodicUpdate(); } private void initViews() { @@ -172,7 +170,7 @@ public class BriarRecyclerView extends FrameLayout { return this.recyclerView; } - public void periodicallyUpdateContent() { + public void startPeriodicUpdate() { if (recyclerView == null || recyclerView.getAdapter() == null) { throw new IllegalStateException("Need to call setAdapter() first!"); } @@ -188,4 +186,11 @@ public class BriarRecyclerView extends FrameLayout { postDelayed(refresher, DEFAULT_REFRESH_INTERVAL); } + public void stopPeriodicUpdate() { + if (refresher != null) { + LOG.info("Removing Handler Callback"); + removeCallbacks(refresher); + } + } + }