blob: 9272c2e4f6f7907f660c582d6e720684672394ff [file] [log] [blame]
package org.wordpress.android.ui.reader;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.view.View;
import org.wordpress.android.R;
import org.wordpress.android.datasets.ReaderCommentTable;
import org.wordpress.android.datasets.ReaderPostTable;
import org.wordpress.android.datasets.ReaderUserTable;
import org.wordpress.android.models.ReaderUserList;
import org.wordpress.android.ui.reader.adapters.ReaderUserAdapter;
import org.wordpress.android.ui.reader.utils.ReaderUtils;
import org.wordpress.android.ui.reader.views.ReaderRecyclerView;
import org.wordpress.android.util.DisplayUtils;
import org.wordpress.android.widgets.RecyclerItemDecoration;
/*
* displays a list of users who like a specific reader post
*/
public class ReaderUserListActivity extends AppCompatActivity {
private ReaderRecyclerView mRecyclerView;
private ReaderUserAdapter mAdapter;
private int mRestorePosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reader_activity_userlist);
setTitle(null);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
if (savedInstanceState != null) {
mRestorePosition = savedInstanceState.getInt(ReaderConstants.KEY_RESTORE_POSITION);
}
int spacingHorizontal = 0;
int spacingVertical = DisplayUtils.dpToPx(this, 1);
mRecyclerView = (ReaderRecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.addItemDecoration(new RecyclerItemDecoration(spacingHorizontal, spacingVertical));
long blogId = getIntent().getLongExtra(ReaderConstants.ARG_BLOG_ID, 0);
long postId = getIntent().getLongExtra(ReaderConstants.ARG_POST_ID, 0);
long commentId = getIntent().getLongExtra(ReaderConstants.ARG_COMMENT_ID, 0);
loadUsers(blogId, postId, commentId);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
int position = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition();
if (position > 0) {
outState.putInt(ReaderConstants.KEY_RESTORE_POSITION, position);
}
super.onSaveInstanceState(outState);
}
private ReaderUserAdapter getAdapter() {
if (mAdapter == null) {
mAdapter = new ReaderUserAdapter(this);
mAdapter.setDataLoadedListener(new ReaderInterfaces.DataLoadedListener() {
@Override
public void onDataLoaded(boolean isEmpty) {
if (!isEmpty && mRestorePosition > 0) {
mRecyclerView.scrollToPosition(mRestorePosition);
}
mRestorePosition = 0;
}
});
mRecyclerView.setAdapter(mAdapter);
}
return mAdapter;
}
private void loadUsers(final long blogId,
final long postId,
final long commentId) {
new Thread() {
@Override
public void run() {
final String title = getTitleString(blogId, postId, commentId);
final ReaderUserList users;
if (commentId == 0) {
// commentId is empty (not passed), so we're showing users who like a post
users = ReaderUserTable.getUsersWhoLikePost(
blogId,
postId,
ReaderConstants.READER_MAX_USERS_TO_DISPLAY);
} else {
// commentId is non-empty, so we're showing users who like a comment
users = ReaderUserTable.getUsersWhoLikeComment(
blogId,
commentId,
ReaderConstants.READER_MAX_USERS_TO_DISPLAY);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isFinishing()) {
setTitle(title);
getAdapter().setUsers(users);
}
}
});
}
}.start();
}
private String getTitleString(final long blogId,
final long postId,
final long commentId) {
final int numLikes;
final boolean isLikedByCurrentUser;
if (commentId == 0) {
numLikes = ReaderPostTable.getNumLikesForPost(blogId, postId);
isLikedByCurrentUser = ReaderPostTable.isPostLikedByCurrentUser(blogId, postId);
} else {
numLikes = ReaderCommentTable.getNumLikesForComment(blogId, postId, commentId);
isLikedByCurrentUser = ReaderCommentTable.isCommentLikedByCurrentUser(blogId, postId, commentId);
}
return ReaderUtils.getLongLikeLabelText(this, numLikes, isLikedByCurrentUser);
}
}