| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.calendar; |
| |
| import android.content.Context; |
| import android.content.res.Resources; |
| import android.database.Cursor; |
| import android.provider.Calendar.Attendees; |
| import android.text.format.DateFormat; |
| import android.text.format.DateUtils; |
| import android.view.View; |
| import android.widget.ResourceCursorAdapter; |
| import android.widget.TextView; |
| |
| import java.util.Formatter; |
| import java.util.Locale; |
| |
| public class AgendaAdapter extends ResourceCursorAdapter { |
| private String mNoTitleLabel; |
| private Resources mResources; |
| private int mDeclinedColor; |
| private Formatter mFormatter; // TODO fix. not thread safe |
| private StringBuilder mStringBuilder; |
| |
| static class ViewHolder { |
| int overLayColor; // Used by AgendaItemView to gray out the entire item if so desired |
| |
| /* Event */ |
| TextView title; |
| TextView when; |
| TextView where; |
| int calendarColor; // Used by AgendaItemView to color the vertical stripe |
| } |
| |
| public AgendaAdapter(Context context, int resource) { |
| super(context, resource, null); |
| mResources = context.getResources(); |
| mNoTitleLabel = mResources.getString(R.string.no_title_label); |
| mDeclinedColor = mResources.getColor(R.drawable.agenda_item_declined); |
| mStringBuilder = new StringBuilder(50); |
| mFormatter = new Formatter(mStringBuilder, Locale.getDefault()); |
| } |
| |
| @Override |
| public void bindView(View view, Context context, Cursor cursor) { |
| ViewHolder holder = null; |
| |
| // Listview may get confused and pass in a different type of view since |
| // we keep shifting data around. Not a big problem. |
| Object tag = view.getTag(); |
| if (tag instanceof ViewHolder) { |
| holder = (ViewHolder) view.getTag(); |
| } |
| |
| if (holder == null) { |
| holder = new ViewHolder(); |
| view.setTag(holder); |
| holder.title = (TextView) view.findViewById(R.id.title); |
| holder.when = (TextView) view.findViewById(R.id.when); |
| holder.where = (TextView) view.findViewById(R.id.where); |
| } |
| |
| // Fade text if event was declined. |
| int selfAttendeeStatus = cursor.getInt(AgendaWindowAdapter.INDEX_SELF_ATTENDEE_STATUS); |
| if (selfAttendeeStatus == Attendees.ATTENDEE_STATUS_DECLINED) { |
| holder.overLayColor = mDeclinedColor; |
| } else { |
| holder.overLayColor = 0; |
| } |
| |
| TextView title = holder.title; |
| TextView when = holder.when; |
| TextView where = holder.where; |
| |
| /* Calendar Color */ |
| int color = cursor.getInt(AgendaWindowAdapter.INDEX_COLOR); |
| holder.calendarColor = color; |
| |
| // What |
| String titleString = cursor.getString(AgendaWindowAdapter.INDEX_TITLE); |
| if (titleString == null || titleString.length() == 0) { |
| titleString = mNoTitleLabel; |
| } |
| title.setText(titleString); |
| title.setTextColor(color); |
| |
| // When |
| long begin = cursor.getLong(AgendaWindowAdapter.INDEX_BEGIN); |
| long end = cursor.getLong(AgendaWindowAdapter.INDEX_END); |
| boolean allDay = cursor.getInt(AgendaWindowAdapter.INDEX_ALL_DAY) != 0; |
| int flags; |
| String whenString; |
| if (allDay) { |
| flags = DateUtils.FORMAT_UTC; |
| } else { |
| flags = DateUtils.FORMAT_SHOW_TIME; |
| } |
| if (DateFormat.is24HourFormat(context)) { |
| flags |= DateUtils.FORMAT_24HOUR; |
| } |
| mStringBuilder.setLength(0); |
| whenString = DateUtils.formatDateRange(context, mFormatter, begin, end, flags).toString(); |
| when.setText(whenString); |
| |
| String rrule = cursor.getString(AgendaWindowAdapter.INDEX_RRULE); |
| if (rrule != null) { |
| when.setCompoundDrawablesWithIntrinsicBounds(null, null, |
| context.getResources().getDrawable(R.drawable.ic_repeat_dark), null); |
| when.setCompoundDrawablePadding(5); |
| } else { |
| when.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); |
| } |
| |
| /* |
| // Repeating info |
| View repeatContainer = view.findViewById(R.id.repeat_icon); |
| String rrule = cursor.getString(AgendaActivity.INDEX_RRULE); |
| if (rrule != null) { |
| repeatContainer.setVisibility(View.VISIBLE); |
| } else { |
| repeatContainer.setVisibility(View.GONE); |
| } |
| */ |
| |
| /* |
| // Reminder |
| boolean hasAlarm = cursor.getInt(AgendaActivity.INDEX_HAS_ALARM) != 0; |
| if (hasAlarm) { |
| updateReminder(view, context, begin, cursor.getLong(AgendaActivity.INDEX_EVENT_ID)); |
| } |
| */ |
| |
| // Where |
| String whereString = cursor.getString(AgendaWindowAdapter.INDEX_EVENT_LOCATION); |
| if (whereString != null && whereString.length() > 0) { |
| where.setVisibility(View.VISIBLE); |
| where.setText(whereString); |
| } else { |
| where.setVisibility(View.GONE); |
| } |
| } |
| |
| /* |
| public static void updateReminder(View view, Context context, long begin, long eventId) { |
| ContentResolver cr = context.getContentResolver(); |
| Uri uri = Reminders.CONTENT_URI; |
| String where = String.format(REMINDERS_WHERE, eventId); |
| |
| Cursor remindersCursor = cr.query(uri, REMINDERS_PROJECTION, where, null, null); |
| if (remindersCursor != null) { |
| LayoutInflater inflater = |
| (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
| LinearLayout parent = (LinearLayout) view.findViewById(R.id.reminders_container); |
| parent.removeAllViews(); |
| while (remindersCursor.moveToNext()) { |
| int alarm = remindersCursor.getInt(REMINDERS_INDEX_MINUTES); |
| String before = EditEvent.constructReminderLabel(context, alarm, true); |
| LinearLayout reminderItem = (LinearLayout) |
| inflater.inflate(R.layout.agenda_reminder_item, null); |
| TextView reminderItemText = (TextView) reminderItem.findViewById(R.id.reminder); |
| reminderItemText.setText(before); |
| parent.addView(reminderItem); |
| } |
| } |
| remindersCursor.close(); |
| } |
| */ |
| } |
| |