diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java index a949dc50089364d47b03730a424629d9331bf50d..02a78caccbc400c3b133887b3d56740ed6882594 100644 --- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java +++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java @@ -9,7 +9,6 @@ import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; @@ -63,9 +62,9 @@ public class ForumActivity extends BriarActivity implements ForumController.ForumPostListener { static final String FORUM_NAME = "briar.FORUM_NAME"; - private static final int REQUEST_FORUM_SHARED = 3; - private final static int UNDEFINED = -1; + private static final int REQUEST_FORUM_SHARED = 3; + private static final int UNDEFINED = -1; private static final String KEY_INPUT_VISIBILITY = "inputVisibility"; private static final String KEY_REPLY_ID = "replyId"; @@ -77,6 +76,9 @@ public class ForumActivity extends BriarActivity implements @Inject protected ForumController forumController; + // Protected access for testing + protected ForumAdapter forumAdapter; + private BriarRecyclerView recyclerView; private EditText textInput; private ViewGroup inputContainer; @@ -84,8 +86,6 @@ public class ForumActivity extends BriarActivity implements private volatile GroupId groupId = null; - protected ForumAdapter forumAdapter; - @Override public void onCreate(final Bundle state) { super.onCreate(state); @@ -99,50 +99,46 @@ public class ForumActivity extends BriarActivity implements String forumName = i.getStringExtra(FORUM_NAME); if (forumName != null) setTitle(forumName); + forumAdapter = new ForumAdapter(); + inputContainer = (ViewGroup) findViewById(R.id.text_input_container); inputContainer.setVisibility(GONE); textInput = (EditText) findViewById(R.id.input_text); recyclerView = (BriarRecyclerView) findViewById(R.id.forum_discussion_list); + recyclerView.setAdapter(forumAdapter); linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setEmptyText(getString(R.string.no_forum_posts)); recyclerView.showProgressBar(); - forumController.loadForum(groupId, - new UiResultHandler<Boolean>(this) { - @Override - public void onResultUi(Boolean result) { - if (result) { - Forum forum = forumController.getForum(); - if (forum != null) setTitle(forum.getName()); - forumAdapter = new ForumAdapter( - forumController.getForumEntries()); - recyclerView.setAdapter(forumAdapter); - recyclerView.startPeriodicUpdate(); - if (state != null) { - byte[] replyId = - state.getByteArray(KEY_REPLY_ID); - if (replyId != null) { - forumAdapter.setReplyEntryById(replyId); - } - } - recyclerView.showData(); - } else { - // TODO Maybe an error dialog ? - finish(); - } + forumController.loadForum(groupId, new UiResultHandler<Boolean>(this) { + @Override + public void onResultUi(Boolean result) { + if (result) { + Forum forum = forumController.getForum(); + if (forum != null) setTitle(forum.getName()); + forumAdapter.setEntries(forumController.getForumEntries()); + if (state != null) { + byte[] replyId = state.getByteArray(KEY_REPLY_ID); + if (replyId != null) + forumAdapter.setReplyEntryById(replyId); } - }); + recyclerView.showData(); + } else { + // TODO Maybe an error dialog ? + finish(); + } + } + }); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); - inputContainer - .setVisibility( - savedInstanceState.getBoolean(KEY_INPUT_VISIBILITY) ? - VISIBLE : GONE); + inputContainer.setVisibility( + savedInstanceState.getBoolean(KEY_INPUT_VISIBILITY) ? + VISIBLE : GONE); } @@ -250,18 +246,14 @@ public class ForumActivity extends BriarActivity implements super.onResume(); notificationManager.blockNotification(groupId); notificationManager.clearForumPostNotification(groupId); - if (recyclerView.getRecyclerView().getAdapter() != null) { - recyclerView.startPeriodicUpdate(); - } + recyclerView.startPeriodicUpdate(); } @Override public void onPause() { super.onPause(); notificationManager.unblockNotification(groupId); - if (recyclerView.getRecyclerView().getAdapter() != null) { - recyclerView.stopPeriodicUpdate(); - } + recyclerView.stopPeriodicUpdate(); } public void sendMessage(View view) { @@ -373,23 +365,25 @@ public class ForumActivity extends BriarActivity implements public class ForumAdapter extends RecyclerView.Adapter<ForumViewHolder> { - private final List<ForumEntry> forumEntries; + private final List<ForumEntry> forumEntries = new ArrayList<>(); + private final Map<ForumEntry, ValueAnimator> animatingEntries = + new HashMap<>(); + // highlight not dependant on time private ForumEntry replyEntry; // temporary highlight private ForumEntry addedEntry; - Map<ForumEntry, ValueAnimator> animatingEntries = new HashMap<>(); - - ForumAdapter(@NonNull List<ForumEntry> forumEntries) { - this.forumEntries = forumEntries; - } private ForumEntry getReplyEntry() { return replyEntry; } - void addEntry(int index, ForumEntry entry, - boolean isScrolling) { + void setEntries(List<ForumEntry> entries) { + forumEntries.clear(); + forumEntries.addAll(entries); + } + + void addEntry(int index, ForumEntry entry, boolean isScrolling) { forumEntries.add(index, entry); boolean isShowingDescendants = false; if (entry.getLevel() > 0) { @@ -559,7 +553,7 @@ public class ForumActivity extends BriarActivity implements return null; } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @TargetApi(11) private void animateFadeOut(final ForumViewHolder ui, final ForumEntry addedEntry) { ui.setIsRecyclable(false); @@ -605,8 +599,8 @@ public class ForumActivity extends BriarActivity implements } @Override - public ForumViewHolder onCreateViewHolder( - ViewGroup parent, int viewType) { + public ForumViewHolder onCreateViewHolder(ViewGroup parent, + int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.forum_discussion_cell, parent, false); return new ForumViewHolder(v); @@ -730,5 +724,4 @@ public class ForumActivity extends BriarActivity implements } } - } diff --git a/briar-android/test/java/briarproject/activity/TestForumActivity.java b/briar-android/test/java/briarproject/activity/TestForumActivity.java index f73d83e18f66d12e8b549b9ba5584210c90a76b2..9455ace7e9639dfca4eb22f5717903f21bb2bd5c 100644 --- a/briar-android/test/java/briarproject/activity/TestForumActivity.java +++ b/briar-android/test/java/briarproject/activity/TestForumActivity.java @@ -9,7 +9,7 @@ import org.briarproject.android.forum.ForumControllerImpl; import org.mockito.Mockito; /** - * This class exposes the SetupController and offers the possibility to + * This class exposes the ForumController and offers the possibility to * override it. */ public class TestForumActivity extends ForumActivity {