/**
* @author Jonathan
*/
package com.abewy.android.apps.klyph.adapter.subAdapter;
import java.lang.ref.WeakReference;
import java.util.List;
import java.util.Map;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.abewy.android.apps.klyph.Klyph;
import com.abewy.android.apps.klyph.adapter.SpecialLayout;
import com.abewy.android.apps.klyph.adapter.holder.IStreamHolder;
import com.abewy.android.apps.klyph.adapter.holder.StreamHolder;
import com.abewy.android.apps.klyph.core.fql.Link;
import com.abewy.android.apps.klyph.core.fql.Photo;
import com.abewy.android.apps.klyph.core.fql.Status;
import com.abewy.android.apps.klyph.core.fql.Stream;
import com.abewy.android.apps.klyph.core.fql.Tag;
import com.abewy.android.apps.klyph.core.fql.Video;
import com.abewy.android.apps.klyph.util.DateUtil;
import com.abewy.android.apps.klyph.util.KlyphUtil;
import com.abewy.android.apps.klyph.util.TextViewUtil;
public class StreamHeader extends StreamMedia
{
private final int specialLayout;
public StreamHeader(int specialLayout)
{
super();
this.specialLayout = specialLayout;
}
public void mergeData(IStreamHolder holder, final Stream stream)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getAuthorProfileImage(), holder.getStory(),
holder.getPostTime(), stream.getActor_id(),
stream.getActor_name(), stream.getActor_type(),
stream.getActor_pic(), stream.getTarget_id(),
stream.getTarget_name(), stream.getTarget_type(),
stream.getDescription(), stream.getCreated_time(),
stream.getDescription_tags());
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
}
public void mergeData(StreamHolder holder, final Stream stream, boolean subStream)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getSharedAuthorProfileImage(), holder.getSharedStory(),
holder.getSharedPostTime(), stream.getActor_id(),
stream.getActor_name(), stream.getActor_type(),
stream.getActor_pic(), stream.getTarget_id(),
stream.getTarget_name(), stream.getTarget_type(),
stream.getDescription(), stream.getCreated_time(),
stream.getDescription_tags());
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
((ViewGroup) holder.getSharedAuthorProfileImage().getParent().getParent()).setVisibility(View.VISIBLE);
}
public void mergeData(StreamHolder holder, final Stream stream, final Link link)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getSharedAuthorProfileImage(), holder.getSharedStory(),
holder.getSharedPostTime(), link.getOwner(),
link.getOwner_name(), link.getOwner_type(),
link.getOwner_pic(), link.getVia_id(), link.getVia_name(),
link.getVia_type(), null, link.getCreated_time(), null);
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
((ViewGroup) holder.getSharedAuthorProfileImage().getParent().getParent()).setVisibility(View.VISIBLE);
}
public void mergeData(StreamHolder holder, final Stream stream, final Photo photo)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getSharedAuthorProfileImage(), holder.getSharedStory(),
holder.getSharedPostTime(), photo.getOwner(),
photo.getOwner_name(), photo.getOwner_type(),
photo.getOwner_pic(), photo.getTarget_id(),
photo.getTarget_name(), photo.getTarget_type(), null,
photo.getCreated(), null);
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
((ViewGroup) holder.getSharedAuthorProfileImage().getParent().getParent()).setVisibility(View.VISIBLE);
}
public void mergeData(StreamHolder holder, final Stream stream, final Video video)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getSharedAuthorProfileImage(), holder.getSharedStory(),
holder.getSharedPostTime(), video.getOwner(),
video.getOwner_name(), video.getOwner_type(),
video.getOwner_pic(), null, null, null, null,
video.getCreated_time(), null);
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
((ViewGroup) holder.getSharedAuthorProfileImage().getParent().getParent()).setVisibility(View.VISIBLE);
}
public void mergeData(StreamHolder holder, final Stream stream, final Status status)
{
HeaderHolder headerHolder = new HeaderHolder(
holder.getSharedAuthorProfileImage(), holder.getSharedStory(),
holder.getSharedPostTime(), status.getUid(),
status.getUid_name(), status.getUid_type(),
status.getUid_pic(), null, null, null, null,
status.getTime(), null);
manageAuthorImage(headerHolder, stream);
manageStory(headerHolder);
manageTime(headerHolder);
((ViewGroup) holder.getSharedAuthorProfileImage().getParent().getParent()).setVisibility(View.VISIBLE);
}
private void manageAuthorImage(final HeaderHolder holder, final Stream stream)
{
if (holder.getImageView().get() != null)
{
final ImageView view = holder.getImageView().get();
loadImage(view, holder.getAuthorPic(), KlyphUtil.getProfilePlaceHolder(view.getContext()), stream);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = Klyph.getIntentForParams(getContext(view),
holder.getAuthorId(), holder.getAuthorName(),
holder.getAuthorType());
view.getContext().startActivity(intent);
}
});
view.setVisibility(View.VISIBLE);
((ViewGroup) view.getParent()).setVisibility(View.VISIBLE);
}
}
private void manageStory(HeaderHolder holder)
{
if (holder.getStoryView().get() != null)
{
TextView view = holder.getStoryView().get();
if (holder.getStory() != null && holder.getStory().length() > 0)
{
view.setText(holder.getStory());
if (holder.getTags() != null && holder.getTags().size() > 0)
{
TextViewUtil.setTextClickableForTags(getContext(view), view,
holder.getTags(), specialLayout == SpecialLayout.STREAM_DETAIL);
}
}
else
{
view.setText(holder.getAuthorName());
TextViewUtil.setElementClickable(getContext(view), view,
holder.getAuthorName(), holder.getAuthorId(),
holder.getAuthorType(), specialLayout == SpecialLayout.STREAM_DETAIL);
if (holder.getTargetId() != null && holder.getTargetId().length() > 0
&& holder.getTargetName().length() > 0
&& !holder.getTargetId().equals(holder.getAuthorId()))
{
view.append(" > " + holder.getTargetName());
TextViewUtil.setElementClickable(getContext(view), view,
holder.getTargetName(), holder.getTargetId(),
holder.getTargetType(), specialLayout == SpecialLayout.STREAM_DETAIL);
}
}
view.setVisibility(View.VISIBLE);
}
}
private void manageTime(HeaderHolder holder)
{
if (holder.getTimeView().get() != null)
{
holder.getTimeView()
.get()
.setText(
DateUtil.timeAgoInWords(getContext(holder.getTimeView().get()),
holder.getTime()));
holder.getTimeView().get().setVisibility(View.VISIBLE);
}
}
private static class HeaderHolder
{
private final WeakReference<ImageView> imageView;
private final WeakReference<TextView> storyView;
private final WeakReference<TextView> timeView;
private final String authorId;
private final String authorName;
private final String authorType;
private final String authorPic;
private final String targetId;
private final String targetName;
private final String targetType;
private final String story;
private final String time;
private final Map<String, List<Tag>> tags;
public HeaderHolder(ImageView imageView, TextView storyView,
TextView timeView, String authorId, String authorName,
String authorType, String authorPic, String targetId,
String targetName, String targetType, String story,
String time, Map<String, List<Tag>> tags)
{
this.imageView = new WeakReference<ImageView>(imageView);
this.storyView = new WeakReference<TextView>(storyView);
this.timeView = new WeakReference<TextView>(timeView);
this.authorId = authorId;
this.authorName = authorName;
this.authorType = authorType;
this.authorPic = authorPic;
this.targetId = targetId;
this.targetName = targetName;
this.targetType = targetType;
this.story = story;
this.time = time;
this.tags = tags;
}
public WeakReference<ImageView> getImageView()
{
return imageView;
}
public WeakReference<TextView> getStoryView()
{
return storyView;
}
public WeakReference<TextView> getTimeView()
{
return timeView;
}
public String getAuthorId()
{
return authorId;
}
public String getAuthorName()
{
return authorName;
}
public String getAuthorType()
{
return authorType;
}
public String getAuthorPic()
{
return authorPic;
}
public String getTargetId()
{
return targetId;
}
public String getTargetName()
{
return targetName;
}
public String getTargetType()
{
return targetType;
}
public String getStory()
{
return story;
}
public String getTime()
{
return time;
}
public Map<String, List<Tag>> getTags()
{
return tags;
}
}
}