package com.yaoyumeng.v2ex.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import com.yaoyumeng.v2ex.Application;
import com.yaoyumeng.v2ex.R;
import com.yaoyumeng.v2ex.api.HttpRequestHandler;
import com.yaoyumeng.v2ex.api.V2EXManager;
import com.yaoyumeng.v2ex.model.MemberModel;
import com.yaoyumeng.v2ex.model.NodeModel;
import com.yaoyumeng.v2ex.model.PersistenceHelper;
import com.yaoyumeng.v2ex.model.TopicModel;
import com.yaoyumeng.v2ex.ui.fragment.AllNodesFragment;
import com.yaoyumeng.v2ex.ui.swipeback.SwipeBackActivity;
import com.yaoyumeng.v2ex.ui.widget.CustomDialog;
import com.yaoyumeng.v2ex.ui.widget.CustomSpinner;
import com.yaoyumeng.v2ex.utils.InputUtils;
import com.yaoyumeng.v2ex.utils.MessageUtils;
import com.yaoyumeng.v2ex.utils.SimpleTextWatcher;
import java.util.ArrayList;
public class TopicAddActivity extends SwipeBackActivity implements HttpRequestHandler<Integer> {
EditText mTitle;
EditText mContent;
MenuItem mMenuAdd;
NodeModel mNode;
String mNodeName;
CustomSpinner mNodeSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topic_add);
mTitle = (EditText) findViewById(R.id.topic_add_title);
mContent = (EditText) findViewById(R.id.topic_add_content);
mNodeSpinner = (CustomSpinner) findViewById(R.id.topic_add_node);
mTitle.addTextChangedListener(textWatcher);
mContent.addTextChangedListener(textWatcher);
Intent intent = getIntent();
if (intent.hasExtra("model")) {
mNode = intent.getParcelableExtra("model");
if(mNode != null) {
mNodeName = mNode.name;
mNodeSpinner.setText(mNode.title);
}
} else {
mNodeName = intent.getStringExtra("node_name");
}
showProgressBar(true, getString(R.string.topic_add_get_all_nodes));
V2EXManager.getAllNodes(this, false, nodesRequester);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_topic_add, menu);
mMenuAdd = menu.findItem(R.id.action_add);
updateAddButton();
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
createTopic();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onSuccess(Integer data) {
showProgressBar(false);
Intent intent = new Intent();
TopicModel topic = new TopicModel();
topic.node = mNode;
topic.title = mTitle.getText().toString();
topic.content = topic.contentRendered = mContent.getText().toString();
topic.created = System.currentTimeMillis() / 1000;
topic.member = new MemberModel();
topic.member.username = mLoginProfile.username;
topic.member.avatar = mLoginProfile.avatar;
intent.putExtra("create_result", (Parcelable) topic);
setResult(Activity.RESULT_OK, intent);
finish();
}
@Override
public void onSuccess(Integer data, int total, int current) {
}
@Override
public void onFailure(String error) {
showProgressBar(false);
MessageUtils.showErrorMessage(this, error);
}
@Override
public void onBackPressed() {
if (mNodeSpinner.isShowPopup()){
mNodeSpinner.dismiss();
} else if (mTitle.getText().toString().isEmpty() &&
mContent.getText().toString().isEmpty()) {
finish();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog dialog = builder.setTitle(R.string.title_activity_topic_add)
.setMessage(R.string.topic_add_quit_or_not)
.setPositiveButton(R.string.title_confirm_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton(R.string.title_confirm_cancel, null).show();
CustomDialog.dialogTitleLineColor(this, dialog);
}
}
private SimpleTextWatcher textWatcher = new SimpleTextWatcher() {
@Override
public void afterTextChanged(Editable s) {
updateAddButton();
}
};
private HttpRequestHandler<ArrayList<NodeModel>> nodesRequester = new HttpRequestHandler<ArrayList<NodeModel>>(){
@Override
public void onSuccess(ArrayList<NodeModel> data) {
showProgressBar(false);
ArrayAdapter<NodeModel> adapter = new ArrayAdapter(TopicAddActivity.this,
android.R.layout.select_dialog_item, data);
mNodeSpinner.setAdapter(adapter);
mNodeSpinner.setOnItemSelectedListener(new CustomSpinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mNode = (NodeModel)parent.getItemAtPosition(position);
mNodeName = mNode.name;
mNodeSpinner.setText(mNode.title);
}
@Override
public void onNothingSelected(AdapterView<?> parent){
mNodeSpinner.setText("");
mNode = null;
mNodeName = "";
}
});
}
@Override
public void onSuccess(ArrayList<NodeModel> data, int totalPages, int currentPage) {
onSuccess(data);
}
@Override
public void onFailure(String error) {
showProgressBar(false);
MessageUtils.showErrorMessage(TopicAddActivity.this, error);
}
};
private void createTopic() {
InputUtils.popSoftkeyboard(this, mContent, false);
showProgressBar(R.string.topic_add_working);
//onSuccess(200);
V2EXManager.topicCreateWithNodeName(this, mNodeName, mTitle.getText().toString(),
mContent.getText().toString(), this);
}
private void updateAddButton() {
enableSendButton(!mTitle.getText().toString().isEmpty() && !mNodeName.isEmpty());
}
private void enableSendButton(boolean enable) {
if (mMenuAdd == null)
return;
mMenuAdd.setEnabled(enable);
}
}