aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java
new file mode 100644
index 000000000..99da9256d
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderLikingUsersView.java
@@ -0,0 +1,105 @@
+package org.wordpress.android.ui.reader.views;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.widget.LinearLayout;
+
+import org.wordpress.android.R;
+import org.wordpress.android.datasets.ReaderLikeTable;
+import org.wordpress.android.datasets.ReaderUserTable;
+import org.wordpress.android.models.ReaderPost;
+import org.wordpress.android.models.ReaderUserIdList;
+import org.wordpress.android.widgets.WPNetworkImageView;
+
+import java.util.ArrayList;
+
+/*
+ * LinearLayout which shows liking users - used by ReaderPostDetailFragment
+ */
+public class ReaderLikingUsersView extends LinearLayout {
+ private final int mLikeAvatarSz;
+
+ public ReaderLikingUsersView(Context context) {
+ this(context, null);
+ }
+
+ public ReaderLikingUsersView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ setOrientation(HORIZONTAL);
+ setGravity(Gravity.CENTER_VERTICAL);
+
+ mLikeAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_small);
+ }
+
+ public void showLikingUsers(final ReaderPost post) {
+ if (post == null) {
+ return;
+ }
+
+ final Handler handler = new Handler();
+ new Thread() {
+ @Override
+ public void run() {
+ // get avatar URLs of liking users up to the max, sized to fit
+ int maxAvatars = getMaxAvatars();
+ ReaderUserIdList avatarIds = ReaderLikeTable.getLikesForPost(post);
+ final ArrayList<String> avatars = ReaderUserTable.getAvatarUrls(avatarIds, maxAvatars, mLikeAvatarSz);
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ showLikingAvatars(avatars);
+ }
+ });
+ }
+ }.start();
+ }
+
+ /*
+ * returns count of avatars that can fit the current space
+ */
+ private int getMaxAvatars() {
+ int marginAvatar = getResources().getDimensionPixelSize(R.dimen.margin_extra_small);
+ int marginReader = getResources().getDimensionPixelSize(R.dimen.reader_detail_margin);
+ int likeAvatarSizeWithMargin = mLikeAvatarSz + (marginAvatar * 2);
+ int spaceForAvatars = getWidth() - (marginReader * 2);
+ return spaceForAvatars / likeAvatarSizeWithMargin;
+ }
+
+ /*
+ * note that the passed list of avatar urls has already been Photon-ized,
+ * so there's no need to do that here
+ */
+ private void showLikingAvatars(final ArrayList<String> avatarUrls) {
+ if (avatarUrls == null || avatarUrls.size() == 0) {
+ removeAllViews();
+ return;
+ }
+
+ // remove excess existing views
+ int numExistingViews = getChildCount();
+ if (numExistingViews > avatarUrls.size()) {
+ int numToRemove = numExistingViews - avatarUrls.size();
+ removeViews(numExistingViews - numToRemove, numToRemove);
+ }
+
+ int index = 0;
+ LayoutInflater inflater = LayoutInflater.from(getContext());
+ for (String url : avatarUrls) {
+ WPNetworkImageView imgAvatar;
+ // reuse existing view when possible, otherwise inflate a new one
+ if (index < numExistingViews) {
+ imgAvatar = (WPNetworkImageView) getChildAt(index);
+ } else {
+ imgAvatar = (WPNetworkImageView) inflater.inflate(R.layout.reader_like_avatar, this, false);
+ addView(imgAvatar);
+ }
+ imgAvatar.setImageUrl(url, WPNetworkImageView.ImageType.AVATAR);
+ index++;
+ }
+ }
+} \ No newline at end of file