SnsMyGroupFragment.java 13.7 KB
package com.dinhcv.lifelogpedometer.activity;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
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.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
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.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 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;

/**
 * A simple {@link Fragment} subclass.
 */
public class SnsMyGroupFragment extends FragmentBase {
    private enum CurrentList {
        TOPIC_LIST,
        MEMBER_LIST,
    }

    ApiService mService;

    View mRootView;
    @BindView(R.id.spinner_my_group)
    Spinner mSpinnerMyGroup;
    @BindView(R.id.imv_spinner_my_group)
    ImageView mImvSpinnerMyGroup;

    @BindView(R.id.tv_title)
    TextView mTvTitle;
    @BindView(R.id.tv_goal)
    TextView mTvGoal;

    @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;

    SwipeRefreshLayout mSwipeRefreshTopic;
    RecyclerView mRcvMemberList;
    private SnsTopicAdapter mTopicAdapter;
    private SnsMemberAdapter mMemberAdapter;

    private List<SnsTopicInfo> mSnsTopicList = new ArrayList<>();
    private List<SnsMyGroupInfo> mSnsMyGroupList = new ArrayList<>();
    private List<SnsMemberInfo> mSnsMemberList = new ArrayList<>();

    private SnsMyGroupInfo mSnsMyGroup;

    CurrentList mCurentList = CurrentList.TOPIC_LIST;

    public SnsMyGroupFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        mRootView = inflater.inflate(R.layout.fragment_sns_my_group, container, false);
        ButterKnife.bind(this, mRootView);

        initView();
        return mRootView;
    }

    public void initView() {
        mRcvMemberList = (RecyclerView) mRootView.findViewById(R.id.rcv_member);
        mSpinnerMyGroup = (Spinner) mRootView.findViewById(R.id.spinner_my_group);
        mSwipeRefreshTopic = (SwipeRefreshLayout) mRootView.findViewById(R.id.swipe_topic);

        mSwipeRefreshTopic.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if (mCurentList == CurrentList.MEMBER_LIST) {
                    if (mSnsMyGroup == null) return;
                    mCurentList = CurrentList.MEMBER_LIST;
                    mRcvMemberList.setAdapter(mMemberAdapter);
                    mMemberAdapter.clearData();
                    mMemberAdapter.notifyDataSetChanged();
                    getMemberList(mSnsMyGroup);
                } else if (mCurentList == CurrentList.TOPIC_LIST) {
                    mRcvMemberList.setAdapter(mTopicAdapter);
                    mTopicAdapter.clearData();
                    mTopicAdapter.notifyDataSetChanged();
                    getTopicList();
                }
            }
        });

        mTopicAdapter = new SnsTopicAdapter(getActivity(), mSnsTopicList);
        mMemberAdapter = new SnsMemberAdapter(getActivity(), mSnsMemberList);

        final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());

        mRcvMemberList.setLayoutManager(mLayoutManager);
        mRcvMemberList.setAdapter(mTopicAdapter);

        getMyGroupList();
        getTopicList();
    }

    @OnClick(R.id.imv_spinner_my_group)
    public void showSpinnerMyGroup() {
        mSpinnerMyGroup.performClick();
    }

    @OnClick(R.id.btn_show_member)
    public void showGroupMember() {
        if (mCurentList == CurrentList.TOPIC_LIST) {
            if (mSnsMyGroup == null) return;
            mCurentList = CurrentList.MEMBER_LIST;
            mRcvMemberList.setAdapter(mMemberAdapter);
            mMemberAdapter.clearData();
            mMemberAdapter.notifyDataSetChanged();
            getMemberList(mSnsMyGroup);
        } else if (mCurentList == CurrentList.MEMBER_LIST) {
            mCurentList = CurrentList.TOPIC_LIST;
            mRcvMemberList.setAdapter(mTopicAdapter);
            mTopicAdapter.clearData();
            mTopicAdapter.notifyDataSetChanged();
            getTopicList();
        }
    }

    public void setDataSpinnerMyGroup() {
        List<String> list = new ArrayList<>();
        for (SnsMyGroupInfo info : mSnsMyGroupList) {
            list.add(info.getGroupName());
        }
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(getContext(),
                android.R.layout.simple_spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinnerMyGroup.setAdapter(dataAdapter);
        mSpinnerMyGroup.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                getSnsGroupDetail(mSnsMyGroupList.get(position));
                //T.B.D
                mCurentList = CurrentList.TOPIC_LIST;
                mRcvMemberList.setAdapter(mTopicAdapter);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    public void showDetailGroup(SnsDetailInfo detail) {
        if (detail != null) {
            mTvTitle.setText(detail.getGroupName());
            mTvGoal.setText(detail.getGoal());
            if (detail.getRunModeActive() == 1) {
                mTvRunAcivieMode.setVisibility(View.VISIBLE);
            } else {
                mTvRunAcivieMode.setVisibility(View.GONE);
            }
            if (detail.getWalkModeActive() == 1) {
                mTvWalkAcivieMode.setVisibility(View.VISIBLE);
            } else {
                mTvWalkAcivieMode.setVisibility(View.GONE);
            }
            if (detail.getBikeModeActive() == 1) {
                mTvBikeAcivieMode.setVisibility(View.VISIBLE);
            } else {
                mTvBikeAcivieMode.setVisibility(View.GONE);
            }
        } else {
            mTvTitle.setVisibility(View.INVISIBLE);
            mTvGoal.setVisibility(View.INVISIBLE);
            mTvRunAcivieMode.setVisibility(View.INVISIBLE);
            mTvWalkAcivieMode.setVisibility(View.INVISIBLE);
            mTvBikeAcivieMode.setVisibility(View.INVISIBLE);
        }
    }

    private void getMyGroupList() {
        showLoadingDialog();
        Map<String, String> map = new HashMap<>();
        map.put("token", APIResponse.getInstance().getToken());
        mService = ApiUtils.getApiService();
        mService.getSnsMyGroup(map).enqueue(new Callback<ResultResponse<SnsMyGroupInfo>>() {
            @Override
            public void onResponse(retrofit2.Call<ResultResponse<SnsMyGroupInfo>> call, retrofit2.Response<ResultResponse<SnsMyGroupInfo>> response) {
                if (response.isSuccessful()) {
                    mSnsMyGroupList = response.body().getResult();
                    setDataSpinnerMyGroup();
                    if (!mSnsMyGroupList.isEmpty()) {
                        mSnsMyGroup = mSnsMyGroupList.get(0);
                        getSnsGroupDetail(mSnsMyGroupList.get(0));
                    } else {
                        dismissLoadingDialog();
                    }
                    Log.i("SonLT", "Success" + mSnsTopicList.size());
                } else {
                    int statusCode = response.code();
                    // handle request errors depending on status code
                    Log.i("SonLT", "Fail " + statusCode);
                    dismissLoadingDialog();
                }
            }

            @Override
            public void onFailure(retrofit2.Call<ResultResponse<SnsMyGroupInfo>> call, Throwable t) {
                Log.i("SonLT", "Success");
                dismissLoadingDialog();
            }
        });
    }

    private void getSnsGroupDetail(SnsMyGroupInfo myGroup) {
        showLoadingDialog();
        Map<String, String> map = new HashMap<>();
        map.put("token", APIResponse.getInstance().getToken());
        int groupId = myGroup.getId();
        mService = ApiUtils.getApiService();
        mService.getSnsDetail(map, groupId).enqueue(new Callback<ResultResponse<SnsDetailInfo>>() {
            @Override
            public void onResponse(Call<ResultResponse<SnsDetailInfo>> call, Response<ResultResponse<SnsDetailInfo>> response) {
                if (response.isSuccessful()) {
                    List<SnsDetailInfo> mSnsDetailList = response.body().getResult();
                    if (mSnsDetailList != null) {
                        if (mSnsDetailList.size() > 0) {
                            SnsDetailInfo detailInfo = mSnsDetailList.get(0);
                            showDetailGroup(detailInfo);
                        }
                    }
                    Debug.normal("SonLT", "getSnsDetail isSuccessful");
                } else {
                    int statusCode = response.code();
                    // handle request errors depending on status code
                    Debug.normal("SonLT", "getSnsDetail isFailure");
                }
                dismissLoadingDialog();
            }

            @Override
            public void onFailure(Call<ResultResponse<SnsDetailInfo>> call, Throwable t) {
                Debug.normal("SonLT", "getSnsDetail onFailure");
                dismissLoadingDialog();
            }
        });
    }

    private void getTopicList() {
        if (!mSwipeRefreshTopic.isRefreshing()) {
            mSwipeRefreshTopic.setRefreshing(true);
        }
        Map<String, String> map = new HashMap<>();
        map.put("token", APIResponse.getInstance().getToken());
        mService = ApiUtils.getApiService();
        mService.getSnsTopicList(map).enqueue(new Callback<SnsTopicResponse>() {
            @Override
            public void onResponse(retrofit2.Call<SnsTopicResponse> call, retrofit2.Response<SnsTopicResponse> response) {
                if (response.isSuccessful()) {
                    mSnsTopicList = response.body().getResult();
                    mTopicAdapter.updateData(mSnsTopicList);
                    mTopicAdapter.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<SnsTopicResponse> call, Throwable t) {
                Log.i("SonLT", "Success");
                if (mSwipeRefreshTopic.isRefreshing()) {
                    mSwipeRefreshTopic.setRefreshing(false);
                }
            }
        });
    }

    private void getMemberList(SnsMyGroupInfo myGroup) {
        if (!mSwipeRefreshTopic.isRefreshing()) {
            mSwipeRefreshTopic.setRefreshing(true);
        }
        Map<String, String> header = new HashMap<>();
        header.put("token", APIResponse.getInstance().getToken());
        mService = ApiUtils.getApiService();
        mService.getSnsMember(header, myGroup.getId()).enqueue(new Callback<ResultResponse<SnsMemberInfo>>() {
            @Override
            public void onResponse(retrofit2.Call<ResultResponse<SnsMemberInfo>> call, retrofit2.Response<ResultResponse<SnsMemberInfo>> 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<ResultResponse<SnsMemberInfo>> call, Throwable t) {
                Log.i("SonLT", "Success");
                if (mSwipeRefreshTopic.isRefreshing()) {
                    mSwipeRefreshTopic.setRefreshing(false);
                }
            }
        });
    }
}