package edu.stanford.cs.sujogger.viewer;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import edu.stanford.cs.sujogger.R;
import edu.stanford.cs.sujogger.db.DatabaseHelper;
import edu.stanford.cs.sujogger.db.GPStracking.GameMessages;
import edu.stanford.cs.sujogger.db.GPStracking.Users;
import edu.stanford.cs.sujogger.util.Common;
import edu.stanford.cs.sujogger.util.GameMessageAdapter;
import edu.stanford.cs.sujogger.util.MessageObject;
import edu.stanford.cs.sujogger.util.SeparatedListAdapter;
import edu.stanford.cs.sujogger.util.UserListAdapter;
public class GameMessageDetail extends ListActivity {
private static final String TAG = "OGT.GameMessageDetail";
private long mMessageId;
private DatabaseHelper mDbHelper;
private Cursor mMessage;
private MessageObject mMsgObject;
private long[] mReplyRecipientIds;
private Cursor mPeople;
private SeparatedListAdapter mGroupAdapter;
private int mDidStart;
private Button mStartButton;
private Button mReplyButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Common.log(TAG, "onCreate()");
this.setContentView(R.layout.gamemessagedetail);
mMessageId = savedInstanceState != null ? savedInstanceState.getLong(GameMessages.TABLE) : 0;
if (mMessageId == 0) {
Bundle extras = getIntent().getExtras();
mMessageId = extras != null ? extras.getLong(GameMessages.TABLE) : 0;
}
mDbHelper = new DatabaseHelper(this);
mDbHelper.openAndGetDb();
mMessage = mDbHelper.getMessageWithId(mMessageId);
startManagingCursor(mMessage);
mMessage.moveToFirst();
mPeople = mDbHelper.getUsersForMessage(mMessageId, mMessage.getLong(1));
startManagingCursor(mPeople);
mMsgObject = new MessageObject(mMessage.getInt(2), mMessage.getLong(5),
mMessage.getLong(4), mMessage.getString(6), mMessage.getString(7));
mDidStart = mMessage.getInt(9);
mPeople.moveToPosition(-1);
ArrayList<Long> recipients = new ArrayList<Long>(mPeople.getCount());
while(mPeople.moveToNext())
if (mPeople.getLong(1) != Common.getRegisteredUser(this).id)
recipients.add(mPeople.getLong(1));
mReplyRecipientIds = new long[recipients.size()];
for (int i = 0; i < mReplyRecipientIds.length; i++)
mReplyRecipientIds[i] = recipients.get(i);
//Common.log(TAG, Arrays.toString(mReplyRecipientIds));
mPeople.moveToFirst();
mStartButton = (Button)findViewById(R.id.startbutton);
mStartButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startTrack();
}
});
mStartButton.setVisibility(View.GONE);
mReplyButton = (Button)findViewById(R.id.replybutton);
mReplyButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startMessageSender();
}
});
if (!(mPeople.getCount() == 1 && mPeople.getInt(1) == Common.getRegisteredUser(this).id)) {
if ((mMsgObject.mType == GameMessages.TYPE_INVITE || mMsgObject.mType == GameMessages.TYPE_CHALLENGE) &&
mDidStart == 0)
mStartButton.setVisibility(View.VISIBLE);
if (!(mPeople.getCount() > 1))
mReplyButton.setText("Reply");
}
setTitle("Message");
fillData();
}
@Override
protected void onRestart() {
Common.log(TAG, "onRestart()");
mDbHelper.openAndGetDb();
super.onRestart();
}
@Override
protected void onResume() {
Common.log(TAG, "onResume()");
super.onResume();
Common.log(TAG, "onResume(): mMessageId = " + mMessageId);
DatabaseUtils.dumpCursor(mMessage);
}
@Override
protected void onDestroy() {
mDbHelper.close();
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(GameMessages.TABLE, mMessageId);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Log.v(TAG, "position = " + position + "; id = " + id);
if (position < 3) return;
int userId = (Integer)mGroupAdapter.getItem(position);
Common.log(TAG, "onListItemClick(): user id = " + userId);
Intent i = new Intent(this, PeopleTrackList.class);
i.putExtra("userId", userId);
startActivity(i);
}
private void startTrack() {
Common.log(TAG, "startTrack()");
mDbHelper.setMessageToStarted(mMessageId);
Intent intent = new Intent(this, LoggerMap.class);
intent.putExtra(LoggerMap.PARTNER_RUN_KEY, true);
startActivity(intent);
}
private void startMessageSender() {
Common.log(TAG, "startMessageSender()");
Intent intent = new Intent(this, MessageSender.class);
intent.putExtra(Users.TABLE, mReplyRecipientIds);
if (mMsgObject.mType == GameMessages.TYPE_GENERIC)
intent.putExtra(GameMessages.SUBJECT, "Re: " + mMsgObject.mSubject);
startActivity(intent);
}
private void fillData() {
mGroupAdapter = new SeparatedListAdapter(this);
mGroupAdapter.addSection("", new GameMessageAdapter(this, mMessage, true));
if (mPeople != null)
mGroupAdapter.addSection("People", new UserListAdapter(this, mPeople, false, null));
setListAdapter(mGroupAdapter);
}
}