aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java164
1 files changed, 164 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java b/WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java
new file mode 100644
index 000000000..34985a5de
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/blocks/HeaderNoteBlock.java
@@ -0,0 +1,164 @@
+package org.wordpress.android.ui.notifications.blocks;
+
+import android.content.Context;
+import android.text.Spannable;
+import android.text.TextUtils;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.TextView;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.wordpress.android.R;
+import org.wordpress.android.util.JSONUtils;
+import org.wordpress.android.ui.notifications.utils.NotificationsUtils;
+import org.wordpress.android.util.GravatarUtils;
+import org.wordpress.android.widgets.WPNetworkImageView;
+
+// Note header, displayed at top of detail view
+public class HeaderNoteBlock extends NoteBlock {
+
+ private final JSONArray mHeaderArray;
+
+ private final UserNoteBlock.OnGravatarClickedListener mGravatarClickedListener;
+ private Boolean mIsComment;
+ private int mAvatarSize;
+
+ private WPNetworkImageView.ImageType mImageType;
+
+ public HeaderNoteBlock(Context context, JSONArray headerArray, WPNetworkImageView.ImageType imageType,
+ OnNoteBlockTextClickListener onNoteBlockTextClickListener,
+ UserNoteBlock.OnGravatarClickedListener onGravatarClickedListener) {
+ super(new JSONObject(), onNoteBlockTextClickListener);
+
+ mHeaderArray = headerArray;
+ mImageType = imageType;
+ mGravatarClickedListener = onGravatarClickedListener;
+
+ if (context != null) {
+ mAvatarSize = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_small);
+ }
+ }
+
+ @Override
+ public BlockType getBlockType() {
+ return BlockType.USER_HEADER;
+ }
+
+ public int getLayoutResourceId() {
+ return R.layout.note_block_header;
+ }
+
+ @Override
+ public View configureView(View view) {
+ final NoteHeaderBlockHolder noteBlockHolder = (NoteHeaderBlockHolder)view.getTag();
+
+ Spannable spannable = NotificationsUtils.getSpannableContentForRanges(mHeaderArray.optJSONObject(0));
+ noteBlockHolder.nameTextView.setText(spannable);
+
+ noteBlockHolder.avatarImageView.setImageUrl(getAvatarUrl(), mImageType);
+ if (!TextUtils.isEmpty(getUserUrl())) {
+ noteBlockHolder.avatarImageView.setOnTouchListener(mOnGravatarTouchListener);
+ } else {
+ noteBlockHolder.avatarImageView.setOnTouchListener(null);
+ }
+
+ noteBlockHolder.snippetTextView.setText(getSnippet());
+
+ if (mIsComment) {
+ View footerView = view.findViewById(R.id.header_footer);
+ View footerCommentView = view.findViewById(R.id.header_footer_comment);
+ footerView.setVisibility(View.GONE);
+ footerCommentView.setVisibility(View.VISIBLE);
+ }
+
+ return view;
+ }
+
+ private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (getOnNoteBlockTextClickListener() != null) {
+ getOnNoteBlockTextClickListener().showDetailForNoteIds();
+ }
+ }
+ };
+
+ private String getUserName() {
+ return JSONUtils.queryJSON(mHeaderArray, "[0].text", "");
+ }
+
+ private String getAvatarUrl() {
+ return GravatarUtils.fixGravatarUrl(JSONUtils.queryJSON(mHeaderArray, "[0].media[0].url", ""), mAvatarSize);
+ }
+
+ private String getUserUrl() {
+ return JSONUtils.queryJSON(mHeaderArray, "[0].ranges[0].url", "");
+ }
+
+ private String getSnippet() {
+ return JSONUtils.queryJSON(mHeaderArray, "[1].text", "");
+ }
+
+ @Override
+ public Object getViewHolder(View view) {
+ return new NoteHeaderBlockHolder(view);
+ }
+
+ public void setIsComment(Boolean isComment) {
+ mIsComment = isComment;
+ }
+
+ private class NoteHeaderBlockHolder {
+ private final TextView nameTextView;
+ private final TextView snippetTextView;
+ private final WPNetworkImageView avatarImageView;
+
+ public NoteHeaderBlockHolder(View view) {
+ View rootView = view.findViewById(R.id.header_root_view);
+ rootView.setOnClickListener(mOnClickListener);
+ nameTextView = (TextView)view.findViewById(R.id.header_user);
+ snippetTextView = (TextView)view.findViewById(R.id.header_snippet);
+ avatarImageView = (WPNetworkImageView)view.findViewById(R.id.header_avatar);
+ }
+ }
+
+ private final View.OnTouchListener mOnGravatarTouchListener = new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+
+ int animationDuration = 150;
+
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ v.animate()
+ .scaleX(0.9f)
+ .scaleY(0.9f)
+ .alpha(0.5f)
+ .setDuration(animationDuration)
+ .setInterpolator(new DecelerateInterpolator());
+ } else if (event.getActionMasked() == MotionEvent.ACTION_UP
+ || event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
+ v.animate()
+ .scaleX(1.0f)
+ .scaleY(1.0f)
+ .alpha(1.0f)
+ .setDuration(animationDuration)
+ .setInterpolator(new DecelerateInterpolator());
+
+ if (event.getActionMasked() == MotionEvent.ACTION_UP && mGravatarClickedListener != null) {
+ // Fire the listener, which will load the site preview for the user's site
+ // In the future we can use this to load a 'profile view' (currently in R&D)
+ long siteId = Long.valueOf(JSONUtils.queryJSON(mHeaderArray, "[0].ranges[0].site_id", 0));
+ long userId = Long.valueOf(JSONUtils.queryJSON(mHeaderArray, "[0].ranges[0].id", 0));
+ String siteUrl = getUserUrl();
+ if (siteId > 0 && userId > 0) {
+ mGravatarClickedListener.onGravatarClicked(siteId, userId, siteUrl);
+ }
+ }
+ }
+
+ return true;
+ }
+ };
+}