package com.dinhcv.lifelogpedometer.activity; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.dinhcv.lifelogpedometer.R; import com.dinhcv.lifelogpedometer.adapter.SnsMemberAdapter; import com.dinhcv.lifelogpedometer.adapter.SnsTopicAdapter; import com.dinhcv.lifelogpedometer.model.structure.pojo.ResultResponse; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsDetailInfo; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsMemberInfo; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsMyGroupInfo; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsSearchInfo; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsTopicInfo; import com.dinhcv.lifelogpedometer.model.structure.pojo.SnsTopicResponse; import com.dinhcv.lifelogpedometer.network.ApiService; import com.dinhcv.lifelogpedometer.network.ApiUtils; import com.dinhcv.lifelogpedometer.portal.APIResponse; import com.dinhcv.lifelogpedometer.utils.Debug; import com.google.gson.JsonObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by Admin on 8/18/2017. */ public class SnsDetailFragment extends FragmentBase { private enum CurrentList { TOPIC_LIST, MEMBER_LIST, } private ApiService mService; private View mRootView; @BindView(R.id.rcv_topic) RecyclerView mRcvRank; @BindView(R.id.layout_pb_loading) LinearLayout mLayoutPbLoading; @BindView(R.id.tv_title) TextView mTvTitle; @BindView(R.id.tv_goal) TextView mTvGoal; @BindView(R.id.imv_beginer_icon) ImageView mImvBeginerIcon; @BindView(R.id.tv_run_active_mode) TextView mTvRunAcivieMode; @BindView(R.id.tv_walk_active_mode) TextView mTvWalkAcivieMode; @BindView(R.id.tv_bike_active_mode) TextView mTvBikeAcivieMode; @BindView(R.id.layout_run_active_mode) LinearLayout mLayoutRunAcivieMode; @BindView(R.id.layout_walk_active_mode) LinearLayout mLayoutWalkAcivieMode; @BindView(R.id.layout_bike_active_mode) LinearLayout mLayoutBikeAcivieMode; @BindView(R.id.tv_target_run) TextView mTvTargetRun; @BindView(R.id.tv_target_walk) TextView mTvTargetWalk; @BindView(R.id.tv_target_bike) TextView mTvTargetBike; @BindView(R.id.btn_view_member) TextView mBtnViewMember; @BindView(R.id.btn_join_group) TextView mBtnJoinGroup; SwipeRefreshLayout mSwipeRefreshTopic; private SnsTopicAdapter mTopicAdapter; private SnsMemberAdapter mMemberAdapter; private List mSnsTopicList = new ArrayList<>(); private List mSnsMemberList = new ArrayList<>(); private List mSnsDetailList = new ArrayList<>(); private List mSnsTopicGroupList = new ArrayList<>(); private SnsSearchInfo mSnsSerchInfo; private SnsDetailInfo mSnsDetailInfo; public static final String TAG = "SnsDetailFragment"; CurrentList mCurrentList = CurrentList.TOPIC_LIST; private SnsFragment mSnsFragment; public void setRootFragment(SnsFragment frag) { this.mSnsFragment = frag; } public void setInitData(SnsSearchInfo info) { this.mSnsSerchInfo = info; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment mRootView = inflater.inflate(R.layout.fragment_sns_detail, container, false); ButterKnife.bind(this, mRootView); initView(); getSnsDetail(); return mRootView; } private void initView() { mTopicAdapter = new SnsTopicAdapter(getActivity(), mSnsTopicGroupList); mMemberAdapter = new SnsMemberAdapter(getActivity(), mSnsMemberList); final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); mRcvRank.setLayoutManager(mLayoutManager); mRcvRank.setAdapter(mTopicAdapter); mSwipeRefreshTopic = (SwipeRefreshLayout) mRootView.findViewById(R.id.swipe_topic); mSwipeRefreshTopic.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { if (mCurrentList == CurrentList.MEMBER_LIST) { if (mSnsSerchInfo == null) return; mCurrentList = CurrentList.MEMBER_LIST; mRcvRank.setAdapter(mMemberAdapter); mMemberAdapter.clearData(); mMemberAdapter.notifyDataSetChanged(); getMemberList(mSnsSerchInfo.getGroupId()); } else if (mCurrentList == CurrentList.TOPIC_LIST) { mCurrentList = CurrentList.TOPIC_LIST; mRcvRank.setAdapter(mTopicAdapter); mTopicAdapter.clearData(); mTopicAdapter.notifyDataSetChanged(); getTopicList(); } } }); mLayoutPbLoading.setVisibility(View.GONE); if (mCurrentList == CurrentList.TOPIC_LIST){ //T.B.D mBtnViewMember.setText("メンバーを見る"); }else if (mCurrentList == CurrentList.MEMBER_LIST){ mBtnViewMember.setText("ツイートを見る"); } } private void initData() { if (mSnsDetailInfo == null) return; mTvTitle.setText(mSnsDetailInfo.getGroupName()); mTvGoal.setText(mSnsDetailInfo.getGoal()); if (mSnsDetailInfo.getRunModeActive() == 1) { mTvRunAcivieMode.setVisibility(View.VISIBLE); mLayoutRunAcivieMode.setVisibility(View.VISIBLE); mTvTargetRun.setText(mSnsDetailInfo.getRunModeGoal() + "m"); } else { mTvRunAcivieMode.setVisibility(View.GONE); mLayoutRunAcivieMode.setVisibility(View.GONE); } if (mSnsDetailInfo.getWalkModeActive() == 1) { mTvWalkAcivieMode.setVisibility(View.VISIBLE); mLayoutWalkAcivieMode.setVisibility(View.VISIBLE); mTvTargetWalk.setText(mSnsDetailInfo.getWalkModeGoal() + "m"); } else { mTvWalkAcivieMode.setVisibility(View.GONE); mLayoutWalkAcivieMode.setVisibility(View.GONE); } if (mSnsDetailInfo.getBikeModeActive() == 1) { mTvBikeAcivieMode.setVisibility(View.VISIBLE); mLayoutBikeAcivieMode.setVisibility(View.VISIBLE); mTvTargetBike.setText(mSnsDetailInfo.getBikeModeGoal() + "m"); } else { mTvBikeAcivieMode.setVisibility(View.GONE); mLayoutBikeAcivieMode.setVisibility(View.GONE); } if (mSnsDetailInfo.getBeginerModeActive() == 1) { mImvBeginerIcon.setVisibility(View.VISIBLE); } else { mImvBeginerIcon.setVisibility(View.INVISIBLE); } if (mSnsDetailInfo.getJoinGroup() == 1) { //Member has been join group mBtnJoinGroup.setVisibility(View.INVISIBLE); mBtnJoinGroup.setClickable(false); } else { mBtnJoinGroup.setVisibility(View.VISIBLE); mBtnJoinGroup.setClickable(true); } } @OnClick(R.id.btn_view_member) public void viewMember(){ Debug.normal("SonLT", "View Member"); if (mCurrentList == CurrentList.TOPIC_LIST) { if (mSnsSerchInfo == null) return; mBtnViewMember.setText(getString(R.string.sns_btn_view_member_title)); mCurrentList = CurrentList.MEMBER_LIST; mRcvRank.setAdapter(mMemberAdapter); mMemberAdapter.clearData(); mMemberAdapter.notifyDataSetChanged(); getMemberList(mSnsSerchInfo.getGroupId()); } else if (mCurrentList == CurrentList.MEMBER_LIST) { mBtnViewMember.setText(getString(R.string.sns_btn_view_tweet_title)); mCurrentList = CurrentList.TOPIC_LIST; mRcvRank.setAdapter(mTopicAdapter); mTopicAdapter.clearData(); mTopicAdapter.notifyDataSetChanged(); getTopicList(); } } @OnClick(R.id.btn_join_group) public void joinGroup(){ Debug.normal("SonLT", "Join Group"); if (mSnsDetailInfo.getJoinGroup() == 0) { //Member has been join group } else { handleJoinGroup(); } } /** * Init data */ private void getSnsDetail() { mLayoutPbLoading.setVisibility(View.VISIBLE); Map map = new HashMap<>(); map.put("token", APIResponse.getInstance().getToken()); int groupId = mSnsSerchInfo.getGroupId(); mService = ApiUtils.getApiService(); mService.getSnsDetail(map, groupId).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { if (response.isSuccessful()) { mSnsDetailList = response.body().getResult(); if (mSnsDetailList != null) { if (mSnsDetailList.size() > 0) { mSnsDetailInfo = mSnsDetailList.get(0); initData(); getTopicList(); } } Debug.normal("SonLT", "getSnsDetail isSuccessful"); } else { int statusCode = response.code(); // handle request errors depending on status code Debug.normal("SonLT", "getSnsDetail isFailure"); } mLayoutPbLoading.setVisibility(View.GONE); } @Override public void onFailure(Call> call, Throwable t) { Debug.normal("SonLT", "getSnsDetail onFailure"); mLayoutPbLoading.setVisibility(View.GONE); } }); } private void getTopicList() { if (!mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(true); } Map map = new HashMap<>(); map.put("token", APIResponse.getInstance().getToken()); mService = ApiUtils.getApiService(); mService.getSnsTopicList(map).enqueue(new Callback() { @Override public void onResponse(retrofit2.Call call, retrofit2.Response response) { if (response.isSuccessful()) { mSnsTopicList = response.body().getResult(); mSnsTopicGroupList.clear(); for (SnsTopicInfo topic : mSnsTopicList) { if (topic.getGroupId() != mSnsSerchInfo.getGroupId()) { continue; } mSnsTopicGroupList.add(topic); } mTopicAdapter.updateData(mSnsTopicGroupList); mTopicAdapter.notifyDataSetChanged(); Log.i("SonLT", "Success" + mSnsTopicGroupList.size()); } else { int statusCode = response.code(); // handle request errors depending on status code Log.i("SonLT", "Fail " + statusCode); } if (mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(false); } } @Override public void onFailure(retrofit2.Call call, Throwable t) { Log.i("SonLT", "Success"); if (mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(false); } } }); } private void getMemberList(int groupId) { if (!mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(true); } Map header = new HashMap<>(); header.put("token", APIResponse.getInstance().getToken()); mService = ApiUtils.getApiService(); mService.getSnsMember(header, groupId).enqueue(new Callback>() { @Override public void onResponse(retrofit2.Call> call, retrofit2.Response> response) { if (response.isSuccessful()) { mSnsMemberList = response.body().getResult(); mMemberAdapter.updateData(mSnsMemberList); mMemberAdapter.notifyDataSetChanged(); Log.i("SonLT", "Success" + mSnsTopicList.size()); } else { int statusCode = response.code(); // handle request errors depending on status code Log.i("SonLT", "Fail " + statusCode); } if (mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(false); } } @Override public void onFailure(retrofit2.Call> call, Throwable t) { Log.i("SonLT", "Success"); if (mSwipeRefreshTopic.isRefreshing()) { mSwipeRefreshTopic.setRefreshing(false); } } }); } private void handleShowStatusAlert(boolean isSuccess) { String title = getString(R.string.msg_join_group_title); String message = ""; if (isSuccess) { message = getString(R.string.msg_create_group_success); } else { message = getString(R.string.msg_create_group_fail); } AlertDialog.Builder builder = getAlert(title, message); builder.setPositiveButton(getString(R.string.msg_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //Do nothing } }).show(); } private void handleJoinGroup(){ showLoadingDialog(); Map header = new HashMap<>(); header.put("token", APIResponse.getInstance().getToken()); mService = ApiUtils.getApiService(); mService.joinSnsGroup(header, mSnsSerchInfo.getGroupId()).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { handleShowStatusAlert(true); dismissLoadingDialog(); } else { int statusCode = response.code(); // handle request errors depending on status code Log.i(TAG, "Fail 1" + statusCode); handleShowStatusAlert(false); dismissLoadingDialog(); } } @Override public void onFailure(Call call, Throwable t) { Log.i(TAG, "Fail 2" + t); handleShowStatusAlert(false); dismissLoadingDialog(); } }); } }