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

View File

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

View File

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

View File

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

View File

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