Fix special mode in app background

This commit is contained in:
J-Jamet
2020-10-19 16:01:11 +02:00
parent d0ca714482
commit 631ebc657b
5 changed files with 80 additions and 60 deletions

View File

@@ -249,36 +249,37 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
PasswordActivity.launch(this@FileDatabaseSelectActivity, PasswordActivity.launch(this@FileDatabaseSelectActivity,
databaseUri, keyFile, databaseUri, keyFile,
searchInfo) searchInfo)
// Remove the search info from intent
if (searchInfo != null) {
finish()
}
} catch (e: FileNotFoundException) { } catch (e: FileNotFoundException) {
fileNoFoundAction(e) fileNoFoundAction(e)
} }
// Remove the search info from intent
if (searchInfo != null) {
finish()
}
}, },
{ searchInfo -> // Keyboard Selection Action { searchInfo -> // Keyboard Selection Action
try { try {
PasswordActivity.launchForKeyboardResult(this@FileDatabaseSelectActivity, PasswordActivity.launchForKeyboardResult(this@FileDatabaseSelectActivity,
databaseUri, keyFile, databaseUri, keyFile,
searchInfo) searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) { } catch (e: FileNotFoundException) {
fileNoFoundAction(e) fileNoFoundAction(e)
} }
finish()
}, },
{ searchInfo, assistStructure -> // Autofill Selection Action { searchInfo, assistStructure -> // Autofill Selection Action
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && assistStructure != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try { try {
PasswordActivity.launchForAutofillResult(this@FileDatabaseSelectActivity, PasswordActivity.launchForAutofillResult(this@FileDatabaseSelectActivity,
databaseUri, keyFile, databaseUri, keyFile,
assistStructure, assistStructure,
searchInfo) searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) { } catch (e: FileNotFoundException) {
fileNoFoundAction(e) fileNoFoundAction(e)
} }
} else { } else {
finish() onCancelSpecialMode()
} }
}, },
{ searchInfo -> // Registration Action { searchInfo -> // Registration Action
@@ -286,10 +287,10 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
PasswordActivity.launchForRegistration(this@FileDatabaseSelectActivity, PasswordActivity.launchForRegistration(this@FileDatabaseSelectActivity,
databaseUri, keyFile, databaseUri, keyFile,
searchInfo) searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) { } catch (e: FileNotFoundException) {
fileNoFoundAction(e) fileNoFoundAction(e)
} }
finish()
}) })
} }
@@ -301,6 +302,9 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
false, false,
searchInfo, searchInfo,
readOnly) readOnly)
if (searchInfo != null) {
finish()
}
}, },
{ searchInfo -> { searchInfo ->
GroupActivity.launchForKeyboardSelectionResult(this@FileDatabaseSelectActivity, GroupActivity.launchForKeyboardSelectionResult(this@FileDatabaseSelectActivity,
@@ -308,27 +312,32 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
searchInfo, searchInfo,
readOnly) readOnly)
// Do not keep history // Do not keep history
finish() onLaunchActivitySpecialMode()
}, },
{ searchInfo, assistStructure -> { searchInfo, assistStructure ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && assistStructure != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
GroupActivity.launchForAutofillResult(this@FileDatabaseSelectActivity, GroupActivity.launchForAutofillResult(this@FileDatabaseSelectActivity,
assistStructure, assistStructure,
false, false,
searchInfo, searchInfo,
readOnly) readOnly)
onLaunchActivitySpecialMode()
} else { } else {
finish() onCancelSpecialMode()
} }
}, },
{ searchInfo -> { searchInfo ->
GroupActivity.launchForRegistration(this@FileDatabaseSelectActivity, GroupActivity.launchForRegistration(this@FileDatabaseSelectActivity,
searchInfo) searchInfo)
// Do not keep history onLaunchActivitySpecialMode()
finish()
}) })
} }
override fun onCancelSpecialMode() {
super.onCancelSpecialMode()
finish()
}
private fun launchPasswordActivityWithPath(databaseUri: Uri) { private fun launchPasswordActivityWithPath(databaseUri: Uri) {
launchPasswordActivity(databaseUri, null) launchPasswordActivity(databaseUri, null)
// Delete flickering for kitkat <= // Delete flickering for kitkat <=

View File

@@ -209,41 +209,33 @@ class GroupActivity : LockingActivity(),
GroupEditDialogFragment.TAG_CREATE_GROUP) GroupEditDialogFragment.TAG_CREATE_GROUP)
} }
addNodeButtonView?.setAddEntryClickListener { addNodeButtonView?.setAddEntryClickListener {
EntrySelectionHelper.doSpecialAction(intent, mCurrentGroup?.let { currentGroup ->
{ EntrySelectionHelper.doSpecialAction(intent,
mCurrentGroup?.let { currentGroup -> {
EntryEditActivity.launch(this@GroupActivity, currentGroup) EntryEditActivity.launch(this@GroupActivity, currentGroup)
} },
}, { searchInfo ->
{ searchInfo ->
mCurrentGroup?.let { currentGroup ->
EntryEditActivity.launchForKeyboardSelectionResult(this@GroupActivity, EntryEditActivity.launchForKeyboardSelectionResult(this@GroupActivity,
currentGroup, searchInfo) currentGroup, searchInfo)
} onLaunchActivitySpecialMode()
}, },
{ searchInfo, assistStructure -> { searchInfo, assistStructure ->
var finishActivity = true if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { EntryEditActivity.launchForAutofillResult(this@GroupActivity,
mCurrentGroup?.let { currentGroup -> assistStructure,
assistStructure?.let { autofillStructure -> currentGroup, searchInfo)
finishActivity = false onLaunchActivitySpecialMode()
EntryEditActivity.launchForAutofillResult(this@GroupActivity, } else {
autofillStructure, onCancelSpecialMode()
currentGroup, searchInfo)
}
} }
} },
if (finishActivity) { searchInfo ->
finish()
},
{ searchInfo ->
mCurrentGroup?.let { currentGroup ->
EntryEditActivity.launchForRegistration(this@GroupActivity, EntryEditActivity.launchForRegistration(this@GroupActivity,
currentGroup, searchInfo) currentGroup, searchInfo)
onLaunchActivitySpecialMode()
} }
finish() )
} }
)
} }
mDatabase?.let { database -> mDatabase?.let { database ->

View File

@@ -307,11 +307,13 @@ open class PasswordActivity : SpecialModeActivity() {
populateKeyboardAndMoveAppToBackground(this@PasswordActivity, populateKeyboardAndMoveAppToBackground(this@PasswordActivity,
items[0], items[0],
intent) intent)
onValidateSpecialMode()
} else { } else {
// Select the one we want // Select the one we want
GroupActivity.launchForKeyboardSelectionResult(this, GroupActivity.launchForKeyboardSelectionResult(this,
true, true,
searchInfo) searchInfo)
onLaunchActivitySpecialMode()
} }
}, },
{ {
@@ -320,14 +322,13 @@ open class PasswordActivity : SpecialModeActivity() {
false, false,
searchInfo, searchInfo,
readOnly) readOnly)
onLaunchActivitySpecialMode()
}, },
{ {
// Simply close if database not opened, normally not happened // Simply close if database not opened, normally not happened
onCancelSpecialMode() onCancelSpecialMode()
} }
) )
// Do not keep history
finish()
}, },
{ searchInfo, assistStructure -> { searchInfo, assistStructure ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -338,27 +339,23 @@ open class PasswordActivity : SpecialModeActivity() {
// Response is build // Response is build
AutofillHelper.buildResponse(this, items) AutofillHelper.buildResponse(this, items)
onValidateSpecialMode() onValidateSpecialMode()
finish()
}, },
{ {
if (assistStructure != null) { // Here no search info found, disable auto search
// Here no search info found, disable auto search GroupActivity.launchForAutofillResult(this@PasswordActivity,
GroupActivity.launchForAutofillResult(this@PasswordActivity, assistStructure,
assistStructure, false,
false, searchInfo,
searchInfo, readOnly)
readOnly) onLaunchActivitySpecialMode()
} else {
onCancelSpecialMode()
finish()
}
}, },
{ {
// Simply close if database not opened, normally not happened // Simply close if database not opened, normally not happened
onCancelSpecialMode() onCancelSpecialMode()
finish()
} }
) )
} else {
onCancelSpecialMode()
} }
}, },
{ registerInfo -> { registerInfo ->
@@ -369,22 +366,32 @@ open class PasswordActivity : SpecialModeActivity() {
// No auto search, it's a registration // No auto search, it's a registration
GroupActivity.launchForRegistration(this, GroupActivity.launchForRegistration(this,
registerInfo) registerInfo)
onLaunchActivitySpecialMode()
}, },
{ {
// Here no search info found, disable auto search // Here no search info found, disable auto search
GroupActivity.launchForRegistration(this@PasswordActivity, GroupActivity.launchForRegistration(this@PasswordActivity,
registerInfo) registerInfo)
onLaunchActivitySpecialMode()
}, },
{ {
// Simply close if database not opened, normally not happened // Simply close if database not opened, normally not happened
onCancelSpecialMode() onCancelSpecialMode()
} }
) )
// Do not keep history
finish()
}) })
} }
override fun onValidateSpecialMode() {
super.onValidateSpecialMode()
finish()
}
override fun onCancelSpecialMode() {
super.onCancelSpecialMode()
finish()
}
private val onEditorActionListener = object : TextView.OnEditorActionListener { private val onEditorActionListener = object : TextView.OnEditorActionListener {
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean { override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if (actionId == IME_ACTION_DONE) { if (actionId == IME_ACTION_DONE) {

View File

@@ -114,7 +114,7 @@ object EntrySelectionHelper {
defaultAction: (searchInfo: SearchInfo?) -> Unit, defaultAction: (searchInfo: SearchInfo?) -> Unit,
keyboardSelectionAction: (searchInfo: SearchInfo?) -> Unit, keyboardSelectionAction: (searchInfo: SearchInfo?) -> Unit,
autofillSelectionAction: (searchInfo: SearchInfo?, autofillSelectionAction: (searchInfo: SearchInfo?,
assistStructure: AssistStructure?) -> Unit, assistStructure: AssistStructure) -> Unit,
registrationAction: (registerInfo: RegisterInfo?) -> Unit) { registrationAction: (registerInfo: RegisterInfo?) -> Unit) {
when (retrieveSpecialModeFromIntent(intent)) { when (retrieveSpecialModeFromIntent(intent)) {
@@ -139,7 +139,11 @@ object EntrySelectionHelper {
when (typeMode) { when (typeMode) {
TypeMode.DEFAULT -> defaultAction.invoke(searchInfo) TypeMode.DEFAULT -> defaultAction.invoke(searchInfo)
TypeMode.MAGIKEYBOARD -> keyboardSelectionAction.invoke(searchInfo) TypeMode.MAGIKEYBOARD -> keyboardSelectionAction.invoke(searchInfo)
TypeMode.AUTOFILL -> autofillSelectionAction.invoke(searchInfo, null) else -> {
// In this case, error
removeModesFromIntent(intent)
removeInfoFromIntent(intent)
}
} }
} else { } else {
defaultAction.invoke(searchInfo) defaultAction.invoke(searchInfo)

View File

@@ -49,6 +49,14 @@ abstract class SpecialModeActivity : StylishActivity() {
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
} }
fun onLaunchActivitySpecialMode() {
if (!isIntentSender()) {
EntrySelectionHelper.removeModesFromIntent(intent)
EntrySelectionHelper.removeInfoFromIntent(intent)
finish()
}
}
open fun onValidateSpecialMode() { open fun onValidateSpecialMode() {
if (isIntentSender()) { if (isIntentSender()) {
super.finish() super.finish()