package com.conference.app.lib.ui.adapter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.SectionIndexer; import android.widget.TextView; import android.widget.ToggleButton; import com.conference.app.lib.R; import com.conference.app.lib.database.DatabaseAdapter; import com.conference.app.lib.database.tables.SessionTable; public class SessionAdapter extends CursorAdapter implements SectionIndexer { private static final String TAG = SessionAdapter.class.getName(); private static final boolean DEBUG = false; private static final int MAX_NAME_LENGTH = 40; private final Context ctx; private final Cursor cursor; private final DatabaseAdapter dbAdapter; private String[] sections; private Map<String, Integer> alphaIndexer; private final LayoutInflater mInflater; private static Bitmap cacheSessionImg; private static Bitmap cacheWorkshopImg; private static Bitmap cacheKeyNoteImg; public SessionAdapter(final Context ctx, final Cursor cursor) { super(ctx, cursor); this.ctx = ctx; mInflater = LayoutInflater.from(ctx); // new TrackColorLoader().execute(); this.cursor = cursor; this.dbAdapter = new DatabaseAdapter(ctx); createIndexer(); } private void createIndexer() { alphaIndexer = new HashMap<String, Integer>(); for (int i = 0; cursor.moveToNext(); i++) { final String letter = cursor.getString(cursor.getColumnIndex(SessionTable.SEARCH_NAME)).substring(0, 1).toUpperCase(); if (!alphaIndexer.containsKey(letter)) { alphaIndexer.put(letter, i); } } List<String> keyList = new ArrayList<String>(alphaIndexer.keySet()); Collections.sort(keyList); sections = new String[keyList.size()]; keyList.toArray(sections); } @Override public View getView(final int position, final View convertView, final ViewGroup parent) { View rowView; if (convertView == null) { rowView = newView(ctx, cursor, parent); } else { rowView = convertView; } cursor.moveToPosition(position); if (position % 2 == 0) { rowView.setBackgroundResource(R.drawable.listitembg1); } else { rowView.setBackgroundResource(R.drawable.listitembg2); } bindView(rowView, ctx, cursor); return rowView; } @Override public void bindView(final View view, final Context context, final Cursor cursor) { final ViewHolder viewHolder = (ViewHolder) view.getTag(); final String uniqueSessionId = cursor.getString(cursor.getColumnIndex(SessionTable.UNIQUE_ID)); final String sessionName = cursor.getString(cursor.getColumnIndex(SessionTable.SHORT_NAME)); if (sessionName != null && !"null".equals(sessionName) && sessionName.length() > 0) { viewHolder.title.setText(sessionName.trim()); } else { final String title = cursor.getString(cursor.getColumnIndex(SessionTable.NAME)).trim(); if (title.length() > MAX_NAME_LENGTH) { viewHolder.title.setText(title.substring(0, MAX_NAME_LENGTH).concat("...")); } else { viewHolder.title.setText(title.trim()); } } viewHolder.star.setChecked(cursor.getInt(cursor.getColumnIndex(SessionTable.FAVORITE)) != 0); viewHolder.star.setTag(uniqueSessionId); viewHolder.star.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) { if (buttonView.isPressed()) { final String uniqueSessionId = (String) buttonView.getTag(); dbAdapter.setFavorite(uniqueSessionId, isChecked); } } }); String session = "SESSION".toLowerCase(); String workshop = "WORKSHOP".toLowerCase(); String keynote = "KEYNOTE".toLowerCase(); String sessionType = cursor.getString(cursor.getColumnIndex(SessionTable.TYPE)).toLowerCase(); if (session.equals(sessionType)) { if (cacheSessionImg == null) { cacheSessionImg = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.session_icon); } viewHolder.image.setImageBitmap(cacheSessionImg); } else if (workshop.equals(sessionType)) { if (cacheWorkshopImg == null) { cacheWorkshopImg = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.workshop_icon); } viewHolder.image.setImageBitmap(cacheWorkshopImg); } else if (keynote.equals(sessionType)) { if (cacheKeyNoteImg == null) { cacheKeyNoteImg = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.keynote_icon); } viewHolder.image.setImageBitmap(cacheKeyNoteImg); } String s = getDateRowText(cursor); viewHolder.row2.setText(s); // viewHolder.trackColor.setBackgroundColor(Color.parseColor(dbAdapter.getTrackColorByUniqueSessionId(cursor.getString(cursor // .getColumnIndex(SessionTable.UNIQUE_ID))))); // viewHolder.trackColor.setVisibility(View.VISIBLE); } private String getDateRowText(final Cursor cursor) { String s = ""; SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm", Locale.getDefault()); SimpleDateFormat dateFormat = new SimpleDateFormat("EEE dd/MM/yyyy", Locale.getDefault()); SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm", Locale.getDefault()); try { String startdate = cursor.getString(cursor.getColumnIndex(SessionTable.START_DATE)); String enddate = cursor.getString(cursor.getColumnIndex(SessionTable.END_DATE)); String dateOnly = dateFormat.format(dateTimeFormat.parse(startdate)); String starttime = timeFormat.format(dateTimeFormat.parse(startdate)); String endtime = timeFormat.format(dateTimeFormat.parse(enddate)); s = dateOnly + " / " + starttime + " - " + endtime; } catch (Exception e) { e.printStackTrace(); } return s; } @Override public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { final View view = mInflater.inflate(R.layout.schedule_item, null, false); final ViewHolder viewHolder = new ViewHolder(); viewHolder.title = (TextView) view.findViewById(R.id.scheduleItemSessionTitle); // viewHolder.trackColor = view.findViewById(R.id.scheduleItemTrackColor); viewHolder.star = (ToggleButton) view.findViewById(R.id.scheduleItemFav); viewHolder.image = (ImageView) view.findViewById(R.id.scheduleItemSessionImg); viewHolder.row2 = (TextView) view.findViewById(R.id.row2text); view.setTag(viewHolder); return view; } @Override public int getPositionForSection(final int section) { final String letter = sections[section]; return alphaIndexer.get(letter); } @Override public int getSectionForPosition(final int position) { return 0; } @Override public Object[] getSections() { return sections; } static class ViewHolder { public ToggleButton star; public ImageView image; public TextView title; public TextView row2; // public View trackColor; } // private class TrackColorLoader extends AsyncTask<Void, Void, Void> { // @Override // protected Void doInBackground(final Void... params) { // final DatabaseHelper helper = new DatabaseHelper(ctx); // final SQLiteDatabase db = helper.getReadableDatabase(); // final Cursor cursor = db.query(SessionTable.TABLE_NAME, new String[] { SessionTable.ID, // SessionTable.UNIQUE_ID }, null, null, null, null, null); // final DatabaseAdapter dbAdapter = new DatabaseAdapter(ctx); // // while (cursor.moveToNext()) { // dbAdapter // .getTrackColorByUniqueSessionId(cursor.getString(cursor.getColumnIndex(SessionTable.UNIQUE_ID))); // } // // cursor.close(); // if (db.isOpen()) { // db.close(); // } // // return null; // } // // @Override // protected void onPostExecute(final Void result) { // SessionAdapter.this.notifyDataSetChanged(); // } // } }