package com.telerik.app.utils; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import com.telerik.app.R; import com.telerik.app.model.ImageKind; import com.telerik.app.tasks.BitmapDownloadTask; import com.telerik.everlive.sdk.core.result.RequestResult; import com.telerik.everlive.sdk.core.result.RequestResultCallbackAction; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import java.util.UUID; import com.telerik.app.model.BaseViewModel; import com.telerik.app.model.MyUser; import com.telerik.app.model.Post; public class PostAdapter extends ArrayAdapter<Post> { private Context context; private int layoutResourceId; private List<Post> posts; public PostAdapter(Context context, int layoutResourceId, List<Post> posts) { super(context, layoutResourceId, posts); this.context = context; this.layoutResourceId = layoutResourceId; this.posts = posts; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; PostHolder holder = null; // Log.d("AndroidSandbox", "getView for position -> " + position); if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new PostHolder(); holder.userImage = (ImageView) row.findViewById(R.id.lvi_userImage); holder.postText = (TextView) row.findViewById(R.id.lvi_postText); holder.userName = (TextView) row.findViewById(R.id.lvi_userName); holder.postCreateDate = (TextView) row.findViewById(R.id.lvi_createDate); row.setTag(holder); } else { holder = (PostHolder) row.getTag(); } Post post = this.posts.get(position); if (post != null) { holder.postText.setText(post.getText()); DateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy"); holder.postCreateDate.setText(dateFormat.format(post.getCreatedAt()).toUpperCase()); if (post.getUserId() != null) { BaseViewModel.EverliveAPP.workWith().users(MyUser.class).getById(post.getUserId()). executeAsync(new MyRequestResultCallbackAction(holder, ((Activity) context).getCurrentFocus())); } else { holder.userName.setText("Anonymous"); BitmapDownloadTask task = new BitmapDownloadTask(this.getContext(), holder.userImage, ImageKind.User); task.execute((String[])null); } } return row; } static class PostHolder { private ImageView userImage; private TextView postText; private TextView userName; private TextView postCreateDate; } class MyRequestResultCallbackAction extends RequestResultCallbackAction { private PostHolder postHolder; private View parentView; MyRequestResultCallbackAction(PostHolder postHolder, View parentView) { this.postHolder = postHolder; this.parentView = parentView; } @Override public void invoke(RequestResult requestResult) { if (requestResult.getSuccess()) { final MyUser user = (MyUser) requestResult.getValue(); BaseViewModel.getInstance().addUser(user); final String userName = user.getDisplayName(); // Log.d("AndroidSandbox", "get display nane for user -> " + user.getDisplayName()); this.parentView.post(new Runnable() { @Override public void run() { postHolder.userName.setText(userName); } }); UUID pictureId = user.getPictureId(); BitmapDownloadTask task = new BitmapDownloadTask(this.parentView.getContext(), postHolder.userImage, ImageKind.User); task.execute(pictureId != null ? pictureId.toString() : null); } } } }