/**
*
*/
package com.photoshare.service.news.view;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import com.photoshare.service.news.NewsBean;
import com.photoshare.service.photos.PhotoBean;
import com.photoshare.service.users.UserInfo;
import com.photoshare.tabHost.R;
import com.photoshare.utils.async.AsyncImageLoader.ImageCallback;
import com.photoshare.utils.async.AsyncUtils;
import com.photoshare.view.MiddlePhotoImageView;
import com.photoshare.view.UserTextView;
/**
* @author czj_yy
*
*/
public class NewsItemView {
private NewsBean news;
private UserTextView mNewsOwner;
private TextView mNewsDesc;
private UserTextView mNewsHolder;
private GridView mNewsPhotos;
private ImageView mNewsPhoto;
private TextView mNewsDate;
private View baseView;
private AsyncUtils async;
private Context context;
/**
* @param news
* @param view
* @param async
* @param context
*/
public NewsItemView(NewsBean news, View view, AsyncUtils async,
Context context) {
super();
this.news = news;
this.baseView = view;
this.async = async;
this.context = context;
}
public void applyView() {
switch (news.getEventType()) {
case FOLLOW:
case LIKE:
applyLikeView();
break;
case NULL:
case POPULAR:
applyPopularView();
break;
case COMMENT:
break;
default:
break;
}
}
private void applyLikeView() {
mNewsOwner = new UserTextView(
(TextView) baseView.findViewById(R.id.newsPopularName),
new UserInfo.UserInfoBuilder().ID(news.getUserId())
.Name(news.getUserName()).build(), news.getUserName());
mNewsOwner.registerListener(listener);
mNewsDesc = (TextView) baseView.findViewById(R.id.newsPopularDesc);
mNewsDate = (TextView) baseView.findViewById(R.id.newsPopularTime);
mNewsPhotos = (GridView) baseView.findViewById(R.id.newsPopularPhotos);
mNewsDesc.setText(news.getEventType().toString());
mNewsDate.setText(news.getEventTime());
try {
PhotoBean url = news.getPhotoUrls().get(0);
mNewsHolder = new UserTextView(
(TextView) baseView.findViewById(R.id.newsPopularHolder),
new UserInfo.UserInfoBuilder().ID(url.getUid())
.Name(url.getUname()).build(), url.getUname());
mNewsHolder.registerListener(listener);
mNewsPhotos.setAdapter(new NewsItemAdapter(news.getPhotoUrls()));
mNewsHolder.apply();
async.loadDrawableFromWeb(url.getUrlHead(), new ImageCallback() {
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
// TODO Auto-generated method stub
mNewsPhoto.setImageDrawable(imageDrawable);
}
public void imageDefault() {
// TODO Auto-generated method stub
mNewsPhoto.setImageResource(R.drawable.icon);
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
mNewsPhoto.setImageResource(R.drawable.icon);
} finally {
mNewsOwner.apply();
}
}
private void applyPopularView() {
mNewsOwner = new UserTextView(
(TextView) baseView.findViewById(R.id.newsUserName),
new UserInfo.UserInfoBuilder().ID(news.getUserId())
.Name(news.getUserName()).build(), news.getUserName());
mNewsOwner.registerListener(listener);
mNewsDesc = (TextView) baseView.findViewById(R.id.newsDescription);
mNewsDate = (TextView) baseView.findViewById(R.id.newsTime);
mNewsPhoto = (ImageView) baseView.findViewById(R.id.newsPhoto);
mNewsDesc.setText(news.getEventType().toString());
mNewsDate.setText(news.getEventTime());
try {
PhotoBean url = news.getPhotoUrls().get(0);
async.loadDrawableFromWeb(url.getUrlHead(), new ImageCallback() {
public void imageLoaded(Drawable imageDrawable, String imageUrl) {
// TODO Auto-generated method stub
mNewsPhoto.setImageDrawable(imageDrawable);
}
public void imageDefault() {
// TODO Auto-generated method stub
mNewsPhoto.setImageResource(R.drawable.icon);
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
mNewsPhoto.setImageResource(R.drawable.icon);
} finally {
mNewsOwner.apply();
}
}
class NewsItemAdapter extends ArrayAdapter<PhotoBean> {
/**
* @param context
* @param textViewResourceId
* @param objects
*/
public NewsItemAdapter(List<PhotoBean> urls) {
super(context, 0, urls);
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.simple_grid_item, null);
} else {
}
ImageView imageView = (ImageView) rowView.findViewById(R.id.image);
PhotoBean imageUrl = getItem(position);
MiddlePhotoImageView photo = new MiddlePhotoImageView(imageUrl,
imageView, async);
photo.registerListener(OnImageClickListener);
photo.apply();
return rowView;
}
}
private MiddlePhotoImageView.OnImageClickListener OnImageClickListener = new MiddlePhotoImageView.OnImageClickListener() {
public void OnImageClick(PhotoBean photo) {
// TODO Auto-generated method stub
if (mCallback != null) {
mCallback.OnNewsImageClick(photo);
}
}
public void OnImageLoaded(ImageView image, Drawable drawable, String url) {
// TODO Auto-generated method stub
if (mCallback != null) {
mCallback.OnUserHeadLoaded(mNewsPhoto, drawable, url);
}
}
public void OnImageDefaule(ImageView image) {
if (mCallback != null) {
mCallback.OnImageDefaule(mNewsPhoto);
}
}
};
private UserTextView.UserTextOnClickListener listener = new UserTextView.UserTextOnClickListener() {
public void OnClick(UserInfo info) {
// TODO Auto-generated method stub
if (mCallback != null) {
mCallback.OnNameClick(info);
}
}
};
private ICallback mCallback;
public void registerCallback(ICallback mCallback) {
this.mCallback = mCallback;
}
public interface ICallback {
public void OnNameClick(UserInfo info);
public void OnNewsImageClick(PhotoBean photo);
public void OnUserHeadLoaded(ImageView image, Drawable drawable,
String url);
public void OnImageDefaule(ImageView image);
}
}