From b02ec8d239acbfa2b407d911747c2c351097af85 Mon Sep 17 00:00:00 2001 From: Odweta Date: Sat, 3 Feb 2024 18:43:03 +0100 Subject: [PATCH] offline stuff work, new menu design, update about --- mobile/app/build.gradle.kts | 1 + mobile/app/src/main/AndroidManifest.xml | 1 + mobile/app/src/main/gitlab_logo-playstore.png | Bin 0 -> 16215 bytes mobile/app/src/main/grade-playstore.png | Bin 0 -> 32511 bytes mobile/app/src/main/grade2-playstore.png | Bin 0 -> 17078 bytes .../java/com/odweta/solen/AboutFragment.kt | 62 +++- .../java/com/odweta/solen/CalWeekFragment.kt | 10 + .../java/com/odweta/solen/MainActivity.kt | 330 +++++++++++++----- .../java/com/odweta/solen/MarksFragment.kt | 24 ++ .../java/com/odweta/solen/MenuFragment.kt | 63 ++++ .../src/main/java/com/odweta/solen/Network.kt | 4 + .../java/com/odweta/solen/SettingsFragment.kt | 11 - .../java/com/odweta/solen/SignInFragment.kt | 12 +- .../src/main/java/com/odweta/solen/Util.kt | 98 +++++- .../src/main/java/com/odweta/solen/Vars.kt | 7 + mobile/app/src/main/menu-playstore.png | Bin 0 -> 1813 bytes .../main/res/drawable-res/gitlab_logo_200.png | Bin 0 -> 11442 bytes .../app/src/main/res/drawable/grade_100.png | Bin 0 -> 2655 bytes mobile/app/src/main/res/drawable/menu_240.png | Bin 0 -> 983 bytes mobile/app/src/main/res/gitlab-logo-200.png | Bin 0 -> 11442 bytes .../src/main/res/layout/activity_about.xml | 123 ++++++- .../app/src/main/res/layout/activity_main.xml | 33 +- .../src/main/res/layout/activity_marks.xml | 26 ++ .../app/src/main/res/layout/activity_menu.xml | 60 ++++ .../src/main/res/layout/activity_settings.xml | 13 +- .../res/layout/activity_splash_screen.xml | 11 +- mobile/app/src/main/res/menu/menu_main.xml | 19 - mobile/app/src/main/res/menu/menu_navbar.xml | 82 +++++ .../res/mipmap-anydpi-v26/gitlab_logo.xml | 5 + .../mipmap-anydpi-v26/gitlab_logo_round.xml | 5 + .../src/main/res/mipmap-anydpi-v26/grade.xml | 5 + .../src/main/res/mipmap-anydpi-v26/grade2.xml | 5 + .../res/mipmap-anydpi-v26/grade2_round.xml | 5 + .../res/mipmap-anydpi-v26/grade_round.xml | 5 + .../src/main/res/mipmap-anydpi-v26/menu.xml | 5 + .../main/res/mipmap-anydpi-v26/menu_round.xml | 5 + .../src/main/res/mipmap-hdpi/gitlab_logo.webp | Bin 0 -> 1578 bytes .../mipmap-hdpi/gitlab_logo_background.webp | Bin 0 -> 40 bytes .../mipmap-hdpi/gitlab_logo_foreground.webp | Bin 0 -> 1660 bytes .../res/mipmap-hdpi/gitlab_logo_round.webp | Bin 0 -> 2442 bytes .../app/src/main/res/mipmap-hdpi/grade.webp | Bin 0 -> 2266 bytes .../app/src/main/res/mipmap-hdpi/grade2.webp | Bin 0 -> 1740 bytes .../res/mipmap-hdpi/grade2_background.webp | Bin 0 -> 40 bytes .../res/mipmap-hdpi/grade2_foreground.webp | Bin 0 -> 5308 bytes .../main/res/mipmap-hdpi/grade2_round.webp | Bin 0 -> 2380 bytes .../res/mipmap-hdpi/grade_background.webp | Bin 0 -> 40 bytes .../res/mipmap-hdpi/grade_foreground.webp | Bin 0 -> 3542 bytes .../src/main/res/mipmap-hdpi/grade_round.webp | Bin 0 -> 2860 bytes mobile/app/src/main/res/mipmap-hdpi/menu.webp | Bin 0 -> 470 bytes .../main/res/mipmap-hdpi/menu_background.webp | Bin 0 -> 40 bytes .../main/res/mipmap-hdpi/menu_foreground.webp | Bin 0 -> 210 bytes .../src/main/res/mipmap-hdpi/menu_round.webp | Bin 0 -> 1420 bytes .../src/main/res/mipmap-mdpi/gitlab_logo.webp | Bin 0 -> 1092 bytes .../mipmap-mdpi/gitlab_logo_background.webp | Bin 0 -> 40 bytes .../mipmap-mdpi/gitlab_logo_foreground.webp | Bin 0 -> 1040 bytes .../res/mipmap-mdpi/gitlab_logo_round.webp | Bin 0 -> 1562 bytes .../app/src/main/res/mipmap-mdpi/grade.webp | Bin 0 -> 1416 bytes .../app/src/main/res/mipmap-mdpi/grade2.webp | Bin 0 -> 1152 bytes .../res/mipmap-mdpi/grade2_background.webp | Bin 0 -> 40 bytes .../res/mipmap-mdpi/grade2_foreground.webp | Bin 0 -> 2916 bytes .../main/res/mipmap-mdpi/grade2_round.webp | Bin 0 -> 1390 bytes .../res/mipmap-mdpi/grade_background.webp | Bin 0 -> 40 bytes .../res/mipmap-mdpi/grade_foreground.webp | Bin 0 -> 1926 bytes .../src/main/res/mipmap-mdpi/grade_round.webp | Bin 0 -> 1608 bytes mobile/app/src/main/res/mipmap-mdpi/menu.webp | Bin 0 -> 474 bytes .../main/res/mipmap-mdpi/menu_background.webp | Bin 0 -> 40 bytes .../main/res/mipmap-mdpi/menu_foreground.webp | Bin 0 -> 302 bytes .../src/main/res/mipmap-mdpi/menu_round.webp | Bin 0 -> 1104 bytes .../main/res/mipmap-xhdpi/gitlab_logo.webp | Bin 0 -> 2000 bytes .../mipmap-xhdpi/gitlab_logo_background.webp | Bin 0 -> 42 bytes .../mipmap-xhdpi/gitlab_logo_foreground.webp | Bin 0 -> 2168 bytes .../res/mipmap-xhdpi/gitlab_logo_round.webp | Bin 0 -> 3334 bytes .../app/src/main/res/mipmap-xhdpi/grade.webp | Bin 0 -> 3264 bytes .../app/src/main/res/mipmap-xhdpi/grade2.webp | Bin 0 -> 2620 bytes .../res/mipmap-xhdpi/grade2_background.webp | Bin 0 -> 42 bytes .../res/mipmap-xhdpi/grade2_foreground.webp | Bin 0 -> 7354 bytes .../main/res/mipmap-xhdpi/grade2_round.webp | Bin 0 -> 3714 bytes .../res/mipmap-xhdpi/grade_background.webp | Bin 0 -> 42 bytes .../res/mipmap-xhdpi/grade_foreground.webp | Bin 0 -> 5414 bytes .../main/res/mipmap-xhdpi/grade_round.webp | Bin 0 -> 4456 bytes .../app/src/main/res/mipmap-xhdpi/menu.webp | Bin 0 -> 658 bytes .../res/mipmap-xhdpi/menu_background.webp | Bin 0 -> 42 bytes .../res/mipmap-xhdpi/menu_foreground.webp | Bin 0 -> 448 bytes .../src/main/res/mipmap-xhdpi/menu_round.webp | Bin 0 -> 2114 bytes .../main/res/mipmap-xxhdpi/gitlab_logo.webp | Bin 0 -> 2892 bytes .../mipmap-xxhdpi/gitlab_logo_background.webp | Bin 0 -> 48 bytes .../mipmap-xxhdpi/gitlab_logo_foreground.webp | Bin 0 -> 3402 bytes .../res/mipmap-xxhdpi/gitlab_logo_round.webp | Bin 0 -> 5366 bytes .../app/src/main/res/mipmap-xxhdpi/grade.webp | Bin 0 -> 5772 bytes .../src/main/res/mipmap-xxhdpi/grade2.webp | Bin 0 -> 4380 bytes .../res/mipmap-xxhdpi/grade2_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxhdpi/grade2_foreground.webp | Bin 0 -> 8546 bytes .../main/res/mipmap-xxhdpi/grade2_round.webp | Bin 0 -> 6400 bytes .../res/mipmap-xxhdpi/grade_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxhdpi/grade_foreground.webp | Bin 0 -> 7592 bytes .../main/res/mipmap-xxhdpi/grade_round.webp | Bin 0 -> 8220 bytes .../app/src/main/res/mipmap-xxhdpi/menu.webp | Bin 0 -> 880 bytes .../res/mipmap-xxhdpi/menu_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxhdpi/menu_foreground.webp | Bin 0 -> 932 bytes .../main/res/mipmap-xxhdpi/menu_round.webp | Bin 0 -> 3348 bytes .../main/res/mipmap-xxxhdpi/gitlab_logo.webp | Bin 0 -> 3710 bytes .../gitlab_logo_background.webp | Bin 0 -> 48 bytes .../gitlab_logo_foreground.webp | Bin 0 -> 4088 bytes .../res/mipmap-xxxhdpi/gitlab_logo_round.webp | Bin 0 -> 6938 bytes .../src/main/res/mipmap-xxxhdpi/grade.webp | Bin 0 -> 8510 bytes .../src/main/res/mipmap-xxxhdpi/grade2.webp | Bin 0 -> 6286 bytes .../res/mipmap-xxxhdpi/grade2_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxxhdpi/grade2_foreground.webp | Bin 0 -> 9540 bytes .../main/res/mipmap-xxxhdpi/grade2_round.webp | Bin 0 -> 8746 bytes .../res/mipmap-xxxhdpi/grade_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxxhdpi/grade_foreground.webp | Bin 0 -> 8462 bytes .../main/res/mipmap-xxxhdpi/grade_round.webp | Bin 0 -> 12508 bytes .../app/src/main/res/mipmap-xxxhdpi/menu.webp | Bin 0 -> 1140 bytes .../res/mipmap-xxxhdpi/menu_background.webp | Bin 0 -> 48 bytes .../res/mipmap-xxxhdpi/menu_foreground.webp | Bin 0 -> 670 bytes .../main/res/mipmap-xxxhdpi/menu_round.webp | Bin 0 -> 4168 bytes .../app/src/main/res/values-night/themes.xml | 73 ++++ mobile/app/src/main/res/values/colors.xml | 2 + mobile/app/src/main/res/values/themes.xml | 43 ++- 119 files changed, 964 insertions(+), 184 deletions(-) create mode 100644 mobile/app/src/main/gitlab_logo-playstore.png create mode 100644 mobile/app/src/main/grade-playstore.png create mode 100644 mobile/app/src/main/grade2-playstore.png create mode 100644 mobile/app/src/main/java/com/odweta/solen/MarksFragment.kt create mode 100644 mobile/app/src/main/java/com/odweta/solen/MenuFragment.kt create mode 100644 mobile/app/src/main/menu-playstore.png create mode 100644 mobile/app/src/main/res/drawable-res/gitlab_logo_200.png create mode 100644 mobile/app/src/main/res/drawable/grade_100.png create mode 100644 mobile/app/src/main/res/drawable/menu_240.png create mode 100644 mobile/app/src/main/res/gitlab-logo-200.png create mode 100644 mobile/app/src/main/res/layout/activity_marks.xml create mode 100644 mobile/app/src/main/res/layout/activity_menu.xml delete mode 100644 mobile/app/src/main/res/menu/menu_main.xml create mode 100644 mobile/app/src/main/res/menu/menu_navbar.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/gitlab_logo.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/gitlab_logo_round.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/grade.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/grade2.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/grade2_round.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/grade_round.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/menu.xml create mode 100644 mobile/app/src/main/res/mipmap-anydpi-v26/menu_round.xml create mode 100644 mobile/app/src/main/res/mipmap-hdpi/gitlab_logo.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/gitlab_logo_background.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/gitlab_logo_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/gitlab_logo_round.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade2.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade2_background.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade2_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade2_round.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade_background.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/grade_round.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/menu.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/menu_background.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/menu_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-hdpi/menu_round.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/gitlab_logo.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/gitlab_logo_background.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/gitlab_logo_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/gitlab_logo_round.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade2.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade2_background.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade2_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade2_round.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade_background.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/grade_round.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/menu.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/menu_background.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/menu_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-mdpi/menu_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/gitlab_logo.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/gitlab_logo_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/gitlab_logo_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/gitlab_logo_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade2.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade2_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade2_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade2_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/grade_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/menu.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/menu_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/menu_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xhdpi/menu_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/gitlab_logo.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/gitlab_logo_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/gitlab_logo_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/gitlab_logo_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade2.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade2_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade2_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade2_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/grade_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/menu.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/menu_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/menu_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxhdpi/menu_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/gitlab_logo.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/gitlab_logo_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/gitlab_logo_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/gitlab_logo_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade2.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade2_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade2_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade2_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/grade_round.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/menu.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/menu_background.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/menu_foreground.webp create mode 100644 mobile/app/src/main/res/mipmap-xxxhdpi/menu_round.webp create mode 100644 mobile/app/src/main/res/values-night/themes.xml diff --git a/mobile/app/build.gradle.kts b/mobile/app/build.gradle.kts index 272effe..e35bf27 100644 --- a/mobile/app/build.gradle.kts +++ b/mobile/app/build.gradle.kts @@ -50,6 +50,7 @@ dependencies { implementation("androidx.viewpager2:viewpager2:1.0.0") implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.google.android.material:material:1.11.0") + implementation("com.github.bumptech.glide:glide:4.16.0") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.test.ext:junit:1.1.5") testImplementation("junit:junit:4.13.2") diff --git a/mobile/app/src/main/AndroidManifest.xml b/mobile/app/src/main/AndroidManifest.xml index 3b47675..1881874 100644 --- a/mobile/app/src/main/AndroidManifest.xml +++ b/mobile/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + diff --git a/mobile/app/src/main/gitlab_logo-playstore.png b/mobile/app/src/main/gitlab_logo-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..51220e5c16c829c834cf57007ab4fc358894d65f GIT binary patch literal 16215 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 literal 0 HcmV?d00001 diff --git a/mobile/app/src/main/grade-playstore.png b/mobile/app/src/main/grade-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..52a120ace327949cd011a698dfe10211c5d95320 GIT binary patch literal 32511 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

O=seaI^`ZG2 zVY@LY!E;qem-!T!WOE(2GY%8+w|HleflPAs>;LJ)PJYO3orViAhbYtb0aTW#H_h;q zKkumBFPa@L6C?0lAfp@n8#@`X8u!06vsvE0{{u{V3_>;Ol^)L@uLHZOD>BtQPjElf z?jPBVHNKK_Tx`FI8;oDpbPfVlVy2^uI#hc|IZJ$}7hT@hd+gRmEx!@@<&~ySC)Ewr^Uk(7a8J8A~6c6eSdAw{JJo+g5<2y^-R6QM~joW^UZxmhFl%rpgoJPMCn#kpZ*mM;l!&*HuiLB;ias zTfIbMyhpnwwmM^&1$rw`o)&cK&s*VQQg$4c)E0*=czM(uqVOY~ecq7BidDU0Urako z>m8HTqESENW*YI+*{iMQcWr0`>rE5JNXlU&fUSIDy^NSm?4B`b-Put9i%7=emBaV+ZRs(cujU0xN514a;D+5p511>`?b@yu9E22+XY8A z2harXX|-`*cq?%r$(v*zAf36MQlea#69tmTOR{)gnrs zSMR7$>|mBbFQ>KdY#h}HO+`y)hfTy6Z->6xasxBc_W6~(j^80JPIZhh%E^AyUq26l zl{iJ-`7A^~51+j7YY~`R-qjzF`88da$mLh%dg9WU;fsZL+&r+uyw(a~LPg%So~bhv zBo{#_E8FIb$E-gVrMQe&Fs`I*3=QCE!piA+Bw(JZetXt`Q7M%Gp+vlRLCX6wUqDJ= z{jY(pvmpQs1bz)R6uKyacf&H+xlwZS3NbESiL#51iBx`ROp`9!^9FhoDdSX+HxqI0 zE=!uQEZvU926;Qb5F)5nHDf~?b?S1l_Ki2|JQKwLM5;4th*<`5DBirieu`x zk1xQS)lS3ueeqwxMs7T^Ulb+eq=>3croA-(i;nL_0#D46QL9d@dO6R_B@!he;KD51Bc&RGgq01f^+odH%x^o$8;jLsZ~HBcWCe zB0u`F7K4xxv=s6TD*6F=6|0Y_gqzQsayXW*G`6sz@4#*90s;`OOyH{YvM)`=^x)GU zDe`q)(3fBs7U@Za@*#6nL5F8W^3b&iZfa&GEEzoz3q6q8bdqQmXyP2?eL=D5lb!fc zSkD90D1PwP+Rqth^j^ZfoR~`~hntI26;uYRD8O^E@>X37IN1~WKVTcZ>2^hnZ@5+D zL~4u?@TpiwE2$U|rbDter@?l!7d$zDN`o={T%&r+56se-TVQC*IAX{!zY)*p*8#A` zljLkCEEwJ&$Od~_)X9O$zHzSlKP_?%Dr`NsRxbA3Y7#yU$3};|&lZ(&GE<&JE!C}V;0o-wJ3sa>2(q9ZFju2t7I3Kuzn`(NDjDCLMr(vf8oqo9Py@U#b4 z^1-NmrW^`+G$>5vek|ENC%k(m_uJz#m??4xonw15*89|=hTnI{wkGikjiubUwYqrak>p6Igq%qxBEUIlE#C$m#f*)=usp;guu2g$ta%@*~otU4L}CVf%-n z{)A9tbe>jXlfL5HdDRblB2PFI>mAjqJ(fPRa^I3jMf@l{t*jS#b;kR_q*Q_2I$3wZ1WC($U ztIvj#pRmz&IW;M7(#Yen7{Bh3!qYHEW}(=d!wu@F(}>6=uc@hhs{Wfs8V8(7QK5@BS1b z9YC}Bg09!40=2J$ztyJ=RCRt*fugNUUcNCoCb@MM<#M{klU~CC?0bxkmS$tV_2jaA z)URbo|IOkMO-Z1eGe^0+DIFG2o>ISDiE`Lq5oF}$u-F;ETOqGn6)FojuWSaTs8Qqw zxY0<40MpHrMpi#+_R5Rz*II|U8YoItdw=s}R^=XO;oVam6`as<6rQdg3Q4K)V%)%O zs`ZDRe8O9`UH50oJ~+PZIC}96Qq9H2uF!SJu)&Hw97%1T!;cPX(Zg!gopsl31f1V( zz8{Jl)23h1CcgRAa{EAT#u;y{-P5FYL*)TnT6+3vK$6zim*I4Px_0&9yGZ~OT1qe9 z%&Zvbl3G^ds5kSfgp9vzIK0UTtKZZ=h$`^TY3@CG8SJY3G}LHxIFuhQ%Q(Y@-4snk zC`BbKl(*)^8Md!bJt$R53cUBzGYmf1!UKcQR8Q)D9$$#)-`pgc5wa@#iv)NcQvzF5 z861ED)3v#*GQl+;UpgVau1@{DOJyaU4u>4S!9G0f5o;yuo4pZGdgPM=>*uME zH}|3uf@?c=0_&>u19aS_BwSN~3#cq7sJ8Q31`50uVRSU-rj%XBlTAc6DQ4~4%Pk1y zH!xESLy4|u%vZ{eVE7}H%W>(MhD^fa+DD2*lUP|A{g%tztlXwp`zoR5Q#2;3>P~ep zU7F1O*L1=NYjF*COu=SCA8#8Get*BOl`%>}@6NpO&T$5w zzii_Vw))Ec!1KkTUxpkW262qqXvOQQbfcZVH0xTYbe=`v z3G21LVM4OM5*Q&)4?r_RFr)|>-~(HqHgeKb$KL>AAo=O?G{}b}N%7@P703zftJm!w zhJub@X*-LSpTTLDWue7k4m5)aIHriEXO^3t(slQy7*|#lXYJe`cZW{-;i!8rLY2z& ze6IV9wd1Zb3W%ONy@#b-ro=wa=yzy?n6S_k=Nijov{zfpP4L3Q{UtYZov$Ls7+i}2 z7`+7j7WY~$qK%p5Z)z!*bz3dhf!m zqCmB7`|y>E^_gAlAl?$HeNXR9#=$!n7;9N;snQ2$vuUt8&HM4`W%0-EoiD8wmM@se zM>n$6EAw|fH?Vwl%4}8}UzF5Ibsh*`8d~(0C5-37e%-O!GavUB1;pMjvEFDqFUSBi zNqpJzPy#BxiUg|%vH%xDcFR%f=Tp#(iqa+Cr)IrHP(#VuH@PCd$^a1>q*WKOuMHk5 zu0+Ax%zrS2h?I!(Zwfh=z4@BTYyhR%XBne?Zmn#6E6F)SvzwQl0eEj02GO9UL@ir>J63{`-(75Mv&5gsN}pSp{~|-}%fHV%^(sIVBCLgRX^V2<{D6~>fjSC( z*JKhZORW@eaQMV>?->gbsw_RBL(s;|Z7W#i3&!*3%_%__d>)S(5(q;qI^uVJ&i@0> z8z={!{yEdz@Wbjy2fGloXYSGhEAp}c5#2yG`X?2}FHJe;CNl_NXnoE7KVxrmcI7wJ zhsmEnVMu!1VR6sRDX#it^P&oex$d&%4X^iScZ-c09!kI|U^6z0r6>WG;2<5VulX$d zIIsI<+(I1cJ>DUA!0DE_1x48i%1U-8WdlPiJw2<9!F@t`u<1UJxbE2U zJ?KM9@Ny?o`5@IcVIro;Z9nEc`M}sbD)!TMis$VUX{Y_zWwcqHWnBT*BCj^zE5j42 zGI}c|L{#P7AAf~PC#I466XGhY2bf~(^!x!($e@#~YTNtmPjxIaY7%iQveHV7i(=)| z(gY_P>@i~Md1#r5FMs?;zW#3RFZw7y?{ZxGN?mW~(|RzLq1kkQV#B-!4b7LJ1w}i_ z=e(kZ`vX4$_{(LE2sI!*P5`OX_kVFA31tA10WfEjgM3*UOc-nmfMGNQa|KKk+oIrb z7~Q{^N(Ln*>V*OTL(QG1;nVv41>5KE?1GwdoY@OsO6wS3(*oIsdj=aE;BZ2sGauoV ztMTR9n`J*bV`Hyz+%URzm^7j-Y!6I(wcS=(azW0SjWKx%RtWuKAj97Nz~`?bpSWXJ24;r?C;hD6GOho|io(wp=+Nv7c!mmKwcpYoO7Q+WEE z9Nj$A92A4CCGX^o@L&9jy*KLh+!49|B4K64O6I_-a?APFTFQN(u1J>>p{ELC{QTUZ z{PWh`AIn{}G9(}qwH#N4?26K0k#n#AFrTwzIaYDZv=Px`;XLrAF<3@Ni0NFLdm19I zn!BNqrY=SG(P~x?8MjZoqb0)e-Ux!x_H_KV{&l#zkd91r!A~-R5|%($gHpb@7D@O0 z4(2GCOA2=*_4M+=0K|?fJ%kCWwv(#n_EyV-l@f7V13fsw9)L?hQ`J)#kAqcN7Xi@_ zQUK@_|8?(e1XxTgzyv|f0Fchk1lvFxgH`455-6O7Loi6NsRGfGan4W+nAXAHX@`y! z;&jsdRCOjU{;l3Hu3_cSPyS->6|~IvDJu!%MH0Iyna1(P>5_PGRH`q$0uklP3jCyK`Ra$pHrk z(bwLge6t?UA&9QNej)|?a%P{v;>*s}+Ur#JC|_c3>jv$Cpy4FLlu6>=uL4xo>IPaQ zm>p&p-SV<&S7mrs+7g(KdK69&o#;1?Nz(IS74dLUddtfpk1kQxapaO-e`EBB>4dx_ zE}3|}&2-!U{Y`j}18QfC1A=3s5MBVmbuD?bRUU3#X zmknRU)T+f41fOOXsVjSK_sX;Mmc5|g@7@&1cPdaN_xKog3`Ikzowg|6l#GrIZXoQD^^F!;l?+Z{2=EHYHk0qn>B8%jqsXScij96b ze84B~_`fHwOhJA1Zh4N6EP;Jp?)`&dG=7gHu$>n5Hw>*z6XM zG2I?zZBagckJY5bnUPjFy-S=Ss-Rd`J_mX_d20^!wS4$vi!c2U)Tbz>t||)uP-k3+ z;xeHPa}?^n@HOqYOzhcna=EfkeP)ZY*ox|yx=T&=`gY-*s}fNG!(R5C z9rA{(gIFdEvv*5dP|6z%yG2~sF?Z*yV`>*6v*DV2hH_J2RE;YNR2Qtz9?1!U+5W~~ z!uYced`p&Z0KOW^lL)5dEZCP(BE(6Z*CgpXOgt?KA`Ryn*Z_ChmdI?Z`4V9NhYSiN z>dFG}%bBQwx^>)$JHI(2NAzqLiJ22l%C1(fD61tc^-q`6`e|2hIV-?`407yl ztU-nyFRb+{P$#j8!@)Wi(^L{IGLAkMa#^M2KdqFU9vVsT=gvc7;C4O zRCF6TNap&{f=Q9(%%8C59w1$5jY_B;bGKxLXyo`sS?~|*2&+=p3(P;~=XiO3J1Fx5 z%eKdG0JsF)%O6>1u+OH-B-6lKJD{rCWZgtz zd2LvP4sg9Oicg2#_#Dk`ETK`xQ30*I>+)T9Edjg!v69)1Jh5Tq*4Chlh#f}@Q19?S zBozJNK@!f8E4SD4wwYdK(`ih>;nI-+7WEl@&11>!ZZc`AeKE%5#I|V|sD@ zCUcn2;@e_E4bLBC0RKil$OZWP)$k;iNEx5w0lGSvzbD8=}D@>5C>!SAie^ z=|K2A*tIbL!I+T)UqEsI6vRo5My@eQ8{P)5-Y7~o{mS#q)8NI4=iR@X?8;P&r%NaV zd+{QpM+vIVqw41Hdvzs$H#vt6$3pkU`JDaJ(elUqC0B#D)t@q+21Nrq433MJx~>{n za#iTo#h2i||D**cfL(S1Letk&eQj|>=gCJ}Wcx|QU4OZf z@z3oZCLmdwphjGSzdPlCt!!FrqHz(Q%{b(uN@`R>yAtGNPQIpBH7VrKNmkM2=`pjOJphCA&WN zGDZFTf>#rG#+u1WK*V@>d&iB*Aje0RTwu`^zPJTLN|lZyWN+$^`BxqWJcM<1oyCMQLVNP(+9=j%0eq+SvdsLZ`3=IremUTV`npryFUSYCU_(#o(mDKi8ak@)Q{y{lNS3J-K!|1A8oT>T|r zO)v4HQyh+Hyx9hCdc+}_z z|FQCroh-@^Vf{gmX-gVu`rTBFpEe4fiUYsDqPUemaXcqrHFr4BQZp(|z4eQN{~&-{K{Z<1vA>@QNoOym~bM^XGZDb3l*NlkY=}?a8g3%aj}iAOPo) zVEZPNeM71(hitkUdpoqS)E*EN;uD&y`0{+2-7Yp8xu><^>o`9tvI33+RjVM^?h16p z9G+(Hl7kKHG3%f{`HyR2Mia+1Sl`UKm_QYH&ubb~5r5n6@;CGCV^E{Ct?9m3e^KP@j;p6ah_%8()QeAp`6B%YisUkFq=p;~fY>hDIn zbhYR;(OKq>pIdplq*A22*02yv&OMk65P8hHzAQ)}3$r@o)^#aX%VX(ilWr{06MY;5 zuALbzDg}lZo`u7;e)KOId~-p9oC&}TpIHdVGYG4agYt@+1_dGxgtZ*DR>(uox2X{R zU=-?|O#9q%-xKgRGbRUy-GA*^EOcX0b!Foi6HMNiICD$PA9BnktaD}<+S^7|{e9@y z2_S#(2RILsAqYAp1?<^zf6FV`d9a1I03+-N7)&0ZHy{{9xEur{k6flmR{}Lq@>xoR zdMlazO=PKXE)!bIk;=K?ln2!^DgRB#h42$Uh)Sg`%r2L_SBmJ^3x>irC(GOKR}3m% zn*F}q(SuGQ3pc1-lF{&QD7L(m6ofOz(7|Jy4 zBnacq>sg((56uNI+Fc#d^7lnJCI)vR67C{dMn`T{v`M%B?`0@)*K)oIS%9#u+% zwgi;t^WHXC4l$YpL$oZzo9*g~{HdhHmd5$H2XdZLL^Fn{qYs3GFTnER`oG~5@P`*1 zUxw1dVt4PM&)2DDvjF}Mxm>y8+)Qfs)koOQLjgAauFRh)9L6^;0jKiTMvl)W-v+8g zoa-oO7~wmXED?}OquOlprM0bPLCrUMd&G|*0B8?ev@f&b1?TzhugQTf37l_uk^=1J zc_KI+Rp0CSmZkQ|Zia;NZ%zq6$(-7GN)c?@w^@$`dpjeid>n>e6f6IZlArQI;e50@ zBNy=Z39A3eiJ*4}M8P!q1cXlQ- z6xQD;K{2xauHYzm@NMh#)VAi<+E|{O_gTBC0XX;^%v}ivVSP)2@Tall45Z(ojIJstvh^n5`57( zC45$Y*pmJ%SD}|fU_Dmik__D-PQNWY1 z%TECNWX5XN0Lf(VGy|9D%BeQZvU~v*0B-?91InvEar05R~(ma zuRj%xl=?Lp^?dTk0u^`exZG6ad4F zkA1JaFXuKGTuvZ?=|%kOEE2V`1*bl8$tVGk-e5rTBH0WkdsT4k0~ARR%p{MTQ;c;M zeUan&;>6zJ-(~GUlt;|lZBT;%-FD$Hf0vYU)bKxHGqxKYL`TAvFa0*i#&0La2~F;_ zgLQ(HeKUl@dm-{^>T4ouJoV1EMb5aK)q9yN+K_3o0&SOt!j~e;E%@b=`j2o&jqkY<5)*6D}R=y zxQu4a}7{BUs1`%IVe_&ibOW30>&7+sB^De*+MLpGD3c7p^P^to}KN zkl^Lf@8K7p6YG!qTW_!45>q^C#6}myvU?|P+lDib(O1~`b0cLIq3866>3cO2v4eus zJ5Q*7sZz0x`5VI@91B;{#lF#QrVscus+bC%Y$sdCX$;C6(d8b;bF{m($u9?RTt?2N z&ShQxQG1hf<1_oa?P6jK_U_5?VGVJP-{r^fkb~3!qcl*-XlFpMy19GcMUI(AeTTot zK6C(?zsQR`*Tjj0M0y_)Elf+FqU$faS4%^6bY!%P8yWSy9AxPGp?V3Ek;AzjPhQBhDKhR{>Sobp^wnpBTfIr;41TPmnIB6+ zhYi)iS#5q;UqwF`_=L%8kgNv(l^wuNli@$!MT4A)^dkT^poZmOSpTI`Am2qn+|D6- zqsIA$e~8;KxLbF_5p+O0cmPN*6d`*Fu)QpPRr;L5J0k!VI}(f{(;sBWIE8jwS5cyJ z))>Dnqgc-Q^z+VLK^s9OfC+ZAX>YG&1YB)Mt6DlT8EveWX3$gKD{^|2mKD{tjFTN; zth^Q(T(`TtvOGH9OAX{{4#i1dPpK3imigHIj+Y}`q5y4J8mkM^WfQ`Cp+Zi4otY0g zs6>DR0fB?-!~PEYfKrh;SH4G-u=BQzWAUAo_!@GI>WnZ2;yf}{`XhtL6Jf_f*0!(5 zKYFy)V*-&QF}!&}yZEv4s&eN%bue+hgx~qngk?@6B~Gw)o4F8rLGi6CKTvUTB@~rl zBElgpabK1UyD8~=&Zn}*>V#o)=OljyJYMH^1nharPLz%UcMm`U3J%u(OHwfLoc~FM z|62Vg7R-<&9`oN{KNSGr?1}}ZLJzJp2j=+5fZ>R_qv!ocR)|~HDfE)|oH;$*EVu35D~n%e=8V3pWq9>HZ&2 zWrE^8*1j#*pTc3T79-Jy4Ht<;_-=$DB`=OQhxOF(_$sV<*Qj0yZd&)I&Zw@5bOXah z_|O-Y*@y;p7;AgKUvzrZaICtf@AjONVTwR-+T+v44oy7V5rDhlOWUrS&>Q`Ru*&r3 zCv+pkBWod`)>cn8T{I){3zSIM58l7=R;2@nJF?`|T$K9fWdhhr%C{|Nd+ZC#x6Y!! zF8vWQKw00{PQ?q56(xfjsQ zM1RLih&06)f2xEevQQLIU?j#Rs12R_w_&|wz0dneP@Gl#9gk~#_{z&(x=`Lzw)#f~ zMaLp=tGZ9vM3^}!vz!|pl@J$?wXQ{g|DA&Xs&_gaoZ8fCx;1B3SvjmA0J&d%NCU zCnI2A1*VyhIYWbQ{oAqw#5csCnH_9Ti76YPKt6GILdp70lCzSgn*X6v-kiL##*U9# zGf?mH7TrG|;7~LrL3}WRUw*N<`qP!rd!f)8GE;uc$bs-+VH4Cp7>e*9-+#hBdbr0bKANwT99f}x|N}cfxbll&Tn&GdE?ezM;`Y!OX6>u&v(+MPZ z(`VC4GcK=0zk*XolrQo=CS|_~`Gmdtd|hvTf&(ouVGe(;pats2lBW+(40!WU{i&$l zo;3c5A6spVLs-ibIt8WDyg`;b-EVmq!3U~gH~D(ym3QwMt;`Y{*I(jj%E4hdTbW(l z!u)`*kmzOx_r(A^DeooKuN3Y!1fMLu=9&&VQ807L#U4ectZ{}&fi0~#jh~k6?Q(LD zl1G0agxCL9W#1i6_5c5U>~O4P9D9_JO*&-n$}T0D{Bwb^D&Yr63U(@ zL=iH=;UN3i>)?JJpYQL!e%J51ulv64zj8+J_jy0}e7p$7{39h&4IJO&Nfif_1%t{l zl%WzTIYJt#gCCw5JN)%eQf1^keb~r2d}+{X_sGZkw3{$eh1aVWd~Wip4|k?*Hd>n#3+xQ% z^^U~n#OB7M1(P!`R0rw%@sw74^CtuaPa>tW-Zs&y#RkpZ>R$iiUmK6<(E0u2FK0V< zGHoJ0Fb#$4V+t;o=JMPUJn1#-{^6;xSi_skos(pG=Huz@Q~uNcge}Ud%1jow?gvn#-u^avK-CSKI(i=XYySn89a zgKGyrpY1M@RP64KmTMbtA9bF$!XKTG)LEex_u6KYyUf1as!f?>=!6P_c!pB;QySvwmtlp5Q$oxU{vv z+M(LwQkUmAUkry(6}kr5@PypM)y*nCCM~DRLt5Soz`z-#F645$m+wUYu5V@_6j!ba zjQ8rd0j5_xVu03wfdr|1qAjsfh^??5HBGf)JYmXiW4fZYEWI)9aa$$lxw?=&cgHOs zM!ozmCjE0Iwk6To#x*_LW8owb3pbKpa-M5o9$MGg;WF`=20E;0)Fi|7-#Ya z-iuhqJOp`3JLpL%gMb7dT3<5HyQv165-*>YvHPo(GB@_=d69(a|E$~+QMot)m0xZY zOvBHSSKsnE5x2B_-+7!|)n$CXiD@z+>xOMNweKH#2q9=^3gh76{Q_%?cJTC#f%7Rf z54)ZW6h3yn43RcaW*MDM;fb9Pi4E6rV9_d;hI}}$-ox%szpL%-Z#TBFCtsASuG+;Z zIC3JT!me17!3-(aNSstq`T&q_9uad$1h;}yQ10bM-cf%a8l{?k{^b?@16DguM3+tX z&xIlkWz+TnCUN?u{H9_p^-!g3-y5gmR->8}ZcjLNVQXF1IR!;|dO6tzxzXBj6Nal4CiAwKx-A9sZKr6Ak=KOC^KYjh;aNC1v<*(O?i2;u#*dv;}C ziE~g2Aea2Us;nL)h$5>X^1CNdqq;p7Ns{`XV#*yvrLs*B+vW}^m5{(B#h<*{r^NN& zG5A_27HQm7AGdAN2y*hF5nM{aU-zWH3xuD@S@zOL_>tv#;IrOh^`NxP5HX`%G$Phbd?_$gtpx}NY? z_I?E5Mu%Me%)Xj;70RUg)XPsB@_w5uO($>-0ECrqaMnOyE#R0X9gFq5DwV)jzJ2>NItsj~XJ5R^;4Td#uZFj`tl=r^E{a=u01M zmEet@&@1&%<=ubd>!rY{h!St08m(IrN%r{)_Q<24*7{*5e99CXe1*_5QaqHz#V6 zbm;jeC350il@`b$CrMt(6)yS*ycKVVzXXI#EHh}(XCTmn{^JSF=!2AsO;Npsl`DtT zln@o8!(fE0+Fcx{LgEs!Ke^Bv&YdB^_Go5rTBTsq3DPKY81Y*hVuzm%&PPW6wM45K z0>YJezK%UH2ttc!C`j?kx-fzl}->}NcyaUXl>o5XD{h5&;@XbqV+=FH91_Y0&Y8pD~$xQSae+l+{2S5h~EaMk#y zrR|=?XVvrYH}_4q67jDvs2i^q%7;Ftp*|DTeYcrg*6+^VZvE5d^nAq5UDU34lYY0?es_AfR~jsSK?m(}(TrfPow)$E&GgUsYI!99(SU zTWBC-Eha|lxM!NLm`@bqPA4@b?E|@q9T=z00gpw1Z_*jF^+6GJi~;~reWo+d^cyJa zuNpSH_}uh+u@A-B&;&Fc1!OdWn04|(h#^7fB7{J#*psUNB6X9*uRi1h%sQEQkd>Z| z#p&6R0DM7Ig~T2{4ryi*Qu2PK-(dr@5em7G@!_DTY>pG1zwk(4D$(`nQkn0Uk1H|l|0Ns5zgx;SQZok%lLYuTgPO1ee77sBFcl3E9RLAXG($C{$XQ0(;=Ph>o zTe?Ay$2<+VBf;u{y~yQ7s?47h7Hr>{#5kJ==vqgj*ID{C%jZ zVzaXQ;Jg8ntb<#Q*T^i4x|_X?u>Kg2Ve+8NJcoZ$_SSbxQk_A4p*ExO(pvvc>t1wK z$CN=7|B`viQK!61?Lb{t{E>;il=2uvHWdXz+7Sf25s<+O^Rw@rqj zmd@J0vjqE~MPA{QK+7jwvWRFZOlGdW%U1VvJhLq+hK)}+!-(pXTd#b2PdyQ3q93^NMp_F@Y!=7c5p!%FRZt=q*hPHaiJLB zNb%Htggqv}XBDcbIUlfeE$($yHSdi~l_+k=NTSo?JyE4YOA{5NfDpg?ex>{85fX=e z0&N=)OQJ3&K{+WcZg@gaUN2Lj6hTUDond-A&ba<;F4fIQ4|$tl%=+atyf_@vfkOrHx`oy?450nOzdpAF5<33r0pJ zd1*uAAKxR0Rkp3NokY}m9~K62dNQH*;5%>M(mz`pfm+i=>@>W^!tEm zMKl$H#N6VL3uK44LAk2e4D0>uzdGjjk2ToHn$446HV$9lr8R!SA(H$u1uWcWwRbKb zD0ueZt4qogLU<~-msHVoYfs3-h7nEC+D5zfPNC5t)yUPB#J)qlnB6Qf3h)MH>=}Yo z_>#~~u9$i{i;rgA8GX<|!)DkZoDWWWS>=44wxKlBoWa7a#%%vb`~Dj>o~aXdoAiJg6${Zzb;Kq#wUJWtG`adJUuVxHfh zUv0?_o`8CE`garkHRGrtquwnrN<-wS*Wkv-)kLGK0fn!y=a@(&c zte=<6?|N)dqyG8PSAHr~A;ID$@?9qw6D0>~wFHqS2i#!?QGtvH#Dp6XMO?au+~M&xuh6Tn$J3V0#eUA-o*!_&0Dxc&LBb85smGrPg}>Q&IU3l2P|?c0&&l zGpZNlUfY;MD`&;06(-qPWwuXhrhiYW?IPVnPCOl~$9SD_in+Y3>k%M8`E0AVfvV(Y zPHqBm&S)aB?5&FN69_w>G#v6bCgy~`jR~^Lx(8az*PmMTJTS&(<_}cl*X@whwq0VQ z{-Te&2F7{-ugID+lhp!Wp_uYU!F*5{6EIh2I~-@L9zw)kIB}!nf4=(B0cjq^j_~W- z+%(oJ_y10NuEZ`kYOq{`x@__9%DjBVT2Va0l4Jl;77HQ;OPi_ zdvw1Af)X%G$+YObw_|G!m>Xe1K5G|1Lv=*mFqgCMT>rVIOEyVddC;JAk=hhy_P={{97o z+Z83`D~F0zz-a!AvRiUzwB^BnR@B{FJ!Rb|#ho68DzLD&Z>!4DIVZ;ep(9^pitn?+qA7 zO8xSBpi73Zugj~wSF7RYk>Dh-?i)P*ZRZ4*yw0i?EiR#Kf@^m6RN=9|c4_ThWb)km z`mURMI+XWzhnAkLE+a_nlz&s>9j9y%83|w@DI5yX=c~DVhe5~2`1ny65nl#Ng|^I3 zZ6qD7{rq{tt?oR^lr;+SN=?epFQShssH4L$VP8&taiJ}E+baDh1&q`YAZ~3u!5ynu zmeEqAATxebu1TU8Kb4%g*P$)S-!1VS% z=0rV0l?I}wWpp?|c}#&72$*&}#ClW1%hAkxldO$_T;7#amS{Ma)9tjin5_IS>9tR4 zwf3_(EKGkqg7~p3n#NUC>Q~S(gzMk=&W^eC)Lh+XU?~K1bgUv@`9|AedX8NDI17f= zJgiArOsTD4)p38)dGqBh`sR>CQRyLw2OFv;pCP6zQvYvw<|37set}sd?4FF3zp4XS z_lwKJ7HOMa3atb5zE}?xgnU@{&!NyCuv6V~-(z7kL%WN~`;0<*5@Y|TG!HIm|OMAqHlS~ti;$>1x2of8*3Lss$>NZ%GM`uK_FTjI7(TI9lZ6d+& zk8j=<2qtq1!{+W&Y@1`3O;-s-=m;_@Sx7zeki4;^W@_o@gn!qVhyYC>&4XP58W}Ic zO$JosKS)iK!51JWFLbS_Q_-{t9qj~A>#GgS&>=$6U3i;s-0N5#$3U`8|{kFXB(7q z)}{J2)tgfN?lgMI@ivrXwe^QdcXIcqdY^>JvJUpa8b19JBBDV6S?TH}_({giOvO1! zvs!0%)RVn@UO``qUu1jp?1IqJ!f*)~WUZr~A5}`C{s5vNVP$S5Y;`y3CqMF9IfX@mh%wfw;~sM_;n21)2zyOlC?U#7%A(75F}T9wd*sqW;?S zxroPIQ=8Exl#sFS5cM-KJKD#GCQn2mA3n|*EcrOvY$Y9&!ANh0##-&Z;%qLFY~V2U zTkYCV!gv!xZT;YtvU#@^#CGHH)H6a@nt*tK^#pLabXV0xkM6Fu6|fkKN4SHMRK-Hm zsqiWL2&4PsUmbt`*swHSpHQ<>Zz_Sg&EzP+2?2io*jJdNkGJ=4w?<;P$8Y*el~;5< zjF&lvRBFb$4e`%Bz^Hz{{d=V9aLEYp(2b}k_VdIYzzg7UWjcF7>9tpcs3ZV04d{z0 zF%kw~ZD29b&Z5N{v-3+SQm(>Sy}ZRHz^^th#8hsqU1cL5ABXuaem?|e!SP#ETz_ss zCOP#4xlgXb3cyaNk~vEnWR&kKGkyP*u(G@kMdEk^k$x1Y_Ftk50wb3jjR=mlBBfs| z{a@xW36-BRVYn|EODJ>0t}8_r%GB@mo$rVGf_`Ubx=qAuRi;sMn>Z`s!fo9vawZF$ zcN^VQBB+{m)0Aj7Ua1!=$4^A7bo_!jbY?r<#k_U;ZBv>}#iqa9z1AI9g- zG#oYG(U z%f_^`>lB_sK&xdS;9;*b<48!4N3=&*>z~$Ke9}o1%uO+Pwh>Ki;c4if{ zvTDjw8S*{l=;OL0Z(l#CU>=M_z5`=6k3ja?na*_9`7Hpe3V?hxXXD3b@GiO+wr@c0 zi3U-l7B%{&rRKi0WnK9p3T4)dL^2-unuEPy-H6&<&Zx|2%M0!aR=Y3Y?vK7Q--1DS z)FlHg4)qYzb8W?vq*NsK1`IKu9Xs$2SoBOLI@q!J!}`4TU!`^=zu1SnI1TYwuIITd zHkT_|H;{k1u1?x&x)W|4=6lfjUAg+A-P?xVg0hV&|5A^RQ{-t0TEi~n(f6>Sn)`&T zmu(3yxDCINoAw3;c|}QDyTQB~sX}QX6r(=gG)L~`k*)n=$0D1C%WvLCj8l$^0q{iF*g4&1EGjN`$UC*z2JK1Z6SyV=I+YPNrUxqV%iny_ot52mYuQsc?_ z3bL2RxdasRFN*#Qi;30D@BMD{HaTC=kmI6UM)U>Q9_&AiKB6htuLOlG9M(GzJo&->Px&3<;o8?YlDwYFsf^GM{{~_EwkcMx_$C53_VRkvaMQZ`X!WHOa z6qoE?Ht(b)D%xhg*Zsj-BWVU+KZyn|!q7(%2J<#CJdr#z`QVFIkXlGOChs-D8YloI z{V$wCEyROF8m%FJ@D*GP%2fhZ%Je9j-=W<|^y1WLc-wmApN;#_7|*Mk!Qr)Bqcok* z?F!?fUdApvQ8ME0|6Y2Ep?))l-gMrFeu<`Ne#_oS@US%M-k7}5ncf+bE-PvU9a63d z@w-&o^Xil)n+@{1K-6oGp-r&;xK+M~EGwQs^C8j?in3?ri65g@W^Zg+wB(L^s$%j- z(C&}N#tg@667r$g^h%cXrsR$XqT^EP7CYPQF4@fgGA|Gh$7IaQLu1MMMVWr{N=X?(lPu$APE3KMJz3-PFp z!+dVfpmG+1VnQhuWC=N#-B(mURf2pf7>vt2XFWnx0Q6JF?PRInNa&Pk2v?ngMa?J6 zoKybEh@f#>o2>JaRy=vM5IM;(T8MowgoF(uI78YDB|9TIxfLWn27Cx5atg}$H-gkI z-vfpd|2wc}KaXlIv@&`X{>idd@<;~Lbo=lwLSys%Pl=~w^p%kPd;3!}7ML3ne_9uI zbKoI&wm3O6Byi67K=JF-x6MdbKlO~#>_uqK+=9}FgNH#(bW~>6NY8!bLT*=rVjw#`Q zyav3aY!L3*{~~YjIV;GM`2QmBHophS4;e{Fuk(1`3nC8mnZ5VyN(cgPrTWz_R2kp z3FaXc-Nx`0H^k=QVjVNbJM`rwi^DCK2h$;^(oPG3y1;pRHBtbi8%#CYFH6tjlHP`NI=F=2}!?bq)|S+ z03KCtt+|(Unta1*yAkpmHbfDc8bu2kL^e}|$rSYisbqr`1)h<_3A_b9QSl(Li(izJ z4x@mKI5^>ls4ZNc>E(UN*l&t0NYa1M&dG|axn9vVk@-9BmMeQwgVn_Z4pKvz65UT69FM8`G{V(s!V+v@|_ zzKO#+Jfmm7hoVYf4p78@g{D^lA_=jAfb4>(lC!`7g6G#|BWh$k*)-{NBrNJ{G*wKO zz{sUxT6LvxaI%JB=(W~0@f;kP;@#S3}w@iL|S~|LJgL#c5v$^ zpN`+h%F0W|*z~@Z2dK)J^a905cdihUq3^!s8uKFGExleGg(NKr`3I3WCJxp2Sk))< zg!Zei{l3aj+At;-rKZJ7Qdkyyt>K)va&*1)UYvQPQvMfO=5hJ@z&sFlCEBey&oMRn zr8Ke}2pqbg>z*r?TBeJIM)qbF!lT6U$JV+glmetA3HC(sk#SUiK>R)%-PGz1$c?Q;na%W`gY&qZhN6S&g)Lh>)@_K|!{wQb~jR$j2Aa@rkuQ|K@opE1$98=_2-M2HsY^eFiH<{7DnjYtaHzof%%Q)wlQ^$`N0u9A~1ign+DB zN}?38%R!`ln<<)CfSm%EP?V5)df;S(i7E#iLh}TW#3}{``a1Dt-I-J@GbZltA@ubk z{q#CPK-ri;viZjIx%rSjIj4Oud30T#kebPSVpSV$yJfOsv1R(vzS3*93^7|aBepv1 zkDvg;EG0sz)eNz$y?7bRf~}tU?mVwqxiiCrGcqWwi45e2)7~1LQVe*{OoXsx=_SET zhPba4pgK=iOUhlgL|#AIvtP51BMi;VVa1Z&Rtj(bNXmT0AIPG{9b%&_K_CmDLJr)( zHp*9;Y?u=hggj}gPpFm?`4GDA7Z1^PYf2QOo95la2R8!Bf@zJneIvMr7p(iyy;8wZ=AQznUE0UY6zX3ajJ>$Lc+*&h3%8Qm z!&o5oKUVA!E?SF{*qsvhH90}B_}J#1fz)w-lh>$dB^UGxvj$-!0X*W9E)w*Ow!UMf zGQm%{krtU~$Wsv^Pme*7r&e{S8qWw`C|qUjkJ{Dsr&u90?p=NoGj$|@s*tU3lUeGCxA z-ECZEMUg4&?yA|$-gc&(7n)}YX^?DC2x2akh!MX@Sv=KrJNXpaoGGs}L3-d*4v(dP z?A>%HofHo-HDS=&ec*0}5da%zAplBjmKIlh;xm9$QX#OHA{Rb=%W8f2R4TP_LUVto zWbH-IELVO1aTTo6|km9(eL=aPTpi|)y~*ZJ6{ixmrM-Wa@4mGb@H^~Jh8?Z zBA9+qkFEXOO)7C8^FZ!D$G;MweRXLki-@?!+Bta_I$Rs%C+4Vj52MicyL=y2%9v=9Hp9HEjD34*&{2V6-I?xaIA7DSuT*9P!Cd|gK8aB^7{qt}k z&T2jMwprR|TcIrT{+@UUs(`QWMV7u5sRj9pB!KK*D{t>M$bKoH9(V49J}wM46O6sV z-iUdkR4R8rLYugczWT#19&&Ea<9~P&Pca6`tJ`_G=+t9+&l?a_GNYVABRc*^| z8q`QvS1RGQ#gN$cd&P)R=77#BW`kKIgNAb}@ghs%^ z3$#MZ`*~N<7c$2?kRWcwje;j_9+z-dQL#kHlKc5n!9sy90}ngWZ;F~^1z@+6U7;E^FYT#-YP2H_#E8(SQhx_$ZrizM*gn)6xjkW!q#-o) zzBRamA=)?J7tcRyPO0iqD1NO^%Ug=Vq#t;1Vo6So@2?*j3sUEr9LA@Fs;1+2%r>6i1a8zJ}`I&Vs2qR+AxXM zhK^(OONA$_!frDykNVHQ7lTNuS6hac!;Cb)KQ=uhinH|aP`g@Z`%oLVi!xP%1Z2$9 zs)1Q?JlFr9C!Dnqb~V1QWW&1EC>$qzs(rlzUA3R-=l9zYLmxg++?E@uH@we^u%=!ffp=x?to8W$dcP~ZmaLTf&UOH9bj^xH7JaquXcYU6iT!>a^2FMEg+?)^V_-)HwEqvkP7C&J`2<;p0eKm zeP+qGDWda>myP!Xl+z`ftRFV~g%S%B z-1v5HhX0~C>8I?-%7v8U@+p?7Xjk-uWdqSTkXCf2%S6bW%UEG!Ee0X+6k}7g!8XUK z^GjRA4n<xr@c~SP+!Od%l! ztXs0nIZ9LV(}wA^&$aGFIXzzxn5qvnv?gh8oh_Il!5RhFI5wXds70DiK0ugbN}{PZ zFqftT6kdd%S*kBjWzI>069Smv!Q43drs3S56ntgV+x^Yn-yt*!Spl3KAO+U%&p5gda0#; zj$bS;_+kt7-LBbAg~$yVh2cNqY0Lr-$8Bj|hh?5SmJiY;$ZujB zZW65a@8jt27mEF@ zORRC|8rdxgx#7^e*QqL`akt8q)?bf*s=4l6o~rYwZ^N&y)k?NRl&qO`q`v-+ww1kU zKIA3aneP7lcO?f(xc-)VTZqu6PT@8`VrA)4e8bqy>j(W%0_nzXt99#QfKlha)rKNc zprjg9XG;1%{}kqVai^6I9jQJ(5~&w$4$jIO-`ghnCyVblc^3PA7k*Dbc#MmQM|>?| z>2TadfU06mSiR1ya-2FLL*1jdrn9k=tovTR%(F&bMgA`-obRk79tS<_eYod?8NJsqZEA`QR)w5D|xHNT6kI>4wD>t*_lf z(Wjn>4bLPDNq$3lN+6B6nP8wFC`!qNPp2ajf)l8o^yBk5V3t=Vr72}tAAy@aURoBh z7i|(MnbPRPFU)HeW(wF}o%MU`Ybl={F|qo14!;A6gbn4!F~)D|mV7Uc#aWglMcJNj zV&{o+4K!1nwtcez4zRIOn76dIoh4D>g29a#i8uIBG^`1u2G4Pam7`F(h`Uvy!~B`o zq9Ui99{#~opyRz^%`#IQM;r`5LT|T5QxhpnM%oqRvf`o))ZBoYSBMzjLeFt+z5iIT zL5zPdVOlC(Yd-@ccHFkr5tp1vbNsfmDL;cmZs6K)E_OB6e(L^nQ}+ag;q;L&JJKRw zZr=y(393Zw@V()U1}ox~^IT;dClt&Pu0Q>>GGm>xR*E-X$fnxFxOPY$Lr^}a_h)4B z`U#I{aPgxDCVw^_dm_fC@6Ln@SemYtZTLDnHZz_ic2`rMn9R17e3ltNMkz%j8Ar6r zUw-%EEwbUY@BLjc`)TeW*2Tndb0zMSwR9s)_O3G_FJ6KJ>CF5gIh|?JW|j$KKmVGn zFlcb$KtjBawo7ynQIMnm;W;({NZb&{z+3ss@sa0!umbiX zAwUIH8CRZte5JCm$Q)l&r&<%B=f_p*668hp&klMusZhBlt>8w(f(lm2Kb2G)4Uif_W+!R%%Z z+-?g_KCUUuu(W8Tay+l@d>Z=+6wkt0v|)^*xDvzA}1-* z)f*%)8R7c#k14^!?<(r4_2TKXPz~hIT5VX>36rWYs^HVRHmR6g-OplYH>0G&P0z>Q zeI?<;1sRXcrABJ^bxX||1o!=3Wm(lI+e89*n&$Z;?!Bm**pWyo0jK@a6^?t-R(Z)3 z5mfask$r=joYhT>g{poTd>@CRqk_*9WzYC(IE&a^I_~$cjj<5_zbu4IIpU#m@|5Yn zYM3nQKd6|_^6t=wI6izD6gXKTuYNO0Lvpx)EIy(AD1#Q zNC{au@kS%c3qiYS(7h70i>C*hGPg08J(tTYMQ5HK`t+AccRxXoe;gdFNAcu(MUo6N z$5}m!l2vt3zQ2wbP|!ktf)L~1>kuuCBt#pOvht?othcg=HTrr+z9PPn$*Fs|FMrbb zgoi+p)h>`>WJofYbqH4H7Dyd2&{kq}w_ZY7mY|-HwU61dxoZWj`>D66iLv-`%`>Lz znYDDfDTU%&W2KmSoH=sz_`fTAg$06>{xev`gH$ z;K;Whp8f(T)>CeQTz~gx1*l$+mA`&7?3@V?bEM8MS(GH|`-r-6mR~f|>XhvKbc=Pv zYuWp1=dUp6RdM=XL#--p46#-w5h{esabX*jWLcE3kd9iex{@1<@Z^P>Y|QWtR_*(c zdK2=$J6DRBrBNi!H3#0N!EJve2oLw=H}o*ODvdH}oBq5=53VIp(xn)p=%uF_(F{2d z@wUvB`2*r4P-9L9NdaIEOzcb}U~>N|hCRiZzSx6M2B?i=nK~tB_9FvxsIRV3yx3gt z_*ZSCE02BYN}%eibDBdoTgp*VPGdO^6FE9o0rZuZP{<8y%(pPH=k=;tT(xEiQnYMu z(Jxaz{dgmJ@en#$_4??#f6`9lZB^#OEE82Nap?o)SC!drT^?*`>J2FFS=~Uc9j-jv zreO9ps&{K0xR5=5;e}GYg0c5_8(h!z(F`sB_e6t0hk++w8@>NYTvq*6 zF0(p-S$6T{_R0>&jP{6lF=5;|Z%js-%%XilXmekRu1PqAw(i?GGSs48n>AV~=`9qY zFE}DBVhvdn`OE27aepsfZb#oAsitjyqw!~i*=kKGASl& zv>!&e*5@qsNI38~lWR+Pvgh#xEet*>RL&$RB^m8HI3#uPmwjjYPx6C17-Mx|xX3T>$I%Qe-%W0>W_Sv#AC zVPf5iO7yHt){M8QUK>sRduH+?X#aoSMNzKF%A+<1iyte)>J~97;2_@T`o^)Y)`v=^ zRk2;A_v}3EGiP}_^w105IezY-3?bXSRE{0SIHc-ZD8G-js%c26YN`Isp}B@^rgkdS z=NG;pX*2t#q@3GW5uKo4Tq?flmwTtL-Z2_uC4XWWy%cJEFit#-STqUjdTerS*NgO9 zRFKUfRBXf=Lh6gON^FpmWDQbaHQLGY`8c2O(MO0`Q*4lG9~)9bRsS$(BZKoDsd^Xp zzs9gzruSpnY^HsL{b?JHB6r!;+P|*$YzkqM|6aG-OrD!I|(f6ytw6VTPu#{+cJ^Rs-J*Nt30niHjITpW1@Mt(6FF#KWzX zS&4`ACS@<=Ep&LzDK?es+6eypkOA5LtNskzjd+`loW)>-W)pPi$mqa8*<_YCx&MW# z?W%y^C+rmN-rz=;%(sVgG#k++$f5OwTTr_8kOknDbB#o3fZby-J^y$5Bir0QBdu3?1*W%iX6{qba9TU*JzpuAWAnSo6>ldDPYC^g>r>iOyg6+d-c!;A{2wnC@E@DsvDR=<`v$s57s5zBSh`fLyfL%a<0IZBdRh@T8m zP}!x3anlvD2;i*i*@>-=cs61x^*USwm?#@4(NJ~L5BC}jwY&$;J4i26oy5By2WZ!Gjz0GD1|bY?+Z)Ve8F*y}8!@Q6 z3luO<`Or^2TcW&*14ZlVX!qAz}9FT@-Wa*xx@l+GRRF7R|2TN3=ST-1)-0*=We5IR9tZ zsaKnFbg~21NE@dwI5mBhv4(z%JLEb-K#6(iYNGyG!9n(ui4w+?>jfqt?KVz+nat=-=8rE;%lxYdL;MdM$6Z zA1cX#9Dn_+nH5vLgS>hJt9a~tS0V_?y~9$$1^2`z;L3NEd0@XnEd|vaIONb+cDqXR tx}Pk-=@thkM;=tpoW~0X5AvT<2|D*!Ug?V*00-McZs-_kmuuQR{a^0u57qzx literal 0 HcmV?d00001 diff --git a/mobile/app/src/main/grade2-playstore.png b/mobile/app/src/main/grade2-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..4142987ce864f56ce9a62368896b1398904e4f6f GIT binary patch literal 17078 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.id.link) + val underlinedText = SpannableString(link.text) + underlinedText.setSpan(UnderlineSpan(), 1, link.text.length, 0) - // Change statusBarColor when the back button is pressed (dialog dismissed) - requireActivity().window.statusBarColor = ContextCompat.getColor( - requireContext(), - R.color.primary - ) + link.text = underlinedText + makeTextViewClickable(link, "https://gitlab.com/Odweta", 1) + + + val srcLink = view.findViewById(R.id.sourceCode) + val underlinedText2 = SpannableString(srcLink.text) + underlinedText2.setSpan(UnderlineSpan(), 1, srcLink.text.length, 0) + + srcLink.text = underlinedText2 + makeTextViewClickable(srcLink, "https://gitlab.com/Odweta/solen") + + return view } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -40,4 +57,27 @@ class AboutFragment : DialogFragment() { return dialog } + + private fun makeTextViewClickable(link: TextView, url: String, offset: Int = 0) { + val clickableSpan = object : ClickableSpan() { + override fun onClick(widget: View) { + if (Vars.internetAvail) { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(intent) + } else { + Toast.makeText( + requireContext(), + "Bez připojení k internetu.", + Toast.LENGTH_SHORT + ).show() + } + } + } + + val spannable = Spannable.Factory.getInstance().newSpannable(link.text) + spannable.setSpan(clickableSpan, offset, link.text.length, Spannable.SPAN_COMPOSING) + + link.text = spannable + link.movementMethod = LinkMovementMethod.getInstance() + } } \ No newline at end of file diff --git a/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt b/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt index eaf80da..85fec22 100644 --- a/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt +++ b/mobile/app/src/main/java/com/odweta/solen/CalWeekFragment.kt @@ -18,6 +18,7 @@ import android.widget.ScrollView import android.widget.Space import android.widget.TextView import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle @@ -78,6 +79,8 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { return view } private fun createDayView(day: Day, rootLayout: LinearLayout, resources: Resources) { + val customFont = context?.let { ResourcesCompat.getFont(it, R.font.roboto) } + val scrollView = ScrollView(requireContext()) val dayLayout = LinearLayout(requireContext()) @@ -85,6 +88,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val nameDateTextView = TextView(requireContext()) val nameDateString = day.name + " " + day.date + nameDateTextView.typeface = customFont nameDateTextView.text = nameDateString nameDateTextView.textSize = 30f nameDateTextView.setTextColor( @@ -151,6 +155,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { ) val subjectNumberTextView = TextView(requireContext()) + subjectNumberTextView.typeface = customFont subjectNumberTextView.text = subj.number subjectNumberTextView.textSize = 30f subjectNumberTextView.setPadding(20, 20, 20, 20) @@ -180,6 +185,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { if (subj.name != "Volno") { subjectNameTextView.text = subj.name.uppercase() } + subjectNameTextView.typeface = customFont subjectNameTextView.textSize = 27f subjectNameTextView.setPadding(60, 35, 20, 35) subjectNameTextView.textAlignment = View.TEXT_ALIGNMENT_CENTER @@ -201,6 +207,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { subjectLayout.addView(subjectNameTextView) val subjectPlaceTextView = TextView(requireContext()) + subjectPlaceTextView.typeface = customFont subjectPlaceTextView.text = subj.place if (subj.free) { // underline @@ -232,6 +239,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val subjectTimeTextView = TextView(requireContext()) val subjectTimeString = subj.start + " - " + subj.end + subjectTimeTextView.typeface = customFont subjectTimeTextView.text = subjectTimeString subjectTimeTextView.textSize = 20f subjectTimeTextView.setPadding(10, 10, 20, 10) @@ -245,6 +253,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val subjectTeacherTextView = TextView(requireContext()) subjectTeacherTextView.text = subj.teacher + subjectTeacherTextView.typeface = customFont subjectTeacherTextView.textSize = 15f subjectTeacherTextView.setPadding(10, 10, 20, 10) subjectTeacherTextView.textAlignment = View.TEXT_ALIGNMENT_TEXT_END @@ -332,6 +341,7 @@ class DayFragment(private val position: Int) : Fragment(R.layout.fragment_day) { val endTime = day.subjects[day.subjects.size - 1].end val dayEndString = "Den končí v $endTime" dayEndTextView.text = dayEndString + dayEndTextView.typeface = customFont dayEndTextView.textSize = 20f dayEndTextView.setPadding(0, 30, 0, 30) dayEndTextView.textAlignment = View.TEXT_ALIGNMENT_CENTER diff --git a/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt b/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt index 732c55d..7b7234f 100644 --- a/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt +++ b/mobile/app/src/main/java/com/odweta/solen/MainActivity.kt @@ -2,11 +2,7 @@ package com.odweta.solen import android.content.Context import android.content.Intent -import android.graphics.ImageDecoder -import android.graphics.drawable.AnimatedImageDrawable import android.os.Bundle -import android.view.Menu -import android.view.MenuItem import android.widget.Button import android.widget.EditText import android.widget.ImageView @@ -14,9 +10,25 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope +import com.bumptech.glide.Glide +import com.google.android.material.bottomnavigation.BottomNavigationView +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.json.JSONObject class MainActivity : AppCompatActivity() { + private var week: List = mutableListOf() + private var toastShowing: Boolean = false + private var toastShown: Boolean = false + private var toast2Shown: Boolean = false + private var done: Boolean = false + private lateinit var toolbar: androidx.appcompat.widget.Toolbar + private var role: String = " - Student" + private lateinit var navbar: BottomNavigationView + + // @section COMPANION companion object { fun quit(context: Context) { @@ -51,55 +63,6 @@ class MainActivity : AppCompatActivity() { } } - // Override onCreateOptionsMenu to handle menu item clicks - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_main, menu) - return true - } - - // Override onOptionsItemSelected to handle menu item clicks - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - /*R.id.item_refresh -> { - lifecycleScope.launch { - launch() - } - return true - }*/ - - // TODO: IMPLEMENT MARKS/GRADES - /*R.id.item_marks -> { - showMarksScreen() - - return true - }*/ - - R.id.item_sign_in -> { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) - SignInFragment().show(supportFragmentManager, "fragment_sign_in") - return true - } - - R.id.item_settings -> { - showSettingsScreen() - return true - } - - R.id.item_sign_out -> { - Dialogs.SignOut(this).show() - return true - } - - R.id.item_about -> { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) - AboutFragment().show(supportFragmentManager, "fragment_about") - return true - } - } - - return super.onOptionsItemSelected(item) - } - @@ -132,12 +95,61 @@ class MainActivity : AppCompatActivity() { } private fun setSignInButtonOnClick() { - window.statusBarColor = ContextCompat.getColor(this, R.color.black) findViewById