package com.ramostechie.android.otweet.layouts; //import java.io.IOException; //import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import com.ramostechie.android.otweet.R; import com.ramostechie.android.otweet.tasks.LoadImageAsyncTask; import com.ramostechie.android.otweet.tasks.LoadImageAsyncTask.LoadImageAsyncTaskResponder; import twitter4j.Status; import twitter4j.User; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.AsyncTask; //import android.os.Handler; import android.util.AttributeSet; //import android.util.Log; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class StatusListItem extends RelativeLayout implements LoadImageAsyncTaskResponder { /* thread version * final private Handler handler = new Handler(); * protected Drawable avatarDrawable; */ private ImageView avatarView; private TextView screenName; private TextView statusText; private AsyncTask<URL, Void, Drawable> latestLoadTask; public StatusListItem(Context context, AttributeSet attrs) { super(context, attrs); } /* thread version private Runnable finishedLoadingDrawable = new Runnable() { public void run() { finishedLoadingUserAvatar(); } }; */ /*@Override protected void onFinishInflate() { // TODO Auto-generated method stub super.onFinishInflate(); findViews(); }*/ /* thread version public void setStatus(Status status) { final User user = status.getUser(); findViews(); screenName.setText(user.getScreenName()); statusText.setText(status.getText()); avatarView.setImageDrawable(null); Thread loadUserAvatarThread = new Thread() { public void run() { try { avatarDrawable = Drawable.createFromStream( (InputStream) new URL(user.getProfileImageURL()).getContent(), user.getName()); } catch (IOException e) { Log.e(getClass().getName(), "Could not load image.", e); } // nothing on the activity view can be modified directly in the thread as it is in a higher // hierarchy, that's why we don't touch avatarView element here, we play with the avatarDrawable // and assign it to avatarView in the other method called by the post handler.post(finishedLoadingDrawable); } }; loadUserAvatarThread.start(); } protected void finishedLoadingUserAvatar() { avatarView.setImageDrawable(avatarDrawable); } */ public void setStatus(Status status) { final User user = status.getUser(); findViews(); screenName.setText(user.getScreenName()); statusText.setText(status.getText()); // cancel old task if (null != latestLoadTask) { latestLoadTask.cancel(true); } try { latestLoadTask = new LoadImageAsyncTask(this).execute(new URL(user.getProfileImageURL())); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void imageLoading() { avatarView.setImageDrawable(null); } public void imageLoadCancelled() { // do nothing } public void imageLoaded(Drawable drawable) { avatarView.setImageDrawable(drawable); } private void findViews() { avatarView = (ImageView)findViewById(R.id.user_avatar); screenName = (TextView)findViewById(R.id.status_user_name_text); statusText = (TextView)findViewById(R.id.status_text); } }