/**
*
*/
package com.photoshare.service.users.views;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Browser;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.photoshare.command.Command;
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.fragments.PhotoBarFragment;
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.users.UserGetInfoResponseBean;
import com.photoshare.service.users.UserGetOtherInfoRequestParam;
import com.photoshare.service.users.UserInfo;
import com.photoshare.tabHost.R;
import com.photoshare.view.AppTitleBarView;
import com.photoshare.view.NotificationDisplayer;
import com.photoshare.view.OtherHomeTitleBarView;
/**
* @author Aron
*
* This fragment designed to display the title bar of the user's home,
* using the view {@link OtherHomeTitleBarView} containing information
* about user's head, name, biography, Website, follower count,
* following count, photos count. And in combination with fragment
* {@link PhotoBarFragment} to display the whole user home.
*
*/
public class OtherHomeTitleBarFragment extends BaseFragment {
private OtherHomeTitleBarView homeTitle;
private UserInfo userInfo;
private NotificationDisplayer notification;
private String leftBtnText = "";
private String rightBtnText = "";
private int leftBtnVisibility = View.VISIBLE;
private String titlebarText = "";
private int rightBtnVisibility = View.GONE;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(UserInfo.KEY_USER_INFO)) {
userInfo = savedInstanceState
.getParcelable(UserInfo.KEY_USER_INFO);
}
if (savedInstanceState.containsKey(AppTitleBarView.LEFT_BTN_TEXT)) {
leftBtnText = savedInstanceState
.getString(AppTitleBarView.LEFT_BTN_TEXT);
}
}
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
if (bundle.containsKey(UserInfo.KEY_USER_INFO)) {
userInfo = bundle.getParcelable(UserInfo.KEY_USER_INFO);
}
}
try {
if (userInfo != null && userInfo.getBio() != null) {
initTitleBar(leftBtnText, rightBtnText, userInfo.getName(),
leftBtnVisibility, View.GONE);
initViews();
} else {
AsyncGetOthersInfo();
}
} catch (NetworkException e) {
AsyncSignIn();
} catch (Exception e) {
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater
.inflate(R.layout.other_home_title_bar, container, false);
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState != null) {
outState.putParcelable(UserInfo.KEY_USER_INFO, userInfo);
outState.putString(AppTitleBarView.LEFT_BTN_TEXT, leftBtnText);
}
super.onSaveInstanceState(outState);
}
public static OtherHomeTitleBarFragment newInstance(int fragmentViewId) {
OtherHomeTitleBarFragment uh = new OtherHomeTitleBarFragment();
uh.setFragmentViewId(fragmentViewId);
return uh;
}
private String getBackText() {
return getString(R.string.back);
}
public UserInfo getUserInfo() {
return userInfo;
}
private void initViews() {
leftBtnText = getBackText();
initTitleBar(leftBtnText, rightBtnText, titlebarText,
leftBtnVisibility, rightBtnVisibility);
notification = new NotificationDisplayer.NotificationBuilder()
.Context(getActivity()).Ticker("开始跟随").build();
homeTitle = new OtherHomeTitleBarView(getActivity().findViewById(
R.id.otherHomeTitleBarLayoutId), userInfo, async);
homeTitle.registerCallback(TitleBarCallBack);
homeTitle.applyView();
}
private void OnFollowClicked() {
Bundle param = new Bundle();
param.putParcelable(UserInfo.KEY_USER_INFO, userInfo);
param.putString(UserInfo.KEY_FOLLOW_TYPE,
FollowType.FOLLOWER.toString());
Command.forward(this, getFollowFragment(), param);
}
private void OnFollowingClicked() {
Bundle param = new Bundle();
param.putParcelable(UserInfo.KEY_USER_INFO, userInfo);
param.putString(UserInfo.KEY_FOLLOW_TYPE,
FollowType.FOLLOWER.toString());
Command.forward(this, getFollowFragment(), param);
}
private String getFollowFragment() {
return getString(R.string.ffollowInfoFragment);
}
private void OnLikeCntClicked() {
// TODO Auto-generated method stub
}
/**
* Do nothing
*/
private void OnUserNameClicked() {
}
/**
* Initiate Uri and parameters
*/
private void OnUserWebsiteClicked(UserInfo info) {
String url = info.getWebsite();
if (url.startsWith("www")) {
url = "http://" + url;
}
Uri uri = Uri.parse(url);
Intent i = new Intent(Intent.ACTION_VIEW, uri);
i.putExtra(Browser.EXTRA_APPLICATION_ID, getActivity().getPackageName());
startActivity(i);
}
private void AsyncOnFollowClick() throws NetworkException {
UserFollowRequestParam param = new UserFollowRequestParam.FollowBuilder()
.FollowId(userInfo.getUid())
.UserId(user.getUserInfo().getUid())
.isFollowing(userInfo.isFollowing()).build();
FollowHelper.ICallback mCallback = new FollowHelper.ICallback() {
public void OnNetworkError(final NetworkError error) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_FOLLOW).sendToTarget();
}
});
}
public void OnFault(final Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
}
});
}
public void OnComplete(final UserFollowResponseBean bean) {
final boolean isChecked = checkFollowingResponseBean(bean);
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (isChecked) {
notification.displayNotification();
}
}
});
}
};
async.publishFollow(param, mCallback);
}
private void AsyncGetOthersInfo() throws NetworkException {
UserGetOtherInfoRequestParam param = new UserGetOtherInfoRequestParam(
user.getUserInfo().getUid(), userInfo.getUid());
AbstractRequestListener<UserGetInfoResponseBean> listener = new AbstractRequestListener<UserGetInfoResponseBean>() {
@Override
public void onNetworkError(NetworkError networkError) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_REFRESH_DATA).sendToTarget();
}
});
}
@Override
public void onFault(Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
}
});
}
@Override
public void onComplete(UserGetInfoResponseBean bean) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
if (homeTitle != null) {
homeTitle.applyView();
}
}
});
}
};
async.getOthersInfo(param, listener);
}
private boolean checkFollowingResponseBean(UserFollowResponseBean bean) {
if (bean == null || bean.getUserId() != user.getUserInfo().getUid()
|| bean.getFollowId() != userInfo.getUid())
return false;
if (bean.isFollowing()) {
user.getUserInfo().setFollowingCnt(
user.getUserInfo().getFollowingCnt() + 1);
} else {
user.getUserInfo().setFollowingCnt(
user.getUserInfo().getFollowingCnt() - 1);
}
return true;
}
private OtherHomeTitleBarView.ICallback TitleBarCallBack = new OtherHomeTitleBarView.ICallback() {
public void OnWebsiteClick(UserInfo info) {
OnUserWebsiteClicked(info);
}
public void OnNameClick(UserInfo info) {
OnUserNameClicked();
}
public void OnLikesCntClick(UserInfo info) {
OnLikeCntClicked();
}
public void OnFollowingCntClick(UserInfo info) {
OnFollowingClicked();
}
public void OnFollowerCntClick(UserInfo info) {
OnFollowClicked();
}
public void OnFollowClick(UserInfo info, IObserver<Boolean> observer) {
try {
AsyncOnFollowClick();
} catch (NetworkException e) {
AsyncSignIn();
}
}
public void OnUserHeadLoaded(final ImageView imageView,
final Drawable photo, String url) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
imageView.setImageDrawable(photo);
}
});
}
public void OnDefault(final ImageView imageView) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
imageView.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
}
}