package net.dev123.yibo.service.task; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.util.StringUtil; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.mblog.entity.User; import net.dev123.yibo.GroupActivity; import net.dev123.yibo.SocialGraphActivity; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.ResourceBook; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.service.adapter.CacheAdapter; import net.dev123.yibo.service.adapter.SocialGraphListAdapter; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; public class SocialGraphTask extends AsyncTask<Void, Void, List<User>> { private static final String TAG = "SocialGraphTask"; public static final int TYPE_FOLLOWERS = 0x001; public static final int TYPE_FRIENDS = 0x002; public static final int TYPE_BLOCKS = 0x003; private MicroBlog microBlog = null; private Context context; private CacheAdapter<User> adapter = null; private Paging<User> paging; private int socialGraphType = TYPE_FOLLOWERS; private User user; private String message; private LocalAccount account; public SocialGraphTask(CacheAdapter<User> adapter, User user) { this.adapter = adapter; this.context = adapter.getContext(); this.user = user; this.account = adapter.getAccount(); this.microBlog = GlobalVars.getMicroBlog(account); this.paging = adapter.getPaging(); if (adapter instanceof SocialGraphListAdapter) { this.socialGraphType = ((SocialGraphListAdapter)adapter).getSocialGraphType(); } } @Override protected void onPreExecute() { if (adapter instanceof SocialGraphListAdapter) { if (context instanceof SocialGraphActivity) { ((SocialGraphActivity)context).showLoadingFooter(); } else if (context instanceof GroupActivity) { ((GroupActivity)context).showLoadingFooter(); } } } @Override protected List<User> doInBackground(Void... params) { if (adapter == null || microBlog == null || user == null) { return null; } String myUserId = null; if (account.getUser() != null) { myUserId = account.getUser().getId(); } boolean isSelf = StringUtil.isEquals(myUserId, user.getId()); List<User> listUserInfo = null; try { if (paging.moveToNext()) { if (socialGraphType == TYPE_FOLLOWERS) { listUserInfo = microBlog.getUserFollowers(user.getId(), paging); } else if (socialGraphType == TYPE_FRIENDS) { listUserInfo = microBlog.getUserFriends(user.getId(), paging); if (isSelf) { for (User u : listUserInfo) { u.setFollowing(true); } } } else if (socialGraphType == TYPE_BLOCKS) { listUserInfo = microBlog.getBlockingUsers(paging); if (isSelf) { for (User u : listUserInfo) { u.setBlocking(true); } } } } } catch (LibException e) { if (Constants.DEBUG) Log.e(TAG, "Task", e); message = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context); paging.moveToPrevious(); } return listUserInfo; } @Override protected void onPostExecute(List<User> result) { if (result != null && result.size() > 0) { adapter.addCacheToDivider(null, result); } else { adapter.notifyDataSetChanged(); if (message != null) { Toast.makeText(adapter.getContext(), message, Toast.LENGTH_LONG).show(); } } if (adapter instanceof SocialGraphListAdapter) { if (paging.hasNext()) { if (context instanceof SocialGraphActivity) { ((SocialGraphActivity)context).showMoreFooter(); } else if (context instanceof GroupActivity) { ((GroupActivity)context).showMoreFooter(); } } else { if (context instanceof SocialGraphActivity) { ((SocialGraphActivity)context).showNoMoreFooter(); } else if (context instanceof GroupActivity) { ((GroupActivity)context).showNoMoreFooter(); } } } } public int getSocialGraphType() { return socialGraphType; } public void setSocialGraphType(int socialGraphType) { this.socialGraphType = socialGraphType; } }