forked from github/wulkanowy-mirror
Add a view of free days to the timetable (#57)
* Fix Timetable freeze when app was killed * Add views for free days
This commit is contained in:

committed by
Mikołaj Pich

parent
e274949257
commit
c3803b1c96
@ -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) {
|
||||
|
@ -25,6 +25,10 @@ public class BasePresenter<V extends BaseContract.View> implements BaseContract.
|
||||
view = null;
|
||||
}
|
||||
|
||||
protected boolean isViewAttached() {
|
||||
return view != null;
|
||||
}
|
||||
|
||||
public final RepositoryContract getRepository() {
|
||||
return repository;
|
||||
}
|
||||
|
@ -22,15 +22,6 @@ public class LoginPresenter extends BasePresenter<LoginContract.View>
|
||||
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<LoginContract.View>
|
||||
|
||||
@Override
|
||||
public void onStartAsync() {
|
||||
getView().showLoginProgress(true);
|
||||
if (isViewAttached()) {
|
||||
getView().showLoginProgress(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -90,7 +83,9 @@ public class LoginPresenter extends BasePresenter<LoginContract.View>
|
||||
|
||||
@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<LoginContract.View>
|
||||
}
|
||||
return correct;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (loginAsync != null) {
|
||||
loginAsync.cancel(true);
|
||||
loginAsync = null;
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +78,9 @@ public class GradesPresenter extends BasePresenter<GradesContract.View>
|
||||
|
||||
@Override
|
||||
public void onCanceledRefreshAsync() {
|
||||
getView().hideRefreshingBar();
|
||||
if (isViewAttached()) {
|
||||
getView().hideRefreshingBar();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -138,13 +140,14 @@ public class GradesPresenter extends BasePresenter<GradesContract.View>
|
||||
} 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<GradesContract.View>
|
||||
loadingTask.cancel(true);
|
||||
loadingTask = null;
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
||||
|
@ -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<TimetableSubItem> subItems) {
|
||||
|
@ -98,10 +98,12 @@ public class TimetablePresenter extends BasePresenter<TimetableContract.View>
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
isFirstSight = false;
|
||||
|
||||
if (loadingTask != null) {
|
||||
loadingTask.cancel(true);
|
||||
loadingTask = null;
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
||||
|
@ -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<View> {
|
||||
|
@ -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;
|
||||
|
@ -26,6 +26,8 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
|
||||
private String date;
|
||||
|
||||
private String freeWeekName;
|
||||
|
||||
private boolean isFirstSight = false;
|
||||
|
||||
@Inject
|
||||
@ -37,6 +39,7 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
public void onStart(TimetableTabContract.View view, boolean isPrimary) {
|
||||
super.onStart(view);
|
||||
getView().showProgressBar(true);
|
||||
getView().showNoItem(false);
|
||||
onFragmentSelected(isPrimary);
|
||||
}
|
||||
|
||||
@ -70,7 +73,9 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
|
||||
@Override
|
||||
public void onCanceledRefreshAsync() {
|
||||
// do nothing
|
||||
if (isViewAttached()) {
|
||||
getView().hideRefreshingBar();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -100,9 +105,15 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
|
||||
headerItems = new ArrayList<>();
|
||||
|
||||
boolean isFreeWeek = true;
|
||||
|
||||
for (Day day : dayList) {
|
||||
TimetableHeaderItem headerItem = new TimetableHeaderItem(day);
|
||||
|
||||
if (isFreeWeek) {
|
||||
isFreeWeek = day.isFreeDay();
|
||||
}
|
||||
|
||||
List<Lesson> lessonList = day.getLessons();
|
||||
|
||||
List<TimetableSubItem> subItems = new ArrayList<>();
|
||||
@ -115,6 +126,11 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
headerItem.setExpanded(false);
|
||||
headerItems.add(headerItem);
|
||||
}
|
||||
|
||||
if (isFreeWeek) {
|
||||
freeWeekName = dayList.get(4).getFreeDayName();
|
||||
headerItems = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -124,7 +140,12 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
|
||||
@Override
|
||||
public void onEndLoadingAsync(boolean result, Exception exception) {
|
||||
getView().updateAdapterList(headerItems);
|
||||
if (headerItems.isEmpty()) {
|
||||
getView().showNoItem(true);
|
||||
getView().setFreeWeekName(freeWeekName);
|
||||
} else {
|
||||
getView().updateAdapterList(headerItems);
|
||||
}
|
||||
getView().showProgressBar(false);
|
||||
}
|
||||
|
||||
@ -140,7 +161,6 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
isFirstSight = false;
|
||||
|
||||
if (refreshTask != null) {
|
||||
@ -151,5 +171,6 @@ public class TimetableTabPresenter extends BasePresenter<TimetableTabContract.Vi
|
||||
loadingTask.cancel(true);
|
||||
loadingTask = null;
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user