CoNaObiad – powrót – #29

Trochę odpoczęłam już od tej aplikacji, więc mogę zacząć dodawać kolejne funkcje 🙂 Na początek coś małego – będę umożliwiać dodanie losowych obiadów tylko do dni, które nie mają jeszcze żadnego zaplanowanego posiłku.

Na początek nie chciałam utracić funkcji, która wypełnia wszystkie dni, więc zamieniłam ikonkę na rozwijalne menu:

wp-1505384617958.

Troszkę kodu do tego elementu z menu:


<item
android:icon="@drawable/ic_light_bulb"
android:title="@string/fill_list"
app:showAsAction="always">
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fill_list_item"
android:icon="@drawable/ic_light_bulb_bright"
android:title="@string/fill_list" />
<item
android:id="@+id/fill_list_empty_item"
android:icon="@drawable/ic_light_bulb"
android:title="@string/fill_only_empty_list" />
</menu>
</item>

view raw

main_menu.xml

hosted with ❤ by GitHub

Po kliknięciu na element: „wypełnij losowo” aplikacja dorzuca po jednym daniu do każdego z kafelków. Druga akcja dorzuca obiad tylko tam gdzie jeszcze nic nie jest zaplanowane. Zrobiłam to dorzucając po prostu parametr do funkcji fillList:


private void fillList(boolean onlyEmpty) {
Calendar calendarInstance = Calendar.getInstance();
calendarInstance.setTime(TimeUtils.getWeekStartDate(new Date()));
List<Meal> meals = mealContract.getRandomMeals(dbHelper, getPlanLength());
for (Meal meal : meals) {
if (!onlyEmpty || dinnerAdapter.isDayEmpty(calendarInstance.getTime())) {
dinnerContract.insert(dbHelper, meal.getId(), calendarInstance.getTime());
}
calendarInstance.add(Calendar.DATE, 1);
}
dinnerAdapter.updateResults();
}

Jak sprawdzam, czy coś zaplanowałam w danym dniu?


public boolean isDayEmpty(Date date) {
return getDinners(date).size() == 0;
}

I przy wywołaniu wystarczy przekazać tylko odpowiedni parametr:


case R.id.fill_list_item:
fillList(false);
return true;
case R.id.fill_list_empty_item:
fillList(true);
return true;

W ten sposób udało mi się wyeliminować jedno TODO z kodu 😀

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.