From acb5e2afd4d97e030ec4a34576a0d7a08231d217 Mon Sep 17 00:00:00 2001 From: Damian Czupryn <60961958+Daxxxis@users.noreply.github.com> Date: Tue, 9 Mar 2021 17:49:24 +0100 Subject: [PATCH 01/18] Replace dash mark with no data string in SchoolFragment (#1203) --- .../schoolandteachers/school/SchoolFragment.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt index 03ad7ba0..fba2f040 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/schoolandteachers/school/SchoolFragment.kt @@ -53,13 +53,14 @@ class SchoolFragment : BaseFragment(R.layout.fragment_sch override fun updateData(data: School) { with(binding) { - schoolName.text = data.name - schoolAddress.text = data.address.ifBlank { "-" } + val noDataString = getString(R.string.all_no_data) + schoolName.text = data.name.ifBlank { noDataString } + schoolAddress.text = data.address.ifBlank { noDataString } schoolAddressButton.visibility = if (data.address.isNotBlank()) VISIBLE else GONE - schoolTelephone.text = data.contact.ifBlank { "-" } + schoolTelephone.text = data.contact.ifBlank { noDataString } schoolTelephoneButton.visibility = if (data.contact.isNotBlank()) VISIBLE else GONE - schoolHeadmaster.text = data.headmaster - schoolPedagogue.text = data.pedagogue + schoolHeadmaster.text = data.headmaster.ifBlank { noDataString } + schoolPedagogue.text = data.pedagogue.ifBlank { noDataString } } } From ea4b299de64afa91e687f1087938b38a53c83586 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 12:39:01 +0000 Subject: [PATCH 02/18] Bump firebase-bom from 26.6.0 to 26.7.0 (#1209) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 6af83ab0..f4a9acae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -203,7 +203,7 @@ dependencies { implementation "io.github.wulkanowy:AppKillerManager:3.0.0" implementation 'me.xdrop:fuzzywuzzy:1.3.1' - playImplementation platform('com.google.firebase:firebase-bom:26.6.0') + playImplementation platform('com.google.firebase:firebase-bom:26.7.0') playImplementation 'com.google.firebase:firebase-analytics-ktx' playImplementation 'com.google.firebase:firebase-inappmessaging-display-ktx' playImplementation "com.google.firebase:firebase-inappmessaging-ktx" From 495b84204ca2416ebfdc658cc8a95a2dd8a622a3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 21:06:27 +0000 Subject: [PATCH 03/18] Bump work_hilt from 1.0.0-alpha03 to 1.0.0-beta01 (#1208) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f4a9acae..417a3ead 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,7 +139,7 @@ play { ext { work_manager = "2.5.0" - work_hilt = "1.0.0-alpha03" + work_hilt = "1.0.0-beta01" room = "2.3.0-beta02" chucker = "3.4.0" mockk = "1.10.6" From b76032044d5ef8abefd97e32c7fb6a7290d3b203 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 21:06:33 +0000 Subject: [PATCH 04/18] Bump activity-ktx from 1.2.0 to 1.2.1 (#1206) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 417a3ead..a3f305bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -155,7 +155,7 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' implementation "androidx.core:core-ktx:1.3.2" - implementation "androidx.activity:activity-ktx:1.2.0" + implementation "androidx.activity:activity-ktx:1.2.1" implementation "androidx.appcompat:appcompat:1.2.0" implementation "androidx.appcompat:appcompat-resources:1.2.0" implementation "androidx.fragment:fragment-ktx:1.3.0" From 3d467c43ba9d7407a334999f8aaf8c92e95cf89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Fri, 12 Mar 2021 22:07:27 +0100 Subject: [PATCH 05/18] Use new kotlin compiler backend (#1202) --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index a3f305bb..b02ab153 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -115,6 +115,7 @@ android { } kotlinOptions { + useIR = true jvmTarget = "1.8" freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn", "-Xjvm-default=all"] } From fa2cfc842794b5d4eda2d20e03d1048869157232 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 21:33:30 +0000 Subject: [PATCH 06/18] Bump room from 2.3.0-beta02 to 2.3.0-beta03 (#1207) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index b02ab153..af4e4af7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -141,7 +141,7 @@ play { ext { work_manager = "2.5.0" work_hilt = "1.0.0-beta01" - room = "2.3.0-beta02" + room = "2.3.0-beta03" chucker = "3.4.0" mockk = "1.10.6" moshi = "1.11.0" From 94957850c3e40e22cac5110e4f52538e5fb42317 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Mar 2021 21:50:59 +0000 Subject: [PATCH 07/18] Bump fragment-ktx from 1.3.0 to 1.3.1 (#1205) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index af4e4af7..0470ffb1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -159,7 +159,7 @@ dependencies { implementation "androidx.activity:activity-ktx:1.2.1" implementation "androidx.appcompat:appcompat:1.2.0" implementation "androidx.appcompat:appcompat-resources:1.2.0" - implementation "androidx.fragment:fragment-ktx:1.3.0" + implementation "androidx.fragment:fragment-ktx:1.3.1" implementation "androidx.annotation:annotation:1.1.0" implementation "androidx.multidex:multidex:2.0.1" From 8d7110735d3d6f3e980e4db1cd481d97f946ba19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 13 Mar 2021 20:13:37 +0100 Subject: [PATCH 08/18] Ignore no current student during avatar loading (#1210) --- .../java/io/github/wulkanowy/ui/modules/main/MainPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainPresenter.kt index 85777983..ffcfcb61 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainPresenter.kt @@ -113,7 +113,7 @@ class MainPresenter @Inject constructor( private fun showCurrentStudentAvatar() { val currentStudent = - studentsWitSemesters!!.single { it.student.isCurrent }.student + studentsWitSemesters?.singleOrNull { it.student.isCurrent }?.student ?: return view?.showStudentAvatar(currentStudent) } From 48249f30930dcbb1c450bc6ee34ab9314b0dc78f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 13 Mar 2021 20:13:48 +0100 Subject: [PATCH 09/18] Update kotlin coroutines (#1211) --- app/build.gradle | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0470ffb1..2d95b0ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,8 @@ apply plugin: 'dagger.hilt.android.plugin' apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'com.github.triplet.play' apply plugin: 'com.mikepenz.aboutlibraries.plugin' +apply plugin: 'com.google.gms.google-services' +apply plugin: 'com.huawei.agconnect' apply from: 'jacoco.gradle' apply from: 'sonarqube.gradle' apply from: 'hooks.gradle' @@ -153,7 +155,7 @@ dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3' implementation "androidx.core:core-ktx:1.3.2" implementation "androidx.activity:activity-ktx:1.2.1" @@ -240,6 +242,3 @@ dependencies { androidTestImplementation "io.mockk:mockk-android:$mockk" androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version" } - -apply plugin: 'com.google.gms.google-services' -apply plugin: 'com.huawei.agconnect' From be0445b227b1f4b4be1ab16953476e5bff08f838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Studzi=C5=84ski?= <48914870+studzinskik@users.noreply.github.com> Date: Sat, 13 Mar 2021 20:13:57 +0100 Subject: [PATCH 10/18] Change the absence request confirmation message string (#1212) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 574c21b0..db5ed7b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -194,7 +194,7 @@ Absence reason (optional) Send - Absence excused successfully! + Absence excuse request sent successfully! You must select at least one absence! Excuse From 0ea2e6824956817b4c409eef25a35c91c705043f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 13 Mar 2021 20:14:10 +0100 Subject: [PATCH 11/18] Fix and clean proguard/r8 file (#1213) --- app/build.gradle | 2 +- app/proguard-rules.pro | 31 ++++++------------------------- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2d95b0ac..6b1970d1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,7 +60,7 @@ android { release { minifyEnabled true shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 7c796257..c8379560 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,33 +1,21 @@ -# Optimizations --optimizationpasses 5 --optimizations !code/simplification/arithmetic,!field/*,!class/merging/* --dontusemixedcaseclassnames --dontskipnonpubliclibraryclasses --dontskipnonpubliclibraryclassmembers --dontpreverify +# General -dontobfuscate --allowaccessmodification --repackageclasses '' --verbose -#Keep all wulkanowy files +#Config for wulkanowy -keep class io.github.wulkanowy.** {*;} -#Config for anallitycs --keepattributes *Annotation* +#Config for firebase crashlitycs -keepattributes SourceFile,LineNumberTable --keep class com.crashlytics.** {*;} -keep public class * extends java.lang.Exception --dontwarn com.crashlytics.** -#Config for OkHttp +#Config for Okio and OkHttp +-dontwarn javax.annotation.** -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase -dontwarn org.codehaus.mojo.animal_sniffer.* -dontwarn okhttp3.internal.platform.ConscryptPlatform --dontwarn javax.annotation.** #Config for MPAndroidChart @@ -35,11 +23,4 @@ #Config for Material Components --keep class com.google.android.material.tabs.** { *; } - - -#Config for About Libraries --keep class .R --keep class **.R$* { - ; -} +-keep class com.google.android.material.tabs.** { *; } \ No newline at end of file From fe846b463afa484c8a73ead3baffbdbbe5861a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 13 Mar 2021 20:14:36 +0100 Subject: [PATCH 12/18] Update material chips input (#1214) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 6b1970d1..e6301b2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -172,7 +172,7 @@ dependencies { implementation "androidx.constraintlayout:constraintlayout:2.0.4" implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0" implementation "com.google.android.material:material:1.3.0" - implementation "com.github.wulkanowy:material-chips-input:2.1.1" + implementation "com.github.wulkanowy:material-chips-input:2.2.0" implementation "com.github.PhilJay:MPAndroidChart:v3.1.0" implementation 'com.mikhaellopez:circularimageview:4.2.0' From c1942d012f1b856b01297009c64b50216dfbe268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Sat, 13 Mar 2021 20:15:12 +0100 Subject: [PATCH 13/18] Maybe fix fragment commits after activity state is saved (#1216) --- .../github/wulkanowy/ui/modules/main/MainActivity.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt index 2b207933..5fda7210 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainActivity.kt @@ -291,7 +291,7 @@ class MainActivity : BaseActivity(), MainVie ): Boolean { val fragment = supportFragmentManager.fragmentFactory.instantiate(classLoader, pref.fragment) - navController.pushFragment(fragment) + pushView(fragment) return true } @@ -305,6 +305,8 @@ class MainActivity : BaseActivity(), MainVie } override fun switchMenuView(position: Int) { + if (supportFragmentManager.isStateSaved) return + analytics.popCurrentScreen(navController.currentFrag!!::class.simpleName) navController.switchTab(position) } @@ -322,6 +324,8 @@ class MainActivity : BaseActivity(), MainVie } override fun showAccountPicker(studentWithSemesters: List) { + if (supportFragmentManager.isStateSaved) return + navController.showDialogFragment(AccountQuickDialog.newInstance(studentWithSemesters)) } @@ -339,15 +343,21 @@ class MainActivity : BaseActivity(), MainVie } fun showDialogFragment(dialog: DialogFragment) { + if (supportFragmentManager.isStateSaved) return + navController.showDialogFragment(dialog) } fun pushView(fragment: Fragment) { + if (supportFragmentManager.isStateSaved) return + analytics.popCurrentScreen(navController.currentFrag!!::class.simpleName) navController.pushFragment(fragment) } override fun popView(depth: Int) { + if (supportFragmentManager.isStateSaved) return + analytics.popCurrentScreen(navController.currentFrag!!::class.simpleName) navController.safelyPopFragments(depth) } From eee4e1f4b52fc41a8c397ed2fd79b7c8009f57bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Mon, 15 Mar 2021 00:33:40 +0100 Subject: [PATCH 14/18] Fix empty view in attendance (#1217) --- .../modules/attendance/AttendanceFragment.kt | 2 +- .../modules/attendance/AttendancePresenter.kt | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt index 00d5aae8..cb718c72 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendanceFragment.kt @@ -192,7 +192,7 @@ class AttendanceFragment : BaseFragment(R.layout.frag } override fun showContent(show: Boolean) { - binding. attendanceRecycler.visibility = if (show) VISIBLE else GONE + binding.attendanceRecycler.visibility = if (show) VISIBLE else GONE } override fun showRefresh(show: Boolean) { diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt index 68802c0c..b03db91a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/attendance/AttendancePresenter.kt @@ -190,35 +190,48 @@ class AttendancePresenter @Inject constructor( flowWithResourceIn { val student = studentRepository.getCurrentStudent() val semester = semesterRepository.getCurrentSemester(student) - attendanceRepository.getAttendance(student, semester, currentDate, currentDate, forceRefresh) + attendanceRepository.getAttendance( + student, + semester, + currentDate, + currentDate, + forceRefresh + ) }.onEach { when (it.status) { Status.LOADING -> { view?.showExcuseButton(false) if (!it.data.isNullOrEmpty()) { + val filteredAttendance = if (prefRepository.isShowPresent) { + it.data + } else { + it.data.filter { item -> !item.presence } + } + view?.run { enableSwipe(true) showRefresh(true) showProgress(false) - showContent(true) - updateData(it.data.let { items -> - if (prefRepository.isShowPresent) items - else items.filter { item -> !item.presence } - }.sortedBy { item -> item.number }) + showEmpty(filteredAttendance.isEmpty()) + showContent(filteredAttendance.isNotEmpty()) + updateData(filteredAttendance.sortedBy { item -> item.number }) } } } Status.SUCCESS -> { Timber.i("Loading attendance result: Success") + val filteredAttendance = if (prefRepository.isShowPresent) { + it.data.orEmpty() + } else { + it.data?.filter { item -> !item.presence }.orEmpty() + } + view?.apply { - updateData(it.data!!.let { items -> - if (prefRepository.isShowPresent) items - else items.filter { item -> !item.presence } - }.sortedBy { item -> item.number }) - showEmpty(it.data.isEmpty()) + updateData(filteredAttendance.sortedBy { item -> item.number }) + showEmpty(filteredAttendance.isEmpty()) showErrorView(false) - showContent(it.data.isNotEmpty()) - showExcuseButton(it.data.any { item -> item.excusable }) + showContent(filteredAttendance.isNotEmpty()) + showExcuseButton(filteredAttendance.any { item -> item.excusable }) } analytics.logEvent( "load_data", From 94506aca52ebb3fc2d310c778c2bd1155c8a90aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Mon, 15 Mar 2021 18:18:08 +0100 Subject: [PATCH 15/18] Add github actions config to deploy apk to App Center (#1220) --- .github/workflows/test.yml | 132 +++++++++++++++++++++++++++++++++++++ app/bitrise.jks | Bin 0 -> 2235 bytes app/bitrise.jks.gpg | Bin 0 -> 2215 bytes 3 files changed, 132 insertions(+) create mode 100644 app/bitrise.jks create mode 100644 app/bitrise.jks.gpg diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 806288a1..a81b333f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,3 +68,135 @@ jobs: PLAY_SERVICE_ACCOUNT_EMAIL: ${{ secrets.PLAY_SERVICE_ACCOUNT_EMAIL }} PLAY_STORE_PASSWORD: ${{ secrets.PLAY_STORE_PASSWORD }} run: ./gradlew publishPlayRelease -PenableFirebase --stacktrace; + + deploy-appcenter: + name: Deploy to App Center + runs-on: ubuntu-latest + timeout-minutes: 10 + environment: app-center + if: github.ref != 'refs/heads/develop' + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 11 + - uses: actions/cache@v2 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} + - name: Set run number with offset + env: + BUILD_NUMBER_OFFSET: ${{ secrets.BUILD_NUMBER_OFFSET }} + run: echo "RUN_NUMBER=$((GITHUB_RUN_NUMBER+BUILD_NUMBER_OFFSET))" >> $GITHUB_ENV + - name: Prepare build configuration + run: | + sed -i -e "s#applicationIdSuffix \".dev\"#applicationIdSuffix \".${GITHUB_HEAD_REF//[-.\/]/_}\"#" app/build.gradle + sed -i -e "s#.dev\"#.${GITHUB_HEAD_REF//[-.\/]/_}\"#" app/src/debug/google-services.json + sed -i -e "s#.dev\"#.${GITHUB_HEAD_REF//[-.\/]/_}\"#" app/src/debug/agconnect-services.json + sed -i -e '/versionNameSuffix/d' app/build.gradle + - name: Add signing config + run: | + cat >> app/build.gradle <> $GITHUB_ENV + - name: Add signing config + run: | + cat >> app/build.gradle <|>OrkVM({XJB2r_xf|zEx)1th{ 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 N-L~|L$t_gB{cjD>@NNJA literal 0 HcmV?d00001 diff --git a/app/bitrise.jks.gpg b/app/bitrise.jks.gpg new file mode 100644 index 0000000000000000000000000000000000000000..1dee91bd9afd17e2f1891e49d9b27c6de470e899 GIT binary patch literal 2215 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 literal 0 HcmV?d00001 From 8644ce32d51721b6835d47bcf1c29e9376e0eb90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Mon, 15 Mar 2021 23:58:50 +0100 Subject: [PATCH 16/18] Fix semester switch when student have only one semester (#1215) --- app/build.gradle | 2 +- .../ui/modules/grade/GradeFragment.kt | 9 ++++----- .../ui/modules/grade/GradePresenter.kt | 20 +++++++++++++------ .../wulkanowy/ui/modules/grade/GradeView.kt | 3 ++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e6301b2f..3a449f5e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,7 +150,7 @@ ext { } dependencies { - implementation "io.github.wulkanowy:sdk:1.1.0" + implementation "io.github.wulkanowy:sdk:b2c274e" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt index 06b3e931..b3ef3037 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeFragment.kt @@ -10,6 +10,7 @@ import android.view.View.VISIBLE import androidx.appcompat.app.AlertDialog import dagger.hilt.android.AndroidEntryPoint import io.github.wulkanowy.R +import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.databinding.FragmentGradeBinding import io.github.wulkanowy.ui.base.BaseFragment import io.github.wulkanowy.ui.base.BaseFragmentPagerAdapter @@ -121,11 +122,9 @@ class GradeFragment : BaseFragment(R.layout.fragment_grade semesterSwitchMenu?.isVisible = show } - override fun showSemesterDialog(selectedIndex: Int) { - val choices = arrayOf( - getString(R.string.grade_semester, 1), - getString(R.string.grade_semester, 2) - ) + override fun showSemesterDialog(selectedIndex: Int, semesters: List) { + val choices = semesters.map { getString(R.string.grade_semester, it.semesterName) } + .toTypedArray() AlertDialog.Builder(requireContext()) .setSingleChoiceItems(choices, selectedIndex) { dialog, which -> diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradePresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradePresenter.kt index bfc504d2..c467c421 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradePresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradePresenter.kt @@ -49,7 +49,9 @@ class GradePresenter @Inject constructor( } fun onSemesterSwitch(): Boolean { - if (semesters.isNotEmpty()) view?.showSemesterDialog(selectedIndex - 1) + if (semesters.isNotEmpty()) { + view?.showSemesterDialog(selectedIndex - 1, semesters.slice(0..1)) + } return true } @@ -137,11 +139,17 @@ class GradePresenter @Inject constructor( private fun loadChild(index: Int, forceRefresh: Boolean = false) { Timber.d("Load grade tab child. Selected semester: $selectedIndex, semesters: ${semesters.joinToString { it.semesterName.toString() }}") - semesters.first { it.semesterName == selectedIndex }.semesterId.also { - if (forceRefresh || loadedSemesterId[index] != it) { - Timber.i("Load grade child view index: $index") - view?.notifyChildLoadData(index, it, forceRefresh) - } + + val newSelectedSemesterId = try { + semesters.first { it.semesterName == selectedIndex }.semesterId + } catch (e: NoSuchElementException) { + Timber.e(e, "Selected semester no exists") + return + } + + if (forceRefresh || loadedSemesterId[index] != newSelectedSemesterId) { + Timber.i("Load grade child view index: $index") + view?.notifyChildLoadData(index, newSelectedSemesterId, forceRefresh) } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeView.kt index 7b52daa8..104f8505 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/GradeView.kt @@ -1,5 +1,6 @@ package io.github.wulkanowy.ui.modules.grade +import io.github.wulkanowy.data.db.entities.Semester import io.github.wulkanowy.ui.base.BaseView interface GradeView : BaseView { @@ -18,7 +19,7 @@ interface GradeView : BaseView { fun showSemesterSwitch(show: Boolean) - fun showSemesterDialog(selectedIndex: Int) + fun showSemesterDialog(selectedIndex: Int, semesters: List) fun setCurrentSemesterName(semester: Int, schoolYear: Int) From c77b50d51b381bb906ad57c5b13322d17977a512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Tue, 16 Mar 2021 00:30:28 +0100 Subject: [PATCH 17/18] New Crowdin updates (#1204) --- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 4 ++-- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4745e171..8c8ad729 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -192,7 +192,7 @@ Důvod nepřítomnosti (volitelný) Poslat - Nepřítomnost úspěšně omluvena! + Žádost o omluvu nepřítomnosti byla úspěšně odeslána! Musíte vybrat alespoň jednu nepřítomnost! Ospravedlnit diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a0994b42..391fdd21 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -176,7 +176,7 @@ Abwesenheitsgrund (optional) Senden - Abwesenheit erfolgreich entschuldigt! + Absence excuse request sent successfully! Sie müssen mindestens eine Abwesenheit auswählen! Verzeihung diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 6542a5bc..569df4bc 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -192,7 +192,7 @@ Absence reason (optional) Send - Absence excused successfully! + Absence excuse request sent successfully! You must select at least one absence! Excuse diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 3f69d2a8..0d439583 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -192,7 +192,7 @@ Powód nieobecności (opcjonalny) Wyślij - Usprawiedliwiono pomyślnie! + Prośba o usprawiedliwienie została pomyślnie wysłana! Musisz wybrać co najmniej jedną nieobecność! Usprawiedliw @@ -317,7 +317,7 @@ Pokaż historię Historia numerków - Brak informacji o szczęśliwych numerach + Brak informacji o szczęśliwych numerkach Dostęp mobilny Brak urządzeń diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 02407bbd..b614ac9e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -192,7 +192,7 @@ Причина отсутствия (необязательно) Послать - Статус отсутствия изменён + Absence excuse request sent successfully! Выберите хотя-бы одно отсутствие Изменить статус diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 32bd8067..601bd880 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -192,7 +192,7 @@ Dôvod neprítomnosti (voliteľný) Poslať - Neprítomnosť úspešne ospravedlnená! + Žiadosť o ospravedlnenie neprítomnosti bola úspešne odoslaná! Musíte vybrať aspoň jednu neprítomnosť! Ospravedlniť diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 64e147e7..61a6bb3f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -192,7 +192,7 @@ Причина відсутності (необов’язково) Надіслати - Змінено статус відсутності + Absence excuse request sent successfully! Оберіть хоча б одну відсутність Змінити статус From eeb1341c1ff6d90c7d1c5796c697b22f7a18677b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Tue, 16 Mar 2021 00:43:28 +0100 Subject: [PATCH 18/18] Version 1.1.1 --- app/build.gradle | 8 ++++---- app/src/main/play/release-notes/pl-PL/default.txt | 11 +++-------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3a449f5e..d2f59239 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 17 targetSdkVersion 30 - versionCode 86 - versionName "1.1.0" + versionCode 87 + versionName "1.1.1" multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true @@ -137,7 +137,7 @@ play { serviceAccountCredentials = file('key.p12') defaultToAppBundles = false track = 'production' - updatePriority = 3 + updatePriority = 5 } ext { @@ -150,7 +150,7 @@ ext { } dependencies { - implementation "io.github.wulkanowy:sdk:b2c274e" + implementation "io.github.wulkanowy:sdk:1.1.1" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' diff --git a/app/src/main/play/release-notes/pl-PL/default.txt b/app/src/main/play/release-notes/pl-PL/default.txt index 35320c1e..2b0af6e5 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,11 +1,6 @@ -Wersja 1.1.0 +Wersja 1.1.1 -- dodaliśmy wyświetlanie inicjałów imienia ucznia jako awatar widoczny w aplikacji -- dodaliśmy historię szczęśliwego numerka -- dodaliśmy język słowacki -- zmieniliśmy kolor górnego i dolnego paska systemowego lepiej dostosowując je do aplikacji -- zmieniliśmy wygląd ustawień dzieląc je na sekcje -- naprawiliśmy problem dublujących się czasem ocen -- naprawiliśmy kilka innych błędów i poprawiliśmy stabilność aplikacji +- naprawiliśmy wyświetlanie planu lekcji +- naprawiliśmy kilka rzadkich problemów ze stabilnością Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases