/**
*
*/
package com.photoshare.service.follow.views;
import java.util.ArrayList;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.photoshare.common.AbstractRequestListener;
import com.photoshare.common.IObserver;
import com.photoshare.exception.NetworkError;
import com.photoshare.exception.NetworkException;
import com.photoshare.fragments.BaseFragment;
import com.photoshare.service.FollowHelper;
import com.photoshare.service.follow.FollowType;
import com.photoshare.service.follow.UserFollowRequestParam;
import com.photoshare.service.follow.UserFollowResponseBean;
import com.photoshare.service.follow.UserGetFollowInfoRequestParam;
import com.photoshare.service.follow.UserGetFollowInfoResponseBean;
import com.photoshare.service.users.UserInfo;
import com.photoshare.tabHost.R;
import com.photoshare.view.AppTitleBarView;
import com.photoshare.view.NotificationDisplayer;
/**
* @author Aron
*
*/
public class FollowsInfoFragment extends BaseFragment {
private FollowsView followsView;
private FollowType type;
private UserInfo userInfo;
private ArrayList<UserInfo> userInfos;
private String leftBtnText = "";
private String rightBtnText = "";
private String titlebarText = "";
private int leftBtnVisibility = View.VISIBLE;
private int rightBtnVisibility = View.GONE;
private NotificationDisplayer mNotificationDisplayer;
public static FollowsInfoFragment newInstance(int fragmentViewId) {
FollowsInfoFragment fi = new FollowsInfoFragment();
fi.setFragmentViewId(fragmentViewId);
return fi;
}
private String getFollowsInfoFragment() {
return getString(R.string.ffollowInfoFragment);
}
public FollowType getType() {
return type;
}
public UserInfo getUserInfo() {
return userInfo;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
leftBtnText = getBackText();
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(UserInfo.KEY_USER_INFOS)) {
userInfos = savedInstanceState
.getParcelableArrayList(UserInfo.KEY_USER_INFOS);
}
if (savedInstanceState.containsKey(AppTitleBarView.LEFT_BTN_TEXT)) {
leftBtnText = savedInstanceState
.getString(AppTitleBarView.LEFT_BTN_TEXT);
}
if (savedInstanceState.containsKey(AppTitleBarView.TITLE_BAR_TEXT)) {
titlebarText = savedInstanceState
.getString(AppTitleBarView.TITLE_BAR_TEXT);
}
}
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
if (bundle.containsKey(UserInfo.KEY_USER_INFO)) {
userInfo = bundle.getParcelable(UserInfo.KEY_USER_INFO);
}
if (bundle.containsKey(UserInfo.KEY_FOLLOW_TYPE)) {
type = FollowType.SWITCH(bundle
.getString(UserInfo.KEY_FOLLOW_TYPE));
titlebarText = type.toString();
}
}
try {
AsyncGetFollowInfo();
} catch (NetworkException e) {
AsyncSignIn();
} catch (Exception e) {
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState != null) {
outState.putParcelableArrayList(UserInfo.KEY_USER_INFOS, userInfos);
outState.putString(AppTitleBarView.LEFT_BTN_TEXT, leftBtnText);
outState.putString(AppTitleBarView.TITLE_BAR_TEXT, titlebarText);
}
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.user_follow_list_layout, container,
false);
}
private void initView() {
initTitleBar(leftBtnText, rightBtnText, titlebarText,
leftBtnVisibility, rightBtnVisibility);
followsView = new FollowsView(getActivity().findViewById(
R.id.userFollowListLayoutId), userInfos, getActivity(), async);
followsView.registerCallback(followListener);
followsView.applyView();
mNotificationDisplayer = new NotificationDisplayer.NotificationBuilder()
.Context(getActivity()).Tag(getFollowTag())
.Ticker(getFollowTicker()).build();
}
private String getFollowTicker() {
return getString(R.string.nFollowTicker);
}
private String getFollowTag() {
return getString(R.string.nFollowTag);
}
private String getBackText() {
return getString(R.string.back);
}
private String getUserHomeFragment() {
return getString(R.string.fuserHomeFragment);
}
private void AsyncGetFollowInfo() throws NetworkException {
UserGetFollowInfoRequestParam param = null;
switch (type) {
case FOLLOWER:
param = new UserGetFollowInfoRequestParam(userInfo.getUid());
break;
case FOLLOWING:
param = new UserGetFollowInfoRequestParam(userInfo.getUid());
break;
}
param.setType(type);
AbstractRequestListener<UserGetFollowInfoResponseBean> listener = new AbstractRequestListener<UserGetFollowInfoResponseBean>() {
@Override
public void onNetworkError(final NetworkError networkError) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_REFRESH_DATA).sendToTarget();
}
});
}
@Override
public void onFault(final Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
}
});
}
@Override
public void onComplete(final UserGetFollowInfoResponseBean bean) {
if (bean != null) {
userInfos = bean.getFollowInfos();
}
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (bean != null) {
initView();
}
}
});
}
};
async.getFollowsInfo(param, listener);
}
private void AsyncOnFollowClick(final IObserver<Boolean> observer)
throws NetworkException {
UserFollowRequestParam param = new UserFollowRequestParam.FollowBuilder()
.FollowId(userInfo.getUid())
.UserId(user.getUserInfo().getUid())
.isFollowing(userInfo.isFollowing()).build();
mNotificationDisplayer.displayNotification();
FollowHelper.ICallback mCallback = new FollowHelper.ICallback() {
public void OnNetworkError(final NetworkError error) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
}
});
}
public void OnFault(final Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
}
});
}
public void OnComplete(final UserFollowResponseBean bean) {
final boolean isChecked = checkFollowingResponseBean(bean);
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (isChecked) {
mNotificationDisplayer.setTag(getSuccessTag());
mNotificationDisplayer
.setTicker(getSuccessTicker());
mNotificationDisplayer.displayNotification();
observer.update(userInfo.isFollowing());
mNotificationDisplayer.cancleNotification();
}
}
});
}
};
async.publishFollow(param, mCallback);
mNotificationDisplayer.cancleNotification();
}
private boolean checkFollowingResponseBean(UserFollowResponseBean bean) {
if (bean == null || bean.getUserId() != user.getUserInfo().getUid()
|| bean.getFollowId() != userInfo.getUid())
return false;
if (bean.isFollowing()) {
userInfo.setFollowing(true);
user.getUserInfo().setFollowingCnt(
user.getUserInfo().getFollowingCnt() + 1);
} else {
userInfo.setFollowing(false);
user.getUserInfo().setFollowingCnt(
user.getUserInfo().getFollowingCnt() - 1);
}
return true;
}
private FollowsView.OnFollowActionListener followListener = new FollowsView.OnFollowActionListener() {
public void OnUserNameClick(UserInfo info) {
forward(getUserHomeFragment(), info.params());
}
public void OnFollowClick(UserInfo info, IObserver<Boolean> observer) {
try {
AsyncOnFollowClick(observer);
} catch (NetworkException e) {
AsyncSignIn();
}
}
public void OnUserHeadLoaded(final ImageView image,
final Drawable drawable, String url) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
image.setImageDrawable(drawable);
}
});
}
public void OnImageDefault(final ImageView image) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
image.setImageResource(R.drawable.icon);
}
});
}
};
/*
* (non-Javadoc)
*
* @see com.photoshare.fragments.BaseFragment#OnRightBtnClicked()
*/
@Override
protected void onRightBtnClicked() {
}
/*
* (non-Javadoc)
*
* @see com.photoshare.fragments.BaseFragment#OnLeftBtnClicked()
*/
@Override
protected void onLeftBtnClicked() {
backward(null);
}
@Override
protected void onLoginSuccess() {
// TODO Auto-generated method stub
}
}