Skip to content

Commit

Permalink
Merge pull request #37 from amirisback/develop/multi-language-support
Browse files Browse the repository at this point in the history
DEVELOP :: MULTI LANGUAGE SUPPORT
  • Loading branch information
amirisback committed May 8, 2023
2 parents dc71d49 + 2c89ec9 commit e878194
Show file tree
Hide file tree
Showing 30 changed files with 2,909 additions and 4 deletions.
76 changes: 76 additions & 0 deletions app/schemas/com.frogobox.keyboard.data.local.db.AppDatabase/1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "f76c2f5058229a55fe3cb182b8e11113",
"entities": [
{
"tableName": "auto_text",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT NOT NULL, `label` TEXT NOT NULL, `date` TEXT NOT NULL, `updatedDate` TEXT NOT NULL, `updatedTime` TEXT NOT NULL, `body` TEXT NOT NULL, `isActive` INTEGER NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "label",
"columnName": "label",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "updatedDate",
"columnName": "updatedDate",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "updatedTime",
"columnName": "updatedTime",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "body",
"columnName": "body",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "isActive",
"columnName": "isActive",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f76c2f5058229a55fe3cb182b8e11113')"
]
}
}
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
android:name=".ui.toggle.ToggleActivity"
android:exported="false" />

<activity android:name=".ui.language.KeyboardLanguageActivity"
android:exported="false" />

<activity
android:name=".ui.main.MainActivity"
android:exported="true"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import android.graphics.drawable.Drawable
import android.widget.ImageView
import androidx.core.content.ContextCompat
import com.frogobox.keyboard.R
import com.frogobox.keyboard.util.Constant.PREF_KEYBOARD_TYPE
import com.frogobox.keyboard.util.Constant.PREF_ROOT_NAME
import com.frogobox.sdk.delegate.preference.PreferenceDelegatesImpl

/**
* Created by Faisal Amir on 24/10/22
Expand Down Expand Up @@ -45,4 +48,9 @@ fun Context.getStrokeColor() = ContextCompat.getColor(this, R.color.keyboard_bg_

fun Drawable.applyColorFilter(color: Int) = mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN)

fun ImageView.applyColorFilter(color: Int) = setColorFilter(color, PorterDuff.Mode.SRC_IN)
fun ImageView.applyColorFilter(color: Int) = setColorFilter(color, PorterDuff.Mode.SRC_IN)

fun Context.getKeyboardType(): Int {
val pref = PreferenceDelegatesImpl(this, PREF_ROOT_NAME)
return pref.loadPrefInt(PREF_KEYBOARD_TYPE, R.xml.keys_letters_qwerty)
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import android.widget.EditText
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import com.frogobox.keyboard.R
import com.frogobox.keyboard.common.ext.getKeyboardType
import com.frogobox.keyboard.common.ext.getProperBackgroundColor
import com.frogobox.keyboard.common.ext.getProperTextColor
import com.frogobox.keyboard.databinding.ItemKeyboardHeaderBinding
Expand Down Expand Up @@ -622,7 +623,7 @@ class KeyboardIME : InputMethodService(), OnKeyboardActionListener {
}

private fun getKeyboardLayoutXML(): Int {
return R.xml.keys_letters_qwerty
return baseContext.getKeyboardType()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.frogobox.keyboard.ui.language

/**
* Created by Faisal Amir on 24/10/22
* -----------------------------------------
* E-mail : faisalamircs@gmail.com
* Github : github.com/amirisback
* -----------------------------------------
* Copyright (C) Frogobox ID / amirisback
* All rights reserved
*/


data class KeyboardLanguage(
val name: String,
val xml: Int,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.frogobox.keyboard.ui.language

import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.activity.viewModels
import com.frogobox.keyboard.common.base.BaseActivity
import com.frogobox.keyboard.databinding.ActivityKeyboardLanguageBinding
import com.frogobox.keyboard.databinding.ItemLanguageKeyboardBinding
import com.frogobox.recycler.core.FrogoRecyclerNotifyListener
import com.frogobox.recycler.core.IFrogoBindingAdapter
import com.frogobox.recycler.ext.injectorBinding
import com.frogobox.sdk.ext.gone
import com.frogobox.sdk.ext.showToast
import com.frogobox.sdk.ext.visible
import dagger.hilt.android.AndroidEntryPoint

/**
* Created by Faisal Amir on 24/10/22
* -----------------------------------------
* E-mail : faisalamircs@gmail.com
* Github : github.com/amirisback
* -----------------------------------------
* Copyright (C) Frogobox ID / amirisback
* All rights reserved
*/

@AndroidEntryPoint
class KeyboardLanguageActivity : BaseActivity<ActivityKeyboardLanguageBinding>(),
IFrogoBindingAdapter<KeyboardLanguage, ItemLanguageKeyboardBinding> {

private val viewModel: KeyboardLanguageViewModel by viewModels()

override fun setupViewBinding(): ActivityKeyboardLanguageBinding {
return ActivityKeyboardLanguageBinding.inflate(layoutInflater)
}

override fun setupViewModel() {
super.setupViewModel()
viewModel.apply {
keyboardLanguage.observe(this@KeyboardLanguageActivity) {
setupRV(it)
}
}
}

override fun onCreateExt(savedInstanceState: Bundle?) {
super.onCreateExt(savedInstanceState)
if (savedInstanceState == null) {
viewModel.getKeyboardLanguage(this)
}
}

override fun initView() {
super.initView()
setupDetailActivity("Keyboard Language")
binding.apply {

}
}

override fun setViewBinding(parent: ViewGroup): ItemLanguageKeyboardBinding {
return ItemLanguageKeyboardBinding.inflate(LayoutInflater.from(parent.context), parent, false)
}

override fun onItemClicked(
binding: ItemLanguageKeyboardBinding,
data: KeyboardLanguage,
position: Int,
notifyListener: FrogoRecyclerNotifyListener<KeyboardLanguage>
) {
viewModel.setKeyboard(data.xml) {
viewModel.getKeyboardLanguage(this@KeyboardLanguageActivity)
}
}

override fun onItemLongClicked(
binding: ItemLanguageKeyboardBinding,
data: KeyboardLanguage,
position: Int,
notifyListener: FrogoRecyclerNotifyListener<KeyboardLanguage>
) {}

override fun setupInitComponent(
binding: ItemLanguageKeyboardBinding,
data: KeyboardLanguage,
position: Int,
notifyListener: FrogoRecyclerNotifyListener<KeyboardLanguage>
) {
binding.apply {
tvItemKeyboardMain.text = data.name
if (viewModel.checkKeyboardType(data.xml)) {
this.ivIcon.visible()
} else {
this.ivIcon.gone()
}
}
}

private fun setupRV(data: List<KeyboardLanguage>) {
binding.rvKeyboardLanguage
.injectorBinding<KeyboardLanguage, ItemLanguageKeyboardBinding>()
.addData(data)
.addCallback(this)
.createLayoutLinearVertical(false)
.build()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.frogobox.keyboard.ui.language

import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.frogobox.coresdk.response.FrogoStateResponse
import com.frogobox.keyboard.R
import com.frogobox.keyboard.common.base.BaseViewModel
import com.frogobox.keyboard.util.Constant
import com.frogobox.sdk.delegate.preference.PreferenceDelegates
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

/**
* Created by Faisal Amir on 24/10/22
* -----------------------------------------
* E-mail : faisalamircs@gmail.com
* Github : github.com/amirisback
* -----------------------------------------
* Copyright (C) Frogobox ID / amirisback
* All rights reserved
*/


@HiltViewModel
class KeyboardLanguageViewModel @Inject constructor(
private val pref : PreferenceDelegates
) : BaseViewModel() {

private var _keyboardLanguage = MutableLiveData<List<KeyboardLanguage>>()
var keyboardLanguage: LiveData<List<KeyboardLanguage>> = _keyboardLanguage

private var _showloading = MutableLiveData<Boolean>()
var showloading: LiveData<Boolean> = _showloading

fun getKeyboardLanguage(context: Context) {
val list = mutableListOf<KeyboardLanguage>()
list.add(KeyboardLanguage("${context.getString(R.string.translation_english)} (QWERTY)", R.xml.keys_letters_qwerty))
list.add(KeyboardLanguage("${context.getString(R.string.translation_english)} (QWERTZ)", R.xml.keys_letters_english_qwertz))
list.add(KeyboardLanguage("${context.getString(R.string.translation_english)} (DVORAK)", R.xml.keys_letters_english_dvorak))

list.add(KeyboardLanguage(context.getString(R.string.translation_bengali), R.xml.keys_letters_bengali))
list.add(KeyboardLanguage(context.getString(R.string.translation_bulgarian), R.xml.keys_letters_bulgarian))

list.add(KeyboardLanguage(context.getString(R.string.translation_french), R.xml.keys_letters_french))
list.add(KeyboardLanguage(context.getString(R.string.translation_german), R.xml.keys_letters_german))
list.add(KeyboardLanguage(context.getString(R.string.translation_greek), R.xml.keys_letters_greek))
list.add(KeyboardLanguage(context.getString(R.string.translation_lithuanian), R.xml.keys_letters_lithuanian))
list.add(KeyboardLanguage(context.getString(R.string.translation_romanian), R.xml.keys_letters_romanian))
list.add(KeyboardLanguage(context.getString(R.string.translation_slovenian), R.xml.keys_letters_slovenian))
list.add(KeyboardLanguage(context.getString(R.string.translation_spanish), R.xml.keys_letters_spanish_qwerty))
list.add(KeyboardLanguage("${context.getString(R.string.translation_turkish)} (Q)", R.xml.keys_letters_turkish_q))
_keyboardLanguage.postValue(list)
}

fun setKeyboard(xml: Int, onSuccess: () -> Unit) {
pref.savePrefInt(Constant.PREF_KEYBOARD_TYPE, xml, object : FrogoStateResponse {
override fun onFailed(statusCode: Int, errorMessage: String) {}
override fun onFinish() {}
override fun onHideProgress() {
_showloading.postValue(false)
}
override fun onShowProgress() {
_showloading.postValue(true)
}
override fun onSuccess() {
onSuccess()
}
})
}

fun checkKeyboardType(xml: Int) : Boolean {
return pref.loadPrefInt(Constant.PREF_KEYBOARD_TYPE, R.xml.keys_letters_qwerty) == xml
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.frogobox.keyboard.common.ext.isDarkThemeOn
import com.frogobox.keyboard.databinding.ActivityMainBinding
import com.frogobox.keyboard.ui.autotext.AutoTextActivity
import com.frogobox.keyboard.ui.detail.DetailActivity
import com.frogobox.keyboard.ui.language.KeyboardLanguageActivity
import com.frogobox.keyboard.ui.toggle.ToggleActivity
import com.frogobox.sdk.ext.showLogDebug
import com.frogobox.sdk.ext.startActivityExt
Expand Down Expand Up @@ -98,6 +99,10 @@ class MainActivity : BaseMainActivity<ActivityMainBinding>() {
startActivityExt<ToggleActivity>()
}

btnMultiLanguage.setOnClickListener {
startActivityExt<KeyboardLanguageActivity>()
}

}
}

Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/frogobox/keyboard/util/Constant.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ object Constant {

const val PREF_ROOT_NAME = "PREF_ROOT_NAME"

const val PREF_KEYBOARD_TYPE = "PREF_KEYBOARD_TYPE"

object Extra {
const val EXTRA_DATA = "EXTRA_DATA"
}
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_check.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="@color/tv_text_color"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z" />
</vector>
12 changes: 12 additions & 0 deletions app/src/main/res/layout/activity_keyboard_language.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rv_keyboard_language"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingTop="@dimen/frogo_dimen_16dp"
tools:itemCount="20"
tools:listitem="@layout/item_language_keyboard">

</androidx.recyclerview.widget.RecyclerView>
Loading

0 comments on commit e878194

Please sign in to comment.