diff --git a/.travis.yml b/.travis.yml index 24280c5f..e383a74b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ jdk: oraclejdk8 env: global: - - ANDROID_API_LEVEL=29 - - ANDROID_BUILD_TOOLS_VERSION=29.0.3 + - ANDROID_API_LEVEL=30 + - ANDROID_BUILD_TOOLS_VERSION=30.0.2 cache: directories: @@ -14,7 +14,7 @@ cache: branches: only: - develop - - 0.21.2 + - 0.22.0 android: licenses: @@ -28,22 +28,26 @@ android: - build-tools-$ANDROID_BUILD_TOOLS_VERSION # The SDK version used to compile your project - android-$ANDROID_API_LEVEL - # Additional components + # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository - addon-google_apis-google-$ANDROID_API_LEVEL - # Android emulator + # Android emulator - android-22 - sys-img-armeabi-v7a-android-22 +before_install: + - yes | sdkmanager "platforms;android-30" + - yes | sdkmanager "build-tools;30.0.2" + before_script: - # Launch emulator before the execution - - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a - - emulator -avd test -no-audio -no-window & - - android-wait-for-emulator - - adb shell input keyevent 82 & - - "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | sudo bash" + # Launch emulator before the execution + - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a + - emulator -avd test -no-audio -no-window & + - android-wait-for-emulator + - adb shell input keyevent 82 & + - "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | sudo bash" script: - ./gradlew dependencies --stacktrace --daemon diff --git a/README.en.md b/README.en.md index 28cce1c3..4c5e53da 100644 --- a/README.en.md +++ b/README.en.md @@ -32,14 +32,17 @@ Unofficial android VULCAN UONET+ register client for both students and their par ## Download -You can download the current beta version from the Google Play or the F-Droid store +You can download the current beta version from the Google Play, F-Droid or Huawei AppGallery store [Get it on Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy) + alt="Get it on Google Play" + height="80">](https://play.google.com/store/apps/details?id=io.github.wulkanowy) [Get it on F-Droid](https://f-droid.org/packages/io.github.wulkanowy/) +[Explore it on AppGallery](https://appgallery.cloud.huawei.com/ag/n/app/C101440411?channelId=Badge&id=1b3f7fbb700849a9be0dba6b520b2282&s=EB1D3BF9ED9D1564D869B7B94B18016D3CABFCA5AEFB8E29F675FA04E0DC131D&detailType=0&v=) You can also download a [development version](https://wulkanowy.github.io/#download) that includes new features being prepared for the next release diff --git a/README.md b/README.md index 02e1900c..9e29cdb6 100644 --- a/README.md +++ b/README.md @@ -32,14 +32,17 @@ Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica ## Pobierz -Aktualną wersję beta możesz pobrać ze sklepu Google Play lub F-Droid +Aktualną wersję beta możesz pobrać ze sklepu Google Play, F-Droid lub Huawei AppGallery [Pobierz z Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy) + alt="Pobierz z Google Play" + height="80">](https://play.google.com/store/apps/details?id=io.github.wulkanowy) [Pobierz z F-Droid](https://f-droid.org/packages/io.github.wulkanowy/) +[Odkrywaj w AppGallery](https://appgallery.cloud.huawei.com/ag/n/app/C101440411?channelId=Badge&id=1b3f7fbb700849a9be0dba6b520b2282&s=EB1D3BF9ED9D1564D869B7B94B18016D3CABFCA5AEFB8E29F675FA04E0DC131D&detailType=0&v=) Możesz także pobrać [wersję rozwojową](https://wulkanowy.github.io/#download), która zawiera nowe funkcje przygotowywane do następnego wydania diff --git a/app/build.gradle b/app/build.gradle index 56609466..b1ba7e62 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,16 +10,16 @@ apply from: 'sonarqube.gradle' apply from: 'hooks.gradle' android { - compileSdkVersion 29 - buildToolsVersion '29.0.3' + compileSdkVersion 30 + buildToolsVersion '30.0.2' defaultConfig { applicationId "io.github.wulkanowy" testApplicationId "io.github.tests.wulkanowy" minSdkVersion 17 - targetSdkVersion 29 - versionCode 72 - versionName "0.21.2" + targetSdkVersion 30 + versionCode 73 + versionName "0.22.0" multiDexEnabled true resValue "string", "app_name", "Wulkanowy" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -112,14 +112,15 @@ play { serviceAccountCredentials = file('key.p12') defaultToAppBundles = false track = 'alpha' + updatePriority = 0 } ext { work_manager = "2.4.0" room = "2.2.5" - chucker = "3.2.0" - mockk = "1.10.0" - moshi = "1.9.3" + chucker = "3.3.0" + mockk = "1.10.2" + moshi = "1.11.0" } configurations.all { @@ -127,14 +128,14 @@ configurations.all { } dependencies { - implementation "io.github.wulkanowy:sdk:0.21.2" + implementation "io.github.wulkanowy:sdk:0.22.0" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' - implementation "androidx.core:core-ktx:1.3.1" + implementation "androidx.core:core-ktx:1.3.2" implementation "androidx.activity:activity-ktx:1.1.0" implementation "androidx.appcompat:appcompat:1.2.0" implementation "androidx.appcompat:appcompat-resources:1.2.0" @@ -179,15 +180,16 @@ dependencies { implementation "fr.bipi.treessence:treessence:0.3.2" implementation "com.mikepenz:aboutlibraries-core:$about_libraries" implementation 'com.wdullaer:materialdatetimepicker:4.2.3' - implementation "io.coil-kt:coil:1.0.0-rc2" + implementation "io.coil-kt:coil:1.0.0-rc3" implementation "io.github.wulkanowy:AppKillerManager:3.0.0" implementation 'me.xdrop:fuzzywuzzy:1.3.1' - playImplementation 'com.google.firebase:firebase-analytics:17.5.0' + playImplementation 'com.google.firebase:firebase-analytics:17.6.0' playImplementation 'com.google.firebase:firebase-inappmessaging-display-ktx:19.1.1' playImplementation "com.google.firebase:firebase-inappmessaging-ktx:19.1.1" - playImplementation 'com.google.firebase:firebase-messaging:20.2.4' - playImplementation 'com.google.firebase:firebase-crashlytics:17.2.1' + playImplementation 'com.google.firebase:firebase-messaging:20.3.0' + playImplementation 'com.google.firebase:firebase-crashlytics:17.2.2' + playImplementation 'com.google.android.play:core-ktx:1.8.1' playImplementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava' releaseImplementation "com.github.ChuckerTeam.Chucker:library-no-op:$chucker" diff --git a/app/src/fdroid/java/io/github/wulkanowy/utils/UpdateHelper.kt b/app/src/fdroid/java/io/github/wulkanowy/utils/UpdateHelper.kt new file mode 100644 index 00000000..3abab962 --- /dev/null +++ b/app/src/fdroid/java/io/github/wulkanowy/utils/UpdateHelper.kt @@ -0,0 +1,17 @@ +package io.github.wulkanowy.utils + +import android.app.Activity +import android.view.View +import javax.inject.Inject + +@Suppress("UNUSED_PARAMETER") +class UpdateHelper @Inject constructor() { + + lateinit var messageContainer: View + + fun checkAndInstallUpdates(activity: Activity) {} + + fun onActivityResult(requestCode: Int, resultCode: Int) {} + + fun onResume(activity: Activity) {} +} diff --git a/app/src/main/java/io/github/wulkanowy/data/RepositoryModule.kt b/app/src/main/java/io/github/wulkanowy/data/RepositoryModule.kt index 3370d0ac..6486cab9 100644 --- a/app/src/main/java/io/github/wulkanowy/data/RepositoryModule.kt +++ b/app/src/main/java/io/github/wulkanowy/data/RepositoryModule.kt @@ -33,7 +33,11 @@ internal class RepositoryModule { setSimpleHttpLogger { Timber.d(it) } // for debug only - addInterceptor(ChuckerInterceptor(context, chuckerCollector), true) + addInterceptor(ChuckerInterceptor( + context = context, + collector = chuckerCollector, + alwaysReadResponseBody = true + ), true) } } diff --git a/app/src/main/java/io/github/wulkanowy/services/alarm/TimetableNotificationSchedulerHelper.kt b/app/src/main/java/io/github/wulkanowy/services/alarm/TimetableNotificationSchedulerHelper.kt index 5c4b916b..2593a555 100644 --- a/app/src/main/java/io/github/wulkanowy/services/alarm/TimetableNotificationSchedulerHelper.kt +++ b/app/src/main/java/io/github/wulkanowy/services/alarm/TimetableNotificationSchedulerHelper.kt @@ -72,18 +72,22 @@ class TimetableNotificationSchedulerHelper @Inject constructor( withContext(dispatchersProvider.backgroundThread) { lessons.groupBy { it.date } .map { it.value.sortedBy { lesson -> lesson.start } } - .map { it.filter { lesson -> !lesson.canceled && lesson.isStudentPlan } } + .map { it.filter { lesson -> lesson.isStudentPlan } } .map { day -> - day.forEachIndexed { index, lesson -> - val intent = createIntent(student, lesson, day.getOrNull(index + 1)) + val canceled = day.filter { it.canceled } + val active = day.filter { !it.canceled } + + cancelScheduled(canceled) + active.forEachIndexed { index, lesson -> + val intent = createIntent(student, lesson, active.getOrNull(index + 1)) if (lesson.start > now()) { - scheduleBroadcast(intent, student.studentId, NOTIFICATION_TYPE_UPCOMING, getUpcomingLessonTime(index, day, lesson)) + scheduleBroadcast(intent, student.studentId, NOTIFICATION_TYPE_UPCOMING, getUpcomingLessonTime(index, active, lesson)) } if (lesson.end > now()) { scheduleBroadcast(intent, student.studentId, NOTIFICATION_TYPE_CURRENT, lesson.start) - if (day.lastIndex == index) { + if (active.lastIndex == index) { scheduleBroadcast(intent, student.studentId, NOTIFICATION_TYPE_LAST_LESSON_CANCELLATION, lesson.end) } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/base/ErrorDialog.kt b/app/src/main/java/io/github/wulkanowy/ui/base/ErrorDialog.kt index 8d6739a1..341ae459 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/base/ErrorDialog.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/base/ErrorDialog.kt @@ -22,9 +22,11 @@ import io.github.wulkanowy.utils.getString import io.github.wulkanowy.utils.openAppInMarket import io.github.wulkanowy.utils.openEmailClient import io.github.wulkanowy.utils.openInternetBrowser +import okhttp3.internal.http2.StreamResetException import java.io.InterruptedIOException import java.io.PrintWriter import java.io.StringWriter +import java.net.ConnectException import java.net.SocketTimeoutException import java.net.UnknownHostException import javax.inject.Inject @@ -85,6 +87,8 @@ class ErrorDialog : BaseDialogFragment() { errorDialogReport.isEnabled = when (error) { is UnknownHostException, is InterruptedIOException, + is ConnectException, + is StreamResetException, is SocketTimeoutException, is ServiceUnavailableException, is FeatureDisabledException, diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsPresenter.kt index 97b7b71c..9f4f8f26 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsPresenter.kt @@ -81,7 +81,10 @@ class GradeDetailsPresenter @Inject constructor( }.onEach { when (it.status) { Status.LOADING -> Timber.i("Select mark grades as read") - Status.SUCCESS -> Timber.i("Mark as read result: Success") + Status.SUCCESS -> { + Timber.i("Mark as read result: Success") + loadData(currentSemesterId, false) + } Status.ERROR -> { Timber.i("Mark as read result: An exception occurred") errorHandler.dispatch(it.error!!) diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginActivity.kt index 749989e3..aff1c84c 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginActivity.kt @@ -14,6 +14,7 @@ import io.github.wulkanowy.ui.modules.login.form.LoginFormFragment import io.github.wulkanowy.ui.modules.login.recover.LoginRecoverFragment import io.github.wulkanowy.ui.modules.login.studentselect.LoginStudentSelectFragment import io.github.wulkanowy.ui.modules.login.symbol.LoginSymbolFragment +import io.github.wulkanowy.utils.UpdateHelper import io.github.wulkanowy.utils.setOnSelectPageListener import javax.inject.Inject @@ -25,6 +26,9 @@ class LoginActivity : BaseActivity(), Logi private val loginAdapter = BaseFragmentPagerAdapter(supportFragmentManager) + @Inject + lateinit var updateHelper: UpdateHelper + companion object { fun getStartIntent(context: Context) = Intent(context, LoginActivity::class.java) @@ -37,8 +41,20 @@ class LoginActivity : BaseActivity(), Logi setContentView(ActivityLoginBinding.inflate(layoutInflater).apply { binding = this }.root) setSupportActionBar(binding.loginToolbar) messageContainer = binding.loginContainer + updateHelper.messageContainer = binding.loginContainer presenter.onAttachView(this) + updateHelper.checkAndInstallUpdates(this) + } + + override fun onResume() { + super.onResume() + updateHelper.onResume(this) + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + updateHelper.onActivityResult(requestCode, resultCode) } override fun initView() { 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 95b4aa77..abc002de 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 @@ -40,6 +40,7 @@ import io.github.wulkanowy.ui.modules.note.NoteFragment import io.github.wulkanowy.ui.modules.timetable.TimetableFragment import io.github.wulkanowy.utils.AppInfo import io.github.wulkanowy.utils.FirebaseAnalyticsHelper +import io.github.wulkanowy.utils.UpdateHelper import io.github.wulkanowy.utils.dpToPx import io.github.wulkanowy.utils.getThemeAttrColor import io.github.wulkanowy.utils.safelyPopFragments @@ -56,6 +57,9 @@ class MainActivity : BaseActivity(), MainVie @Inject lateinit var analytics: FirebaseAnalyticsHelper + @Inject + lateinit var updateHelper: UpdateHelper + @Inject lateinit var appInfo: AppInfo @@ -100,6 +104,7 @@ class MainActivity : BaseActivity(), MainVie setContentView(ActivityMainBinding.inflate(layoutInflater).apply { binding = this }.root) setSupportActionBar(binding.mainToolbar) messageContainer = binding.mainFragmentContainer + updateHelper.messageContainer = binding.mainFragmentContainer presenter.onAttachView(this, MainView.Section.values().singleOrNull { it.id == intent.getIntExtra(EXTRA_START_MENU, -1) }) @@ -107,6 +112,18 @@ class MainActivity : BaseActivity(), MainVie initialize(startMenuIndex, savedInstanceState) pushFragment(moreMenuFragments[startMenuMoreIndex]) } + updateHelper.checkAndInstallUpdates(this) + } + + override fun onResume() { + super.onResume() + updateHelper.onResume(this) + } + + @SuppressLint("NewApi") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + updateHelper.onActivityResult(requestCode, resultCode) if (appInfo.systemVersion >= Build.VERSION_CODES.N_MR1) initShortcuts() } @@ -181,8 +198,8 @@ class MainActivity : BaseActivity(), MainVie analytics.setCurrentScreen(this, name) } - override fun onOptionsItemSelected(item: MenuItem?): Boolean { - return if (item?.itemId == R.id.mainMenuAccount) presenter.onAccountManagerSelected() + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return if (item.itemId == R.id.mainMenuAccount) presenter.onAccountManagerSelected() else false } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt index 740f4927..b35731ca 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/preview/MessagePreviewFragment.kt @@ -174,7 +174,7 @@ class MessagePreviewFragment : @RequiresApi(Build.VERSION_CODES.LOLLIPOP) override fun printDocument(html: String, jobName: String) { - val webView = WebView(activity) + val webView = WebView(requireContext()) webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest) = false diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessageActivity.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessageActivity.kt index 2267279c..59944d41 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessageActivity.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/send/SendMessageActivity.kt @@ -1,5 +1,6 @@ package io.github.wulkanowy.ui.modules.message.send +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.graphics.Rect @@ -74,6 +75,7 @@ class SendMessageActivity : BaseActivity getString(R.string.error_no_internet) - is SocketTimeoutException, is InterruptedIOException -> getString(R.string.error_timeout) + is SocketTimeoutException, is InterruptedIOException, is ConnectException, is StreamResetException -> getString(R.string.error_timeout) is NotLoggedInException -> getString(R.string.error_login_failed) is PasswordChangeRequiredException -> getString(R.string.error_password_change_required) is ServiceUnavailableException -> getString(R.string.error_service_unavailable) is FeatureDisabledException -> getString(R.string.error_feature_disabled) is FeatureNotAvailableException -> getString(R.string.error_feature_not_available) + is VulcanException -> getString(R.string.error_unknown_uonet) + is ScrapperException -> getString(R.string.error_unknown_app) else -> getString(R.string.error_unknown) } 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 7553e2cb..e89c473f 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,10 +1,7 @@ -Wersja 0.21.2 -- naprawiliśmy logowanie do tarnowskiego dziennika -- naprawiliśmy wyświetlanie podsumowania punktów klasy -- dodaliśmy skróty aplikacji -- dodaliśmy opcję pokazywania nazwy grupy w planie lekcji na liście -- dodaliśmy opcję pokazywania w ocenach przedmiotów bez ocen -- dodaliśmy dodatkowe opcje sortowania ocen -- dodaliśmy rozróżnianie powiadomień dla pochwał i uwag +Wersja 0.22 +- naprawiliśmy krytyczny błąd ze stabilnością przy ładowaniu danych +- naprawiliśmy skalowanie tekstu przy bardzo dużych jego rozmiarach +- naprawiliśmy wyświetlanie powiadomień o odwołanych lekcjach (nie powinny się już pokazywać) +- dodaliśmy informowanie o dostępności aktualizacji w aplikacji Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2ea0a4d3..2f88ecc8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - + app:contentInsetStartWithNavigation="0dp" + app:layout_constraintTop_toTopOf="parent" /> + android:layout_height="0dp" + app:layout_constraintBottom_toTopOf="@id/mainBottomNav" + app:layout_constraintTop_toBottomOf="@id/mainToolbar" /> - + app:layout_constraintBottom_toBottomOf="parent" /> + diff --git a/app/src/main/res/layout/item_about.xml b/app/src/main/res/layout/item_about.xml index f988c47b..6a95e552 100644 --- a/app/src/main/res/layout/item_about.xml +++ b/app/src/main/res/layout/item_about.xml @@ -33,7 +33,8 @@ + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="@+id/attendanceItemDetailsContainer" + app:layout_constraintEnd_toStartOf="@+id/attendanceItemDetailsContainer" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="@+id/attendanceItemDetailsContainer"> - + android:layout_marginEnd="10dp" + app:layout_constraintEnd_toStartOf="@+id/attendanceItemAlert" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toEndOf="@+id/attendanceItemNumberContainer" + app:layout_constraintTop_toTopOf="parent"> - + + + + - + diff --git a/app/src/main/res/layout/item_attendance_summary_subject.xml b/app/src/main/res/layout/item_attendance_summary_subject.xml index 263c08a7..ff731461 100644 --- a/app/src/main/res/layout/item_attendance_summary_subject.xml +++ b/app/src/main/res/layout/item_attendance_summary_subject.xml @@ -3,7 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/attendanceSummaryItemSubject" android:layout_width="match_parent" - android:layout_height="48dp" + android:layout_height="wrap_content" + android:minHeight="48dp" android:gravity="start" android:maxLines="1" android:paddingLeft="16dp" diff --git a/app/src/main/res/layout/item_completed_lesson.xml b/app/src/main/res/layout/item_completed_lesson.xml index b9beec80..e9944f56 100644 --- a/app/src/main/res/layout/item_completed_lesson.xml +++ b/app/src/main/res/layout/item_completed_lesson.xml @@ -12,8 +12,11 @@ diff --git a/app/src/main/res/layout/item_grade_details.xml b/app/src/main/res/layout/item_grade_details.xml index ccc968c0..2f3bd2de 100644 --- a/app/src/main/res/layout/item_grade_details.xml +++ b/app/src/main/res/layout/item_grade_details.xml @@ -18,62 +18,82 @@ - + app:layout_constraintTop_toTopOf="parent"> - + - + + + + + diff --git a/app/src/main/res/layout/item_license.xml b/app/src/main/res/layout/item_license.xml index aaa7cd34..cb55ab87 100644 --- a/app/src/main/res/layout/item_license.xml +++ b/app/src/main/res/layout/item_license.xml @@ -2,7 +2,8 @@ diff --git a/app/src/main/res/values-cs-rCZ/preferences_values.xml b/app/src/main/res/values-cs-rCZ/preferences_values.xml new file mode 100644 index 00000000..bcb690e5 --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/preferences_values.xml @@ -0,0 +1,52 @@ + + + + Světlý + Tmavý + Černý (AMOLED) + + + Jazyk systému + Polski + English + Pусский + Українська + Deutsch + Čeština + + + 15 minut + 30 minut + 1 hodina + 2 hodiny + 6 hodin + 12 hodin + 24 hodin + + + 0,00 + 0,25 + 0,33 + 0,5 + 0,75 + + + Abecedně + Podle data + + + Dzienniczek+ + Wulkanowy + Barvy známek v deníku + + + Průměrná známka od druhého semestru + Průměr známek z obou semestrů + Průměr známek z celého roku + + + Neukaž + Ukázat vše + Ukázat menší + + diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml new file mode 100644 index 00000000..c55abd96 --- /dev/null +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -0,0 +1,457 @@ + + + + Přihlásit se + Wulkanowy + Známky + Prezence + Zkoušky + Plán lekce + Nastavení + Více + O aplikaci + Prohlížeč protokolů + Tvůrci + Licence + Zprávy + Nová zpráva + Poznámky a úspěchy + Domácí práce + Vyberte účet + + Semestr %1$d, %2$d/%3$d + + Přihlaste se pomocí studentského nebo nadřazeného účtu + Zadejte symbol + Uživatelské jméno + Email + Přihlášení, číslo PESEL nebo e-mail + Heslo + Deník UONET+ + Mobile API + Scraper + Hybridní + Token + PIN + Klíč API + Symbol + Přihlásit + Toto heslo je příliš krátké + Přihlašovací údaje jsou nesprávné. Zkontrolujte, zda je v poli níže vybrán správný deník UONET+ + Neplatný PIN + Neplatný token + Platnost tokenu vypršela + Nesprávná e-mailová adresa + Neplatné přihlášení + Neplatný symbol + Student nebyl nalezen. Zkontrolujte symbol + Toto pole je povinné + Vybraný student je již přihlášen + Symbol najdete na stránce deníku v Uczeń → Dostęp Mobilny → Zarejestruj urządzenie mobilne + Vyberte studenty k přihlášení do aplikace + Jiné možnosti + V tomto režimu nefungují následující: šťastné číslo, statistiky třídy, shrnutí docházky, ospravedlnění nepřítomnosti, absolvované lekce, informace o škole a prohlížení seznamu registrovaných zařízení + Tento režim zobrazuje stejná data, která se zobrazují na webových stránkách deníka + Kombinace nejlepších vlastností ostatních dvou režimů. Funguje rychleji než scraper a poskytuje funkce, které nejsou k dispozici v režimu Mobile API. Je to v experimentální fázi + Zásady ochrany osobních údajů + Problémy s přihlášením? Napište nám! + Email + Discord + Poslat e-mail + Popište podrobnosti problému: + Ujistěte se, že je vybrán správný UONET+ deník! + Zapomněl jsem své heslo + Obnovte svůj účet + Obnovit + Student je již přihlášen + + Správce účtu + Přihlásit se + Platnost relace vypršela + Vaše relace vypršela, přihlaste se prosím znovu + + Známka + Semestr %d + Změnit semestr + Žádné známky + Váha + Váha: %s + Komentář + Žádné nové známky + Počet nových známek: %1$d + Průměrný: %1$.2f + Body: %s + Žádný průměr + Předpovězeno: %1$s + Konečná: %1$s + Celkem bodů + Konečná známka + Předpokládaná známka + Vypočítaný průměr + Konečný průměr + Souhrn + Třída + Označit jako přečtené + Částečně + Semestr + Body + + %d známka + %d známky + %d známky + %d známky + + + Nová známka + Nové známky + Nové známky + Nové známky + + + Nová předpokládaná známka + Nové předpovídané známky + Nové předpovídané známky + Nové předpovídané známky + + + Nová konečná známka + Nové konečné známky + Nové konečné známky + Nové konečné známky + + + Máte %1$d novou známku + Máte %1$d nové známky + Máte %1$d nové známky + Máte %1$d nové známky + + + Máte %1$d novou konečnou známku + Máte %1$d nové konečné známky + Máte %1$d nové konečné známky + Máte %1$d nové konečné známky + + + Máte %1$d novou konečnou známku + Máte %1$d nové konečné známky + Máte %1$d nové konečné známky + Máte %1$d nové konečné známky + + + Lekce + Pokoj + Skupina + Hodiny + Změny + Dnes žádné lekce + %s min + %s sek + dosud %1$s + za %1$s + Lekce skončila + Nyní: %s + Okamžik: %s + Později: %s + + Dokončené lekce + Zobrazit dokončené lekce + Žádné informace o absolvovaných lekcích + Téma + Absence + Zdroje + + Souhrn docházky + Nepřítomen ze školních důvodů + Omluvená absence + Neomluvená absence + Osvobození + Oprávněné zpoždění + Neomluvená zpoždění + Přítomnost + Smazáno + Neznámý + Číslo lekce + Žádné položky + + %1$d absence + %1$d absence + %1$d absence + %1$d absence + + Důvod absence (volitelný) + Poslat + Absence úspěšně omluvena! + Musíte vybrat alespoň jednu nepřítomnost! + Ospravedlnit + + Účast + Celkový + + Tento týden žádné testy + Typ + Datum vstupu + + Doručená pošta + Odesláno + Koš + (žádné téma) + Žádné zprávy + Při stahování obsahu zprávy došlo k chybě + Od: + Do: + Datum: %s + Odpověď + Poslat dále + Vymazat + Přesunout do koše + Trvale smazat + Zpráva byla úspěšně smazána + Podíl + Vytisknout + Téma + Obsah + Zpráva úspěšně odeslána + Musíte vybrat alespoň 1 příjemce + Obsah zprávy musí mít alespoň 3 znaky + + %d zpráva + %d zprávy + %d zprávy + %d zprávy + + + Nová zpráva + Nové zprávy + Nové zprávy + Nové zprávy + + + Obdrželi jste %1$d zprávu + Obdrželi jste %1$d zpráv + Obdrželi jste %1$d zpráv + Obdrželi jste %1$d zpráv + + + Žádné informace o poznámkách + Body + + %d poznámka + %d poznámky + %d poznámky + %d poznámky + + + Nová poznámka + Nové poznámky + Nové poznámky + Nové poznámky + + + Máte %1$d novou poznámku + Máte %1$d nové poznámky + Máte %1$d nové poznámky + Máte %1$d nové poznámky + + + + %d chvála + %d chvály + %d chvály + %d chvály + + + Nová chvála + Nové chvály + Nové chvály + Nové chvály + + + Máte %1$d novou chválu + Máte %1$d nové chvály + Máte %1$d nové chvály + Máte %1$d nové chvály + + + + %d neutrální poznámka + %d neutrální poznámky + %d neutrální poznámky + %d neutrální poznámky + + + Nová neutrální poznámka + Nové neutrální poznámky + Nové neutrální poznámky + Nové neutrální poznámky + + + Máte %1$d novou neutrální pozornost + Máte %1$d nové neutrální komentáře + Máte %1$d nové neutrální komentáře + Máte %1$d nové neutrální komentáře + + + Žádný domácí úkol + Označit jako hotové + Neudělané + Přílohy + + Šťastné číslo + Dnešní šťastné číslo je + Žádné informace o šťastném čísle + Šťastné číslo pro dnešek + Dnes je šťastným číslem: %d + + Mobilní přístup + Žádná zařízení + Zrušit registraci + Zařízení odstraněno + QR kód + Token + Symbol + PIN + + Škola a učitelé + + Škola + Žádné informace o škole + Školní jméno + Adresa školy + Telefon + Jméno ředitele + Jméno pedagoga + Zobrazit na mapě + Volání + + Učitelé + Žádné informace o učitelích + Žádný předmět + + Přidat účet + Odhlásit se + Chcete se odhlásit z aktivního studenta? + Odhlášení studentů + Studentský účet + Rodičovský účet + Režimu Mobíle API + Hybridní režim + + Verze aplikace + Tvůrci + Seznam vývojářů Wulkanowy + Nahlásit chybu + Pošlete hlášení o chybě e-mailem + FAQ + Přečtěte si často kladené otázky + Server Discord + Připojte se ke komunitě Wulkanowy + Zásady ochrany osobních údajů + Pravidla pro shromažďování osobních údajů + Domovská stránka + Navštivte web a pomozte s vývojem aplikace + Licence + Licence knihoven použitých v aplikaci + + Licence + + Avatar + Zobrazit více na GitHub + + Sdílejte protokoly + Obnovit + + Kontrola aktualizací + Před nahlášením chyby nejprve zkontrolujte, zda je k dispozici aktualizace s opravou chyby + + Obsah + Zkuste to znovu + Popis + Bez popisu + Učitel + Datum + Datum vstupu + Barva + Detaily + Kategorie + Zavřít + Žádná data + Předmět + Předchozí + Další + Vyhledávání + Vyhledávání… + + Žádné lekce + Vyberte téma + Světlý + Tmavý + Téma systému + + Vzhled + Výchozí zobrazení + Výpočet koncoročního průměru + Vynutit průměrný výpočet podle aplikace + Zobrazit přítomnost v účasti + Téma aplikace + Rozbalit známky + Označte aktuální lekci v plánu lekce + Ukázat skupiny vedle předmětů v plánu lekce + Ukázat seznam grafů ve třídních známkách + Ukázat lekce pro celou třídu + Ukázat předměty bez známek v \"Známky\" + Známky barevné schéma + Předměty seřazené v \"Známky\" + Jazyk aplikace + Oznámení + Ukázat notifikace + Ukázat nadcházející oznámení o lekci + Opravte problémy se synchronizací a upozorněním + Ve vašem zařízení mohou nastat problémy se synchronizací dat a oznámenímii.\n\nChcete-li je opravit, přidejte Wulkanowy do funkce Autostart a vypněte optimalizaci/úsporu baterie v nastavení systému telefonu. + Jdi do nastavení + Ukázat oznámení o ladění + Synchronizace + Automatická aktualizace + Pozastaveno na dovolené + Interval aktualizací + Pouze Wi-Fi + Nyní synchronizovat + Synchronizováno! + Synchronizace se nezdařila + Probíhá synchronizace + Synchronizace + Ruční synchronizace neobnoví zobrazení aplikace. + \nChcete-li zobrazit synchronizovaná data, restartujte aplikaci po synchronizaci. + + Jiný + Hodnota plusu + Hodnota mínusu + Odpovědět s historií zpráv + + Nové položky v deník + Nové známky + Šťastné číslo + Nové zprávy + Nové poznámky + Oznámení push + Nadcházející lekce + Ladění + + Černý + Červený + Modrý + Zelený + Nachový + Žádná barva + + Zkopírováno + Vrátit + + Žádné internetové připojení + Vypršel časový limit připojení k denik + Přihlášení selhalo. Zkuste to znovu nebo restartujte aplikaci + Je vyžadována změna hesla + Probíhá údržba UONET+ deník. Zkuste to později znovu + Došlo k neočekávané chybě + Funkce deaktivována vaší školou + Funkce není k dispozici. Přihlaste se v jiném režimu než Mobile API + diff --git a/app/src/main/res/values-de/preferences_values.xml b/app/src/main/res/values-de/preferences_values.xml index 11935b49..2ee70f62 100644 --- a/app/src/main/res/values-de/preferences_values.xml +++ b/app/src/main/res/values-de/preferences_values.xml @@ -12,6 +12,7 @@ Pусский Українська Deutsch + Čeština 15 Minuten @@ -29,6 +30,10 @@ 0,5 0,75 + + Alphabetic + By date + Dzienniczek+ Wulkanowy diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7e287767..c33c273a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -154,6 +154,8 @@ Entschuldigte Verspätung Unentschuldigte Verspätung Anwesend + Deleted + Unknown Lektion Nummer Keine Einträgen @@ -222,6 +224,32 @@ Du hast %1$d Eintrag bekommen Du hast %1$d Eintragen bekommen + + + %d praise + %d praises + + + New praise + New praises + + + You received %1$d praise + You received %1$d praises + + + + %d neutral note + %d neutral notes + + + New neutral note + New neutral notes + + + You received %1$d neutral note + You received %1$d neutral notes + Keine Informationen über Hausaufgaben Gemacht @@ -327,9 +355,12 @@ Thema der Anwendung Noten erweitern Aktuelle Lektion im Stundenplan markieren + Show groups next to subjects in timetable Liste der Diagramme in Klassenbewertungen anzeigen Unterricht der ganzen Klasse anzeigen + Show subjects without grades in Grades Farbschema der Noten + Subjects sorting in \"Grades\" App Sprache Benachrichtigungen Benachrichtigungen anzeigen diff --git a/app/src/main/res/values-pl/preferences_values.xml b/app/src/main/res/values-pl/preferences_values.xml index c57d2be5..0634f657 100644 --- a/app/src/main/res/values-pl/preferences_values.xml +++ b/app/src/main/res/values-pl/preferences_values.xml @@ -12,6 +12,7 @@ Pусский Українська Deutsch + Čeština 15 minut diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 0923951a..8dea2123 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -400,7 +400,7 @@ Pokazuj lekcje całej klasy Pokazuj przedmioty bez ocen w Oceny Schemat kolorów ocen - Sortowanie przedmiotów w "Oceny" + Sortowanie przedmiotów w \"Oceny\" Język aplikacji Powiadomienia Pokazuj powiadomienia @@ -448,9 +448,11 @@ Brak połączenia z internetem Upłynął limit czasu na połączenie z dziennikiem - Logowanie nie powiodło się. Spróbuj ponownie lub zrestartuj aplikację + Logowanie nie powiodło się. Spróbuj ponownie Wymagana zmiana hasła Trwa przerwa techniczna dziennika UONET+. Spróbuj ponownie później + Wystąpił nieznany błąd dziennika UONET+. Spróbuj ponownie później + Wystąpił nieznany błąd aplikacji Wystąpił nieoczekiwany błąd Funkcja wyłączona przez szkołę Funkcja niedostępna. Zaloguj się w trybie innym niż Mobilne API diff --git a/app/src/main/res/values-ru/preferences_values.xml b/app/src/main/res/values-ru/preferences_values.xml index a41abf35..304d678f 100644 --- a/app/src/main/res/values-ru/preferences_values.xml +++ b/app/src/main/res/values-ru/preferences_values.xml @@ -12,6 +12,7 @@ Pусский Українська Deutsch + Čeština 15 минут @@ -29,6 +30,10 @@ 0,5 0,75 + + Алфавитный + По дате + Dzienniczek+ Wulkanowy @@ -36,8 +41,8 @@ Средняя оценка со 2 семестра - Average of grades from both semesters - Average of grades from the whole year + Средняя оценка с двух семестров + Средняя оценок со всего года Не показывать diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7052fbc9..28ac6943 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -108,16 +108,16 @@ Новые оценки - New predicted grade - New predicted grades - New predicted grades - New predicted grades + Новая ожидаемая оценка + Новые ожидаемые оценки + Новые ожидаемые оценки + Новые ожидаемые оценки - New final grade - New final grades - New final grades - New final grades + Новая итоговая оценка + Новые итоговые оценки + Новые итоговые оценки + Новые итоговые оценки Вы получили %1$d оценку @@ -126,16 +126,16 @@ Вы получили %1$d оценок - You received %1$d predicted grade - You received %1$d predicted grades - You received %1$d predicted grades - You received %1$d predicted grades + Вы получили %1$d ожидаемую оценку + Вы получили %1$d ожидаемые оценки + Вы получили %1$d ожидаемых оценок + Вы получили %1$d ожидаемых оценок - You received %1$d final grade - You received %1$d final grades - You received %1$d final grades - You received %1$d final grades + Вы получили %1$d финальную оценку + Вы получили %1$d итоговых оценки + Вы получили %1$d итоговых оценок + Вы получили %1$d финальные оценки Урок @@ -168,6 +168,8 @@ Опоздание по уважительным причинам Опоздание по неуважительным причинам Присутствие + Удалено + Неизвестно Урок № Данные не найдены @@ -204,8 +206,8 @@ Перенести в корзину Удалить навсегда Сообщение успешно удалено - Share - Print + Поделиться + Печать Тема Текст Сообщение успешно отправлено @@ -250,6 +252,44 @@ Вы получили %1$d предупреждений Вы получили %1$d предупреждений + + + %d похвала + %d похвала + %d похвала + %d похвала + + + Новая похвала + Новые похвалы + Новые свершения + Новые похвалы + + + Вы получили %1$d похвалу + Вы получили %1$d похвалы + Вы получили %1$d похвалы + Вы получили %1$d похвалы + + + + %d нейтральное замечание + %d нейтральных замечания + %d нейтральных замечаний + %d нейтральных замечаний + + + Новое нейтральное замечание + Новые нейтральные замечания + Новые нейтральные замечания + Новые нейтральные замечания + + + Вы получили %1$d нейтральное замечание + Вы получили %1$d нейтральных замечания + Вы получили %1$d нейтральных замечаний + Вы получили %1$d нейтральных замечаний + Нет домашних заданий сделанный @@ -291,10 +331,10 @@ Выйти Вы точно хотите выйти из данного аккаунта? Выйти - Student account - Parent account - Mobile API mode - Hybrid mode + Профиль ученика + Профиль родителя + Режим Mobile API + Гибридный режим Версия приложения Разработчики @@ -353,11 +393,14 @@ Принудительно высчитать среднюю оценку через приложение Показывать присутствия в посещаемости Тема приложения - Больше оценок + Разворачивать оценки Отмечать текущий урок в расписании + Показать группу возле предмета в расписании Показывать диаграммы в оценках класса Показать уроки всего класса + Показывать предметы без оценок в \"Оценках\" Схема цветов оценок + Сортировка предметов в \"Оценках\" Язык приложения Уведомления Показывать уведомления diff --git a/app/src/main/res/values-uk/preferences_values.xml b/app/src/main/res/values-uk/preferences_values.xml index 9942621a..0ff8bfd0 100644 --- a/app/src/main/res/values-uk/preferences_values.xml +++ b/app/src/main/res/values-uk/preferences_values.xml @@ -12,6 +12,7 @@ Pусский Українська Deutsch + Čeština 15 хвилин @@ -29,6 +30,10 @@ 0,5 0,75 + + Alphabetic + By date + Dzienniczek+ Wulkanowy diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 15fe203d..ed10d24d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -168,6 +168,8 @@ Спізнення з поважних причин Спізнення з не поважних причин Присутність + Deleted + Unknown Номер уроку Брак записів @@ -250,6 +252,44 @@ %1$d нових зауважень %1$d нових зауважень + + + %d praise + %d praises + %d praises + %d praises + + + New praise + New praises + New praises + New praises + + + You received %1$d praise + You received %1$d praises + You received %1$d praises + You received %1$d praises + + + + %d neutral note + %d neutral notes + %d neutral notes + %d neutral notes + + + New neutral note + New neutral notes + New neutral notes + New neutral notes + + + You received %1$d neutral note + You received %1$d neutral notes + You received %1$d neutral notes + You received %1$d neutral notes + Брак домашніх завдань Позначити як зроблене @@ -355,9 +395,12 @@ Тема додатку Більше оцінок Позначити поточний урок у розкладі + Show groups next to subjects in timetable Показувати діаграми в оцінках класу Показати уроки всього класу + Show subjects without grades in Grades Схема кольорів оцінок + Subjects sorting in \"Grades\" Мова додатку Повідомлення Показувати повідомлення diff --git a/app/src/main/res/values/preferences_values.xml b/app/src/main/res/values/preferences_values.xml index 06a9d8c4..d994213c 100644 --- a/app/src/main/res/values/preferences_values.xml +++ b/app/src/main/res/values/preferences_values.xml @@ -31,6 +31,7 @@ Pусский Українська Deutsch + Čeština system @@ -39,6 +40,7 @@ ru uk de + cs diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bf4727be..d45ef8dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -472,13 +472,21 @@ Copied Undo + + Start downloading update… + An update has just been downloaded. + Restart + Update failed! Wulkanowy may not function properly. Consider updating + No internet connection Connection to the register timed out - Login failed. Try again or restart the app + Login failed. Try again Password change required Maintenance underway UONET + register. Try again later + Unknown UONET + register error. Try again later + Unknown application error An unexpected error occurred Feature disabled by your school Feature not available. Login in a mode other than Mobile API diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8f30e345..58ad1640 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -23,7 +23,7 @@ @drawable/layer_splash_background -