diff --git a/app/build.gradle b/app/build.gradle index 338d10fa..c4e4b003 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,8 +27,8 @@ android { testApplicationId "io.github.tests.wulkanowy" minSdkVersion 21 targetSdkVersion 34 - versionCode 172 - versionName "2.6.12" + versionCode 173 + versionName "2.6.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resValue "string", "app_name", "Wulkanowy" @@ -160,7 +160,7 @@ play { defaultToAppBundles = false track = 'production' releaseStatus = ReleaseStatus.IN_PROGRESS - userFraction = 0.99d + userFraction = 0.1d updatePriority = 2 enabled.set(false) } @@ -191,7 +191,7 @@ ext { } dependencies { - implementation 'io.github.wulkanowy:sdk:2.6.10' + implementation 'io.github.wulkanowy:sdk:2.6.11' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardFragment.kt index bc6a991a..25774d04 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardFragment.kt @@ -30,6 +30,7 @@ import io.github.wulkanowy.ui.modules.main.MainActivity import io.github.wulkanowy.ui.modules.main.MainView import io.github.wulkanowy.ui.modules.message.MessageFragment import io.github.wulkanowy.ui.modules.notificationscenter.NotificationsCenterFragment +import io.github.wulkanowy.ui.modules.panicmode.PanicModeFragment import io.github.wulkanowy.ui.modules.schoolannouncement.SchoolAnnouncementFragment import io.github.wulkanowy.ui.modules.timetable.TimetableFragment import io.github.wulkanowy.utils.capitalise @@ -241,6 +242,10 @@ class DashboardFragment : BaseFragment(R.layout.fragme requireContext().openInternetBrowser(url) } + override fun openPanicWebView(url: String) { + (requireActivity() as MainActivity).pushView(PanicModeFragment.newInstance(url)) + } + override fun onDestroyView() { dashboardAdapter.clearTimers() presenter.onDetachView() diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt index 74a34fac..84e7412e 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardPresenter.kt @@ -296,7 +296,7 @@ class DashboardPresenter @Inject constructor( .build() .toString() - view?.openInternetBrowser(urlToOpen) + view?.openPanicWebView(urlToOpen) } .launch("panic_button") } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardView.kt index 56a0a773..dd7fb962 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/dashboard/DashboardView.kt @@ -31,4 +31,6 @@ interface DashboardView : BaseView { fun openNotificationsCenterView() fun openInternetBrowser(url: String) + + fun openPanicWebView(url: String) } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt index 12f9d323..b29c2cd8 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabFragment.kt @@ -27,6 +27,7 @@ import io.github.wulkanowy.ui.modules.main.MainActivity import io.github.wulkanowy.ui.modules.message.MessageFragment import io.github.wulkanowy.ui.modules.message.mailboxchooser.MailboxChooserDialog import io.github.wulkanowy.ui.modules.message.preview.MessagePreviewFragment +import io.github.wulkanowy.ui.modules.panicmode.PanicModeFragment import io.github.wulkanowy.ui.widgets.DividerItemDecoration import io.github.wulkanowy.utils.dpToPx import io.github.wulkanowy.utils.getThemeAttrColor @@ -132,6 +133,7 @@ class MessageTabFragment : BaseFragment(R.layout.frag ) messageTabErrorRetry.setOnClickListener { presenter.onRetry() } messageTabErrorDetails.setOnClickListener { presenter.onDetailsClick() } + messageTabPanicSection.dashboardPanicButton.setOnClickListener { presenter.onPanicButtonClicked() } } setFragmentResultListener(requireArguments().getString(MESSAGE_TAB_FOLDER_ID)!!) { _, bundle -> @@ -283,6 +285,10 @@ class MessageTabFragment : BaseFragment(R.layout.frag ) } + override fun openPanicWebView(url: String) { + (requireActivity() as MainActivity).pushView(PanicModeFragment.newInstance(url)) + } + override fun hideKeyboard() { activity?.hideSoftInput() } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt index cda0b32b..ad3e7c9c 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabPresenter.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import me.xdrop.fuzzywuzzy.FuzzySearch +import okhttp3.HttpUrl.Companion.toHttpUrl import timber.log.Timber import javax.inject.Inject import kotlin.math.pow @@ -429,4 +430,20 @@ class MessageTabPresenter @Inject constructor( + dateRatio.toDouble().pow(2) * 2 ).toInt() } + + fun onPanicButtonClicked() { + resourceFlow { studentRepository.getCurrentStudent() } + .onResourceError { errorHandler.dispatch(it) } + .onResourceSuccess { + val baseUrl = it.scrapperBaseUrl.toHttpUrl() + val urlToOpen = baseUrl.newBuilder() + .host("uonetplus${it.scrapperDomainSuffix}-wiadomosciplus.${baseUrl.host}") + .addPathSegment(it.symbol) + .build() + .toString() + + view?.openPanicWebView(urlToOpen) + } + .launch("panic_button") + } } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt index 247af434..e544a3d6 100644 --- a/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/message/tab/MessageTabView.kt @@ -50,4 +50,6 @@ interface MessageTabView : BaseView { fun showRecyclerBottomPadding(show: Boolean) fun showMailboxChooser(mailboxes: List) + + fun openPanicWebView(url: String) } diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/panicmode/PanicModeFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/panicmode/PanicModeFragment.kt new file mode 100644 index 00000000..df51c5f9 --- /dev/null +++ b/app/src/main/java/io/github/wulkanowy/ui/modules/panicmode/PanicModeFragment.kt @@ -0,0 +1,99 @@ +package io.github.wulkanowy.ui.modules.panicmode + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.View +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.activity.addCallback +import androidx.core.os.bundleOf +import dagger.hilt.android.AndroidEntryPoint +import io.github.wulkanowy.R +import io.github.wulkanowy.data.WulkanowySdkFactory +import io.github.wulkanowy.databinding.FragmentPanicModeBinding +import io.github.wulkanowy.ui.base.BaseFragment +import io.github.wulkanowy.ui.modules.main.MainView +import io.github.wulkanowy.utils.WebkitCookieManagerProxy +import io.github.wulkanowy.utils.openInternetBrowser +import javax.inject.Inject + +@AndroidEntryPoint +class PanicModeFragment : BaseFragment(R.layout.fragment_panic_mode), + MainView.TitledView { + + @Inject + lateinit var wulkanowySdkFactory: WulkanowySdkFactory + + @Inject + lateinit var webkitCookieManagerProxy: WebkitCookieManagerProxy + + private var webView: WebView? = null + + override val titleStringId: Int get() = R.string.panic_mode_title + + companion object { + + private const val PANIC_URL = "panic_mode_url" + fun newInstance(url: String?): PanicModeFragment { + return PanicModeFragment().apply { + arguments = bundleOf(PANIC_URL to url) + } + } + } + + @SuppressLint("SetJavaScriptEnabled") + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding = FragmentPanicModeBinding.bind(view) + + binding.panicModeRefresh.setOnClickListener { + binding.panicModeWebview.loadUrl( + binding.panicModeWebview.url ?: arguments?.getString(PANIC_URL).orEmpty() + ) + } + binding.panicModeBack.setOnClickListener { binding.panicModeWebview.goBack() } + binding.panicModeHome.setOnClickListener { + binding.panicModeWebview.loadUrl( + arguments?.getString(PANIC_URL).orEmpty() + ) + } + binding.panicModeForward.setOnClickListener { binding.panicModeWebview.goForward() } + binding.panicModeShare.setOnClickListener { + requireContext().openInternetBrowser( + binding.panicModeWebview.url.toString(), + ) + } + + val onBackPressedCallback = requireActivity().onBackPressedDispatcher + .addCallback(viewLifecycleOwner) { + binding.panicModeWebview.goBack() + } + + with(binding.panicModeWebview) { + webView = this + with(settings) { + javaScriptEnabled = true + userAgentString = wulkanowySdkFactory.createBase().userAgent + } + + webViewClient = object : WebViewClient() { + override fun doUpdateVisitedHistory( + view: WebView?, + url: String?, + isReload: Boolean + ) { + binding.panicModeBack.isEnabled = binding.panicModeWebview.canGoBack() + binding.panicModeForward.isEnabled = binding.panicModeWebview.canGoForward() + onBackPressedCallback.isEnabled = binding.panicModeWebview.canGoBack() + } + } + loadUrl(arguments?.getString(PANIC_URL).orEmpty()) + } + } + + override fun onDestroy() { + webkitCookieManagerProxy.webkitCookieManager?.flush() + webView?.destroy() + super.onDestroy() + } +} 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 16c7a0ce..b81bcc36 100644 --- a/app/src/main/play/release-notes/pl-PL/default.txt +++ b/app/src/main/play/release-notes/pl-PL/default.txt @@ -1,5 +1,6 @@ -Wersja 2.6.12 +Wersja 2.6.13 -— dodaliśmy przycisk otwierający stronę dziennika w awaryjnych sytuacjach (ostatnio cały czas jest awaryjna sytuacja) +— dodaliśmy tryb awaryjny (no w sensie taka przeglądarka z dziennikiem w apce, ale nie trzeba się ręcznie logować) +— naprawiliśmy ładowania ucznia na tle klasy i lekcji zrealizowanych Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases diff --git a/app/src/main/res/layout/fragment_message_tab.xml b/app/src/main/res/layout/fragment_message_tab.xml index f17ec8df..1bbf0881 100644 --- a/app/src/main/res/layout/fragment_message_tab.xml +++ b/app/src/main/res/layout/fragment_message_tab.xml @@ -60,6 +60,16 @@ tools:ignore="UseCompoundDrawables" tools:visibility="invisible"> + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e2c1ec5b..c1543c39 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -872,6 +872,8 @@ Strona dziennika VULCAN wymaga weryfikacji Dlaczego to widzę?\nStrona internetowa dziennika, z której Wulkanowy pobiera dane, wyświetla ten sam ekran jak powyżej, więc Wulkanowy musi również ją pokazać, aby móc pobrać dane z tej witryny. Nie da się tego obejść Pomyślnie zweryfikowano + + Awaryjny dostęp Brak połączenia z internetem Wystąpił błąd. Sprawdź poprawność daty w urządzeniu diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2a015f29..e0ec032f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -869,6 +869,9 @@ 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 Verified successfully + + Emergency access + No internet connection