summaryrefslogtreecommitdiffstats
path: root/src/com/android/calendar/AgendaAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/calendar/AgendaAdapter.java')
-rw-r--r--src/com/android/calendar/AgendaAdapter.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/com/android/calendar/AgendaAdapter.java b/src/com/android/calendar/AgendaAdapter.java
new file mode 100644
index 00000000..3ec576be
--- /dev/null
+++ b/src/com/android/calendar/AgendaAdapter.java
@@ -0,0 +1,139 @@
+/*
+ * 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.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.PorterDuff;
+import android.net.Uri;
+import android.pim.DateFormat;
+import android.pim.DateUtils;
+import android.provider.Calendar.Reminders;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ResourceCursorAdapter;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+public class AgendaAdapter extends ResourceCursorAdapter {
+
+ private static final String[] REMINDERS_PROJECTION = new String[] {
+ Reminders._ID, // 0
+ Reminders.MINUTES, // 1
+ };
+ private static final int REMINDERS_INDEX_MINUTES = 1;
+ private static final String REMINDERS_WHERE = Reminders.EVENT_ID + "=%d AND (" +
+ Reminders.METHOD + "=" + Reminders.METHOD_ALERT + " OR " + Reminders.METHOD + "=" +
+ Reminders.METHOD_DEFAULT + ")";
+
+ private Resources mResources;
+ private static ArrayList<Integer> sReminderValues;
+ private static String[] sReminderLabels;
+
+ public AgendaAdapter(Context context, int resource) {
+ super(context, resource, null);
+ mResources = context.getResources();
+ }
+
+ @Override
+ public void bindView(View view, Context context, Cursor cursor) {
+ ImageView stripe = (ImageView) view.findViewById(R.id.vertical_stripe);
+ int color = cursor.getInt(AgendaActivity.INDEX_COLOR) & 0xbbffffff;
+ stripe.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);
+
+ // What
+ TextView title = (TextView) view.findViewById(R.id.title);
+ String titleString = cursor.getString(AgendaActivity.INDEX_TITLE);
+ if (titleString == null || titleString.length() == 0) {
+ titleString = mResources.getString(R.string.no_title_label);
+ }
+ title.setText(titleString);
+
+ // When
+ TextView when = (TextView) view.findViewById(R.id.when);
+ long begin = cursor.getLong(AgendaActivity.INDEX_BEGIN);
+ long end = cursor.getLong(AgendaActivity.INDEX_END);
+ boolean allDay = cursor.getInt(AgendaActivity.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;
+ }
+ whenString = DateUtils.formatDateRange(begin, end, flags);
+ when.setText(whenString);
+
+ // 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
+ TextView where = (TextView) view.findViewById(R.id.where);
+ String whereString = cursor.getString(AgendaActivity.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();
+ }
+}
+