mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Merge branch 'release/3.0.2'
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
KeePassDX(3.0.2)
|
||||
* Samsung DeX mode #1114 #245 (Thx @chenxiaolong)
|
||||
|
||||
KeePassDX(3.0.1)
|
||||
* Fix text size and smallest margin #1085
|
||||
* Fix number of lines during an edition #1073
|
||||
|
||||
@@ -11,8 +11,8 @@ android {
|
||||
applicationId "com.kunzisoft.keepass"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 30
|
||||
versionCode = 88
|
||||
versionName = "3.0.1"
|
||||
versionCode = 89
|
||||
versionName = "3.0.2"
|
||||
multiDexEnabled true
|
||||
|
||||
testApplicationId = "com.kunzisoft.keepass.tests"
|
||||
|
||||
@@ -221,6 +221,14 @@
|
||||
android:name="com.kunzisoft.keepass.services.KeyboardEntryNotificationService"
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
<receiver
|
||||
android:name="com.kunzisoft.keepass.receivers.DexModeReceiver"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.app.action.ENTER_KNOX_DESKTOP_MODE" />
|
||||
<action android:name="android.app.action.EXIT_KNOX_DESKTOP_MODE" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
</application>
|
||||
|
||||
@@ -88,6 +88,12 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
// Enabling/disabling MagikeyboardService is normally done by DexModeReceiver, but this
|
||||
// additional check will allow the keyboard to be reenabled more easily if the app crashes
|
||||
// or is force quit within DeX mode and then the user leaves DeX mode. Without this, the
|
||||
// user would need to enter and exit DeX mode once to reenable the service.
|
||||
MagikeyboardUtil.setEnabled(this, !DexUtil.isDexMode(resources.configuration))
|
||||
|
||||
mFileDatabaseHistoryAction = FileDatabaseHistoryAction.getInstance(applicationContext)
|
||||
|
||||
setContentView(R.layout.activity_file_selection)
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.kunzisoft.keepass.receivers
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.util.Log
|
||||
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||
import com.kunzisoft.keepass.utils.DexUtil
|
||||
import com.kunzisoft.keepass.utils.MagikeyboardUtil
|
||||
|
||||
class DexModeReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
val enabled = when (intent?.action) {
|
||||
"android.app.action.ENTER_KNOX_DESKTOP_MODE" -> {
|
||||
Log.i(TAG, "Entered DeX mode")
|
||||
false
|
||||
}
|
||||
"android.app.action.EXIT_KNOX_DESKTOP_MODE" -> {
|
||||
Log.i(TAG, "Left DeX mode")
|
||||
true
|
||||
}
|
||||
else -> return
|
||||
}
|
||||
|
||||
MagikeyboardUtil.setEnabled(context!!, enabled)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = DexModeReceiver::class.java.name
|
||||
}
|
||||
}
|
||||
27
app/src/main/java/com/kunzisoft/keepass/utils/DexUtil.kt
Normal file
27
app/src/main/java/com/kunzisoft/keepass/utils/DexUtil.kt
Normal file
@@ -0,0 +1,27 @@
|
||||
package com.kunzisoft.keepass.utils
|
||||
|
||||
import android.content.res.Configuration
|
||||
import android.util.Log
|
||||
|
||||
object DexUtil {
|
||||
private val TAG = DexUtil::class.java.name
|
||||
|
||||
// Determine if the current environment is in DeX mode. Always returns false on non-Samsung
|
||||
// devices.
|
||||
fun isDexMode(config: Configuration): Boolean {
|
||||
// This is the documented way to check this: https://developer.samsung.com/samsung-dex/modify-optimizing.html
|
||||
return try {
|
||||
val configClass = config.javaClass
|
||||
val enabledConstant = configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass)
|
||||
val enabledField = configClass.getField("semDesktopModeEnabled").getInt(config)
|
||||
val isEnabled = enabledConstant == enabledField
|
||||
|
||||
Log.d(TAG, "DeX currently enabled: $isEnabled")
|
||||
|
||||
isEnabled
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "Failed to check for DeX mode; likely not Samsung device: $e")
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.kunzisoft.keepass.utils
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.util.Log
|
||||
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||
|
||||
object MagikeyboardUtil {
|
||||
private val TAG = MagikeyboardUtil::class.java.name
|
||||
|
||||
// Set whether MagikeyboardService is enabled. This change is persistent and survives app
|
||||
// crashes and device restarts. The state is changed immediately and does not require an app
|
||||
// restart.
|
||||
fun setEnabled(context: Context, enabled: Boolean) {
|
||||
val componentState = if (enabled) {
|
||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
|
||||
} else {
|
||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
|
||||
}
|
||||
|
||||
Log.d(TAG, "Setting service state: $enabled")
|
||||
|
||||
val component = ComponentName(context, MagikeyboardService::class.java)
|
||||
context.packageManager.setComponentEnabledSetting(component, componentState, PackageManager.DONT_KILL_APP)
|
||||
}
|
||||
}
|
||||
1
fastlane/metadata/android/en-US/changelogs/89.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/89.txt
Normal file
@@ -0,0 +1 @@
|
||||
* Samsung DeX mode #1114 #245 (Thx @chenxiaolong)
|
||||
1
fastlane/metadata/android/fr-FR/changelogs/89.txt
Normal file
1
fastlane/metadata/android/fr-FR/changelogs/89.txt
Normal file
@@ -0,0 +1 @@
|
||||
* Mode Samsung DeX #1114 #245 (Thx @chenxiaolong)
|
||||
Reference in New Issue
Block a user