Skip to content

Instantly share code, notes, and snippets.

@alexbatashev
Created May 9, 2014 12:29
Show Gist options
  • Save alexbatashev/7f22598e7e73d301a4ef to your computer and use it in GitHub Desktop.
Save alexbatashev/7f22598e7e73d301a4ef to your computer and use it in GitHub Desktop.
My adapter
package com.alexbat98.vkadmin.app.adapters;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import com.alexbat98.vkadmin.app.CommentsDialogFragment;
import com.alexbat98.vkadmin.app.R;
import com.alexbat98.vkadmin.app.api.VKCommunityArray;
import com.alexbat98.vkadmin.app.api.VKPhoto;
import com.alexbat98.vkadmin.app.api.VKUserArray;
import com.alexbat98.vkadmin.app.api.VKWallArray;
import com.alexbat98.vkadmin.app.util.ImageLoader;
import com.alexbat98.vkadmin.app.util.ItemList;
import com.alexbat98.vkadmin.app.util.Utils;
import com.squareup.picasso.Picasso;
import com.vk.sdk.VKAccessToken;
import com.vk.sdk.VKCaptchaDialog;
import com.vk.sdk.VKSdk;
import com.vk.sdk.VKSdkListener;
import com.vk.sdk.api.VKError;
import com.vk.sdk.api.VKParameters;
import com.vk.sdk.api.VKRequest;
import com.vk.sdk.api.VKResponse;
import org.json.JSONObject;
import java.util.ArrayList;
public class WallAdapter extends BaseAdapter {
private static VKWallArray wall;
private int count;
public ImageLoader imageLoader;
private Context mContext;
private static Drawable like_empty;
private static Drawable like_full;
private FragmentManager fm;
private String group_id;
private ItemList.Item item;
private int last_id = 0;
public WallAdapter(Context ctx, JSONObject response, FragmentManager f, String gid) {
super();
fm = f;
group_id = gid;
try {
wall = new VKWallArray(response);
count = wall.count;
item = wall.posts.lastItem;
imageLoader = new ImageLoader(ctx);
mContext = ctx;
like_empty = mContext.getResources().getDrawable(R.drawable.ic_like_empty);
like_full = mContext.getResources().getDrawable(R.drawable.ic_like_full);
}
catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getCount() {
return count;
}
@Override
public Object getItem(int i) {
return wall.getItem(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
View v = convertView;
ViewHolder viewHolder = new ViewHolder();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.wallfragment_post, viewGroup, false);
viewHolder.text = (TextView)v.findViewById(R.id.text);
viewHolder.name = (TextView)v.findViewById(R.id.post_author_title);
viewHolder.photo = (ImageView)v.findViewById(R.id.post_author_photo);
viewHolder.post_time = (TextView) v.findViewById(R.id.post_time);
viewHolder.comments_count = (TextView) v.findViewById(R.id.comments_count);
viewHolder.likes_count = (TextView) v.findViewById(R.id.likes_count);
viewHolder.like = (ImageButton) v.findViewById(R.id.like);
viewHolder.comment = (ImageButton) v.findViewById(R.id.comments_button);
viewHolder.docs_stub = (FrameLayout)v.findViewById(R.id.docs_stub);
viewHolder.sign = (TextView)v.findViewById(R.id.sign);
viewHolder.photo_stub = (TableLayout)v.findViewById(R.id.stub_photo);
viewHolder.sign_wrapper = (RelativeLayout)v.findViewById(R.id.sign_wrapper);
v.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder)v.getTag();
}
item = wall.posts.get(i);
String author;
String photo_100;
VKWallArray.VKPost post = (VKWallArray.VKPost) item.data;
if (post.from_id.charAt(0) == '-') {
VKCommunityArray.VKCommunity g = wall.groups.getItemByHash(post.from_id);
author = g.name;
photo_100 = g.photo_100;
} else {
VKUserArray.VKUser u = wall.users.getUserById(post.from_id);
author = u.first_name + " " + u.last_name;
photo_100 = u.photo_100;
}
String date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date(post.date * 1000)); // Compute time
viewHolder.name.setText(author); // Set author name
viewHolder.text.setText(post.text); // Set post text
viewHolder.post_time.setText(date); // Set date in dd/MM/yyyy HH:mm:ss format
viewHolder.comments_count.setText(Integer.toString(post.comments_count));
viewHolder.likes_count.setText(Integer.toString(post.likes_count));
if (post.is_liked == 0) {
viewHolder.like.setImageDrawable(like_empty);
viewHolder.like.setOnClickListener(new Like(post.id, post.owner_id, viewHolder));
} else {
viewHolder.like.setImageDrawable(like_full);
viewHolder.like.setOnClickListener(new Dislike(post.id, post.owner_id, viewHolder));
}
viewHolder.post_id = post.id;
final String pid = post.id;
final int c = count;
final TextView ctv = viewHolder.comments_count;
viewHolder.comment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CommentsDialogFragment dlg = new CommentsDialogFragment(group_id, pid, c, ctv);
dlg.show(fm, "Comments");
}
});
ImageView img = viewHolder.photo;
img.setTag(photo_100);
imageLoader.DisplayImage(photo_100, img);
if (post.attachments.hasPhoto) {
place_photos(v, post.attachments.photos);
} else {
viewHolder.photo_stub.setVisibility(View.GONE);
}
VKUserArray.VKUser u = wall.users.getUserById(post.signer_id);
if (u != null) {
String sign_name = u.first_name + " " + u.last_name;
viewHolder.sign.setText(sign_name);
viewHolder.sign.setVisibility(View.VISIBLE);
} else {
viewHolder.sign_wrapper.setVisibility(View.GONE);
}
return v;
}
private void place_photos(View view, ArrayList<VKPhoto> photos) {
int pcount = photos.size();
final View v = view;
TableRow first = (TableRow)v.findViewById(R.id.first_row);
TableRow second = (TableRow)v.findViewById(R.id.second_row);
TableRow third = (TableRow)v.findViewById(R.id.third_row);
for (int i = 0; i < pcount; i++) {
if (i == 1) {
ImageView img = new ImageView(mContext);
String url = photos.get(i).photo_807;
img.setTag(url);
Picasso.with(mContext).load(url).into(img);
if (first != null)
first.addView(img);
}
if (i == 2 || i == 3) {
ImageView img = new ImageView(mContext);
String url = photos.get(i).photo_807;
img.setTag(url);
Picasso.with(mContext).load(url).into(img);
if (second != null)
second.addView(img);
}
if (i > 3) {
ImageView img = new ImageView(mContext);
String url = photos.get(i).photo_807;
img.setTag(url);
Picasso.with(mContext).load(url).into(img);
if (third != null)
third.addView(img);
}
}
}
public class ViewHolder {
TextView text;
TextView name;
ImageView photo;
TextView post_time;
TextView comments_count;
TextView likes_count;
ImageButton like;
ImageButton comment;
String post_id = "0";
FrameLayout docs_stub;
TextView sign;
TableLayout photo_stub;
RelativeLayout sign_wrapper;
}
// Add and remove like listeners
public class Like implements View.OnClickListener {
private String mId;
private ViewHolder holder;
private String owner_id;
public Like(String id, String oid, ViewHolder h) {
mId = id;
holder = h;
owner_id = oid;
}
@Override
public void onClick(final View view) {
VKSdk.initialize(sdkListener, Utils.app_id);
VKRequest request = new VKRequest("likes.add", VKParameters.from(
"type", "post",
"item_id", mId,
"owner_id", owner_id));
final ViewHolder v = holder;
request.executeWithListener(new VKRequest.VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
super.onComplete(response);
JSONObject resp = response.json.optJSONObject("response");
v.likes_count.setText(resp.optString("likes"));
Log.d("VKADMIN", response.json.toString());
v.like.setImageDrawable(like_full);
v.like.setOnClickListener(new Dislike(mId, owner_id, v));
}
});
}
}
public class Dislike implements View.OnClickListener {
private String mId;
private ViewHolder holder;
private String owner_id;
public Dislike(String id, String oid, ViewHolder h) {
mId = id;
holder = h;
owner_id = oid;
}
@Override
public void onClick(View view) {
VKSdk.initialize(sdkListener, Utils.app_id);
final VKRequest request = new VKRequest("likes.delete", VKParameters.from(
"type", "post",
"item_id", mId,
"owner_id", owner_id));
final ViewHolder v = holder;
request.executeWithListener(new VKRequest.VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
super.onComplete(response);
JSONObject resp = response.json.optJSONObject("response");
v.likes_count.setText(resp.optString("likes"));
v.like.setImageDrawable(like_empty);
Log.d("VKADMIN", response.json.toString());
v.like.setOnClickListener(new Like(mId, owner_id, v));
}
});
}
}
private final VKSdkListener sdkListener = new VKSdkListener() {
@Override
public void onCaptchaError(VKError captchaError) {
new VKCaptchaDialog(captchaError).show();
}
@Override
public void onTokenExpired(VKAccessToken expiredToken) {
VKSdk.authorize(Utils.sMyScope);
}
@Override
public void onAccessDenied(VKError authorizationError) {
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment