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 AlertAdapter(AlertActivity activity, int resource)44 public AlertAdapter(AlertActivity activity, int resource) { 45 super(activity, resource, null); 46 this.alertActivity = activity; 47 } 48 49 @Override bindView(View view, Context context, Cursor cursor)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 updateView(Context context, View view, String eventName, String location, long startMillis, long endMillis, boolean allDay)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 onContentChanged()150 protected void onContentChanged () { 151 super.onContentChanged(); 152 153 // Prevent empty popup notification. 154 alertActivity.closeActivityIfEmpty(); 155 } 156 } 157