Skip to content
This repository has been archived by the owner on Jun 23, 2023. It is now read-only.

Commit

Permalink
Merge pull request #3 from savvasenok/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
savvasenok authored Oct 24, 2021
2 parents dbc6a08 + ea92e70 commit e726246
Show file tree
Hide file tree
Showing 35 changed files with 1,257 additions and 1,226 deletions.
19 changes: 18 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ android {
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionName "1.0.0"
versionName "1.1.1"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

Expand All @@ -24,18 +24,34 @@ android {
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}

signingConfig signingConfigs.debug

resConfigs "en", "ru", "uk"
}

buildTypes {

debug {
applicationIdSuffix ".debug"
versionNameSuffix '-debug'
minifyEnabled false
shrinkResources false
debuggable = true
}

staging {
applicationIdSuffix ".staging"
versionNameSuffix '-staging'
minifyEnabled true
shrinkResources true
debuggable = false
}

release {
debuggable = false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Expand Down Expand Up @@ -79,6 +95,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
kapt "androidx.room:room-compiler:2.4.0-alpha04"
testImplementation "junit:junit:4.13.2"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.0"
androidTestImplementation "androidx.test.ext:junit:1.1.3"
androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
androidTestImplementation "androidx.navigation:navigation-testing:2.3.5"
Expand Down
4 changes: 4 additions & 0 deletions app/src/debug/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Word Remember DEBUG</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@ interface IWordsListRepository {
suspend fun addNoun(nounWord: NounWord)
suspend fun addVerb(verbForms: VerbWordWithVerbForms)
suspend fun addAdjective(adjectiveWord: AdjectiveWord)

suspend fun addRandomWords()
suspend fun deleteAllWords()
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,7 @@ interface AdjectiveWordDao {

@Query("DELETE FROM words_adjective WHERE :wordId == id")
suspend fun deleteWord(wordId: Long)

@Query("DELETE FROM words_adjective")
suspend fun deleteAllWords()
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,7 @@ interface NounWordDao {

@Query("DELETE FROM words_noun WHERE :wordId == id")
suspend fun deleteWord(wordId: Long)

@Query("DELETE FROM WORDS_NOUN")
suspend fun deleteAllWords()
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ interface VerbFormDao {

@Query("DELETE FROM verb_forms WHERE :wordId == id")
suspend fun deleteWord(wordId: Long)

@Query("DELETE FROM verb_forms")
suspend fun deleteAllWords()
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ interface VerbWordDao {

@Query("DELETE FROM words_verb WHERE :wordId == verbId")
suspend fun deleteWord(wordId: Long)

@Query("DELETE FROM words_verb")
suspend fun deleteAllWords()
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import xyz.savvamirzoyan.wordremember.contract.repository.IWordsListRepository
import xyz.savvamirzoyan.wordremember.data.database.model.AdjectiveWord
import xyz.savvamirzoyan.wordremember.data.database.model.NounWord
import xyz.savvamirzoyan.wordremember.data.database.model.VerbWordWithVerbForms
import xyz.savvamirzoyan.wordremember.data.types.WordGender

object WordsListRepository : Repository(), IWordsListRepository {

Expand Down Expand Up @@ -66,4 +67,36 @@ object WordsListRepository : Repository(), IWordsListRepository {
override suspend fun addAdjective(adjectiveWord: AdjectiveWord) {
db.adjectiveWordDao.saveWord(adjectiveWord)
}

override suspend fun addRandomWords() {

val allowedChars = ('A'..'Z') + ('a'..'z')

for (i in 1..30) {

val isOnlyPlural = listOf(true, false).random()
val word = NounWord(
gender = listOf(WordGender.DER, WordGender.DIE, WordGender.DAS).random(),
isOnlyPlural = isOnlyPlural,
plural = (1..15)
.map { allowedChars.random() }
.joinToString(""),
word = if (!isOnlyPlural) (1..15)
.map { allowedChars.random() }
.joinToString("") else null,
translation = (1..15)
.map { allowedChars.random() }
.joinToString("")
)

db.nounWordDao.saveWord(word)
}
}

override suspend fun deleteAllWords() {
db.nounWordDao.deleteAllWords()
db.verbWordDao.deleteAllWords()
db.verbFormDao.deleteAllWords()
db.adjectiveWordDao.deleteAllWords()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package xyz.savvamirzoyan.wordremember.data.status

import xyz.savvamirzoyan.wordremember.data.state.DataInputState
import xyz.savvamirzoyan.wordremember.viewmodel.AddWordViewModel

sealed class AddWordStatus {

sealed class Repeatable : AddWordStatus() {
class Gender(val value: DataInputState) : AddWordStatus()
class Word(val value: DataInputState) : AddWordStatus()
class Translation(val value: DataInputState) : AddWordStatus()
class Plural(val value: DataInputState) : AddWordStatus()
class VerbFormsVisibility(val value: Int) : AddWordStatus()
class OnlyPluralSwitchVisibility(val value: Int) : AddWordStatus()
class SaveButtonIsEnabled(val value: Boolean) : AddWordStatus()
class AdjectiveFormsVisibility(val value: Int) : AddWordStatus()
class VerbForms(val value: AddWordViewModel.VerbFormStatus) : AddWordStatus()
}

sealed class Unrepeatable : AddWordStatus() {
object ClearAllInput : AddWordStatus()
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package xyz.savvamirzoyan.wordremember.data.state
package xyz.savvamirzoyan.wordremember.data.status

import androidx.annotation.StringRes
import xyz.savvamirzoyan.wordremember.data.entity.QuestionAnswer
Expand All @@ -10,4 +10,5 @@ sealed class LearnWordStatus {
val word: String,
val answers: List<QuestionAnswer>
) : LearnWordStatus()

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package xyz.savvamirzoyan.wordremember.data.status

import xyz.savvamirzoyan.wordremember.data.database.model.AdjectiveWord
import xyz.savvamirzoyan.wordremember.data.database.model.NounWord
import xyz.savvamirzoyan.wordremember.data.database.model.VerbWordWithVerbForms
import xyz.savvamirzoyan.wordremember.data.entity.WordsListItem

sealed class WordsListStatus {

class Words(val value: List<WordsListItem>) : WordsListStatus()

sealed class ReturnBack : WordsListStatus() {
class Noun(val nounWord: NounWord) : ReturnBack()
class Verb(val verb: VerbWordWithVerbForms) : ReturnBack()
class Adjective(val adjectiveWord: AdjectiveWord) : ReturnBack()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package xyz.savvamirzoyan.wordremember.domain

import timber.log.Timber
import xyz.savvamirzoyan.wordremember.constants.Endings
import xyz.savvamirzoyan.wordremember.constants.Person
import xyz.savvamirzoyan.wordremember.constants.Prefix
import xyz.savvamirzoyan.wordremember.constants.Suffix

object VerbAnalyzer {

object Builder {
fun prasens(prefix: String, wordRoot: String, person: Person): String {
val endingTransformer = wordEndingTransformer(wordRoot)
return "$prefix$wordRoot${endingTransformer(person)}"
}
}

fun prefix(word: String) = Prefix.all.find { word.startsWith(it) } ?: ""

fun removePrefix(word: String) = word.removePrefix(prefix(word))

fun removeSuffixEn(word: String): String = if (word.removeSuffix(Suffix.en) != word) {
word.removeSuffix(Suffix.en)
} else {
word.removeSuffix(Suffix.n)
}

private fun wordEndingTransformer(word: String): (Person) -> String = when {
word.endsWith(Endings.t) -> ::prasensEndingForTD
word.endsWith(Endings.d) -> ::prasensEndingForTD
word.endsWith(Endings.m) -> ::prasensEndingForMN
word.endsWith(Endings.n) -> ::prasensEndingForMN
word.endsWith(Endings.s) -> ::prasensEndingForSSsZ
word.endsWith(Endings.ss) -> ::prasensEndingForSSsZ
word.endsWith(Endings.z) -> ::prasensEndingForSSsZ
word.endsWith(Endings.er) -> ::prasensEndingForErEl
word.endsWith(Endings.el) -> ::prasensEndingForErEl
else -> ::prasensEndingForUndefined
}

private fun prasensEndingForTD(person: Person): String = when (person) {
Person.ICH -> "e"
Person.DU -> "est"
Person.MAN -> "et"
Person.WIR -> "en"
Person.IHR -> "et"
Person.SIE -> "en"
}.also {
Timber.i("prasensEndingForTD was used")
}

private fun prasensEndingForMN(person: Person): String = when (person) {
Person.ICH -> "e"
Person.DU -> "est"
Person.MAN -> "et"
Person.WIR -> "en"
Person.IHR -> "et"
Person.SIE -> "en"
}.also {
Timber.i("prasensEndingForMN was used")
}

private fun prasensEndingForSSsZ(person: Person): String = when (person) {
Person.ICH -> "e"
Person.DU -> "t"
Person.MAN -> "t"
Person.WIR -> "en"
Person.IHR -> "t"
Person.SIE -> "en"
}.also {
Timber.i("prasensEndingForSSsZ was used")
}

private fun prasensEndingForErEl(person: Person): String = when (person) {
Person.ICH -> "e"
Person.DU -> "st"
Person.MAN -> "t"
Person.WIR -> "n"
Person.IHR -> "t"
Person.SIE -> "n"
}.also {
Timber.i("prasensEndingForErEl was used")
}

private fun prasensEndingForUndefined(person: Person): String = when (person) {
Person.ICH -> "e"
Person.DU -> "st"
Person.MAN -> "t"
Person.WIR -> "en"
Person.IHR -> "t"
Person.SIE -> "en"
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package xyz.savvamirzoyan.wordremember.extension

import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine

fun <T1, T2, T3, T4, T5, T6, R> combine(
flow1: Flow<T1>,
flow2: Flow<T2>,
flow3: Flow<T3>,
flow4: Flow<T4>,
flow5: Flow<T5>,
flow6: Flow<T6>,
transform: suspend (T1, T2, T3, T4, T5, T6) -> R
): Flow<R> = combine(
combine(flow1, flow2, flow3, ::Triple),
combine(flow4, flow5, flow6, ::Triple)
) { t1, t2 ->
transform(
t1.first,
t1.second,
t1.third,
t2.first,
t2.second,
t2.third
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,16 @@ fun Fragment.snackbar(
action?.let { setAction(actionText, it) }
show()
}
}

fun Fragment.snackbar(
text: String,
actionText: String,
length: Int = Snackbar.LENGTH_INDEFINITE,
action: ((View) -> Unit)? = null
) {
Snackbar.make(requireView(), text, length).apply {
action?.let { setAction(actionText, it) }
show()
}
}
Loading

0 comments on commit e726246

Please sign in to comment.