文章详情增加评论入口

This commit is contained in:
khy
2016-11-30 10:29:35 +08:00
parent 82cf8cb877
commit 68f8bee146
17 changed files with 487 additions and 96 deletions

View File

@ -2,6 +2,7 @@ package com.gh.gamecenter;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.os.Build;
@ -14,13 +15,16 @@ import android.view.View;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.DiskBasedCache;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.AppController;
import com.gh.base.BaseActivity;
import com.gh.common.constant.Config;
import com.gh.common.util.DialogUtils;
@ -33,19 +37,29 @@ import com.gh.gamecenter.adapter.MessageDetailAdapter;
import com.gh.gamecenter.db.CommentDao;
import com.gh.gamecenter.db.info.CommentInfo;
import com.gh.gamecenter.entity.CommentEntity;
import com.gh.gamecenter.entity.ConcernEntity;
import com.gh.gamecenter.entity.ViewsEntity;
import com.gh.gamecenter.manager.CommentManager;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.lang.reflect.Type;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnTouch;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* Created by khy on 2016/11/8.
@ -60,9 +74,10 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
@BindView(R.id.comment_user_name) TextView mMessageDetailUserNameTv;
@BindView(R.id.comment_send) TextView mMessageDetailCommentSend;
@BindView(R.id.message_detail_comment_et) EditText mMessageDetailEt;
@BindView(R.id.message_detail_comment_hint) TextView mMessageDetailCommentHint;
@BindView(R.id.message_detail_comment_hint_rl) RelativeLayout mMessageDetailCommentHintRl;
@BindView(R.id.message_detail_sv) ScrollView mMessageDetailSv;
@BindView(R.id.message_detail_hint_line) View mMessageDetailLine;
@BindView(R.id.reuse_no_connection) LinearLayout mNoConnection;
private LinearLayoutManager mLayoutManager;
@ -74,10 +89,24 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
private CommentDao mCommentDao;
private ConcernEntity mConcernEntity;
private String newsId;
private int commentNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mConcernEntity = (ConcernEntity) AppController.get("ConcernEntity", true);
if (mConcernEntity == null) {
Intent intent = getIntent();
newsId = intent.getExtras().getString("newsId");
commentNum = intent.getExtras().getInt("commentNum");
}
View contentView = View.inflate(this, R.layout.activity_messagedetail, null);
init(contentView, "消息详情");
@ -87,7 +116,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
mCommentDao = new CommentDao(this);
adapter = new MessageDetailAdapter(this, mCommentDao, mMessageDetailRv);
adapter = new MessageDetailAdapter(this, mCommentDao, mMessageDetailRv, mConcernEntity);
mLayoutManager = new LinearLayoutManager(this);
mMessageDetailRv.setLayoutManager(mLayoutManager);
mMessageDetailRv.setAdapter(adapter);
@ -99,11 +128,12 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& !adapter.isOver() && !adapter.isLoading()
&& !adapter.isOver() && !adapter.isLoading() && mConcernEntity != null
&& mLayoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) {
adapter.addNormalComment(adapter.getItemCount() - adapter.getHotCommentListSize() - 3);
int offset = adapter.getItemCount() - adapter.getHotCommentListSize() - 3;
if (offset >= 10) { // 防止自动上滑时触发
adapter.addNormalComment(offset);
}
}
}
});
@ -117,8 +147,14 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
MessageDetailActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
if (sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment).isEmpty()) {
mMessageDetailIconDv.setImageURI("res:///" +
R.drawable.user_default_icon_comment);
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
}
mMessageDetailUserNameTv.setText(sp.getString("user_name", "光环用户"));
}
});
@ -126,8 +162,12 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
}).start();
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
if (sp.getString("user_icon", "res:///"+ R.drawable.user_default_icon_comment).isEmpty()) {
mMessageDetailIconDv.setImageURI("res:///" + R.drawable.user_default_icon_comment);
} else {
mMessageDetailIconDv.setImageURI(sp.getString("user_icon", "res:///"+
R.drawable.user_default_icon_comment));
}
mMessageDetailUserNameTv.setText(sp.getString("user_name", "光环用户"));
}
@ -148,6 +188,52 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
});
}
if (newsId != null ) {
getConcernDigest();
}
}
private void getConcernDigest() {
JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(Config.HOST + "article/"+ newsId +"/rich-digest",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Type listType = new TypeToken<ConcernEntity>() {}.getType();
Gson gson = new Gson();
mConcernEntity = gson.fromJson(response.toString(), listType);
adapter.addConcernEntity(mConcernEntity);
adapter.notifyDataSetChanged();
adapter.addHotComment(0);
getNewsViews();
if (commentNum == 0) {
setSoftInput(true);
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
showNoConnection(true);
}
});
AppController.addToRequestQueue(request);
}
private void getNewsViews() {
RetrofitManager.getData()
.getNewsViews(newsId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<ViewsEntity>>() {
@Override
public void call(List<ViewsEntity> viewsEntities) {
if (viewsEntities.size() >0) {
mConcernEntity.setViews(viewsEntities.get(0).getViews());
adapter.notifyItemChanged(0);
}
}
});
}
private TextWatcher watcher = new TextWatcher() {
@ -177,11 +263,16 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
};
@OnClick(R.id.message_detail_comment_hint)
@OnClick(R.id.message_detail_comment_hint_rl)
public void OnHintClikListener() {
setSoftInput(true);
}
@OnClick(R.id.reuse_no_connection)
public void OnConnectionClikListener() {
showNoConnection(false);
}
@OnTouch(R.id.message_detail_rv)
public boolean OnRecyclerTouchListener() {
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
@ -208,7 +299,9 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
e.printStackTrace();
}
final String newsId = adapter.getNewsId();
if (newsId == null) {
newsId = mConcernEntity.getId();
}
PostCommentUtils.addCommentData(Config.COMMENT_HOST + "article/" + newsId + "/comment"
, jsonObject.toString(), MessageDetailActivity.this, new PostCommentUtils.PostCommentListener() {
@Override
@ -232,19 +325,26 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
cacheObject.put("user", cacheUser);
CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class);
adapter.addNormalComment(commentEntity);
if (mConcernEntity != null) {
adapter.addNormalComment(commentEntity);
}
modifyNewsCommentVolleyCache(0, cacheObject, newsId);
} catch (JSONException e) {
e.printStackTrace();
}
adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2);
if (mConcernEntity != null) {
// 完成评论操作,添加评论数
adapter.addCommentCount();
//修改评论缓存
CommentManager.updateOkhttpCache(newsId);
adapter.notifyItemInserted(adapter.getHotCommentListSize() + 2);
adapter.notifyItemChanged(adapter.getItemCount() - 1); //刷新脚布局高度
} else {
showNoConnection(false);
}
// 完成评论操作,添加评论数
adapter.addCommentCount();
//修改评论缓存
CommentManager.updateOkhttpCache(newsId);
}
@Override
@ -252,6 +352,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
mSendingDialog.dismiss();
if (error.networkResponse == null) {
Utils.toast(MessageDetailActivity.this, "提交失败,请检查网络设置");
Utils.log("评论错误返回为空======");
return;
}
@ -308,13 +409,30 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
}
}
private void showNoConnection(boolean isShow) {
if (isShow) {
mNoConnection.setVisibility(View.VISIBLE);
mMessageDetailRv.setVisibility(View.GONE);
} else {
mNoConnection.setVisibility(View.GONE);
mMessageDetailRv.setVisibility(View.VISIBLE);
if (newsId != null ) {
getConcernDigest();
}
if (mMessageDetailCommentRl.getVisibility() == View.VISIBLE) {
setSoftInput(false);
}
}
}
//软键盘控制
private void setSoftInput(boolean isShow) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (isShow){
imm.showSoftInputFromInputMethod(mMessageDetailEt.getWindowToken(), 0);
imm.toggleSoftInputFromWindow(mMessageDetailEt.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
mMessageDetailCommentHint.setVisibility(View.GONE);
mMessageDetailCommentHintRl.setVisibility(View.GONE);
mMessageDetailLine.setVisibility(View.GONE);
mMessageDetailCommentRl.setVisibility(View.VISIBLE);
mMessageDetailUserRl.setVisibility(View.VISIBLE);
@ -324,7 +442,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
} else {
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
mMessageDetailCommentHint.setVisibility(View.VISIBLE);
mMessageDetailCommentHintRl.setVisibility(View.VISIBLE);
mMessageDetailLine.setVisibility(View.VISIBLE);
mMessageDetailCommentRl.setVisibility(View.GONE);
mMessageDetailUserRl.setVisibility(View.GONE);