+73        
        
                        - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
// Current Month Days
            for (int i = 1; i <= _nDaysInMonth; i++) {
                if (_myPrefs.getIfConfigured()) {
                    if (_regionWithHolidays != null && _regionWithHolidays.length > 0) {
                        String holidayDateStringFormat = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
                        for (int index = 0; index < _regionWithHolidays.length; index++) {
                            if (_regionWithHolidays[index].getHolidayDate().equals(holidayDateStringFormat)) {
                                list.add(String.valueOf(i) + "-RED" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                            }
                        }
                    }
                }
                if (i == getCurrentDayOfMonth()) {
                    list.add(String.valueOf(i) + "-BLUE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                } else {
                    list.add(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                    if (_myPrefs.getIfConfigured()) {
                        if (_regionWithHolidays != null && _regionWithHolidays.length != 0) {
                            String otherDates = String.valueOf(i) + "-" + getMonthAsString(nCurrentMonth) + "-" + _strCurrentSelectedYear;
                            for (int index = 0; index < _regionWithHolidays.length; index++) {
                                if (_regionWithHolidays[index].getHolidayDate().equals(otherDates)) {
                                    list.remove(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(nCurrentMonth) + "-" + yy);
                                }
                            }
                        }
                    }
                }
            }
            // some code
            for (int i = 1; i <= _nDaysInMonth; i++) {
                String[] day_color = list.get(i).split("-");
                if (day_color[1].equals("WHITE")) {
                    //active dates in current month
                    dayNumberView.setTextColor(getResources().getColor(R.color.darkGrey_font));
                } else if (day_color[1].equals("BLUE")) {
                    //current date in current month
                    holder.tvTime.setTextColor(getResources().getColor(R.color.whitetranslucent));
                    dayNumberView.setTextColor(getResources().getColor(R.color.whitetranslucent));
                    cell.setBackgroundResource(R.color.blue_font);
                } else if (day_color[1].equals("RED")) {
                    //active dates in current month
                    dayNumberView.setTextColor(getResources().getColor(R.color.red));
                }
            }
                                 
        
            Это приложение с десятками тысяч пользователей. Мне выпала честь править в нем баги. На сколько я могу судить задача этого куска была отобразить календарь на текущий месяц на экране и подсветить WHITE - обычные дни, BLUE - текущий, RED - выходные и праздничные. Итак в чем соль: 
1) сама соль метода - в одном цикле создается список строк вида НОМЕР-ЦВЕТ-МЕСЯЦ-ГОД, чуть ниже в аналогичном цикле эти строки разбиваются по "-" и сравнивается по строковому значению цвета. Кроме того день может быть или текущим или праздничным, но никак не одновременно.
2) два практически одинаковых куска кода по 10 строк -  строки 4-13 и 19-28, первый при определенных условия добавляет ПРАЗДНИЧНЫЙ день в календарь, потом день в 16-18 строках день всегда добавляется еще раз этот день, либо обычный(WHITE) либо текущий(BLUE), и выполняется второй кусок и если проходят те же условия т.е. фактические если был добавлен праздничный день(RED) то удаляется добавленный ОБЫЧНЫЙ день. Баг был в том что если текущий день был еще и праздничным то они задваивались. Сделать по нормальному - если день уже добавлен, не добавлять еще раз или сделать continue главному циклу. Не говоря уже о том чтобы добавить break после 9 строки, видно автор не знал про эти операторы.
        
        
            Запостил:  TAX,
            19 Июня 2014
 TAX,
            19 Июня 2014
        
        
            
            
        
        
    
 
Запилить функцию isHolyday() и... всё ;)
Но баг никто не замечал годами т.к. в выходные никто прогу не юзал?