From 4ef3334bf75dd6f846e91eae9e8ceb559b7832e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Wed, 2 May 2018 21:51:23 +0200 Subject: [PATCH] Add semester switch in grades (#94) --- .../wulkanowy/data/db/dao/DbContract.java | 8 ++- .../wulkanowy/data/db/dao/DbRepository.java | 29 ++++++-- .../wulkanowy/data/sync/SyncContract.java | 4 +- .../wulkanowy/data/sync/SyncRepository.java | 8 +-- .../wulkanowy/services/jobs/SyncJob.java | 2 +- .../wulkanowy/ui/main/MainActivity.java | 2 + .../ui/main/grades/GradesContract.java | 4 ++ .../ui/main/grades/GradesFragment.java | 45 ++++++++++++ .../ui/main/grades/GradesPresenter.java | 43 ++++++----- .../drawable/ic_filter_list_black_24dp.xml | 5 ++ app/src/main/res/layout/activity_main.xml | 71 +++++++++++++------ app/src/main/res/menu/semester_switch.xml | 13 ++++ app/src/main/res/values-pl/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ app/src/main/res/values/styles.xml | 2 +- 15 files changed, 192 insertions(+), 52 deletions(-) create mode 100644 app/src/main/res/drawable/ic_filter_list_black_24dp.xml create mode 100644 app/src/main/res/menu/semester_switch.xml diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/DbContract.java b/app/src/main/java/io/github/wulkanowy/data/db/dao/DbContract.java index cd0b774c6..f4ce6fb7d 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/DbContract.java +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/DbContract.java @@ -10,9 +10,9 @@ public interface DbContract { Week getWeek(String date); - List getSubjectList(); + List getSubjectList(int semesterName); - List getNewGrades(); + List getNewGrades(int semesterName); long getCurrentStudentId(); @@ -20,5 +20,9 @@ public interface DbContract { long getCurrentDiaryId(); + long getSemesterId(int name); + long getCurrentSemesterId(); + + int getCurrentSemesterName(); } diff --git a/app/src/main/java/io/github/wulkanowy/data/db/dao/DbRepository.java b/app/src/main/java/io/github/wulkanowy/data/db/dao/DbRepository.java index 284c17335..6b64b8d85 100644 --- a/app/src/main/java/io/github/wulkanowy/data/db/dao/DbRepository.java +++ b/app/src/main/java/io/github/wulkanowy/data/db/dao/DbRepository.java @@ -8,6 +8,7 @@ import io.github.wulkanowy.data.db.dao.entities.DaoSession; import io.github.wulkanowy.data.db.dao.entities.DiaryDao; import io.github.wulkanowy.data.db.dao.entities.Grade; import io.github.wulkanowy.data.db.dao.entities.GradeDao; +import io.github.wulkanowy.data.db.dao.entities.Semester; import io.github.wulkanowy.data.db.dao.entities.SemesterDao; import io.github.wulkanowy.data.db.dao.entities.StudentDao; import io.github.wulkanowy.data.db.dao.entities.Subject; @@ -37,15 +38,16 @@ public class DbRepository implements DbContract { ).unique(); } - public List getSubjectList() { - return daoSession.getSemesterDao().load(getCurrentSemesterId()).getSubjectList(); + + public List getSubjectList(int semesterName) { + return daoSession.getSemesterDao().load(getSemesterId(semesterName)).getSubjectList(); } @Override - public List getNewGrades() { + public List getNewGrades(int semesterName) { return daoSession.getGradeDao().queryBuilder().where( GradeDao.Properties.IsNew.eq(1), - GradeDao.Properties.SemesterId.eq(getCurrentSemesterId()) + GradeDao.Properties.SemesterId.eq(getSemesterId(semesterName)) ).list(); } @@ -72,11 +74,28 @@ public class DbRepository implements DbContract { ).unique().getId(); } + @Override + public long getSemesterId(int name) { + return daoSession.getSemesterDao().queryBuilder().where( + SemesterDao.Properties.DiaryId.eq(getCurrentDiaryId()), + SemesterDao.Properties.Name.eq(String.valueOf(name)) + ).unique().getId(); + } + @Override public long getCurrentSemesterId() { + return getCurrentSemester().getId(); + } + + @Override + public int getCurrentSemesterName() { + return Integer.valueOf(getCurrentSemester().getName()); + } + + private Semester getCurrentSemester() { return daoSession.getSemesterDao().queryBuilder().where( SemesterDao.Properties.DiaryId.eq(getCurrentDiaryId()), SemesterDao.Properties.Current.eq(true) - ).unique().getId(); + ).unique(); } } diff --git a/app/src/main/java/io/github/wulkanowy/data/sync/SyncContract.java b/app/src/main/java/io/github/wulkanowy/data/sync/SyncContract.java index e4f397fc1..3a2e0a4c3 100644 --- a/app/src/main/java/io/github/wulkanowy/data/sync/SyncContract.java +++ b/app/src/main/java/io/github/wulkanowy/data/sync/SyncContract.java @@ -16,11 +16,11 @@ public interface SyncContract { void initLastUser() throws IOException, CryptoException; - void syncGrades(long semesterId) throws VulcanException, IOException, ParseException; + void syncGrades(int semesterName) throws VulcanException, IOException, ParseException; void syncGrades() throws VulcanException, IOException, ParseException; - void syncSubjects(long semesterId) throws VulcanException, IOException; + void syncSubjects(int semesterName) throws VulcanException, IOException; void syncSubjects() throws VulcanException, IOException; diff --git a/app/src/main/java/io/github/wulkanowy/data/sync/SyncRepository.java b/app/src/main/java/io/github/wulkanowy/data/sync/SyncRepository.java index e8cde9be9..91e8b4212 100644 --- a/app/src/main/java/io/github/wulkanowy/data/sync/SyncRepository.java +++ b/app/src/main/java/io/github/wulkanowy/data/sync/SyncRepository.java @@ -48,8 +48,8 @@ public class SyncRepository implements SyncContract { } @Override - public void syncGrades(long semesterId) throws VulcanException, IOException, ParseException { - gradeSync.sync(semesterId); + public void syncGrades(int semesterName) throws VulcanException, IOException, ParseException { + gradeSync.sync(semesterName); } @Override @@ -58,8 +58,8 @@ public class SyncRepository implements SyncContract { } @Override - public void syncSubjects(long semesterId) throws VulcanException, IOException { - subjectSync.sync(semesterId); + public void syncSubjects(int semesterName) throws VulcanException, IOException { + subjectSync.sync(semesterName); } @Override diff --git a/app/src/main/java/io/github/wulkanowy/services/jobs/SyncJob.java b/app/src/main/java/io/github/wulkanowy/services/jobs/SyncJob.java index fec3987a3..7ac911145 100644 --- a/app/src/main/java/io/github/wulkanowy/services/jobs/SyncJob.java +++ b/app/src/main/java/io/github/wulkanowy/services/jobs/SyncJob.java @@ -68,7 +68,7 @@ public class SyncJob extends SimpleJobService { repository.getSyncRepo().initLastUser(); repository.getSyncRepo().syncAll(); - gradeList = repository.getDbRepo().getNewGrades(); + gradeList = repository.getDbRepo().getNewGrades(repository.getDbRepo().getCurrentSemesterName()); if (!gradeList.isEmpty() && repository.getSharedRepo().isNotifyEnable()) { showNotification(); diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/MainActivity.java b/app/src/main/java/io/github/wulkanowy/ui/main/MainActivity.java index a3da497fc..07951b3fa 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/MainActivity.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/MainActivity.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.ActionBar; +import android.support.v7.widget.Toolbar; import android.view.View; import com.aurelhubert.ahbottomnavigation.AHBottomNavigation; @@ -51,6 +52,7 @@ public class MainActivity extends BaseActivity implements MainContract.View, public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); getActivityComponent().inject(this); setButterKnife(ButterKnife.bind(this)); diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesContract.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesContract.java index 7deabb5e7..a48b340d5 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesContract.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesContract.java @@ -24,6 +24,8 @@ public interface GradesContract { void setActivityTitle(); + void setCurrentSemester(int semester); + boolean isMenuVisible(); } @@ -36,5 +38,7 @@ public interface GradesContract { void onRefresh(); void onStart(View view, OnFragmentIsReadyListener listener); + + void onSemesterChange(int which); } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesFragment.java b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesFragment.java index bd44f2983..32c1f3d30 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesFragment.java +++ b/app/src/main/java/io/github/wulkanowy/ui/main/grades/GradesFragment.java @@ -1,12 +1,17 @@ package io.github.wulkanowy.ui.main.grades; +import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -40,6 +45,8 @@ public class GradesFragment extends BaseFragment implements GradesContract.View @Inject GradesContract.Presenter presenter; + int currentSemester = -1; + public GradesFragment() { // empty constructor for fragment } @@ -59,6 +66,40 @@ public class GradesFragment extends BaseFragment implements GradesContract.View return view; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.semester_switch, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.action_filter) { + CharSequence[] items = new CharSequence[]{ + getResources().getString(R.string.semester_text, 1), + getResources().getString(R.string.semester_text, 2), + }; + new AlertDialog.Builder(getContext()) + .setTitle(R.string.switch_semester) + .setNegativeButton(R.string.cancel, null) + .setSingleChoiceItems(items, this.currentSemester, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + presenter.onSemesterChange(which); + dialog.cancel(); + } + }).show(); + return true; + } else { + return super.onOptionsItemSelected(item); + } + } + @Override protected void setUpOnViewCreated(View fragmentView) { noItemView.setVisibility(View.GONE); @@ -87,6 +128,10 @@ public class GradesFragment extends BaseFragment implements GradesContract.View setTitle(getString(R.string.grades_text)); } + public void setCurrentSemester(int currentSemester) { + this.currentSemester = currentSemester; + } + @Override public void onRefresh() { presenter.onRefresh(); 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 6111a568e..0927d1458 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 @@ -27,6 +27,8 @@ public class GradesPresenter extends BasePresenter private boolean isFirstSight = false; + private int semesterName; + @Inject GradesPresenter(RepositoryContract repository) { super(repository); @@ -41,15 +43,30 @@ public class GradesPresenter extends BasePresenter getView().setActivityTitle(); } + semesterName = getRepository().getDbRepo().getCurrentSemesterName(); + getView().setCurrentSemester(semesterName - 1); + if (!isFirstSight) { isFirstSight = true; - loadingTask = new AbstractTask(); - loadingTask.setOnFirstLoadingListener(this); - loadingTask.execute(); + reloadGrades(); } } + @Override + public void onSemesterChange(int which) { + semesterName = which + 1; + getView().setCurrentSemester(which); + + reloadGrades(); + } + + private void reloadGrades() { + loadingTask = new AbstractTask(); + loadingTask.setOnFirstLoadingListener(this); + loadingTask.execute(); + } + @Override public void onFragmentVisible(boolean isVisible) { if (isVisible) { @@ -71,8 +88,8 @@ public class GradesPresenter extends BasePresenter @Override public void onDoInBackgroundRefresh() throws Exception { - getRepository().getSyncRepo().syncSubjects(); - getRepository().getSyncRepo().syncGrades(); + getRepository().getSyncRepo().syncSubjects(semesterName); + getRepository().getSyncRepo().syncGrades(semesterName); } @Override @@ -85,11 +102,9 @@ public class GradesPresenter extends BasePresenter @Override public void onEndRefreshAsync(boolean success, Exception exception) { if (success) { - loadingTask = new AbstractTask(); - loadingTask.setOnFirstLoadingListener(this); - loadingTask.execute(); + reloadGrades(); - int numberOfNewGrades = getRepository().getDbRepo().getNewGrades().size(); + int numberOfNewGrades = getRepository().getDbRepo().getNewGrades(semesterName).size(); if (numberOfNewGrades <= 0) { getView().onRefreshSuccessNoGrade(); @@ -104,7 +119,7 @@ public class GradesPresenter extends BasePresenter @Override public void onDoInBackgroundLoading() { - List subjectList = getRepository().getDbRepo().getSubjectList(); + List subjectList = getRepository().getDbRepo().getSubjectList(semesterName); boolean isShowSummary = getRepository().getSharedRepo().isShowGradesSummary(); headerItems = new ArrayList<>(); @@ -136,12 +151,8 @@ public class GradesPresenter extends BasePresenter @Override public void onEndLoadingAsync(boolean result, Exception exception) { - if (headerItems.isEmpty()) { - getView().showNoItem(true); - } else { - getView().updateAdapterList(headerItems); - getView().showNoItem(false); - } + getView().showNoItem(headerItems.isEmpty()); + getView().updateAdapterList(headerItems); listener.onFragmentIsReady(); } diff --git a/app/src/main/res/drawable/ic_filter_list_black_24dp.xml b/app/src/main/res/drawable/ic_filter_list_black_24dp.xml new file mode 100644 index 000000000..5d4ec18ee --- /dev/null +++ b/app/src/main/res/drawable/ic_filter_list_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a39a3b57f..f9201ad46 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,33 +1,62 @@ - + android:orientation="vertical" + android:weightSum="1" + tools:context="io.github.wulkanowy.ui.main.MainActivity" + > - + android:layout_height="wrap_content" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + > - + + + + + + + + + + + - + android:layout_marginBottom="@dimen/bottom_navigation_height" /> - + - + - + diff --git a/app/src/main/res/menu/semester_switch.xml b/app/src/main/res/menu/semester_switch.xml new file mode 100644 index 000000000..6f8a027e3 --- /dev/null +++ b/app/src/main/res/menu/semester_switch.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index af534e369..65fc4f4ca 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -52,6 +52,10 @@ Data Kolor + ZmieƄ semestr + Semestr %d + Anuluj + Lekcja Sala Grupa diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 59d1cb8b6..019601a3f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -52,6 +52,10 @@ Date Color + Switch semester + Semester %d + Cancel + Lesson Room Group diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fff8e94c7..a32e7c546 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,6 +1,6 @@ -