diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index b83d39bdef9ee756751847d4987ce2b661b3d7a3..ec3762b5819aaf67c311a52346b104a6b85c8636 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -120,6 +120,18 @@ public class BlogFragment extends BaseFragment implements BlogPostListener { loadData(false); } + @Override + public void onResume() { + super.onResume(); + list.startPeriodicUpdate(); + } + + @Override + public void onPause() { + super.onPause(); + list.stopPeriodicUpdate(); + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if (myBlog) { diff --git a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java index 92526387f18948365615c9aa3aacc1c1e273f589..92f9430c42a1c7365f0add736b811114891c43ca 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java @@ -16,6 +16,7 @@ import android.view.ViewGroup; import android.widget.TextView; import org.briarproject.R; +import org.briarproject.android.util.AndroidUtils; import org.briarproject.android.util.TextAvatarView; import org.briarproject.api.blogs.Blog; import org.briarproject.api.sync.GroupId; @@ -121,8 +122,7 @@ class BlogListAdapter extends ui.status.setVisibility(VISIBLE); } else { long timestamp = item.getTimestamp(); - ui.date.setText( - DateUtils.getRelativeTimeSpanString(ctx, timestamp)); + ui.date.setText(AndroidUtils.formatDate(ctx, timestamp)); ui.date.setVisibility(VISIBLE); ui.avatar.setProblem(false); ui.status.setVisibility(GONE); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java index b1b9f322e7b05772d23da45cb42b09229b310232..a0060a1e73783cdd449bd8721107682c2c118cc8 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java @@ -11,6 +11,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.briarproject.R; +import org.briarproject.android.util.AndroidUtils; import org.briarproject.android.util.TrustIndicatorView; import org.briarproject.api.identity.Author; import org.briarproject.util.StringUtils; @@ -88,8 +89,7 @@ class BlogPostAdapter extends ui.trust.setTrustLevel(post.getAuthorStatus()); // date - ui.date.setText( - DateUtils.getRelativeTimeSpanString(ctx, post.getTimestamp())); + ui.date.setText(AndroidUtils.formatDate(ctx, post.getTimestamp())); // post body ui.body.setText(StringUtils.fromUtf8(post.getBody())); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java index 54ac2cdda54898ec9f60815fb3cbb63b2e9ef85c..dbb926493a36d78c06759e1d524bd11c7a3f1819 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java @@ -3,7 +3,6 @@ package org.briarproject.android.blogs; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; -import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -16,12 +15,15 @@ import org.briarproject.R; import org.briarproject.android.ActivityComponent; import org.briarproject.android.controller.handler.UiResultHandler; import org.briarproject.android.fragment.BaseFragment; +import org.briarproject.android.util.AndroidUtils; import org.briarproject.android.util.TrustIndicatorView; import org.briarproject.api.identity.Author; import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.MessageId; import org.briarproject.util.StringUtils; +import java.util.logging.Logger; + import javax.inject.Inject; import im.delight.android.identicons.IdenticonDrawable; @@ -29,16 +31,20 @@ import im.delight.android.identicons.IdenticonDrawable; import static android.view.View.GONE; import static android.widget.Toast.LENGTH_SHORT; import static org.briarproject.android.BriarActivity.GROUP_ID; +import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION; public class BlogPostFragment extends BaseFragment { public final static String TAG = BlogPostFragment.class.getName(); + private static final Logger LOG = Logger.getLogger(TAG); private final static String BLOG_POST_ID = "briar.BLOG_NAME"; private GroupId groupId; private MessageId postId; private BlogPostViewHolder ui; + private BlogPostItem post = null; + private Runnable refresher = null; @Inject BlogController blogController; @@ -88,10 +94,9 @@ public class BlogPostFragment extends BaseFragment { public void onResultUi(Boolean result) { listener.hideLoadingScreen(); if (result) { - BlogPostItem post = - blogController.getBlogPost(postId); + post = blogController.getBlogPost(postId); if (post != null) { - bind(post); + bind(); } } else { Toast.makeText(getActivity(), @@ -102,6 +107,18 @@ public class BlogPostFragment extends BaseFragment { }); } + @Override + public void onResume() { + super.onResume(); + startPeriodicUpdate(); + } + + @Override + public void onPause() { + super.onPause(); + stopPeriodicUpdate(); + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { @@ -118,14 +135,14 @@ public class BlogPostFragment extends BaseFragment { return TAG; } - private void bind(BlogPostItem post) { + private void bind() { Author author = post.getAuthor(); IdenticonDrawable d = new IdenticonDrawable(author.getId().getBytes()); ui.avatar.setImageDrawable(d); ui.authorName.setText(author.getName()); ui.trust.setTrustLevel(post.getAuthorStatus()); ui.date.setText( - DateUtils.getRelativeTimeSpanString(post.getTimestamp())); + AndroidUtils.formatDate(getActivity(), post.getTimestamp())); if (post.getTitle() != null) { ui.title.setText(post.getTitle()); @@ -154,4 +171,27 @@ public class BlogPostFragment extends BaseFragment { } } + private void startPeriodicUpdate() { + refresher = new Runnable() { + @Override + public void run() { + if (ui == null || post == null) return; + LOG.info("Updating Content..."); + + ui.date.setText(AndroidUtils + .formatDate(getActivity(), post.getTimestamp())); + ui.date.postDelayed(refresher, MIN_RESOLUTION); + } + }; + LOG.info("Adding Handler Callback"); + ui.date.postDelayed(refresher, MIN_RESOLUTION); + } + + private void stopPeriodicUpdate() { + if (refresher != null && ui != null) { + LOG.info("Removing Handler Callback"); + ui.date.removeCallbacks(refresher); + } + } + } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index eff999072c6d1e1b70c64922e2336eba701cdd1a..47d0cc42704dcf101b386c37a486dbea1b103a1e 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -17,7 +17,6 @@ import android.view.ViewGroup; import org.briarproject.R; import org.briarproject.android.ActivityComponent; -import org.briarproject.android.api.AndroidNotificationManager; import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.android.controller.handler.UiResultHandler; import org.briarproject.android.fragment.BaseFragment; @@ -108,6 +107,7 @@ public class FeedFragment extends BaseFragment implements @Override public void onResume() { super.onResume(); + list.startPeriodicUpdate(); feedController.onResume(); feedController.loadPosts( new UiResultHandler<Collection<BlogPostItem>>(getActivity()) { @@ -127,6 +127,7 @@ public class FeedFragment extends BaseFragment implements @Override public void onPause() { super.onPause(); + list.stopPeriodicUpdate(); feedController.onPause(); // TODO save list position in database/preferences? } @@ -216,4 +217,5 @@ public class FeedFragment extends BaseFragment implements } s.show(); } + } diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/org/briarproject/android/util/AndroidUtils.java index 0488e927f64c0ed7aa8a0566a73eb3633bc06485..fb47a7abe9e9603e4e1dfcdd97ee538b30f1bc6e 100644 --- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java +++ b/briar-android/src/org/briarproject/android/util/AndroidUtils.java @@ -30,7 +30,7 @@ import static android.text.format.DateUtils.WEEK_IN_MILLIS; public class AndroidUtils { - static final long MIN_RESOLUTION = MINUTE_IN_MILLIS; + public 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";