From dda64489d7a072d9c0a35c5e2092949277d12de0 Mon Sep 17 00:00:00 2001 From: Adam Kasprzycki <66315787+santoni0@users.noreply.github.com> Date: Sun, 16 Oct 2022 00:10:00 +0200 Subject: [PATCH 01/37] Material 3 theme and color support, filled cards --- .../ui/home/cards/HomeTimetableCard.kt | 6 +- app/src/main/res/layout/card_home.xml | 4 +- .../res/layout/fragment_agenda_default.xml | 2 +- app/src/main/res/values/attrs.xml | 2 +- app/src/main/res/values/colors.xml | 65 ++++++++++++++++ app/src/main/res/values/styles.xml | 76 +++++++++++++------ 6 files changed, 126 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt index ab297ef8..a7392be2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt @@ -90,21 +90,21 @@ class HomeTimetableCard( b.settings.setImageDrawable( IconicsDrawable(activity, CommunityMaterial.Icon.cmd_cog_outline).apply { - colorAttr(activity, R.attr.colorIcon) + colorAttr(activity, R.attr.colorOnPrimaryContainer) sizeDp = 24 } ) b.bellSync.setImageDrawable( IconicsDrawable(activity, SzkolnyFont.Icon.szf_alarm_bell_outline).apply { - colorAttr(activity, R.attr.colorIcon) + colorAttr(activity, R.attr.colorOnPrimaryContainer) sizeDp = 24 } ) b.showCounter.setImageDrawable( IconicsDrawable(activity, CommunityMaterial.Icon2.cmd_fullscreen).apply { - colorAttr(activity, R.attr.colorIcon) + colorAttr(activity, R.attr.colorOnPrimaryContainer) sizeDp = 24 } ) diff --git a/app/src/main/res/layout/card_home.xml b/app/src/main/res/layout/card_home.xml index f013726b..123d591d 100644 --- a/app/src/main/res/layout/card_home.xml +++ b/app/src/main/res/layout/card_home.xml @@ -9,4 +9,6 @@ android:layout_marginHorizontal="16dp" android:layout_marginVertical="8dp" android:clickable="true" - android:focusable="true" /> + android:focusable="true" + android:background="?colorSurfaceVariant" + style="?attr/materialCardViewFilledStyle" /> diff --git a/app/src/main/res/layout/fragment_agenda_default.xml b/app/src/main/res/layout/fragment_agenda_default.xml index 8cddf0c7..6bb863a6 100644 --- a/app/src/main/res/layout/fragment_agenda_default.xml +++ b/app/src/main/res/layout/fragment_agenda_default.xml @@ -24,7 +24,7 @@ agendaCalendar:calendarHeaderColor="@color/colorSurface_6dp" agendaCalendar:calendarHeaderTextColor="?colorOnSurface" agendaCalendar:calendarPastDayTextColor="?android:textColorSecondary" - agendaCalendar:fabColor="?colorFab" + agendaCalendar:fabColor="?colorPrimaryContainer" agendaCalendar:layout_constraintBottom_toBottomOf="parent" agendaCalendar:layout_constraintEnd_toEndOf="parent" agendaCalendar:layout_constraintHorizontal_bias="1.0" diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 55e0d3b5..6f783d0b 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -5,5 +5,5 @@ - + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3c17d618..3c8029d7 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,5 +1,70 @@ + + + + #2196f3 + #0061A4 + #FFFFFF + #D1E4FF + #001D36 + #535F70 + #FFFFFF + #D7E3F7 + #101C2B + #6B5778 + #FFFFFF + #F2DAFF + #251431 + #BA1A1A + #FFDAD6 + #FFFFFF + #410002 + #FDFCFF + #1A1C1E + #FDFCFF + #1A1C1E + #DFE2EB + #43474E + #73777F + #F1F0F4 + #2F3033 + #9ECAFF + #000000 + #0061A4 + #0061A4 + + + #9ECAFF + #003258 + #00497D + #D1E4FF + #BBC7DB + #253140 + #3B4858 + #D7E3F7 + #D6BEE4 + #3B2948 + #523F5F + #F2DAFF + #FFB4AB + #93000A + #690005 + #FFDAD6 + #1A1C1E + #E2E2E6 + #1A1C1E + #E2E2E6 + #43474E + #C3C7CF + #8D9199 + #1A1C1E + #E2E2E6 + #0061A4 + #000000 + #9ECAFF + #9ECAFF + #2196F3 #1976D2 #6EC6FF diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4f22fc81..dd709d59 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -98,20 +98,35 @@ - - - + diff --git a/app/src/main/res/values-v31/styles.xml b/app/src/main/res/values-v31/styles.xml new file mode 100644 index 00000000..b048a142 --- /dev/null +++ b/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3c8029d7..ac8ccf19 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,69 +1,70 @@ - + - #2196f3 - #0061A4 + #6750A4 #FFFFFF - #D1E4FF - #001D36 - #535F70 + #EADDFF + #21005D + #625B71 #FFFFFF - #D7E3F7 - #101C2B - #6B5778 + #E8DEF8 + #1D192B + #7D5260 #FFFFFF - #F2DAFF - #251431 - #BA1A1A - #FFDAD6 + #FFD8E4 + #31111D + #B3261E #FFFFFF - #410002 - #FDFCFF - #1A1C1E - #FDFCFF - #1A1C1E - #DFE2EB - #43474E - #73777F - #F1F0F4 - #2F3033 - #9ECAFF + #F9DEDC + #410E0B + #79747E + #FFFBFE + #1C1B1F + #FFFBFE + #1C1B1F + #E7E0EC + #49454F + #313033 + #F4EFF4 + #D0BCFF #000000 - #0061A4 - #0061A4 + #6750A4 + #CAC4D0 + #000000 - #9ECAFF - #003258 - #00497D - #D1E4FF - #BBC7DB - #253140 - #3B4858 - #D7E3F7 - #D6BEE4 - #3B2948 - #523F5F - #F2DAFF - #FFB4AB - #93000A - #690005 - #FFDAD6 - #1A1C1E - #E2E2E6 - #1A1C1E - #E2E2E6 - #43474E - #C3C7CF - #8D9199 - #1A1C1E - #E2E2E6 - #0061A4 + #D0BCFF + #381E72 + #4F378B + #EADDFF + #CCC2DC + #332D41 + #4A4458 + #E8DEF8 + #EFB8C8 + #492532 + #633B48 + #FFD8E4 + #F2B8B5 + #601410 + #8C1D18 + #F9DEDC + #938F99 + #1C1B1F + #E6E1E5 + #1C1B1F + #E6E1E5 + #49454F + #CAC4D0 + #E6E1E5 + #313033 + #6750A4 #000000 - #9ECAFF - #9ECAFF + #D0BCFF + #49454F + #000000 #2196F3 #1976D2 @@ -74,9 +75,7 @@ #fff3f3f3 #ffaaaaaa #ffb2b2b2 - #3e7f7f7f - #ffffffff #ffffffff diff --git a/app/src/main/res/values/ic_launcher_monochrome_background.xml b/app/src/main/res/values/ic_launcher_monochrome_background.xml new file mode 100644 index 00000000..a6ed0b97 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_monochrome_background.xml @@ -0,0 +1,4 @@ + + + #000000 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8f81073..1af631d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -144,6 +144,7 @@ Konfiguruj Skopiowano do schowka Skopiuj do schowka + Odliczanie Synchronizuj Jeśli aplikacja nie chce się uruchomić, możesz spróbować ponownie pobrać dane. Kliknij na przycisk, a następnie Restartuj aplikację. Szczegóły błędu @@ -510,8 +511,8 @@ Zapisz do kalendarza Dodaj/usuń karty Możesz usunąć karty przesuwając w lewo lub zmienić ich kolejność, przytrzymując na kartę. - %s • Numer w dzienniku to %d - %s • Kliknij, aby ustawić swój numerek. + Numer w dzienniku to %s + Kliknij, aby ustawić swój numerek. Dnia %s szczęśliwy numerek to %d. Brak informacji o szczęśliwym numerku. Nie ma dzisiaj szczęśliwego numerka. @@ -535,7 +536,7 @@ Pobierz Plan lekcji na tydzień %s nie został jeszcze pobrany. Brak planu lekcji - Plan lekcji nie został opublikowany przez szkołę.\n\nSkontaktuj się z wychowawcą. + Plan lekcji nie został opublikowany przez szkołę. Skontaktuj się z wychowawcą. Dzisiaj Jutro (%1$s) Edytuj @@ -737,7 +738,7 @@ Napisz wiadomość… Napisz wiadomość Do - %s\n%s + %s • %s Czy chcesz usunąć wiadomość? Spowoduje to przeniesienie wiadomości do zakładki \"Usunięte\" w aplikacji. Zmiany nie wpłyną na wiadomość w e-dzienniku (nie zostanie ona tam usunięta). Błąd pobierania wiadomości diff --git a/app/src/play-not/java/pl/szczodrzynski/edziennik/sync/UpdateDownloaderService.kt b/app/src/play-not/java/pl/szczodrzynski/edziennik/sync/UpdateDownloaderService.kt index 93881939..fc9583a1 100644 --- a/app/src/play-not/java/pl/szczodrzynski/edziennik/sync/UpdateDownloaderService.kt +++ b/app/src/play-not/java/pl/szczodrzynski/edziennik/sync/UpdateDownloaderService.kt @@ -75,6 +75,7 @@ class UpdateDownloaderService : IntentService(UpdateDownloaderService::class.jav } } + @Deprecated("Deprecated in Java") override fun onHandleIntent(intent: Intent?) { val app = application as App val update = App.config.update ?: return diff --git a/build.gradle b/build.gradle index 7b8133d1..811df234 100644 --- a/build.gradle +++ b/build.gradle @@ -2,17 +2,17 @@ buildscript { ext { - kotlin_version = '1.6.10' + kotlin_version = '1.9.10' release = [ - versionName: "4.12.1", - versionCode: 4120199 + versionName: "4.13.6", + versionCode: 4130699 ] setup = [ - compileSdk: 33, + compileSdk: 34, minSdk : 16, - targetSdk : 33 + targetSdk : 34 ] } @@ -21,7 +21,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:8.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.14' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' diff --git a/gradle.properties b/gradle.properties index 8de50581..ff0578a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,21 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit +## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html +# # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -android.enableJetifier=true -android.useAndroidX=true -org.gradle.jvmargs=-Xmx1536m +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +#Tue Aug 22 15:52:38 CEST 2023 +android.defaults.buildfeatures.buildconfig=true +android.enableJetifier=true +android.nonFinalResIds=false +android.nonTransitiveRClass=false +android.useAndroidX=true +org.gradle.caching=true +org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e004eb08..ffc5f341 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Feb 17 14:04:38 CET 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 1540a6cfcd28403db3db8fa87496500a42f3aedb Mon Sep 17 00:00:00 2001 From: sadorowo Date: Wed, 12 Jun 2024 21:12:02 +0200 Subject: [PATCH 06/37] fix M3 UI code & upgrade kotlin --- app/build.gradle | 11 ++++++----- .../edziennik/ui/settings/SettingsUtil.kt | 1 - build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce7b2dd1..72e8e8c7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,8 +148,8 @@ dependencies { // Language cores implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.multidex:multidex:2.0.1" - implementation files('libs/navlib-debug.aar') - implementation files('libs/navlib-font-debug.aar') +// implementation files('libs/navlib-debug.aar') +// implementation files('libs/navlib-font-debug.aar') coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5" // Android Jetpack @@ -185,17 +185,18 @@ dependencies { implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2" // Szkolny.eu libraries/forks + implementation "com.github.santoni0:NavLib:323288f" implementation "eu.szkolny:android-snowfall:1ca9ea2da3" - // implementation "eu.szkolny:agendacalendarview:1.0.4" + implementation "eu.szkolny:agendacalendarview:1.0.4" implementation "eu.szkolny:cafebar:5bf0c618de" implementation "eu.szkolny.fslogin:lib:2.0.0" - // implementation "eu.szkolny:material-about-library:1d5ebaf47c" + implementation "eu.szkolny:material-about-library:1d5ebaf47c" implementation "eu.szkolny:mhttp:af4b62e6e9" implementation "eu.szkolny:nachos:0e5dfcaceb" implementation "eu.szkolny.selective-dao:annotation:27f8f3f194" officialImplementation "eu.szkolny:ssl-provider:1.0.0" unofficialImplementation "eu.szkolny:ssl-provider:1.0.0" - // implementation "pl.szczodrzynski:navlib:0.8.0" + implementation "pl.szczodrzynski:numberslidingpicker:2921225f76" implementation "pl.szczodrzynski:recyclertablayout:700f980584" implementation "pl.szczodrzynski:tachyon:551943a6b5" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/SettingsUtil.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/SettingsUtil.kt index 84252fff..779d3d02 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/SettingsUtil.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/SettingsUtil.kt @@ -44,7 +44,6 @@ class SettingsUtil( .title(titleRes ?: 0) .cardColor(backgroundColor ?: 0) .theme(theme ?: 0) - .outline(false) .build() card.items.addAll(items) diff --git a/build.gradle b/build.gradle index 811df234..52603168 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - kotlin_version = '1.9.10' + kotlin_version = '1.9.24' release = [ versionName: "4.13.6", @@ -11,7 +11,7 @@ buildscript { setup = [ compileSdk: 34, - minSdk : 16, + minSdk : 21, targetSdk : 34 ] } @@ -21,7 +21,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.1.1' + classpath 'com.android.tools.build:gradle:8.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.14' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffc5f341..4168db90 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Feb 17 14:04:38 CET 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 225070abd9c90238f31ccbe6522eb990d8898887 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Wed, 12 Jun 2024 21:33:34 +0200 Subject: [PATCH 07/37] update dependencies --- app/build.gradle | 28 ++++++++++++++-------------- app/src/main/AndroidManifest.xml | 2 ++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 72e8e8c7..ceacc39b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,28 +150,28 @@ dependencies { implementation "androidx.multidex:multidex:2.0.1" // implementation files('libs/navlib-debug.aar') // implementation files('libs/navlib-font-debug.aar') - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5" + coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4" // Android Jetpack - implementation "androidx.appcompat:appcompat:1.5.1" + implementation "androidx.appcompat:appcompat:1.7.0" implementation "androidx.cardview:cardview:1.0.0" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "androidx.core:core-ktx:1.9.0" - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - implementation "androidx.navigation:navigation-fragment-ktx:2.5.2" - implementation "androidx.recyclerview:recyclerview:1.2.1" - implementation "androidx.room:room-runtime:2.4.3" - implementation "androidx.work:work-runtime-ktx:2.7.1" - kapt "androidx.room:room-compiler:2.4.3" + implementation "androidx.core:core-ktx:1.13.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.2" + implementation "androidx.navigation:navigation-fragment-ktx:2.7.7" + implementation "androidx.recyclerview:recyclerview:1.3.2" + implementation "androidx.room:room-runtime:2.6.1" + implementation "androidx.work:work-runtime-ktx:2.9.0" + kapt "androidx.room:room-compiler:2.6.1" // Google design libs - implementation "com.google.android.material:material:1.11.0-beta01" + implementation "com.google.android.material:material:1.12.0" implementation "com.google.android.flexbox:flexbox:3.0.0" // Play Services/Firebase - implementation "com.google.android.gms:play-services-wearable:17.1.0" + implementation "com.google.android.gms:play-services-wearable:18.2.0" implementation("com.google.firebase:firebase-core") { version { strictly "19.0.2" } } - implementation "com.google.firebase:firebase-crashlytics:18.2.13" + implementation "com.google.firebase:firebase-crashlytics:19.0.1" implementation("com.google.firebase:firebase-messaging") { version { strictly "20.1.3" } } // OkHttp, Retrofit, Gson, Jsoup @@ -179,7 +179,7 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0" implementation "com.squareup.retrofit2:converter-scalars:2.9.0" - implementation 'com.google.code.gson:gson:2.8.8' + implementation 'com.google.code.gson:gson:2.10.1' implementation 'org.jsoup:jsoup:1.14.3' implementation "pl.droidsonroids:jspoon:1.3.2" implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2" @@ -257,5 +257,5 @@ dependencies { debugImplementation 'net.yslibrary.licenseadapter:licenseadapter:3.0.0' - testImplementation 'junit:junit:4.13' + testImplementation 'junit:junit:4.13.2' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c66eb3a..172ed891 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,9 +9,11 @@ + + From c123b28652baa6f4d3e4bf57ed5c7bf79314cc74 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 09:44:42 +0200 Subject: [PATCH 08/37] fix missing Intent receiver flags for Tiramisu+ --- app/build.gradle | 34 +++++++++---------- .../szczodrzynski/edziennik/MainActivity.kt | 9 ++++- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ceacc39b..5d0e7564 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,34 +144,32 @@ tasks.whenTaskAdded { task -> } dependencies { - debugImplementation fileTree(include: ['*.jar','*.aar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'libs') // Language cores implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.multidex:multidex:2.0.1" -// implementation files('libs/navlib-debug.aar') -// implementation files('libs/navlib-font-debug.aar') - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.0.4" + coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5" // Android Jetpack - implementation "androidx.appcompat:appcompat:1.7.0" + implementation "androidx.appcompat:appcompat:1.5.1" implementation "androidx.cardview:cardview:1.0.0" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "androidx.core:core-ktx:1.13.1" - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.2" - implementation "androidx.navigation:navigation-fragment-ktx:2.7.7" - implementation "androidx.recyclerview:recyclerview:1.3.2" - implementation "androidx.room:room-runtime:2.6.1" - implementation "androidx.work:work-runtime-ktx:2.9.0" - kapt "androidx.room:room-compiler:2.6.1" + implementation "androidx.core:core-ktx:1.9.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" + implementation "androidx.navigation:navigation-fragment-ktx:2.5.2" + implementation "androidx.recyclerview:recyclerview:1.2.1" + implementation "androidx.room:room-runtime:2.4.3" + implementation "androidx.work:work-runtime-ktx:2.7.1" + kapt "androidx.room:room-compiler:2.4.3" // Google design libs - implementation "com.google.android.material:material:1.12.0" + implementation "com.google.android.material:material:1.11.0-beta01" implementation "com.google.android.flexbox:flexbox:3.0.0" // Play Services/Firebase - implementation "com.google.android.gms:play-services-wearable:18.2.0" + implementation "com.google.android.gms:play-services-wearable:17.1.0" implementation("com.google.firebase:firebase-core") { version { strictly "19.0.2" } } - implementation "com.google.firebase:firebase-crashlytics:19.0.1" + implementation "com.google.firebase:firebase-crashlytics:18.2.13" implementation("com.google.firebase:firebase-messaging") { version { strictly "20.1.3" } } // OkHttp, Retrofit, Gson, Jsoup @@ -179,7 +177,7 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0" implementation "com.squareup.retrofit2:converter-scalars:2.9.0" - implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.google.code.gson:gson:2.8.8' implementation 'org.jsoup:jsoup:1.14.3' implementation "pl.droidsonroids:jspoon:1.3.2" implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2" @@ -215,7 +213,7 @@ dependencies { implementation "com.daimajia.swipelayout:library:1.2.0@aar" implementation "com.github.Applandeo:Material-Calendar-View:15de569cbc" // https://github.com/Applandeo/Material-Calendar-View implementation "com.github.CanHub:Android-Image-Cropper:2.2.2" // https://github.com/CanHub/Android-Image-Cropper - implementation "com.github.ChuckerTeam.Chucker:library:3.0.1" // https://github.com/ChuckerTeam/chucker + implementation "com.github.ChuckerTeam.Chucker:library:3.5.2" // https://github.com/ChuckerTeam/chucker implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2" // https://github.com/antonKozyriatskyi/CircularProgressIndicator implementation "com.github.bassaer:chatmessageview:2.0.1" // https://github.com/bassaer/ChatMessageView implementation "com.github.hypertrack:hyperlog-android:0.0.10" // https://github.com/hypertrack/hyperlog-android @@ -257,5 +255,5 @@ dependencies { debugImplementation 'net.yslibrary.licenseadapter:licenseadapter:3.0.0' - testImplementation 'junit:junit:4.13.2' + testImplementation 'junit:junit:4.13' } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index 32b20e76..2f633ffe 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -1,5 +1,6 @@ package pl.szczodrzynski.edziennik +import android.annotation.SuppressLint import android.app.ActivityManager import android.content.BroadcastReceiver import android.content.Context @@ -986,7 +987,13 @@ class MainActivity : AppCompatActivity(), CoroutineScope { d(TAG, "Activity resumed") val filter = IntentFilter() filter.addAction(Intent.ACTION_MAIN) - registerReceiver(intentReceiver, filter) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) + registerReceiver(intentReceiver, filter, RECEIVER_NOT_EXPORTED) + else + @Suppress("UnspecifiedRegisterReceiverFlag") + registerReceiver(intentReceiver, filter) + EventBus.getDefault().register(this) super.onResume() } From 4b4901e440aa79a49121ceefcf180f521626d267 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 18:57:40 +0200 Subject: [PATCH 09/37] fix kapt errors related to SelectiveDAO + migrate BuildConfig --- app/build.gradle | 5 +++-- gradle.properties | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5926d556..a9eaea45 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -89,6 +89,7 @@ android { buildFeatures { dataBinding = true viewBinding = true + buildConfig true } compileOptions { coreLibraryDesugaringEnabled = true @@ -192,14 +193,14 @@ dependencies { implementation "eu.szkolny:material-about-library:1d5ebaf47c" implementation "eu.szkolny:mhttp:af4b62e6e9" implementation "eu.szkolny:nachos:0e5dfcaceb" - implementation "eu.szkolny.selective-dao:annotation:27f8f3f194" + implementation "eu.szkolny.selective-dao:annotation:6a337f9" officialImplementation "eu.szkolny:ssl-provider:1.0.0" unofficialImplementation "eu.szkolny:ssl-provider:1.0.0" implementation "pl.szczodrzynski:numberslidingpicker:2921225f76" implementation "pl.szczodrzynski:recyclertablayout:700f980584" implementation "pl.szczodrzynski:tachyon:551943a6b5" - kapt "eu.szkolny.selective-dao:codegen:27f8f3f194" + kapt "eu.szkolny.selective-dao:codegen:6a337f9" // Iconics & related implementation "com.mikepenz:iconics-core:5.3.2" diff --git a/gradle.properties b/gradle.properties index ff0578a7..aabcac3f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,6 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true #Tue Aug 22 15:52:38 CEST 2023 -android.defaults.buildfeatures.buildconfig=true android.enableJetifier=true android.nonFinalResIds=false android.nonTransitiveRClass=false From ab3af676638a21e874c6e8d68167f329bf60b270 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 19:17:18 +0200 Subject: [PATCH 10/37] adapt code to updated dependencies + align lessons (based by szkolny-eu/szkolny-android#196) --- .../main/java/pl/szczodrzynski/edziennik/App.kt | 3 ++- .../edziennik/config/DelegateConfig.kt | 2 +- .../data/api/edziennik/vulcan/data/VulcanHebe.kt | 4 +--- .../pl/szczodrzynski/edziennik/sync/WorkerUtils.kt | 12 ++++++++---- .../edziennik/ui/debug/LabProfileFragment.kt | 2 +- .../edziennik/ui/home/cards/HomeTimetableCard.kt | 8 +++++++- .../edziennik/ui/timetable/TimetableFragment.kt | 14 ++++++++++++-- 7 files changed, 32 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt index 74e23d88..a52b958b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt @@ -124,7 +124,8 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope { private val job = Job() override val coroutineContext: CoroutineContext get() = job + Dispatchers.Main - override fun getWorkManagerConfiguration() = Configuration.Builder() + + override val workManagerConfiguration: Configuration = Configuration.Builder() .setMinimumLoggingLevel(Log.VERBOSE) .build() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt index 91dac668..74880afb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt @@ -144,7 +144,7 @@ class ConfigDelegate( java.lang.Float::class.java -> value.toFloatOrNull() // enums, maps & collections else -> when { - Enum::class.java.isAssignableFrom(type) -> value.toIntOrNull()?.toEnum(type) as Enum<*> + Enum::class.java.isAssignableFrom(type) -> value.toIntOrNull()?.toEnum(type) as Enum Collection::class.java.isAssignableFrom(type) -> { val array = value.toJsonArray() val genericType = getGenericType() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt index 2a11386c..cf7272d5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt @@ -391,7 +391,7 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) { fun apiGetList( tag: String, endpoint: String, - filterType: HebeFilterType? = null, + filterType: HebeFilterType = HebeFilterType.BY_PUPIL, dateFrom: Date? = null, dateTo: Date? = null, lastSync: Long? = null, @@ -424,8 +424,6 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) { HebeFilterType.BY_MESSAGEBOX -> { query["box"] = messageBox ?: data.messageBoxKey ?: "" } - - null -> TODO() } if (dateFrom != null) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/sync/WorkerUtils.kt b/app/src/main/java/pl/szczodrzynski/edziennik/sync/WorkerUtils.kt index e8266a64..c54d699d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/sync/WorkerUtils.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/sync/WorkerUtils.kt @@ -23,20 +23,24 @@ object WorkerUtils { inline fun scheduleNext(app: App, rescheduleIfFailedFound: Boolean = true, crossinline onReschedule: () -> Unit) { AsyncTask.execute { val workManager = WorkManager.getInstance(app) as WorkManagerImpl - val scheduledWork = workManager.workDatabase.workSpecDao().scheduledWork + val scheduledWork = workManager.workDatabase.workSpecDao().getScheduledWork() as MutableList; + scheduledWork.forEach { - Utils.d("WorkerUtils", "Work: ${it.id} at ${(it.periodStartTime + it.initialDelay).formatDate()}. State = ${it.state} (finished = ${it.state.isFinished})") + Utils.d("WorkerUtils", "Work: ${it.id} at ${it.calculateNextRunTime().formatDate()}. State = ${it.state} (finished = ${it.state.isFinished})") } + // remove finished work and other than SyncWorker scheduledWork.removeAll { it.workerClassName != SyncWorker::class.java.canonicalName || it.isPeriodic || it.state.isFinished } Utils.d("WorkerUtils", "Found ${scheduledWork.size} unfinished work") + // remove all enqueued work that had to (but didn't) run at some point in the past (at least 1min ago) - val failedWork = scheduledWork.filter { it.state == WorkInfo.State.ENQUEUED && it.periodStartTime + it.initialDelay < System.currentTimeMillis() - 1 * MINUTE * 1000 } + val failedWork = scheduledWork.filter { it.state == WorkInfo.State.ENQUEUED && it.calculateNextRunTime() < System.currentTimeMillis() - 1 * MINUTE * 1000 } Utils.d("WorkerUtils", "${failedWork.size} work requests failed to start (out of ${scheduledWork.size} requests)") + if (rescheduleIfFailedFound) { if (failedWork.isNotEmpty()) { Utils.d("WorkerUtils", "App Manager detected!") - EventBus.getDefault().postSticky(AppManagerDetectedEvent(failedWork.map { it.periodStartTime + it.initialDelay })) + EventBus.getDefault().postSticky(AppManagerDetectedEvent(failedWork.map { it.calculateNextRunTime() })) } if (scheduledWork.size - failedWork.size < 1) { Utils.d("WorkerUtils", "No pending work found, scheduling next:") diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabProfileFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabProfileFragment.kt index f4267a25..83e1703f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabProfileFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/debug/LabProfileFragment.kt @@ -129,7 +129,7 @@ class LabProfileFragment : LazyFragment(), CoroutineScope { is String -> input is Long -> input.toLong() is Double -> input.toDouble() - is Enum<*> -> input.toInt().toEnum(objVal::class.java) + is Enum<*> -> input.toInt().toEnum(objVal::class.java) as Enum else -> input } field.set(parent, newVal) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt index fa2d0381..2d8109b9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/home/cards/HomeTimetableCard.kt @@ -328,7 +328,7 @@ class HomeTimetableCard( for (lesson in nextLessons) { text += listOf( - lesson.displayStartTime?.stringHM, + adjustTimeWidth(lesson.displayStartTime?.stringHM), lesson.subjectSpannable ).concat(" ") } @@ -337,6 +337,12 @@ class HomeTimetableCard( b.nextLessons.text = text.concat("\n") }} + private fun adjustTimeWidth(time: String?) = when { + time == null -> "" + time.length == 4 -> " $time " + else -> "$time " + } + private val LessonFull?.subjectSpannable: CharSequence get() = if (this == null) "?" else when { hasReplacingNotes() -> getNoteSubstituteText(showNotes = true) ?: "?" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/timetable/TimetableFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/timetable/TimetableFragment.kt index d4e710ef..925dfd24 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/timetable/TimetableFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/timetable/TimetableFragment.kt @@ -4,11 +4,13 @@ package pl.szczodrzynski.edziennik.ui.timetable +import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.AsyncTask +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -90,8 +92,16 @@ class TimetableFragment : Fragment(), CoroutineScope { } override fun onResume() { super.onResume() - activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_SCROLL_TO_DATE)) - activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_RELOAD_PAGES)) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_SCROLL_TO_DATE ), + Context.RECEIVER_NOT_EXPORTED) + activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_RELOAD_PAGES), + Context.RECEIVER_NOT_EXPORTED) + } else @Suppress("UnspecifiedRegisterReceiverFlag") { + activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_SCROLL_TO_DATE)) + activity.registerReceiver(broadcastReceiver, IntentFilter(ACTION_RELOAD_PAGES)) + } } override fun onPause() { super.onPause() From d2789342dadd246414984f26bb9af3e908780672 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 22:47:49 +0200 Subject: [PATCH 11/37] fix: no query filtering --- .../edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt index cf7272d5..5031393f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanHebe.kt @@ -391,7 +391,7 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) { fun apiGetList( tag: String, endpoint: String, - filterType: HebeFilterType = HebeFilterType.BY_PUPIL, + filterType: HebeFilterType? = null, dateFrom: Date? = null, dateTo: Date? = null, lastSync: Long? = null, @@ -424,6 +424,7 @@ open class VulcanHebe(open val data: DataVulcan, open val lastSync: Long?) { HebeFilterType.BY_MESSAGEBOX -> { query["box"] = messageBox ?: data.messageBoxKey ?: "" } + else -> {} } if (dateFrom != null) From eca2028595cd0f62368ec84dd4fc9e60140efa6b Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 22:53:32 +0200 Subject: [PATCH 12/37] fix: duplicated items in about card --- .../edziennik/ui/settings/cards/SettingsAboutCard.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsAboutCard.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsAboutCard.kt index c398cc3d..f0e1d309 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsAboutCard.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/settings/cards/SettingsAboutCard.kt @@ -47,9 +47,7 @@ class SettingsAboutCard(util: SettingsUtil) : SettingsCard(util), CoroutineScope items = ::getItems, itemsMore = ::getItemsMore, backgroundColor = R.attr.colorPrimaryContainer.resolveAttr(activity) - ).also { - it.items.addAll(getItems(it)) - } + ) private val versionDetailsItem by lazy { util.createActionItem( From b148f7197fdca2ab81d457ab5c70dc1901f102a7 Mon Sep 17 00:00:00 2001 From: sadorowo Date: Thu, 13 Jun 2024 22:58:47 +0200 Subject: [PATCH 13/37] fix: "Back button opens drawer" (redundant super call) --- app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index ad59bf43..c1dbbb58 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -1,5 +1,6 @@ package pl.szczodrzynski.edziennik +import android.annotation.SuppressLint import android.app.ActivityManager import android.content.BroadcastReceiver import android.content.Context @@ -1211,9 +1212,9 @@ class MainActivity : AppCompatActivity(), CoroutineScope { drawer.addProfileSettings(*drawerProfiles.toTypedArray()) } + @SuppressLint("MissingSuperCall") @Deprecated("Deprecated in Java") override fun onBackPressed() { - super.onBackPressed() if (App.config.ui.openDrawerOnBackPressed) { if (drawer.isOpen) navigateUp() From beed9f858fdedee5aa7edbaafd74c6cdbf1eaffe Mon Sep 17 00:00:00 2001 From: sadorowo Date: Fri, 14 Jun 2024 06:27:25 +0200 Subject: [PATCH 14/37] fix: too small heading in agenda dialog --- app/src/main/res/values-v16/styles.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-v16/styles.xml b/app/src/main/res/values-v16/styles.xml index b3ce5d0c..cd2ef687 100644 --- a/app/src/main/res/values-v16/styles.xml +++ b/app/src/main/res/values-v16/styles.xml @@ -76,7 +76,7 @@ @style/AppTheme.MaterialAlertDialog.BodyText + \ No newline at end of file diff --git a/navlib/src/main/res/values/attrs.xml b/navlib/src/main/res/values/attrs.xml new file mode 100644 index 00000000..a239e4e4 --- /dev/null +++ b/navlib/src/main/res/values/attrs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/navlib/src/main/res/values/attrs_nav_view.xml b/navlib/src/main/res/values/attrs_nav_view.xml new file mode 100644 index 00000000..c6169965 --- /dev/null +++ b/navlib/src/main/res/values/attrs_nav_view.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/navlib/src/main/res/values/colors.xml b/navlib/src/main/res/values/colors.xml new file mode 100644 index 00000000..e881e7bd --- /dev/null +++ b/navlib/src/main/res/values/colors.xml @@ -0,0 +1,19 @@ + + + #202196f3 + #154FBC + + #ffffff + #242424 + #000000 + + #0dffffff + #12ffffff + #14ffffff + #17ffffff + #1cffffff + #1fffffff + #24ffffff + #26ffffff + #29ffffff + \ No newline at end of file diff --git a/navlib/src/main/res/values/dimens.xml b/navlib/src/main/res/values/dimens.xml new file mode 100644 index 00000000..3a8e4fd5 --- /dev/null +++ b/navlib/src/main/res/values/dimens.xml @@ -0,0 +1,4 @@ + + + 10sp + \ No newline at end of file diff --git a/navlib/src/main/res/values/strings.xml b/navlib/src/main/res/values/strings.xml new file mode 100644 index 00000000..6f67dcd6 --- /dev/null +++ b/navlib/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + NavLib + %1$s + diff --git a/navlib/src/main/res/values/styles.xml b/navlib/src/main/res/values/styles.xml new file mode 100644 index 00000000..6ad92c22 --- /dev/null +++ b/navlib/src/main/res/values/styles.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/settings.gradle b/settings.gradle index 02529180..d8939d3d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ rootProject.name='Szkolny.eu' -include ':app' +include ':app', ':navlib', ':navlib-font'