From 3e106d5af0265477b2704a2f6cdeb63eab56fe05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Tue, 11 Jun 2024 20:37:31 +0200 Subject: [PATCH 1/3] Add end (#2574) --- .../java/io/github/wulkanowy/data/Resource.kt | 4 +- .../data/repositories/WulkanowyRepository.kt | 5 +- .../wulkanowy/services/sync/SyncManager.kt | 20 +++++- .../wulkanowy/services/sync/SyncWorker.kt | 6 +- .../wulkanowy/ui/modules/end/EndFragment.kt | 31 +++++++++ .../wulkanowy/ui/modules/end/EndView.kt | 5 ++ .../ui/modules/login/LoginActivity.kt | 6 ++ .../ui/modules/login/LoginPresenter.kt | 12 +++- .../wulkanowy/ui/modules/login/LoginView.kt | 2 + .../LuckyNumberWidgetProvider.kt | 9 +++ .../wulkanowy/ui/modules/main/MainActivity.kt | 8 +++ .../ui/modules/main/MainPresenter.kt | 10 +++ .../wulkanowy/ui/modules/main/MainView.kt | 2 + .../timetablewidget/TimetableWidgetFactory.kt | 3 + app/src/main/res/layout/fragment_end.xml | 63 +++++++++++++++++++ .../values-csb-rPL-v29/preferences_values.xml | 9 +++ app/src/main/res/values/strings.xml | 4 ++ 17 files changed, 192 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/io/github/wulkanowy/ui/modules/end/EndFragment.kt create mode 100644 app/src/main/java/io/github/wulkanowy/ui/modules/end/EndView.kt create mode 100644 app/src/main/res/layout/fragment_end.xml create mode 100644 app/src/main/res/values-csb-rPL-v29/preferences_values.xml diff --git a/app/src/main/java/io/github/wulkanowy/data/Resource.kt b/app/src/main/java/io/github/wulkanowy/data/Resource.kt index 712a946f3..61eaaea19 100644 --- a/app/src/main/java/io/github/wulkanowy/data/Resource.kt +++ b/app/src/main/java/io/github/wulkanowy/data/Resource.kt @@ -1,5 +1,6 @@ package io.github.wulkanowy.data +import io.github.wulkanowy.data.repositories.isEndDateReached import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.Flow @@ -267,7 +268,8 @@ inline fun networkBoundResource( emit(Resource.Loading()) val data = query().first() - if (shouldFetch(data)) { + val updatedShouldFetch = if (isEndDateReached) false else shouldFetch(data) + if (updatedShouldFetch) { emit(Resource.Intermediate(data)) try { diff --git a/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt b/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt index 815f8b758..a25f8a0e6 100644 --- a/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt +++ b/app/src/main/java/io/github/wulkanowy/data/repositories/WulkanowyRepository.kt @@ -12,9 +12,13 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNot import kotlinx.coroutines.sync.Mutex import timber.log.Timber +import java.time.LocalDate import javax.inject.Inject import javax.inject.Singleton +private val endDate = LocalDate.of(2024, 6, 25) +val isEndDateReached = LocalDate.now() >= endDate + @Singleton class WulkanowyRepository @Inject constructor( private val wulkanowyService: WulkanowyService, @@ -24,7 +28,6 @@ class WulkanowyRepository @Inject constructor( ) { private val saveFetchResultMutex = Mutex() - private val cacheKey = "mapping_refresh_key" fun getAdminMessages(): Flow>> = diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/SyncManager.kt b/app/src/main/java/io/github/wulkanowy/services/sync/SyncManager.kt index e0a136f98..aa0700b3e 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/SyncManager.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/SyncManager.kt @@ -4,19 +4,27 @@ import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION_CODES.O import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.asFlow -import androidx.work.* import androidx.work.BackoffPolicy.EXPONENTIAL +import androidx.work.Constraints +import androidx.work.Data import androidx.work.ExistingPeriodicWorkPolicy.KEEP import androidx.work.ExistingPeriodicWorkPolicy.UPDATE +import androidx.work.ExistingWorkPolicy import androidx.work.NetworkType.CONNECTED import androidx.work.NetworkType.UNMETERED +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.PeriodicWorkRequestBuilder +import androidx.work.WorkInfo +import androidx.work.WorkManager import io.github.wulkanowy.data.db.SharedPrefProvider import io.github.wulkanowy.data.db.SharedPrefProvider.Companion.APP_VERSION_CODE_KEY import io.github.wulkanowy.data.repositories.PreferencesRepository +import io.github.wulkanowy.data.repositories.isEndDateReached import io.github.wulkanowy.services.sync.channels.Channel import io.github.wulkanowy.utils.AppInfo import io.github.wulkanowy.utils.isHolidays import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf import timber.log.Timber import java.time.LocalDate.now import java.util.concurrent.TimeUnit.MINUTES @@ -34,7 +42,9 @@ class SyncManager @Inject constructor( ) { init { - if (now().isHolidays) stopSyncWorker() + if (now().isHolidays || isEndDateReached) { + stopSyncWorker() + } if (SDK_INT >= O) { channels.forEach { it.create() } @@ -50,7 +60,7 @@ class SyncManager @Inject constructor( } fun startPeriodicSyncWorker(restart: Boolean = false) { - if (preferencesRepository.isServiceEnabled && !now().isHolidays) { + if (preferencesRepository.isServiceEnabled && !now().isHolidays && isEndDateReached) { val serviceInterval = preferencesRepository.servicesInterval workManager.enqueueUniquePeriodicWork( @@ -70,6 +80,10 @@ class SyncManager @Inject constructor( // if quiet, no notifications will be sent fun startOneTimeSyncWorker(quiet: Boolean = false): Flow { + if (isEndDateReached) { + return flowOf(null) + } + val work = OneTimeWorkRequestBuilder() .setInputData( Data.Builder() diff --git a/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt b/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt index bcbc23ef2..a7639a258 100644 --- a/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt +++ b/app/src/main/java/io/github/wulkanowy/services/sync/SyncWorker.kt @@ -15,6 +15,7 @@ import io.github.wulkanowy.R import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.data.repositories.SemesterRepository import io.github.wulkanowy.data.repositories.StudentRepository +import io.github.wulkanowy.data.repositories.isEndDateReached import io.github.wulkanowy.sdk.exception.FeatureNotAvailableException import io.github.wulkanowy.sdk.scrapper.exception.FeatureDisabledException import io.github.wulkanowy.sdk.scrapper.exception.FeatureUnavailableException @@ -42,7 +43,9 @@ class SyncWorker @AssistedInject constructor( override suspend fun doWork(): Result = withContext(dispatchersProvider.io) { Timber.i("SyncWorker is starting") - if (!studentRepository.isCurrentStudentSet()) return@withContext Result.failure() + if (!studentRepository.isCurrentStudentSet() || isEndDateReached) { + return@withContext Result.failure() + } val (student, semester) = try { val student = studentRepository.getCurrentStudent() @@ -91,6 +94,7 @@ class SyncWorker @AssistedInject constructor( .build() ) } + errors.isNotEmpty() -> Result.retry() else -> { preferencesRepository.lasSyncDate = Instant.now() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndFragment.kt new file mode 100644 index 000000000..cefbdddd3 --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndFragment.kt @@ -0,0 +1,31 @@ +package io.github.wulkanowy.ui.modules.end + +import android.os.Bundle +import android.text.method.LinkMovementMethod +import android.view.View +import androidx.activity.addCallback +import androidx.core.text.HtmlCompat +import dagger.hilt.android.AndroidEntryPoint +import io.github.wulkanowy.R +import io.github.wulkanowy.databinding.FragmentEndBinding +import io.github.wulkanowy.ui.base.BaseFragment + +@AndroidEntryPoint +class EndFragment : BaseFragment(R.layout.fragment_end), EndView { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding = FragmentEndBinding.bind(view) + + requireActivity().onBackPressedDispatcher.addCallback { + requireActivity().finishAffinity() + } + + binding.endClose.setOnClickListener { requireActivity().finishAffinity() } + + val message = getString(R.string.end_message) + binding.endDescription.movementMethod = LinkMovementMethod.getInstance() + binding.endDescription.text = + HtmlCompat.fromHtml(message, HtmlCompat.FROM_HTML_MODE_COMPACT) + } +} diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndView.kt new file mode 100644 index 000000000..730d570e6 --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/end/EndView.kt @@ -0,0 +1,5 @@ +package io.github.wulkanowy.ui.modules.end + +import io.github.wulkanowy.ui.base.BaseView + +interface EndView : BaseView 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 e528c5147..0d9bb21ef 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 @@ -15,6 +15,7 @@ import io.github.wulkanowy.R import io.github.wulkanowy.data.pojos.RegisterUser import io.github.wulkanowy.databinding.ActivityLoginBinding import io.github.wulkanowy.ui.base.BaseActivity +import io.github.wulkanowy.ui.modules.end.EndFragment import io.github.wulkanowy.ui.modules.login.advanced.LoginAdvancedFragment import io.github.wulkanowy.ui.modules.login.form.LoginFormFragment import io.github.wulkanowy.ui.modules.login.recover.LoginRecoverFragment @@ -115,9 +116,14 @@ class LoginActivity : BaseActivity(), Logi } } + override fun navigateToEnd() { + openFragment(EndFragment(), clearBackStack = true) + } + override fun onResume() { super.onResume() inAppUpdateHelper.onResume() presenter.updateSdkMappings() + presenter.checkIfEnd() } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginPresenter.kt index aff0515f0..36552193c 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginPresenter.kt @@ -2,6 +2,8 @@ package io.github.wulkanowy.ui.modules.login import io.github.wulkanowy.data.repositories.StudentRepository import io.github.wulkanowy.data.repositories.WulkanowyRepository +import io.github.wulkanowy.data.repositories.isEndDateReached +import io.github.wulkanowy.services.sync.SyncManager import io.github.wulkanowy.ui.base.BasePresenter import io.github.wulkanowy.ui.base.ErrorHandler import kotlinx.coroutines.launch @@ -11,7 +13,8 @@ import javax.inject.Inject class LoginPresenter @Inject constructor( private val wulkanowyRepository: WulkanowyRepository, errorHandler: ErrorHandler, - studentRepository: StudentRepository + studentRepository: StudentRepository, + private val syncManager: SyncManager ) : BasePresenter(errorHandler, studentRepository) { override fun onAttachView(view: LoginView) { @@ -26,4 +29,11 @@ class LoginPresenter @Inject constructor( .onFailure { Timber.e(it) } } } + + fun checkIfEnd() { + if (isEndDateReached) { + syncManager.stopSyncWorker() + view?.navigateToEnd() + } + } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginView.kt index a0949e6d9..3fe1f0463 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginView.kt @@ -5,4 +5,6 @@ import io.github.wulkanowy.ui.base.BaseView interface LoginView : BaseView { fun initView() + + fun navigateToEnd() } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt index e6de17818..18437ef7a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/luckynumberwidget/LuckyNumberWidgetProvider.kt @@ -14,7 +14,9 @@ import io.github.wulkanowy.R import io.github.wulkanowy.data.dataOrThrow import io.github.wulkanowy.data.db.SharedPrefProvider import io.github.wulkanowy.data.repositories.LuckyNumberRepository +import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.data.repositories.StudentRepository +import io.github.wulkanowy.data.repositories.isEndDateReached import io.github.wulkanowy.data.toFirstResult import io.github.wulkanowy.ui.modules.Destination import io.github.wulkanowy.ui.modules.splash.SplashActivity @@ -35,6 +37,9 @@ class LuckyNumberWidgetProvider : AppWidgetProvider() { @Inject lateinit var sharedPref: SharedPrefProvider + @Inject + lateinit var preferencesRepository: PreferencesRepository + companion object { private const val LUCKY_NUMBER_WIDGET_MAX_SIZE = 196 @@ -130,6 +135,10 @@ class LuckyNumberWidgetProvider : AppWidgetProvider() { } private fun getLuckyNumber(studentId: Long, appWidgetId: Int) = runBlocking { + if (isEndDateReached) { + return@runBlocking null + } + try { val students = studentRepository.getSavedStudents() val student = students.singleOrNull { it.student.id == studentId }?.student 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 e64aa9b07..23aa51b42 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 @@ -33,6 +33,7 @@ import io.github.wulkanowy.ui.modules.Destination import io.github.wulkanowy.ui.modules.account.accountquick.AccountQuickDialog import io.github.wulkanowy.ui.modules.auth.AuthDialog import io.github.wulkanowy.ui.modules.captcha.CaptchaDialog +import io.github.wulkanowy.ui.modules.end.EndFragment import io.github.wulkanowy.ui.modules.settings.appearance.menuorder.AppMenuItem import io.github.wulkanowy.utils.AnalyticsHelper import io.github.wulkanowy.utils.AppInfo @@ -139,6 +140,7 @@ class MainActivity : BaseActivity(), MainVie super.onResume() inAppUpdateHelper.onResume() presenter.updateSdkMappings() + presenter.checkIfEnd() } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -362,4 +364,10 @@ class MainActivity : BaseActivity(), MainVie super.onSaveInstanceState(outState) navController.onSaveInstanceState(outState) } + + override fun navigateToEnd() { + binding.mainToolbar.isVisible = false + pushView(EndFragment()) + onBackCallback?.isEnabled = false + } } 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 6a072718d..13edac6e1 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 @@ -7,6 +7,7 @@ import io.github.wulkanowy.data.onResourceSuccess import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.data.repositories.StudentRepository import io.github.wulkanowy.data.repositories.WulkanowyRepository +import io.github.wulkanowy.data.repositories.isEndDateReached import io.github.wulkanowy.data.resourceFlow import io.github.wulkanowy.services.sync.SyncManager import io.github.wulkanowy.ui.base.BasePresenter @@ -15,6 +16,7 @@ import io.github.wulkanowy.ui.base.ErrorHandler import io.github.wulkanowy.ui.modules.Destination import io.github.wulkanowy.ui.modules.account.AccountView import io.github.wulkanowy.ui.modules.account.accountdetails.AccountDetailsView +import io.github.wulkanowy.ui.modules.end.EndView import io.github.wulkanowy.ui.modules.studentinfo.StudentInfoView import io.github.wulkanowy.utils.AdsHelper import io.github.wulkanowy.utils.AnalyticsHelper @@ -110,6 +112,7 @@ class MainPresenter @Inject constructor( } private fun shouldShowBottomNavigation(destination: BaseView) = when (destination) { + is EndView, is AccountView, is StudentInfoView, is AccountDetailsView -> false @@ -208,4 +211,11 @@ class MainPresenter @Inject constructor( .onFailure { Timber.e(it) } } } + + fun checkIfEnd() { + if (isEndDateReached) { + syncManager.stopSyncWorker() + view?.navigateToEnd() + } + } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainView.kt index 70a94fc81..c83d95681 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/main/MainView.kt @@ -48,6 +48,8 @@ interface MainView : BaseView { fun openMoreDestination(destination: Destination) + fun navigateToEnd() + interface MainChildView { fun onFragmentReselected() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt index e60d54880..55621bc5a 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/timetablewidget/TimetableWidgetFactory.kt @@ -22,6 +22,7 @@ import io.github.wulkanowy.data.repositories.PreferencesRepository import io.github.wulkanowy.data.repositories.SemesterRepository import io.github.wulkanowy.data.repositories.StudentRepository import io.github.wulkanowy.data.repositories.TimetableRepository +import io.github.wulkanowy.data.repositories.isEndDateReached import io.github.wulkanowy.data.toFirstResult import io.github.wulkanowy.ui.modules.timetablewidget.TimetableWidgetProvider.Companion.getDateWidgetKey import io.github.wulkanowy.ui.modules.timetablewidget.TimetableWidgetProvider.Companion.getStudentWidgetKey @@ -71,6 +72,8 @@ class TimetableWidgetFactory( items = emptyList() + if (isEndDateReached) return + runBlocking { runCatching { val student = getStudent(studentId) ?: return@runBlocking diff --git a/app/src/main/res/layout/fragment_end.xml b/app/src/main/res/layout/fragment_end.xml new file mode 100644 index 000000000..883f0fc56 --- /dev/null +++ b/app/src/main/res/layout/fragment_end.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-csb-rPL-v29/preferences_values.xml b/app/src/main/res/values-csb-rPL-v29/preferences_values.xml new file mode 100644 index 000000000..23a933143 --- /dev/null +++ b/app/src/main/res/values-csb-rPL-v29/preferences_values.xml @@ -0,0 +1,9 @@ + + + + Motiw systemu + Jôsny + Cemny + Cemny (AMOLED) + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82ccf5a2a..2337cfe87 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -895,4 +895,8 @@ Unmute You have muted this user You have unmuted this user + + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href="https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! From 6ac30c5a03576e85f697fcba8d870c7012d59344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Borcz?= Date: Wed, 12 Jun 2024 21:36:13 +0200 Subject: [PATCH 2/3] New Crowdin updates (#2593) --- app/src/main/res/values-cs/strings.xml | 3 +++ app/src/main/res/values-csb-rPL/strings.xml | 3 +++ app/src/main/res/values-de/strings.xml | 3 +++ app/src/main/res/values-pl/strings.xml | 3 +++ app/src/main/res/values-ru/strings.xml | 27 ++++++++++++--------- app/src/main/res/values-sk/strings.xml | 3 +++ app/src/main/res/values-uk/strings.xml | 3 +++ 7 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index bfb19ee14..25537b148 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -895,4 +895,7 @@ Zrušit ztlumení Ztlumili jste tohoto uživatele Zrušili jste ztlumení tohoto uživatele + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-csb-rPL/strings.xml b/app/src/main/res/values-csb-rPL/strings.xml index 010a30821..130509a3c 100644 --- a/app/src/main/res/values-csb-rPL/strings.xml +++ b/app/src/main/res/values-csb-rPL/strings.xml @@ -848,4 +848,7 @@ Wëłączë wëcëszenié Wëcësził jes tegò brëkòwnika Wëłącził jes wëcëszenié tegò brëkòwnika + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index cf682cf56..69254c2c3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -801,4 +801,7 @@ Stummschaltung aufheben Sie haben diesen Benutzer stummgeschaltet Sie haben die Stummschaltung dieses Benutzers aufgehoben + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 9d291261e..f7af09f36 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -895,4 +895,7 @@ Wyłącz wyciszenie Wyciszyleś tego użytkownika Wyłączyłeś wyciszenie tego użytkownika + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 8f6847c75..4014a9374 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -58,7 +58,7 @@ Используйте назначенный логин или email в @%1$s Недопустимый суффикс домена Неверный символ. Если вы не можете найти символ, пожалуйста, свяжитесь со школой - Don\'t make this up! If you cannot find it, please contact the school + Неверный символ. Если вы не можете найти символ, пожалуйста, свяжитесь со школой Ученик не найден. Проверьте symbol и выбранный тип дненика UONET+ Данный ученик уже авторизован Symbol можно найти на странице регистрации в  Uczeń → Dostęp Mobilny → Wygeneruj kod dostępu.\n\nУбедитесь, что вы выбрали соответствующий тип дневника в поле Тип дневника UONET+ на первом экране входа @@ -123,7 +123,7 @@ Ожидаемая оценка Описательная оценка Рассчитанная средняя семестра - Calculated annual average + Рассчитанная средняя оценка Как работает \"Рассчитанная средняя оценка\"? Рассчитанная средняя оценка - это среднее арифметическое, рассчитанное на основе средних оценок по предметам. Это позволяет узнать приблизительную итоговую среднюю оценку. Она рассчитывается способом, выбранным пользователем в настройках приложения. Рекомендуется выбрать подходящий вариант, так как каждая школа по разному считает среднюю оценку. Кроме того, если ваша школа выставляет средние оценки по предметам на странице Vulcan, приложение просто загрузит их. Это можно изменить, заставив приложение считать среднюю оценку в настройках.\n\nСредняя из оценок выбранного семестра:\n1. Вычисление средневзвешенного значения по каждому предмету за семестр\n2.Суммирование вычисленных значений\n3. Вычисление среднего арифметического суммированных значений\n\nСредняя из средних оценок семестров:\n1.Расчет средневзвешенного значения для каждого предмета в семестрах. \n2. Вычисление среднего арифметического из средневзвешенных значений для каждого предмета в семестрах.\n3. Суммирование средних арифметических\n4. Вычисление среднего арифматического из суммированных значений\n\nСредняя из оценок со всего года:\n1. Расчет средневзвешенного значения по каждому предмету за год. Итоговое среднее значение за 1 семестр не имеет значения.\n2. Суммирование вычисленных средних\n3. Расчет среднего арифметического суммированных чисел Как работает \"Итоговая средняя оценка\"? @@ -271,11 +271,11 @@ Итоговая посещаемость Калькулятор посещаемости - %1$d over target - right on target - %1$d under target - %1$d/%2$d presences - No attendances recorded + %1$d выше нормы + является нормой + %1$d выше нормы + %1$d/%2$d посещаемостей + Нет зарегистрированных участников Отсутствие по школьным причинам Отсутствие по уважительной причине Отсутствие по неуважительной причине @@ -742,9 +742,9 @@ Параметры расчёта средних оценок Принудительно высчитать среднюю оценку через приложение Показывать присутствия - Attendance target - Show subjects without any attendances - Attendance calculator sorting + Норма посещаемости + Показать предметы без посещаемостей + Сортировка рассчитанных посещаемостей Тема Разворачивание оценок Показать группы рядом с темами @@ -870,10 +870,10 @@ Пропустить сейчас Требуется верификация веб-сайта VULCAN - Why am I seeing this?\nThe register website from which Wulkanowy downloads data displays the same screen as above, so Wulkanowy must also show it to be able to download data from this website. There\'s no way around it + Почему я это вижу?\n Веб-сайт регистрации, с которого Wulkanowy загружает данные, отображает тот же экран, что и выше, поэтому Wulkanowy также должен показать его, чтобы иметь возможность загружать данные с этого веб-сайта. Нет никакого способа обойти это Верификация успешна - Emergency access + Экстренный доступ Интернет-соединение отсутствует Произошла ошибка. Проверьте время на вашем устройстве @@ -895,4 +895,7 @@ Включить уведомления Вы отключили уведомления от этого пользователя Вы включили уведомления от этого пользователя снова + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 519670f6c..7de883e92 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -895,4 +895,7 @@ Zrušiť stlmenie Stlmili ste tohto používateľa Zrušili ste stlmenie tohto používateľa + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index c6f6f0462..a2586935d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -895,4 +895,7 @@ Ввімкнути сповіщення Ви ігноруєте цього користувача Ви не ігноруєте цього користувача + + Koniec Wulkanowego + Jak zapewne niektórzy z Was się domyślali zbliża się ten moment, aby zakończyć pewien etap. Wraz z końcem tego roku szkolnego zamykamy projekt Wulkanowy. Stworzenie apki było ekscytującym wyzwaniem, ale skala projektu jest tak duża, że nie jesteśmy w stanie odpowiedzialnie utrzymywać aplikacji. Wulkanowy był fajną przygodą, ale sytuacja wymknęła się nam spod kontroli – zarówno pod względem technicznym, jak i społecznym. Nie akceptujemy pojawiającego się hejtu wobec nas ani wobec innych, także Vulcana. Nie chcemy brać udziału w tych działaniach i być z nimi utożsamiani. Prosimy Was o powściągliwość i rozwagę w publikowanych komentarzach i nieprzekraczanie dopuszczalnych granic.<br /><br />Prosimy Was też o uszanowanie naszej decyzji, jest ona przemyślana i ostateczna. Wszystkim dotychczasowym użytkownikom Wulkanowego rekomendujemy użycie oficjalnej aplikacji <a href=\"https://play.google.com/store/apps/details?id=pl.edu.vulcan.hebe&hl=pl\">Dzienniczek VULCAN</a>. Jeszcze raz dziękujemy wszystkim użytkownikom za lata wsparcia, pomoc i miłe słowa! From f5aadb9cc8fb477e9aa199c62e3a0f0e92a07559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Pich?= Date: Wed, 12 Jun 2024 22:22:22 +0200 Subject: [PATCH 3/3] Version 2.7.0 --- app/build.gradle | 6 +++--- .../java/io/github/wulkanowy/data/WulkanowySdkFactory.kt | 4 +++- app/src/main/play/release-notes/pl-PL/default.txt | 7 ++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4be4543c4..17cb0aa60 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,8 +27,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 21 targetSdkVersion 34 - versionCode 176 - versionName "2.6.16" + versionCode 177 + versionName "2.7.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resValue "string", "app_name", "Wulkanowy" @@ -191,7 +191,7 @@ ext { } dependencies { - implementation 'io.github.wulkanowy:sdk:2.6.14' + implementation 'io.github.wulkanowy:sdk:2.7.0' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' diff --git a/app/src/main/java/io/github/wulkanowy/data/WulkanowySdkFactory.kt b/app/src/main/java/io/github/wulkanowy/data/WulkanowySdkFactory.kt index 6b8555e43..9de751c5c 100644 --- a/app/src/main/java/io/github/wulkanowy/data/WulkanowySdkFactory.kt +++ b/app/src/main/java/io/github/wulkanowy/data/WulkanowySdkFactory.kt @@ -36,7 +36,9 @@ class WulkanowySdkFactory @Inject constructor( private val migrationFailedStudentIds = mutableSetOf() private val sandbox: ListenableFuture? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && JavaScriptSandbox.isSupported()) - JavaScriptSandbox.createConnectedInstanceAsync(context) + runCatching { JavaScriptSandbox.createConnectedInstanceAsync(context) } + .onFailure { Timber.e(it) } + .getOrNull() else null private val sdk = Sdk().apply { 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 dfcb4ef55..c616505f8 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,6 +1,7 @@ -Wersja 2.6.16 +Wersja 2.7.0 -— dodaliśmy język kaszubski -— naprawiliśmy crash aplikacji przy przełączaniu uczniów, kiedy włączone są reklamy +— naprawiliśmy ustawienia wyglądu po zmianie na język kaszubski +— dodaliśmy ekran końca +- naprawiliśmy ładowanie ocen z modułu Uczeń Plus Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases