Last active
January 19, 2017 04:11
-
-
Save nightbear1009/851be8a3971c9d20d6deb9bde4f7ea02 to your computer and use it in GitHub Desktop.
read code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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