Skip to content

Commit 02bb8d6

Browse files
authored
Merge pull request #183 from Merkost/direct_boot_aware
Direct boot aware
2 parents 44d913b + 14e7611 commit 02bb8d6

File tree

9 files changed

+60
-20
lines changed

9 files changed

+60
-20
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
<service
4444
android:name=".services.SimpleKeyboardIME"
45+
android:directBootAware="true"
4546
android:exported="true"
4647
android:label="@string/app_name"
4748
android:permission="android.permission.BIND_INPUT_METHOD">

app/src/main/kotlin/com/simplemobiletools/keyboard/App.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ import android.app.Application
44
import androidx.emoji2.bundled.BundledEmojiCompatConfig
55
import androidx.emoji2.text.EmojiCompat
66
import com.simplemobiletools.commons.extensions.checkUseEnglish
7+
import com.simplemobiletools.keyboard.extensions.isDeviceLocked
78

89
class App : Application() {
910
override fun onCreate() {
1011
super.onCreate()
11-
checkUseEnglish()
12+
if (!isDeviceLocked) {
13+
checkUseEnglish()
14+
}
1215
setupEmojiCompat()
1316
}
1417

app/src/main/kotlin/com/simplemobiletools/keyboard/adapters/ClipsKeyboardAdapter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ClipsKeyboardAdapter(
3131
) : RecyclerView.Adapter<ClipsKeyboardAdapter.ViewHolder>() {
3232

3333
private val layoutInflater = LayoutInflater.from(context)
34+
3435
private var textColor = context.getProperTextColor()
3536
private var backgroundColor = context.getProperBackgroundColor()
3637

app/src/main/kotlin/com/simplemobiletools/keyboard/databases/ClipsDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ abstract class ClipsDatabase : RoomDatabase() {
1919
if (db == null) {
2020
synchronized(ClipsDatabase::class) {
2121
if (db == null) {
22-
db = Room.databaseBuilder(context.applicationContext, ClipsDatabase::class.java, "clips.db").build()
22+
db = Room.databaseBuilder(context, ClipsDatabase::class.java, "clips.db").build()
2323
db!!.openHelper.setWriteAheadLoggingEnabled(true)
2424
}
2525
}

app/src/main/kotlin/com/simplemobiletools/keyboard/dialogs/KeyboardRadioGroupDialog.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.simplemobiletools.commons.extensions.onGlobalLayout
1212
import com.simplemobiletools.commons.models.RadioItem
1313
import com.simplemobiletools.keyboard.R
1414
import com.simplemobiletools.keyboard.extensions.getKeyboardDialogBuilder
15+
import com.simplemobiletools.keyboard.extensions.safeStorageContext
1516
import com.simplemobiletools.keyboard.extensions.setupKeyboardDialogStuff
1617

1718
class KeyboardRadioGroupDialog(
@@ -23,7 +24,7 @@ class KeyboardRadioGroupDialog(
2324
private val cancelCallback: (() -> Unit)? = null,
2425
private val callback: (newValue: Any) -> Unit
2526
) {
26-
private val context = ContextThemeWrapper(inputView.context, R.style.MyKeyboard_Alert)
27+
private val context = ContextThemeWrapper(inputView.context.safeStorageContext, R.style.MyKeyboard_Alert)
2728
private var dialog: AlertDialog? = null
2829
private var wasInit = false
2930
private var selectedItemId = -1

app/src/main/kotlin/com/simplemobiletools/keyboard/extensions/Context.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.simplemobiletools.keyboard.extensions
22

3+
import android.app.KeyguardManager
34
import android.content.ClipboardManager
45
import android.content.Context
56
import android.graphics.Color
@@ -10,16 +11,28 @@ import androidx.appcompat.app.AlertDialog
1011
import androidx.core.content.res.ResourcesCompat
1112
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1213
import com.simplemobiletools.commons.extensions.*
14+
import com.simplemobiletools.commons.helpers.isNougatPlus
1315
import com.simplemobiletools.commons.models.RadioItem
1416
import com.simplemobiletools.commons.views.MyTextView
1517
import com.simplemobiletools.keyboard.R
1618
import com.simplemobiletools.keyboard.databases.ClipsDatabase
1719
import com.simplemobiletools.keyboard.helpers.*
1820
import com.simplemobiletools.keyboard.interfaces.ClipsDao
1921

20-
val Context.config: Config get() = Config.newInstance(applicationContext)
22+
val Context.config: Config get() = Config.newInstance(applicationContext.safeStorageContext)
2123

22-
val Context.clipsDB: ClipsDao get() = ClipsDatabase.getInstance(applicationContext).ClipsDao()
24+
val Context.safeStorageContext: Context
25+
get() = if (isNougatPlus() && isDeviceLocked) {
26+
createDeviceProtectedStorageContext()
27+
} else {
28+
this
29+
}
30+
31+
val Context.isDeviceLocked: Boolean
32+
get() = (getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager).isDeviceLocked
33+
34+
val Context.clipsDB: ClipsDao
35+
get() = ClipsDatabase.getInstance(applicationContext.safeStorageContext).ClipsDao()
2336

2437
fun Context.getCurrentClip(): String? {
2538
val clipboardManager = (getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager)
@@ -34,7 +47,7 @@ fun Context.getStrokeColor(): Int {
3447
resources.getColor(R.color.md_grey_400, theme)
3548
}
3649
} else {
37-
val lighterColor = getProperBackgroundColor().lightenColor()
50+
val lighterColor = safeStorageContext.getProperBackgroundColor().lightenColor()
3851
if (lighterColor == Color.WHITE || lighterColor == Color.BLACK) {
3952
resources.getColor(R.color.divider_grey, theme)
4053
} else {
@@ -43,7 +56,7 @@ fun Context.getStrokeColor(): Int {
4356
}
4457
}
4558

46-
fun Context.getKeyboardDialogBuilder() = if (baseConfig.isUsingSystemTheme) {
59+
fun Context.getKeyboardDialogBuilder() = if (safeStorageContext.baseConfig.isUsingSystemTheme) {
4760
MaterialAlertDialogBuilder(this, R.style.MyKeyboard_Alert)
4861
} else {
4962
AlertDialog.Builder(this, R.style.MyKeyboard_Alert)

app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package com.simplemobiletools.keyboard.helpers
22

33
import android.content.Context
44
import com.simplemobiletools.commons.helpers.BaseConfig
5+
import com.simplemobiletools.keyboard.extensions.isDeviceLocked
6+
import com.simplemobiletools.keyboard.extensions.safeStorageContext
57
import java.util.*
68

79
class Config(context: Context) : BaseConfig(context) {
810
companion object {
9-
fun newInstance(context: Context) = Config(context)
11+
fun newInstance(context: Context) = Config(context.safeStorageContext)
1012
}
1113

1214
var vibrateOnKeypress: Boolean
@@ -42,7 +44,11 @@ class Config(context: Context) : BaseConfig(context) {
4244
set(showClipboardContent) = prefs.edit().putBoolean(SHOW_CLIPBOARD_CONTENT, showClipboardContent).apply()
4345

4446
var showNumbersRow: Boolean
45-
get() = prefs.getBoolean(SHOW_NUMBERS_ROW, false)
47+
get() = if (!context.isDeviceLocked) {
48+
prefs.getBoolean(SHOW_NUMBERS_ROW, false)
49+
} else {
50+
true
51+
}
4652
set(showNumbersRow) = prefs.edit().putBoolean(SHOW_NUMBERS_ROW, showNumbersRow).apply()
4753

4854
private fun getDefaultLanguage(): Int {

app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import android.view.inputmethod.ExtractedTextRequest
1414
import com.simplemobiletools.commons.extensions.getSharedPrefs
1515
import com.simplemobiletools.keyboard.R
1616
import com.simplemobiletools.keyboard.extensions.config
17+
import com.simplemobiletools.keyboard.extensions.safeStorageContext
1718
import com.simplemobiletools.keyboard.helpers.*
1819
import com.simplemobiletools.keyboard.interfaces.OnKeyboardActionListener
1920
import com.simplemobiletools.keyboard.views.MyKeyboardView
@@ -39,7 +40,7 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
3940

4041
override fun onInitializeInterface() {
4142
super.onInitializeInterface()
42-
getSharedPrefs().registerOnSharedPreferenceChangeListener(this)
43+
safeStorageContext.getSharedPrefs().registerOnSharedPreferenceChangeListener(this)
4344
}
4445

4546
override fun onCreateInputView(): View {
@@ -62,7 +63,6 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
6263
super.onStartInput(attribute, restarting)
6364
inputTypeClass = attribute!!.inputType and TYPE_MASK_CLASS
6465
inputTypeClassVariation = attribute.inputType and TYPE_MASK_VARIATION
65-
6666
enterKeyType = attribute.imeOptions and (IME_MASK_ACTION or IME_FLAG_NO_ENTER_ACTION)
6767
keyboard = createNewKeyboard()
6868
keyboardView?.setKeyboard(keyboard!!)
@@ -108,6 +108,7 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
108108
inputConnection.commitText("", 1)
109109
}
110110
}
111+
111112
MyKeyboard.KEYCODE_SHIFT -> {
112113
if (keyboardMode == KEYBOARD_LETTERS) {
113114
when {
@@ -131,6 +132,7 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
131132
}
132133
keyboardView!!.invalidateAllKeys()
133134
}
135+
134136
MyKeyboard.KEYCODE_ENTER -> {
135137
val imeOptionsActionId = getImeOptionsActionId()
136138
if (imeOptionsActionId != IME_ACTION_NONE) {
@@ -140,6 +142,7 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
140142
inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER))
141143
}
142144
}
145+
143146
MyKeyboard.KEYCODE_MODE_CHANGE -> {
144147
val keyboardXml = if (keyboardMode == KEYBOARD_LETTERS) {
145148
keyboardMode = KEYBOARD_SYMBOLS
@@ -151,9 +154,11 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
151154
keyboard = MyKeyboard(this, keyboardXml, enterKeyType)
152155
keyboardView!!.setKeyboard(keyboard!!)
153156
}
157+
154158
MyKeyboard.KEYCODE_EMOJI -> {
155159
keyboardView?.openEmojiPalette()
156160
}
161+
157162
else -> {
158163
var codeChar = code.toChar()
159164
val originalText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text ?: return
@@ -225,14 +230,17 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
225230
keyboardMode = KEYBOARD_NUMBERS
226231
R.xml.keys_numbers
227232
}
233+
228234
TYPE_CLASS_PHONE -> {
229235
keyboardMode = KEYBOARD_PHONE
230236
R.xml.keys_phone
231237
}
238+
232239
TYPE_CLASS_DATETIME -> {
233240
keyboardMode = KEYBOARD_SYMBOLS
234241
R.xml.keys_symbols
235242
}
243+
236244
else -> {
237245
keyboardMode = KEYBOARD_LETTERS
238246
getKeyboardLayoutXML()

app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
191191
mLabelTextSize = resources.getDimension(R.dimen.label_text_size).toInt()
192192
mPreviewHeight = resources.getDimension(R.dimen.key_height).toInt()
193193
mSpaceMoveThreshold = resources.getDimension(R.dimen.medium_margin).toInt()
194-
mTextColor = context.getProperTextColor()
195-
mBackgroundColor = context.getProperBackgroundColor()
196-
mPrimaryColor = context.getProperPrimaryColor()
194+
195+
with (context.safeStorageContext) {
196+
mTextColor = getProperTextColor()
197+
mBackgroundColor = getProperBackgroundColor()
198+
mPrimaryColor = getProperPrimaryColor()
199+
}
197200

198201
mPreviewPopup = PopupWindow(context)
199202
mPreviewText = inflater.inflate(resources.getLayout(R.layout.keyboard_key_preview), null) as TextView
@@ -343,12 +346,14 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
343346
}
344347

345348
fun setupKeyboard(changedView: View? = null) {
346-
mTextColor = context.getProperTextColor()
347-
mBackgroundColor = context.getProperBackgroundColor()
348-
mPrimaryColor = context.getProperPrimaryColor()
349+
with(context.safeStorageContext) {
350+
mTextColor = getProperTextColor()
351+
mBackgroundColor = getProperBackgroundColor()
352+
mPrimaryColor = getProperPrimaryColor()
349353

350-
mShowKeyBorders = context.config.showKeyBorders
351-
mUsingSystemTheme = context.config.isUsingSystemTheme
354+
mShowKeyBorders = config.showKeyBorders
355+
mUsingSystemTheme = config.isUsingSystemTheme
356+
}
352357

353358
val isMainKeyboard = changedView == null || changedView != mini_keyboard_view
354359
mKeyBackground = if (mShowKeyBorders && isMainKeyboard) {
@@ -394,6 +399,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
394399
settings_cog.applyColorFilter(mTextColor)
395400
pinned_clipboard_items.applyColorFilter(mTextColor)
396401
clipboard_clear.applyColorFilter(mTextColor)
402+
403+
toolbar_holder.beInvisibleIf(context.isDeviceLocked)
397404
}
398405

399406
mClipboardManagerHolder?.apply {
@@ -1413,7 +1420,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
14131420
}
14141421
}
14151422

1416-
val adapter = ClipsKeyboardAdapter(context, clips, refreshClipsListener) { clip ->
1423+
val adapter = ClipsKeyboardAdapter(context.safeStorageContext, clips, refreshClipsListener) { clip ->
14171424
mOnKeyboardActionListener!!.onText(clip.value)
14181425
vibrateIfNeeded()
14191426
}

0 commit comments

Comments
 (0)