[Solved] Blynk iOS Time Input Widget bug

Hallo all,
I want to inform you for a bug that i found.
When using the time input Widget on iOS BlynkApp, if you don’t select any day, the function “isWeekdaySelected()” returns “true” in all values.

If i check at least one day, everything is working perfect, if i don’t, it thinks i have checked all the days.
I made a check with serial.print(isWeekdaySelected(x)) and all values are true.

I am using:
Arduino Due with Adafruit Fona
iOS 12.0.1
BlynkApp 2.25.0(3)
Blynk cloud server
Blynk library latest version (library update tool says so)

BLYNK_WRITE(V13)
{
  TimeInputParam time1(param);
  if (!time1.isWeekdaySelected(1) && !time1.isWeekdaySelected(2) && !time1.isWeekdaySelected(3) && !time1.isWeekdaySelected(4) && !time1.isWeekdaySelected(5) && !time1.isWeekdaySelected(6) && !time1.isWeekdaySelected(7))
  {
    Blynk.setProperty(V13, "color", "#d3435c");
  }
  else if (!time1.hasStartTime() && !time1.hasStopTime())
  {
    Blynk.setProperty(V13, "color", "#d3435c");
  }
  else
  {
    Blynk.setProperty(V13, "color", "#3dc2ff");
  }
  if (time1.hasStartTime())
  {
    time1_start_hour = time1.getStartHour() * 3600;
    time1_start_minute = time1.getStartMinute() * 60;
    time1_start_second = time1.getStartSecond();
  }
  if (time1.hasStopTime())
  {
    time1_stop_hour = time1.getStopHour() * 3600;
    time1_stop_minute = time1.getStopMinute() * 60;
    time1_stop_second = time1.getStopSecond();
  }
  if (time1.isWeekdaySelected(7))
  {
    time1_day_adjusted[0] = 1;
  }
  if (time1.isWeekdaySelected(1))
  {
    time1_day_adjusted[1] = 2;
  }
  if (time1.isWeekdaySelected(2))
  {
    time1_day_adjusted[2] = 3;
  }
  if (time1.isWeekdaySelected(3))
  {
    time1_day_adjusted[3] = 4;
  }
  if (time1.isWeekdaySelected(4))
  {
    time1_day_adjusted[4] = 5;
  }
  if (time1.isWeekdaySelected(5))
  {
    time1_day_adjusted[5] = 6;
  }
  if (time1.isWeekdaySelected(6))
  {
    time1_day_adjusted[6] = 7;
  }
  if (!time1.isWeekdaySelected(7))
  {
    time1_day_adjusted[0] = 0;
  }
  if (!time1.isWeekdaySelected(1))
  {
    time1_day_adjusted[1] = 0;
  }
  if (!time1.isWeekdaySelected(2))
  {
    time1_day_adjusted[2] = 0;
  }
  if (!time1.isWeekdaySelected(3))
  {
    time1_day_adjusted[3] = 0;
  }
  if (!time1.isWeekdaySelected(4))
  {
    time1_day_adjusted[4] = 0;
  }
  if (!time1.isWeekdaySelected(5))
  {
    time1_day_adjusted[5] = 0;
  }
  if (!time1.isWeekdaySelected(6))
  {
    time1_day_adjusted[6] = 0;
  }
}

BLYNK_WRITE(V14)
{
  TimeInputParam time2(param);
  if (!time2.isWeekdaySelected(1) && !time2.isWeekdaySelected(2) && !time2.isWeekdaySelected(3) && !time2.isWeekdaySelected(4) && !time2.isWeekdaySelected(5) && !time2.isWeekdaySelected(6) && !time2.isWeekdaySelected(7))
  {
    Blynk.setProperty(V14, "color", "#d3435c");
  }
  else if (!time2.hasStartTime() && !time2.hasStopTime())
  {
    Blynk.setProperty(V14, "color", "#d3435c");
  }
  else
  {
    Blynk.setProperty(V14, "color", "#3dc2ff");
  }
  if (time2.hasStartTime())
  {
    time2_start_hour = time2.getStartHour() * 3600;
    time2_start_minute = time2.getStartMinute() * 60;
    time2_start_second = time2.getStartSecond();
  }
  if (time2.hasStopTime())
  {
    time2_stop_hour = time2.getStopHour() * 3600;
    time2_stop_minute = time2.getStopMinute() * 60;
    time2_stop_second = time2.getStopSecond();
  }
  if (time2.isWeekdaySelected(7))
  {
    time2_day_adjusted[0] = 1;
  }
  if (time2.isWeekdaySelected(1))
  {
    time2_day_adjusted[1] = 2;
  }
  if (time2.isWeekdaySelected(2))
  {
    time2_day_adjusted[2] = 3;
  }
  if (time2.isWeekdaySelected(3))
  {
    time2_day_adjusted[3] = 4;
  }
  if (time2.isWeekdaySelected(4))
  {
    time2_day_adjusted[4] = 5;
  }
  if (time2.isWeekdaySelected(5))
  {
    time2_day_adjusted[5] = 6;
  }
  if (time2.isWeekdaySelected(6))
  {
    time2_day_adjusted[6] = 7;
  }
  if (!time2.isWeekdaySelected(7))
  {
    time2_day_adjusted[0] = 0;
  }
  if (!time2.isWeekdaySelected(1))
  {
    time2_day_adjusted[1] = 0;
  }
  if (!time2.isWeekdaySelected(2))
  {
    time2_day_adjusted[2] = 0;
  }
  if (!time2.isWeekdaySelected(3))
  {
    time2_day_adjusted[3] = 0;
  }
  if (!time2.isWeekdaySelected(4))
  {
    time2_day_adjusted[4] = 0;
  }
  if (!time2.isWeekdaySelected(5))
  {
    time2_day_adjusted[5] = 0;
  }
  if (!time2.isWeekdaySelected(6))
  {
    time2_day_adjusted[6] = 0;
  }
}

if (alarm_auto_button == 1)
  {
    if (time1_day_adjusted[weekday() - 1] == weekday() || time2_day_adjusted[weekday() - 1] == weekday())
    {
      auto_enable = true;
    }
    else
    {
      auto_enable = false;
    }
    if (auto_enable)
    {
      if (((hour() * 3600 + minute() * 60 + second()) == (time1_start_hour + time1_start_minute + time1_start_second)) && alarm_state == 0)
      {
        alarm_state_function(2);
      }
      if (((hour() * 3600 + minute() * 60 + second()) == (time1_stop_hour + time1_stop_minute + time1_stop_second)) && alarm_state == 2)
      {
        alarm_state_function(0);
      }
      if (((hour() * 3600 + minute() * 60 + second()) == (time2_start_hour + time2_start_minute + time2_start_second)) && alarm_state == 0)
      {
        alarm_state_function(2);
      }
      if (((hour() * 3600 + minute() * 60 + second()) == (time2_stop_hour + time2_stop_minute + time2_stop_second)) && alarm_state == 2)
      {
        alarm_state_function(0);
      }
    }
  }

Same “bug” in Android but it’s actually a “feature” not a bug.

If you want no days to mean no days edit WidgetTimeInput.h at line 33.
Change:
mWeekdays = -1;
to
mWeekdays = 0;

Thank you for the reply! Great job! I am going to test!