Skip to content

Instantly share code, notes, and snippets.

@nightbear1009
Last active January 19, 2017 04:11
Show Gist options
  • Save nightbear1009/851be8a3971c9d20d6deb9bde4f7ea02 to your computer and use it in GitHub Desktop.
Save nightbear1009/851be8a3971c9d20d6deb9bde4f7ea02 to your computer and use it in GitHub Desktop.
read code
package com.scenecast.homepage.wallFragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.google.gson.JsonObject;
import com.scenecast.ContentActivity;
import com.scenecast.IRefreshFragment;
import com.scenecast.R;
import com.scenecast.RelationUtils;
import com.scenecast.api.APIWrapper;
import com.scenecast.api.model.BaseResultModel;
import com.scenecast.api.model.mesession.session.response.SessionModel;
import com.scenecast.api.model.mesession.session.response.SessionModelWrapper;
import com.scenecast.baseFramework.ActivityNavigator;
import com.scenecast.baseFramework.BaseFragment;
import com.scenecast.baseFramework.FragmentNavigator;
import com.scenecast.baseFramework.ImageLoader;
import com.scenecast.baseFramework.NewLoadMoreScrollListener;
import com.scenecast.baseFramework.NewPauseOnScrollListener;
import com.scenecast.event.NavigateToCommentEvent;
import com.scenecast.homepage.LiveActivity;
import com.scenecast.homepage.OnBadgeUpdate;
import com.scenecast.homepage.wallFragment.comment.CommentFragment;
import com.scenecast.homepage.wallFragment.playlive.PlayLiveFragment;
import com.squareup.picasso.Transformation;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
import rx.functions.Action1;
import rx.subscriptions.CompositeSubscription;
/**
* Created by tedliang on 2016/4/17.
*/
public class WallFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, NewLoadMoreScrollListener.Loadable, IRefreshFragment {
private OnBadgeUpdate mOnBadgeUpdate;
private CompositeSubscription mCompositeSubscription = new CompositeSubscription();
private SwipeRefreshLayout mSwipeRefresh;
private RecyclerView mRecyclerview;
private WallAdapter mWallAdapter;
private NewLoadMoreScrollListener mLoadMore;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.walllayout, container, false);
mSwipeRefresh = (SwipeRefreshLayout) view.findViewById(R.id.wall_pull_to_refresh);
mSwipeRefresh.setColorSchemeColors(R.color.colorPrimary);
mSwipeRefresh.setOnRefreshListener(this);
mRecyclerview = (RecyclerView) view.findViewById(R.id.wall_recyclerview);
mRecyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
mLoadMore = new NewLoadMoreScrollListener(this,null);
mRecyclerview.addOnScrollListener(
new NewPauseOnScrollListener(mLoadMore));
mRecyclerview.addItemDecoration(new SpaceItemDecoration(30));
mWallAdapter = new WallAdapter(new onWallClick() {
@Override
public void onPicClick(SessionModelWrapper model) {
if(hasVideo(model)){
Bundle b = new Bundle();
b.putString(VideoFragment.VIDEO_URL, model.getResult().getBasic().getClipUrl());
ActivityNavigator.navigateToFragmentContainer(getActivity(), ContentActivity.class, VideoFragment.class.getName(), b);
} else if(isLive(model)){
Bundle b = new Bundle();
b.putInt(PlayLiveFragment.SESSION_ID, model.getResult().getBasic().getId());
ActivityNavigator.navigateToFragmentContainer(getActivity(), LiveActivity.class, PlayLiveFragment.class.getName(), b);
} else {
//show 圖
Bundle b = new Bundle();
// ImageLoader.getInstance(itemView.getContext()).displaySessionImage(sessionModel.getBasic().getPicture(), mPic, R.drawable.cis_session_0, new Transformation() {
b.putString(ImageFragment.PICTURE,model.getSessionModel().getBasic().getPicture());
ActivityNavigator.navigateToFragmentContainer(getActivity(), ContentActivity.class, ImageFragment.class.getName(), b);
}
}
@Override
public void onLikeClick(final WallViewHolder viewHolder, boolean isLike, SessionModelWrapper model) {
if(!isLike) {
showDialog();
mCompositeSubscription.add(APIWrapper.likeSession(model.getSessionModel().getBasic().getId().toString()).subscribe(new Action1<BaseResultModel<List<JsonObject>>>() {
@Override
public void call(BaseResultModel<List<JsonObject>> listBaseResultModel) {
viewHolder.toggle();
dismissDialog();
}
}));
} else {
showDialog();
mCompositeSubscription.add(APIWrapper.unlikeSession(model.getSessionModel().getBasic().getId().toString()).subscribe(new Action1<BaseResultModel<List<JsonObject>>>() {
@Override
public void call(BaseResultModel<List<JsonObject>> listBaseResultModel) {
viewHolder.toggle();
dismissDialog();
}
}));
}
}
@Override
public void onCommentClick(SessionModelWrapper model) {
navigateToComment(model.getSessionModel().getBasic().getId().toString());
// ActivityNavigator.navigateToFragmentContainer(getActivity(), ContentActivity.class, CommentFragment.class.getName(), b);
}
@Override
public void onMenuClick(View view , final SessionModelWrapper model) {
if(RelationUtils.isMyPost(model.getSessionModel().getRelation())){
PopupMenu menu = new PopupMenu(getActivity(), view);
menu.inflate(R.menu.wall_delete);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
mCompositeSubscription.add(APIWrapper.deleteSession(model.getSessionModel().getBasic().getId().toString()).subscribe(new Action1<BaseResultModel<List<SessionModel>>>() {
@Override
public void call(BaseResultModel<List<SessionModel>> listBaseResultModel) {
refresh();
}
}));
return false;
}
});
menu.show();
} else {
PopupMenu menu = new PopupMenu(getActivity(), view);
menu.inflate(R.menu.wall_invisible);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
showDialog();
mCompositeSubscription.add(APIWrapper.deleteMeReceivedSession(model.getSessionModel().getBasic().getId().toString()).subscribe(new Action1<BaseResultModel<List<SessionModel>>>() {
@Override
public void call(BaseResultModel<List<SessionModel>> listBaseResultModel) {
refresh();
dismissDialog();
}
}));
return false;
}
});
menu.show();
}
}
});
mRecyclerview.setAdapter(mWallAdapter);
return view;
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
private void navigateToComment(String id){
Bundle b = new Bundle();
b.putString(CommentFragment.SESSION_ID, id);
Fragment f = Fragment.instantiate(getActivity(), CommentFragment.class.getName(), b);
FragmentNavigator.navigate(getActivity() ,f, R.id.content_fragment);
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void doNavigateToComment(NavigateToCommentEvent event){
EventBus.getDefault().removeStickyEvent(event);
navigateToComment(event.getId());
}
private boolean hasVideo(SessionModelWrapper model) {
if(model.getResult().getBasic().getClipUrl() !=null){
return true;
}
return false;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof OnBadgeUpdate){
mOnBadgeUpdate = ((OnBadgeUpdate) context);
}
}
@Override
public void onResume() {
super.onResume();
refresh();
mWallAdapter.notifyDataSetChanged();
}
@Override
public void refresh(){
if(mRecyclerview != null) {
mRecyclerview.smoothScrollToPosition(0);
showDialog();
mCompositeSubscription.add(APIWrapper.getMyWall(0).subscribe(new Action1<BaseResultModel<List<SessionModel>>>() {
@Override
public void call(BaseResultModel<List<SessionModel>> listBaseResultModel) {
if (listBaseResultModel.isOk()) {
updateWallList(listBaseResultModel.getResult());
}
dismissDialog();
}
}));
}
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
mCompositeSubscription.clear();
mLoadMore.resetLoading();
}
@Override
public void onRefresh() {
mCompositeSubscription.add(APIWrapper.getMyWall(0).subscribe(new Action1<BaseResultModel<List<SessionModel>>>() {
@Override
public void call(BaseResultModel<List<SessionModel>> listBaseResultModel) {
mSwipeRefresh.setRefreshing(false);
if(listBaseResultModel.isOk()) {
updateWallList(listBaseResultModel.getResult());
}
}
}));
}
private void updateWallList(List<SessionModel> list){
mWallAdapter.setData(list);
mWallAdapter.notifyDataSetChanged();
}
private void addWallList(List<SessionModel> list) {
mWallAdapter.addData(list);
mWallAdapter.notifyDataSetChanged();
}
@Override
public void loadMore() {
mCompositeSubscription.add(APIWrapper.getMyWall(mWallAdapter.getItemCount()).subscribe(new Action1<BaseResultModel<List<SessionModel>>>() {
@Override
public void call(BaseResultModel<List<SessionModel>> listBaseResultModel) {
mSwipeRefresh.setRefreshing(false);
if(listBaseResultModel.isOk()) {
addWallList(listBaseResultModel.getResult());
}
}
}));
}
public boolean isLive(SessionModelWrapper model) {
return model.getResult().getBasic().getStatus().equals("open") || model.getResult().getBasic().getStatus().equals("init");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment