DetailChatFragment.java 7.15 KB
package com.cnlive.goldenline.ui.fragment;

import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import com.cnlive.goldenline.R;
import com.cnlive.goldenline.model.ChatModel;
import com.cnlive.goldenline.model.chat.RecyclerChat;
import com.cnlive.goldenline.model.chat.XMPPItem;
import com.cnlive.goldenline.model.chat.XMPPMessageItem;
import com.cnlive.goldenline.ui.adapter.ChatAdapter;
import com.cnlive.goldenline.ui.adapter.RecyclerConfig;
import com.cnlive.goldenline.ui.base.BaseChatFragment;
import com.cnlive.goldenline.ui.interfaces.MessageReceive;
import com.cnlive.goldenline.util.ChatRoomConnect;
import com.cnlive.goldenline.util.GiftUtil;
import com.cnlive.goldenline.util.InputUtil;
import com.cnlive.goldenline.util.LogUtils;
import com.cnlive.goldenline.util.SendCallback;
import com.cnlive.libs.util.chat.base.IChat;
import com.google.gson.Gson;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import butterknife.BindView;
import butterknife.OnClick;

/**
 * Created by xiansong on 2015/9/2.
 */
public class DetailChatFragment extends BaseChatFragment implements SendCallback {

    private static final String TAG = "DetailChatFragment";

    public static final List<String> types = Arrays.asList("1", "2", "3");

    @BindView(R.id.recyclerview)
    protected RecyclerView recyclerView;

    private boolean isDestroy = false;

    private Gson gson = new Gson();

    private ChatAdapter adapter;
    private String mRoomID, mUserName, mUserIcon, mUserId, mVideoId;


    private GiftUtil mGiftUtil;
    private InputUtil mInputUtil;

    public static DetailChatFragment newInstance(String roomID, String videoId, String userId, String userName, String userIcon) {
        DetailChatFragment fragment = new DetailChatFragment();
        Bundle bundle = new Bundle();
        bundle.putString("roomID", roomID);
        bundle.putString("userId", userId);
        bundle.putString("userName", userName);
        bundle.putString("userIcon", userIcon);
        bundle.putString("videoId", videoId);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRoomID = getArgumentsString("roomID");
        mUserName = getArgumentsString("userName");
        mUserIcon = getArgumentsString("userIcon");
        mUserId = getArgumentsString("userId");
        mVideoId = getArgumentsString("videoId");
        adapter = new ChatAdapter(getActivity());
        mGiftUtil = new GiftUtil(getActivity(), mVideoId, this);
        mInputUtil = new InputUtil(getActivity(), this);
    }

    @Override
    protected int getLayoutRes() {
        return R.layout.fragment_detail_chat;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(adapter);
        recyclerView.setHasFixedSize(true);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        isDestroy = true;
        if (mGiftUtil != null) mGiftUtil.dismiss();
        if (mInputUtil != null) mInputUtil.dismiss();
    }

    @Override
    protected String getUserName() {
        return mUserName;
    }

    @Override
    protected String getRoomId() {
        return mRoomID;
    }

    @Override
    protected String getUserIcon() {
        return mUserIcon;
    }

    @Override
    protected String getUserId() {
        return mUserId;
    }

    @OnClick({R.id.fr_chatroom_img_chat, R.id.fr_chatroom_img_gift})
    protected void onClick(View view) {
        switch (view.getId()) {
            case R.id.fr_chatroom_img_chat:
                //TODO 显示输入窗口
                mInputUtil.showInput(view);
                break;
            case R.id.fr_chatroom_img_gift:
                //TODO 显示礼物
                mGiftUtil.loadGiftInfo(view);
                break;
        }

    }

    @Override
    protected void receive(String type, String fromid, String from, String icon, String msg, Date date, boolean self) {
        if (getActivity() == null) return;
        if (!type.equals(IChat.CHATROOM)) return;
        try {
            String trim_msg = msg.trim();
            if (trim_msg.indexOf("{") == 0 && trim_msg.lastIndexOf("}") == trim_msg.length() - 1) {
                LogUtils.LOGE(TAG + " receive type = " + type + " fromId = " + fromid + " from = " + from + " icon = " + icon + " msg = " + msg + " date = " + date + " self = " + self);
                XMPPItem item = gson.fromJson(msg, XMPPItem.class);

                if (checkMessage(item.getType())) {
                    int self_type;
                    XMPPMessageItem item_message = gson.fromJson(msg, XMPPMessageItem.class);
                    item_message.setDate(date);
                    item_message.setUserName(from);
                    item_message.setUserIcon(icon);

                    if (getActivity() instanceof MessageReceive)
                        ((MessageReceive) getActivity()).onReceive(false,item_message);
                    switch (item.getType()) {
                        case "1":
                            //TODO 显示欢迎信息
                            adapter.addItem(new RecyclerChat(RecyclerConfig.ITEM_TYPE_CHAT_WELCOME, item_message));
                            recyclerView.scrollToPosition(adapter.getItemCount() - 1);
                            break;
                        case "2":
                            //TODO 显示聊天信息
                            //self_type = self ? RecyclerConfig.ITEM_TYPE_CHAT_SELF : RecyclerConfig.ITEM_TYPE_CHAT_OTHERS;
                            adapter.addItem(new RecyclerChat(RecyclerConfig.ITEM_TYPE_CHAT_OTHERS, item_message));
                            recyclerView.scrollToPosition(adapter.getItemCount() - 1);
                            break;

                        case "3":
                            //TODO 显示礼物信息
                            //self_type = self ? RecyclerConfig.ITEM_TYPE_CHAT_GIFT_SELF : RecyclerConfig.ITEM_TYPE_CHAT_GIFT_OTHERS;
                            adapter.addItem(new RecyclerChat(RecyclerConfig.ITEM_TYPE_CHAT_GIFT_OTHERS, item_message));
                            recyclerView.scrollToPosition(adapter.getItemCount() - 1);
                            break;

                    }
                }
            }

        } catch (Exception e) {
            Log.e("Message", "error ", e);
        }

    }

    private static boolean checkMessage(String type) {
        return !TextUtils.isEmpty(type) && types.indexOf(type) != -1;
    }


    @Override
    public void sendMessage(String message) {
        send(message);
    }

    @Override
    public void onChatState(int what) {
        super.onChatState(what);
        switch (what) {
            case ChatRoomConnect.StateJoin:
                send(gson.toJson(new ChatModel("", String.valueOf(System.currentTimeMillis() / 1000), "1")));
                break;
        }
    }

}