package org.cnodejs.android.md.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import com.melnykov.fab.FloatingActionButton;
import org.cnodejs.android.md.R;
import org.cnodejs.android.md.model.api.ApiDefine;
import org.cnodejs.android.md.model.entity.Reply;
import org.cnodejs.android.md.model.entity.Topic;
import org.cnodejs.android.md.model.entity.TopicWithReply;
import org.cnodejs.android.md.model.storage.SettingShared;
import org.cnodejs.android.md.model.util.EntityUtils;
import org.cnodejs.android.md.presenter.contract.ITopicPresenter;
import org.cnodejs.android.md.presenter.implement.TopicPresenter;
import org.cnodejs.android.md.ui.adapter.ReplyListAdapter;
import org.cnodejs.android.md.ui.base.StatusBarActivity;
import org.cnodejs.android.md.ui.dialog.AlertDialogUtils;
import org.cnodejs.android.md.ui.dialog.CreateReplyDialog;
import org.cnodejs.android.md.ui.listener.DoubleClickBackToContentTopListener;
import org.cnodejs.android.md.ui.listener.NavigationFinishClickListener;
import org.cnodejs.android.md.ui.util.Navigator;
import org.cnodejs.android.md.ui.util.RefreshUtils;
import org.cnodejs.android.md.ui.util.ThemeUtils;
import org.cnodejs.android.md.ui.view.IBackToContentTopView;
import org.cnodejs.android.md.ui.view.ICreateReplyView;
import org.cnodejs.android.md.ui.view.ITopicView;
import org.cnodejs.android.md.ui.viewholder.TopicHeader;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class TopicActivity extends StatusBarActivity implements ITopicView, IBackToContentTopView, SwipeRefreshLayout.OnRefreshListener, Toolbar.OnMenuItemClickListener {
@BindView(R.id.toolbar)
protected Toolbar toolbar;
@BindView(R.id.refresh_layout)
protected SwipeRefreshLayout refreshLayout;
@BindView(R.id.list_view)
protected ListView listView;
@BindView(R.id.icon_no_data)
protected View iconNoData;
@BindView(R.id.fab_reply)
protected FloatingActionButton fabReply;
private String topicId;
private Topic topic;
private ICreateReplyView createReplyView;
private TopicHeader header;
private ReplyListAdapter adapter;
private ITopicPresenter topicPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
ThemeUtils.configThemeBeforeOnCreate(this, R.style.AppThemeLight, R.style.AppThemeDark);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topic);
ButterKnife.bind(this);
if (SettingShared.isShowTopicRenderCompatTip(this)) {
SettingShared.markShowTopicRenderCompatTip(this);
AlertDialogUtils.createBuilderWithAutoTheme(this)
.setMessage(R.string.topic_render_compat_tip)
.setPositiveButton(R.string.ok, null)
.show();
}
topicId = getIntent().getStringExtra(Navigator.TopicWithAutoCompat.EXTRA_TOPIC_ID);
if (!TextUtils.isEmpty(getIntent().getStringExtra(Navigator.TopicWithAutoCompat.EXTRA_TOPIC))) {
topic = EntityUtils.gson.fromJson(getIntent().getStringExtra(Navigator.TopicWithAutoCompat.EXTRA_TOPIC), Topic.class);
}
toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this));
toolbar.inflateMenu(R.menu.topic);
toolbar.setOnMenuItemClickListener(this);
toolbar.setOnClickListener(new DoubleClickBackToContentTopListener(this));
createReplyView = CreateReplyDialog.createWithAutoTheme(this, topicId, this);
header = new TopicHeader(this, listView);
header.updateViews(topic, false, 0);
adapter = new ReplyListAdapter(this, createReplyView);
listView.setAdapter(adapter);
iconNoData.setVisibility(topic == null ? View.VISIBLE : View.GONE);
fabReply.attachToListView(listView);
topicPresenter = new TopicPresenter(this, this);
RefreshUtils.init(refreshLayout, this);
RefreshUtils.refresh(refreshLayout, this);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_share:
if (topic != null) {
Navigator.openShare(this, "《" + topic.getTitle() + "》\n" + ApiDefine.TOPIC_LINK_URL_PREFIX + topicId + "\n—— 来自CNode社区");
}
return true;
default:
return false;
}
}
@Override
public void onRefresh() {
topicPresenter.getTopicAsyncTask(topicId);
}
@OnClick(R.id.fab_reply)
protected void onBtnReplyClick() {
if (topic != null && LoginActivity.checkLogin(this)) {
createReplyView.showWindow();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == LoginActivity.REQUEST_LOGIN && resultCode == RESULT_OK) {
refreshLayout.setRefreshing(true);
onRefresh();
}
}
@Override
public void onGetTopicOk(@NonNull TopicWithReply topic) {
this.topic = topic;
header.updateViews(topic);
adapter.setReplyList(topic.getReplyList());
adapter.notifyDataSetChanged();
iconNoData.setVisibility(View.GONE);
}
@Override
public void onGetTopicFinish() {
refreshLayout.setRefreshing(false);
}
@Override
public void appendReplyAndUpdateViews(@NonNull Reply reply) {
adapter.addReply(reply);
adapter.notifyDataSetChanged();
header.updateReplyCount(adapter.getReplyList().size());
listView.smoothScrollToPosition(adapter.getReplyList().size());
}
@Override
public void backToContentTop() {
listView.setSelection(0);
}
}