1 package com.android.contacts.interactions; 2 3 import com.android.contacts.R; 4 5 import android.content.ContentValues; 6 import android.content.ContentUris; 7 import android.content.Context; 8 import android.content.Intent; 9 import android.content.res.Resources; 10 import android.graphics.drawable.Drawable; 11 import android.net.Uri; 12 import android.provider.CalendarContract.Attendees; 13 import android.provider.CalendarContract.Events; 14 import android.text.Spannable; 15 import android.text.TextUtils; 16 import android.text.format.Time; 17 import android.util.Log; 18 19 /** 20 * Represents a calendar event interaction, wrapping the columns in 21 * {@link android.provider.CalendarContract.Attendees}. 22 */ 23 public class CalendarInteraction implements ContactInteraction { 24 private static final String TAG = CalendarInteraction.class.getSimpleName(); 25 26 private static final int CALENDAR_ICON_RES = R.drawable.ic_event_24dp; 27 28 private ContentValues mValues; 29 CalendarInteraction(ContentValues values)30 public CalendarInteraction(ContentValues values) { 31 mValues = values; 32 } 33 34 @Override getIntent()35 public Intent getIntent() { 36 return new Intent(Intent.ACTION_VIEW).setData( 37 ContentUris.withAppendedId(Events.CONTENT_URI, getEventId())); 38 } 39 40 @Override getInteractionDate()41 public long getInteractionDate() { 42 return getDtstart(); 43 } 44 45 @Override getViewHeader(Context context)46 public String getViewHeader(Context context) { 47 String title = getTitle(); 48 if (TextUtils.isEmpty(title)) { 49 return context.getResources().getString(R.string.untitled_event); 50 } 51 return title; 52 } 53 54 @Override getViewBody(Context context)55 public String getViewBody(Context context) { 56 return null; 57 } 58 59 @Override getViewFooter(Context context)60 public String getViewFooter(Context context) { 61 // Pulled from com.android.calendar.EventInfoFragment.updateEvent(View view) 62 // TODO: build callback to update time zone if different than preferences 63 String localTimezone = Time.getCurrentTimezone(); 64 65 Long dateEnd = getDtend(); 66 Long dateStart = getDtstart(); 67 if (dateStart == null && dateEnd == null) { 68 return null; 69 } else if (dateEnd == null) { 70 dateEnd = dateStart; 71 } else if (dateStart == null) { 72 dateStart = dateEnd; 73 } 74 75 String displayedDatetime = CalendarInteractionUtils.getDisplayedDatetime( 76 dateStart, dateEnd, System.currentTimeMillis(), localTimezone, 77 getAllDay(), context); 78 79 return displayedDatetime; 80 } 81 82 @Override getIcon(Context context)83 public Drawable getIcon(Context context) { 84 return context.getResources().getDrawable(CALENDAR_ICON_RES); 85 } 86 87 @Override getBodyIcon(Context context)88 public Drawable getBodyIcon(Context context) { 89 return null; 90 } 91 92 @Override getFooterIcon(Context context)93 public Drawable getFooterIcon(Context context) { 94 return null; 95 } 96 getAttendeeEmail()97 public String getAttendeeEmail() { 98 return mValues.getAsString(Attendees.ATTENDEE_EMAIL); 99 } 100 getAttendeeIdentity()101 public String getAttendeeIdentity() { 102 return mValues.getAsString(Attendees.ATTENDEE_IDENTITY); 103 } 104 getAttendeeIdNamespace()105 public String getAttendeeIdNamespace() { 106 return mValues.getAsString(Attendees.ATTENDEE_ID_NAMESPACE); 107 } 108 getAttendeeName()109 public String getAttendeeName() { 110 return mValues.getAsString(Attendees.ATTENDEE_NAME); 111 } 112 getAttendeeRelationship()113 public Integer getAttendeeRelationship() { 114 return mValues.getAsInteger(Attendees.ATTENDEE_RELATIONSHIP); 115 } 116 getAttendeeStatus()117 public Integer getAttendeeStatus() { 118 return mValues.getAsInteger(Attendees.ATTENDEE_STATUS); 119 } 120 getAttendeeType()121 public Integer getAttendeeType() { 122 return mValues.getAsInteger(Attendees.ATTENDEE_TYPE); 123 } 124 getEventId()125 public Integer getEventId() { 126 return mValues.getAsInteger(Attendees.EVENT_ID); 127 } 128 getAccessLevel()129 public Integer getAccessLevel() { 130 return mValues.getAsInteger(Attendees.ACCESS_LEVEL); 131 } 132 getAllDay()133 public Boolean getAllDay() { 134 return mValues.getAsInteger(Attendees.ALL_DAY) == 1 ? true : false; 135 } 136 getAvailability()137 public Integer getAvailability() { 138 return mValues.getAsInteger(Attendees.AVAILABILITY); 139 } 140 getCalendarId()141 public Integer getCalendarId() { 142 return mValues.getAsInteger(Attendees.CALENDAR_ID); 143 } 144 getCanInviteOthers()145 public Boolean getCanInviteOthers() { 146 return mValues.getAsBoolean(Attendees.CAN_INVITE_OTHERS); 147 } 148 getCustomAppPackage()149 public String getCustomAppPackage() { 150 return mValues.getAsString(Attendees.CUSTOM_APP_PACKAGE); 151 } 152 getCustomAppUri()153 public String getCustomAppUri() { 154 return mValues.getAsString(Attendees.CUSTOM_APP_URI); 155 } 156 getDescription()157 public String getDescription() { 158 return mValues.getAsString(Attendees.DESCRIPTION); 159 } 160 getDisplayColor()161 public Integer getDisplayColor() { 162 return mValues.getAsInteger(Attendees.DISPLAY_COLOR); 163 } 164 getDtend()165 public Long getDtend() { 166 return mValues.getAsLong(Attendees.DTEND); 167 } 168 getDtstart()169 public Long getDtstart() { 170 return mValues.getAsLong(Attendees.DTSTART); 171 } 172 getDuration()173 public String getDuration() { 174 return mValues.getAsString(Attendees.DURATION); 175 } 176 getEventColor()177 public Integer getEventColor() { 178 return mValues.getAsInteger(Attendees.EVENT_COLOR); 179 } 180 getEventColorKey()181 public String getEventColorKey() { 182 return mValues.getAsString(Attendees.EVENT_COLOR_KEY); 183 } 184 getEventEndTimezone()185 public String getEventEndTimezone() { 186 return mValues.getAsString(Attendees.EVENT_END_TIMEZONE); 187 } 188 getEventLocation()189 public String getEventLocation() { 190 return mValues.getAsString(Attendees.EVENT_LOCATION); 191 } 192 getExdate()193 public String getExdate() { 194 return mValues.getAsString(Attendees.EXDATE); 195 } 196 getExrule()197 public String getExrule() { 198 return mValues.getAsString(Attendees.EXRULE); 199 } 200 getGuestsCanInviteOthers()201 public Boolean getGuestsCanInviteOthers() { 202 return mValues.getAsBoolean(Attendees.GUESTS_CAN_INVITE_OTHERS); 203 } 204 getGuestsCanModify()205 public Boolean getGuestsCanModify() { 206 return mValues.getAsBoolean(Attendees.GUESTS_CAN_MODIFY); 207 } 208 getGuestsCanSeeGuests()209 public Boolean getGuestsCanSeeGuests() { 210 return mValues.getAsBoolean(Attendees.GUESTS_CAN_SEE_GUESTS); 211 } 212 getHasAlarm()213 public Boolean getHasAlarm() { 214 return mValues.getAsBoolean(Attendees.HAS_ALARM); 215 } 216 getHasAttendeeData()217 public Boolean getHasAttendeeData() { 218 return mValues.getAsBoolean(Attendees.HAS_ATTENDEE_DATA); 219 } 220 getHasExtendedProperties()221 public Boolean getHasExtendedProperties() { 222 return mValues.getAsBoolean(Attendees.HAS_EXTENDED_PROPERTIES); 223 } 224 getIsOrganizer()225 public String getIsOrganizer() { 226 return mValues.getAsString(Attendees.IS_ORGANIZER); 227 } 228 getLastDate()229 public Long getLastDate() { 230 return mValues.getAsLong(Attendees.LAST_DATE); 231 } 232 getLastSynced()233 public Boolean getLastSynced() { 234 return mValues.getAsBoolean(Attendees.LAST_SYNCED); 235 } 236 getOrganizer()237 public String getOrganizer() { 238 return mValues.getAsString(Attendees.ORGANIZER); 239 } 240 getOriginalAllDay()241 public Boolean getOriginalAllDay() { 242 return mValues.getAsBoolean(Attendees.ORIGINAL_ALL_DAY); 243 } 244 getOriginalId()245 public String getOriginalId() { 246 return mValues.getAsString(Attendees.ORIGINAL_ID); 247 } 248 getOriginalInstanceTime()249 public Long getOriginalInstanceTime() { 250 return mValues.getAsLong(Attendees.ORIGINAL_INSTANCE_TIME); 251 } 252 getOriginalSyncId()253 public String getOriginalSyncId() { 254 return mValues.getAsString(Attendees.ORIGINAL_SYNC_ID); 255 } 256 getRdate()257 public String getRdate() { 258 return mValues.getAsString(Attendees.RDATE); 259 } 260 getRrule()261 public String getRrule() { 262 return mValues.getAsString(Attendees.RRULE); 263 } 264 getSelfAttendeeStatus()265 public Integer getSelfAttendeeStatus() { 266 return mValues.getAsInteger(Attendees.SELF_ATTENDEE_STATUS); 267 } 268 getStatus()269 public Integer getStatus() { 270 return mValues.getAsInteger(Attendees.STATUS); 271 } 272 getTitle()273 public String getTitle() { 274 return mValues.getAsString(Attendees.TITLE); 275 } 276 getUid2445()277 public String getUid2445() { 278 return mValues.getAsString(Attendees.UID_2445); 279 } 280 281 @Override getContentDescription(Context context)282 public Spannable getContentDescription(Context context) { 283 // The default TalkBack is good 284 return null; 285 } 286 287 @Override getIconResourceId()288 public int getIconResourceId() { 289 return CALENDAR_ICON_RES; 290 } 291 } 292