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_SWEDISH, getKeyboardLanguageText(LANGUAGE_SWEDISH)),
|
||||
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_SWEDISH -> getString(R.string.translation_swedish)
|
||||
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)"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ const val LANGUAGE_NORWEGIAN = 14
|
|||
const val LANGUAGE_SWEDISH = 15
|
||||
const val LANGUAGE_DANISH = 16
|
||||
const val LANGUAGE_FRENCH_BEPO = 17
|
||||
const val LANGUAGE_VIETNAMESE_TELEX = 18
|
||||
|
||||
// keyboard height multiplier options
|
||||
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 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
|
||||
|
||||
import android.content.Context
|
||||
import org.json.JSONObject
|
||||
import java.io.InputStream
|
||||
|
||||
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
|
||||
|
@ -59,3 +62,25 @@ fun parseRawEmojiSpecsFile(context: Context, path: String): MutableList<String>
|
|||
cachedEmojiData = 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,9 +178,35 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
|
|||
switchToLetters = true
|
||||
}
|
||||
} else {
|
||||
inputConnection.commitText(codeChar.toString(), 1)
|
||||
if (originalText == null) {
|
||||
updateShiftKeyState()
|
||||
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)
|
||||
if (originalText == null) {
|
||||
updateShiftKeyState()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -418,6 +418,11 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
|||
}
|
||||
|
||||
setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor)
|
||||
if (context.config.keyboardLanguage == LANGUAGE_VIETNAMESE_TELEX) {
|
||||
setupLanguageTelex()
|
||||
} else {
|
||||
cachedVNTelexData.clear()
|
||||
}
|
||||
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>) {
|
||||
mEmojiPaletteHolder?.emojis_list?.apply {
|
||||
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