1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.calendar.alerts; 18 19 import com.android.calendar.R; 20 import com.android.calendar.Utils; 21 22 import android.content.Context; 23 import android.content.res.Resources; 24 import android.database.Cursor; 25 import android.text.TextUtils; 26 import android.text.format.DateFormat; 27 import android.text.format.DateUtils; 28 import android.text.format.Time; 29 import android.view.View; 30 import android.widget.ResourceCursorAdapter; 31 import android.widget.TextView; 32 33 import java.util.Locale; 34 import java.util.TimeZone; 35 36 public class AlertAdapter extends ResourceCursorAdapter { 37 38 private static AlertActivity alertActivity; 39 private static boolean mFirstTime = true; 40 private static int mTitleColor; 41 private static int mOtherColor; // non-title fields 42 private static int mPastEventColor; 43 44 public AlertAdapter(AlertActivity activity, int resource) { 45 super(activity, resource, null); 46 alertActivity = activity; 47 } 48 49 @Override 50 public void bindView(View view, Context context, Cursor cursor) { 51 View square = view.findViewById(R.id.color_square); 52 int color = Utils.getDisplayColorFromColor(cursor.getInt(AlertActivity.INDEX_COLOR)); 53 square.setBackgroundColor(color); 54 55 // Repeating info 56 View repeatContainer = view.findViewById(R.id.repeat_icon); 57 String rrule = cursor.getString(AlertActivity.INDEX_RRULE); 58 if (!TextUtils.isEmpty(rrule)) { 59 repeatContainer.setVisibility(View.VISIBLE); 60 } else { 61 repeatContainer.setVisibility(View.GONE); 62 } 63 64 /* 65 // Reminder 66 boolean hasAlarm = cursor.getInt(AlertActivity.INDEX_HAS_ALARM) != 0; 67 if (hasAlarm) { 68 AgendaAdapter.updateReminder(view, context, cursor.getLong(AlertActivity.INDEX_BEGIN), 69 cursor.getLong(AlertActivity.INDEX_EVENT_ID)); 70 } 71 */ 72 73 String eventName = cursor.getString(AlertActivity.INDEX_TITLE); 74 String location = cursor.getString(AlertActivity.INDEX_EVENT_LOCATION); 75 long startMillis = cursor.getLong(AlertActivity.INDEX_BEGIN); 76 long endMillis = cursor.getLong(AlertActivity.INDEX_END); 77 boolean allDay = cursor.getInt(AlertActivity.INDEX_ALL_DAY) != 0; 78 79 updateView(context, view, eventName, location, startMillis, endMillis, allDay); 80 } 81 82 public static void updateView(Context context, View view, String eventName, String location, 83 long startMillis, long endMillis, boolean allDay) { 84 Resources res = context.getResources(); 85 86 TextView titleView = (TextView) view.findViewById(R.id.event_title); 87 TextView whenView = (TextView) view.findViewById(R.id.when); 88 TextView whereView = (TextView) view.findViewById(R.id.where); 89 if (mFirstTime) { 90 mPastEventColor = res.getColor(R.color.alert_past_event); 91 mTitleColor = res.getColor(R.color.alert_event_title); 92 mOtherColor = res.getColor(R.color.alert_event_other); 93 mFirstTime = false; 94 } 95 96 if (endMillis < System.currentTimeMillis()) { 97 titleView.setTextColor(mPastEventColor); 98 whenView.setTextColor(mPastEventColor); 99 whereView.setTextColor(mPastEventColor); 100 } else { 101 titleView.setTextColor(mTitleColor); 102 whenView.setTextColor(mOtherColor); 103 whereView.setTextColor(mOtherColor); 104 } 105 106 // What 107 if (eventName == null || eventName.length() == 0) { 108 eventName = res.getString(R.string.no_title_label); 109 } 110 titleView.setText(eventName); 111 112 // When 113 String when; 114 int flags; 115 String tz = Utils.getTimeZone(context, null); 116 if (allDay) { 117 flags = DateUtils.FORMAT_UTC | DateUtils.FORMAT_SHOW_WEEKDAY | 118 DateUtils.FORMAT_SHOW_DATE; 119 tz = Time.TIMEZONE_UTC; 120 } else { 121 flags = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE; 122 } 123 if (DateFormat.is24HourFormat(context)) { 124 flags |= DateUtils.FORMAT_24HOUR; 125 } 126 127 Time time = new Time(tz); 128 time.set(startMillis); 129 boolean isDST = time.isDst != 0; 130 StringBuilder sb = new StringBuilder( 131 Utils.formatDateRange(context, startMillis, endMillis, flags)); 132 if (!allDay && tz != Time.getCurrentTimezone()) { 133 sb.append(" ").append(TimeZone.getTimeZone(tz).getDisplayName( 134 isDST, TimeZone.SHORT, Locale.getDefault())); 135 } 136 137 when = sb.toString(); 138 whenView.setText(when); 139 140 // Where 141 if (location == null || location.length() == 0) { 142 whereView.setVisibility(View.GONE); 143 } else { 144 whereView.setText(location); 145 whereView.setVisibility(View.VISIBLE); 146 } 147 } 148 149 @Override 150 protected void onContentChanged () { 151 super.onContentChanged(); 152 153 // Prevent empty popup notification. 154 alertActivity.closeActivityIfEmpty(); 155 } 156 } 157