Skip to content

Commit

Permalink
Merge pull request #80 from braille-systems/release/0.4
Browse files Browse the repository at this point in the history
Release/0.4
- introduced step-by-step learning mode
- re-designed buttons and colors everywhere (applied Material Design)
- reformatted text in Help menus for better readability
- changed "Help" icon
- renamed app's package and declared our app as Beta
- main menu: added link to "Help" in buttons stack
- fixed database errors
- minor improvements
  • Loading branch information
zuevval committed Apr 17, 2020
2 parents c8478c4 + 586d399 commit a6c6025
Show file tree
Hide file tree
Showing 126 changed files with 3,702 additions and 1,529 deletions.
15 changes: 14 additions & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs'

android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
compileSdkVersion 29
buildToolsVersion "29.0.3"
dataBinding {
enabled = true
}
defaultConfig {
applicationId "ru.spbstu.amd.learnbraille"
applicationId "com.github.braillesystems.learnbraille"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
Expand Down Expand Up @@ -44,9 +48,14 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'

// Usb serial
implementation 'com.github.felHR85:UsbSerial:6.1.0'

// Room
implementation "androidx.room:room-runtime:$version_room"
kapt "androidx.room:room-compiler:$version_room"
implementation "androidx.room:room-ktx:$version_room"
testImplementation "androidx.room:room-testing:$version_room"

// Testing
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
Expand All @@ -61,4 +70,8 @@ dependencies {

// Lifecycle
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

//Design
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.github.braillesystems.learnbraille

import androidx.room.Room
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.github.braillesystems.learnbraille.database.LearnBrailleDatabase
import com.github.braillesystems.learnbraille.database.entities.StepDao
import com.github.braillesystems.learnbraille.database.entities.SymbolDao
import com.github.braillesystems.learnbraille.database.entities.UserDao
import com.github.braillesystems.learnbraille.database.entities.UserPassedStepDao
import com.github.braillesystems.learnbraille.res.russian.PREPOPULATE_USERS
import com.github.braillesystems.learnbraille.res.russian.steps.DEBUG_LESSONS
import com.github.braillesystems.learnbraille.res.russian.symbols.PREPOPULATE_SYMBOLS
import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import org.junit.runner.RunWith
import java.io.IOException

@RunWith(AndroidJUnit4::class)
class LearnBrailleDatabaseTest {

private lateinit var db: LearnBrailleDatabase
private lateinit var userDao: UserDao
private lateinit var stepDao: StepDao
private lateinit var symbolDao: SymbolDao
private lateinit var userPassedStepDao: UserPassedStepDao

@Before
fun createDB() {
val context = InstrumentationRegistry.getInstrumentation().targetContext
db = Room
.inMemoryDatabaseBuilder(context, LearnBrailleDatabase::class.java)
.allowMainThreadQueries()
.build().apply {
runBlocking {
userDao.insertUsers(PREPOPULATE_USERS)
stepDao.insertSteps(DEBUG_LESSONS)
symbolDao.insertSymbols(PREPOPULATE_SYMBOLS)
}
}

userDao = db.userDao
stepDao = db.stepDao
symbolDao = db.symbolDao
userPassedStepDao = db.userPassedStepDao
}

@After
@Throws(IOException::class)
fun closeDB() {
db.close()
}

// TODO actualize

companion object {
const val TEST_USER = 1L
}
}

This file was deleted.

10 changes: 5 additions & 5 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.spbstu.amd.learnbraille">
package="com.github.braillesystems.learnbraille">

<uses-permission android:name="android.permission.VIBRATE" />

<application
android:name=".LearnBrailleApplication"
android:name="com.github.braillesystems.learnbraille.LearnBrailleApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:icon="@mipmap/icon_beta"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:roundIcon="@mipmap/icon_beta_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<activity android:name="com.github.braillesystems.learnbraille.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
Binary file added android/app/src/main/icon_beta-playstore.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.github.braillesystems.learnbraille

import android.app.Application
import com.github.braillesystems.learnbraille.database.LearnBrailleDatabase
import com.github.braillesystems.learnbraille.database.entities.Language
import com.github.braillesystems.learnbraille.util.scope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import timber.log.Timber

class LearnBrailleApplication : Application() {

lateinit var prepopulationJob: Job
private set

override fun onCreate() {
super.onCreate()
Timber.plant(Timber.DebugTree())
Timber.i("onCreate")

// Force database prepopulation on first launch
LearnBrailleDatabase.getInstance(this).apply {
prepopulationJob = scope().launch {
if (userDao.getUser(defaultUser) == null) {
Timber.i("DB has been already initialized")
} else Timber.i("DB is not initialized yet")
}
}
}
}

typealias BuzzPattern = LongArray

val CORRECT_BUZZ_PATTERN: BuzzPattern = longArrayOf(100, 100, 100, 100, 100, 100)
val INCORRECT_BUZZ_PATTERN: BuzzPattern = longArrayOf(0, 200)

// TODO move to settings
val language = Language.RU
const val defaultUser = 1L

const val DEBUG = false
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.spbstu.amd.learnbraille
package com.github.braillesystems.learnbraille

import android.content.pm.ActivityInfo
import android.os.Bundle
Expand All @@ -7,14 +7,18 @@ import androidx.databinding.DataBindingUtil
import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import ru.spbstu.amd.learnbraille.databinding.ActivityMainBinding
import com.github.braillesystems.learnbraille.databinding.ActivityMainBinding
import timber.log.Timber

class MainActivity : AppCompatActivity() {

private lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Timber.i("onCreate")

DataBindingUtil.setContentView<ActivityMainBinding>(
this,
R.layout.activity_main
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
package ru.spbstu.amd.learnbraille.database
package com.github.braillesystems.learnbraille.database

import android.annotation.SuppressLint
import android.content.Context
import androidx.fragment.app.Fragment
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.sqlite.db.SupportSQLiteDatabase
import ru.spbstu.amd.learnbraille.res.russian.PREPOPULATE_LESSONS
import ru.spbstu.amd.learnbraille.res.russian.PREPOPULATE_USERS
import ru.spbstu.amd.learnbraille.res.russian.steps.PREPOPULATE_STEPS
import ru.spbstu.amd.learnbraille.res.russian.symbols.PREPOPULATE_SYMBOLS
import com.github.braillesystems.learnbraille.database.entities.*
import com.github.braillesystems.learnbraille.res.russian.PREPOPULATE_LESSONS
import com.github.braillesystems.learnbraille.res.russian.PREPOPULATE_USERS
import com.github.braillesystems.learnbraille.res.russian.steps.PREPOPULATE_STEPS
import com.github.braillesystems.learnbraille.res.russian.symbols.PREPOPULATE_SYMBOLS
import com.github.braillesystems.learnbraille.util.application
import com.github.braillesystems.learnbraille.util.scope
import kotlinx.coroutines.launch
import timber.log.Timber

@Database(
entities =
[
User::class, Lesson::class, Step::class, Symbol::class,
UserKnowsSymbol::class, UserPassedStep::class
UserKnowsSymbol::class, UserPassedStep::class, UserLastStep::class
],
version = 1,
version = 4,
exportSchema = false
)
@TypeConverters(
Expand All @@ -35,11 +40,16 @@ abstract class LearnBrailleDatabase : RoomDatabase() {
abstract val symbolDao: SymbolDao
abstract val userKnowsSymbolDao: UserKnowsSymbolDao
abstract val userPassedStepDao: UserPassedStepDao
abstract val userLastStep: UserLastStepDao

companion object {

const val name = "braille_lessons_database"

@Volatile
var prepopulationFinished = true
private set

@Volatile
private var INSTANCE: LearnBrailleDatabase? = null

Expand All @@ -49,17 +59,31 @@ abstract class LearnBrailleDatabase : RoomDatabase() {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}

private fun buildDatabase(context: Context) = Room.databaseBuilder(
private fun buildDatabase(context: Context) = Room
.databaseBuilder(
context.applicationContext,
LearnBrailleDatabase::class.java,
name
)
.addCallback(object : Callback() {

@SuppressLint("SyntheticAccessor")
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
Timber.d("Start database callback")
ioThread {
Timber.d("onCreate")
prepopulate()
}

override fun onDestructiveMigration(db: SupportSQLiteDatabase) {
super.onDestructiveMigration(db)
Timber.i("onDestructiveMigration")
prepopulate()
}

private fun prepopulate() {
Timber.i("prepopulate")
prepopulationFinished = false
scope().launch {
Timber.i("Start database prepopulation")
getInstance(context).apply {
userDao.insertUsers(PREPOPULATE_USERS)
Expand All @@ -68,10 +92,13 @@ abstract class LearnBrailleDatabase : RoomDatabase() {
symbolDao.insertSymbols(PREPOPULATE_SYMBOLS)
}
Timber.i("Finnish database prepopulation")
prepopulationFinished = true
}
}
})
.fallbackToDestructiveMigration()
.build()
}
}

fun Fragment.getDBInstance() = LearnBrailleDatabase.getInstance(application)
Loading

0 comments on commit a6c6025

Please sign in to comment.