package com.dotcool.reader.adapter; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import android.app.Activity; import android.app.AlarmManager; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Typeface; import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import com.dotcool.reader.Constants; import com.dotcool.R; import com.dotcool.reader.helper.Util; import com.dotcool.reader.model.UpdateInfoModel; public class UpdateInfoModelAdapter extends ArrayAdapter<UpdateInfoModel> { private static final String TAG = UpdateInfoModelAdapter.class.toString(); // private static final String TAG = PageModelAdapter.class.toString(); private final Context context; private int layoutResourceId; private final Date now; long repeatTime = 0; public List<UpdateInfoModel> data; public UpdateInfoModel[] originalData = new UpdateInfoModel[0]; boolean showUpdate = true; boolean showNew = true; boolean showDeleted = true; public UpdateInfoModelAdapter(Context context, int resourceId, List<UpdateInfoModel> objects) { super(context, resourceId, objects); this.layoutResourceId = resourceId; this.context = context; this.data = objects; this.originalData = data.toArray(originalData); now = new Date(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); String updatesIntervalStr = preferences.getString(Constants.PREF_UPDATE_INTERVAL, "0"); int updatesInterval = Integer.parseInt(updatesIntervalStr); switch (updatesInterval) { case 1: repeatTime = AlarmManager.INTERVAL_FIFTEEN_MINUTES; break; case 2: repeatTime = AlarmManager.INTERVAL_HALF_HOUR; break; case 3: repeatTime = AlarmManager.INTERVAL_HOUR; break; case 4: repeatTime = AlarmManager.INTERVAL_HALF_DAY; break; case 5: repeatTime = AlarmManager.INTERVAL_DAY; break; default: break; } } public void filterUpdated(boolean value) { this.showUpdate = value; Log.d(TAG, "Filter Updated: " + showUpdate); filterData(); } public void filterNew(boolean value) { this.showNew = value; filterData(); } public void filterDeleted(boolean value) { this.showDeleted = value; filterData(); } private void filterData() { this.clear(); data.clear(); for (UpdateInfoModel item : originalData) { switch (item.getUpdateType()) { case New: if (showNew) add(item); break; case NewNovel: if (showNew) add(item); break; case Updated: if (showUpdate) add(item); break; case UpdateTos: if (showUpdate) add(item); break; case Deleted: if (showDeleted) add(item); break; default: add(item); break; } } super.notifyDataSetChanged(); } public void setLayout(int resourceId) { this.layoutResourceId = resourceId; } @Override public void addAll(UpdateInfoModel... objects) { synchronized (this) { if (data == null) { data = new ArrayList<UpdateInfoModel>(); } for (UpdateInfoModel item : objects) { data.add(item); } this.notifyDataSetChanged(); } } @Override public void addAll(Collection<? extends UpdateInfoModel> objects) { synchronized (this) { if (data == null) { data = new ArrayList<UpdateInfoModel>(); } data.addAll(objects); this.notifyDataSetChanged(); } } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; UpdateInfoModelHolder holder = null; final UpdateInfoModel page = data.get(position); boolean freshData = false; if (now.getTime() - page.getUpdateDate().getTime() <= repeatTime) { freshData = true; } LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new UpdateInfoModelHolder(); holder.txtUpdateType = (TextView) row.findViewById(R.id.update_type); if (holder.txtUpdateType != null) { switch (page.getUpdateType()) { case New: holder.txtUpdateType.setText("New Chapter"); break; case NewNovel: holder.txtUpdateType.setText("New Novel"); break; case Updated: holder.txtUpdateType.setText("Updated Chapter"); break; case UpdateTos: holder.txtUpdateType.setText("TOS Updated"); break; case Deleted: holder.txtUpdateType.setText("Deleted Chapter"); break; default: holder.txtUpdateType.setText("Unknown!"); break; } if (freshData) holder.txtUpdateType.setTypeface(null, Typeface.BOLD); } holder.txtUpdateTitle = (TextView) row.findViewById(R.id.update_chapter); if (holder.txtUpdateTitle != null) { holder.txtUpdateTitle.setText(page.getUpdateTitle()); if (freshData) holder.txtUpdateTitle.setTypeface(null, Typeface.BOLD); } holder.txtUpdateDate = (TextView) row.findViewById(R.id.update_date); if (holder.txtUpdateDate != null) { holder.txtUpdateDate.setText("Update:" + Util.formatDateForDisplay(page.getUpdateDate())); } holder.chkSelected = (CheckBox) row.findViewById(R.id.chk_selection); if (holder.chkSelected != null) { // holder.txtUpdateDate.setText("Update:" + Util.formatDateForDisplay(page.getUpdateDate())); holder.chkSelected.setSelected(page.isSelected()); holder.chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { page.setSelected(isChecked); } }); } // row.setTag(holder); return row; } static class UpdateInfoModelHolder { TextView txtUpdateType; TextView txtUpdateTitle; TextView txtUpdateDate; CheckBox chkSelected; } public void setResourceId(int id) { this.layoutResourceId = id; } }