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.view.MenuItem;
import android.view.View;
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.LoginShared;
import org.cnodejs.android.md.presenter.contract.IReplyPresenter;
import org.cnodejs.android.md.presenter.contract.ITopicHeaderPresenter;
import org.cnodejs.android.md.presenter.contract.ITopicPresenter;
import org.cnodejs.android.md.presenter.implement.ReplyPresenter;
import org.cnodejs.android.md.presenter.implement.TopicHeaderPresenter;
import org.cnodejs.android.md.presenter.implement.TopicPresenter;
import org.cnodejs.android.md.ui.base.StatusBarActivity;
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.listener.TopicJavascriptInterface;
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.ICreateReplyView;
import org.cnodejs.android.md.ui.view.IReplyView;
import org.cnodejs.android.md.ui.view.ITopicHeaderView;
import org.cnodejs.android.md.ui.view.ITopicView;
import org.cnodejs.android.md.ui.widget.TopicWebView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class TopicCompatActivity extends StatusBarActivity implements ITopicView, ITopicHeaderView, IReplyView, SwipeRefreshLayout.OnRefreshListener, Toolbar.OnMenuItemClickListener {
@BindView(R.id.toolbar)
protected Toolbar toolbar;
@BindView(R.id.refresh_layout)
protected SwipeRefreshLayout refreshLayout;
@BindView(R.id.web_topic)
protected TopicWebView webTopic;
@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 ITopicPresenter topicPresenter;
private ITopicHeaderPresenter topicHeaderPresenter;
private IReplyPresenter replyPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
ThemeUtils.configThemeBeforeOnCreate(this, R.style.AppThemeLight, R.style.AppThemeDark);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topic_compat);
ButterKnife.bind(this);
topicId = getIntent().getStringExtra(Navigator.TopicWithAutoCompat.EXTRA_TOPIC_ID);
toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this));
toolbar.inflateMenu(R.menu.topic);
toolbar.setOnMenuItemClickListener(this);
toolbar.setOnClickListener(new DoubleClickBackToContentTopListener(webTopic));
topicPresenter = new TopicPresenter(this, this);
topicHeaderPresenter = new TopicHeaderPresenter(this, this);
replyPresenter = new ReplyPresenter(this, this);
createReplyView = CreateReplyDialog.createWithAutoTheme(this, topicId, this);
webTopic.setFabReply(fabReply);
webTopic.setBridgeAndLoadPage(new TopicJavascriptInterface(this, createReplyView, topicHeaderPresenter, replyPresenter));
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;
webTopic.updateTopicAndUserId(topic, LoginShared.getId(this));
iconNoData.setVisibility(View.GONE);
}
@Override
public void onGetTopicFinish() {
refreshLayout.setRefreshing(false);
}
@Override
public void appendReplyAndUpdateViews(@NonNull Reply reply) {
webTopic.appendReply(reply);
}
@Override
public void onCollectTopicOk() {
webTopic.updateTopicCollect(true);
}
@Override
public void onDecollectTopicOk() {
webTopic.updateTopicCollect(false);
}
@Override
public void onUpReplyOk(@NonNull Reply reply) {
webTopic.updateReply(reply);
}
}