/** * */ package com.photoshare.service.photos.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.exception.NetworkError; import com.photoshare.exception.NetworkException; import com.photoshare.fragments.BaseFragment; import com.photoshare.service.LikeHelper; import com.photoshare.service.likes.PhotoLikeRequestParam; import com.photoshare.service.likes.PhotoLikeResponseBean; import com.photoshare.service.photos.PhotoBean; import com.photoshare.service.photos.PhotoType; import com.photoshare.service.photos.PhotosGetInfoRequestParam; import com.photoshare.service.photos.PhotosGetInfoResponseBean; import com.photoshare.service.users.UserInfo; import com.photoshare.tabHost.R; import com.photoshare.utils.Utils; import com.photoshare.view.NotificationDisplayer; /** * @author Aron * */ public class FeedsFragment extends BaseFragment { private FeedsView feedsView; private UserInfo userInfo; private int currentPage = 0; private int demandPage = 10; private PhotoType type; private ArrayList<PhotoBean> photos; private NotificationDisplayer mNotificationDisplayer; private String leftBtnText = ""; private String rightBtnText = ""; private String titlebarText = ""; private int leftBtnVisibility = View.INVISIBLE; private int rightBtnVisibility = View.INVISIBLE; public static FeedsFragment newInstance(int fragmentViewId) { FeedsFragment feeds = new FeedsFragment(); feeds.setFragmentViewId(fragmentViewId); return feeds; } public PhotoType getType() { return type; } public UserInfo getUserInfo() { return userInfo; } @Override public void onActivityCreated(Bundle savedInstanceState) { 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(PhotoBean.KEY_PHOTO_TYPE)) { type = PhotoType.SWITCH(bundle .getString(PhotoBean.KEY_PHOTO_TYPE)); } if (bundle.containsKey(PhotoBean.KEY_PHOTOS)) { photos = bundle.getParcelableArrayList(PhotoBean.KEY_PHOTOS); } } Tag = getFeedsFragment(); titlebarText = getFeedsText(); initTitleBar(leftBtnText, rightBtnText, titlebarText, leftBtnVisibility, rightBtnVisibility); if (photos != null && photos.size() != 0) { initFeeds(); } else { try { AsyncGetFeeds(); } catch (NetworkException e) { AsyncSignIn(); } } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (!processArguments()) { container.addView(super.onCreateView(inflater, container, savedInstanceState)); } return inflater.inflate(R.layout.feeds_layout, container, false); } private String getLikeTag() { return getString(R.string.nLikeTag); } private String getLikeTicker() { return getString(R.string.nLikeTicker); } private String getFeedsText() { return getString(R.string.feeds); } private String getFeedsFragment() { return getString(R.string.ffeedsFragment); } @Override public void onSaveInstanceState(Bundle outState) { if (outState != null) { outState.putParcelableArrayList(PhotoBean.KEY_PHOTOS, photos); } super.onSaveInstanceState(outState); } private void AsyncLikePhoto(PhotoBean photo) throws NetworkException { PhotoLikeRequestParam param = new PhotoLikeRequestParam.LikeBuilder() .UserId(user.getUserInfo().getUid()).PhotoId(photo.getPid()) .isLike(photo.isLike()).build(); // mNotificationDisplayer.displayNotification(); LikeHelper.ICallback mCallback = new LikeHelper.ICallback() { public void OnNetworkError(NetworkError error) { getActivity().runOnUiThread(new Runnable() { public void run() { } }); } public void OnFault(Throwable fault) { mExceptionHandler.obtainMessage(NetworkError.ERROR_NETWORK) .sendToTarget(); getActivity().runOnUiThread(new Runnable() { public void run() { } }); } public void OnComplete(PhotoLikeResponseBean bean) { mNotificationDisplayer.setTag(getSuccessTag()); mNotificationDisplayer.setTicker(getSuccessTicker()); getActivity().runOnUiThread(new Runnable() { public void run() { mNotificationDisplayer.displayNotification(); mNotificationDisplayer.cancleNotification(); } }); } }; async.publishLikePhoto(param, mCallback); mNotificationDisplayer.cancleNotification(); } private void AsyncGetFeeds() throws NetworkException { PhotosGetInfoRequestParam param = new PhotosGetInfoRequestParam.PhotoRequestBuilder() .CurrentPage(currentPage).DemandPage(demandPage) .UserId(userInfo.getUid()).Method(type) .Field(PhotosGetInfoRequestParam.FIELDS_ALL).build(); AbstractRequestListener<PhotosGetInfoResponseBean> listener = new AbstractRequestListener<PhotosGetInfoResponseBean>() { @Override public void onNetworkError(NetworkError networkError) { mExceptionHandler .obtainMessage(NetworkError.ERROR_REFRESH_DATA) .sendToTarget(); getActivity().runOnUiThread(new Runnable() { public void run() { if (feedsView != null) feedsView.onRefreshComplete(); } }); } @Override public void onFault(Throwable fault) { mExceptionHandler.obtainMessage(NetworkError.ERROR_NETWORK) .sendToTarget(); getActivity().runOnUiThread(new Runnable() { public void run() { if (feedsView != null) feedsView.onRefreshComplete(); } }); } @Override public void onComplete(PhotosGetInfoResponseBean bean) { if (bean != null) { photos = bean.getPhotos(); currentPage += demandPage; } getActivity().runOnUiThread(new Runnable() { public void run() { initFeeds(); if (feedsView != null) feedsView.onRefreshComplete(); } }); } }; async.getPhotosInfo(param, listener); } private void initFeeds() { feedsView = new FeedsView(getActivity(), (View) getActivity() .findViewById(R.id.feedsLayoutId), photos, async); feedsView.registerCallback(mFeedsActionListener); feedsView.applyView(); mNotificationDisplayer = new NotificationDisplayer.NotificationBuilder() .Context(getActivity()).Tag(getLikeTag()) .Ticker(getLikeTicker()).build(); } private FeedsView.OnFeedsActionListener mFeedsActionListener = new FeedsView.OnFeedsActionListener() { public void OnRefresh() { try { AsyncGetFeeds(); } catch (NetworkException e) { AsyncSignIn(); } } public void OnNameClick(UserInfo info) { Bundle args = new Bundle(); args.putParcelableArrayList(PhotoBean.KEY_PHOTOS, photos); args.putParcelable(UserInfo.KEY_USER_INFO, info); forward(getUserHomeFragment(), args); } public void OnLikeClick(PhotoBean photo) { try { Utils.logger("OnLikeClicked"); AsyncLikePhoto(photo); } catch (NetworkException e) { AsyncSignIn(); } } public void OnCommentListClick(PhotoBean photo) { Bundle args = new Bundle(); args.putParcelableArrayList(PhotoBean.KEY_PHOTOS, photos); args.putParcelable(PhotoBean.KEY_PHOTO, photo); forward(getCommentsFragment(), args); } public void OnLikeListClick(PhotoBean photo) { Bundle args = new Bundle(); args.putParcelableArrayList(PhotoBean.KEY_PHOTOS, photos); args.putParcelable(PhotoBean.KEY_PHOTO, photo); forward(getLikeFragment(), args); } public void OnUserHeadLoaded(final ImageView image, final Drawable drawable, String url) { getActivity().runOnUiThread(new Runnable() { public void run() { image.setImageDrawable(drawable); } }); } public void OnFeedPhotoLoaded(final ImageView image, final Drawable drawable, String url) { getActivity().runOnUiThread(new Runnable() { public void run() { image.setImageDrawable(drawable); } }); } public void OnUserHeadDefault(final ImageView image) { getActivity().runOnUiThread(new Runnable() { public void run() { image.setImageResource(R.drawable.icon); } }); } public void OnFeedPhotoDefault(final ImageView image) { getActivity().runOnUiThread(new Runnable() { public void run() { image.setImageResource(R.drawable.icon); } }); } }; public void setPhotos(ArrayList<PhotoBean> photos) { this.photos = photos; } public void addPhotoBean(PhotoBean photo) { feedsView.addPhotoBean(photo); } public void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; } public void setType(PhotoType type) { this.type = type; } /* * (non-Javadoc) * * @see com.photoshare.fragments.BaseFragment#OnRightBtnClicked() */ @Override protected void onRightBtnClicked() { } /* * (non-Javadoc) * * @see com.photoshare.fragments.BaseFragment#OnLeftBtnClicked() */ @Override protected void onLeftBtnClicked() { } private String getUserHomeFragment() { return getString(R.string.fuserHomeFragment); } private String getCommentsFragment() { return getString(R.string.fcommentsFragment); } private String getLikeFragment() { return getString(R.string.flikeFragment); } @Override protected void onLoginSuccess() { // TODO Auto-generated method stub } }