From 10043cc62ca1e3c766c6a4b58192743e94c58519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Thu, 4 Jul 2024 22:14:52 +0200 Subject: [PATCH] [UI] Migrate to base fragment classes, restructure base modules (#206) * Replace android:visibility with android:isVisible * Move base dialogs and views to .ui.base * Move uncategorized classes to ui.main * Fix view classes in XML * Add BaseFragment, use for LazyFragment * Migrate fragments to BaseFragment * Move activity setup from BaseFragment, recreate Job on attach * Move BaseFragment initialization to onResume * Add base PagerFragment, add TemplateFragment to drawer * Support swipe-to-refresh in base fragments * Remove SwipeRefreshLayout split implementation * Rename onViewCreated to onViewReady * Remove LazyFragment * Save page selection in PagerFragment, migrate AttendanceFragment * Migrate fragments to PagerFragment * Migrate contributors to a fragment * Migrate TimetableFragment to PagerFragment * Fix disabling SwipeToRefresh on page scroll * Fix crash in CrashActivity --- .idea/codeStyles/Project.xml | 1 + app/src/main/AndroidManifest.xml | 5 +- .../java/pl/szczodrzynski/edziennik/App.kt | 2 +- .../szczodrzynski/edziennik/MainActivity.kt | 16 +- .../edziennik/core/manager/BuildManager.kt | 2 +- .../edziennik/core/manager/FirebaseManager.kt | 8 + .../edziennik/data/api/szkolny/SzkolnyApi.kt | 4 +- .../edziennik/data/enums/NavTarget.kt | 16 + .../edziennik/ext/BundleExtensions.kt | 47 ++- .../edziennik/ext/ContextExtensions.kt | 3 +- .../edziennik/ext/GraphicsExtensions.kt | 6 + .../edziennik/ext/ViewExtensions.kt | 11 - .../edziennik/ui/agenda/AgendaFragment.kt | 180 +++++------- .../edziennik/ui/agenda/DayDialog.kt | 2 +- .../lessonchanges/LessonChangesDialog.kt | 2 +- .../teacherabsence/TeacherAbsenceDialog.kt | 2 +- .../announcements/AnnouncementsFragment.java | 17 -- .../ui/attendance/AttendanceDetailsDialog.kt | 2 +- .../ui/attendance/AttendanceFragment.kt | 135 +++------ .../ui/attendance/AttendanceListFragment.kt | 46 +-- .../attendance/AttendanceSummaryFragment.kt | 45 +-- .../base => base/dialog}/BaseDialog.kt | 2 +- .../base => base/dialog}/BindingDialog.kt | 2 +- .../base => base/dialog}/ConfigDialog.kt | 2 +- .../base => base/dialog}/ViewDialog.kt | 2 +- .../ui/base/fragment/ActivityUtil.kt | 102 +++++++ .../ui/base/fragment/BaseFragment.kt | 182 ++++++++++++ .../ui/base/fragment/PagerFragment.kt | 135 +++++++++ .../lazypager/FragmentLazyPagerAdapter.kt | 18 -- .../ui/base/lazypager/LazyFragment.kt | 56 ---- .../ui/base/lazypager/LazyPagerAdapter.kt | 28 -- .../ui/base/lazypager/LazyViewPager.kt | 42 --- .../ui/{ => base}/views/AttachmentAdapter.kt | 8 +- .../ui/{ => base}/views/AttachmentsView.kt | 5 +- .../ui/{ => base}/views/DateDropdown.kt | 2 +- .../ui/{ => base}/views/EventTypeDropdown.kt | 2 +- .../{ => base}/views/IconicsMaterialButton.kt | 2 +- .../ui/{ => base}/views/SubjectDropdown.kt | 2 +- .../ui/{ => base}/views/TeacherDropdown.kt | 2 +- .../ui/{ => base}/views/TeamDropdown.kt | 2 +- .../ui/{ => base}/views/TimeDropdown.kt | 2 +- .../ui/behaviour/BehaviourFragment.kt | 61 +--- .../edziennik/ui/captcha/RecaptchaDialog.kt | 2 +- .../ui/captcha/RecaptchaPromptDialog.kt | 2 +- .../edziennik/ui/debug/LabFragment.kt | 77 +---- .../edziennik/ui/debug/LabPageFragment.kt | 54 ++-- .../ui/debug/LabPlaygroundFragment.kt | 44 +-- .../edziennik/ui/debug/LabProfileFragment.kt | 44 +-- .../edziennik/ui/dialogs/BellSyncDialog.kt | 2 +- .../ui/dialogs/BellSyncTimeChooseDialog.kt | 2 +- .../edziennik/ui/dialogs/ChangelogDialog.kt | 2 +- .../{error => dialogs}/ErrorDetailsDialog.kt | 4 +- .../ui/dialogs/ProfileRemoveDialog.kt | 2 +- .../edziennik/ui/dialogs/QrScannerDialog.kt | 2 +- .../edziennik/ui/dialogs/StyledTextDialog.kt | 2 +- .../ui/dialogs/settings/AgendaConfigDialog.kt | 2 +- .../ui/dialogs/settings/AppLanguageDialog.kt | 2 +- .../settings/AttendanceConfigDialog.kt | 2 +- .../dialogs/settings/BellSyncConfigDialog.kt | 2 +- .../ui/dialogs/settings/GradesConfigDialog.kt | 2 +- .../dialogs/settings/MessagesConfigDialog.kt | 2 +- .../dialogs/settings/MiniMenuConfigDialog.kt | 2 +- .../settings/NotificationFilterDialog.kt | 2 +- .../dialogs/settings/ProfileConfigDialog.kt | 2 +- .../ui/dialogs/settings/SyncIntervalDialog.kt | 2 +- .../ui/dialogs/settings/ThemeChooserDialog.kt | 2 +- .../dialogs/settings/TimetableConfigDialog.kt | 2 +- .../dialogs/sync/RegisterUnavailableDialog.kt | 2 +- .../ui/dialogs/sync/ServerMessageDialog.kt | 2 +- .../ui/dialogs/sync/SyncViewListDialog.kt | 2 +- .../ui/dialogs/sync/UpdateAvailableDialog.kt | 2 +- .../ui/dialogs/sync/UpdateProgressDialog.kt | 2 +- .../edziennik/ui/error/ErrorDialog.kt | 46 --- .../edziennik/ui/event/EventDetailsDialog.kt | 2 +- .../edziennik/ui/event/EventManualDialog.kt | 4 +- .../edziennik/ui/feedback/FeedbackFragment.kt | 119 +++----- .../edziennik/ui/grades/GradeDetailsDialog.kt | 2 +- .../edziennik/ui/grades/GradesListFragment.kt | 91 ++---- .../ui/grades/editor/GradesEditorFragment.kt | 40 +-- .../ui/home/CardItemTouchHelperCallback.kt | 18 +- .../edziennik/ui/home/HomeConfigDialog.kt | 2 +- .../edziennik/ui/home/HomeFragment.kt | 124 ++++---- .../edziennik/ui/homework/HomeworkFragment.kt | 123 ++------ .../ui/homework/HomeworkListFragment.kt | 44 +-- .../edziennik/ui/login/LoginActivity.kt | 6 +- .../ui/{base => main}/BuildInvalidActivity.kt | 3 +- .../ui/{base => main}/CrashActivity.kt | 5 +- .../ui/{error => main}/ErrorSnackbar.kt | 3 +- .../ui/{base => main}/MainSnackbar.kt | 2 +- .../compose/MessagesComposeFragment.kt | 140 ++++----- .../messages/compose/MessagesComposeInfo.kt | 25 -- .../ui/messages/list/MessagesFragment.kt | 162 +++-------- .../ui/messages/list/MessagesListFragment.kt | 69 ++--- .../ui/messages/single/MessageFragment.kt | 95 ++---- .../edziennik/ui/notes/NoteDetailsDialog.kt | 2 +- .../edziennik/ui/notes/NoteEditorDialog.kt | 2 +- .../edziennik/ui/notes/NoteListDialog.kt | 2 +- .../edziennik/ui/notes/NotesFragment.kt | 121 +++----- .../NotificationsListFragment.kt | 69 ++--- .../ui/settings/ProfileManagerFragment.kt | 35 +-- .../edziennik/ui/settings/SettingsFragment.kt | 9 +- .../ui/settings/cards/SettingsAboutCard.kt | 6 +- .../contributors/ContributorsActivity.kt | 143 --------- .../contributors/ContributorsFragment.kt | 129 +++++++-- .../contributors/ContributorsListFragment.kt | 28 ++ .../ui/teachers/TeachersListFragment.kt | 43 +-- .../edziennik/ui/template/TemplateDialog.kt | 6 +- .../edziennik/ui/template/TemplateFragment.kt | 93 ++---- .../ui/template/TemplateListFragment.kt | 49 +--- .../ui/template/TemplateListPageFragment.kt | 42 +-- .../ui/template/TemplatePageFragment.kt | 51 +--- .../ui/template/TemplatePagerAdapter.kt | 15 - .../ui/timetable/LessonDetailsDialog.kt | 2 +- .../ui/timetable/TimetableDayFragment.kt | 128 ++++---- .../ui/timetable/TimetableFragment.kt | 274 ++++++++---------- .../ui/timetable/TimetablePagerAdapter.kt | 54 ---- .../edziennik/ui/webpush/WebPushFragment.kt | 52 +--- .../utils/SwipeRefreshLayoutNoIndicator.java | 211 -------------- .../utils/SwipeRefreshLayoutNoTouch.java | 51 ---- app/src/main/res/layout/activity_szkolny.xml | 4 +- .../res/layout/attendance_details_dialog.xml | 6 +- .../main/res/layout/attendance_fragment.xml | 42 --- .../main/res/layout/base_pager_fragment.xml | 33 +++ app/src/main/res/layout/card_home_events.xml | 2 +- app/src/main/res/layout/card_home_grades.xml | 2 +- .../res/layout/card_home_lucky_number.xml | 2 +- app/src/main/res/layout/card_home_notes.xml | 2 +- .../main/res/layout/card_home_timetable.xml | 8 +- ...activity.xml => contributors_fragment.xml} | 5 +- .../main/res/layout/dialog_config_agenda.xml | 2 +- .../main/res/layout/dialog_event_details.xml | 10 +- .../res/layout/dialog_event_manual_v2.xml | 12 +- .../main/res/layout/dialog_grade_details.xml | 24 +- .../main/res/layout/dialog_lesson_details.xml | 26 +- .../layout/dialog_register_unavailable.xml | 4 +- .../main/res/layout/dialog_widget_config.xml | 4 +- app/src/main/res/layout/event_list_item.xml | 2 +- .../res/layout/fragment_announcements.xml | 14 +- .../main/res/layout/fragment_behaviour.xml | 60 ++-- app/src/main/res/layout/fragment_home.xml | 93 +++--- .../res/layout/fragment_profile_manager.xml | 33 +-- app/src/main/res/layout/fragment_template.xml | 33 +-- .../main/res/layout/fragment_timetable_v2.xml | 142 +++++---- .../main/res/layout/grades_list_fragment.xml | 68 ++--- app/src/main/res/layout/homework_fragment.xml | 36 --- app/src/main/res/layout/lab_fragment.xml | 5 +- app/src/main/res/layout/lab_playground.xml | 8 +- app/src/main/res/layout/login_activity.xml | 4 +- app/src/main/res/layout/message_fragment.xml | 8 +- app/src/main/res/layout/messages_fragment.xml | 41 --- app/src/main/res/layout/template_fragment.xml | 36 --- .../res/layout/template_list_fragment.xml | 68 ++--- .../res/layout/template_page_fragment.xml | 19 +- app/src/main/res/layout/timetable_lesson.xml | 6 +- 154 files changed, 1919 insertions(+), 3171 deletions(-) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{dialogs/base => base/dialog}/BaseDialog.kt (99%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{dialogs/base => base/dialog}/BindingDialog.kt (93%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{dialogs/base => base/dialog}/ConfigDialog.kt (95%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{dialogs/base => base/dialog}/ViewDialog.kt (92%) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/fragment/ActivityUtil.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/fragment/BaseFragment.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/fragment/PagerFragment.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/lazypager/FragmentLazyPagerAdapter.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/lazypager/LazyFragment.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/lazypager/LazyPagerAdapter.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/base/lazypager/LazyViewPager.kt rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/AttachmentAdapter.kt (95%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/AttachmentsView.kt (98%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/DateDropdown.kt (99%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/EventTypeDropdown.kt (98%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/IconicsMaterialButton.kt (97%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/SubjectDropdown.kt (99%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/TeacherDropdown.kt (98%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/TeamDropdown.kt (98%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{ => base}/views/TimeDropdown.kt (99%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{error => dialogs}/ErrorDetailsDialog.kt (95%) delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/error/ErrorDialog.kt rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{base => main}/BuildInvalidActivity.kt (91%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{base => main}/CrashActivity.kt (97%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{error => main}/ErrorSnackbar.kt (94%) rename app/src/main/java/pl/szczodrzynski/edziennik/ui/{base => main}/MainSnackbar.kt (97%) delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/messages/compose/MessagesComposeInfo.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/contributors/ContributorsActivity.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/contributors/ContributorsListFragment.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/template/TemplatePagerAdapter.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/timetable/TimetablePagerAdapter.kt delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/utils/SwipeRefreshLayoutNoIndicator.java delete mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/utils/SwipeRefreshLayoutNoTouch.java delete mode 100644 app/src/main/res/layout/attendance_fragment.xml create mode 100644 app/src/main/res/layout/base_pager_fragment.xml rename app/src/main/res/layout/{contributors_activity.xml => contributors_fragment.xml} (97%) delete mode 100644 app/src/main/res/layout/homework_fragment.xml delete mode 100644 app/src/main/res/layout/messages_fragment.xml delete mode 100644 app/src/main/res/layout/template_fragment.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index b1f24f9b..1b63b60c 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -143,6 +143,7 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3f5cd18b..8f6aabd4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -126,7 +126,7 @@ / ____ \ (__| |_| |\ V /| | |_| | __/\__ \ /_/ \_\___|\__|_| \_/ |_|\__|_|\___||___/ --> - - - + - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/base_pager_fragment.xml b/app/src/main/res/layout/base_pager_fragment.xml new file mode 100644 index 00000000..7456ae50 --- /dev/null +++ b/app/src/main/res/layout/base_pager_fragment.xml @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/app/src/main/res/layout/card_home_events.xml b/app/src/main/res/layout/card_home_events.xml index f35e28b0..7ea5b989 100644 --- a/app/src/main/res/layout/card_home_events.xml +++ b/app/src/main/res/layout/card_home_events.xml @@ -18,7 +18,7 @@ android:gravity="center_vertical" android:orientation="horizontal"> - - - - - - - - + android:layout_height="match_parent"> - + android:isVisible="@{!isAgendaMode}" /> @@ -124,14 +124,14 @@ android:layout_marginTop="8dp" android:textAppearance="?textAppearanceLabelMedium" android:text="@string/dialog_event_details_teacher" - android:visibility="@{event.teacherName != null ? View.VISIBLE : View.GONE}"/> + android:isVisible="@{event.teacherName != null}"/> - diff --git a/app/src/main/res/layout/dialog_event_manual_v2.xml b/app/src/main/res/layout/dialog_event_manual_v2.xml index b64abeb8..e77a9049 100644 --- a/app/src/main/res/layout/dialog_event_manual_v2.xml +++ b/app/src/main/res/layout/dialog_event_manual_v2.xml @@ -26,7 +26,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/dialog_event_manual_date"> - - - - - - @@ -175,7 +175,7 @@ android:layout_marginTop="8dp" android:text="@string/dialog_grade_details_class_average" android:textAppearance="?textAppearanceLabelMedium" - android:visibility="@{grade.classAverage != null && grade.classAverage != -1 ? View.VISIBLE : View.GONE}" /> + android:isVisible="@{grade.classAverage != null && grade.classAverage != -1}" /> + android:isVisible="@{commentVisible}" /> + android:isVisible="@{gradeValue != -1}" /> + android:isVisible="@{devMode}" /> + android:isVisible="@{grade.parentId instanceof Long}" /> + android:isVisible="@{historyVisible}" /> + android:isVisible="@{historyVisible}"> @@ -65,7 +65,7 @@ android:text="@{subjectName}" android:textIsSelectable="true" android:textAppearance="?textAppearanceTitleLarge" - android:visibility="@{subjectName == null ? View.GONE : View.VISIBLE}" + android:isVisible="@{subjectName != null}" tools:text="pracownia urządzeń techniki komputerowej" /> + android:isVisible="@{teacherName != null || oldTeacherName != null}"> @@ -199,7 +199,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" - android:visibility="@{teamName != null || oldTeamName != null ? View.VISIBLE : View.GONE}"> + android:isVisible="@{teamName != null || oldTeamName != null}"> @@ -237,7 +237,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" - android:visibility="@{classroom != null || oldClassroom != null ? View.VISIBLE : View.GONE}"> + android:isVisible="@{classroom != null || oldClassroom != null}"> diff --git a/app/src/main/res/layout/dialog_register_unavailable.xml b/app/src/main/res/layout/dialog_register_unavailable.xml index 0fb21ded..603d8b3a 100644 --- a/app/src/main/res/layout/dialog_register_unavailable.xml +++ b/app/src/main/res/layout/dialog_register_unavailable.xml @@ -29,7 +29,7 @@ android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitXY" - android:visibility="@{message.image != null ? View.VISIBLE : View.GONE}" + android:isVisible="@{message.image != null}" tools:src="@tools:sample/backgrounds/scenic" /> + android:isVisible="@{message.url != null}" /> diff --git a/app/src/main/res/layout/dialog_widget_config.xml b/app/src/main/res/layout/dialog_widget_config.xml index 2c24a426..1ddf2c00 100644 --- a/app/src/main/res/layout/dialog_widget_config.xml +++ b/app/src/main/res/layout/dialog_widget_config.xml @@ -26,7 +26,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?textAppearanceLabelMedium" - android:visibility="@{profileName == null ? View.GONE : View.VISIBLE}" + android:isVisible="@{profileName != null}" android:text="@string/dialog_widget_config_profile" /> - + - - - - + android:layout_height="match_parent" /> - diff --git a/app/src/main/res/layout/fragment_behaviour.xml b/app/src/main/res/layout/fragment_behaviour.xml index b82e05c5..d7d6f3e1 100644 --- a/app/src/main/res/layout/fragment_behaviour.xml +++ b/app/src/main/res/layout/fragment_behaviour.xml @@ -1,24 +1,22 @@ - - + + app:singleSelection="true"> + + android:gravity="center_horizontal" + android:orientation="horizontal"> + + + android:text="@string/notices_praises_title" + android:textAppearance="?textAppearanceLabelMedium" /> + + tools:text="342525" /> + android:layout_marginHorizontal="32dp" + android:orientation="vertical"> + + android:text="@string/notices_warnings_title" + android:textAppearance="?textAppearanceLabelMedium" /> + + tools:text="53535353" /> + + android:text="@string/notices_other_title" + android:textAppearance="?textAppearanceLabelMedium" /> + + tools:text="3331" /> @@ -110,29 +116,27 @@ + app:iiv_icon="szf-message-off" + app:iiv_size="92dp" /> - + android:text="@string/notices_no_data" + android:textAppearance="?textAppearanceBodyMedium" /> - diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 833ba8e6..44d12959 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,67 +1,60 @@ - - - - - + android:layout_height="match_parent" + android:orientation="vertical"> + + + + - + + - + android:layout_marginHorizontal="8dp" + android:layout_weight="1" + android:text="@string/home_configure_notice" + android:textAppearance="?textAppearanceBodySmall" /> - - - - -