package com.conference.app.lib.ui; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.TimeZone; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; 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.ConferenceTable; import com.conference.app.lib.database.tables.SessionTable; import com.conference.app.lib.ui.adapter.ScheduleListAdapter; import com.conference.app.lib.ui.adapter.SchedulePagerAdapter; public class Schedule extends Activity { private static final String TAG = Schedule.class.getName(); private static final boolean DEBUG = false; private static final int DAY_TIME_IN_MS = 1000 * 60 * 60 * 24; private ViewPager pager; private SchedulePagerAdapter pagerAdapter; private SQLiteDatabase db; private Locale language; private int mCurrentItem = 0; private boolean isFirstInit = true; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.schedule); final DatabaseHelper helper = new DatabaseHelper(this); db = helper.getReadableDatabase(); initLanguage(); } @Override protected void onResume() { super.onResume(); if (!isFirstInit) { return; } isFirstInit = false; initViews(); initViewValues(); pagerAdapter.showDots(0); final Cursor confCursor = db.query(ConferenceTable.TABLE_NAME, ConferenceTable.ALL_COLUMNS, null, null, null, null, null); startManagingCursor(confCursor); confCursor.moveToFirst(); final String startDateAsString = confCursor.getString(confCursor.getColumnIndex(ConferenceTable.START_DATE)); final String endDateAsString = confCursor.getString(confCursor.getColumnIndex(ConferenceTable.END_DATE)); stopManagingCursor(confCursor); confCursor.close(); final SimpleDateFormat formater = new SimpleDateFormat("dd.MM.yyyy", Locale.GERMAN); formater.setTimeZone(TimeZone.getTimeZone("GMT+1")); try { Calendar now = Calendar.getInstance(); now.setTimeZone(TimeZone.getTimeZone("GMT+1")); final Date startDate = formater.parse(startDateAsString); final Date endDate = formater.parse(endDateAsString); int tmpPosition = 0; while (startDate.getTime() + DAY_TIME_IN_MS <= endDate.getTime()) { tmpPosition++; startDate.setTime(startDate.getTime() + DAY_TIME_IN_MS); Calendar conDate = Calendar.getInstance(); conDate.setTime(startDate); if (now.get(Calendar.YEAR) == conDate.get(Calendar.YEAR) && now.get(Calendar.MONTH) == conDate.get(Calendar.MONTH) && now.get(Calendar.DATE) == conDate.get(Calendar.DATE)) { mCurrentItem = tmpPosition; break; } } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } pager.setCurrentItem(mCurrentItem); } @Override protected void onDestroy() { super.onDestroy(); if (db != null && db.isOpen()) { db.close(); } isFirstInit = true; } private void initLanguage() { final String langCode = getString(R.string.lang_code); if ("DE".equals(langCode)) { language = Locale.GERMAN; } else { language = Locale.US; } } private void initViews() { pager = (ViewPager) findViewById(R.id.schedulePager); pagerAdapter = new SchedulePagerAdapter(createPages(), pager); pager.setAdapter(pagerAdapter); } private void initViewValues() { pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(final int pagePosition) { mCurrentItem = pagePosition; //Eddie Li Keep current page after back from background pagerAdapter.showDots(pagePosition); } @Override public void onPageScrolled(final int currentPosition, final float arg1, final int arg2) { } @Override public void onPageScrollStateChanged(final int arg0) { } }); } private List<View> createPages() { final ArrayList<String> conferenceDays = new ArrayList<String>(); final ArrayList<String> displayConferenceDays = new ArrayList<String>(); final Cursor confCursor = db.query(ConferenceTable.TABLE_NAME, ConferenceTable.ALL_COLUMNS, null, null, null, null, null); startManagingCursor(confCursor); confCursor.moveToFirst(); final String startDateAsString = confCursor.getString(confCursor.getColumnIndex(ConferenceTable.START_DATE)); final String endDateAsString = confCursor.getString(confCursor.getColumnIndex(ConferenceTable.END_DATE)); stopManagingCursor(confCursor); confCursor.close(); final SimpleDateFormat formater = new SimpleDateFormat("dd.MM.yyyy", Locale.GERMAN); final SimpleDateFormat formater2 = new SimpleDateFormat("EEEE, dd MMM yyyy", language); formater.setTimeZone(TimeZone.getTimeZone("GMT+1")); formater2.setTimeZone(TimeZone.getTimeZone("GMT+1")); try { final Date startDate = formater.parse(startDateAsString); final Date endDate = formater.parse(endDateAsString); displayConferenceDays.add(formater2.format(startDate)); conferenceDays.add(formater.format(startDate)); while (startDate.getTime() + DAY_TIME_IN_MS <= endDate.getTime()) { startDate.setTime(startDate.getTime() + DAY_TIME_IN_MS); conferenceDays.add(formater.format(startDate)); displayConferenceDays.add(formater2.format(startDate)); } } catch (ParseException e) { Log.e(TAG, e.getMessage(), e); } final Iterator<String> daysIterator = conferenceDays.iterator(); final Iterator<String> displayDaysIterator = displayConferenceDays.iterator(); final List<View> pageViews = new ArrayList<View>(); for (int count = 1; displayDaysIterator.hasNext(); count++) { final String displayDate = displayDaysIterator.next(); final String day = daysIterator.next(); final Cursor sessionCursor = db.query(SessionTable.TABLE_NAME, SessionTable.ALL_COLUMNS, SessionTable.START_DATE + " LIKE '%" + day + "%'", null, null, null, SessionTable.START_DATE + " ASC"); startManagingCursor(sessionCursor); final int currentViewNr = count - 1; final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View parentView = inflater.inflate(R.layout.schedule_list, null, true); final TextView title = (TextView) parentView.findViewById(R.id.scheduleTitle); title.setText(displayDate); final ImageView leftIndicator = (ImageView) parentView.findViewById(R.id.scheduleLeft); if (count == 1) { leftIndicator.setVisibility(View.INVISIBLE); } else { leftIndicator.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { pager.setCurrentItem(currentViewNr - 1); } }); } final ImageView rightIndicator = (ImageView) parentView.findViewById(R.id.scheduleRight); if (displayDaysIterator.hasNext()) { rightIndicator.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { pager.setCurrentItem(currentViewNr + 1); } }); } else { rightIndicator.setVisibility(View.INVISIBLE); } final ListView scheduleList = (ListView) parentView.findViewById(R.id.scheduleList); scheduleList.setAdapter(new ScheduleListAdapter(this, sessionCursor)); scheduleList.setItemsCanFocus(true); scheduleList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(final AdapterView<?> adapter, final View view, final int position, final long id) { final Cursor cursor = (Cursor) adapter.getItemAtPosition(position); final String uniqueSessionId = cursor.getString(cursor.getColumnIndex(SessionTable.UNIQUE_ID)); pagerAdapter.cancelDots(); mCurrentItem = pager.getCurrentItem(); final Intent intent = new Intent(Schedule.this, SessionDetails.class); intent.putExtra(SessionDetails.EXTRA_SESSION_ID, uniqueSessionId); startActivity(intent); } }); pageViews.add(parentView); } return pageViews; } public void onClickActionBarHome(final View view) { pagerAdapter.cancelDots(); 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); } }