diff --git a/.travis.yml b/.travis.yml
index d6d0cb03..d3730881 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,7 +14,7 @@ cache:
branches:
only:
- develop
- - 0.14.0
+ - 0.14.1
android:
licenses:
diff --git a/README.en.md b/README.en.md
index 4da00e5d..7444ccca 100644
--- a/README.en.md
+++ b/README.en.md
@@ -7,11 +7,11 @@
[](https://f-droid.org/packages/io.github.wulkanowy/)
[](https://github.com/wulkanowy/wulkanowy/releases)
-Unofficial android VULCAN UONET+ register client for student and parent
+Unofficial android VULCAN UONET+ register client for both students and their parents
## Features
-* logging in using the email and password
+* logging in using the email and password OR using token and pin
* functions from the register website:
* grades
* grade statistics
@@ -24,7 +24,7 @@ Unofficial android VULCAN UONET+ register client for student and parent
* homework
* notes
* lucky number
-* calculation of the average
+* calculation of the average independently of school's preferences
* notifications, e.g. about a new grade
* dark and black (AMOLED) theme
* offline mode
@@ -32,16 +32,16 @@ Unofficial android VULCAN UONET+ register client for student and parent
## Download
-You can download the current beta from the Google Play or Fdroid store
+You can download the current beta version from the Google Play or the F-Droid store
[
](https://play.google.com/store/apps/details?id=io.github.wulkanowy)
[
](https://f-droid.org/packages/io.github.wulkanowy/)
-You can also download a [development version](https://wulkanowy.github.io/#download) that includes new features prepared for the next release
+You can also download a [development version](https://wulkanowy.github.io/#download) that includes new features being prepared for the next release
## Built With
diff --git a/README.md b/README.md
index d51115d5..61b13444 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
## Funkcje
-* logowanie za pomocą e-maila i hasła
+* logowanie za pomocą e-maila i hasła LUB tokena i pinu
* funkcje ze strony internetowej dziennika:
* oceny
* statystyki ocen
@@ -24,7 +24,7 @@ Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
* zadania domowe
* uwagi
* szczęśliwy numerek
-* obliczanie średniej
+* obliczanie średniej niezależnie od preferencji szkoły
* powiadomienia np. o nowej ocenie
* ciemny i czarny (AMOLED) motyw
* tryb offilne
@@ -32,13 +32,13 @@ Nieoficjalny klient dziennika VULCAN UONET+ dla ucznia i rodzica
## Pobierz
-Aktualną wersję beta możesz pobrać ze sklepu Google Play lub Fdroid
+Aktualną wersję beta możesz pobrać ze sklepu Google Play lub F-Droid
[
](https://play.google.com/store/apps/details?id=io.github.wulkanowy)
[
](https://f-droid.org/packages/io.github.wulkanowy/)
@@ -59,4 +59,4 @@ Wnieś swój wkład w projekt, tworząc PR lub wysyłając issue na GitHub.
## Licencja
-Ten projekt jest licencjonowany w ramach Apache License 2.0 - szczegóły w pliku [LICENSE](LICENSE)
\ No newline at end of file
+Ten projekt udostępniany jest na licencji Apache License 2.0 - szczegóły w pliku [LICENSE](LICENSE)
diff --git a/app/build.gradle b/app/build.gradle
index d7551376..452ddfb6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,8 +17,8 @@ android {
testApplicationId "io.github.tests.wulkanowy"
minSdkVersion 16
targetSdkVersion 29
- versionCode 49
- versionName "0.14.0"
+ versionCode 50
+ versionName "0.14.1"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -110,9 +110,9 @@ play {
}
ext {
- work_manager = "2.3.0-beta02"
+ work_manager = "2.3.0-rc01"
room = "2.2.3"
- dagger = "2.25.3"
+ dagger = "2.25.4"
chucker = "2.0.4"
mockk = "1.9.2"
}
@@ -122,14 +122,14 @@ configurations.all {
}
dependencies {
- implementation "io.github.wulkanowy:sdk:0.14.0"
+ implementation "io.github.wulkanowy:sdk:0.14.1"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "androidx.core:core-ktx:1.2.0-rc01"
implementation "androidx.activity:activity-ktx:1.1.0-rc03"
implementation "androidx.appcompat:appcompat:1.1.0"
implementation "androidx.appcompat:appcompat-resources:1.1.0"
- implementation "androidx.fragment:fragment-ktx:1.2.0-rc04"
+ implementation "androidx.fragment:fragment-ktx:1.2.0-rc05"
implementation "androidx.annotation:annotation:1.1.0"
implementation "androidx.multidex:multidex:2.0.1"
@@ -173,8 +173,8 @@ dependencies {
implementation "com.jakewharton.threetenabp:threetenabp:1.2.1"
implementation "com.jakewharton.timber:timber:4.7.1"
implementation "at.favre.lib:slf4j-timber:1.0.1"
- implementation "com.squareup.okhttp3:logging-interceptor:3.12.6"
- implementation "com.mikepenz:aboutlibraries:7.0.4"
+ implementation "com.squareup.okhttp3:logging-interceptor:3.12.7"
+ implementation "com.mikepenz:aboutlibraries-core:7.1.0"
implementation 'com.wdullaer:materialdatetimepicker:4.2.3'
playImplementation "com.google.firebase:firebase-core:17.2.1"
@@ -185,7 +185,7 @@ dependencies {
debugImplementation "fr.o80.chucker:library:$chucker"
debugImplementation "com.amitshekhar.android:debug-db:1.0.6"
- testImplementation "junit:junit:4.12"
+ testImplementation "junit:junit:4.13"
testImplementation "io.mockk:mockk:$mockk"
testImplementation "org.threeten:threetenbp:1.4.0"
testImplementation "org.mockito:mockito-inline:3.2.4"
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsHeader.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsHeader.kt
index e5f6e824..9ed41280 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsHeader.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/details/GradeDetailsHeader.kt
@@ -38,6 +38,7 @@ class GradeDetailsHeader(
gradeHeaderAverage.text = average
gradeHeaderNumber.text = number
gradeHeaderNote.visibility = if (newGrades > 0) VISIBLE else GONE
+ if (newGrades > 0) gradeHeaderNote.text = newGrades.toString(10)
gradeHeaderContainer.isEnabled = isExpandable
isViewExpandable = isExpandable
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt
index 5bcf167e..a65cab9c 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsFragment.kt
@@ -47,6 +47,13 @@ class GradeStatisticsFragment : BaseFragment(), GradeStatisticsView, GradeView.G
override val isBarViewEmpty get() = gradeStatisticsChartPoints.isEmpty
+ override val currentType
+ get() = when (gradeStatisticsTypeSwitch.checkedRadioButtonId) {
+ R.id.gradeStatisticsTypeSemester -> ViewType.SEMESTER
+ R.id.gradeStatisticsTypePartial -> ViewType.PARTIAL
+ else -> ViewType.POINTS
+ }
+
private lateinit var gradeColors: List>
private val vulcanGradeColors = listOf(
@@ -272,13 +279,7 @@ class GradeStatisticsFragment : BaseFragment(), GradeStatisticsView, GradeView.G
override fun onResume() {
super.onResume()
- gradeStatisticsTypeSwitch.setOnCheckedChangeListener { _, checkedId ->
- presenter.onTypeChange(when (checkedId) {
- R.id.gradeStatisticsTypeSemester -> ViewType.SEMESTER
- R.id.gradeStatisticsTypePartial -> ViewType.PARTIAL
- else -> ViewType.POINTS
- })
- }
+ gradeStatisticsTypeSwitch.setOnCheckedChangeListener { _, _ -> presenter.onTypeChange() }
}
override fun onSaveInstanceState(outState: Bundle) {
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt
index 9795c130..bea70ea4 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsPresenter.kt
@@ -94,7 +94,8 @@ class GradeStatisticsPresenter @Inject constructor(
}
}
- fun onTypeChange(type: ViewType) {
+ fun onTypeChange() {
+ val type = view?.let { it.currentType } ?: ViewType.POINTS
Timber.i("Select grade stats semester: $type")
disposable.clear()
view?.run {
@@ -214,7 +215,7 @@ class GradeStatisticsPresenter @Inject constructor(
private fun showErrorViewOnError(message: String, error: Throwable) {
view?.run {
- if (isBarViewEmpty || isPieViewEmpty) {
+ if ((isBarViewEmpty && currentType == ViewType.POINTS) || (isPieViewEmpty) && currentType != ViewType.POINTS) {
lastError = error
setErrorDetails(message)
showErrorView(true)
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt
index a214744c..003520fb 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/grade/statistics/GradeStatisticsView.kt
@@ -10,6 +10,8 @@ interface GradeStatisticsView : BaseView {
val isBarViewEmpty: Boolean
+ val currentType: ViewType
+
fun initView()
fun updateSubjects(data: ArrayList)
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginErrorHandler.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginErrorHandler.kt
index c888ce79..75a0ba6a 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginErrorHandler.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/LoginErrorHandler.kt
@@ -5,6 +5,10 @@ import android.database.sqlite.SQLiteConstraintException
import com.readystatesoftware.chuck.api.ChuckCollector
import io.github.wulkanowy.R
import io.github.wulkanowy.sdk.exception.BadCredentialsException
+import io.github.wulkanowy.sdk.mobile.exception.InvalidPinException
+import io.github.wulkanowy.sdk.mobile.exception.InvalidSymbolException
+import io.github.wulkanowy.sdk.mobile.exception.InvalidTokenException
+import io.github.wulkanowy.sdk.mobile.exception.TokenDeadException
import io.github.wulkanowy.ui.base.ErrorHandler
import javax.inject.Inject
@@ -15,12 +19,22 @@ class LoginErrorHandler @Inject constructor(
var onBadCredentials: () -> Unit = {}
+ var onInvalidToken: (String) -> Unit = {}
+
+ var onInvalidPin: (String) -> Unit = {}
+
+ var onInvalidSymbol: (String) -> Unit = {}
+
var onStudentDuplicate: (String) -> Unit = {}
override fun proceed(error: Throwable) {
when (error) {
is BadCredentialsException -> onBadCredentials()
is SQLiteConstraintException -> onStudentDuplicate(resources.getString(R.string.login_duplicate_student))
+ is TokenDeadException -> onInvalidToken(resources.getString(R.string.login_expired_token))
+ is InvalidTokenException -> onInvalidToken(resources.getString(R.string.login_invalid_token))
+ is InvalidPinException -> onInvalidPin(resources.getString(R.string.login_invalid_pin))
+ is InvalidSymbolException -> onInvalidSymbol(resources.getString(R.string.login_invalid_symbol))
else -> super.proceed(error)
}
}
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt
index 30563ebf..353effa9 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedFragment.kt
@@ -4,7 +4,9 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.inputmethod.EditorInfo
import android.widget.ArrayAdapter
+import androidx.appcompat.widget.AppCompatEditText
import androidx.core.widget.doOnTextChanged
import io.github.wulkanowy.R
import io.github.wulkanowy.data.db.entities.Student
@@ -84,6 +86,9 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
})
}
+ loginFormPin.setOnEditorDoneSignIn()
+ loginFormPass.setOnEditorDoneSignIn()
+
loginFormSymbol.setAdapter(ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, resources.getStringArray(R.array.symbols_values)))
with(loginFormHost) {
@@ -92,6 +97,12 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
}
}
+ private fun AppCompatEditText.setOnEditorDoneSignIn() {
+ setOnEditorActionListener { _, id, _ ->
+ if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) loginFormSignIn.callOnClick() else false
+ }
+ }
+
override fun setDefaultCredentials(name: String, pass: String, symbol: String, token: String, pin: String) {
loginFormName.setText(name)
loginFormPass.setText(pass)
@@ -101,54 +112,75 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
}
override fun setErrorNameRequired() {
- loginFormNameLayout.run {
+ with(loginFormNameLayout) {
requestFocus()
error = getString(R.string.login_field_required)
}
}
override fun setErrorPassRequired(focus: Boolean) {
- loginFormPassLayout.run {
+ with(loginFormPassLayout) {
if (focus) requestFocus()
error = getString(R.string.login_field_required)
}
}
override fun setErrorPassInvalid(focus: Boolean) {
- loginFormPassLayout.run {
+ with(loginFormPassLayout) {
if (focus) requestFocus()
error = getString(R.string.login_invalid_password)
}
}
override fun setErrorPassIncorrect() {
- loginFormPassLayout.run {
+ with(loginFormPassLayout) {
requestFocus()
error = getString(R.string.login_incorrect_password)
}
}
override fun setErrorPinRequired() {
- loginFormPinLayout.run {
+ with(loginFormPinLayout) {
requestFocus()
error = getString(R.string.login_field_required)
}
}
+ override fun setErrorPinInvalid(message: String) {
+ with(loginFormPinLayout) {
+ requestFocus()
+ error = message
+ }
+ }
+
override fun setErrorSymbolRequired() {
- loginFormSymbolLayout.run {
+ with(loginFormSymbolLayout) {
requestFocus()
error = getString(R.string.login_field_required)
}
}
+ override fun setErrorSymbolInvalid(message: String) {
+ with(loginFormSymbolLayout) {
+ requestFocus()
+ error = message
+ }
+ }
+
override fun setErrorTokenRequired() {
- loginFormTokenLayout.run {
+ with(loginFormTokenLayout) {
requestFocus()
error = getString(R.string.login_field_required)
}
}
+ override fun setErrorTokenInvalid(message: String) {
+ with(loginFormTokenLayout) {
+ requestFocus()
+ error = message
+ }
+ }
+
override fun clearNameError() {
loginFormNameLayout.error = null
}
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt
index 2cd788b0..1e49e5d8 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedPresenter.kt
@@ -24,14 +24,47 @@ class LoginAdvancedPresenter @Inject constructor(
view.run {
initView()
showOnlyScrapperModeInputs()
- loginErrorHandler.onBadCredentials = {
- setErrorPassIncorrect()
- showSoftKeyboard()
- Timber.i("Entered wrong username or password")
+ with(loginErrorHandler) {
+ onBadCredentials = ::onBadCredentials
+ onInvalidToken = ::onInvalidToken
+ onInvalidSymbol = ::onInvalidSymbol
+ onInvalidPin = ::onInvalidPin
}
}
}
+ private fun onBadCredentials() {
+ view?.run {
+ setErrorPassIncorrect()
+ showSoftKeyboard()
+ Timber.i("Entered wrong username or password")
+ }
+ }
+
+ private fun onInvalidToken(message: String) {
+ view?.run {
+ setErrorTokenInvalid(message)
+ showSoftKeyboard()
+ Timber.i("Entered invalid token")
+ }
+ }
+
+ private fun onInvalidSymbol(message: String) {
+ view?.run {
+ setErrorSymbolInvalid(message)
+ showSoftKeyboard()
+ Timber.i("Entered invalid symbol")
+ }
+ }
+
+ private fun onInvalidPin(message: String) {
+ view?.run {
+ setErrorPinInvalid(message)
+ showSoftKeyboard()
+ Timber.i("Entered invalid PIN")
+ }
+ }
+
fun onHostSelected() {
view?.apply {
clearPassError()
diff --git a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt
index ea48d646..85a85a33 100644
--- a/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt
+++ b/app/src/main/java/io/github/wulkanowy/ui/modules/login/advanced/LoginAdvancedView.kt
@@ -53,10 +53,16 @@ interface LoginAdvancedView : BaseView {
fun setErrorPinRequired()
+ fun setErrorPinInvalid(message: String)
+
fun setErrorSymbolRequired()
+ fun setErrorSymbolInvalid(message: String)
+
fun setErrorTokenRequired()
+ fun setErrorTokenInvalid(message: String)
+
fun showOnlyHybridModeInputs()
fun showOnlyScrapperModeInputs()
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 e028c2c4..47c30e79 100644
--- a/app/src/main/play/release-notes/pl-PL/default.txt
+++ b/app/src/main/play/release-notes/pl-PL/default.txt
@@ -1,7 +1,8 @@
-Wersja 0.14.0
+Wersja 0.14.1
-- dodane zostały nowe opcje logowania, m.in. logowanie przez token
-- naprawione zostało wyświetlanie nauczyciela, kiedy zastępstwo zostanie usunięte z danej lekcji
-- naprawiony został biały ekran w szczęśliwym numerku
+- naprawiliśmy logowanie użytkownikom, którzy mieli przypisanych do konta uczniów ze szkół z wyłączonymi dziennikami
+- naprawiliśmy problemy z wysyłaniem wiadomości i odświeżaniem ocen spowodowanych ostatnią aktualizacją
+- dodaliśmy informację o liczbie nieprzeczytanych ocen w nagłówku przedmiotu
+- ulepszyliśmy informacje o błędach przy logowaniu w trybie mobilnym
Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases
diff --git a/app/src/main/res/drawable/background_header_note.xml b/app/src/main/res/drawable/background_header_note.xml
new file mode 100644
index 00000000..b6555847
--- /dev/null
+++ b/app/src/main/res/drawable/background_header_note.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_login_advanced.xml b/app/src/main/res/layout/fragment_login_advanced.xml
index 094e37d1..15e0904b 100644
--- a/app/src/main/res/layout/fragment_login_advanced.xml
+++ b/app/src/main/res/layout/fragment_login_advanced.xml
@@ -188,8 +188,6 @@
android:id="@+id/loginFormToken"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:imeActionLabel="@string/login_sign_in"
- android:imeOptions="actionDone"
android:inputType="textCapCharacters"
android:maxLines="1" />
diff --git a/app/src/main/res/layout/header_grade_details.xml b/app/src/main/res/layout/header_grade_details.xml
index 40f486cf..0fa3872e 100644
--- a/app/src/main/res/layout/header_grade_details.xml
+++ b/app/src/main/res/layout/header_grade_details.xml
@@ -7,7 +7,7 @@
android:background="?selectableItemBackground"
android:paddingLeft="16dp"
android:paddingTop="10dp"
- android:paddingRight="12dp"
+ android:paddingRight="14dp"
android:paddingBottom="10dp"
tools:context=".ui.modules.grade.details.GradeDetailsHeader"
android:paddingEnd="12dp"
@@ -50,14 +50,19 @@
android:textSize="12sp"
tools:text="12 grades" />
-
+ android:background="@drawable/background_header_note"
+ android:textColor="?colorOnPrimary"
+ android:textSize="14sp"
+ tools:text="255" />
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index a88a42a7..a000ad69 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -28,7 +28,7 @@
Dziennik
Symbol
Mobilne API
- Scrapper
+ Scraper
Hybrydowe
Token
PIN
@@ -36,6 +36,10 @@
Zaloguj
To hasło jest za krótkie
Dane logowania są niepoprawne
+ Nieprawidłowy PIN
+ Nieprawidłowy token
+ Token stracił ważność
+ Niepoprawny symbol
Nie znaleziono ucznia. Sprawdź symbol
To pole jest wymagane
Wybrany uczeń jest już zalogowany
@@ -355,7 +359,7 @@
Brak połączenia z internetem
- Zbyt długie oczekiwanie na połączenie z dziennikiem
+ Upłynął limit czasu na połączenie z dziennikiem
Logowanie nie powiodło się. Spróbuj ponownie lub zrestartuj aplikację
Dziennik jest niedostępny. Spróbuj ponownie później
Wystąpił nieoczekiwany błąd
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 28f4831d..53430b66 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -28,15 +28,26 @@
Электронная почта или имя пользователя
Пароль
Дневник
+ Мобильный API
+ Scraper
+ Гибрид
+ Token
+ PIN
+ клавиша API
Symbol
Войти
Слишком короткий пароль
Указаны неверные данные
+ Недействительный PIN
+ Недействительный token
+ Токен просрочен
+ Недействительный symbol
Не удалось найти ученика. Пожалуйста, проверьте \"symbol\"
Это поле обязательно
Данный ученик уже авторизован
Вы можете найти \"symbol\" в Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne
Выберите учеников для авторизации в приложении
+ Другие варианты
Политика приватности
Проблемы с авторизацией? Свяжитесь с нами!
Электронная почта
@@ -261,6 +272,8 @@
Версия приложения
Сообщить о ошибке
Отправить сообщение о ошибке через электронную почту
+ FAQ
+ Читайте часто задаваемые вопросы
Сервер Discord
Присоединиться к сообществу приложения
Политика приватности
@@ -277,6 +290,7 @@
Содержание
+ Снова
Описание
Нет описания
Учитель
@@ -349,5 +363,6 @@
Дневник недоступен. Попробуйте позже
Произошла неожиданная ошибка
Функция была выключена школой
+ Функция не доступна в этом режиме
diff --git a/app/src/main/res/values/preferences_values.xml b/app/src/main/res/values/preferences_values.xml
index 05210fd2..ee54d53c 100644
--- a/app/src/main/res/values/preferences_values.xml
+++ b/app/src/main/res/values/preferences_values.xml
@@ -83,7 +83,7 @@
- - Average grades from the 2nd semester
+ - Average of grades only from the 2nd semester
- Average of grades from the whole year
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 439bf19d..72b9a5d4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -27,18 +27,22 @@
Password
Register
Mobile API
- Scrapper
+ Scraper
Hybrid
Token
PIN
API key
Symbol
Sign in
- This password is too short
+ Password too short
Login details are incorrect
+ Invalid PIN
+ Invalid token
+ Token expired
+ Invalid symbol
Student not found. Check the symbol
This field is required
- The selected student is already logged in
+ Selected student is already logged in
The symbol can be found on the register page in Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne
Select students to log in to the application
Other options
@@ -206,7 +210,7 @@
Mobile devices
No devices
- Unregister
+ Deregister
Device removed
QR code
Token
@@ -305,7 +309,7 @@
Synchronization
Automatic update
- Suspended on holiday
+ Suspended on holidays
Updates interval
Wi-Fi only
@@ -336,10 +340,11 @@
No internet connection
- Too long waiting time for connection to the register
- Login is failed. Try again or restart the app
- The log is not available. Try again later
+ Connection to the register timed out
+ Login failed. Try again or restart the app
+ The register is not available. Try again later
An unexpected error occurred
Feature disabled by your school
Feature not available in this mode
+
diff --git a/app/src/test/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemoteTest.kt b/app/src/test/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemoteTest.kt
index 318d4ff7..b471dc52 100644
--- a/app/src/test/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemoteTest.kt
+++ b/app/src/test/java/io/github/wulkanowy/data/repositories/attendance/AttendanceRemoteTest.kt
@@ -57,6 +57,7 @@ class AttendanceRemoteTest {
subject = "Fizyka",
name = "Obecność",
date = date,
+ timeId = 0,
number = 0,
deleted = false,
excusable = false,
@@ -65,7 +66,8 @@ class AttendanceRemoteTest {
lateness = false,
presence = false,
categoryId = 1,
- absence = false
+ absence = false,
+ excuseStatus = null
)
}
}