/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.javielinux.adapters;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.request.CheckFriendlyUserRequest;
import com.javielinux.api.request.ExecuteActionUserRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.infos.InfoUsers;
import com.javielinux.tweettopics2.R;
import com.javielinux.utils.DBUtils;
import com.javielinux.utils.UserActions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class UserProfileAdapter extends BaseAdapter {
public static class ViewHolder {
public LinearLayout containerLoading;
public RelativeLayout containerText;
public TextView txtText;
public RelativeLayout containerFriendly;
public TextView txtUser1;
public TextView txtUser2;
public ImageView imgConnectUser;
public Button btnFollow;
}
public static ViewHolder generateViewHolder(final View v) {
ViewHolder viewHolder = new ViewHolder();
viewHolder.containerLoading = (LinearLayout) v.findViewById(R.id.user_profile_container_loading);
viewHolder.containerText = (RelativeLayout) v.findViewById(R.id.user_profile_row_container_text);
viewHolder.txtText = (TextView) v.findViewById(R.id.user_profile_row_text);
viewHolder.containerFriendly = (RelativeLayout) v.findViewById(R.id.user_profile_row_container_friendly);
viewHolder.imgConnectUser = (ImageView) v.findViewById(R.id.user_profile_row_friendly_connect);
viewHolder.txtUser1 = (TextView) v.findViewById(R.id.user_profile_row_friendly_user1);
viewHolder.txtUser2 = (TextView) v.findViewById(R.id.user_profile_row_friendly_user2);
viewHolder.btnFollow = (Button) v.findViewById(R.id.user_profile_row_follow);
return viewHolder;
}
public static int KEY_INFO_TEXT = 0;
public static int KEY_INFO_FRIENDLY = 1;
public static int KEY_INFO_ADD_FRIEND = 2;
private FragmentActivity activity;
private ArrayList<UserProfileItemAdapter> userProfileItemAdapters = new ArrayList<UserProfileItemAdapter>();
private InfoUsers infoUser;
public static class UserProfileItemAdapter {
public int type;
public InfoUsers.Friend friend;
public String text;
}
public UserProfileAdapter(FragmentActivity activity, InfoUsers infoUser) {
this.activity = activity;
this.infoUser = infoUser;
if (activity != null && infoUser != null) {
reload();
}
}
public void changeRelationShip(InfoUsers.Friend friend) {
APITweetTopics.execute(activity, activity.getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
notifyDataSetChanged();
}
@Override
public void onError(ErrorResponse error) {
}
}, new ExecuteActionUserRequest(UserActions.USER_ACTION_CHANGE_RELATIONSHIP, friend, infoUser, -1, -1));
}
public void reload() {
UserProfileItemAdapter item1 = new UserProfileItemAdapter();
item1.type = KEY_INFO_TEXT;
item1.text = String.format("%d %s", infoUser.getFollowing(), activity.getString(R.string.following));
userProfileItemAdapters.add(item1);
UserProfileItemAdapter item2 = new UserProfileItemAdapter();
item2.type = KEY_INFO_TEXT;
item2.text = String.format("%d %s", infoUser.getFollowers(), activity.getString(R.string.followers));
userProfileItemAdapters.add(item2);
UserProfileItemAdapter item3 = new UserProfileItemAdapter();
item3.type = KEY_INFO_TEXT;
item3.text = String.format("%d %s", infoUser.getTweets(), activity.getString(R.string.tweets));
userProfileItemAdapters.add(item3);
HashMap<String, InfoUsers.Friend> friendly = infoUser.getFriendly();
Iterator it = friendly.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
UserProfileItemAdapter item = new UserProfileItemAdapter();
item.type = KEY_INFO_FRIENDLY;
item.friend = (InfoUsers.Friend) e.getValue();
userProfileItemAdapters.add(item);
}
}
@Override
public int getCount() {
return userProfileItemAdapters.size();
}
@Override
public UserProfileItemAdapter getItem(int position) {
return userProfileItemAdapters.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UserProfileItemAdapter item = getItem(position);
View v = null;
ViewHolder viewHolder;
if (null == convertView) {
v = View.inflate(activity, R.layout.user_profile_row, null);
viewHolder = generateViewHolder(v);
v.setTag(generateViewHolder(v));
} else {
v = convertView;
viewHolder = (ViewHolder) v.getTag();
}
if (item.type==KEY_INFO_TEXT) {
viewHolder.containerFriendly.setVisibility(View.GONE);
viewHolder.containerText.setVisibility(View.VISIBLE);
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.txtText.setText(item.text);
}
if (item.type==KEY_INFO_FRIENDLY) {
if (item.friend.checked) {
viewHolder.containerFriendly.setVisibility(View.VISIBLE);
viewHolder.containerText.setVisibility(View.GONE);
viewHolder.containerLoading.setVisibility(View.GONE);
viewHolder.txtUser1.setText(infoUser.getName());
viewHolder.txtUser2.setText(item.friend.user);
if (item.friend.friend && item.friend.follower) {
viewHolder.imgConnectUser.setImageResource(R.drawable.connects_on_on);
} else if (item.friend.friend && !item.friend.follower) {
viewHolder.imgConnectUser.setImageResource(R.drawable.connects_off_on);
} else if (!item.friend.friend && item.friend.follower) {
viewHolder.imgConnectUser.setImageResource(R.drawable.connects_on_off);
} else {
viewHolder.imgConnectUser.setImageResource(R.drawable.connects_off_off);
}
if (DBUtils.getIdFromUserName(item.friend.user)>0) {
viewHolder.btnFollow.setVisibility(View.VISIBLE);
viewHolder.btnFollow.setTag(item.friend);
viewHolder.btnFollow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
changeRelationShip((InfoUsers.Friend) view.getTag());
}
});
if (item.friend.follower) {
viewHolder.btnFollow.setText(R.string.unfollow);
} else {
viewHolder.btnFollow.setText(R.string.follow);
}
} else {
viewHolder.btnFollow.setVisibility(View.GONE);
}
} else {
viewHolder.containerFriendly.setVisibility(View.GONE);
viewHolder.containerText.setVisibility(View.GONE);
viewHolder.containerLoading.setVisibility(View.VISIBLE);
APITweetTopics.execute(activity, activity.getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
notifyDataSetChanged();
}
@Override
public void onError(ErrorResponse error) {
}
}, new CheckFriendlyUserRequest(infoUser, infoUser.getName(), item.friend.user));
}
}
return v;
}
}