Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.github.braillesystems.learnbraille.data.entities.BrailleDot.E
import com.github.braillesystems.learnbraille.data.entities.BrailleDot.F
import com.github.braillesystems.learnbraille.res.MarkerType
import com.github.braillesystems.learnbraille.res.SymbolType
import com.github.braillesystems.learnbraille.utils.Version
import com.github.braillesystems.learnbraille.utils.unreachable
import kotlinx.coroutines.runBlocking
import org.junit.After
Expand Down Expand Up @@ -158,6 +159,8 @@ class MaterialsRepositoryTest {
repo = MaterialsRepositoryImpl(
db.deckDao, db.cardDao,
object : PreferenceRepository {
override val lastUpdateDialogVersionShowed: Version
get() = unreachable
override val buzzEnabled: Boolean
get() = unreachable
override val toastsEnabled: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ import com.github.braillesystems.learnbraille.data.entities.DBid
import com.github.braillesystems.learnbraille.data.entities.User
import com.github.braillesystems.learnbraille.data.entities.UserDao
import com.github.braillesystems.learnbraille.utils.BuzzPattern
import com.github.braillesystems.learnbraille.utils.Version
import com.github.braillesystems.learnbraille.utils.logged
import com.github.braillesystems.learnbraille.utils.preferences
import timber.log.Timber

interface PreferenceRepository {

val lastUpdateDialogVersionShowed: Version

val buzzEnabled: Boolean
val toastsEnabled: Boolean
val brailleTrainerEnabled: Boolean get() = false // Uncomment in android manifest when set true
Expand All @@ -34,7 +37,10 @@ interface PreferenceRepository {
val incorrectBuzzPattern: BuzzPattern get() = longArrayOf(0, 200)
}

interface MutablePreferenceRepository : PreferenceRepository
interface MutablePreferenceRepository : PreferenceRepository {
override var lastUpdateDialogVersionShowed: Version
override var isWriteModeFirst: Boolean
}

/**
* Keep default values same as in `settings_hierarchy`.
Expand All @@ -45,6 +51,25 @@ class PreferenceRepositoryImpl(
private val userDao: UserDao
) : MutablePreferenceRepository {

override var lastUpdateDialogVersionShowed: Version by logged(
getter = {
val v = context.preferences.getString(
context.getString(R.string.preference_app_version),
"0.0.0"
) ?: error("Default value should be provided")
Version.valueOf(v)
},
setter = { value ->
with(context.preferences.edit()) {
putString(
context.getString(R.string.preference_app_version),
value.toString()
)
apply()
}
}
)

override val buzzEnabled: Boolean by logged {
context.preferences.getBoolean(
context.getString(R.string.preference_enable_buzz),
Expand Down Expand Up @@ -115,12 +140,23 @@ class PreferenceRepositoryImpl(
)
}

override val isWriteModeFirst: Boolean by logged {
context.preferences.getBoolean(
context.getString(R.string.preferences_is_write_mode_first),
true
)
}
override var isWriteModeFirst: Boolean by logged(
getter = {
context.preferences.getBoolean(
context.getString(R.string.preferences_is_write_mode_first),
true
)
},
setter = { value ->
with(context.preferences.edit()) {
putBoolean(
context.getString(R.string.preferences_is_write_mode_first),
value
)
apply()
}
}
)

override val currentUserId: DBid by logged {
context.preferences.getLong(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
package com.github.braillesystems.learnbraille.ui

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import com.github.braillesystems.learnbraille.R
import com.github.braillesystems.learnbraille.data.entities.*
import com.github.braillesystems.learnbraille.data.repository.MutablePreferenceRepository
import com.github.braillesystems.learnbraille.res.inputMarkerPrintRules
import com.github.braillesystems.learnbraille.res.inputSymbolPrintRules
import com.github.braillesystems.learnbraille.res.showMarkerPrintRules
import com.github.braillesystems.learnbraille.res.showSymbolPrintRules
import com.github.braillesystems.learnbraille.ui.views.BrailleDotsViewMode
import com.github.braillesystems.learnbraille.utils.*
import kotlinx.android.synthetic.main.fragment_flip_dialog.view.*
import org.koin.android.ext.android.inject

fun Fragment.showCorrectToast() = toast(getString(R.string.input_correct))

Expand Down Expand Up @@ -79,3 +87,36 @@ fun Context.showPrint(data: MaterialData): String =

fun Fragment.showPrint(data: MaterialData): String =
contextNotNull.showPrint(data)

private typealias UpdateDialog = FragmentActivity.() -> Unit

private val FragmentActivity.updateDialogs: List<Pair<Version, UpdateDialog>> by lazyWithContext {
listOf(
Version(1, 2, 1) to fun FragmentActivity.() {
val viewGroup: ViewGroup = findViewById(android.R.id.content)
val dialogView: View = LayoutInflater
.from(this)
.inflate(R.layout.fragment_flip_dialog, viewGroup, false)
val alertDialog = AlertDialog.Builder(this).apply {
setView(dialogView)
setTitle(getString(R.string.fragment_flip_dialog_title))
}.create()
val preferenceRepository: MutablePreferenceRepository by inject()
dialogView.btnOK.setOnClickListener {
preferenceRepository.isWriteModeFirst = dialogView.writingDefault.isChecked
alertDialog.hide()
}
alertDialog.show()
}
).sortedBy { (version, _) -> version }
}

fun FragmentActivity.showNewUpdateDialogs() {
val preferenceRepository: MutablePreferenceRepository by inject()
updateDialogs
.filter { (v, _) -> v > preferenceRepository.lastUpdateDialogVersionShowed }
.forEach { (v, dialog) ->
dialog()
preferenceRepository.lastUpdateDialogVersionShowed = v
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ import com.github.braillesystems.learnbraille.ui.screens.FragmentBinding
import com.github.braillesystems.learnbraille.ui.views.BrailleDotsViewMode
import com.github.braillesystems.learnbraille.ui.views.display
import com.github.braillesystems.learnbraille.ui.views.dotsState
import com.github.braillesystems.learnbraille.utils.*
import com.github.braillesystems.learnbraille.utils.checkedAnnounce
import com.github.braillesystems.learnbraille.utils.getFragmentStringArg
import com.github.braillesystems.learnbraille.utils.getValue
import com.github.braillesystems.learnbraille.utils.parse

class MarkerViewFragment : AbstractFragmentWithHelp(R.string.browser_marker_view_help) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,17 @@ import com.github.braillesystems.learnbraille.data.entities.Material
import com.github.braillesystems.learnbraille.data.entities.Symbol
import com.github.braillesystems.learnbraille.databinding.FragmentSymbolViewBinding
import com.github.braillesystems.learnbraille.res.captionRules
import com.github.braillesystems.learnbraille.ui.dotsMode
import com.github.braillesystems.learnbraille.ui.screens.AbstractFragmentWithHelp
import com.github.braillesystems.learnbraille.ui.screens.BrailleDotsInfo
import com.github.braillesystems.learnbraille.ui.screens.FragmentBinding
import com.github.braillesystems.learnbraille.ui.showPrint
import com.github.braillesystems.learnbraille.ui.views.BrailleDotsViewMode
import com.github.braillesystems.learnbraille.ui.views.display
import com.github.braillesystems.learnbraille.ui.views.dotsState
import com.github.braillesystems.learnbraille.utils.*
import com.github.braillesystems.learnbraille.utils.checkedAnnounce
import com.github.braillesystems.learnbraille.utils.getFragmentStringArg
import com.github.braillesystems.learnbraille.utils.getValue
import com.github.braillesystems.learnbraille.utils.parse

class SymbolViewFragment : AbstractFragmentWithHelp(R.string.browser_symbol_view_help) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ import com.github.braillesystems.learnbraille.data.db.LearnBrailleDatabase
import com.github.braillesystems.learnbraille.databinding.FragmentMenuBinding
import com.github.braillesystems.learnbraille.ui.screens.AbstractFragmentWithHelp
import com.github.braillesystems.learnbraille.ui.screens.theory.toLastCourseStep
import com.github.braillesystems.learnbraille.ui.showNewUpdateDialogs
import com.github.braillesystems.learnbraille.utils.*
import com.google.android.material.button.MaterialButton
import org.koin.android.ext.android.inject
import timber.log.Timber


class MenuFragment : AbstractFragmentWithHelp(R.string.menu_help) {

private val db: LearnBrailleDatabase by inject()
Expand All @@ -36,6 +38,7 @@ class MenuFragment : AbstractFragmentWithHelp(R.string.menu_help) {
).ini().also { binding ->

title = getString(R.string.menu_actionbar_text_template).format(appName)
activity?.showNewUpdateDialogs()

val buttons = mutableListOf<MaterialButton>()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@ import com.github.braillesystems.learnbraille.databinding.FragmentCardBinding
import com.github.braillesystems.learnbraille.res.captionRules
import com.github.braillesystems.learnbraille.res.deckTagToName
import com.github.braillesystems.learnbraille.res.inputMarkerPrintRules
import com.github.braillesystems.learnbraille.ui.*
import com.github.braillesystems.learnbraille.ui.brailletrainer.BrailleTrainer
import com.github.braillesystems.learnbraille.ui.brailletrainer.BrailleTrainerSignalHandler
import com.github.braillesystems.learnbraille.ui.inputPrint
import com.github.braillesystems.learnbraille.ui.screens.*
import com.github.braillesystems.learnbraille.ui.showCorrectToast
import com.github.braillesystems.learnbraille.ui.showHintToast
import com.github.braillesystems.learnbraille.ui.showIncorrectToast
import com.github.braillesystems.learnbraille.ui.views.*
import com.github.braillesystems.learnbraille.utils.*
import org.koin.android.ext.android.inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import com.github.braillesystems.learnbraille.ui.screens.theory.getStepArg
import com.github.braillesystems.learnbraille.ui.screens.theory.toCurrentStep
import com.github.braillesystems.learnbraille.ui.screens.theory.toNextStep
import com.github.braillesystems.learnbraille.ui.screens.theory.toPrevStep
import com.github.braillesystems.learnbraille.utils.checkedAnnounce
import com.github.braillesystems.learnbraille.utils.navigate
import com.github.braillesystems.learnbraille.utils.title

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ import com.github.braillesystems.learnbraille.data.entities.spelling
import com.github.braillesystems.learnbraille.data.repository.PreferenceRepository
import com.github.braillesystems.learnbraille.ui.views.BrailleDotsViewMode.Reading
import com.github.braillesystems.learnbraille.ui.views.BrailleDotsViewMode.Writing
import com.github.braillesystems.learnbraille.utils.*
import com.github.braillesystems.learnbraille.utils.announce
import com.github.braillesystems.learnbraille.utils.chainify
import com.github.braillesystems.learnbraille.utils.forEach
import com.github.braillesystems.learnbraille.utils.unreachable
import kotlinx.android.synthetic.main.braille_dots_view.view.*
import org.koin.core.KoinComponent
import org.koin.core.inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,19 @@ val Context.extendedTextSize: Float by lazyWithContext {
// Size applied in runtime is different
resources.getDimension(R.dimen.lessons_info_text_size) / 5 * 3
}

data class Version(val v1: Int, val v2: Int, val v3: Int) : Comparable<Version> {

override fun compareTo(other: Version): Int =
Triple(v1, v2, v3).compareTo(other.run { Triple(v1, v2, v3) })

override fun toString(): String = "$v1.$v2.$v3"

companion object Factories {
fun valueOf(s: String): Version =
s
.split('.')
.map(String::toInt)
.let { (v1, v2, v3) -> Version(v1, v2, v3) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@ operator fun <A, B> Pair<A, B>.compareTo(other: Pair<A, B>): Int
else -> 1
}

operator fun <A, B, C> Triple<A, B, C>.compareTo(other: Triple<A, B, C>): Int
where A : Comparable<A>, B : Comparable<B>, C : Comparable<C> =
when {
first < other.first -> -1
first == other.first && second < other.second -> -1
first == other.first && second == other.second && third < other.third -> -1
equals(other) -> 0
else -> 1
}

fun String.removeHtmlMarkup() = Regex("""<[^>]*>|&""").replace(this, "")

inline fun runIf(cond: Boolean, block: () -> Unit) {
Expand Down
86 changes: 86 additions & 0 deletions app/src/main/res/layout/fragment_flip_dialog.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/fragment_flip_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
style="@style/dialogTextView"
android:text="@string/fragment_flip_dialog_msg" />

<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dialog_text_view_margin">

<RadioButton
android:id="@+id/readingDefault"
style="@style/radioGroupBtnStyle"
android:checked="true"
android:text="@string/radio_btn_no_flip" />

<RadioButton
android:id="@+id/writingDefault"
style="@style/radioGroupBtnStyle"
android:text="@string/radio_btn_flip" />
</RadioGroup>

<TextView
style="@style/dialogTextView"
android:text="@string/fragment_flip_dialog_msg2" />

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/dialog_text_view_margin">

<TextView
android:id="@+id/flip_btn_demo_desc_text_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:gravity="center_vertical|right"
android:importantForAccessibility="no"
android:text="@string/flip_btn_demo_desc"
android:textSize="@dimen/lessons_info_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/flip_button_demo"
app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.button.MaterialButton
android:id="@+id/flip_button_demo"
style="@style/sideIconButtons"
android:layout_width="@dimen/side_buttons_width"
android:layout_height="@dimen/practice_buttons_small_height"
android:clickable="false"
android:importantForAccessibility="no"
app:backgroundTint="@color/colorSecondary"
app:icon="@drawable/ic_flip_white_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/flip_btn_demo_desc_text_view"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearanceOverlay="@style/sideRightButtonsShape" />
</androidx.constraintlayout.widget.ConstraintLayout>

<Button
android:id="@+id/btnOK"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="@dimen/dialog_text_view_margin"
android:text="@string/dialog_ok"
android:textSize="@dimen/ok_btn_text_size" />
</LinearLayout>
</ScrollView>
</layout>
3 changes: 3 additions & 0 deletions app/src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@
<dimen name="list_item_margin">8dp</dimen>
<dimen name="margin_text">20dp</dimen>

<dimen name="ok_btn_text_size">40sp</dimen>
<dimen name="dialog_text_view_margin">15dp</dimen>

</resources>
Loading