18188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski/* 28188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Copyright (C) 2013 The Android Open Source Project 38188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 48188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Licensed under the Apache License, Version 2.0 (the "License"); 58188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * you may not use this file except in compliance with the License. 68188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * You may obtain a copy of the License at 78188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 88188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * http://www.apache.org/licenses/LICENSE-2.0 98188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 108188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Unless required by applicable law or agreed to in writing, software 118188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * distributed under the License is distributed on an "AS IS" BASIS, 128188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * See the License for the specific language governing permissions and 148188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * limitations under the License. 158188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 168188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 178188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskipackage com.android.deskclock.provider; 188188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 198188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskiimport android.content.Context; 208188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 218188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskiimport com.android.deskclock.R; 228188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 238188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskiimport java.text.DateFormatSymbols; 248188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskiimport java.util.Calendar; 258188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskiimport java.util.HashSet; 268188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 278188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski/* 288188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Days of week code as a single int. 298188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x00: no day 308188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x01: Monday 318188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x02: Tuesday 328188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x04: Wednesday 338188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x08: Thursday 348188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x10: Friday 358188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x20: Saturday 368188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 0x40: Sunday 378188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 388188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowskipublic final class DaysOfWeek { 398188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // Number if days in the week. 408188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public static final int DAYS_IN_A_WEEK = 7; 418188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 428188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // Value when all days are set 438188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public static final int ALL_DAYS_SET = 0x7f; 448188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 458188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // Value when no days are set 468188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public static final int NO_DAYS_SET = 0; 478188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 488188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski /** 498188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Need to have monday start at index 0 to be backwards compatible. This converts 508188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Calendar.DAY_OF_WEEK constants to our internal bit structure. 518188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 52ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro static int convertDayToBitIndex(int day) { 538188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return (day + 5) % DAYS_IN_A_WEEK; 548188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 558188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 568188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski /** 578188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Need to have monday start at index 0 to be backwards compatible. This converts 588188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * our bit structure to Calendar.DAY_OF_WEEK constant value. 598188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 60ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro static int convertBitIndexToDay(int bitIndex) { 618188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return (bitIndex + 1) % DAYS_IN_A_WEEK + 1; 628188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 638188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 648188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // Bitmask of all repeating days 658188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski private int mBitSet; 668188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 678188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public DaysOfWeek(int bitSet) { 688188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski mBitSet = bitSet; 698188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 708188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 7115734572c8122da905014781dfa25d24a57c62c3Annie Chin public String toString(Context context, int firstDay) { 7215734572c8122da905014781dfa25d24a57c62c3Annie Chin return toString(context, firstDay, false /* forAccessibility */); 738188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 748188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 7515734572c8122da905014781dfa25d24a57c62c3Annie Chin public String toAccessibilityString(Context context, int firstDay) { 7615734572c8122da905014781dfa25d24a57c62c3Annie Chin return toString(context, firstDay, true /* forAccessibility */); 778188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 788188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 7915734572c8122da905014781dfa25d24a57c62c3Annie Chin private String toString(Context context, int firstDay, boolean forAccessibility) { 808188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski StringBuilder ret = new StringBuilder(); 818188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 828188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // no days 838188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (mBitSet == NO_DAYS_SET) { 84ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro return ""; 858188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 868188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 878188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // every day 888188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (mBitSet == ALL_DAYS_SET) { 898188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return context.getText(R.string.every_day).toString(); 908188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 918188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 928188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // count selected days 938188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski int dayCount = 0; 948188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski int bitSet = mBitSet; 958188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski while (bitSet > 0) { 968188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if ((bitSet & 1) == 1) dayCount++; 978188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski bitSet >>= 1; 988188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 998188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1008188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski // short or long form? 1018188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski DateFormatSymbols dfs = new DateFormatSymbols(); 1028188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski String[] dayList = (forAccessibility || dayCount <= 1) ? 1038188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski dfs.getWeekdays() : 1048188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski dfs.getShortWeekdays(); 1058188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 106955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin // In this system, Mon = 0, Sun = 6, etc. 107955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin // startDay is stored corresponding to Calendar.DAY_OF_WEEK where Sun = 0, Mon = 2, etc. 10815734572c8122da905014781dfa25d24a57c62c3Annie Chin final int startDay = convertDayToBitIndex(firstDay); 109955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin 110955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin // selected days, starting from user-selected start day of week 111955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin // iterate starting from user-selected start of day 112955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin for (int bitIndex = startDay; bitIndex < DAYS_IN_A_WEEK + startDay; ++bitIndex) { 113955d95ca5dbce921adf1939b508b7f3a58ad903eAnnie Chin if ((mBitSet & (1 << (bitIndex % DAYS_IN_A_WEEK))) != 0) { 1148188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski ret.append(dayList[convertBitIndexToDay(bitIndex)]); 1158188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski dayCount -= 1; 1168188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (dayCount > 0) ret.append(context.getText(R.string.day_concat)); 1178188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1188188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1198188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return ret.toString(); 1208188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1218188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1228188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski /** 1238188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * Enables or disable certain days of the week. 1248188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 1258188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * @param daysOfWeek Calendar.SUNDAY, Calendar.MONDAY, Calendar.TUESDAY, etc. 1268188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 1278188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public void setDaysOfWeek(boolean value, int ... daysOfWeek) { 1288188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski for (int day : daysOfWeek) { 1298188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski setBit(convertDayToBitIndex(day), value); 1308188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1318188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1328188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1338188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski private boolean isBitEnabled(int bitIndex) { 1348188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return ((mBitSet & (1 << bitIndex)) > 0); 1358188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1368188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1378188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski private void setBit(int bitIndex, boolean set) { 1388188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (set) { 1398188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski mBitSet |= (1 << bitIndex); 1408188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } else { 1418188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski mBitSet &= ~(1 << bitIndex); 1428188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1438188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1448188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1458188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public void setBitSet(int bitSet) { 1468188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski mBitSet = bitSet; 1478188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1488188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1498188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public int getBitSet() { 1508188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return mBitSet; 1518188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1528188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 153ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro /** 154ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro * Returns set of Calendar.MONDAY, Calendar.TUESDAY, etc based on the current mBitSet value 155ba426c1edb808f19f3b79bd751f595ffb505be5fBudi Kusmiantoro */ 1568188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public HashSet<Integer> getSetDays() { 157ab0d28c68a77bea2a4a2ee50378da3670a1dd939Paul Sliwowski final HashSet<Integer> result = new HashSet<Integer>(); 1588188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski for (int bitIndex = 0; bitIndex < DAYS_IN_A_WEEK; bitIndex++) { 1598188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (isBitEnabled(bitIndex)) { 160ab0d28c68a77bea2a4a2ee50378da3670a1dd939Paul Sliwowski result.add(convertBitIndexToDay(bitIndex)); 1618188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1628188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 163ab0d28c68a77bea2a4a2ee50378da3670a1dd939Paul Sliwowski return result; 1648188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1658188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1668188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public boolean isRepeating() { 1678188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return mBitSet != NO_DAYS_SET; 1688188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 1698188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 1708188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski /** 171d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * Returns number of days backwards from today to previous alarm. 172d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * ex: 173d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * Daily alarm, current = Tuesday -> 1 174d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * Weekly alarm on Wednesday, current = Tuesday -> 6 175d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * One time alarm -> -1 1768188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * 1778188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski * @param current must be set to today 1788188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski */ 179d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin public int calculateDaysToPreviousAlarm(Calendar current) { 180d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin if (!isRepeating()) { 181d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin return -1; 182d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin } 183d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin 184d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin // We only use this on preemptively dismissed alarms, and alarms can only fire once a day, 185d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin // so there is no chance that the previous fire time is on the same day. Start dayCount on 186d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin // previous day. 187d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin int dayCount = -1; 188d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin int currentDayIndex = convertDayToBitIndex(current.get(Calendar.DAY_OF_WEEK)); 189d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin for (; dayCount >= -DAYS_IN_A_WEEK; dayCount--) { 190d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin int previousAlarmBitIndex = (currentDayIndex + dayCount); 191d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin if (previousAlarmBitIndex < 0) { 192d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin // Ex. previousAlarmBitIndex = -1 means the day before index 0 = index 6 193d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin previousAlarmBitIndex = previousAlarmBitIndex + DAYS_IN_A_WEEK; 194d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin } 195d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin if (isBitEnabled(previousAlarmBitIndex)) { 196d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin break; 197d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin } 198d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin } 199d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin // return a positive value 200d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin return dayCount * -1; 201d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin } 202d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin 203d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin /** 204d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * Returns number of days from today until next alarm. 205d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * 206d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin * @param current must be set to today or the day after the currentTime 207d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin */ 2088188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public int calculateDaysToNextAlarm(Calendar current) { 2098188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski if (!isRepeating()) { 2108188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return -1; 2118188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2128188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 2138188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski int dayCount = 0; 214d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin int currentDayIndex = convertDayToBitIndex(current.get(Calendar.DAY_OF_WEEK)); 2158188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski for (; dayCount < DAYS_IN_A_WEEK; dayCount++) { 216d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin int nextAlarmBitIndex = (currentDayIndex + dayCount) % DAYS_IN_A_WEEK; 217d68d58de285756f5094a33b12385f4989c76d9c4Annie Chin if (isBitEnabled(nextAlarmBitIndex)) { 2188188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski break; 2198188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2208188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2218188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return dayCount; 2228188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2238188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 2248188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public void clearAllDays() { 225ab0d28c68a77bea2a4a2ee50378da3670a1dd939Paul Sliwowski mBitSet = NO_DAYS_SET; 2268188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2278188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski 2288188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski @Override 2298188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski public String toString() { 2308188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski return "DaysOfWeek{" + 2318188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski "mBitSet=" + mBitSet + 2328188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski '}'; 2338188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski } 2348188813bc869d3df4885f9c2972f9cc85745b59bPaul Sliwowski} 235