diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Day.java b/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Day.java index 15a063091..99574e1db 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Day.java +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/entities/Day.java @@ -131,14 +131,6 @@ public class Day { return this; } - public boolean getIsFreeDay() { - return this.isFreeDay; - } - - public void setIsFreeDay(boolean isFreeDay) { - this.isFreeDay = isFreeDay; - } - /** * To-many relationship, resolved on first access (and after reset). * Changes to to-many relations are not persisted, make changes to the target entity. @@ -205,6 +197,14 @@ public class Day { myDao.update(this); } + public boolean getIsFreeDay() { + return this.isFreeDay; + } + + public void setIsFreeDay(boolean isFreeDay) { + this.isFreeDay = isFreeDay; + } + /** called by internal mechanisms, do not call yourself. */ @Generated(hash = 1409317752) public void __setDaoSession(DaoSession daoSession) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/base/BasePresenter.java b/app/src/main/java/io/github/wulkanowy/ui/base/BasePresenter.java index dfb60b6fb..611b7a29e 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/base/BasePresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/base/BasePresenter.java @@ -25,6 +25,10 @@ public class BasePresenter implements BaseContract. view = null; } + protected boolean isViewAttached() { + return view != null; + } + public final RepositoryContract getRepository() { return repository; } diff --git a/app/src/main/java/io/github/wulkanowy/ui/login/LoginPresenter.java b/app/src/main/java/io/github/wulkanowy/ui/login/LoginPresenter.java index c8e847258..b4e2e4e92 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/login/LoginPresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/login/LoginPresenter.java @@ -22,15 +22,6 @@ public class LoginPresenter extends BasePresenter super(repository); } - @Override - public void onDestroy() { - super.onDestroy(); - if (loginAsync != null) { - loginAsync.cancel(true); - loginAsync = null; - } - } - @Override public void attemptLogin(String email, String password, String symbol) { getView().resetViewErrors(); @@ -57,7 +48,9 @@ public class LoginPresenter extends BasePresenter @Override public void onStartAsync() { - getView().showLoginProgress(true); + if (isViewAttached()) { + getView().showLoginProgress(true); + } } @Override @@ -90,7 +83,9 @@ public class LoginPresenter extends BasePresenter @Override public void onCanceledAsync() { - getView().showLoginProgress(false); + if (isViewAttached()) { + getView().showLoginProgress(false); + } } private boolean isEmailValid(String email) { @@ -140,4 +135,13 @@ public class LoginPresenter extends BasePresenter } return correct; } + + @Override + public void onDestroy() { + if (loginAsync != null) { + loginAsync.cancel(true); + loginAsync = null; + } + super.onDestroy(); + } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesPresenter.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesPresenter.java index cae2fbcb6..65c8acd01 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesPresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesPresenter.java @@ -78,7 +78,9 @@ public class GradesPresenter extends BasePresenter @Override public void onCanceledRefreshAsync() { - getView().hideRefreshingBar(); + if (isViewAttached()) { + getView().hideRefreshingBar(); + } } @Override @@ -138,13 +140,14 @@ public class GradesPresenter extends BasePresenter } else { getView().updateAdapterList(headerItems); getView().showNoItem(false); - listener.onFragmentIsReady(); } + listener.onFragmentIsReady(); } @Override public void onDestroy() { - super.onDestroy(); + isFirstSight = false; + if (refreshTask != null) { refreshTask.cancel(true); refreshTask = null; @@ -153,5 +156,6 @@ public class GradesPresenter extends BasePresenter loadingTask.cancel(true); loadingTask = null; } + super.onDestroy(); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableHeaderItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableHeaderItem.java index c418d9acd..6393179e9 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableHeaderItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableHeaderItem.java @@ -1,6 +1,7 @@ package io.github.wulkanowy.ui.main.timetable; import android.view.View; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -10,6 +11,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder; import java.util.List; +import butterknife.BindColor; import butterknife.BindView; import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; @@ -73,6 +75,15 @@ public class TimetableHeaderItem @BindView(R.id.timetable_header_alert_image) ImageView alert; + @BindView(R.id.timetable_header_free_name) + TextView freeName; + + @BindColor(R.color.secondary_text) + int secondaryColor; + + @BindColor(R.color.free_day) + int backgroundFreeDay; + HeaderViewHolder(View view, FlexibleAdapter adapter) { super(view, adapter); view.setOnClickListener(this); @@ -83,6 +94,14 @@ public class TimetableHeaderItem dayName.setText(StringUtils.capitalize(item.getDayName())); date.setText(item.getDate()); alert.setVisibility(isSubItemNewMovedInOrChanged(subItems) ? View.VISIBLE : View.INVISIBLE); + freeName.setVisibility(item.isFreeDay() ? View.VISIBLE : View.INVISIBLE); + freeName.setText(item.getFreeDayName()); + + if (item.isFreeDay()) { + ((FrameLayout) getContentView()).setForeground(null); + getContentView().setBackgroundColor(backgroundFreeDay); + dayName.setTextColor(secondaryColor); + } } private boolean isSubItemNewMovedInOrChanged(List subItems) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetablePresenter.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetablePresenter.java index bee323ddb..5d17a4422 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetablePresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetablePresenter.java @@ -98,10 +98,12 @@ public class TimetablePresenter extends BasePresenter @Override public void onDestroy() { - super.onDestroy(); + isFirstSight = false; + if (loadingTask != null) { loadingTask.cancel(true); loadingTask = null; } + super.onDestroy(); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabContract.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabContract.java index fbffdb12a..d17e6e557 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabContract.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabContract.java @@ -14,7 +14,11 @@ public interface TimetableTabContract { void hideRefreshingBar(); + void showNoItem(boolean show); + void showProgressBar(boolean show); + + void setFreeWeekName(String text); } interface Presenter extends BaseContract.Presenter { diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabFragment.java index 10f3163af..65841247d 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabFragment.java @@ -9,6 +9,7 @@ import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import java.util.List; @@ -25,7 +26,9 @@ import io.github.wulkanowy.ui.base.BaseFragment; public class TimetableTabFragment extends BaseFragment implements TimetableTabContract.View, SwipeRefreshLayout.OnRefreshListener { - private static final String ARGUMENT_KEY = "Date"; + private static final String ARGUMENT_KEY = "date"; + + private static final String SAVED_KEY = "isSelected"; private boolean isPrimary = false; @@ -40,6 +43,12 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo @BindView(R.id.timetable_tab_fragment_progress_bar) View progressBar; + @BindView(R.id.timetable_tab_fragment_no_item_container) + View noItemView; + + @BindView(R.id.timetable_tab_fragment_no_item_name) + TextView noItemName; + @Inject TimetableTabContract.Presenter presenter; @@ -56,6 +65,14 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo return fragmentTab; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + isSelected = savedInstanceState.getBoolean(SAVED_KEY, isSelected); + } + } + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -104,6 +121,11 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo } } + @Override + public void setFreeWeekName(String text) { + noItemName.setText(text); + } + @Override public void onRefresh() { presenter.onRefresh(); @@ -124,6 +146,11 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo progressBar.setVisibility(show ? View.VISIBLE : View.INVISIBLE); } + @Override + public void showNoItem(boolean show) { + noItemView.setVisibility(show ? View.VISIBLE : View.INVISIBLE); + } + public void setSelected(boolean selected) { isSelected = selected; } @@ -136,6 +163,12 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo } } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(SAVED_KEY, isSelected); + super.onSaveInstanceState(outState); + } + @Override public void onDestroyView() { isPrimary = false; diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabPresenter.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabPresenter.java index 5872b4d05..43ead53e0 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabPresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableTabPresenter.java @@ -26,6 +26,8 @@ public class TimetableTabPresenter extends BasePresenter(); + boolean isFreeWeek = true; + for (Day day : dayList) { TimetableHeaderItem headerItem = new TimetableHeaderItem(day); + if (isFreeWeek) { + isFreeWeek = day.isFreeDay(); + } + List lessonList = day.getLessons(); List subItems = new ArrayList<>(); @@ -115,6 +126,11 @@ public class TimetableTabPresenter extends BasePresenter(); + } } @Override @@ -124,7 +140,12 @@ public class TimetableTabPresenter extends BasePresenter + app:srcCompat="@drawable/ic_menu_grade_26dp" + tools:ignore="contentDescription" /> diff --git a/app/src/main/res/layout/fragment_timetable_tab.xml b/app/src/main/res/layout/fragment_timetable_tab.xml index 598ca11fb..749a6b345 100644 --- a/app/src/main/res/layout/fragment_timetable_tab.xml +++ b/app/src/main/res/layout/fragment_timetable_tab.xml @@ -1,5 +1,6 @@ + + + + + + + + + + android:foreground="?attr/selectableItemBackgroundBorderless"> - + - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/timetable_subitem.xml b/app/src/main/res/layout/timetable_subitem.xml index ceb867a46..86b173b47 100644 --- a/app/src/main/res/layout/timetable_subitem.xml +++ b/app/src/main/res/layout/timetable_subitem.xml @@ -61,7 +61,7 @@ android:layout_alignStart="@id/timetable_subItem_lesson" android:maxLines="1" android:text="@string/grades_text" - android:textColor="#4C4C4C" + android:textColor="@color/secondary_text" android:textSize="12sp" /> diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1d05451ea..8fbe68fb4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -73,6 +73,7 @@ Średnia: %1$.2f Brak średniej + Brak lekcji w tym tygodniu Sala %s diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a34531d47..cc1dab22d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,5 +10,7 @@ #FFE68C #CE9AD2 #d32f2f + #4c4c4c #cdcdcd + #eee diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 666fe7477..56f4ffba0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,6 +72,7 @@ Average: %1$.2f No average + No lesson in this week Technical break Room %s