package uk.ac.cam.echo.fragments;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.Collection;
import uk.ac.cam.echo.ConversationStringUtil;
import uk.ac.cam.echo.R;
import uk.ac.cam.echo.activities.ConversationDetailActivity;
import uk.ac.cam.echo.activities.ConversationListActivity;
import uk.ac.cam.echo.client.ClientApi;
import uk.ac.cam.echo.data.Conversation;
import uk.ac.cam.echo.data.Message;
import uk.ac.cam.echo.data.Tag;
import uk.ac.cam.echo.data.User;
import uk.ac.cam.echo.services.EchoService;
public class ConversationDialog extends DialogFragment implements
OnClickListener{
private TextView title;
private TextView users;
private TextView tags;
private TextView online;
private TextView preview;
private Button join;
private ProgressBar progress;
private static ClientApi api;
private static User user;
private static EchoService echoService;
private ConversationFragment cf;
private long id;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.conv_dialog_two, container, false);
//id = getArguments().getLong("_id");
title = (TextView)view.findViewById(R.id.convTitleDialog);
users = (TextView)view.findViewById(R.id.convUsersDialog);
tags = (TextView)view.findViewById(R.id.convTagsDialog);
online = (TextView)view.findViewById(R.id.convOnlineDialog);
preview = (TextView)view.findViewById(R.id.previewDialog);
progress = (ProgressBar)view.findViewById(R.id.convProgressDialog);
join = (Button)view.findViewById(R.id.convJoinDialog);
join.setOnClickListener(this);
cf = ConversationFragment.newInstance(id, true, echoService);
cf.setApi(api);
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.previewFrame, cf);
transaction.commit();
try {
getDialog().getWindow().setBackgroundDrawableResource(R.color.background);
} catch(NullPointerException e) { Log.e("Dialog", "No associated window"); }
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
new GetConversation().execute(id);
cf.getAndListen();
}
// Factory to create dialog based on id
public static ConversationDialog newInstance(long id, EchoService service) {
ConversationDialog cd = new ConversationDialog();
Bundle args = new Bundle();
cd.setId(id);
args.putLong("_id", id);
cd.setArguments(args);
cd.setService(service);
user = service.getUser();
return cd;
}
public long getShownIndex() {
return getArguments().getLong("_id");
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.convJoinDialog) {
ConversationListActivity cla = (ConversationListActivity)getActivity();
if(id != cla.getService().getConversationId()) {
cla.getService().listenToConversation(id);
}
Intent intent = new Intent(getActivity(), ConversationDetailActivity.class);
intent.putExtra("_id", id);
startActivity(intent);
}
}
public void setApi(ClientApi clientApi) { api = clientApi; }
public void setId(long id) { this.id = id;}
public void setService(EchoService service) { echoService = service; }
private class GetConversation extends AsyncTask<Long, Void, Conversation> {
String convName;
String usersText;
String tagText;
String onlineText;
@Override
protected Conversation doInBackground(Long... params) {
Conversation conversation = api.conversationResource.get(params[0]);
Collection<User> users = conversation.getUsers();
Collection<Tag> tags = conversation.getTags();
convName = conversation.getName();
onlineText = ConversationStringUtil.getOnlineText(users);
usersText = ConversationStringUtil.getUserText(users);
tagText = ConversationStringUtil.getTagText(tags);
return conversation;
}
@Override
protected void onPostExecute(Conversation conversation) {
super.onPostExecute(conversation);
if(conversation == null) {
Log.d("ConvDialog", "No conversation retrieved!");
return;
}
progress.setVisibility(View.GONE);
if(getDialog() != null) {
getDialog().setTitle(convName);
title.setVisibility(View.GONE);
}else {
title.setText(convName);
}
users.setText(usersText);
tags.setText(tagText);
online.setText(onlineText);
}
}
}