CommentDetailsFragment.java 10.5 KB
package com.cnlive.gundam.video.fragment;

import android.content.Context;
import android.databinding.DataBindingUtil;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;

import com.cnlive.gundam.R;
import com.cnlive.gundam.databinding.FragmentVodDetialBinding;
import com.cnlive.gundam.main.model.CommentTitleViewModel;
import com.cnlive.gundam.main.model.CommentViewModel;
import com.cnlive.gundam.main.model.VodDetailModel;
import com.cnlive.gundam.main.presenter.VodDetailPresenter;
import com.cnlive.gundam.main.presenter.view.VodDetialView;
import com.cnlive.gundam.main.ui.adapter.mul.BaseMulTypeBindingAdapter;
import com.cnlive.gundam.main.ui.widget.SwipeRecyclerView;
import com.cnlive.gundam.user.auth.UserService;
import com.cnlive.gundam.user.model.User;
import com.cnlive.gundam.user.util.InputUtil;
import com.cnlive.gundam.video.fragment.chat.CommentFragment;
import com.cnlive.gundam.video.utils.ToastUtil;
import com.cnlive.libs.util.comment.CommentUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 创建:wukuiqing
 * <p>
 * 时间:2017/7/12
 * <p>
 * 描述:  评论界面
 */

public class CommentDetailsFragment extends Fragment implements VodDetialView {

    private boolean loadMoreEnable = true;
    FragmentVodDetialBinding binding;
    private View inflate;
    private InputUtil inputUtil;
    private UserService userService;

    private CommentUtil commentUtil = new CommentUtil();


    BaseMulTypeBindingAdapter adapter;
    List mDatas = new ArrayList();

    private String programID;
    private String mContentId;
    private String userID;
    User user;
    int uid;
    VodDetailPresenter presenter = new VodDetailPresenter(this);

    public static CommentDetailsFragment newInstance(String programID) {

        Bundle args = new Bundle();
        CommentDetailsFragment fragment = new CommentDetailsFragment();
        args.putString("programID", programID);
        fragment.setArguments(args);
        return fragment;
    }

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_vod_detial, container, false);

        userService = UserService.getInstance(getActivity());
        if (presenter == null) {
            presenter = new VodDetailPresenter(this);
        }
        //绑定view

        return binding.getRoot();
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        uid = UserService.getInstance(getActivity()).getActiveAccountInfo().getUid();
        if (uid != 0) {
            userID = String.valueOf(uid);
        } else {
            userID = String.valueOf(new Random().nextInt(99) + 1);
        }

        programID = getArguments().getString("programID");
        mContentId = programID;
        binding.srvVodDetail.getSwipeRefreshLayout()
                .setColorSchemeColors(getResources().getColor(R.color.colorPrimary));
        binding.llComment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //弹出输入框
                if (TextUtils.isEmpty(userService.getActiveAccountInfo().getUid() + "")) {
                    ToastUtil.showToast("请先登录");
                    return;
                }

                showInput(binding.llVodDetail);
            }
        });

        presenter.getData();

    }


    private int page = 1;
    private boolean isLoad = false;

    private EditText mMsgEditText;
    private PopupWindow mInputPopupWindow;

    private void showInput(View view) {
        // 加载popupWindow的布局
        View contentView = LayoutInflater.from(getActivity()).inflate(R.layout.layout_chat_input, new LinearLayout(getActivity()), false);
        contentView.findViewById(R.id.click_view).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mMsgEditText.setText("");
                mInputPopupWindow.dismiss();
            }
        });
        mMsgEditText = (EditText) contentView.findViewById(R.id.chat_content);
        mMsgEditText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
                    InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (inputMethodManager.isActive()) {
                        inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
                    }
                    sendMessage(mMsgEditText.getText().toString());
                    mMsgEditText.setText("");
                    mInputPopupWindow.dismiss();
                    return true;
                }
                return false;
            }
        });

        if (mInputPopupWindow != null) mInputPopupWindow.dismiss();

        mInputPopupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        mInputPopupWindow.setTouchable(true);
        mInputPopupWindow.setTouchInterceptor(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_OUTSIDE)
                    mInputPopupWindow.dismiss();
                return false;
            }
        });
        // 设置popupWindow 点击popupWindow外的地方 生效
        mInputPopupWindow.setOutsideTouchable(true);
        // 设置popupWindow 背景
        mInputPopupWindow.setBackgroundDrawable(new BitmapDrawable());
        mInputPopupWindow.setFocusable(true); //设置获取焦点
        mInputPopupWindow.setAnimationStyle(R.style.animation);
        mInputPopupWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
        mInputPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        mInputPopupWindow.showAtLocation(view, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
        mInputPopupWindow.update();

        mMsgEditText.requestFocus();
        mInputPopupWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
        mInputPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        InputMethodManager imm = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(1000, InputMethodManager.HIDE_NOT_ALWAYS);
    }

    private void sendMessage(final String message) {

        String s1 = userService.getActiveAccountInfo().getUid() + "";
        //TODO 添加评论
        presenter.addCommment(mContentId, s1, message);
    }

    @Override
    public void onLoadDataComplete(VodDetailModel model, List datas) {
        mDatas = datas;
        adapter = new BaseMulTypeBindingAdapter(getActivity(), mDatas);
        adapter.setItemPresenter(new OnBindItemClick());

        binding.srvVodDetail.getRecyclerView().setLayoutManager(new LinearLayoutManager(getActivity()));
        binding.srvVodDetail.setAdapter(adapter);
        binding.srvVodDetail.setOnLoadListener(new SwipeRecyclerView.OnLoadListener() {
            @Override
            public void onRefresh() {
                presenter.getComment(false, mContentId, page);
            }

            @Override
            public void onLoadMore() {
                isLoad = true;
                if (page != 1 && loadMoreEnable)
                    presenter.getComment(false, mContentId, page);
            }

        });
        binding.srvVodDetail.setRefreshEnable(true);
        binding.srvVodDetail.setStickyListener(new SwipeRecyclerView.StickyListener() {
            @Override
            public void onSticky(boolean isVisible) {
                if (isVisible) {
                    binding.llComment.setVisibility(View.VISIBLE);
                } else {
                    binding.llComment.setVisibility(View.GONE);
                }
            }
        });
        presenter.getComment(false, mContentId, page);
    }

    @Override
    public void onLoadCommentComplete(List mDatas, boolean isScroll) {
        CommentTitleViewModel commentTitleViewModel = (CommentTitleViewModel) this.mDatas.get(0);
        binding.commentTitleTvNums.setText(commentTitleViewModel.getCount() + "");
        if (isLoad) {
            binding.srvVodDetail.stopLoadingMore();
            isLoad = false;
        } else {
            binding.srvVodDetail.complete();

        }
        if (mDatas == null) {
            binding.srvVodDetail.onNoMore("快来抢沙发喽~");
            loadMoreEnable = false;
        } else if (isScroll) {
            adapter.add(1, mDatas.get(0));
            binding.srvVodDetail.getRecyclerView().scrollToPosition(1);
        } else {
            adapter.addDatas(mDatas);
            if (mDatas.size() < 2) {
                binding.srvVodDetail.onNoMore("暂无更多评论~");
                loadMoreEnable = false;
            }
            page++;

        }
    }


    public class OnBindItemClick {

        public void onPraiseClick(final CommentViewModel commentViewModel) {
            if (true) {//判断登录
                //TODO 点赞评论
                String uid = String.valueOf(userService.getActiveAccountInfo().getUid());
                presenter.toPraise(commentViewModel, mContentId, uid);

            } else {
                ToastUtil.showToast("请登录");
            }
        }

        public void onCommentClick() {
            //弹出输入框
            if (TextUtils.isEmpty(userService.getActiveAccountInfo().getUid() + "")) {
                ToastUtil.showToast("请先登录");
                return;
            }

            showInput(binding.llVodDetail);
        }
    }


}