Encapsulate activities launch methods

This commit is contained in:
J-Jamet
2020-10-19 16:51:23 +02:00
parent 631ebc657b
commit 758985675d
4 changed files with 188 additions and 179 deletions

View File

@@ -243,94 +243,22 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
}
private fun launchPasswordActivity(databaseUri: Uri, keyFile: Uri?) {
EntrySelectionHelper.doSpecialAction(intent,
{ searchInfo -> // Default Action
try {
PasswordActivity.launch(this@FileDatabaseSelectActivity,
databaseUri, keyFile,
searchInfo)
// Remove the search info from intent
if (searchInfo != null) {
finish()
}
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
PasswordActivity.launch(this,
databaseUri,
keyFile,
{ exception ->
fileNoFoundAction(exception)
},
{ searchInfo -> // Keyboard Selection Action
try {
PasswordActivity.launchForKeyboardResult(this@FileDatabaseSelectActivity,
databaseUri, keyFile,
searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
},
{ searchInfo, assistStructure -> // Autofill Selection Action
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 {
onCancelSpecialMode()
}
},
{ searchInfo -> // Registration Action
try {
PasswordActivity.launchForRegistration(this@FileDatabaseSelectActivity,
databaseUri, keyFile,
searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
})
{ onCancelSpecialMode() },
{ onLaunchActivitySpecialMode() })
}
private fun launchGroupActivity(database: Database) {
val readOnly = database.isReadOnly
EntrySelectionHelper.doSpecialAction(intent,
{ searchInfo ->
GroupActivity.launch(this@FileDatabaseSelectActivity,
false,
searchInfo,
readOnly)
if (searchInfo != null) {
finish()
}
},
{ searchInfo ->
GroupActivity.launchForKeyboardSelectionResult(this@FileDatabaseSelectActivity,
false,
searchInfo,
readOnly)
// Do not keep history
onLaunchActivitySpecialMode()
},
{ searchInfo, assistStructure ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
GroupActivity.launchForAutofillResult(this@FileDatabaseSelectActivity,
assistStructure,
false,
searchInfo,
readOnly)
onLaunchActivitySpecialMode()
} else {
onCancelSpecialMode()
}
},
{ searchInfo ->
GroupActivity.launchForRegistration(this@FileDatabaseSelectActivity,
searchInfo)
onLaunchActivitySpecialMode()
})
GroupActivity.launch(this,
database.isReadOnly,
{ onValidateSpecialMode() },
{ onCancelSpecialMode() },
{ onLaunchActivitySpecialMode() })
}
override fun onCancelSpecialMode() {

View File

@@ -60,6 +60,7 @@ import com.kunzisoft.keepass.database.element.icon.IconImage
import com.kunzisoft.keepass.database.element.node.Node
import com.kunzisoft.keepass.database.element.node.NodeId
import com.kunzisoft.keepass.database.element.node.Type
import com.kunzisoft.keepass.database.search.SearchHelper
import com.kunzisoft.keepass.education.GroupActivityEducation
import com.kunzisoft.keepass.icons.assignDatabaseIcon
import com.kunzisoft.keepass.model.RegisterInfo
@@ -1248,5 +1249,111 @@ class GroupActivity : LockingActivity(),
registerInfo)
}
}
/*
* -------------------------
* Global Launch
* -------------------------
*/
fun launch(activity: Activity,
readOnly: Boolean,
onValidateSpecialMode: () -> Unit,
onCancelSpecialMode: () -> Unit,
onLaunchActivitySpecialMode: () -> Unit) {
EntrySelectionHelper.doSpecialAction(activity.intent,
{ searchInfo ->
GroupActivity.launch(activity,
true,
searchInfo,
readOnly)
// Finish activity if no search info
if (searchInfo != null) {
activity.finish()
}
},
{ searchInfo ->
SearchHelper.checkAutoSearchInfo(activity,
Database.getInstance(),
searchInfo,
{ items ->
// Response is build
if (items.size == 1) {
populateKeyboardAndMoveAppToBackground(activity,
items[0],
activity.intent)
onValidateSpecialMode()
} else {
// Select the one we want
GroupActivity.launchForKeyboardSelectionResult(activity,
true,
searchInfo)
onLaunchActivitySpecialMode()
}
},
{
// Here no search info found, disable auto search
GroupActivity.launchForKeyboardSelectionResult(activity,
false,
searchInfo,
readOnly)
onLaunchActivitySpecialMode()
},
{
// Simply close if database not opened, normally not happened
onCancelSpecialMode()
}
)
},
{ searchInfo, assistStructure ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
SearchHelper.checkAutoSearchInfo(activity,
Database.getInstance(),
searchInfo,
{ items ->
// Response is build
AutofillHelper.buildResponse(activity, items)
onValidateSpecialMode()
},
{
// Here no search info found, disable auto search
GroupActivity.launchForAutofillResult(activity,
assistStructure,
false,
searchInfo,
readOnly)
onLaunchActivitySpecialMode()
},
{
// Simply close if database not opened, normally not happened
onCancelSpecialMode()
}
)
} else {
onCancelSpecialMode()
}
},
{ registerInfo ->
SearchHelper.checkAutoSearchInfo(activity,
Database.getInstance(),
registerInfo?.searchInfo,
{ _ ->
// No auto search, it's a registration
GroupActivity.launchForRegistration(activity,
registerInfo)
onLaunchActivitySpecialMode()
},
{
// Here no search info found, disable auto search
GroupActivity.launchForRegistration(activity,
registerInfo)
onLaunchActivitySpecialMode()
},
{
// Simply close if database not opened, normally not happened
onCancelSpecialMode()
}
)
})
}
}
}

View File

@@ -56,7 +56,6 @@ import com.kunzisoft.keepass.biometric.BiometricUnlockDatabaseHelper
import com.kunzisoft.keepass.database.action.ProgressDatabaseTaskProvider
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException
import com.kunzisoft.keepass.database.search.SearchHelper
import com.kunzisoft.keepass.education.PasswordActivityEducation
import com.kunzisoft.keepass.model.RegisterInfo
import com.kunzisoft.keepass.model.SearchInfo
@@ -286,100 +285,12 @@ open class PasswordActivity : SpecialModeActivity() {
}
private fun launchGroupActivity() {
EntrySelectionHelper.doSpecialAction(intent,
{ searchInfo ->
GroupActivity.launch(this@PasswordActivity,
true,
searchInfo,
readOnly)
// Finish activity if no search info
if (searchInfo != null) {
finish()
}
},
{ searchInfo ->
SearchHelper.checkAutoSearchInfo(this,
Database.getInstance(),
searchInfo,
{ items ->
// Response is build
if (items.size == 1) {
populateKeyboardAndMoveAppToBackground(this@PasswordActivity,
items[0],
intent)
onValidateSpecialMode()
} else {
// Select the one we want
GroupActivity.launchForKeyboardSelectionResult(this,
true,
searchInfo)
onLaunchActivitySpecialMode()
}
},
{
// Here no search info found, disable auto search
GroupActivity.launchForKeyboardSelectionResult(this@PasswordActivity,
false,
searchInfo,
readOnly)
onLaunchActivitySpecialMode()
},
{
// Simply close if database not opened, normally not happened
onCancelSpecialMode()
}
)
},
{ searchInfo, assistStructure ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
SearchHelper.checkAutoSearchInfo(this,
Database.getInstance(),
searchInfo,
{ items ->
// Response is build
AutofillHelper.buildResponse(this, items)
onValidateSpecialMode()
},
{
// Here no search info found, disable auto search
GroupActivity.launchForAutofillResult(this@PasswordActivity,
assistStructure,
false,
searchInfo,
readOnly)
onLaunchActivitySpecialMode()
},
{
// Simply close if database not opened, normally not happened
onCancelSpecialMode()
}
)
} else {
onCancelSpecialMode()
}
},
{ registerInfo ->
SearchHelper.checkAutoSearchInfo(this,
Database.getInstance(),
registerInfo?.searchInfo,
{ _ ->
// 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()
}
)
})
GroupActivity.launch(this,
readOnly,
{ onValidateSpecialMode() },
{ onCancelSpecialMode() },
{ onLaunchActivitySpecialMode() }
)
}
override fun onValidateSpecialMode() {
@@ -918,5 +829,67 @@ open class PasswordActivity : SpecialModeActivity() {
registerInfo)
}
}
/*
* -------------------------
* Global Launch
* -------------------------
*/
fun launch(activity: Activity,
databaseUri: Uri,
keyFile: Uri?,
fileNoFoundAction: (exception: FileNotFoundException) -> Unit,
onCancelSpecialMode: () -> Unit,
onLaunchActivitySpecialMode: () -> Unit) {
EntrySelectionHelper.doSpecialAction(activity.intent,
{ searchInfo -> // Default Action
try {
PasswordActivity.launch(activity,
databaseUri, keyFile,
searchInfo)
// Remove the search info from intent
if (searchInfo != null) {
activity.finish()
}
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
},
{ searchInfo -> // Keyboard Selection Action
try {
PasswordActivity.launchForKeyboardResult(activity,
databaseUri, keyFile,
searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
},
{ searchInfo, assistStructure -> // Autofill Selection Action
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
try {
PasswordActivity.launchForAutofillResult(activity,
databaseUri, keyFile,
assistStructure,
searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
} else {
onCancelSpecialMode()
}
},
{ searchInfo -> // Registration Action
try {
PasswordActivity.launchForRegistration(activity,
databaseUri, keyFile,
searchInfo)
onLaunchActivitySpecialMode()
} catch (e: FileNotFoundException) {
fileNoFoundAction(e)
}
})
}
}
}

View File

@@ -41,6 +41,7 @@ object EntrySelectionHelper {
addSpecialModeInIntent(intent, SpecialMode.SELECTION)
addTypeModeInIntent(intent, TypeMode.MAGIKEYBOARD)
addSearchInfoInIntent(intent, searchInfo)
intent.flags = intent.flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
context.startActivity(intent)
}