Migrate to new api (#155)


110
app/build.gradle
@ -1,31 +1,12 @@
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-kapt'// sync warning probably caused by bug https://issuetracker.google.com/issues/74537216
|
||||
apply plugin: 'kotlin-kapt'// sync warning probably caused by bug https://issuetracker.google.com/issues/74537216, fix in AS 3.2
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'io.fabric'
|
||||
apply from: 'jacoco.gradle'
|
||||
apply from: 'android-sonarqube.gradle'
|
||||
apply plugin: 'com.google.gms.oss.licenses.plugin'
|
||||
apply from: 'sonarqube.gradle'
|
||||
apply plugin: 'com.github.triplet.play'
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven { url "https://plugins.gradle.org/m2/" }
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
google()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath "io.fabric.tools:gradle:$fabricGradle"
|
||||
classpath "com.google.gms:oss-licenses:0.9.2"
|
||||
classpath "com.github.triplet.gradle:play-publisher:$playPublisher"
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion '27.0.3'
|
||||
@ -76,16 +57,6 @@ android {
|
||||
multiDexKeepProguard file('proguard-multidex-rules.pro')
|
||||
}
|
||||
}
|
||||
|
||||
testOptions {
|
||||
unitTests.all {
|
||||
testLogging {
|
||||
events "passed", "skipped", "failed", "standardOut", "standardError"
|
||||
outputs.upToDateWhen { false }
|
||||
showStandardStreams = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
androidExtensions {
|
||||
@ -97,54 +68,57 @@ play {
|
||||
uploadImages = true
|
||||
}
|
||||
|
||||
configurations.all {
|
||||
resolutionStrategy.force "com.android.support:support-annotations:$supportVersion"
|
||||
}
|
||||
ext.supportVersion = "27.1.1"
|
||||
|
||||
dependencies {
|
||||
implementation project(':api')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
implementation 'com.github.wulkanowy:api:88ede83149'
|
||||
|
||||
implementation "com.android.support:support-v4:$supportVersion"
|
||||
implementation "com.android.support:design:$supportVersion"
|
||||
implementation "com.android.support:cardview-v7:$supportVersion"
|
||||
implementation "com.android.support:preference-v14:$supportVersion"
|
||||
implementation "com.firebase:firebase-jobdispatcher:$firebaseJob"
|
||||
implementation "org.apache.commons:commons-lang3:$apacheLang"
|
||||
implementation "org.apache.commons:commons-collections4:$apacheCollections"
|
||||
implementation "eu.davidea:flexible-adapter:$flexibleAdapter"
|
||||
implementation "eu.davidea:flexible-adapter-ui:$flexibleUi"
|
||||
implementation "com.google.dagger:dagger-android-support:$dagger2"
|
||||
implementation "com.aurelhubert:ahbottomnavigation:$ahbottom"
|
||||
implementation "com.jakewharton.threetenabp:threetenabp:$threeTenABP"
|
||||
implementation "com.google.android.gms:play-services-oss-licenses:$ossLicenses"
|
||||
implementation "com.jakewharton.timber:timber:$timber"
|
||||
implementation "at.favre.lib:slf4j-timber:$slf4jTimber"
|
||||
implementation "android.arch.persistence.room:runtime:1.1.1"
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
|
||||
implementation "io.reactivex.rxjava2:rxjava:2.2.0"
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
|
||||
implementation "com.google.android.gms:play-services-oss-licenses:16.0.0"
|
||||
implementation "com.firebase:firebase-jobdispatcher:0.8.5"
|
||||
|
||||
implementation "com.google.dagger:dagger-android-support:2.17"
|
||||
kapt "com.google.dagger:dagger-compiler:2.17"
|
||||
kapt "com.google.dagger:dagger-android-processor:2.17"
|
||||
|
||||
implementation "android.arch.persistence.room:runtime:1.1.1"
|
||||
implementation "android.arch.persistence.room:rxjava2:1.1.1"
|
||||
implementation 'com.github.pwittchen:reactivenetwork-rx2:2.1.0'
|
||||
implementation 'com.ncapdevi:frag-nav:3.0.0-RC3'
|
||||
|
||||
implementation("com.crashlytics.sdk.android:crashlytics:$crashlyticsSdk@aar") {
|
||||
transitive = true
|
||||
}
|
||||
implementation("com.crashlytics.sdk.android:answers:$crashlyticsAnswers@aar") {
|
||||
transitive = true
|
||||
}
|
||||
|
||||
kapt "com.google.dagger:dagger-compiler:$dagger2"
|
||||
kapt "com.google.dagger:dagger-android-processor:$dagger2"
|
||||
kapt "android.arch.persistence.room:compiler:1.1.1"
|
||||
|
||||
debugImplementation "com.amitshekhar.android:debug-db:$debugDb"
|
||||
implementation "eu.davidea:flexible-adapter:5.0.5"
|
||||
implementation "eu.davidea:flexible-adapter-ui:1.0.0-b5"
|
||||
implementation "com.aurelhubert:ahbottomnavigation:2.2.0"
|
||||
implementation 'com.ncapdevi:frag-nav:3.0.0-RC3'
|
||||
|
||||
testImplementation "junit:junit:$junit"
|
||||
testImplementation "org.mockito:mockito-inline:$mockito"
|
||||
testImplementation "org.jsoup:jsoup:$jsoup"
|
||||
implementation 'com.github.pwittchen:reactivenetwork-rx2:2.1.0'
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
|
||||
implementation "io.reactivex.rxjava2:rxjava:2.2.0"
|
||||
|
||||
androidTestImplementation "com.android.support.test:runner:$testRunner"
|
||||
androidTestImplementation "org.mockito:mockito-android:$mockito"
|
||||
implementation "org.apache.commons:commons-lang3:3.8"
|
||||
implementation "org.apache.commons:commons-collections4:4.2"
|
||||
implementation "com.jakewharton.threetenabp:threetenabp:1.1.0"
|
||||
|
||||
implementation "com.jakewharton.timber:timber:4.7.1"
|
||||
implementation "at.favre.lib:slf4j-timber:1.0.1"
|
||||
implementation("com.crashlytics.sdk.android:crashlytics:2.9.5@aar") {
|
||||
transitive = true
|
||||
}
|
||||
implementation("com.crashlytics.sdk.android:answers:1.4.3@aar") {
|
||||
transitive = true
|
||||
}
|
||||
|
||||
debugImplementation "com.amitshekhar.android:debug-db:1.0.4"
|
||||
|
||||
testImplementation "junit:junit:4.12"
|
||||
testImplementation "org.mockito:mockito-inline:2.21.0"
|
||||
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||
androidTestImplementation "org.mockito:mockito-android:2.21.0"
|
||||
androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
apply plugin: "jacoco"
|
||||
|
||||
jacoco {
|
||||
toolVersion "0.8.1"
|
||||
toolVersion "0.8.2"
|
||||
reportsDir = file("$buildDir/reports")
|
||||
}
|
||||
|
||||
@ -9,7 +9,6 @@ tasks.withType(Test) {
|
||||
jacoco.includeNoLocationClasses = true
|
||||
}
|
||||
|
||||
// run ./gradlew clean createDebugCoverageReport jacocoTestReport
|
||||
task jacocoTestReport(type: JacocoReport) {
|
||||
|
||||
group = "Reporting"
|
||||
@ -30,17 +29,12 @@ task jacocoTestReport(type: JacocoReport) {
|
||||
'**/*Dagger*.*',
|
||||
'**/*MembersInjector*.*',
|
||||
'**/*_Provide*Factory*.*',
|
||||
'**/*_Factory.*',
|
||||
'**/*$*$*.*'
|
||||
]
|
||||
'**/*_Factory.*']
|
||||
|
||||
// generated classes
|
||||
classDirectories = fileTree(
|
||||
// Java generated classes on Android project (debug build)
|
||||
dir: "$buildDir/intermediates/classes/debug",
|
||||
excludes: excludes
|
||||
) + fileTree(
|
||||
// Kotlin generated classes on Android project (debug build)
|
||||
dir: "$buildDir/tmp/kotlin-classes/debug",
|
||||
excludes: excludes
|
||||
)
|
||||
|
@ -4,16 +4,13 @@ sonarqube {
|
||||
|
||||
//noinspection GroovyAssignabilityCheck
|
||||
properties {
|
||||
def files = fileTree("${rootProject.projectDir}/api/build/libs/").filter { it.isFile() }.files.name
|
||||
def libraries = project.android.sdkDirectory.getPath() + "/platforms/android-27/android.jar," +
|
||||
"${project.rootDir}/api/build/libs/" + files[0]
|
||||
def libraries = project.android.sdkDirectory.getPath() + "/platforms/android-27/android.jar"
|
||||
|
||||
property "sonar.projectName", GROUP_ID + ":app"
|
||||
property "sonar.projectKey", GROUP_ID + ":app"
|
||||
|
||||
property "sonar.sources", "src/main/java"
|
||||
property "sonar.exclusions", "build/**,**/*.png,*.iml, **/*generated*," +
|
||||
"src/**/entities/*.java, src/androidTest/**/entities/*.java"
|
||||
property "sonar.exclusions", "build/**,**/*.png,*.iml, **/*generated*,"
|
||||
property "sonar.import_unknown_files", true
|
||||
|
||||
// Defines where the java files are
|
@ -38,7 +38,7 @@ class StudentLocalTest {
|
||||
|
||||
@Test
|
||||
fun saveAndReadTest() {
|
||||
studentLocal.save(Student(email = "test", password = "test123", schoolId = "23"))
|
||||
studentLocal.save(Student(email = "test", password = "test123", schoolId = "23")).blockingAwait()
|
||||
assert(sharedHelper.getLong(StudentLocal.CURRENT_USER_KEY, 0) == 1L)
|
||||
|
||||
assert(studentLocal.isStudentLoggedIn)
|
||||
|
@ -28,13 +28,13 @@
|
||||
<activity
|
||||
android:name=".ui.login.LoginActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="@string/login_options_header"
|
||||
android:label="@string/login_title"
|
||||
android:theme="@style/WulkanowyTheme.DarkActionBar"
|
||||
android:windowSoftInputMode="adjustResize" />
|
||||
<activity
|
||||
android:name=".ui.main.MainActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="@string/activity_main_text"
|
||||
android:label="@string/main_title"
|
||||
android:launchMode="singleTop" />
|
||||
<activity
|
||||
android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
|
||||
@ -60,12 +60,11 @@
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_provider" />
|
||||
android:resource="@xml/provider_widget_timetable" />
|
||||
</receiver>
|
||||
|
||||
<meta-data
|
||||
android:name="io.fabric.ApiKey"
|
||||
android:value="${fabricApiKey}" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
@ -2,7 +2,7 @@ package io.github.wulkanowy.data
|
||||
|
||||
import android.content.res.Resources
|
||||
import io.github.wulkanowy.R
|
||||
import io.github.wulkanowy.api.NotLoggedInErrorException
|
||||
import io.github.wulkanowy.api.auth.NotLoggedInException
|
||||
import timber.log.Timber
|
||||
import java.io.IOException
|
||||
import java.net.SocketTimeoutException
|
||||
@ -17,9 +17,9 @@ open class ErrorHandler @Inject constructor(private val resources: Resources) {
|
||||
Timber.i(error, "An exception occurred while the Wulkanowy was running")
|
||||
|
||||
showErrorMessage((when (error) {
|
||||
is UnknownHostException -> resources.getString(R.string.noInternet_text)
|
||||
is SocketTimeoutException -> resources.getString(R.string.generic_timeout_error)
|
||||
is NotLoggedInErrorException, is IOException -> resources.getString(R.string.login_failed_text)
|
||||
is UnknownHostException -> resources.getString(R.string.all_no_internet)
|
||||
is SocketTimeoutException -> resources.getString(R.string.all_timeout)
|
||||
is NotLoggedInException, is IOException -> resources.getString(R.string.all_login_failed)
|
||||
else -> error.localizedMessage
|
||||
}))
|
||||
}
|
||||
@ -28,4 +28,3 @@ open class ErrorHandler @Inject constructor(private val resources: Resources) {
|
||||
showErrorMessage = {}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import android.support.v7.preference.PreferenceManager
|
||||
import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.InternetObservingSettings
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import io.github.wulkanowy.api.Vulcan
|
||||
import io.github.wulkanowy.api.Api
|
||||
import io.github.wulkanowy.data.db.AppDatabase
|
||||
import io.github.wulkanowy.utils.DATABASE_NAME
|
||||
import javax.inject.Singleton
|
||||
@ -23,7 +23,7 @@ internal class RepositoryModule {
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
fun provideVulcanApi() = Vulcan()
|
||||
fun provideApi() = Api()
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
@ -41,4 +41,4 @@ internal class RepositoryModule {
|
||||
@Singleton
|
||||
@Provides
|
||||
fun provideStudentDao(database: AppDatabase) = database.studentDao()
|
||||
}
|
||||
}
|
||||
|
@ -2,17 +2,21 @@ package io.github.wulkanowy.data.db
|
||||
|
||||
import android.arch.persistence.room.Database
|
||||
import android.arch.persistence.room.RoomDatabase
|
||||
import io.github.wulkanowy.data.db.dao.SemesterDao
|
||||
import io.github.wulkanowy.data.db.dao.StudentDao
|
||||
import io.github.wulkanowy.data.db.entities.Semester
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
@Database(
|
||||
entities = [Student::class],
|
||||
entities = [Student::class, Semester::class],
|
||||
version = 1,
|
||||
exportSchema = false
|
||||
)
|
||||
abstract class AppDatabase : RoomDatabase() {
|
||||
|
||||
abstract fun studentDao(): StudentDao
|
||||
}
|
||||
|
||||
abstract fun semesterDao(): SemesterDao
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package io.github.wulkanowy.data.db.dao
|
||||
|
||||
import android.arch.persistence.room.Dao
|
||||
import android.arch.persistence.room.Insert
|
||||
import android.arch.persistence.room.OnConflictStrategy.REPLACE
|
||||
import io.github.wulkanowy.data.db.entities.Semester
|
||||
|
||||
@Dao
|
||||
interface SemesterDao {
|
||||
|
||||
@Insert(onConflict = REPLACE)
|
||||
fun insert(semester: Semester): Long
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package io.github.wulkanowy.data.db.entities
|
||||
|
||||
import android.arch.persistence.room.ColumnInfo
|
||||
import android.arch.persistence.room.Entity
|
||||
import android.arch.persistence.room.Index
|
||||
import android.arch.persistence.room.PrimaryKey
|
||||
|
||||
@Entity(tableName = "Semesters",
|
||||
indices = [Index(value = ["diary_id", "semester_id"], unique = true)])
|
||||
data class Semester(
|
||||
|
||||
@PrimaryKey
|
||||
var id: Long = 0,
|
||||
|
||||
@ColumnInfo(name = "diary_id")
|
||||
var diaryId: String,
|
||||
|
||||
@ColumnInfo(name = "diary_name")
|
||||
var diaryName: String = "",
|
||||
|
||||
@ColumnInfo(name = "semester_id")
|
||||
var semesterId: String,
|
||||
|
||||
@ColumnInfo(name = "semester_name")
|
||||
var semesterName: String = ""
|
||||
)
|
@ -5,6 +5,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.Inter
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.data.repositories.local.StudentLocal
|
||||
import io.github.wulkanowy.data.repositories.remote.StudentRemote
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Single
|
||||
import java.net.UnknownHostException
|
||||
import javax.inject.Inject
|
||||
@ -31,9 +32,7 @@ class StudentRepository @Inject constructor(
|
||||
return cachedStudents
|
||||
}
|
||||
|
||||
fun save(student: Student) {
|
||||
local.save(student)
|
||||
}
|
||||
fun save(student: Student): Completable = local.save(student)
|
||||
|
||||
fun getCurrentStudent(): Single<Student> = local.getCurrentStudent()
|
||||
|
||||
|
@ -6,6 +6,7 @@ import io.github.wulkanowy.data.db.dao.StudentDao
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.utils.security.Scrambler.decrypt
|
||||
import io.github.wulkanowy.utils.security.Scrambler.encrypt
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Single
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
@ -23,9 +24,10 @@ class StudentLocal @Inject constructor(
|
||||
val isStudentLoggedIn: Boolean
|
||||
get() = sharedPref.getLong(CURRENT_USER_KEY, 0) != 0L
|
||||
|
||||
fun save(student: Student) {
|
||||
sharedPref.putLong(CURRENT_USER_KEY, studentDb.insert(student.copy(
|
||||
password = encrypt(student.password, context))))
|
||||
fun save(student: Student): Completable {
|
||||
return Single.fromCallable { studentDb.insert(student.copy(password = encrypt(student.password, context))) }
|
||||
.map { sharedPref.putLong(CURRENT_USER_KEY, it) }
|
||||
.ignoreElement()
|
||||
}
|
||||
|
||||
fun getCurrentStudent(): Single<Student> {
|
||||
|
@ -1,55 +1,32 @@
|
||||
package io.github.wulkanowy.data.repositories.remote
|
||||
|
||||
import io.github.wulkanowy.api.Vulcan
|
||||
import io.github.wulkanowy.api.login.AccountPermissionException
|
||||
import io.github.wulkanowy.api.Api
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.utils.DEFAULT_SYMBOL
|
||||
import io.reactivex.Single
|
||||
import org.apache.commons.lang3.StringUtils.stripAccents
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class StudentRemote @Inject constructor(private val api: Vulcan) {
|
||||
class StudentRemote @Inject constructor(private val api: Api) {
|
||||
|
||||
fun getConnectedStudents(email: String, password: String, symbol: String): Single<List<Student>> {
|
||||
return Single.fromCallable {
|
||||
initApi(email, password, symbol)
|
||||
getSymbols().filterNot { it == DEFAULT_SYMBOL }
|
||||
.mapNotNull { symbol ->
|
||||
try {
|
||||
initApi(email, password, symbol)
|
||||
api.schools.flatMap { school ->
|
||||
initApi(email, password, symbol, school.id)
|
||||
api.studentAndParent.students.map { student ->
|
||||
Student(
|
||||
email = email,
|
||||
password = password,
|
||||
symbol = symbol,
|
||||
studentId = student.id,
|
||||
studentName = student.name,
|
||||
schoolId = school.id,
|
||||
schoolName = school.name
|
||||
)
|
||||
}
|
||||
}
|
||||
} catch (e: AccountPermissionException) {
|
||||
null
|
||||
}
|
||||
}.flatten()
|
||||
api.let {
|
||||
it.email = email
|
||||
it.password = password
|
||||
it.symbol = symbol
|
||||
it.host = "vulcan.net.pl"
|
||||
it.onConfigChange()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initApi(email: String, password: String, symbol: String, schoolId: String? = null) {
|
||||
api.apply {
|
||||
logout()
|
||||
setCredentials(email, password, symbol, schoolId, null, null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getSymbols(): List<String> {
|
||||
return api.symbols.map {
|
||||
stripAccents(it.replace("[\\s \\W]".toRegex(), ""))
|
||||
return api.getPupils().map { students ->
|
||||
students.map {
|
||||
Student(email = email,
|
||||
password = password,
|
||||
symbol = it.symbol,
|
||||
studentId = it.studentId,
|
||||
studentName = it.studentName,
|
||||
schoolId = it.schoolId,
|
||||
schoolName = it.schoolName)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ abstract class BaseActivity : DaggerAppCompatActivity(), BaseView {
|
||||
}
|
||||
|
||||
override fun showNoNetworkMessage() {
|
||||
showMessage(getString(R.string.noInternet_text))
|
||||
showMessage(getString(R.string.all_no_internet))
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package io.github.wulkanowy.ui.login
|
||||
|
||||
import android.content.res.Resources
|
||||
import io.github.wulkanowy.api.login.BadCredentialsException
|
||||
import io.github.wulkanowy.api.auth.BadCredentialsException
|
||||
import io.github.wulkanowy.data.ErrorHandler
|
||||
|
||||
class LoginErrorHandler(resources: Resources) : ErrorHandler(resources) {
|
||||
|
@ -54,7 +54,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
|
||||
}
|
||||
|
||||
override fun showSymbolInput() {
|
||||
loginHeader.text = getString(R.string.login_heading_symbol)
|
||||
loginHeader.text = getString(R.string.login_header_symbol)
|
||||
loginMainForm.visibility = GONE
|
||||
loginSymbolInput.visibility = VISIBLE
|
||||
loginSymbolEdit.requestFocus()
|
||||
@ -68,49 +68,49 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
|
||||
override fun setErrorEmailRequired() {
|
||||
loginEmailEdit.run {
|
||||
requestFocus()
|
||||
error = getString(R.string.error_field_required)
|
||||
error = getString(R.string.login_field_required)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorEmailInvalid() {
|
||||
loginEmailEdit.run {
|
||||
requestFocus()
|
||||
error = getString(R.string.error_invalid_email)
|
||||
error = getString(R.string.login_invalid_email)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorPassRequired(focus: Boolean) {
|
||||
loginPassEdit.run {
|
||||
if (focus) requestFocus()
|
||||
error = getString(R.string.error_field_required)
|
||||
error = getString(R.string.login_field_required)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorPassInvalid(focus: Boolean) {
|
||||
loginPassEdit.run {
|
||||
if (focus) requestFocus()
|
||||
error = getString(R.string.error_invalid_password)
|
||||
error = getString(R.string.login_invalid_password)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorSymbolRequire() {
|
||||
loginSymbolEdit.run {
|
||||
requestFocus()
|
||||
error = getString(R.string.error_field_required)
|
||||
error = getString(R.string.login_field_required)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorPassIncorrect() {
|
||||
loginPassEdit.run {
|
||||
requestFocus()
|
||||
error = getString(R.string.error_incorrect_password)
|
||||
error = getString(R.string.login_incorrect_password)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setErrorSymbolIncorrect() {
|
||||
loginSymbolEdit.run {
|
||||
requestFocus()
|
||||
error = getString(R.string.error_incorrect_symbol)
|
||||
error = getString(R.string.login_incorrect_symbol)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,11 +8,11 @@ import eu.davidea.viewholders.FlexibleViewHolder
|
||||
import io.github.wulkanowy.R
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import kotlinx.android.extensions.LayoutContainer
|
||||
import kotlinx.android.synthetic.main.fragment_login_opions_item.view.*
|
||||
import kotlinx.android.synthetic.main.item_login_options.view.*
|
||||
|
||||
class LoginOptionsItem(val student: Student) : AbstractFlexibleItem<LoginOptionsItem.ItemViewHolder>() {
|
||||
|
||||
override fun getLayoutRes(): Int = R.layout.fragment_login_opions_item
|
||||
override fun getLayoutRes(): Int = R.layout.item_login_options
|
||||
|
||||
override fun createViewHolder(view: View?, adapter: FlexibleAdapter<IFlexible<*>>?): ItemViewHolder {
|
||||
return ItemViewHolder(view, adapter)
|
||||
|
@ -5,7 +5,6 @@ import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||
import io.github.wulkanowy.ui.base.BasePresenter
|
||||
import io.github.wulkanowy.utils.schedulers.SchedulersManager
|
||||
import io.reactivex.Single
|
||||
import javax.inject.Inject
|
||||
|
||||
class LoginOptionsPresenter @Inject constructor(
|
||||
@ -33,16 +32,13 @@ class LoginOptionsPresenter @Inject constructor(
|
||||
}
|
||||
|
||||
fun onSelectStudent(student: Student) {
|
||||
disposable.add(student.let {
|
||||
Single.fromCallable { repository.save(it) }
|
||||
.subscribeOn(schedulers.backgroundThread())
|
||||
.observeOn(schedulers.mainThread())
|
||||
.doOnSubscribe { _ ->
|
||||
view?.showLoginProgress(true)
|
||||
view?.showActionBar(false)
|
||||
}
|
||||
.doOnSuccess { _ -> view?.openMainView() }
|
||||
.subscribe({ _ -> }, { error -> errorHandler.proceed(error) })
|
||||
})
|
||||
disposable.add(repository.save(student)
|
||||
.subscribeOn(schedulers.backgroundThread())
|
||||
.observeOn(schedulers.mainThread())
|
||||
.doOnSubscribe { _ ->
|
||||
view?.showLoginProgress(true)
|
||||
view?.showActionBar(false)
|
||||
}
|
||||
.subscribe({ view?.openMainView() }, { errorHandler.proceed(it) }))
|
||||
}
|
||||
}
|
||||
|
@ -58,11 +58,11 @@ class MainActivity : BaseActivity(), MainView, FragNavController.TransactionList
|
||||
override fun initBottomNav() {
|
||||
mainBottomNav.run {
|
||||
addItems(mutableListOf(
|
||||
AHBottomNavigationItem(R.string.grades_text, R.drawable.ic_menu_grade_26dp, 0),
|
||||
AHBottomNavigationItem(R.string.attendance_text, R.drawable.ic_menu_attendance_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.exams_text, R.drawable.ic_menu_exams_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.timetable_text, R.drawable.ic_menu_timetable_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.more_text, R.drawable.ic_menu_other_24dp, 0)
|
||||
AHBottomNavigationItem(R.string.grade_title, R.drawable.ic_menu_main_grade_26dp, 0),
|
||||
AHBottomNavigationItem(R.string.attendance_title, R.drawable.ic_menu_main_attendance_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.exam_title, R.drawable.ic_menu_main_exam_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.timetable_title, R.drawable.ic_menu_main_timetable_24dp, 0),
|
||||
AHBottomNavigationItem(R.string.more_title, R.drawable.ic_menu_main_more_24dp, 0)
|
||||
))
|
||||
accentColor = ContextCompat.getColor(context, R.color.colorPrimary)
|
||||
inactiveColor = ContextCompat.getColor(context, android.R.color.black)
|
||||
@ -89,14 +89,14 @@ class MainActivity : BaseActivity(), MainView, FragNavController.TransactionList
|
||||
setTitle(title)
|
||||
}
|
||||
|
||||
override fun defaultTitle(): String = getString(R.string.activity_main_text)
|
||||
override fun defaultTitle(): String = getString(R.string.main_title)
|
||||
|
||||
override fun mapOfTitles(): Map<Int, String> {
|
||||
return mapOf(0 to R.string.grades_text,
|
||||
1 to R.string.attendance_text,
|
||||
2 to R.string.exams_text,
|
||||
3 to R.string.timetable_text,
|
||||
4 to R.string.more_text
|
||||
return mapOf(0 to R.string.grade_title,
|
||||
1 to R.string.attendance_title,
|
||||
2 to R.string.exam_title,
|
||||
3 to R.string.timetable_title,
|
||||
4 to R.string.more_title
|
||||
).mapValues { getString(it.value) }
|
||||
}
|
||||
|
||||
@ -105,4 +105,3 @@ class MainActivity : BaseActivity(), MainView, FragNavController.TransactionList
|
||||
navController.onSaveInstanceState(outState)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ class ExamFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.fragment_exams, container, false)
|
||||
return inflater.inflate(R.layout.fragment_exam, container, false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ class GradeFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.fragment_grades, container, false)
|
||||
return inflater.inflate(R.layout.fragment_grade, container, false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,19 +16,19 @@ public final class CommonUtils {
|
||||
public static int colorHexToColorName(String hexColor) {
|
||||
switch (hexColor) {
|
||||
case "000000":
|
||||
return R.string.color_black_text;
|
||||
return R.string.all_black;
|
||||
|
||||
case "F04C4C":
|
||||
return R.string.color_red_text;
|
||||
return R.string.all_red;
|
||||
|
||||
case "20A4F7":
|
||||
return R.string.color_blue_text;
|
||||
return R.string.all_blue;
|
||||
|
||||
case "6ECD07":
|
||||
return R.string.color_green_text;
|
||||
return R.string.all_green;
|
||||
|
||||
default:
|
||||
return R.string.noColor_text;
|
||||
return R.string.all_empty_color;
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 393 B After Width: | Height: | Size: 393 B |
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 299 B |
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<solid android:color="#FFF" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/ic_launcher"/>
|
||||
</item>
|
||||
</layer-list>
|
@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<solid android:color="#FFF" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:width="250dp"
|
||||
android:height="250dp"
|
||||
android:drawable="@drawable/img_splash_512px"
|
||||
android:gravity="center">
|
||||
</item>
|
||||
</layer-list>
|
Before Width: | Height: | Size: 469 B After Width: | Height: | Size: 469 B |
Before Width: | Height: | Size: 624 B After Width: | Height: | Size: 624 B |
@ -7,4 +7,4 @@
|
||||
<path
|
||||
android:fillColor="@color/colorPrimary"
|
||||
android:pathData="M11 5h2v11h-2V5m2 13v2h-2v-2h2z" />
|
||||
</vector>
|
||||
</vector>
|
@ -7,4 +7,4 @@
|
||||
android:fillColor="@color/colorPrimary"
|
||||
android:pathData="M13 13h-2V7h2m0 10h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10
|
||||
0 0 0 10-10A10 10 0 0 0 12 2z" />
|
||||
</vector>
|
||||
</vector>
|
9
app/src/main/res/drawable/ic_menu_main_more_24dp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="26dp"
|
||||
android:height="26dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z" />
|
||||
</vector>
|
@ -1,16 +0,0 @@
|
||||
<!-- drawable/settings.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24"
|
||||
android:viewportWidth="24">
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M19.4 13l 0.1-1-0.1-1 2.1-1.5c 0.2-0.1 0.3-0.4 0.1-0.7l-2-3.5c-0.1-0.3-0.4
|
||||
-0.4-0.6-0.3l-2.4 1.1c-0.5-0.4-1.2-0.8-1.8-1l-0.3-2.6c0-0.3-0.2-0.5-0.5-0.5h-4c-0.3 0-0.5
|
||||
0.2-0.5 0.5L9.2 5c-0.7 0.3-1.3 0.6-1.8 1L5 5a 0.5 0.5 0 0 0-0.6 0.2l-2 3.5c-0.2 0.3-0.2 0.6
|
||||
0.1 0.7L4.6 11l-0.1 1 0.1 1-2.1 1.5c-0.2 0.1-0.3 0.4-0.1 0.7l2 3.5c 0.1 0.3 0.4 0.4 0.6
|
||||
0.3l2.4-1.1c 0.5 0.4 1.2 0.8 1.8 1l 0.3 2.6c0 0.3 0.2 0.5 0.5 0.5h4c 0.3 0 0.5-0.2 0.5-0.5l
|
||||
0.3-2.6c 0.7-0.3 1.3-0.6 1.8-1L19 19c 0.2 0.1 0.5 0 0.6-0.2l2-3.5c 0.1-0.2 0.1-0.5-0.1-0.7L19.4
|
||||
13zM12 16a4 4 0 0 1-4-4c0-2.2 1.8-4 4-4s4 1.8 4 4a4 4 0 0 1-4 4z" />
|
||||
</vector>
|
Before Width: | Height: | Size: 9.5 KiB |
BIN
app/src/main/res/drawable/img_splash_logo.png
Normal file
After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
8
app/src/main/res/drawable/layer_splash_background.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:opacity="opaque">
|
||||
<item>
|
||||
<bitmap
|
||||
android:gravity="left|right|top|bottom"
|
||||
android:src="@drawable/img_splash_logo" />
|
||||
</item>
|
||||
</layer-list>
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<solid android:color="#FFF" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
@ -7,5 +7,4 @@
|
||||
android:id="@+id/loginViewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:textColor="?attr/colorPrimary"
|
||||
android:textSize="14sp" />
|
@ -35,7 +35,7 @@
|
||||
android:minHeight="60dp"
|
||||
android:minLines="2"
|
||||
android:paddingTop="10dp"
|
||||
android:text="@string/generic_dialog_details"
|
||||
android:text="@string/all_details"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="20sp" />
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_details"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/attendance_dialog_subject"
|
||||
android:text="@string/all_subject"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_subject"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_subject_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/attendance_dialog_description"
|
||||
android:text="@string/all_description"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -82,7 +82,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_description"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -94,7 +94,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_description_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/attendance_dialog_date"
|
||||
android:text="@string/all_date"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -105,7 +105,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_date"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -117,7 +117,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_date_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/attendance_dialog_number"
|
||||
android:text="@string/attendance_number"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -128,7 +128,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/attendance_dialog_number"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -143,9 +143,9 @@
|
||||
android:layout_marginTop="25dp"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:text="@string/generic_dialog_close"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:text="@string/all_close"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="15sp" />
|
||||
|
||||
</RelativeLayout>
|
@ -35,7 +35,7 @@
|
||||
android:minHeight="60dp"
|
||||
android:minLines="2"
|
||||
android:paddingTop="10dp"
|
||||
android:text="@string/generic_dialog_details"
|
||||
android:text="@string/all_details"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="20sp" />
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_details"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/attendance_dialog_subject"
|
||||
android:text="@string/all_subject"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_subject"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_subject_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/exams_type"
|
||||
android:text="@string/exam_type"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -83,7 +83,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_type"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -95,7 +95,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_type_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/generic_dialog_teacher"
|
||||
android:text="@string/all_teacher"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -106,7 +106,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_teacher"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -118,7 +118,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_teacher_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/exams_dialog_entry_date"
|
||||
android:text="@string/exam_entry_date"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -129,7 +129,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_date"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -141,7 +141,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_date_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/dialog_description_text"
|
||||
android:text="@string/all_description"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -152,7 +152,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/exams_dialog_description"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -168,7 +168,7 @@
|
||||
android:layout_marginTop="25dp"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:text="@string/generic_dialog_close"
|
||||
android:text="@string/all_close"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="15sp" />
|
@ -48,7 +48,7 @@
|
||||
android:maxLines="5"
|
||||
android:minHeight="80dp"
|
||||
android:minLines="2"
|
||||
android:text="@string/grades_text"
|
||||
android:text="@string/grade_header"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="20sp" />
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_subject"
|
||||
android:text="@string/dialog_description_text"
|
||||
android:text="@string/all_description"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_description"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/noDescription_text"
|
||||
android:text="@string/all_no_description"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -83,7 +83,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_description_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/grade_weight_text"
|
||||
android:text="@string/grade_weight"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -94,7 +94,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_weight"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/grades_text"
|
||||
android:text="@string/grade_weight"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -106,7 +106,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_weight_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/dialog_teacher_text"
|
||||
android:text="@string/all_teacher"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -117,7 +117,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_teacher"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/dialog_teacher_text"
|
||||
android:text="@string/all_teacher"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -129,7 +129,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_teacher_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/dialog_color_text"
|
||||
android:text="@string/all_color"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -140,7 +140,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_color"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/dialog_color_text"
|
||||
android:text="@string/all_color"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -152,7 +152,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_color_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/dialog_date_text"
|
||||
android:text="@string/all_date"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -163,7 +163,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/grade_dialog_date"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/dialog_date_text"
|
||||
android:text="@string/all_date"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -178,7 +178,7 @@
|
||||
android:layout_marginTop="25dp"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:text="@string/generic_dialog_close"
|
||||
android:text="@string/all_close"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="15sp" />
|
@ -35,7 +35,7 @@
|
||||
android:minHeight="60dp"
|
||||
android:minLines="2"
|
||||
android:paddingTop="10dp"
|
||||
android:text="@string/generic_dialog_details"
|
||||
android:text="@string/all_details"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="20sp" />
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_details"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/timetable_dialog_description"
|
||||
android:text="@string/timetable_changes"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_description"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
@ -72,7 +72,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_description_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/timetable_dialog_lesson"
|
||||
android:text="@string/timetable_lesson"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="17sp" />
|
||||
|
||||
@ -84,7 +84,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_lesson"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -96,7 +96,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_lesson_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/generic_dialog_teacher"
|
||||
android:text="@string/all_teacher"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -107,7 +107,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_teacher"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -119,7 +119,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_teacher_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/timetable_dialog_group"
|
||||
android:text="@string/timetable_group"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -130,7 +130,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_group"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -142,7 +142,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_group_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/timetable_dialog_room"
|
||||
android:text="@string/timetable_room"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -153,7 +153,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@id/timetable_dialog_room"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -165,7 +165,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_room_value"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="@string/timetable_dialog_time"
|
||||
android:text="@string/timetable_time"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<TextView
|
||||
@ -176,7 +176,7 @@
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/timetable_dialog_time"
|
||||
android:layout_marginTop="3dp"
|
||||
android:text="@string/generic_app_no_data"
|
||||
android:text="@string/all_no_data"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -191,7 +191,7 @@
|
||||
android:layout_marginTop="25dp"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:text="@string/generic_dialog_close"
|
||||
android:text="@string/all_close"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="15sp" />
|
@ -35,7 +35,7 @@
|
||||
android:minHeight="100dp"
|
||||
android:minWidth="100dp"
|
||||
app:tint="?android:attr/textColorPrimary"
|
||||
app:srcCompat="@drawable/ic_menu_attendance_24dp"
|
||||
app:srcCompat="@drawable/ic_menu_main_attendance_24dp"
|
||||
tools:ignore="contentDescription" />
|
||||
|
||||
<TextView
|
||||
@ -44,7 +44,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="46dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/attendance_no_entries"
|
||||
android:text="@string/attendance_no_items"
|
||||
android:textSize="20sp" />
|
||||
</RelativeLayout>
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
android:layout_marginTop="40dp"
|
||||
android:minHeight="100dp"
|
||||
android:minWidth="100dp"
|
||||
app:srcCompat="@drawable/ic_menu_exams_24dp"
|
||||
app:srcCompat="@drawable/ic_menu_main_exam_24dp"
|
||||
app:tint="?android:attr/textColorPrimary"
|
||||
tools:ignore="contentDescription" />
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="46dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/exams_no_entries"
|
||||
android:text="@string/exam_no_items"
|
||||
android:textSize="20sp" />
|
||||
|
||||
</RelativeLayout>
|
@ -156,7 +156,7 @@
|
||||
android:layout_marginTop="40dp"
|
||||
android:minHeight="100dp"
|
||||
android:minWidth="100dp"
|
||||
app:srcCompat="@drawable/ic_menu_grade_26dp"
|
||||
app:srcCompat="@drawable/ic_menu_main_grade_26dp"
|
||||
app:tint="?android:attr/textColorPrimary"
|
||||
tools:ignore="contentDescription" />
|
||||
|
@ -29,7 +29,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="@string/step_login" />
|
||||
android:text="@string/login_progress" />
|
||||
</RelativeLayout>
|
||||
|
||||
<ScrollView
|
||||
@ -53,7 +53,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="@string/login_heading"
|
||||
android:text="@string/login_header_default"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<LinearLayout
|
||||
@ -66,7 +66,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:hint="@string/prompt_email">
|
||||
android:hint="@string/login_email_hint">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginEmailEdit"
|
||||
@ -80,13 +80,13 @@
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/prompt_password">
|
||||
android:hint="@string/login_password_hint">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginPassEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeActionLabel="@string/action_sign_in"
|
||||
android:imeActionLabel="@string/login_sign_in"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textPassword"
|
||||
android:maxLines="1"
|
||||
@ -99,14 +99,14 @@
|
||||
android:id="@+id/loginSymbolInput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/prompt_symbol"
|
||||
android:hint="@string/login_symbol_hint"
|
||||
android:visibility="gone">
|
||||
|
||||
<AutoCompleteTextView
|
||||
android:id="@+id/loginSymbolEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeActionLabel="@string/action_sign_in"
|
||||
android:imeActionLabel="@string/login_sign_in"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="textAutoComplete"
|
||||
android:maxLines="1" />
|
||||
@ -120,7 +120,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="@string/action_sign_in"
|
||||
android:text="@string/login_sign_in"
|
||||
android:textColor="@android:color/white"
|
||||
android:textStyle="bold"
|
||||
app:backgroundTint="@color/colorPrimary" />
|
||||
|
@ -27,11 +27,11 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="@string/step_synchronization" />
|
||||
android:text="@string/login_sync" />
|
||||
</RelativeLayout>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/loginOptionsRecycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
||||
|
@ -34,7 +34,7 @@
|
||||
android:layout_marginTop="40dp"
|
||||
android:minHeight="100dp"
|
||||
android:minWidth="100dp"
|
||||
app:srcCompat="@drawable/ic_menu_timetable_24dp"
|
||||
app:srcCompat="@drawable/ic_menu_main_timetable_24dp"
|
||||
app:tint="?android:attr/textColorPrimary"
|
||||
tools:ignore="contentDescription" />
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="46dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/info_free_week"
|
||||
android:text="@string/timetable_no_items"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
@ -70,4 +70,4 @@
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:foreground="?attr/selectableItemBackgroundBorderless">
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
@ -68,7 +68,7 @@
|
||||
android:layout_marginStart="180dp"
|
||||
android:gravity="end"
|
||||
android:maxLines="2"
|
||||
android:text="@string/attendance_no_entries"
|
||||
android:text="@string/attendance_no_items"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="16sp" />
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_exclamation_24dp"
|
||||
app:srcCompat="@drawable/ic_all_note_24dp"
|
||||
tools:ignore="contentDescription" />
|
||||
|
||||
</RelativeLayout>
|
@ -4,7 +4,7 @@
|
||||
android:id="@+id/grade_header_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
@ -54,7 +54,7 @@
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/info_grades_predicted_rating"
|
||||
android:text="@string/grade_predicted"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -66,7 +66,7 @@
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_toEndOf="@+id/grade_header_predicted_rating_text"
|
||||
android:layout_toRightOf="@+id/grade_header_predicted_rating_text"
|
||||
android:text="@string/info_grades_final_rating"
|
||||
android:text="@string/grade_final"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -77,6 +77,6 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_alert_24dp"
|
||||
app:srcCompat="@drawable/ic_all_round_note_24dp"
|
||||
tool:ignore="contentDescription" />
|
||||
</RelativeLayout>
|
@ -31,4 +31,4 @@
|
||||
android:text="@string/app_name"
|
||||
android:textSize="12sp" />
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
@ -1,7 +1,7 @@
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:foreground="?attr/selectableItemBackgroundBorderless">
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
@ -64,7 +64,7 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_exclamation_24dp"
|
||||
app:srcCompat="@drawable/ic_all_note_24dp"
|
||||
tools:ignore="contentDescription" />
|
||||
|
||||
</RelativeLayout>
|
@ -32,7 +32,7 @@
|
||||
android:maxLength="2"
|
||||
android:text="0"
|
||||
android:textSize="32sp"
|
||||
tool:ignore="all"/>
|
||||
tool:ignore="all" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/attendance_subItem_lesson"
|
||||
@ -49,7 +49,7 @@
|
||||
android:maxLines="1"
|
||||
android:text="@string/app_name"
|
||||
android:textSize="17sp"
|
||||
tool:ignore="all"/>
|
||||
tool:ignore="all" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/attendance_subItem_description"
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignLeft="@id/attendance_subItem_lesson"
|
||||
android:layout_alignStart="@id/attendance_subItem_lesson"
|
||||
android:maxLines="1"
|
||||
android:text="@string/grades_text"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -70,8 +70,8 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_exclamation_24dp"
|
||||
tool:ignore="contentDescription"/>
|
||||
app:srcCompat="@drawable/ic_all_note_24dp"
|
||||
tool:ignore="contentDescription" />
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
@ -9,7 +9,7 @@
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:foreground="?attr/selectableItemBackgroundBorderless">
|
||||
|
||||
<TextView
|
@ -48,7 +48,7 @@
|
||||
android:layout_toRightOf="@+id/grade_subitem_value"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/dialog_description_text"
|
||||
android:text="@string/all_description"
|
||||
android:textSize="15sp"
|
||||
tool:ignore="all" />
|
||||
|
||||
@ -59,7 +59,7 @@
|
||||
android:layout_alignBottom="@+id/grade_subitem_value"
|
||||
android:layout_alignLeft="@+id/grade_subitem_description"
|
||||
android:layout_alignStart="@+id/grade_subitem_description"
|
||||
android:text="@string/dialog_date_text"
|
||||
android:text="@string/all_date"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<TextView
|
||||
@ -71,7 +71,7 @@
|
||||
android:layout_alignBottom="@+id/grade_subitem_value"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:text="@string/grade_weight_text"
|
||||
android:text="@string/grade_weight"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<ImageView
|
||||
@ -81,7 +81,7 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_alert_24dp"
|
||||
app:srcCompat="@drawable/ic_all_round_note_24dp"
|
||||
tool:ignore="contentDescription" />
|
||||
|
||||
</RelativeLayout>
|
@ -6,7 +6,7 @@
|
||||
android:id="@+id/grades_summary_subitem_predicted_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:minHeight="35dp">
|
||||
|
||||
<TextView
|
||||
@ -16,7 +16,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/grades_predicted_rating"
|
||||
android:text="@string/grade_summary_predicted_average"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
||||
@ -42,7 +42,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/grades_summary_subitem_predicted_container"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:minHeight="35dp">
|
||||
|
||||
<TextView
|
||||
@ -52,7 +52,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/grades_final_rating"
|
||||
android:text="@string/grade_summary_final_average"
|
||||
android:textSize="14sp" />
|
||||
|
||||
<TextView
|
@ -3,21 +3,21 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_border"
|
||||
android:background="@drawable/ic_all_divider"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingTop="10dp">
|
||||
android:paddingTop="5dp">
|
||||
|
||||
<android.support.v7.widget.AppCompatImageView
|
||||
android:id="@+id/loginItemImage"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="60dp"
|
||||
android:layout_centerVertical="true"
|
||||
app:srcCompat="@drawable/ic_login_person_24px" />
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:text="@string/app_name"
|
||||
android:textSize="20sp" />
|
||||
|
||||
@ -43,8 +43,9 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/loginItemName"
|
||||
android:maxLines="2"
|
||||
android:text="@string/app_name"
|
||||
android:textSize="17sp" />
|
||||
android:textSize="13sp" />
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
@ -59,7 +59,7 @@
|
||||
android:layout_alignLeft="@id/timetable_subItem_lesson"
|
||||
android:layout_alignStart="@id/timetable_subItem_lesson"
|
||||
android:maxLines="1"
|
||||
android:text="@string/grades_text"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="12sp" />
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
android:layout_toEndOf="@+id/timetable_subItem_time"
|
||||
android:layout_toRightOf="@+id/timetable_subItem_time"
|
||||
android:maxLines="1"
|
||||
android:text="@string/grades_text"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="?android:attr/android:textColorSecondary"
|
||||
android:textSize="12sp"
|
||||
tool:ignore="all"/>
|
||||
@ -87,7 +87,7 @@
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="10dp"
|
||||
app:srcCompat="@drawable/ic_swap_30dp"
|
||||
app:srcCompat="@drawable/ic_timetable_swap_30dp"
|
||||
tool:ignore="contentDescription"/>
|
||||
|
||||
</RelativeLayout>
|
@ -64,4 +64,4 @@
|
||||
android:textSize="12sp" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
@ -53,7 +53,7 @@
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="1"
|
||||
android:text="@string/timetable_text"
|
||||
android:text="@string/timetable_title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="20sp" />
|
||||
</RelativeLayout>
|
||||
@ -69,7 +69,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/widget_timetable_no_lesson"
|
||||
android:text="@string/widget_timetable_no_items"
|
||||
android:textColor="@android:color/black"
|
||||
android:textSize="20sp" />
|
||||
</FrameLayout>
|
@ -5,16 +5,15 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/action_semester_switch"
|
||||
android:icon="@drawable/ic_action_menu_semester"
|
||||
android:icon="@drawable/ic_menu_grade_semester_24dp"
|
||||
android:orderInCategory="2"
|
||||
android:title="@string/switch_semester"
|
||||
android:title="@string/grade_switch_semester"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_summary_switch"
|
||||
android:icon="@drawable/ic_action_menu_summary"
|
||||
android:icon="@drawable/ic_menu_grade_summary_24dp"
|
||||
android:orderInCategory="1"
|
||||
android:title="@string/action_title_summary"
|
||||
android:title="@string/grade_menu_summary"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
</menu>
|
@ -1,173 +1,166 @@
|
||||
<resources>
|
||||
<string name="app_name">Wulkanowy</string>
|
||||
|
||||
<!-- Strings related to login -->
|
||||
<string name="title_activity_login">Zaloguj się</string>
|
||||
<string name="login_heading">Zaloguj się za pomocą konta ucznia lub rodzica</string>
|
||||
<string name="login_heading_symbol">Podaj symbol dziennika VULCAN</string>
|
||||
<string name="prompt_email">Email</string>
|
||||
<string name="prompt_password">Hasło</string>
|
||||
<string name="prompt_symbol">Symbol</string>
|
||||
<string name="action_sign_in">Zaloguj</string>
|
||||
<string name="step_connecting">Łączenie z dziennikiem</string>
|
||||
<string name="step_login">Logowanie</string>
|
||||
<string name="step_synchronization">Synchronizacja</string>
|
||||
<string name="error_invalid_email">Ten adres email nie jest poprawny</string>
|
||||
<string name="error_invalid_password">To hasło jest za krótkie</string>
|
||||
<string name="error_incorrect_password">To hasło jest niepoprawne</string>
|
||||
<string name="error_incorrect_symbol">Nie znaleziono ucznia. Sprwadź symbol</string>
|
||||
<string name="error_field_required">To pole jest wymagane</string>
|
||||
<string name="error_bad_account_permission">Brak dostępu do dziennika. Sprawdź inny symbol</string>
|
||||
<string name="login_accepted_text">Pomyślnie zalogowano</string>
|
||||
<string name="login_bad_credentials_text">Niepoprawny e-mail lub hasło</string>
|
||||
<string name="login_bad_account_permission_text">Brak uprawnień do otwarcia dziennika. Sprawdź wprowadzoną nazwę powiatu</string>
|
||||
<string name="login_failed_text">Logowanie nie powiodło się. Spróbuj ponownie lub zrestartuj aplikację</string>
|
||||
<string name="action_create_account">Nie masz jeszcze konta? Załóż je</string>
|
||||
<string name="action_forgot_password">Zapomniałeś hasła?</string>
|
||||
<string name="login_options_header">Wybierz ucznia</string>
|
||||
<!--Activity/Fragment title-->
|
||||
<string name="login_title">Wybierz ucznia</string>
|
||||
<string name="main_title">Wulkanowy</string>
|
||||
<string name="grade_title">Oceny</string>
|
||||
<string name="attendance_title">Frekwencja</string>
|
||||
<string name="exam_title">Sprawdziany</string>
|
||||
<string name="timetable_title">Plan lekcji</string>
|
||||
<string name="settings_title">Ustawienia</string>
|
||||
<string name="more_title">Więcej</string>
|
||||
|
||||
<string name="color_black_text">Czarny</string>
|
||||
<string name="color_red_text">Czerwony</string>
|
||||
<string name="color_blue_text">Niebieski</string>
|
||||
<string name="color_green_text">Zielony</string>
|
||||
<string name="noColor_text">Brak koloru</string>
|
||||
|
||||
<string name="activity_main_text">Główna aktywność</string>
|
||||
<string name="exams_text">Sprawdziany</string>
|
||||
<string name="grades_text">Oceny</string>
|
||||
<string name="attendance_text">Frekwencja</string>
|
||||
<string name="timetable_text">Plan lekcji</string>
|
||||
<string name="settings_text">Ustawienia</string>
|
||||
<string name="more_text">Więcej</string>
|
||||
<string name="activity_under_construction">Ta część aplikacji jest w budowie</string>
|
||||
<string name="fragment_no_grades">Brak ocen</string>
|
||||
<!--Login form-->
|
||||
<string name="login_header_default">Zaloguj się za pomocą konta ucznia lub rodzica</string>
|
||||
<string name="login_header_symbol">Podaj symbol dziennika VULCAN</string>
|
||||
<string name="login_email_hint">Email</string>
|
||||
<string name="login_password_hint">Hasło</string>
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Zaloguj</string>
|
||||
<string name="login_progress">Logowanie…</string>
|
||||
<string name="login_sync">Synchronizacja</string>
|
||||
<string name="login_invalid_email">Ten adres email nie jest poprawny</string>
|
||||
<string name="login_invalid_password">To hasło jest za krótkie</string>
|
||||
<string name="login_incorrect_password">To hasło jest niepoprawne</string>
|
||||
<string name="login_incorrect_symbol">Nie znaleziono ucznia. Sprwadź symbol</string>
|
||||
<string name="login_field_required">To pole jest wymagane</string>
|
||||
|
||||
<string name="noInternet_text">Brak połączenia z internetem</string>
|
||||
<string name="encrypt_failed_text">Szyfrowanie nie powiodło się. Automatyczne logowanie zostało wyłączone</string>
|
||||
<string name="version_text">Wersja %1$s</string>
|
||||
<string name="refresh_error_text">"Podczas odświeżania zawartości wystąpił błąd. "</string>
|
||||
<string name="alert_dialog_blocked_app">Blokada aplikacji</string>
|
||||
<string name="alert_dialog_blocked_app_message">W obawie o bezpieczeństwo przechowywanych danych osobistych na urządzeniu z podwyższonymi uprawnieniami (root), aplikacja Wulkanowy została zablokowana</string>
|
||||
|
||||
<string name="dialog_description_text">Opis</string>
|
||||
<string name="grade_weight_text">Waga</string>
|
||||
<string name="noDescription_text">Brak opisu</string>
|
||||
<string name="dialog_teacher_text">Nauczyciel</string>
|
||||
<string name="dialog_date_text">Data</string>
|
||||
<string name="dialog_color_text">Kolor</string>
|
||||
|
||||
<string name="switch_semester">Zmień semestr</string>
|
||||
<string name="semester_text">Semestr %d</string>
|
||||
<string name="cancel">Anuluj</string>
|
||||
|
||||
<string name="timetable_dialog_lesson">Lekcja</string>
|
||||
<string name="timetable_dialog_room">Sala</string>
|
||||
<string name="timetable_dialog_group">Grupa</string>
|
||||
<string name="timetable_dialog_time">Godziny</string>
|
||||
<string name="timetable_dialog_description">Zmiany</string>
|
||||
|
||||
<string name="sync_completed">Synchronizacja zakończona</string>
|
||||
|
||||
<string name="generic_dialog_details">Szczegóły</string>
|
||||
<string name="generic_dialog_close">Zamknij</string>
|
||||
<string name="generic_dialog_teacher">Nauczyciel</string>
|
||||
|
||||
<string name="generic_app_no_data">Brak danych</string>
|
||||
<string name="generic_timeout_error">Zbyt długie oczekiwanie na połączenie</string>
|
||||
|
||||
<string name="snackbar_no_grades">Brak nowych ocen</string>
|
||||
<string name="snackbar_new_grade">Ilość nowych ocen: %1$d</string>
|
||||
|
||||
<string name="info_average_grades">Średnia: %1$.2f</string>
|
||||
<string name="info_no_average">Brak średniej</string>
|
||||
<string name="info_grades_predicted_rating">Przewidywana: %1$s</string>
|
||||
<string name="info_grades_final_rating">Końcowa: %1$s</string>
|
||||
<string name="info_free_week">Brak lekcji w tym tygodniu</string>
|
||||
<string name="timetable_subitem_room">Sala %s</string>
|
||||
|
||||
<string name="grades_predicted_rating">Przewidywana</string>
|
||||
<string name="grades_final_rating">Końcowa</string>
|
||||
|
||||
<plurals name="numberOfGradesPlurals">
|
||||
<!--Grade-->
|
||||
<string name="grade_header">Ocena</string>
|
||||
<string name="grade_semester">Semestr %d</string>
|
||||
<string name="grade_switch_semester">Zmień semestr</string>
|
||||
<string name="grade_no_items">Brak ocen</string>
|
||||
<string name="grade_weight">Waga</string>
|
||||
<string name="grade_no_new_items">Brak nowych ocen</string>
|
||||
<string name="grade_number_new_items">Ilość nowych ocen: %1$d</string>
|
||||
<string name="grade_average">Średnia: %1$.2f</string>
|
||||
<string name="grade_no_average">Brak średniej</string>
|
||||
<string name="grade_predicted">Przewidywana: %1$s</string>
|
||||
<string name="grade_final">Końcowa: %1$s</string>
|
||||
<string name="grade_summary_calculated_average">Obliczona średnia</string>
|
||||
<string name="grade_summary_predicted_average">Szacowana średnia</string>
|
||||
<string name="grade_summary_final_average">Końcowa średnia</string>
|
||||
<string name="grade_menu_summary">Podsumowanie</string>
|
||||
<plurals name="grade_number_item">
|
||||
<item quantity="one">%d ocena</item>
|
||||
<item quantity="few">%d oceny</item>
|
||||
<item quantity="many">%d ocen</item>
|
||||
<item quantity="other">%d ocen</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="newGradePlurals">
|
||||
<plurals name="grade_new_items">
|
||||
<item quantity="one">Nowa ocena</item>
|
||||
<item quantity="few">Nowe oceny</item>
|
||||
<item quantity="many">Nowych ocen</item>
|
||||
<item quantity="other">Nowych ocen</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="receivedNewGradePlurals">
|
||||
<item quantity="one">Dostałeś %1$d ocenę</item>
|
||||
<item quantity="few">"Dostałeś %1$d oceny</item>
|
||||
<item quantity="many">Dostałeś %1$d ocen</item>
|
||||
<item quantity="other">Dostałeś %1$d ocen</item>
|
||||
</plurals>
|
||||
|
||||
<string name="attendance_absence_for_school_reasons">Nieobecny z przyczyn szkolnych</string>
|
||||
<!--Timetable-->
|
||||
<string name="timetable_lesson">Lekcja</string>
|
||||
<string name="timetable_room">Sala %s</string>
|
||||
<string name="timetable_group">Grupa</string>
|
||||
<string name="timetable_time">Godziny</string>
|
||||
<string name="timetable_changes">Zmiany</string>
|
||||
<string name="timetable_no_items">Brak lekcji w tym tygodniu</string>
|
||||
|
||||
|
||||
<!--Attendance-->
|
||||
<string name="attendance_absence_school">Nieobecny z przyczyn szkolnych</string>
|
||||
<string name="attendance_absence_excused">Nieobecność usprawiedliwiona</string>
|
||||
<string name="attendance_absence_unexcused">Nieobecność nieusprawiedliwiona</string>
|
||||
<string name="attendance_exemption">Zwolniony</string>
|
||||
<string name="attendance_excused_lateness">Spóźnienie usprawiedliowione</string>
|
||||
<string name="attendance_unexcused_lateness">Spóźnienie nieusprawiedliwione</string>
|
||||
<string name="attendance_present">Obecny</string>
|
||||
<string name="attendance_dialog_description">Opis</string>
|
||||
<string name="attendance_dialog_date">Data</string>
|
||||
<string name="attendance_dialog_subject">Przedmiot</string>
|
||||
<string name="attendance_dialog_number">Numer lekcji</string>
|
||||
<string name="attendance_no_entries">Brak wpisów</string>
|
||||
<plurals name="numberOfAbsences">
|
||||
<string name="attendance_number">Numer lekcji</string>
|
||||
<string name="attendance_no_items">Brak wpisów</string>
|
||||
<plurals name="attendance_number_absences">
|
||||
<item quantity="one">%1$d nieobecność</item>
|
||||
<item quantity="few">%1$d nieobecności</item>
|
||||
<item quantity="many">%1$d nieobecności</item>
|
||||
</plurals>
|
||||
|
||||
|
||||
<!--Exam-->
|
||||
<string name="exam_no_items">Brak sprawdzianów w tym tygodniu</string>
|
||||
<string name="exam_type">Typ</string>
|
||||
<string name="exam_entry_date">Data wpisu</string>
|
||||
|
||||
|
||||
<!--Generic-->
|
||||
<string name="all_description">Opis</string>
|
||||
<string name="all_no_description">Brak opisu</string>
|
||||
<string name="all_teacher">Nauczyciel</string>
|
||||
<string name="all_date">Data</string>
|
||||
<string name="all_color">Kolor</string>
|
||||
<string name="all_details">Szczegóły</string>
|
||||
<string name="all_close">Zamknij</string>
|
||||
<string name="all_no_data">Brak danych</string>
|
||||
<string name="all_subject">Przedmiot</string>
|
||||
|
||||
|
||||
<!--Timetable Widget-->
|
||||
<string name="widget_timetable_no_items">Brak lekcji</string>
|
||||
<string name="widget_timetable_today">Dziś</string>
|
||||
<string name="widget_timetable_tomorrow">Jutro</string>
|
||||
|
||||
|
||||
<!--Preferences-->
|
||||
<string name="pref_view_header">Widok</string>
|
||||
<string name="pref_tab_list">Domyślny widok</string>
|
||||
<string name="pref_grades_summary_line_show">Pokazuj podsumowanie w ocenach</string>
|
||||
<string name="pref_attendance_present_show">Pokazuj obecność we frekwencji</string>
|
||||
<string name="required_restart">Wymagany restart</string>
|
||||
<string name="pref_view_list">Domyślny widok</string>
|
||||
<string name="pref_view_summary">Pokazuj podsumowanie w ocenach</string>
|
||||
<string name="pref_view_present">Pokazuj obecność we frekwencji</string>
|
||||
<string name="pref_view_theme_dark">Ciemny motyw (Beta)</string>
|
||||
|
||||
<string name="pref_notify_header">Powiadomienia</string>
|
||||
<string name="pref_notify_switch">Pokazuj powiadomienia</string>
|
||||
|
||||
<string name="pref_services_header">Usługi</string>
|
||||
<string name="pref_services_switch">Włącz odświeżanie danych w tle</string>
|
||||
<string name="pref_services_suspended_on_holidays">Zawieszone na wakacjach</string>
|
||||
<string name="pref_services_interval">Interwał między odświeżaniem danych</string>
|
||||
<string name="pref_services_mobile_data">Synchronizacja tylko przez WiFi</string>
|
||||
<string name="pref_services_switch">Automatyczna aktualizacja</string>
|
||||
<string name="pref_services_suspended">Zawieszone na wakacjach</string>
|
||||
<string name="pref_services_interval">Interwał aktualizacji</string>
|
||||
<string name="pref_services_wifi">Tylko WiFi</string>
|
||||
|
||||
<string name="pref_about_header">O aplikacji</string>
|
||||
<string name="pref_about">Informacje o Wulkanowym</string>
|
||||
<string name="pref_about_summary">Wulkanowy to nieoficjalny klient dziennika VULCAN UONET+</string>
|
||||
<string name="pref_about_description">Informacje o Wulkanowym</string>
|
||||
<string name="pref_about_version">Wersja</string>
|
||||
<string name="pref_about_osl">Licencje open source</string>
|
||||
<string name="pref_about_osl_summary">Szczegóły licencji na oprogramowanie open source</string>
|
||||
<string name="pref_about_support">Kod źródłowy i feedback</string>
|
||||
|
||||
<string name="about_programmer_step1">Nie, nie zostaniesz programistą!</string>
|
||||
<string name="about_programmer_step2">Musisz bardziej się postarać!</string>
|
||||
<string name="about_programmer_step3">Kliknij jeszcze parę razy</string>
|
||||
<string name="about_programmer">Odwiedź zakładkę Kod źródłowy i pokaż jaki z ciebie programista!</string>
|
||||
<string name="about_programmer_description">Odwiedź zakładkę Kod źródłowy i pokaż jaki z ciebie programista!</string>
|
||||
|
||||
<string name="notify_grade_channel">Nowe oceny</string>
|
||||
<string name="widget_timetable_no_lesson">Brak lekcji</string>
|
||||
<string name="widget_timetable_today">Dziś</string>
|
||||
<string name="widget_timetable_tomorrow">Jutro</string>
|
||||
<string name="exams_no_entries">Brak sprawdzianów w tym tygodniu</string>
|
||||
<string name="exams_type">Typ</string>
|
||||
<string name="exams_dialog_entry_date">Data wpisu</string>
|
||||
<string name="pref_restart">Wymagany restart</string>
|
||||
|
||||
<string name="grades_summary_calculated_average">Obliczona średnia</string>
|
||||
<string name="grades_summary_predicted_average">Szacowana średnia</string>
|
||||
<string name="grades_summary_final_average">Końcowa średnia</string>
|
||||
<string name="action_title_summary">Podsumowanie</string>
|
||||
<string name="action_title_details">Szczegóły</string>
|
||||
<string name="login_sync_error">Podczas synchronizacji wystąpił błąd</string>
|
||||
|
||||
<!--Grade notify-->
|
||||
<string name="notify_grade_chanell">Nowe oceny</string>
|
||||
<plurals name="notify_grade_new_items">
|
||||
<item quantity="one">Dostałeś %1$d ocenę</item>
|
||||
<item quantity="few">"Dostałeś %1$d oceny</item>
|
||||
<item quantity="many">Dostałeś %1$d ocen</item>
|
||||
<item quantity="other">Dostałeś %1$d ocen</item>
|
||||
</plurals>
|
||||
|
||||
|
||||
<!--Colors-->
|
||||
<string name="all_black">Czarny</string>
|
||||
<string name="all_red">Czerwony</string>
|
||||
<string name="all_blue">Niebieski</string>
|
||||
<string name="all_green">Zielony</string>
|
||||
<string name="all_empty_color">Brak koloru</string>
|
||||
|
||||
|
||||
<!--Others-->
|
||||
<string name="all_no_internet">Brak połączenia z internetem</string>
|
||||
<string name="all_sync_finish">Synchronizacja zakończona</string>
|
||||
<string name="all_sync_fail">Podczas synchronizacji wystąpił błąd</string>
|
||||
<string name="all_timeout">Zbyt długie oczekiwanie na połączenie</string>
|
||||
<string name="all_login_failed">Logowanie nie powiodło się. Spróbuj ponownie lub zrestartuj aplikację</string>
|
||||
</resources>
|
||||
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="visible" type="id" />
|
||||
<item name="masked" type="id" />
|
||||
</resources>
|
@ -1,169 +1,159 @@
|
||||
<resources>
|
||||
<string name="app_name">Wulkanowy</string>
|
||||
|
||||
<!-- Strings related to login -->
|
||||
<string name="title_activity_login">Sign in</string>
|
||||
<string name="login_heading">Sign in with student or parent account</string>
|
||||
<string name="login_heading_symbol">Enter the VULCAN diary symbol</string>
|
||||
<string name="prompt_email">Email</string>
|
||||
<string name="prompt_password">Password</string>
|
||||
<string name="prompt_symbol">Symbol</string>
|
||||
<string name="action_sign_in">Sign in</string>
|
||||
<string name="step_connecting">Connecting with log</string>
|
||||
<string name="step_login">Login…</string>
|
||||
<string name="step_synchronization">Synchronization…</string>
|
||||
<string name="error_invalid_email">This email address is invalid</string>
|
||||
<string name="error_invalid_password">This password is too short</string>
|
||||
<string name="error_incorrect_password">This password is incorrect</string>
|
||||
<string name="error_incorrect_symbol">No student found. Check the symbol</string>
|
||||
<string name="error_field_required">This field is required</string>
|
||||
<string name="error_bad_account_permission">No permission to open log. Check another symbol</string>
|
||||
<string name="login_accepted_text">Login is successful</string>
|
||||
<string name="login_bad_credentials_text">Bad e-mail or password</string>
|
||||
<string name="login_bad_account_permission_text">No permission to open log. Check entered symbol</string>
|
||||
<string name="login_failed_text">Login is failed. Try again or restart the app</string>
|
||||
<string name="action_create_account">No account yet? Create one</string>
|
||||
<string name="action_forgot_password">Forgot password?</string>
|
||||
<string name="login_options_header">Select student</string>
|
||||
<!--Activity/Fragment title-->
|
||||
<string name="login_title">Select student</string>
|
||||
<string name="main_title">Wulkanowy</string>
|
||||
<string name="grade_title">Grades</string>
|
||||
<string name="attendance_title">Attendance</string>
|
||||
<string name="exam_title">Exams</string>
|
||||
<string name="timetable_title">Timetable</string>
|
||||
<string name="settings_title">Settings</string>
|
||||
<string name="more_title">More</string>
|
||||
|
||||
<string name="color_black_text">Black</string>
|
||||
<string name="color_red_text">Red</string>
|
||||
<string name="color_blue_text">Blue</string>
|
||||
<string name="color_green_text">Green</string>
|
||||
<string name="noColor_text">No color</string>
|
||||
|
||||
<string name="activity_main_text">Main Activity</string>
|
||||
<string name="exams_text">Exams</string>
|
||||
<string name="grades_text">Grades</string>
|
||||
<string name="attendance_text">Attendance</string>
|
||||
<string name="timetable_text">Timetable</string>
|
||||
<string name="settings_text">Settings</string>
|
||||
<string name="more_text">More</string>
|
||||
<string name="activity_under_construction">This section of app is under construction.</string>
|
||||
<string name="fragment_no_grades">No grades</string>
|
||||
<!--Login form-->
|
||||
<string name="login_header_default">Sign in with the student or parent account</string>
|
||||
<string name="login_header_symbol">Enter the VULCAN diary symbol</string>
|
||||
<string name="login_email_hint">Email</string>
|
||||
<string name="login_password_hint">Password</string>
|
||||
<string name="login_symbol_hint">Symbol</string>
|
||||
<string name="login_sign_in">Sign in</string>
|
||||
<string name="login_progress">Logging in…</string>
|
||||
<string name="login_sync">Synchronization…</string>
|
||||
<string name="login_invalid_email">This email address is invalid</string>
|
||||
<string name="login_invalid_password">This password is too short</string>
|
||||
<string name="login_incorrect_password">This password is incorrect</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="noInternet_text">No internet connection</string>
|
||||
<string name="encrypt_failed_text">Encryption failed. Automatic login has been disabled</string>
|
||||
<string name="version_text">Version %1$s</string>
|
||||
<string name="refresh_error_text">An error occurred while refreshing the content.</string>
|
||||
<string name="alert_dialog_blocked_app">Application lock</string>
|
||||
<string name="alert_dialog_blocked_app_message">For the sake of safety of personal data stored on a device with increased authorization (root), the Wulkanowy application has been blocked.</string>
|
||||
|
||||
<string name="dialog_description_text">Description</string>
|
||||
<string name="grade_weight_text">Weight</string>
|
||||
<string name="noDescription_text">No description</string>
|
||||
<string name="dialog_teacher_text">Teacher</string>
|
||||
<string name="dialog_date_text">Date</string>
|
||||
<string name="dialog_color_text">Color</string>
|
||||
|
||||
<string name="switch_semester">Switch semester</string>
|
||||
<string name="semester_text">Semester %d</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
|
||||
<string name="timetable_dialog_lesson">Lesson</string>
|
||||
<string name="timetable_dialog_room">Room</string>
|
||||
<string name="timetable_dialog_group">Group</string>
|
||||
<string name="timetable_dialog_time">Times</string>
|
||||
<string name="timetable_dialog_description">Changes</string>
|
||||
|
||||
<string name="sync_completed">Synchronization completed</string>
|
||||
|
||||
<string name="generic_dialog_details">Details</string>
|
||||
<string name="generic_dialog_close">Close</string>
|
||||
<string name="generic_dialog_teacher">Teacher</string>
|
||||
|
||||
<string name="generic_app_no_data">No data</string>
|
||||
<string name="generic_timeout_error">Too long wait for connection</string>
|
||||
|
||||
<string name="snackbar_no_grades">No new grades</string>
|
||||
<string name="snackbar_new_grade">Number of new grades: %1$d</string>
|
||||
|
||||
<string name="info_average_grades">Average: %1$.2f</string>
|
||||
<string name="info_no_average">No average</string>
|
||||
<string name="info_grades_predicted_rating">Predicted: %1$s</string>
|
||||
<string name="info_grades_final_rating">Final: %1$s</string>
|
||||
<string name="info_free_week">No lesson in this week</string>
|
||||
|
||||
<string name="grades_predicted_rating">Predicted</string>
|
||||
<string name="grades_final_rating">Final</string>
|
||||
|
||||
<string name="timetable_subitem_room">Room %s</string>
|
||||
|
||||
<plurals name="numberOfGradesPlurals">
|
||||
<!--Grade-->
|
||||
<string name="grade_header">Grade</string>
|
||||
<string name="grade_semester">Semester %d</string>
|
||||
<string name="grade_switch_semester">Change semester</string>
|
||||
<string name="grade_no_items">No grades</string>
|
||||
<string name="grade_weight">Weight</string>
|
||||
<string name="grade_no_new_items">No new grades</string>
|
||||
<string name="grade_number_new_items">Number of new ratings: %1$d</string>
|
||||
<string name="grade_average">Average: %1$.2f</string>
|
||||
<string name="grade_no_average">No average</string>
|
||||
<string name="grade_predicted">Predicted: %1$s</string>
|
||||
<string name="grade_final">Final: %1$s</string>
|
||||
<string name="grade_summary_calculated_average">Calculated average</string>
|
||||
<string name="grade_summary_predicted_average">Predicted average</string>
|
||||
<string name="grade_summary_final_average">Final average</string>
|
||||
<string name="grade_menu_summary">Summary</string>
|
||||
<plurals name="grade_number_item">
|
||||
<item quantity="one">%d grade</item>
|
||||
<item quantity="other">%d grades</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="newGradePlurals">
|
||||
<plurals name="grade_new_items">
|
||||
<item quantity="one">New grade</item>
|
||||
<item quantity="other">New grades</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="receivedNewGradePlurals">
|
||||
<item quantity="one">You received %1$d grade</item>
|
||||
<item quantity="other">You received %1$d grades</item>
|
||||
</plurals>
|
||||
|
||||
<string name="attendance_absence_for_school_reasons">Absence for school reasons</string>
|
||||
<string name="attendance_absence_excused">Absence excused</string>
|
||||
<!--Timetable-->
|
||||
<string name="timetable_lesson">Lesson</string>
|
||||
<string name="timetable_room">Room %s</string>
|
||||
<string name="timetable_group">Group</string>
|
||||
<string name="timetable_time">Hours</string>
|
||||
<string name="timetable_changes">Changes</string>
|
||||
<string name="timetable_no_items">No lesson in this week</string>
|
||||
|
||||
|
||||
<!--Attendance-->
|
||||
<string name="attendance_absence_school">Absent for school reasons</string>
|
||||
<string name="attendance_absence_excused">Excused absence</string>
|
||||
<string name="attendance_absence_unexcused">Unexcused absence</string>
|
||||
<string name="attendance_exemption">Exemption</string>
|
||||
<string name="attendance_excused_lateness">Excused lateness</string>
|
||||
<string name="attendance_unexcused_lateness">Unexcused lateness</string>
|
||||
<string name="attendance_present">Present</string>
|
||||
<string name="attendance_dialog_description">Description</string>
|
||||
<string name="attendance_dialog_date">Date</string>
|
||||
<string name="attendance_dialog_subject">Subject</string>
|
||||
<string name="attendance_dialog_number">Lesson number</string>
|
||||
<string name="attendance_no_entries">No entries</string>
|
||||
<plurals name="numberOfAbsences">
|
||||
<string name="attendance_number">Number of lesson</string>
|
||||
<string name="attendance_no_items">No entries</string>
|
||||
<plurals name="attendance_number_absences">
|
||||
<item quantity="one">%1$d absence</item>
|
||||
<item quantity="few">%1$d absences</item>
|
||||
<item quantity="many">%1$d absences</item>
|
||||
<item quantity="other">%1$d absences</item>
|
||||
</plurals>
|
||||
|
||||
<string name="pref_view_header">View</string>
|
||||
<string name="pref_tab_list">Default view after startup</string>
|
||||
<string name="pref_grades_summary_line_show">Show summary in grades</string>
|
||||
<string name="pref_attendance_present_show">Show present in attendance</string>
|
||||
<string name="required_restart">Required restart</string>
|
||||
|
||||
<!--Exam-->
|
||||
<string name="exam_no_items">No exams in this week</string>
|
||||
<string name="exam_type">Type</string>
|
||||
<string name="exam_entry_date">Entry date</string>
|
||||
|
||||
|
||||
<!--Generic-->
|
||||
<string name="all_description">Description</string>
|
||||
<string name="all_no_description">No description</string>
|
||||
<string name="all_teacher">Teacher</string>
|
||||
<string name="all_date">Date</string>
|
||||
<string name="all_color">Color</string>
|
||||
<string name="all_details">Details</string>
|
||||
<string name="all_close">Close</string>
|
||||
<string name="all_no_data">No data</string>
|
||||
<string name="all_subject">Subject</string>
|
||||
|
||||
|
||||
<!--Timetable Widget-->
|
||||
<string name="widget_timetable_no_items">No lesson</string>
|
||||
<string name="widget_timetable_today">Today</string>
|
||||
<string name="widget_timetable_tomorrow">Tomorrow</string>
|
||||
|
||||
|
||||
<!--Preferences-->
|
||||
<string name="pref_view_header">View</string>
|
||||
<string name="pref_view_list">Default view</string>
|
||||
<string name="pref_view_summary">Show the summary in the grades</string>
|
||||
<string name="pref_view_present">Show presence in attendance</string>
|
||||
<string name="pref_view_theme_dark">Dark theme (Beta)</string>
|
||||
|
||||
<string name="pref_notify_header">Notifications</string>
|
||||
<string name="pref_notify_switch">Show the notifications</string>
|
||||
<string name="pref_notify_switch">Show notifications</string>
|
||||
|
||||
<string name="pref_services_header">Services</string>
|
||||
<string name="pref_services_switch">Enable background data refreshing</string>
|
||||
<string name="pref_services_suspended_on_holidays">Suspended on holidays</string>
|
||||
<string name="pref_services_interval">Interval between data refreshing</string>
|
||||
<string name="pref_services_mobile_data">Synchronization via WiFi only</string>
|
||||
<string name="pref_services_switch">Automatic update</string>
|
||||
<string name="pref_services_suspended">Suspended on holiday</string>
|
||||
<string name="pref_services_interval">Updates interval</string>
|
||||
<string name="pref_services_wifi">Only WiFi</string>
|
||||
|
||||
<string name="pref_about_header">About</string>
|
||||
<string name="pref_about">About Wulkanowy</string>
|
||||
<string name="pref_about_summary">Wulkanowy is an unofficial VULCAN UONET+ log client</string>
|
||||
<string name="pref_about_description">About Wulkanowy</string>
|
||||
<string name="pref_about_version">Version</string>
|
||||
<string name="pref_about_osl">Open source licenses</string>
|
||||
<string name="pref_about_osl">Open source licences</string>
|
||||
<string name="pref_about_osl_summary">License details for open source software</string>
|
||||
<string name="pref_about_support">Source code & feedback</string>
|
||||
|
||||
<string name="about_programmer_step1">No, you will not become a programmer!</string>
|
||||
<string name="about_programmer_step2">You must try harder!</string>
|
||||
<string name="about_programmer_step3">Click a few more times</string>
|
||||
<string name="about_programmer">Visit the Source code tab and show how good a programmer you are!</string>
|
||||
<string name="about_programmer_description">Visit the Source code tab and show how good a programmer you are!</string>
|
||||
|
||||
<string name="notify_grade_channel">New grades</string>
|
||||
<string name="widget_timetable_no_lesson">No lessons</string>
|
||||
<string name="widget_timetable_today">Today</string>
|
||||
<string name="widget_timetable_tomorrow">Tomorrow</string>
|
||||
<string name="exams_no_entries">No exams in this week</string>
|
||||
<string name="exams_type">Type</string>
|
||||
<string name="exams_dialog_entry_date">Date of entry</string>
|
||||
<string name="pref_restart">Restart required</string>
|
||||
|
||||
<string name="grades_summary_calculated_average">Calculated average</string>
|
||||
<string name="grades_summary_predicted_average">Predicted average</string>
|
||||
<string name="grades_summary_final_average">Final average</string>
|
||||
<string name="action_title_summary">Summary</string>
|
||||
<string name="action_title_details">Details</string>
|
||||
<string name="login_sync_error">An error has occurred during synchronization</string>
|
||||
|
||||
<!--Grade notify-->
|
||||
<string name="notify_grade_chanell">New grades</string>
|
||||
<plurals name="notify_grade_new_items">
|
||||
<item quantity="one">You received %1$d grade</item>
|
||||
<item quantity="other">You received %1$d grades</item>
|
||||
</plurals>
|
||||
|
||||
|
||||
<!--Colors-->
|
||||
<string name="all_black">Black</string>
|
||||
<string name="all_red">Red</string>
|
||||
<string name="all_blue">Blue</string>
|
||||
<string name="all_green">Green</string>
|
||||
<string name="all_empty_color">No color</string>
|
||||
|
||||
|
||||
<!--Others-->
|
||||
<string name="all_no_internet">No internet connection</string>
|
||||
<string name="all_sync_finish">Synchronization complete</string>
|
||||
<string name="all_sync_fail">There was an error during synchronization</string>
|
||||
<string name="all_timeout">Too long wait for connection</string>
|
||||
<string name="all_login_failed">Login is failed. Try again or restart the app</string>
|
||||
</resources>
|
||||
|
@ -33,7 +33,7 @@
|
||||
</style>
|
||||
|
||||
<style name="WulkanowyTheme.SplashTheme" parent="WulkanowyTheme">
|
||||
<item name="android:windowBackground">@drawable/splash_background</item>
|
||||
<item name="android:windowBackground">@drawable/layer_splash_background</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string-array name="startup_tab_entries" translatable="false">
|
||||
<item>@string/grades_text</item>
|
||||
<item>@string/attendance_text</item>
|
||||
<item>@string/exams_text</item>
|
||||
<item>@string/timetable_text</item>
|
||||
<item>@string/grade_title</item>
|
||||
<item>@string/attendance_title</item>
|
||||
<item>@string/exam_title</item>
|
||||
<item>@string/timetable_title</item>
|
||||
</string-array>
|
||||
<string-array name="startup_tab_value" translatable="false">
|
||||
<item>0</item>
|
9
app/src/main/res/xml/identificators.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item
|
||||
name="visible"
|
||||
type="id" />
|
||||
<item
|
||||
name="masked"
|
||||
type="id" />
|
||||
</resources>
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:initialLayout="@layout/timetable_widget"
|
||||
android:initialLayout="@layout/widget_timetable"
|
||||
android:minHeight="100dp"
|
||||
android:minWidth="150dp"
|
||||
android:previewImage="@drawable/widget_timetable_preview"
|
||||
android:previewImage="@drawable/img_timetable_widget_preview"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:updatePeriodMillis="3600000"
|
||||
android:widgetCategory="home_screen" />
|
||||
android:widgetCategory="home_screen" />
|
@ -7,17 +7,17 @@
|
||||
android:entryValues="@array/startup_tab_value"
|
||||
android:key="startup_tab"
|
||||
android:summary="%s"
|
||||
android:title="@string/pref_tab_list" />
|
||||
android:title="@string/pref_view_list" />
|
||||
<SwitchPreference
|
||||
android:defaultValue="false"
|
||||
android:key="grades_summary"
|
||||
android:summary="@string/required_restart"
|
||||
android:title="@string/pref_grades_summary_line_show" />
|
||||
android:summary="@string/pref_restart"
|
||||
android:title="@string/pref_view_summary" />
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="attendance_present"
|
||||
android:summary="@string/required_restart"
|
||||
android:title="@string/pref_attendance_present_show" />
|
||||
android:summary="@string/pref_restart"
|
||||
android:title="@string/pref_view_present" />
|
||||
<ListPreference
|
||||
android:defaultValue="1"
|
||||
android:entries="@array/theme_entries"
|
||||
@ -43,7 +43,7 @@
|
||||
android:defaultValue="false"
|
||||
android:dependency="services_enable"
|
||||
android:key="services_disable_mobile"
|
||||
android:title="@string/pref_services_mobile_data" />
|
||||
android:title="@string/pref_services_wifi" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_notify_header">
|
||||
<SwitchPreference
|
||||
@ -52,7 +52,7 @@
|
||||
android:key="notify_enable"
|
||||
android:title="@string/pref_notify_switch" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_about">
|
||||
<PreferenceCategory android:title="@string/pref_about_description">
|
||||
<Preference
|
||||
android:key="about_version"
|
||||
android:title="@string/pref_about_version" />
|
@ -1,64 +1,32 @@
|
||||
package io.github.wulkanowy.data.repositories.remote
|
||||
|
||||
import io.github.wulkanowy.api.StudentAndParent
|
||||
import io.github.wulkanowy.api.Vulcan
|
||||
import io.github.wulkanowy.api.generic.School
|
||||
import io.github.wulkanowy.api.login.AccountPermissionException
|
||||
import io.github.wulkanowy.api.Api
|
||||
import io.github.wulkanowy.api.register.Pupil
|
||||
import io.reactivex.Single
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.*
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.MockitoAnnotations
|
||||
import io.github.wulkanowy.api.generic.Student as StudentApi
|
||||
|
||||
class StudentRemoteTest {
|
||||
|
||||
@Mock
|
||||
private lateinit var mockApi: Vulcan
|
||||
private lateinit var mockApi: Api
|
||||
|
||||
@Before
|
||||
fun initApi() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
doNothing().`when`(mockApi).setCredentials(any(), any(), any(), any(), any(), any())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testRemoteAll() {
|
||||
`when`(mockApi.symbols).thenReturn(mutableListOf("przeworsk", "jaroslaw", "zarzecze"))
|
||||
`when`(mockApi.schools).thenReturn(mutableListOf(
|
||||
School("ZSTIO", "123", false),
|
||||
School("ZSZ", "998", true)))
|
||||
|
||||
val mockSnP = mock(StudentAndParent::class.java)
|
||||
`when`(mockSnP.students).thenReturn(mutableListOf(
|
||||
StudentApi().apply {
|
||||
id = "20"
|
||||
name = "Włodzimierz"
|
||||
isCurrent = false
|
||||
}))
|
||||
`when`(mockApi.studentAndParent).thenReturn(mockSnP)
|
||||
doReturn(Single.just(listOf(Pupil("", "", "", "test", "", ""))))
|
||||
.`when`(mockApi).getPupils()
|
||||
|
||||
val students = StudentRemote(mockApi).getConnectedStudents("", "", "").blockingGet()
|
||||
assert(students.size == 6)
|
||||
assert(students[3].studentName == "Włodzimierz")
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testOneEmptySymbol() {
|
||||
doReturn(mutableListOf("przeworsk")).`when`(mockApi).symbols
|
||||
doThrow(AccountPermissionException::class.java).`when`(mockApi).schools
|
||||
|
||||
val students = StudentRemote(mockApi).getConnectedStudents("", "", "").blockingGet()
|
||||
assert(students.isEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDefaultSymbol() {
|
||||
doReturn(listOf("Default")).`when`(mockApi).symbols
|
||||
|
||||
val students = StudentRemote(mockApi).getConnectedStudents("", "", "").blockingGet()
|
||||
assert(students.isEmpty())
|
||||
assertEquals(1, students.size)
|
||||
assertEquals("test", students.first().studentName)
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import io.github.wulkanowy.TestSchedulers
|
||||
import io.github.wulkanowy.data.ErrorHandler
|
||||
import io.github.wulkanowy.data.db.entities.Student
|
||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Single
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
@ -61,8 +62,8 @@ class LoginOptionsPresenterTest {
|
||||
|
||||
@Test
|
||||
fun onSelectedStudentTest() {
|
||||
doReturn(Completable.complete()).`when`(repository).save(testStudent)
|
||||
presenter.onSelectStudent(testStudent)
|
||||
verify(repository).save(testStudent)
|
||||
verify(loginOptionsView).showLoginProgress(true)
|
||||
verify(loginOptionsView).openMainView()
|
||||
|
||||
@ -70,7 +71,7 @@ class LoginOptionsPresenterTest {
|
||||
|
||||
@Test
|
||||
fun onSelectedStudentErrorTest() {
|
||||
doThrow(testException).`when`(repository).save(testStudent)
|
||||
doReturn(Completable.error(testException)).`when`(repository).save(testStudent)
|
||||
presenter.onSelectStudent(testStudent)
|
||||
verify(loginOptionsView).showLoginProgress(true)
|
||||
verify(errorHandler).proceed(testException)
|
||||
|