mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix another entry in selection mode with Magikeyboard #1293
This commit is contained in:
@@ -60,6 +60,7 @@ import com.kunzisoft.keepass.database.element.node.Node
|
|||||||
import com.kunzisoft.keepass.database.element.node.NodeId
|
import com.kunzisoft.keepass.database.element.node.NodeId
|
||||||
import com.kunzisoft.keepass.database.element.template.Template
|
import com.kunzisoft.keepass.database.element.template.Template
|
||||||
import com.kunzisoft.keepass.education.EntryEditActivityEducation
|
import com.kunzisoft.keepass.education.EntryEditActivityEducation
|
||||||
|
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||||
import com.kunzisoft.keepass.model.AttachmentState
|
import com.kunzisoft.keepass.model.AttachmentState
|
||||||
import com.kunzisoft.keepass.model.EntryAttachmentState
|
import com.kunzisoft.keepass.model.EntryAttachmentState
|
||||||
import com.kunzisoft.keepass.model.RegisterInfo
|
import com.kunzisoft.keepass.model.RegisterInfo
|
||||||
@@ -434,9 +435,10 @@ class EntryEditActivity : DatabaseLockActivity(),
|
|||||||
|
|
||||||
private fun entryValidatedForKeyboardSelection(database: Database, entry: Entry) {
|
private fun entryValidatedForKeyboardSelection(database: Database, entry: Entry) {
|
||||||
// Populate Magikeyboard with entry
|
// Populate Magikeyboard with entry
|
||||||
populateKeyboardAndMoveAppToBackground(this,
|
MagikeyboardService.populateKeyboardAndMoveAppToBackground(
|
||||||
entry.getEntryInfo(database),
|
this,
|
||||||
intent)
|
entry.getEntryInfo(database)
|
||||||
|
)
|
||||||
onValidateSpecialMode()
|
onValidateSpecialMode()
|
||||||
// Don't keep activity history for entry edition
|
// Don't keep activity history for entry edition
|
||||||
finishForEntryResult(entry)
|
finishForEntryResult(entry)
|
||||||
|
|||||||
@@ -19,20 +19,16 @@
|
|||||||
*/
|
*/
|
||||||
package com.kunzisoft.keepass.activities
|
package com.kunzisoft.keepass.activities
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
|
|
||||||
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
|
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
|
||||||
import com.kunzisoft.keepass.database.element.Database
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.search.SearchHelper
|
import com.kunzisoft.keepass.database.search.SearchHelper
|
||||||
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||||
import com.kunzisoft.keepass.model.EntryInfo
|
|
||||||
import com.kunzisoft.keepass.model.SearchInfo
|
import com.kunzisoft.keepass.model.SearchInfo
|
||||||
import com.kunzisoft.keepass.otp.OtpEntryFields
|
import com.kunzisoft.keepass.otp.OtpEntryFields
|
||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
@@ -61,7 +57,7 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
|
|||||||
keySelectionBundle.getParcelable<SearchInfo>(KEY_SEARCH_INFO)?.let { mSearchInfo ->
|
keySelectionBundle.getParcelable<SearchInfo>(KEY_SEARCH_INFO)?.let { mSearchInfo ->
|
||||||
searchInfo = mSearchInfo
|
searchInfo = mSearchInfo
|
||||||
}
|
}
|
||||||
launch(database, searchInfo, true)
|
launch(database, searchInfo)
|
||||||
} else {
|
} else {
|
||||||
// To manage share
|
// To manage share
|
||||||
var sharedWebDomain: String? = null
|
var sharedWebDomain: String? = null
|
||||||
@@ -103,8 +99,7 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun launch(database: Database?,
|
private fun launch(database: Database?,
|
||||||
searchInfo: SearchInfo,
|
searchInfo: SearchInfo) {
|
||||||
forceSelection: Boolean = false) {
|
|
||||||
|
|
||||||
// Setting to integrate Magikeyboard
|
// Setting to integrate Magikeyboard
|
||||||
val searchShareForMagikeyboard = PreferencesUtil.isKeyboardSearchShareEnable(this)
|
val searchShareForMagikeyboard = PreferencesUtil.isKeyboardSearchShareEnable(this)
|
||||||
@@ -130,21 +125,22 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
|
|||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
} else if (searchShareForMagikeyboard) {
|
} else if (searchShareForMagikeyboard) {
|
||||||
if (items.size == 1 && !forceSelection) {
|
MagikeyboardService.performSelection(
|
||||||
// Automatically populate keyboard
|
items,
|
||||||
val entryPopulate = items[0]
|
{ entryInfo ->
|
||||||
populateKeyboardAndMoveAppToBackground(
|
// Automatically populate keyboard
|
||||||
this,
|
MagikeyboardService.populateKeyboardAndMoveAppToBackground(
|
||||||
entryPopulate,
|
this,
|
||||||
intent)
|
entryInfo
|
||||||
Log.e("TEST", "One item activity")
|
)
|
||||||
} else {
|
},
|
||||||
// Select the one we want
|
{ autoSearch ->
|
||||||
GroupActivity.launchForKeyboardSelectionResult(this,
|
GroupActivity.launchForKeyboardSelectionResult(this,
|
||||||
openedDatabase,
|
openedDatabase,
|
||||||
searchInfo,
|
searchInfo,
|
||||||
true)
|
autoSearch)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
GroupActivity.launchForSearchResult(this,
|
GroupActivity.launchForSearchResult(this,
|
||||||
openedDatabase,
|
openedDatabase,
|
||||||
@@ -214,14 +210,3 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun populateKeyboardAndMoveAppToBackground(activity: Activity,
|
|
||||||
entry: EntryInfo,
|
|
||||||
intent: Intent,
|
|
||||||
toast: Boolean = true) {
|
|
||||||
// Populate Magikeyboard with entry
|
|
||||||
MagikeyboardService.addEntryAndLaunchNotificationIfAllowed(activity, entry, toast)
|
|
||||||
// Consume the selection mode
|
|
||||||
EntrySelectionHelper.removeModesFromIntent(intent)
|
|
||||||
activity.moveTaskToBack(true)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ import com.kunzisoft.keepass.database.element.node.Type
|
|||||||
import com.kunzisoft.keepass.database.search.SearchHelper
|
import com.kunzisoft.keepass.database.search.SearchHelper
|
||||||
import com.kunzisoft.keepass.database.search.SearchParameters
|
import com.kunzisoft.keepass.database.search.SearchParameters
|
||||||
import com.kunzisoft.keepass.education.GroupActivityEducation
|
import com.kunzisoft.keepass.education.GroupActivityEducation
|
||||||
|
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
|
||||||
import com.kunzisoft.keepass.model.GroupInfo
|
import com.kunzisoft.keepass.model.GroupInfo
|
||||||
import com.kunzisoft.keepass.model.MainCredential
|
import com.kunzisoft.keepass.model.MainCredential
|
||||||
import com.kunzisoft.keepass.model.RegisterInfo
|
import com.kunzisoft.keepass.model.RegisterInfo
|
||||||
@@ -890,10 +891,9 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
private fun entrySelectedForKeyboardSelection(database: Database, entry: Entry) {
|
private fun entrySelectedForKeyboardSelection(database: Database, entry: Entry) {
|
||||||
reloadCurrentGroup()
|
reloadCurrentGroup()
|
||||||
// Populate Magikeyboard with entry
|
// Populate Magikeyboard with entry
|
||||||
populateKeyboardAndMoveAppToBackground(
|
MagikeyboardService.populateKeyboardAndMoveAppToBackground(
|
||||||
this,
|
this,
|
||||||
entry.getEntryInfo(database),
|
entry.getEntryInfo(database)
|
||||||
intent
|
|
||||||
)
|
)
|
||||||
onValidateSpecialMode()
|
onValidateSpecialMode()
|
||||||
}
|
}
|
||||||
@@ -1660,20 +1660,24 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
database,
|
database,
|
||||||
searchInfo,
|
searchInfo,
|
||||||
{ _, items ->
|
{ _, items ->
|
||||||
// Response is build
|
MagikeyboardService.performSelection(
|
||||||
if (items.size == 1) {
|
items,
|
||||||
populateKeyboardAndMoveAppToBackground(activity,
|
{ entryInfo ->
|
||||||
items[0],
|
// Keyboard populated
|
||||||
activity.intent)
|
MagikeyboardService.populateKeyboardAndMoveAppToBackground(
|
||||||
onValidateSpecialMode()
|
activity,
|
||||||
} else {
|
entryInfo
|
||||||
// Select the one we want
|
)
|
||||||
launchForKeyboardSelectionResult(activity,
|
onValidateSpecialMode()
|
||||||
database,
|
},
|
||||||
searchInfo,
|
{ autoSearch ->
|
||||||
true)
|
launchForKeyboardSelectionResult(activity,
|
||||||
onLaunchActivitySpecialMode()
|
database,
|
||||||
}
|
searchInfo,
|
||||||
|
autoSearch)
|
||||||
|
onLaunchActivitySpecialMode()
|
||||||
|
}
|
||||||
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Here no search info found, disable auto search
|
// Here no search info found, disable auto search
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ object EntrySelectionHelper {
|
|||||||
?: SpecialMode.DEFAULT
|
?: SpecialMode.DEFAULT
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addTypeModeInIntent(intent: Intent, typeMode: TypeMode) {
|
private fun addTypeModeInIntent(intent: Intent, typeMode: TypeMode) {
|
||||||
intent.putExtra(KEY_TYPE_MODE, typeMode as Serializable)
|
intent.putExtra(KEY_TYPE_MODE, typeMode as Serializable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
package com.kunzisoft.keepass.magikeyboard
|
package com.kunzisoft.keepass.magikeyboard
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.inputmethodservice.InputMethodService
|
import android.inputmethodservice.InputMethodService
|
||||||
@@ -38,6 +39,7 @@ import androidx.core.graphics.BlendModeColorFilterCompat
|
|||||||
import androidx.core.graphics.BlendModeCompat
|
import androidx.core.graphics.BlendModeCompat
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.activities.EntrySelectionLauncherActivity
|
import com.kunzisoft.keepass.activities.EntrySelectionLauncherActivity
|
||||||
|
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
|
||||||
import com.kunzisoft.keepass.adapters.FieldsAdapter
|
import com.kunzisoft.keepass.adapters.FieldsAdapter
|
||||||
import com.kunzisoft.keepass.database.action.DatabaseTaskProvider
|
import com.kunzisoft.keepass.database.action.DatabaseTaskProvider
|
||||||
import com.kunzisoft.keepass.database.element.Database
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
@@ -351,38 +353,35 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL
|
|||||||
mDatabase,
|
mDatabase,
|
||||||
searchInfo,
|
searchInfo,
|
||||||
{ _, items ->
|
{ _, items ->
|
||||||
if (items.size == 1) {
|
performSelection(
|
||||||
if (entryUUID == null) {
|
items,
|
||||||
|
{
|
||||||
// Automatically populate keyboard
|
// Automatically populate keyboard
|
||||||
removeEntryInfo()
|
|
||||||
addEntryAndLaunchNotificationIfAllowed(
|
addEntryAndLaunchNotificationIfAllowed(
|
||||||
this,
|
this,
|
||||||
items[0],
|
items[0],
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
assignKeyboardView()
|
assignKeyboardView()
|
||||||
} else {
|
},
|
||||||
// Choose another one
|
{
|
||||||
launchEntrySelection(null)
|
launchEntrySelection(searchInfo)
|
||||||
}
|
}
|
||||||
} else {
|
)
|
||||||
// Select if multiple
|
|
||||||
launchEntrySelection(searchInfo)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{ _ ->
|
{
|
||||||
// Select if not found
|
// Select if not found
|
||||||
launchEntrySelection(searchInfo)
|
launchEntrySelection(searchInfo)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Select if database not opened
|
// Select if database not opened
|
||||||
|
removeEntryInfo()
|
||||||
launchEntrySelection(searchInfo)
|
launchEntrySelection(searchInfo)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun launchEntrySelection(searchInfo: SearchInfo?) {
|
private fun launchEntrySelection(searchInfo: SearchInfo?) {
|
||||||
removeEntryInfo()
|
|
||||||
EntrySelectionLauncherActivity.launch(this, searchInfo)
|
EntrySelectionLauncherActivity.launch(this, searchInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,5 +475,35 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL
|
|||||||
it.packageName == context.packageName
|
it.packageName == context.packageName
|
||||||
} ?: false
|
} ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun performSelection(items: List<EntryInfo>,
|
||||||
|
actionPopulateKeyboard: (entryInfo: EntryInfo) -> Unit,
|
||||||
|
actionEntrySelection: (autoSearch: Boolean) -> Unit) {
|
||||||
|
if (items.size == 1) {
|
||||||
|
val itemFound = items[0]
|
||||||
|
if (entryUUID != itemFound.id) {
|
||||||
|
actionPopulateKeyboard.invoke(itemFound)
|
||||||
|
} else {
|
||||||
|
// Force selection if magikeyboard already populated
|
||||||
|
actionEntrySelection.invoke(false)
|
||||||
|
}
|
||||||
|
} else if (items.size > 1) {
|
||||||
|
// Select the one we want in the selection
|
||||||
|
actionEntrySelection.invoke(true)
|
||||||
|
} else {
|
||||||
|
// Select an arbitrary one
|
||||||
|
actionEntrySelection.invoke(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun populateKeyboardAndMoveAppToBackground(activity: Activity,
|
||||||
|
entry: EntryInfo,
|
||||||
|
toast: Boolean = true) {
|
||||||
|
// Populate Magikeyboard with entry
|
||||||
|
addEntryAndLaunchNotificationIfAllowed(activity, entry, toast)
|
||||||
|
// Consume the selection mode
|
||||||
|
EntrySelectionHelper.removeModesFromIntent(activity.intent)
|
||||||
|
activity.moveTaskToBack(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user