/**
*
*/
package com.photoshare.msg.view;
import java.io.File;
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.msg.MessageItem;
import com.photoshare.msg.MessageList;
import com.photoshare.service.CommentHelper;
import com.photoshare.service.FollowHelper;
import com.photoshare.service.LikeHelper;
import com.photoshare.service.comments.PutCommentRequestParam;
import com.photoshare.service.comments.PutCommentResponseBean;
import com.photoshare.service.follow.UserFollowRequestParam;
import com.photoshare.service.follow.UserFollowResponseBean;
import com.photoshare.service.likes.PhotoLikeRequestParam;
import com.photoshare.service.likes.PhotoLikeResponseBean;
import com.photoshare.service.photos.PhotoUploadRequestParam;
import com.photoshare.service.photos.PhotoUploadResponseBean;
import com.photoshare.tabHost.R;
import com.photoshare.view.NotificationDisplayer;
/**
* @author Aron
*
*/
public class MessageFragment extends BaseFragment {
private MessageList messageList = MessageList.getInstance();
private NotificationDisplayer mNotificationDisplayer;
private MessageQueueView msgView;
private String leftBtnText = "";
private String rightBtnText = "";
private String titlebarText = "";
private int leftBtnVisibility = View.VISIBLE;
private int rightBtnVisibility = View.GONE;
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState != null) {
outState.putParcelableArrayList(MessageItem.MSG_TAG,
messageList.getArrayList());
}
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.message_activity_layout, container,
false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(MessageItem.MSG_TAG)) {
ArrayList<MessageItem> list = savedInstanceState
.getParcelableArrayList(MessageItem.MSG_TAG);
messageList.setList(list);
}
}
super.onActivityCreated(savedInstanceState);
initView();
}
private String getCommentTicker() {
return getString(R.string.nCommentTicker);
}
private String getPhotoTicker() {
return getString(R.string.nPhotoTicker);
}
private String getLikeTicker() {
return getString(R.string.nLikeTicker);
}
private String getFollowTicker() {
return getString(R.string.nFollowTicker);
}
private void initView() {
try {
leftBtnText = getPreferencesText();
titlebarText = getMessageText();
initTitleBar(leftBtnText, rightBtnText, titlebarText,
leftBtnVisibility, rightBtnVisibility);
messageList.initList();
msgView = new MessageQueueView(getActivity(), getActivity()
.findViewById(R.id.messageQueueLayoutId), async,
messageList);
msgView.registerListener(onMsgListener);
msgView.applyView();
mNotificationDisplayer = new NotificationDisplayer.NotificationBuilder()
.Context(getActivity()).build();
} catch (Exception e) {
}
}
private String getPreferencesText() {
return getString(R.string.preferences);
}
private String getMessageText() {
return getString(R.string.messages);
}
private void AsyncPutComment(final MessageItem message,
final IObserver<Boolean> observer) throws NetworkException {
PutCommentRequestParam param = new PutCommentRequestParam();
param.setComment(param.getComment());
param.setmPhotoId(message.getEventId());
param.setmUserId(user.getUserInfo().getUid());
mNotificationDisplayer.setTicker(getCommentTicker());
mNotificationDisplayer.displayNotification();
async.publishComments(param, new CommentHelper.ICallback() {
public void OnNetworkError(NetworkError networkError) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_COMMENT).sendToTarget();
observer.update(false);
}
});
}
public void OnFault(Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
observer.update(false);
}
});
}
public void OnComplete(PutCommentResponseBean comment) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mNotificationDisplayer.setTicker(getSuccessTicker());
mNotificationDisplayer.displayNotification();
observer.update(false);
messageList.remove(message);
mNotificationDisplayer.cancleNotification();
}
});
}
});
mNotificationDisplayer.cancleNotification();
}
private void AsyncPublishLike(final MessageItem message,
final IObserver<Boolean> observer) throws NetworkException {
PhotoLikeRequestParam param = new PhotoLikeRequestParam.LikeBuilder()
.PhotoId(message.getEventId())
.UserId(user.getUserInfo().getUid())
.isLike(message.isBtnStatus()).build();
mNotificationDisplayer.setTicker(getLikeTicker());
mNotificationDisplayer.displayNotification();
async.publishLikePhoto(param, new LikeHelper.ICallback() {
public void OnNetworkError(NetworkError error) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler
.obtainMessage(NetworkError.ERROR_LIKE)
.sendToTarget();
observer.update(false);
}
});
}
public void OnFault(Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
observer.update(false);
}
});
}
public void OnComplete(PhotoLikeResponseBean bean) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mNotificationDisplayer.setTicker(getSuccessTicker());
mNotificationDisplayer.displayNotification();
observer.update(false);
messageList.remove(message);
mNotificationDisplayer.cancleNotification();
}
});
}
});
mNotificationDisplayer.cancleNotification();
}
private void AsyncPublishFollow(final MessageItem message,
final IObserver<Boolean> observer) throws NetworkException {
UserFollowRequestParam param = new UserFollowRequestParam.FollowBuilder()
.UserId(user.getUserInfo().getUid())
.isFollowing(message.isBtnStatus())
.FollowId(message.getEventId()).build();
mNotificationDisplayer.setTicker(getFollowTicker());
mNotificationDisplayer.displayNotification();
async.publishFollow(param, new FollowHelper.ICallback() {
public void OnNetworkError(NetworkError error) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_FOLLOW).sendToTarget();
observer.update(false);
}
});
}
public void OnFault(Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
observer.update(false);
}
});
}
public void OnComplete(UserFollowResponseBean bean) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mNotificationDisplayer.setTicker(getSuccessTicker());
mNotificationDisplayer.displayNotification();
observer.update(false);
messageList.remove(message);
mNotificationDisplayer.cancleNotification();
}
});
}
});
mNotificationDisplayer.cancleNotification();
}
private void AsyncPublishPhoto(final MessageItem message,
final IObserver<Boolean> observer) throws NetworkException {
PhotoUploadRequestParam param = new PhotoUploadRequestParam();
param.setCaption(message.getMsgDescription());
param.setUid(user.getUserInfo().getUid());
param.setFile(new File(message.getMsgPhotoUrl()));
mNotificationDisplayer.setTicker(getPhotoTicker());
mNotificationDisplayer.displayNotification();
AbstractRequestListener<PhotoUploadResponseBean> listener = new AbstractRequestListener<PhotoUploadResponseBean>() {
@Override
public void onNetworkError(NetworkError networkError) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_PHOTO).sendToTarget();
observer.update(false);
}
});
}
@Override
public void onFault(Throwable fault) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mExceptionHandler.obtainMessage(
NetworkError.ERROR_NETWORK).sendToTarget();
observer.update(false);
}
});
}
@Override
public void onComplete(PhotoUploadResponseBean bean) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mNotificationDisplayer.setTicker(getSuccessTicker());
mNotificationDisplayer.displayNotification();
observer.update(false);
messageList.remove(message);
mNotificationDisplayer.cancleNotification();
}
});
}
};
async.publishPhoto(param, listener);
mNotificationDisplayer.cancleNotification();
}
private MessageQueueView.OnMsgListener onMsgListener = new MessageQueueView.OnMsgListener() {
public void OnMsgClicked(MessageItem message,
IObserver<Boolean> observer) {
try {
switch (message.getMsgType()) {
case COMMENT:
AsyncPutComment(message, observer);
break;
case FOLLOW:
AsyncPublishFollow(message, observer);
break;
case LIKE:
AsyncPublishLike(message, observer);
break;
case NULL:
break;
case PHOTO:
AsyncPublishPhoto(message, observer);
break;
default:
break;
}
} catch (NetworkException e) {
AsyncSignIn();
}
}
public void OnImageLoaded(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
}
}