package uk.ac.cam.echo.fragments;
import android.app.DialogFragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import uk.ac.cam.echo.R;
import uk.ac.cam.echo.Toaster;
import uk.ac.cam.echo.client.ClientApi;
import uk.ac.cam.echo.data.Conference;
import uk.ac.cam.echo.data.Conversation;
import uk.ac.cam.echo.data.Tag;
public class AddConversationDialog extends DialogFragment implements
OnClickListener, OnEditorActionListener{
EditText title;
EditText tags;
Button add;
ProgressBar progress;
private static ClientApi api;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.add_conv_dialog, container, false);
title = (EditText)view.findViewById(R.id.convTitle);
tags = (EditText)view.findViewById(R.id.convTags);
progress = (ProgressBar)view.findViewById(R.id.addProgress);
add = (Button)view.findViewById(R.id.addButton);
add.setOnClickListener(this);
tags.setOnEditorActionListener(this);
try {
Window window = getDialog().getWindow();
window.setBackgroundDrawableResource(R.color.background);
// show soft-keyboard when dialog visible
window.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
} catch(NullPointerException e) { Log.e("Dialog", "No associated window"); }
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(getDialog() != null) {
getDialog().setTitle("Add Conversation");
}
}
// Factory to create dialog based on id
public static AddConversationDialog newInstance() {
AddConversationDialog cd = new AddConversationDialog();
return cd;
}
public void setApi(ClientApi clientApi) { api = clientApi; }
@Override
public void onClick(View v) {
if(v.getId() == R.id.addButton) {
add.setVisibility(View.GONE);
progress.setVisibility(View.VISIBLE);
String titleInput = title.getText().toString();
if(titleInput.equals("")) {
Toaster.displayShort(getActivity(), "Please name the conversation");
return;
}
String tagsInput = tags.getText().toString();
if(tagsInput.equals("")) {
Toaster.displayShort(getActivity(), "Please enter atleast one tag");
return;
}
Toaster.displayLong(getActivity(), "Restricted functionality on demonstration application!");
//new AddConversation().execute(titleInput, tagsInput);
}
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE) {
add.performClick();
return true;
}
return false;
}
private class AddConversation extends AsyncTask<String, Void, Conversation> {
Conference conference;
@Override
protected Conversation doInBackground(String... params) {
String convName = params[0];
String convTags = params[1];
conference = api.conferenceResource.getAll().get(0);
Conversation newConv = api.newConversation();
newConv.setName(convName);
newConv.setConference(conference);
newConv.save();
//newConv = api.conversationResource.get(convName); //temp hack to load information from db
String[] tags = convTags.split(" ");
for(String tagName : tags) {
Tag t = api.newTag(api.conversationResource.get(newConv.getId()));
t.setName(tagName);
api.conversationResource.getTagResource(newConv.getId()).create(t);
}
return newConv;
}
@Override
protected void onPostExecute(Conversation result) {
getDialog().dismiss();
}
}
}