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 @@ [![F-Droid](https://img.shields.io/f-droid/v/io.github.wulkanowy.svg?style=flat-square)](https://f-droid.org/packages/io.github.wulkanowy/) [![Last release](https://img.shields.io/github/release/wulkanowy/wulkanowy.svg?logo=github&style=flat-square)](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 [Get it on Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy) [Get it on Fdroid](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 [Pobierz z Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy) [Pobierz z Fdroid](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 ) } }