package com.conference.app.lib.ui;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.conference.app.lib.R;
import com.conference.app.lib.database.DatabaseHelper;
import com.conference.app.lib.database.tables.SessionTable;
import com.conference.app.lib.database.tables.SessionTrackTable;
import com.conference.app.lib.database.tables.TrackTable;
import com.conference.app.lib.ui.adapter.SessionAdapter;
import com.conference.app.lib.ui.adapter.SessionSelectionAdapter;
public class Session extends Activity {
private static final String TAG = Session.class.getName();
private static final boolean DEBUG = false;
public static final String EXTRA_TRACK_SEL = "tracksel";
public static final String EXTRA_TRACK_NAME = "trackname";
private static final String EXTRA_TRACK_ALL_FLAG = "ALL";
private ListView sessionsList;
private TextView sessionsTitle;
private SQLiteDatabase db;
private boolean isFirstInit = true;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sessions);
final DatabaseHelper helper = new DatabaseHelper(Session.this);
db = helper.getReadableDatabase();
initViews();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (!isFirstInit) {
return;
}
isFirstInit = false;
final Intent intent = getIntent();
if (intent != null && intent.hasExtra(EXTRA_TRACK_SEL)) {
if (intent.hasExtra(EXTRA_TRACK_NAME) && intent.getStringExtra(EXTRA_TRACK_NAME) != null) {
sessionsTitle.setText(intent.getStringExtra(EXTRA_TRACK_NAME));
sessionsTitle.setSelected(true);
}
new LoadSessions().execute(intent.getStringExtra(EXTRA_TRACK_SEL));
} else {
new LoadTracks().execute();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (db != null && db.isOpen()) {
db.close();
}
isFirstInit = true;
}
private void initViews() {
sessionsList = (ListView) findViewById(R.id.sessionslistview);
sessionsTitle = (TextView) findViewById(R.id.sessions_title_text);
}
public void onClickActionBarHome(final View view) {
final Intent intent = new Intent(this, Dashboard.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
// overridePendingTransition(R.anim.home_enter, R.anim.home_exit);
}
private class LoadTracks extends AsyncTask<Void, Void, Cursor> {
@Override
protected Cursor doInBackground(final Void... params) {
final Cursor cursor = db.query(TrackTable.TABLE_NAME, new String[] { TrackTable.ID, TrackTable.COLOR, TrackTable.NAME,
TrackTable.UNIQUE_ID, TrackTable.ORDER }, null, null, null, null, TrackTable.ORDER + " ASC");
// startManagingCursor(cursor);
return cursor;
}
@Override
protected void onPostExecute(final Cursor result) {
if (result != null) {
final SessionSelectionAdapter adapter = new SessionSelectionAdapter(Session.this, result);
sessionsList.setAdapter(adapter);
sessionsList.invalidate();
adapter.notifyDataSetChanged();
sessionsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
if (position == 0) {
final Intent intent = new Intent(Session.this, Session.class);
intent.putExtra(EXTRA_TRACK_SEL, EXTRA_TRACK_ALL_FLAG);
intent.putExtra(EXTRA_TRACK_NAME, getString(R.string.sessions_title));
startActivity(intent);
} else {
final Cursor cursor = (Cursor) parent.getItemAtPosition(position - 1);
final String uniqueTrackId = cursor.getString(cursor.getColumnIndex(TrackTable.UNIQUE_ID));
final String trackName = cursor.getString(cursor.getColumnIndex(TrackTable.NAME));
final Intent intent = new Intent(Session.this, Session.class);
intent.putExtra(EXTRA_TRACK_SEL, uniqueTrackId);
intent.putExtra(EXTRA_TRACK_NAME, trackName);
startActivity(intent);
}
}
});
}
}
}
private class LoadSessions extends AsyncTask<String, Void, Cursor> {
@Override
protected Cursor doInBackground(final String... params) {
Cursor cursor;
if (EXTRA_TRACK_ALL_FLAG.equals(params[0])) {
cursor = db.query(SessionTable.TABLE_NAME, new String[] { SessionTable.ID, SessionTable.TYPE, SessionTable.NAME,
SessionTable.SHORT_NAME, SessionTable.SEARCH_NAME, SessionTable.UNIQUE_ID, SessionTable.FAVORITE,
// SessionTable.START_DATE, SessionTable.END_DATE }, null, null, null, null, SessionTable.SEARCH_NAME
// + " COLLATE NOCASE"); //Eddie Li Change the order sequence
SessionTable.START_DATE, SessionTable.END_DATE }, null, null, null, null, SessionTable.START_DATE
+ " ASC");
} else {
final String query = "select s." + SessionTable.ID + ", s." + SessionTable.TYPE + ", s." + SessionTable.NAME + ", s."
+ SessionTable.SHORT_NAME + ", s." + SessionTable.UNIQUE_ID + ", s." + SessionTable.FAVORITE + ", s."
+ SessionTable.SEARCH_NAME + ", s." + SessionTable.START_DATE + ", s." + SessionTable.END_DATE + " from "
+ SessionTable.TABLE_NAME + " s, " + SessionTrackTable.TABLE_NAME + " st where st."
+ SessionTrackTable.SESSION_ID + "=s." + SessionTable.UNIQUE_ID + " AND st." + SessionTrackTable.TRACK_ID
// + "=? ORDER BY s." + SessionTable.SEARCH_NAME + " COLLATE NOCASE"; //Eddie Li Change the order sequence
+ "=? ORDER BY s." + SessionTable.START_DATE + " ASC";
Log.d(TAG, query);
cursor = db.rawQuery(query, new String[] { params[0] });
}
startManagingCursor(cursor);
return cursor;
}
@Override
protected void onPostExecute(final Cursor result) {
if (result != null) {
final SessionAdapter adapter = new SessionAdapter(Session.this, result);
sessionsList.setAdapter(adapter);
sessionsList.invalidate();
adapter.notifyDataSetChanged();
sessionsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
final Cursor cursor = (Cursor) parent.getItemAtPosition(position);
final String uniqueSessionId = cursor.getString(cursor.getColumnIndex(SessionTable.UNIQUE_ID));
final Intent intent = new Intent(Session.this, SessionDetails.class);
intent.putExtra(SessionDetails.EXTRA_SESSION_ID, uniqueSessionId);
startActivity(intent);
}
});
}
}
}
}