Skip to content

Commit

Permalink
2.0
Browse files Browse the repository at this point in the history
The app was developed from zero.
News:
- New UI
- Offline mode
- Top contributors (of Common Voice)
- App statistics
- New options in Settings
- Sending of recordings/validations in background
- Fixed many bugs
- Telegram group: @common_voice_android
- New animations
  • Loading branch information
Sav22999 authored Jun 19, 2020
2 parents 529f9a5 + a5dd310 commit 2aa39c2
Show file tree
Hide file tree
Showing 227 changed files with 6,400 additions and 3,685 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@
.externalNativeBuild
.cxx
*.jks
/screenshots/sample/*
/screenshots/sample/*
*/desktop.ini
75 changes: 34 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,6 @@ To support me, you can do a donation :smile: with PayPal:

[<img src="images/badges/donatePayPal.png" width="200px"></img>](https://bit.ly/3aJnnq7)

### Beta version

You can download and test also the last features using the Beta version. It's available officially just on Google Play Store:

[<img src="images/badges/googlePlayBadge.png" width="200px"></img>](https://bit.ly/36KgQep)

### How contribute

If you want to help to develop this app, you can open an `Issue` an send feedback about the features or report bugs.
Expand All @@ -45,15 +39,9 @@ _If your language is not now supported by [Common Voice](https://voice.mozilla.o

These features/options aren't available now, but probably they will be available in a future release of the app.

- [priority] Sending validations/recordings in background: so you won't wait anymore that the sending is finished
- Offline mode (or "Airplane mode"): you will be able to validate clips and record sentences offline, and in a second moment they will be send to the server
- Customisable gestures: you will be able to customise gestures
- New themes: at least "Light", "Dark" and "Auto mode" (but maybe you will be able to create your theme)
- Settings reorganised
- Save logs to file
- Some animations in Listen and Speak
- Gestures guide
- "Top contributors" in Dashboard

### Screenshots

Expand All @@ -63,11 +51,11 @@ If you want screenshots of the other versions, go to the `screenshots` folder.

### Why an Android app of Common Voice?

There is already the website, which is responsive and mobile-friendly, but actually it’s very slow because of so many animations and graphic effects, which distract and annoy you. So, this app want to improve the experience of this fantastic project. You can see statistics, voices online; you can set the daily goal (it's not the same of Common Voice website); you can record sentences and validate clips, with a few taps. So, the app is smart, customisable, light, but powerful.
There is already the website, which is responsive and mobile-friendly, but actually it’s very slow because of so many animations and graphic effects, which distract and annoy you. So, this app want to improve the experience of this fantastic project. You can see statistics, voices online; you can set the daily goal (it's not the same of Common Voice website); you can record sentences and validate clips, with a few taps. **You can validate and record when you are not connected to the Internet too!** So, the app is smart, customisable, light, and **powerful**.

### Gestures

You can turn on "Gestures" in Settings. These are the supported gestures (now):
You can turn on/off "Gestures" in Settings. These are the supported gestures (now):

| **Swipe-up** | **Swipe-left** | **Swipe-right** |
| :----------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
Expand All @@ -81,36 +69,41 @@ The app is officially translated in these following languages, **thank you very

Legend:

|| 🔶 | 🔴 |
| :--------------------------------: | :-----------------: | :--------------------------------------------: |
| Full translation (95%+ translated) | Partial translation | Not yet available for the Common Voice project |
|| 🔶 | 🔴 |
| :--------------------------------: | :------------------------------------: | :--------------------------------------------: |
| Full translation (95%+ translated) | Partial translation (0-95% translated) | Not yet available for the Common Voice project |

-----------

| Status | Percentage | Language (code) | Language (name) | Translators | Link |
| :----: | :--------: | :-------------: | :-------------- | :----------------------------------------------------------- | :----------------------------------------------------------: |
|| 98% | `ar` | Arabic | [**ABDELGHANI HOURANI**](https://crowdin.com/profile/abdelghani.me) | **[Translate](https://crowdin.com/project/common-voice-android/ar)** |
| 🔶 | 4% | `as` | Assamese | [**Mohsin Ali**](https://crowdin.com/profile/Mohsin_Ali) | **[Translate](https://crowdin.com/project/common-voice-android/as)** |
| 🔶🔴 | 9% | `bn` | Bengali | [**Oymate**](https://crowdin.com/profile/Oymate) | **[Translate](https://crowdin.com/project/common-voice-android/bn)** |
| 🔶 | 14% | `ca` | Catalan | [**Carles Paredes Lanau**](https://crowdin.com/profile/carlesparedes) | **[Translate](https://crowdin.com/project/common-voice-android/ca)** |
|| 100% | `cs` | Czech | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**JaMamPravoSedet**](https://crowdin.com/profile/JaMamPravoSedet) | **[Translate](https://crowdin.com/project/common-voice-android/cs)** |
| 🔶 | 71% | `de` | German | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**Moini**](https://github.com/Moini), [**akoyaxd**](https://crowdin.com/profile/akoyaxd), [**enissen99**](https://crowdin.com/profile/enissen99) | **[Translate](https://crowdin.com/project/common-voice-android/de)** |
|| *(main)* | `en` | English | [**Saverio Morelli**](https://github.com/Sav22999), [**Cadence Ember**](https://github.com/cloudrac3r) | _(nothing)_ |
| 🔶 | 1% | `eo` | Esperanto | [**tuxayo**](https://github.com/tuxayo) | **[Translate](https://crowdin.com/project/common-voice-android/eo)** |
|| 100% | `es` | Spanish | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**ivnvitx**](https://crowdin.com/profile/ivnvitx) | **[Translate](https://crowdin.com/project/common-voice-android/es-ES)** |
| 🔶 | 13% | `et` | Estonian | [**Agu Ratas**](https://crowdin.com/profile/aguratas) | **[Translate](https://crowdin.com/project/common-voice-android/et)** |
|| 100% | `eu` | Basque | **[Mielanjel Iraeta](https://crowdin.com/profile/pospolos)** | **[Translate](https://crowdin.com/project/common-voice-android/eu)** |
| 🔶 | 74% | `fa` | Persian | [**Danial Behzadi**](https://crowdin.com/profile/danialbehzadi) | **[Translate](https://crowdin.com/project/common-voice-android/fa)** |
|| 98% | `fr` | French | **[PoorPockets McNewHold](https://crowdin.com/profile/IfiwFR)**, [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**Lexane**](https://github.com/exilexi), [**grrgui**](https://crowdin.com/profile/pascaloulou) | **[Translate](https://crowdin.com/project/common-voice-android/fr)** |
|| 98% | `ia` | Interlingua | **[Carmelo Serraino](https://crowdin.com/profile/Melo46)** | **[Translate](https://crowdin.com/project/common-voice-android/ia)** |
|| 100% | `it` | Italian | [**Saverio Morelli**](https://github.com/Sav22999) | **[Translate](https://crowdin.com/project/common-voice-android/it#)** |
| 🔶 | 19% | `nl` | Dutch | [**Pander**](https://github.com/PanderMusubi) | **[Translate](https://crowdin.com/project/common-voice-android/nl)** |
|| 99% | `pl` | Polish | [**Sobsz**](https://crowdin.com/profile/Sobsz) | **[Translate](https://crowdin.com/project/common-voice-android/pl)** |
| 🔶 | 25% | `ru` | Russian | **[Anton Nesterov](https://github.com/komachi)**, [**Roman Prokopov**](https://crowdin.com/profile/Roman100) | **[Translate](https://crowdin.com/project/common-voice-android/ru)** |
| ✅🔴 | 100% | `sk` | Slovak | [**tadeasbucha**](https://github.com/tadeasbucha), [**xrup**](https://crowdin.com/profile/xrup) | **[Translate](https://crowdin.com/project/common-voice-android/sk)** |
| 🔶 | 25% | `sv-SE` | Swedish | **[Linus Amvall](https://github.com/klasrocket)**, [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy) | **[Translate](https://crowdin.com/project/common-voice-android/sv-SE)** |
|| 100% | `ta` | Tamil | [**Manimaran.K**](https://crowdin.com/profile/manimaran96) | **[Translate](https://crowdin.com/project/common-voice-android/ta)** |
| 🔶 | 12% | `tr` | Turkish | [**Ege Özdemir**](https://crowdin.com/profile/ValentinMoon), [**Muhammed Çelebi**](https://crowdin.com/profile/GabrielBelmont) | **[Translate](https://crowdin.com/project/common-voice-android/tr)** |
| Status | Percentage | Language (code) | Language (name) | Translators | Link |
| :----: | :--------: | :-------------: | :----------------- | :----------------------------------------------------------- | :----------------------------------------------------------: |
|| 100% | `ar` | Arabic | [**ABDELGHANI HOURANI**](https://crowdin.com/profile/abdelghani.me) | **[Translate](https://crowdin.com/project/common-voice-android/ar)** |
| 🔶 | 3% | `as` | Assamese | [**Mohsin Ali**](https://crowdin.com/profile/Mohsin_Ali) | **[Translate](https://crowdin.com/project/common-voice-android/as)** |
| ✅🔴 | 100% | `bn` | Bengali | [**Oymate**](https://crowdin.com/profile/Oymate) | **[Translate](https://crowdin.com/project/common-voice-android/bn)** |
| 🔶 | 37% | `ca` | Catalan | [**Carles Paredes Lanau**](https://crowdin.com/profile/carlesparedes) | **[Translate](https://crowdin.com/project/common-voice-android/ca)** |
|| 100% | `cs` | Czech | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**JaMamPravoSedet**](https://crowdin.com/profile/JaMamPravoSedet) | **[Translate](https://crowdin.com/project/common-voice-android/cs)** |
|| 98% | `de` | German | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**Moini**](https://github.com/Moini), [**akoyaxd**](https://crowdin.com/profile/akoyaxd), [**enissen99**](https://crowdin.com/profile/enissen99) | **[Translate](https://crowdin.com/project/common-voice-android/de)** |
|| *(main)* | `en` | English | [**Saverio Morelli**](https://github.com/Sav22999), [**Cadence Ember**](https://github.com/cloudrac3r) | _(nothing)_ |
| 🔶 | 5% | `eo` | Esperanto | [**tuxayo**](https://github.com/tuxayo) | **[Translate](https://crowdin.com/project/common-voice-android/eo)** |
|| 97% | `es` | Spanish | [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**ivnvitx**](https://crowdin.com/profile/ivnvitx) | **[Translate](https://crowdin.com/project/common-voice-android/es-ES)** |
| 🔶 | 10% | `et` | Estonian | [**Agu Ratas**](https://crowdin.com/profile/aguratas) | **[Translate](https://crowdin.com/project/common-voice-android/et)** |
|| 99% | `eu` | Basque | **[Mielanjel Iraeta](https://crowdin.com/profile/pospolos)** | **[Translate](https://crowdin.com/project/common-voice-android/eu)** |
| 🔶 | 73% | `fa` | Persian | [**Danial Behzadi**](https://crowdin.com/profile/danialbehzadi) | **[Translate](https://crowdin.com/project/common-voice-android/fa)** |
|| 97% | `fr` | French | **[PoorPockets McNewHold](https://crowdin.com/profile/IfiwFR)**, [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy), [**Lexane**](https://github.com/exilexi), [**grrgui**](https://crowdin.com/profile/pascaloulou) | **[Translate](https://crowdin.com/project/common-voice-android/fr)** |
| 🔶 | 72% | `ia` | Interlingua | **[Carmelo Serraino](https://crowdin.com/profile/Melo46)** | **[Translate](https://crowdin.com/project/common-voice-android/ia)** |
|| 100% | `it` | Italian | [**Saverio Morelli**](https://github.com/Sav22999) | **[Translate](https://crowdin.com/project/common-voice-android/it#)** |
|| 96% | `ja` | Japanese | *Machine translation* | **[Translate](https://crowdin.com/project/common-voice-android/ja)** |
|| 97% | `nl` | Dutch | [**Pander**](https://github.com/PanderMusubi) | **[Translate](https://crowdin.com/project/common-voice-android/nl)** |
|| 100% | `pl` | Polish | [**Sobsz**](https://crowdin.com/profile/Sobsz) | **[Translate](https://crowdin.com/project/common-voice-android/pl)** |
| 🔶 | 93% | `pt` | Portuguese | *Machine translation* | **[Translate](https://crowdin.com/project/common-voice-android/pt)** |
| 🔶 | 93% | `ro` | Romanian | *Machine translation* | **[Translate](https://crowdin.com/project/common-voice-android/ro)** |
|| 96% | `ru` | Russian | **[Anton Nesterov](https://github.com/komachi)**, [**Roman Prokopov**](https://crowdin.com/profile/Roman100) | **[Translate](https://crowdin.com/project/common-voice-android/ru)** |
| ✅🔴 | 100% | `sk` | Slovak | [**tadeasbucha**](https://github.com/tadeasbucha), [**xrup**](https://crowdin.com/profile/xrup) | **[Translate](https://crowdin.com/project/common-voice-android/sk)** |
|| 97% | `sv-SE` | Swedish | **[Linus Amvall](https://github.com/klasrocket)**, [**acrylicpaintboy**](https://crowdin.com/profile/acrylicpaintboy) | **[Translate](https://crowdin.com/project/common-voice-android/sv-SE)** |
| 🔶 | 72% | `ta` | Tamil | [**Manimaran.K**](https://crowdin.com/profile/manimaran96) | **[Translate](https://crowdin.com/project/common-voice-android/ta)** |
| 🔶 | 15% | `tr` | Turkish | [**Ege Özdemir**](https://crowdin.com/profile/ValentinMoon), [**Muhammed Çelebi**](https://crowdin.com/profile/GabrielBelmont) | **[Translate](https://crowdin.com/project/common-voice-android/tr)** |
| 🔶 | 94% | `uk` | Ukrainian | *Machine translation* | **[Translate](https://crowdin.com/project/common-voice-android/uk)** |
| 🔶 | 93% | `zh-CN` | Chinese Simplified | *Machine translation* | **[Translate](https://crowdin.com/project/common-voice-android/zh-CN)** |

### License

Expand Down
Binary file added app/FD-GH/release/app-FD-GH-release.aab
Binary file not shown.
Binary file added app/GPS/release/app-GPS-release.aab
Binary file not shown.
14 changes: 6 additions & 8 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,22 @@ android {
applicationId 'org.commonvoice.saverio'
minSdkVersion 23
targetSdkVersion 29
versionCode = 110
versionName '1.5b'
versionCode = 113
versionName '2.0'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
applicationIdSuffix ".beta"
debuggable true
}
}
buildFeatures {
viewBinding true
}
flavorDimensions "source_store"
productFlavors {
GPS {
"GPS" {
dimension "source_store"
}
"FD-GH" {
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
android:name=".CommonVoice"
android:allowBackup="true"
android:configChanges="locale"
android:icon="@mipmap/ic_commonvoice_beta"
android:icon="@mipmap/ic_commonvoice_stable"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_commonvoice_beta_round"
android:roundIcon="@mipmap/ic_commonvoice_stable_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
Expand Down
13 changes: 1 addition & 12 deletions app/src/main/java/org/commonvoice/saverio/BadgesActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ class BadgesActivity : VariableLanguageActivity(R.layout.all_badges) {
private val LEVEL_SAVED = "LEVEL_SAVED"
private val RECORDINGS_SAVED = "RECORDINGS_SAVED"
private val VALIDATIONS_SAVED = "VALIDATIONS_SAVED"
private val GESTURES = "GESTURES"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -46,7 +45,7 @@ class BadgesActivity : VariableLanguageActivity(R.layout.all_badges) {
loadBadges()
//checkNewBadges(2, 2, 2)//remove this

if (getGestures()) {
if (mainPrefManager.areGesturesEnabled) {
layoutAllBadges.setOnTouchListener(object : OnSwipeTouchListener(this@BadgesActivity) {
override fun onSwipeRight() {
onBackPressed()
Expand All @@ -55,16 +54,6 @@ class BadgesActivity : VariableLanguageActivity(R.layout.all_badges) {
}
}

fun getGestures(): Boolean {
return getSharedPreferences(
GESTURES,
PRIVATE_MODE
).getBoolean(
GESTURES,
false
)
}

fun loadBadges() {
val imagesLevel: List<ImageView> = listOf<ImageView>(
this.imageFirstLevelBadge,
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/java/org/commonvoice/saverio/CommonVoice.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.commonvoice.saverio
import android.app.Application
import androidx.lifecycle.SavedStateHandle
import androidx.work.WorkManager
import org.commonvoice.saverio_lib.viewmodels.DashboardViewModel
import org.commonvoice.saverio_lib.api.RetrofitFactory
import org.commonvoice.saverio_lib.api.network.ConnectionManager
import org.commonvoice.saverio_lib.db.AppDB
Expand Down Expand Up @@ -77,6 +78,7 @@ class CommonVoice : Application() {
single { ReportsRepository(get(), get()) }
single { StatsRepository(get(), get()) }
single { RecordingSoundIndicatorRepository(get()) }
single { CVStatsRepository(get(), get()) }
}

private val mvvmViewmodels = module {
Expand All @@ -101,9 +103,17 @@ class CommonVoice : Application() {
get<MediaPlayerRepository>(),
get<ReportsRepository>(),
get<WorkManager>(),
get<MainPrefManager>(),
get<ListenPrefManager>()
)
}
viewModel { DashboardViewModel(
get<CVStatsRepository>(),
get<StatsRepository>(),
get<ConnectionManager>(),
get<MainPrefManager>(),
get<StatsPrefManager>()
) }
viewModel { LoginViewModel(get()) }
viewModel { MainActivityViewModel(get(), get()) }
viewModel { HomeViewModel(get()) }
Expand Down
Loading

0 comments on commit 2aa39c2

Please sign in to comment.