package org.cnodejs.android.md.ui.dialog;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StyleRes;
import android.support.v7.app.AppCompatDialog;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import org.cnodejs.android.md.R;
import org.cnodejs.android.md.model.entity.Reply;
import org.cnodejs.android.md.model.storage.SettingShared;
import org.cnodejs.android.md.presenter.contract.ICreateReplyPresenter;
import org.cnodejs.android.md.presenter.implement.CreateReplyPresenter;
import org.cnodejs.android.md.ui.util.ToastUtils;
import org.cnodejs.android.md.ui.view.ICreateReplyView;
import org.cnodejs.android.md.ui.view.ITopicView;
import org.cnodejs.android.md.ui.viewholder.EditorBarViewHolder;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class CreateReplyDialog extends AppCompatDialog implements ICreateReplyView {
public static CreateReplyDialog createWithAutoTheme(@NonNull Activity activity, @NonNull String topicId, @NonNull ITopicView topicView) {
return new CreateReplyDialog(
activity,
SettingShared.isEnableThemeDark(activity) ? R.style.AppDialogDark_TopicReply : R.style.AppDialogLight_TopicReply,
topicId,
topicView
);
}
@BindView(R.id.layout_editor_bar)
protected ViewGroup editorBar;
@BindView(R.id.layout_target)
protected ViewGroup layoutTarget;
@BindView(R.id.tv_target)
protected TextView tvTarget;
@BindView(R.id.edt_content)
protected EditText edtContent;
private final String topicId;
private final ITopicView topicView;
private final ProgressDialog progressDialog;
private final ICreateReplyPresenter createReplyPresenter;
private String targetId = null;
private CreateReplyDialog(@NonNull Activity activity, @StyleRes int theme, @NonNull String topicId, @NonNull ITopicView topicView) {
super(activity, theme);
setContentView(R.layout.dialog_create_reply);
ButterKnife.bind(this);
this.topicId = topicId;
this.topicView = topicView;
progressDialog = ProgressDialog.createWithAutoTheme(activity);
progressDialog.setCancelable(false);
new EditorBarViewHolder(activity, editorBar, edtContent); // 创建editorBar
createReplyPresenter = new CreateReplyPresenter(activity, this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
getWindow().setGravity(Gravity.BOTTOM);
}
@OnClick(R.id.btn_tool_close)
protected void onBtnToolCloseClick() {
dismissWindow();
}
@OnClick(R.id.btn_tool_send)
protected void onBtnToolSendClick() {
createReplyPresenter.createReplyAsyncTask(topicId, edtContent.getText().toString().trim(), targetId);
}
@OnClick(R.id.btn_clear_target)
protected void onBtnClearTargetClick() {
targetId = null;
layoutTarget.setVisibility(View.GONE);
}
@Override
public void showWindow() {
show();
}
@Override
public void dismissWindow() {
dismiss();
}
@Override
public void onAt(@NonNull Reply target, @NonNull Integer targetPosition) {
targetId = target.getId();
layoutTarget.setVisibility(View.VISIBLE);
tvTarget.setText(getContext().getString(R.string.reply_$d_floor, targetPosition + 1));
edtContent.getText().insert(edtContent.getSelectionEnd(), "@" + target.getAuthor().getLoginName() + " ");
showWindow();
}
@Override
public void onContentError(@NonNull String message) {
ToastUtils.with(getContext()).show(message);
edtContent.requestFocus();
}
@Override
public void onReplyTopicOk(@NonNull Reply reply) {
topicView.appendReplyAndUpdateViews(reply);
dismissWindow();
targetId = null;
layoutTarget.setVisibility(View.GONE);
edtContent.setText(null);
ToastUtils.with(getContext()).show(R.string.post_success);
}
@Override
public void onReplyTopicStart() {
progressDialog.show();
}
@Override
public void onReplyTopicFinish() {
progressDialog.dismiss();
}
}