mirror of
https://github.com/wulkanowy/wulkanowy.git
synced 2025-01-31 20:02:45 +01:00
Merge branch 'release/0.14.1'
This commit is contained in:
commit
16e3a877af
@ -14,7 +14,7 @@ cache:
|
||||
branches:
|
||||
only:
|
||||
- develop
|
||||
- 0.14.0
|
||||
- 0.14.1
|
||||
|
||||
android:
|
||||
licenses:
|
||||
|
12
README.en.md
12
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
|
||||
|
||||
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png"
|
||||
alt="Get it on Google Play"
|
||||
height="80">](https://play.google.com/store/apps/details?id=io.github.wulkanowy)
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on Fdroid"
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](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
|
||||
|
||||
|
10
README.md
10
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
|
||||
|
||||
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png"
|
||||
alt="Pobierz z Google Play"
|
||||
height="80">](https://play.google.com/store/apps/details?id=io.github.wulkanowy)
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Pobierz z Fdroid"
|
||||
alt="Pobierz z F-Droid"
|
||||
height="80">](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)
|
||||
Ten projekt udostępniany jest na licencji Apache License 2.0 - szczegóły w pliku [LICENSE](LICENSE)
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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<Pair<Int, Int>>
|
||||
|
||||
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) {
|
||||
|
@ -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)
|
||||
|
@ -10,6 +10,8 @@ interface GradeStatisticsView : BaseView {
|
||||
|
||||
val isBarViewEmpty: Boolean
|
||||
|
||||
val currentType: ViewType
|
||||
|
||||
fun initView()
|
||||
|
||||
fun updateSubjects(data: ArrayList<String>)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -24,12 +24,45 @@ class LoginAdvancedPresenter @Inject constructor(
|
||||
view.run {
|
||||
initView()
|
||||
showOnlyScrapperModeInputs()
|
||||
loginErrorHandler.onBadCredentials = {
|
||||
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() {
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
5
app/src/main/res/drawable/background_header_note.xml
Normal file
5
app/src/main/res/drawable/background_header_note.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?colorPrimary"/>
|
||||
<corners android:radius="12dp"/>
|
||||
</shape>
|
@ -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" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
@ -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" />
|
||||
|
||||
<ImageView
|
||||
<TextView
|
||||
android:id="@+id/gradeHeaderNote"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minWidth="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_all_round_mark"
|
||||
app:tint="?colorPrimary"
|
||||
tools:ignore="contentDescription" />
|
||||
android:background="@drawable/background_header_note"
|
||||
android:textColor="?colorOnPrimary"
|
||||
android:textSize="14sp"
|
||||
tools:text="255" />
|
||||
</RelativeLayout>
|
||||
|
@ -28,7 +28,7 @@
|
||||
<string name="login_host_hint">Dziennik</string>
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_type_api">Mobilne API</string>
|
||||
<string name="login_type_scrapper">Scrapper</string>
|
||||
<string name="login_type_scrapper">Scraper</string>
|
||||
<string name="login_type_hybrid">Hybrydowe</string>
|
||||
<string name="login_token_hint">Token</string>
|
||||
<string name="login_pin_hint">PIN</string>
|
||||
@ -36,6 +36,10 @@
|
||||
<string name="login_sign_in">Zaloguj</string>
|
||||
<string name="login_invalid_password">To hasło jest za krótkie</string>
|
||||
<string name="login_incorrect_password">Dane logowania są niepoprawne</string>
|
||||
<string name="login_invalid_pin">Nieprawidłowy PIN</string>
|
||||
<string name="login_invalid_token">Nieprawidłowy token</string>
|
||||
<string name="login_expired_token">Token stracił ważność</string>
|
||||
<string name="login_invalid_symbol">Niepoprawny symbol</string>
|
||||
<string name="login_incorrect_symbol">Nie znaleziono ucznia. Sprawdź symbol</string>
|
||||
<string name="login_field_required">To pole jest wymagane</string>
|
||||
<string name="login_duplicate_student">Wybrany uczeń jest już zalogowany</string>
|
||||
@ -355,7 +359,7 @@
|
||||
|
||||
<!--Errors-->
|
||||
<string name="error_no_internet">Brak połączenia z internetem</string>
|
||||
<string name="error_timeout">Zbyt długie oczekiwanie na połączenie z dziennikiem</string>
|
||||
<string name="error_timeout">Upłynął limit czasu na połączenie z dziennikiem</string>
|
||||
<string name="error_login_failed">Logowanie nie powiodło się. Spróbuj ponownie lub zrestartuj aplikację</string>
|
||||
<string name="error_service_unavailable">Dziennik jest niedostępny. Spróbuj ponownie później</string>
|
||||
<string name="error_unknown">Wystąpił nieoczekiwany błąd</string>
|
||||
|
@ -28,15 +28,26 @@
|
||||
<string name="login_nickname_hint">Электронная почта или имя пользователя</string>
|
||||
<string name="login_password_hint">Пароль</string>
|
||||
<string name="login_host_hint">Дневник</string>
|
||||
<string name="login_type_api">Мобильный API</string>
|
||||
<string name="login_type_scrapper">Scraper</string>
|
||||
<string name="login_type_hybrid">Гибрид</string>
|
||||
<string name="login_token_hint">Token</string>
|
||||
<string name="login_pin_hint">PIN</string>
|
||||
<string name="login_api_key_hint">клавиша API</string>
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Войти</string>
|
||||
<string name="login_invalid_password">Слишком короткий пароль</string>
|
||||
<string name="login_incorrect_password">Указаны неверные данные</string>
|
||||
<string name="login_invalid_pin">Недействительный PIN</string>
|
||||
<string name="login_invalid_token">Недействительный token</string>
|
||||
<string name="login_expired_token">Токен просрочен</string>
|
||||
<string name="login_invalid_symbol">Недействительный symbol</string>
|
||||
<string name="login_incorrect_symbol">Не удалось найти ученика. Пожалуйста, проверьте \"symbol\"</string>
|
||||
<string name="login_field_required">Это поле обязательно</string>
|
||||
<string name="login_duplicate_student">Данный ученик уже авторизован</string>
|
||||
<string name="login_symbol_helper">Вы можете найти \"symbol\" в Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne</string>
|
||||
<string name="login_select_student">Выберите учеников для авторизации в приложении</string>
|
||||
<string name="login_advanced">Другие варианты</string>
|
||||
<string name="login_privacy_policy">Политика приватности</string>
|
||||
<string name="login_contact_header">Проблемы с авторизацией? Свяжитесь с нами!</string>
|
||||
<string name="login_contact_email">Электронная почта</string>
|
||||
@ -261,6 +272,8 @@
|
||||
<string name="about_version">Версия приложения</string>
|
||||
<string name="about_feedback">Сообщить о ошибке</string>
|
||||
<string name="about_feedback_summary">Отправить сообщение о ошибке через электронную почту</string>
|
||||
<string name="about_faq">FAQ</string>
|
||||
<string name="about_faq_summary">Читайте часто задаваемые вопросы</string>
|
||||
<string name="about_discord">Сервер Discord</string>
|
||||
<string name="about_discord_summary">Присоединиться к сообществу приложения</string>
|
||||
<string name="about_privacy">Политика приватности</string>
|
||||
@ -277,6 +290,7 @@
|
||||
|
||||
<!--Generic-->
|
||||
<string name="all_content">Содержание</string>
|
||||
<string name="all_retry">Снова</string>
|
||||
<string name="all_description">Описание</string>
|
||||
<string name="all_no_description">Нет описания</string>
|
||||
<string name="all_teacher">Учитель</string>
|
||||
@ -349,5 +363,6 @@
|
||||
<string name="error_service_unavailable">Дневник недоступен. Попробуйте позже</string>
|
||||
<string name="error_unknown">Произошла неожиданная ошибка</string>
|
||||
<string name="error_feature_disabled">Функция была выключена школой</string>
|
||||
<string name="error_feature_not_available">Функция не доступна в этом режиме</string>
|
||||
|
||||
</resources>
|
||||
|
@ -83,7 +83,7 @@
|
||||
</string-array>
|
||||
|
||||
<string-array name="grade_average_mode_entries">
|
||||
<item>Average grades from the 2nd semester</item>
|
||||
<item>Average of grades only from the 2nd semester</item>
|
||||
<item>Average of grades from the whole year</item>
|
||||
</string-array>
|
||||
<string-array name="grade_average_mode_values" translatable="false">
|
||||
|
@ -27,18 +27,22 @@
|
||||
<string name="login_password_hint">Password</string>
|
||||
<string name="login_host_hint">Register</string>
|
||||
<string name="login_type_api">Mobile API</string>
|
||||
<string name="login_type_scrapper">Scrapper</string>
|
||||
<string name="login_type_scrapper">Scraper</string>
|
||||
<string name="login_type_hybrid">Hybrid</string>
|
||||
<string name="login_token_hint">Token</string>
|
||||
<string name="login_pin_hint">PIN</string>
|
||||
<string name="login_api_key_hint">API key</string>
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Sign in</string>
|
||||
<string name="login_invalid_password">This password is too short</string>
|
||||
<string name="login_invalid_password">Password too short</string>
|
||||
<string name="login_incorrect_password">Login details are incorrect</string>
|
||||
<string name="login_invalid_pin">Invalid PIN</string>
|
||||
<string name="login_invalid_token">Invalid token</string>
|
||||
<string name="login_expired_token">Token expired</string>
|
||||
<string name="login_invalid_symbol">Invalid symbol</string>
|
||||
<string name="login_incorrect_symbol">Student not found. Check the symbol</string>
|
||||
<string name="login_field_required">This field is required</string>
|
||||
<string name="login_duplicate_student">The selected student is already logged in</string>
|
||||
<string name="login_duplicate_student">Selected student is already logged in</string>
|
||||
<string name="login_symbol_helper">The symbol can be found on the register page in Uczeń -> Dostęp Mobilny -> Zarejestruj urządzenie mobilne</string>
|
||||
<string name="login_select_student">Select students to log in to the application</string>
|
||||
<string name="login_advanced">Other options</string>
|
||||
@ -206,7 +210,7 @@
|
||||
<!--Mobile devices-->
|
||||
<string name="mobile_devices_title">Mobile devices</string>
|
||||
<string name="mobile_devices_no_items">No devices</string>
|
||||
<string name="mobile_devices_unregister">Unregister</string>
|
||||
<string name="mobile_devices_unregister">Deregister</string>
|
||||
<string name="mobile_device_removed">Device removed</string>
|
||||
<string name="mobile_device_qr">QR code</string>
|
||||
<string name="mobile_device_token">Token</string>
|
||||
@ -305,7 +309,7 @@
|
||||
|
||||
<string name="pref_services_header">Synchronization</string>
|
||||
<string name="pref_services_switch">Automatic update</string>
|
||||
<string name="pref_services_suspended">Suspended on holiday</string>
|
||||
<string name="pref_services_suspended">Suspended on holidays</string>
|
||||
<string name="pref_services_interval">Updates interval</string>
|
||||
<string name="pref_services_wifi">Wi-Fi only</string>
|
||||
|
||||
@ -336,10 +340,11 @@
|
||||
|
||||
<!--Errors-->
|
||||
<string name="error_no_internet">No internet connection</string>
|
||||
<string name="error_timeout">Too long waiting time for connection to the register</string>
|
||||
<string name="error_login_failed">Login is failed. Try again or restart the app</string>
|
||||
<string name="error_service_unavailable">The log is not available. Try again later</string>
|
||||
<string name="error_timeout">Connection to the register timed out</string>
|
||||
<string name="error_login_failed">Login failed. Try again or restart the app</string>
|
||||
<string name="error_service_unavailable">The register is not available. Try again later</string>
|
||||
<string name="error_unknown">An unexpected error occurred</string>
|
||||
<string name="error_feature_disabled">Feature disabled by your school</string>
|
||||
<string name="error_feature_not_available">Feature not available in this mode</string>
|
||||
|
||||
</resources>
|
||||
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user