Merge pull request #207 from chihung93/feature/add_vn
Feature/add_Vietnamese_Telex
This commit is contained in:
commit
056ab4d4f0
File diff suppressed because it is too large
Load Diff
|
@ -187,6 +187,7 @@ fun Context.getKeyboardLanguages(): ArrayList<RadioItem> {
|
||||||
RadioItem(LANGUAGE_SPANISH, getKeyboardLanguageText(LANGUAGE_SPANISH)),
|
RadioItem(LANGUAGE_SPANISH, getKeyboardLanguageText(LANGUAGE_SPANISH)),
|
||||||
RadioItem(LANGUAGE_SWEDISH, getKeyboardLanguageText(LANGUAGE_SWEDISH)),
|
RadioItem(LANGUAGE_SWEDISH, getKeyboardLanguageText(LANGUAGE_SWEDISH)),
|
||||||
RadioItem(LANGUAGE_TURKISH_Q, getKeyboardLanguageText(LANGUAGE_TURKISH_Q)),
|
RadioItem(LANGUAGE_TURKISH_Q, getKeyboardLanguageText(LANGUAGE_TURKISH_Q)),
|
||||||
|
RadioItem(LANGUAGE_VIETNAMESE_TELEX, getKeyboardLanguageText(LANGUAGE_VIETNAMESE_TELEX)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +210,7 @@ fun Context.getKeyboardLanguageText(language: Int): String {
|
||||||
LANGUAGE_SPANISH -> getString(R.string.translation_spanish)
|
LANGUAGE_SPANISH -> getString(R.string.translation_spanish)
|
||||||
LANGUAGE_SWEDISH -> getString(R.string.translation_swedish)
|
LANGUAGE_SWEDISH -> getString(R.string.translation_swedish)
|
||||||
LANGUAGE_TURKISH_Q -> "${getString(R.string.translation_turkish)} (Q)"
|
LANGUAGE_TURKISH_Q -> "${getString(R.string.translation_turkish)} (Q)"
|
||||||
|
LANGUAGE_VIETNAMESE_TELEX -> "${getString(R.string.translation_vietnamese)} (Telex)"
|
||||||
else -> "${getString(R.string.translation_english)} (QWERTY)"
|
else -> "${getString(R.string.translation_english)} (QWERTY)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ const val LANGUAGE_NORWEGIAN = 14
|
||||||
const val LANGUAGE_SWEDISH = 15
|
const val LANGUAGE_SWEDISH = 15
|
||||||
const val LANGUAGE_DANISH = 16
|
const val LANGUAGE_DANISH = 16
|
||||||
const val LANGUAGE_FRENCH_BEPO = 17
|
const val LANGUAGE_FRENCH_BEPO = 17
|
||||||
|
const val LANGUAGE_VIETNAMESE_TELEX = 18
|
||||||
|
|
||||||
// keyboard height multiplier options
|
// keyboard height multiplier options
|
||||||
const val KEYBOARD_HEIGHT_MULTIPLIER_SMALL = 1
|
const val KEYBOARD_HEIGHT_MULTIPLIER_SMALL = 1
|
||||||
|
@ -50,3 +51,4 @@ const val KEYBOARD_HEIGHT_MULTIPLIER_MEDIUM = 2
|
||||||
const val KEYBOARD_HEIGHT_MULTIPLIER_LARGE = 3
|
const val KEYBOARD_HEIGHT_MULTIPLIER_LARGE = 3
|
||||||
|
|
||||||
const val EMOJI_SPEC_FILE_PATH = "media/emoji_spec.txt"
|
const val EMOJI_SPEC_FILE_PATH = "media/emoji_spec.txt"
|
||||||
|
const val LANGUAGE_VN_TELEX = "language/extension.json"
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.simplemobiletools.keyboard.helpers
|
package com.simplemobiletools.keyboard.helpers
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import org.json.JSONObject
|
||||||
|
import java.io.InputStream
|
||||||
|
|
||||||
private var cachedEmojiData: MutableList<String>? = null
|
private var cachedEmojiData: MutableList<String>? = null
|
||||||
|
val cachedVNTelexData: HashMap<String, String> = HashMap()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the emoji list at the given [path] and returns an parsed [MutableList]. If the
|
* Reads the emoji list at the given [path] and returns an parsed [MutableList]. If the
|
||||||
|
@ -59,3 +62,25 @@ fun parseRawEmojiSpecsFile(context: Context, path: String): MutableList<String>
|
||||||
cachedEmojiData = emojis
|
cachedEmojiData = emojis
|
||||||
return emojis
|
return emojis
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun parseRawJsonSpecsFile(context: Context, path: String): HashMap<String, String> {
|
||||||
|
if (cachedVNTelexData.isNotEmpty()) {
|
||||||
|
return cachedVNTelexData
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
val inputStream: InputStream = context.assets.open(path)
|
||||||
|
val jsonString = inputStream.bufferedReader().use { it.readText() }
|
||||||
|
val jsonData = JSONObject(jsonString)
|
||||||
|
val rulesObj = jsonData.getJSONObject("rules")
|
||||||
|
val ruleKeys = rulesObj.keys()
|
||||||
|
while (ruleKeys.hasNext()) {
|
||||||
|
val key = ruleKeys.next()
|
||||||
|
val value = rulesObj.getString(key)
|
||||||
|
cachedVNTelexData[key] = value
|
||||||
|
}
|
||||||
|
} catch (ignored: Exception) {
|
||||||
|
return HashMap()
|
||||||
|
}
|
||||||
|
return cachedVNTelexData
|
||||||
|
}
|
||||||
|
|
|
@ -178,6 +178,30 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
|
||||||
switchToLetters = true
|
switchToLetters = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
when {
|
||||||
|
originalText != null && originalText.isNotEmpty() && cachedVNTelexData.isNotEmpty() -> {
|
||||||
|
val fullText = originalText.toString() + codeChar.toString()
|
||||||
|
val lastIndexEmpty = if (fullText.contains(" ")) {
|
||||||
|
fullText.lastIndexOf(" ")
|
||||||
|
} else 0
|
||||||
|
if (lastIndexEmpty >= 0) {
|
||||||
|
val word = fullText.subSequence(lastIndexEmpty, fullText.length).trim().toString()
|
||||||
|
val wordChars = word.toCharArray()
|
||||||
|
val predictWord = StringBuilder()
|
||||||
|
for (char in wordChars.size - 1 downTo 0) {
|
||||||
|
predictWord.append(wordChars[char])
|
||||||
|
val shouldChangeText = predictWord.reverse().toString()
|
||||||
|
if (cachedVNTelexData.containsKey(shouldChangeText)) {
|
||||||
|
inputConnection.setComposingRegion(fullText.length - shouldChangeText.length, fullText.length)
|
||||||
|
inputConnection.setComposingText(cachedVNTelexData[shouldChangeText], fullText.length)
|
||||||
|
inputConnection.setComposingRegion(fullText.length, fullText.length)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inputConnection.commitText(codeChar.toString(), 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
inputConnection.commitText(codeChar.toString(), 1)
|
inputConnection.commitText(codeChar.toString(), 1)
|
||||||
if (originalText == null) {
|
if (originalText == null) {
|
||||||
updateShiftKeyState()
|
updateShiftKeyState()
|
||||||
|
@ -186,6 +210,8 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onActionUp() {
|
override fun onActionUp() {
|
||||||
if (switchToLetters) {
|
if (switchToLetters) {
|
||||||
|
|
|
@ -418,6 +418,11 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||||
}
|
}
|
||||||
|
|
||||||
setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor)
|
setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor)
|
||||||
|
if (context.config.keyboardLanguage == LANGUAGE_VIETNAMESE_TELEX) {
|
||||||
|
setupLanguageTelex()
|
||||||
|
} else {
|
||||||
|
cachedVNTelexData.clear()
|
||||||
|
}
|
||||||
setupStoredClips()
|
setupStoredClips()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1506,6 +1511,13 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For Vietnamese - Telex
|
||||||
|
private fun setupLanguageTelex() {
|
||||||
|
ensureBackgroundThread {
|
||||||
|
parseRawJsonSpecsFile(context, LANGUAGE_VN_TELEX)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupEmojiAdapter(emojis: List<String>) {
|
private fun setupEmojiAdapter(emojis: List<String>) {
|
||||||
mEmojiPaletteHolder?.emojis_list?.apply {
|
mEmojiPaletteHolder?.emojis_list?.apply {
|
||||||
val emojiItemWidth = context.resources.getDimensionPixelSize(R.dimen.emoji_item_size)
|
val emojiItemWidth = context.resources.getDimensionPixelSize(R.dimen.emoji_item_size)
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Simple Keyboard</string>
|
||||||
|
<string name="app_launcher_name">Bàn phím</string>
|
||||||
|
<string name="redirection_note">Vui lòng bật Bàn phím đơn giản trên màn hình tiếp theo để biến nó thành bàn phím khả dụng. Nhấn \'Quay lại\' sau khi được bật.</string>
|
||||||
|
<string name="change_keyboard">Thay đổi bàn phím</string>
|
||||||
|
<!-- Clipboard -->
|
||||||
|
<string name="manage_clipboard_items">Quản lý các mục trong khay nhớ tạm</string>
|
||||||
|
<string name="manage_clipboard_empty">Khay nhớ tạm của bạn trống.</string>
|
||||||
|
<string name="manage_clipboard_label">Sau khi bạn sao chép một số văn bản, văn bản đó sẽ hiển thị ở đây. Bạn cũng có thể ghim các clip để sau này chúng không biến mất.</string>
|
||||||
|
<string name="clear_clipboard_data">Xóa dữ liệu trong khay nhớ tạm</string>
|
||||||
|
<string name="clear_clipboard_data_confirmation">Bạn có chắc chắn muốn xóa dữ liệu clipboard không?</string>
|
||||||
|
<string name="clipboard">Khay nhớ tạm</string>
|
||||||
|
<string name="clipboard_recent">Gần đây</string>
|
||||||
|
<string name="clipboard_current">Hiện tại</string>
|
||||||
|
<string name="clipboard_pinned">Đã ghim</string>
|
||||||
|
<string name="add_new_item">Thêm mục mới</string>
|
||||||
|
<string name="manage_clips">Bạn có thể quản lý hoặc thêm clip tại đây để truy cập nhanh.</string>
|
||||||
|
<string name="clip_text">Clip văn bản</string>
|
||||||
|
<string name="pin_text">Ghim văn bản</string>
|
||||||
|
<string name="text_pinned">Văn bản đã được ghim</string>
|
||||||
|
<string name="export_clipboard_items">Xuất các mục trong khay nhớ tạm</string>
|
||||||
|
<string name="import_clipboard_items">Nhập các mục trong khay nhớ tạm</string>
|
||||||
|
<!-- Accessibility -->
|
||||||
|
<string name="keycode_delete">Xóa</string>
|
||||||
|
<string name="keycode_mode_change">Thay đổi kiểu bàn phím</string>
|
||||||
|
<string name="keycode_shift">Shift</string>
|
||||||
|
<string name="keycode_enter">Nhập</string>
|
||||||
|
<string name="keycode_space">Phím cách</string>
|
||||||
|
<!-- Settings -->
|
||||||
|
<string name="show_clipboard_content">Hiển thị nội dung khay nhớ tạm nếu có</string>
|
||||||
|
<string name="show_popup">Hiển thị cửa sổ bật lên khi nhấn phím</string>
|
||||||
|
<string name="vibrate_on_keypress">Rung khi nhấn phím</string>
|
||||||
|
<string name="keyboard_language">Ngôn ngữ bàn phím</string>
|
||||||
|
<string name="keyboard_height">Chiều cao bàn phím</string>
|
||||||
|
<string name="show_key_borders">Hiển thị đường viền phím</string>
|
||||||
|
<string name="show_numbers_row">Hiển thị số trên một hàng riêng</string>
|
||||||
|
<string name="start_sentences_capitalized">Bắt đầu câu bằng chữ in hoa</string>
|
||||||
|
<!-- Emojis -->
|
||||||
|
<string name="emojis">Biểu tượng cảm xúc</string>
|
||||||
|
<!--
|
||||||
|
Haven't found some strings? There's more at
|
||||||
|
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||||
|
-->
|
||||||
|
</resources>
|
Loading…
Reference in New Issue