package com.troy.xifan.activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.chenenyu.router.annotation.Route;
import com.jude.easyrecyclerview.EasyRecyclerView;
import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter;
import com.troy.xifan.R;
import com.troy.xifan.adapter.ConversationAdapter;
import com.troy.xifan.config.Constants;
import com.troy.xifan.http.HttpRequestFactory;
import com.troy.xifan.http.callback.SimpleHttpRequestCallback;
import com.troy.xifan.http.exception.ApiException;
import com.troy.xifan.http.request.BaseRequestParams;
import com.troy.xifan.http.request.DirectMessagesRequest;
import com.troy.xifan.model.response.DirectMessagesRes;
import com.troy.xifan.util.UIUtils;
import com.troy.xifan.util.Utils;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* Created by chenlongfei on 2017/1/14.
*/
@Route(Constants.Router.CONVERSATION)
public class ConversationActivity extends BaseActivity {
public static String BUNDLE_OTHER_USER_ID = "other_user_id";
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.recycler_view) EasyRecyclerView mRecyclerView;
@BindView(R.id.edit_msg) EditText mEditMsg;
@BindView(R.id.button_send_dm) Button mButtonSend;
private int mPage;
private String mMsg;
private String mOtherUserId;
private ConversationAdapter mConversationAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation);
ButterKnife.bind(this);
Bundle bundle = getIntent().getExtras();
if (bundle == null) {
return;
}
mOtherUserId = bundle.getString(BUNDLE_OTHER_USER_ID);
if (mOtherUserId == null) {
return;
}
initViews();
}
@Override
protected void initViews() {
mToolbar.setTitle(R.string.title_dm);
mToolbar.setElevation(getResources().getDimension(R.dimen.elevation));
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mConversationAdapter = new ConversationAdapter(this, mOtherUserId);
mConversationAdapter.setMore(R.layout.view_load_more,
new RecyclerArrayAdapter.OnMoreListener() {
@Override
public void onMoreShow() {
getConversation(true);
}
@Override
public void onMoreClick() {
}
});
mConversationAdapter.setError(R.layout.view_load_more_error,
new RecyclerArrayAdapter.OnErrorListener() {
@Override
public void onErrorShow() {
}
@Override
public void onErrorClick() {
mConversationAdapter.resumeMore();
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapterWithProgress(mConversationAdapter);
mButtonSend.setEnabled(false);
initListener();
getConversation(false);
}
private void initListener() {
mEditMsg.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mButtonSend.setEnabled(s.length() > 0 && !TextUtils.isEmpty(s.toString()));
mMsg = s.toString();
}
@Override
public void afterTextChanged(Editable s) {
}
});
mButtonSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendDirectMessage();
insertDirectMessage();
}
});
}
private void getConversation(final boolean isLoadMore) {
BaseRequestParams request = new BaseRequestParams();
request.setPage(String.valueOf(++mPage));
request.setId(mOtherUserId);
HttpRequestFactory.getInstance()
.getConversation(request, new SimpleHttpRequestCallback<List<DirectMessagesRes>>() {
@Override
public void onSuccess(List<DirectMessagesRes> responseData) {
Collections.reverse(responseData);
mConversationAdapter.addAll(responseData);
mConversationAdapter.notifyDataSetChanged();
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(ConversationActivity.this,
apiException.getErrorMessage());
}
});
}
private void insertDirectMessage() {
DirectMessagesRes directMessages = new DirectMessagesRes();
directMessages.setRecipient_id(mOtherUserId);
directMessages.setText(mMsg);
directMessages.setCreated_at(Utils.formatFanFouDate(new Date()));
mConversationAdapter.add(directMessages);
mConversationAdapter.notifyDataSetChanged();
mEditMsg.setText(null);
}
private void sendDirectMessage() {
DirectMessagesRequest request = new DirectMessagesRequest();
request.setUser(mOtherUserId);
request.setText(mMsg);
HttpRequestFactory.getInstance()
.sendDirectMessage(request, new SimpleHttpRequestCallback<DirectMessagesRes>() {
@Override
public void onSuccess(DirectMessagesRes responseData) {
}
@Override
public void onFail(ApiException apiException) {
UIUtils.showToast(ConversationActivity.this,
apiException.getErrorMessage());
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
}