/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.javielinux.adapters;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.androidquery.AQuery;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.request.LoadLinkRequest;
import com.javielinux.api.request.LoadUserRequest;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.api.response.LoadLinkResponse;
import com.javielinux.api.response.LoadUserResponse;
import com.javielinux.infos.InfoLink;
import com.javielinux.infos.InfoUsers;
import com.javielinux.tweettopics2.R;
import com.javielinux.utils.CacheData;
import com.javielinux.utils.Utils;
import java.util.ArrayList;
public class TweetsLinkAdapter extends ArrayAdapter<String> {
public static class ViewHolder {
public RelativeLayout containerLoading;
public TextView txtLoading;
public RelativeLayout containerImage;
public ImageView imgImage;
public TextView linkImage;
public RelativeLayout containerVideo;
public ImageView imgVideo;
public TextView txtTitleVideo;
public TextView txtDurationVideo;
public RelativeLayout containerLink;
public ImageView imgLink;
public TextView txtLinkURL;
public TextView txtLinkTitle;
public TextView txtLinkDescription;
public RelativeLayout containerUser;
public ImageView userAvatar;
public TextView txtUserName;
public TextView txtUserCounters;
public RelativeLayout containerHashTag;
public TextView txtHashTag;
}
private ArrayList<String> linksWithErrors = new ArrayList<String>();
private LoaderManager loaderManager;
private AQuery listAQuery;
private FragmentActivity activity;
public TweetsLinkAdapter(FragmentActivity activity, LoaderManager loaderManager, ArrayList<String> statii) {
super(activity, android.R.layout.simple_list_item_1, statii);
this.loaderManager = loaderManager;
listAQuery = new AQuery(activity);
this.activity = activity;
}
public static ViewHolder generateViewHolder(final FragmentActivity activity, View v) {
ViewHolder viewHolder = new ViewHolder();
viewHolder.containerLoading = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_loading);
viewHolder.txtLoading = (TextView) v.findViewById(R.id.tweet_links_row_loading_text);
viewHolder.containerImage = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_image);
viewHolder.imgImage = (ImageView) v.findViewById(R.id.tweet_links_row_image);
viewHolder.linkImage = (TextView) v.findViewById(R.id.tweet_links_row_image_link);
viewHolder.containerVideo = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_video);
viewHolder.imgVideo = (ImageView) v.findViewById(R.id.tweet_links_row_video);
viewHolder.txtTitleVideo = (TextView) v.findViewById(R.id.tweet_links_row_video_title);
viewHolder.txtDurationVideo = (TextView) v.findViewById(R.id.tweet_links_row_video_duration);
viewHolder.containerLink = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_link);
viewHolder.imgLink = (ImageView) v.findViewById(R.id.tweet_links_row_link_image);
viewHolder.txtLinkURL = (TextView) v.findViewById(R.id.tweet_links_row_link_url);
viewHolder.txtLinkTitle = (TextView) v.findViewById(R.id.tweet_links_row_link_title);
viewHolder.txtLinkDescription = (TextView) v.findViewById(R.id.tweet_links_row_link_description);
viewHolder.containerUser = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_user);
viewHolder.userAvatar = (ImageView) v.findViewById(R.id.tweet_links_row_user_avatar);
viewHolder.txtUserName = (TextView) v.findViewById(R.id.tweet_links_row_user_name);
viewHolder.txtUserCounters = (TextView) v.findViewById(R.id.tweet_links_row_user_counters);
viewHolder.containerHashTag = (RelativeLayout) v.findViewById(R.id.tweet_links_row_container_hashtag);
viewHolder.txtHashTag = (TextView) v.findViewById(R.id.tweet_links_row_hashtag_name);
return viewHolder;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String link = getItem(position);
View v = null;
ViewHolder viewHolder;
if (null == convertView) {
v = View.inflate(getContext(), R.layout.tweet_links_row, null);
viewHolder = generateViewHolder(activity, v);
v.setTag(generateViewHolder(activity, v));
} else {
v = convertView;
viewHolder = (ViewHolder) v.getTag();
}
if (linksWithErrors.contains(link)) {
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.VISIBLE);
viewHolder.txtHashTag.setText(link);
} else {
AQuery aQuery = listAQuery.recycle(convertView);
if (link.startsWith("@")) { // es un usuario
InfoUsers user = CacheData.getInstance().getCacheUser(link.replace("@", ""));
if (user!=null) {
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.VISIBLE);
viewHolder.containerHashTag.setVisibility(View.GONE);
aQuery.id(viewHolder.txtUserName).text("@"+user.getName());
aQuery.id(viewHolder.txtUserCounters).text(getContext().getString(R.string.info_user_counters, user.getTweets(), user.getFollowers(), user.getFollowing()));
aQuery.id(viewHolder.userAvatar).image(user.getUrlAvatar(), true, true, 0, R.drawable.avatar, aQuery.getCachedImage(R.drawable.avatar), 0);
} else {
viewHolder.containerLoading.setVisibility(View.VISIBLE);
aQuery.id(viewHolder.txtLoading).text(link);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
loadUser(link);
}
} else if (link.startsWith("#")) { // es un hashtag
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.VISIBLE);
viewHolder.txtHashTag.setText(link);
} else {
InfoLink il = CacheData.getInstance().getCacheInfoLink(link);
if (il == null) {
viewHolder.containerLoading.setVisibility(View.VISIBLE);
aQuery.id(viewHolder.txtLoading).text(link);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
loadLink(link, null);
} else if (!il.isExtensiveInfo()) {
viewHolder.containerLoading.setVisibility(View.VISIBLE);
aQuery.id(viewHolder.txtLoading).text(link);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
loadLink(link, il);
} else {
switch (il.getType()) {
case InfoLink.IMAGE:
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.VISIBLE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
aQuery.id(viewHolder.imgImage).image(il.getLinkImageLarge(), true, true, 0, R.drawable.icon_tweet_image_large, aQuery.getCachedImage(R.drawable.icon_tweet_image_large), 0);
aQuery.id(viewHolder.linkImage).text(il.getService());
break;
case InfoLink.VIDEO:
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.VISIBLE);
viewHolder.containerLink.setVisibility(View.GONE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
aQuery.id(viewHolder.imgVideo).image(il.getLinkImageLarge(), true, true, 0, R.drawable.icon_tweet_video_large, aQuery.getCachedImage(R.drawable.icon_tweet_video_large), 0);
aQuery.id(viewHolder.txtTitleVideo).text(il.getTitle());
if (il.getDurationVideo()==0) {
viewHolder.txtDurationVideo.setVisibility(View.GONE);
} else {
viewHolder.txtDurationVideo.setVisibility(View.VISIBLE);
aQuery.id(viewHolder.txtDurationVideo).text(getContext().getString(R.string.duration) + ": " + Utils.seconds2Time(il.getDurationVideo(), false));
}
break;
default:
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.containerImage.setVisibility(View.GONE);
viewHolder.containerVideo.setVisibility(View.GONE);
viewHolder.containerLink.setVisibility(View.VISIBLE);
viewHolder.containerUser.setVisibility(View.GONE);
viewHolder.containerHashTag.setVisibility(View.GONE);
viewHolder.txtLinkURL.setText(il.getLink());
viewHolder.txtLinkTitle.setText(il.getTitle());
if ("".equals(il.getDescription())) {
viewHolder.txtLinkDescription.setVisibility(View.GONE);
} else {
viewHolder.txtLinkDescription.setVisibility(View.VISIBLE);
viewHolder.txtLinkDescription.setText(il.getDescription());
}
if ("".equals(il.getLinkImageThumb())) {
viewHolder.imgLink.setVisibility(View.GONE);
} else {
viewHolder.imgLink.setVisibility(View.VISIBLE);
aQuery.id(viewHolder.imgLink).image(il.getLinkImageThumb(), true, true, 0, R.drawable.icon_tweet_link, aQuery.getCachedImage(R.drawable.icon_tweet_link), 0);
}
break;
}
}
}
}
return v;
}
void loadLink(final String link, InfoLink infoLink) {
APITweetTopics.execute(getContext(), loaderManager, new APIDelegate<LoadLinkResponse>() {
@Override
public void onResults(LoadLinkResponse result) {
notifyDataSetChanged();
}
@Override
public void onError(ErrorResponse error) {
linksWithErrors.add(link);
notifyDataSetChanged();
}
}, new LoadLinkRequest(link, infoLink));
}
void loadUser(final String user) {
APITweetTopics.execute(getContext(), loaderManager, new APIDelegate<LoadUserResponse>() {
@Override
public void onResults(LoadUserResponse result) {
notifyDataSetChanged();
}
@Override
public void onError(ErrorResponse error) {
linksWithErrors.add(user);
notifyDataSetChanged();
}
}, new LoadUserRequest(user.replace("@", "")));
}
}