Created
May 9, 2014 12:29
-
-
Save alexbatashev/7f22598e7e73d301a4ef to your computer and use it in GitHub Desktop.
My adapter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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