diff --git a/api/build.gradle b/api/build.gradle index ebaca4c87..001d25791 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -28,12 +28,12 @@ jacocoTestReport { } dependencies { - implementation 'org.jsoup:jsoup:1.10.3' - implementation 'org.apache.commons:commons-lang3:3.7' - implementation 'com.google.code.gson:gson:2.8.2' + implementation "org.jsoup:jsoup:$jsoup" + implementation "org.apache.commons:commons-lang3:$apacheLang" + implementation "com.google.code.gson:gson:$gson" - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.13.0' + testImplementation "junit:junit:$junit" + testImplementation "org.mockito:mockito-core:$mockito" } version = PUBLISH_VERSION diff --git a/app/build.gradle b/app/build.gradle index 055fb302c..6b63b2d35 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,13 +21,13 @@ apply from: '../jacoco.gradle' apply from: '../android-sonarqube.gradle' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 26 + buildToolsVersion "26.0.3" defaultConfig { applicationId "io.github.wulkanowy" testApplicationId "io.github.tests.wulkanowy" minSdkVersion 15 - targetSdkVersion 27 + targetSdkVersion 26 versionCode 4 versionName "0.2.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -68,42 +68,39 @@ greendao { dependencies { implementation project(':api') - implementation 'com.android.support:appcompat-v7:27.1.0' - implementation 'com.android.support:design:27.1.0' - implementation 'com.android.support:support-v4:27.1.0' - implementation 'com.android.support:recyclerview-v7:27.1.0' - implementation 'com.android.support:cardview-v7:27.1.0' - implementation 'com.android.support:customtabs:27.1.0' - implementation 'com.firebase:firebase-jobdispatcher:0.8.5' - implementation 'org.apache.commons:commons-lang3:3.7' - implementation 'eu.davidea:flexible-adapter:5.0.0-rc4' - implementation 'eu.davidea:flexible-adapter-ui:1.0.0-b1' - implementation 'org.apache.commons:commons-collections4:4.1' - implementation 'org.greenrobot:greendao:3.2.2' - implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.0.2' - implementation 'com.jakewharton:butterknife:8.8.1' - implementation 'joda-time:joda-time:2.9.9' - implementation 'com.google.dagger:dagger-android:2.14.1' - implementation 'com.google.dagger:dagger-android-support:2.14.1' - implementation 'com.aurelhubert:ahbottomnavigation:2.1.0' + implementation "com.android.support:support-v4:$supportVersion" + implementation "com.android.support:design:$supportVersion" + implementation "com.android.support:cardview-v7:$supportVersion" + implementation "com.android.support:customtabs:$supportVersion" + implementation "com.firebase:firebase-jobdispatcher:$firebaseJob" + implementation "org.apache.commons:commons-lang3:$apacheLang" + implementation "org.apache.commons:commons-collections4:$apacheCollections" + implementation "eu.davidea:flexible-adapter:$flexibleAdapter" + implementation "eu.davidea:flexible-adapter-ui:$flexibleUi" + implementation "org.greenrobot:greendao:$greenDao" + implementation "com.github.yuweiguocn:GreenDaoUpgradeHelper:$greenDaoHelper" + implementation "com.jakewharton:butterknife:$butterknife" + implementation "joda-time:joda-time:$jodaTime" + implementation "com.google.dagger:dagger-android-support:$dagger2" + implementation "com.aurelhubert:ahbottomnavigation:$ahbottom" - implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') { + implementation("com.crashlytics.sdk.android:crashlytics:$crashlyticsSdk@aar") { transitive = true } - implementation('com.crashlytics.sdk.android:answers:1.4.1@aar') { + implementation("com.crashlytics.sdk.android:answers:$crashlyticsAnswers@aar") { transitive = true } - annotationProcessor 'com.google.dagger:dagger-android-processor:2.14.1' - annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1' - annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2" + annotationProcessor "com.google.dagger:dagger-compiler:$dagger2" + annotationProcessor "com.jakewharton:butterknife-compiler:$butterknife" - debugImplementation 'com.amitshekhar.android:debug-db:1.0.1' - debugImplementation 'net.zetetic:android-database-sqlcipher:3.5.9' + debugImplementation "com.amitshekhar.android:debug-db:$debugDb" + debugImplementation "net.zetetic:android-database-sqlcipher:$sqlcipher" - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.13.0' + testImplementation "junit:junit:$junit" + testImplementation "org.mockito:mockito-core:$mockito" - androidTestImplementation 'com.android.support.test:runner:1.0.1' - androidTestImplementation 'org.mockito:mockito-android:2.13.0' + androidTestImplementation "com.android.support.test:runner:$testRunner" + androidTestImplementation "org.mockito:mockito-android:$mockito" } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceContract.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceContract.java index f8d3b3025..545e300ea 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceContract.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceContract.java @@ -17,20 +17,16 @@ public interface AttendanceContract { void setAdapterWithTabLayout(); - void setChildFragmentSelected(int position, boolean selected); - boolean isMenuVisible(); } @PerActivity interface Presenter extends BaseContract.Presenter { - void onFragmentVisible(boolean isVisible); - - void onTabSelected(int position); - - void onTabUnselected(int position); + void onFragmentActivated(boolean isVisible); void onStart(View view, OnFragmentIsReadyListener listener); + + void setRestoredPosition(int position); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceFragment.java index 82bb2520b..4dd179b15 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceFragment.java @@ -20,7 +20,9 @@ import io.github.wulkanowy.ui.base.BaseFragment; import io.github.wulkanowy.ui.main.OnFragmentIsReadyListener; import io.github.wulkanowy.ui.main.TabsData; -public class AttendanceFragment extends BaseFragment implements AttendanceContract.View, TabLayout.OnTabSelectedListener { +public class AttendanceFragment extends BaseFragment implements AttendanceContract.View { + + private static final String CURRENT_ITEM_KEY = "CurrentItem"; @BindView(R.id.attendance_fragment_viewpager) ViewPager viewPager; @@ -45,6 +47,10 @@ public class AttendanceFragment extends BaseFragment implements AttendanceContra component.inject(this); setButterKnife(ButterKnife.bind(this, view)); presenter.onStart(this, (OnFragmentIsReadyListener) getActivity()); + + if (savedInstanceState != null) { + presenter.setRestoredPosition(savedInstanceState.getInt(CURRENT_ITEM_KEY)); + } } return view; @@ -54,25 +60,10 @@ public class AttendanceFragment extends BaseFragment implements AttendanceContra public void setMenuVisibility(boolean menuVisible) { super.setMenuVisibility(menuVisible); if (presenter != null) { - presenter.onFragmentVisible(menuVisible); + presenter.onFragmentActivated(menuVisible); } } - @Override - public void onTabSelected(TabLayout.Tab tab) { - presenter.onTabSelected(tab.getPosition()); - } - - @Override - public void onTabUnselected(TabLayout.Tab tab) { - presenter.onTabUnselected(tab.getPosition()); - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - //do nothing - } - @Override public void setTabDataToAdapter(TabsData tabsData) { pagerAdapter.setTabsData(tabsData); @@ -81,14 +72,7 @@ public class AttendanceFragment extends BaseFragment implements AttendanceContra @Override public void setAdapterWithTabLayout() { viewPager.setAdapter(pagerAdapter); - tabLayout.setupWithViewPager(viewPager); - tabLayout.addOnTabSelectedListener(this); - } - - @Override - public void setChildFragmentSelected(int position, boolean selected) { - ((AttendanceTabFragment) pagerAdapter.getItem(position)).setSelected(selected); } @Override @@ -109,6 +93,12 @@ public class AttendanceFragment extends BaseFragment implements AttendanceContra } } + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(CURRENT_ITEM_KEY, viewPager.getCurrentItem()); + super.onSaveInstanceState(outState); + } + @Override public void onDestroyView() { presenter.onDestroy(); diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceHeaderItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceHeaderItem.java index 306065eea..a055156d6 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceHeaderItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceHeaderItem.java @@ -19,6 +19,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem; +import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.ExpandableViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Day; @@ -58,12 +59,13 @@ public class AttendanceHeaderItem } @Override - public HeaderViewHolder createViewHolder(View view, FlexibleAdapter adapter) { + public HeaderViewHolder createViewHolder(View view, FlexibleAdapter adapter) { return new HeaderViewHolder(view, adapter); } @Override - public void bindViewHolder(FlexibleAdapter adapter, HeaderViewHolder holder, int position, List payloads) { + public void bindViewHolder(FlexibleAdapter adapter, HeaderViewHolder holder, + int position, List payloads) { holder.onBind(day, getSubItems()); } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendancePresenter.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendancePresenter.java index 73dd44ca7..bad68e166 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendancePresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendancePresenter.java @@ -24,7 +24,7 @@ public class AttendancePresenter extends BasePresenter private OnFragmentIsReadyListener listener; - private int positionToScroll; + private int positionToScroll = 0; private boolean isFirstSight = false; @@ -45,7 +45,10 @@ public class AttendancePresenter extends BasePresenter if (dates.isEmpty()) { dates = TimeUtils.getMondaysFromCurrentSchoolYear(); } - positionToScroll = dates.indexOf(TimeUtils.getDateOfCurrentMonday(true)); + + if (positionToScroll == 0) { + positionToScroll = dates.indexOf(TimeUtils.getDateOfCurrentMonday(true)); + } if (!isFirstSight) { isFirstSight = true; @@ -57,22 +60,12 @@ public class AttendancePresenter extends BasePresenter } @Override - public void onFragmentVisible(boolean isVisible) { + public void onFragmentActivated(boolean isVisible) { if (isVisible) { getView().setActivityTitle(); } } - @Override - public void onTabSelected(int position) { - getView().setChildFragmentSelected(position, true); - } - - @Override - public void onTabUnselected(int position) { - getView().setChildFragmentSelected(position, false); - } - @Override public void onDoInBackgroundLoading() throws Exception { for (String date : dates) { @@ -97,6 +90,11 @@ public class AttendancePresenter extends BasePresenter } } + @Override + public void setRestoredPosition(int position) { + this.positionToScroll = position; + } + @Override public void onDestroy() { isFirstSight = false; diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceSubItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceSubItem.java index 6da35555a..8249a5139 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceSubItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceSubItem.java @@ -16,6 +16,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractSectionableItem; +import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.AttendanceLesson; @@ -60,12 +61,13 @@ class AttendanceSubItem } @Override - public AttendanceSubItem.SubItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) { - return new AttendanceSubItem.SubItemViewHolder(view, adapter); + public SubItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) { + return new SubItemViewHolder(view, adapter); } @Override - public void bindViewHolder(FlexibleAdapter adapter, AttendanceSubItem.SubItemViewHolder holder, int position, List payloads) { + public void bindViewHolder(FlexibleAdapter adapter, SubItemViewHolder holder, + int position, List payloads) { holder.onBind(lesson); } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabContract.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabContract.java index 1bac005d6..dcb16bf88 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabContract.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabContract.java @@ -21,12 +21,10 @@ public interface AttendanceTabContract { interface Presenter extends BaseContract.Presenter { - void onFragmentSelected(boolean isSelected); + void onFragmentActivated(boolean isSelected); void setArgumentDate(String date); - void onStart(AttendanceTabContract.View view, boolean isPrimary); - void onRefresh(); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabFragment.java index 90313daa6..b635da2b3 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabFragment.java @@ -27,12 +27,6 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab private static final String ARGUMENT_KEY = "date"; - private static final String SAVED_KEY = "isSelected"; - - private boolean isPrimary = false; - - private boolean isSelected = false; - @BindView(R.id.attendance_tab_fragment_recycler) RecyclerView recyclerView; @@ -51,6 +45,8 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab @Inject FlexibleAdapter adapter; + private boolean isFragmentVisible = false; + public static AttendanceTabFragment newInstance(String date) { AttendanceTabFragment fragmentTab = new AttendanceTabFragment(); @@ -61,15 +57,6 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab 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) { @@ -84,7 +71,8 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab presenter.setArgumentDate(getArguments().getString(ARGUMENT_KEY)); } - presenter.onStart(this, isPrimary); + presenter.onStart(this); + presenter.onFragmentActivated(isFragmentVisible); } return view; } @@ -111,10 +99,9 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab @Override public void setMenuVisibility(boolean menuVisible) { super.setMenuVisibility(menuVisible); - if (presenter != null && getView() != null) { - presenter.onFragmentSelected(isSelected); - } else if (isSelected) { - isPrimary = true; + isFragmentVisible = menuVisible; + if (presenter != null) { + presenter.onFragmentActivated(menuVisible); } } @@ -143,10 +130,6 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab noItemView.setVisibility(show ? View.VISIBLE : View.INVISIBLE); } - public void setSelected(boolean selected) { - isSelected = selected; - } - @Override public void onError(String message) { if (getActivity() != null) { @@ -155,15 +138,8 @@ public class AttendanceTabFragment extends BaseFragment implements AttendanceTab } } - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - outState.putBoolean(SAVED_KEY, isSelected); - super.onSaveInstanceState(outState); - } - @Override public void onDestroyView() { - isPrimary = false; presenter.onDestroy(); super.onDestroyView(); } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabPresenter.java b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabPresenter.java index 48aff81c0..1db29cb1e 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabPresenter.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/attendance/AttendanceTabPresenter.java @@ -33,21 +33,22 @@ public class AttendanceTabPresenter extends BasePresenter { - void onFragmentVisible(boolean isVisible); - - void onTabSelected(int position); - - void onTabUnselected(int position); + void onFragmentActivated(boolean isVisible); void onStart(View view, OnFragmentIsReadyListener listener); + + void setRestoredPosition(int position); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableFragment.java index 8bef4fb22..2df28df2c 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableFragment.java @@ -20,7 +20,9 @@ import io.github.wulkanowy.ui.base.BaseFragment; import io.github.wulkanowy.ui.main.OnFragmentIsReadyListener; import io.github.wulkanowy.ui.main.TabsData; -public class TimetableFragment extends BaseFragment implements TimetableContract.View, TabLayout.OnTabSelectedListener { +public class TimetableFragment extends BaseFragment implements TimetableContract.View { + + private static final String CURRENT_ITEM_KEY = "CurrentItem"; @BindView(R.id.timetable_fragment_viewpager) ViewPager viewPager; @@ -44,6 +46,10 @@ public class TimetableFragment extends BaseFragment implements TimetableContract component.inject(this); setButterKnife(ButterKnife.bind(this, view)); presenter.onStart(this, (OnFragmentIsReadyListener) getActivity()); + + if (savedInstanceState != null) { + presenter.setRestoredPosition(savedInstanceState.getInt(CURRENT_ITEM_KEY)); + } } return view; } @@ -52,25 +58,10 @@ public class TimetableFragment extends BaseFragment implements TimetableContract public void setMenuVisibility(boolean menuVisible) { super.setMenuVisibility(menuVisible); if (presenter != null) { - presenter.onFragmentVisible(menuVisible); + presenter.onFragmentActivated(menuVisible); } } - @Override - public void onTabSelected(TabLayout.Tab tab) { - presenter.onTabSelected(tab.getPosition()); - } - - @Override - public void onTabUnselected(TabLayout.Tab tab) { - presenter.onTabUnselected(tab.getPosition()); - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - //do nothing - } - @Override public void setTabDataToAdapter(TabsData tabsData) { pagerAdapter.setTabsData(tabsData); @@ -79,14 +70,7 @@ public class TimetableFragment extends BaseFragment implements TimetableContract @Override public void setAdapterWithTabLayout() { viewPager.setAdapter(pagerAdapter); - tabLayout.setupWithViewPager(viewPager); - tabLayout.addOnTabSelectedListener(this); - } - - @Override - public void setChildFragmentSelected(int position, boolean selected) { - ((TimetableTabFragment) pagerAdapter.getItem(position)).setSelected(selected); } @Override @@ -107,6 +91,12 @@ public class TimetableFragment extends BaseFragment implements TimetableContract } } + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(CURRENT_ITEM_KEY, viewPager.getCurrentItem()); + super.onSaveInstanceState(outState); + } + @Override public void onDestroyView() { presenter.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 d704e8a3a..c904d9317 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 @@ -19,6 +19,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractExpandableHeaderItem; +import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.ExpandableViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.Day; @@ -58,12 +59,13 @@ public class TimetableHeaderItem } @Override - public HeaderViewHolder createViewHolder(View view, FlexibleAdapter adapter) { + public HeaderViewHolder createViewHolder(View view, FlexibleAdapter adapter) { return new HeaderViewHolder(view, adapter); } @Override - public void bindViewHolder(FlexibleAdapter adapter, HeaderViewHolder holder, int position, List payloads) { + public void bindViewHolder(FlexibleAdapter adapter, HeaderViewHolder holder, + int position, List payloads) { holder.onBind(day, getSubItems()); } 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 e816a1907..080ec90ba 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 @@ -24,7 +24,7 @@ public class TimetablePresenter extends BasePresenter private OnFragmentIsReadyListener listener; - private int positionToScroll; + private int positionToScroll = 0; private boolean isFirstSight = false; @@ -45,7 +45,10 @@ public class TimetablePresenter extends BasePresenter if (dates.isEmpty()) { dates = TimeUtils.getMondaysFromCurrentSchoolYear(); } - positionToScroll = dates.indexOf(TimeUtils.getDateOfCurrentMonday(true)); + + if (positionToScroll == 0) { + positionToScroll = dates.indexOf(TimeUtils.getDateOfCurrentMonday(true)); + } if (!isFirstSight) { isFirstSight = true; @@ -57,22 +60,12 @@ public class TimetablePresenter extends BasePresenter } @Override - public void onFragmentVisible(boolean isVisible) { + public void onFragmentActivated(boolean isVisible) { if (isVisible) { getView().setActivityTitle(); } } - @Override - public void onTabSelected(int position) { - getView().setChildFragmentSelected(position, true); - } - - @Override - public void onTabUnselected(int position) { - getView().setChildFragmentSelected(position, false); - } - @Override public void onDoInBackgroundLoading() throws Exception { for (String date : dates) { @@ -84,7 +77,6 @@ public class TimetablePresenter extends BasePresenter @Override public void onCanceledLoadingAsync() { //do nothing - } @Override @@ -97,6 +89,11 @@ public class TimetablePresenter extends BasePresenter } } + @Override + public void setRestoredPosition(int position) { + this.positionToScroll = position; + } + @Override public void onDestroy() { isFirstSight = false; diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableSubItem.java b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableSubItem.java index ca82f783f..3d85772a6 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableSubItem.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/timetable/TimetableSubItem.java @@ -17,6 +17,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import eu.davidea.flexibleadapter.FlexibleAdapter; import eu.davidea.flexibleadapter.items.AbstractSectionableItem; +import eu.davidea.flexibleadapter.items.IFlexible; import eu.davidea.viewholders.FlexibleViewHolder; import io.github.wulkanowy.R; import io.github.wulkanowy.data.db.dao.entities.TimetableLesson; @@ -27,7 +28,7 @@ public class TimetableSubItem private TimetableLesson lesson; - public TimetableSubItem(TimetableHeaderItem header, TimetableLesson lesson) { + TimetableSubItem(TimetableHeaderItem header, TimetableLesson lesson) { super(header); this.lesson = lesson; } @@ -62,12 +63,13 @@ public class TimetableSubItem } @Override - public SubItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) { + public SubItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) { return new SubItemViewHolder(view, adapter); } @Override - public void bindViewHolder(FlexibleAdapter adapter, SubItemViewHolder holder, int position, List payloads) { + public void bindViewHolder(FlexibleAdapter adapter, SubItemViewHolder holder, + int position, List payloads) { holder.onBind(lesson); } 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 d17e6e557..0d6bdf2a6 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 @@ -23,12 +23,10 @@ public interface TimetableTabContract { interface Presenter extends BaseContract.Presenter { - void onFragmentSelected(boolean isSelected); + void onFragmentActivated(boolean isSelected); void setArgumentDate(String date); - void onStart(View view, boolean isPrimary); - void onRefresh(); } } 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 65841247d..9cbca0452 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 @@ -28,12 +28,6 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo private static final String ARGUMENT_KEY = "date"; - private static final String SAVED_KEY = "isSelected"; - - private boolean isPrimary = false; - - private boolean isSelected = false; - @BindView(R.id.timetable_tab_fragment_recycler) RecyclerView recyclerView; @@ -55,6 +49,8 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo @Inject FlexibleAdapter adapter; + private boolean isFragmentVisible = false; + public static TimetableTabFragment newInstance(String date) { TimetableTabFragment fragmentTab = new TimetableTabFragment(); @@ -65,14 +61,6 @@ 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) { @@ -86,8 +74,8 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo if (getArguments() != null) { presenter.setArgumentDate(getArguments().getString(ARGUMENT_KEY)); } - - presenter.onStart(this, isPrimary); + presenter.onStart(this); + presenter.onFragmentActivated(isFragmentVisible); } return view; } @@ -114,10 +102,9 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo @Override public void setMenuVisibility(boolean menuVisible) { super.setMenuVisibility(menuVisible); - if (presenter != null && getView() != null) { - presenter.onFragmentSelected(isSelected); - } else if (isSelected) { - isPrimary = true; + isFragmentVisible = menuVisible; + if (presenter != null) { + presenter.onFragmentActivated(menuVisible); } } @@ -151,10 +138,6 @@ public class TimetableTabFragment extends BaseFragment implements TimetableTabCo noItemView.setVisibility(show ? View.VISIBLE : View.INVISIBLE); } - public void setSelected(boolean selected) { - isSelected = selected; - } - @Override public void onError(String message) { if (getActivity() != null) { @@ -163,15 +146,8 @@ 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; presenter.onDestroy(); super.onDestroyView(); } 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 20d0b965b..dcfe2612c 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 @@ -36,21 +36,22 @@ public class TimetableTabPresenter extends BasePresenter