15442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff/* 25442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * Copyright (C) 2006 The Android Open Source Project 35442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * 45442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * Licensed under the Apache License, Version 2.0 (the "License"); 55442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * you may not use this file except in compliance with the License. 65442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * You may obtain a copy of the License at 75442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * 85442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * http://www.apache.org/licenses/LICENSE-2.0 95442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * 105442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * Unless required by applicable law or agreed to in writing, software 115442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * distributed under the License is distributed on an "AS IS" BASIS, 125442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * See the License for the specific language governing permissions and 145442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * limitations under the License. 155442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff */ 165442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 175442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriffpackage com.android.calendar; 185442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 198a528adbba5d46fe0d566f474bc3be190511198eMichael Chanimport com.android.calendarcommon2.EventRecurrence; 208ed988fbac3e988f0408490a1d61101c4176686dAndy McFadden 215442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriffimport android.content.res.Resources; 225442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriffimport android.text.format.DateUtils; 235442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 245442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriffimport java.util.Calendar; 255442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 265442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriffpublic class EventRecurrenceFormatter 275442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff{ 285442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff public static String getRepeatString(Resources r, EventRecurrence recurrence) { 295442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // TODO Implement "Until" portion of string, as well as custom settings 305442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff switch (recurrence.freq) { 315442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff case EventRecurrence.DAILY: 325442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return r.getString(R.string.daily); 335442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff case EventRecurrence.WEEKLY: { 345442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff if (recurrence.repeatsOnEveryWeekDay()) { 355442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return r.getString(R.string.every_weekday); 365442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } else { 375442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff String format = r.getString(R.string.weekly); 385442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff StringBuilder days = new StringBuilder(); 395442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 405442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // Do one less iteration in the loop so the last element is added out of the 415442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // loop. This is done so the comma is not placed after the last item. 425442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff int count = recurrence.bydayCount - 1; 435442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff if (count >= 0) { 445442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff for (int i = 0 ; i < count ; i++) { 455442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff days.append(dayToString(recurrence.byday[i])); 465442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff days.append(","); 475442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 485442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff days.append(dayToString(recurrence.byday[count])); 495442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 505442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return String.format(format, days.toString()); 515442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 525442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 535442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // There is no "BYDAY" specifier, so use the day of the 545442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // first event. For this to work, the setStartDate() 555442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // method must have been used by the caller to set the 565442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff // date of the first event in the recurrence. 575442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff if (recurrence.startDate == null) { 585442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return null; 595442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 605442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 61fed57ecf8784c761b61d40e87c88a2628142d1ddErik int day = EventRecurrence.timeDay2Day(recurrence.startDate.weekDay); 625442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return String.format(format, dayToString(day)); 635442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 645442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 655442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff case EventRecurrence.MONTHLY: { 665442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return r.getString(R.string.monthly); 675442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 685442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff case EventRecurrence.YEARLY: 695442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return r.getString(R.string.yearly_plain); 705442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 715442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 725442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return null; 735442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 745442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 755442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff /** 765442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * Converts day of week to a String. 775442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * @param day a EventRecurrence constant 785442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * @return day of week as a string 795442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff */ 805442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff private static String dayToString(int day) { 815442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff return DateUtils.getDayOfWeekString(dayToUtilDay(day), DateUtils.LENGTH_LONG); 825442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 835442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff 845442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff /** 855442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * Converts EventRecurrence's day of week to DateUtil's day of week. 865442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * @param day of week as an EventRecurrence value 875442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff * @return day of week as a DateUtil value. 885442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff */ 895442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff private static int dayToUtilDay(int day) { 905442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff switch (day) { 91fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.SU: return Calendar.SUNDAY; 92fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.MO: return Calendar.MONDAY; 93fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.TU: return Calendar.TUESDAY; 94fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.WE: return Calendar.WEDNESDAY; 95fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.TH: return Calendar.THURSDAY; 96fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.FR: return Calendar.FRIDAY; 97fed57ecf8784c761b61d40e87c88a2628142d1ddErik case EventRecurrence.SA: return Calendar.SATURDAY; 985442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff default: throw new IllegalArgumentException("bad day argument: " + day); 995442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 1005442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff } 1015442a16f740a9c98d1d53627cf7ed00098b1bd24Ken Shirriff} 102