Allow to change root group

This commit is contained in:
J-Jamet
2021-12-22 19:01:51 +01:00
parent 6f154194f1
commit b3c46348a1
6 changed files with 38 additions and 5 deletions

View File

@@ -165,9 +165,12 @@ class GroupActivity : DatabaseLockActivity(),
// Open group on breadcrumb click
onItemClickListener = { node, _ ->
finishNodeAction()
// If last item
// If last item & not a virtual root group
val currentGroup = mCurrentGroup
if (currentGroup != null && node == currentGroup) {
if (currentGroup != null && node == currentGroup
&& (currentGroup != mDatabase?.rootGroup
|| mDatabase?.rootGroupIsVirtual == false)
) {
launchDialogToShowGroupInfo(currentGroup)
} else {
mDatabase?.let { database ->
@@ -178,7 +181,10 @@ class GroupActivity : DatabaseLockActivity(),
onLongItemClickListener = { node, position ->
finishNodeAction()
val currentGroup = mCurrentGroup
if (currentGroup != null && node == currentGroup && currentGroup.containsParent()) {
if (currentGroup != null && node == currentGroup
&& (currentGroup != mDatabase?.rootGroup
|| mDatabase?.rootGroupIsVirtual == false)
) {
launchDialogForGroupUpdate(currentGroup)
} else {
onItemClickListener?.invoke(node, position)

View File

@@ -42,6 +42,9 @@ class UpdateGroupRunnable constructor(
// Update group with new values
mNewGroup.touch(modified = true, touchParents = true)
if (database.rootGroup == mOldGroup) {
database.rootGroup = mNewGroup
}
// Only change data in index
database.updateGroup(mNewGroup)
}
@@ -50,6 +53,9 @@ class UpdateGroupRunnable constructor(
override fun nodeFinish(): ActionNodesValues {
if (!result.isSuccess) {
// If we fail to save, back out changes to global structure
if (database.rootGroup == mNewGroup) {
database.rootGroup = mOldGroup
}
database.updateGroup(mOldGroup)
}

View File

@@ -364,7 +364,7 @@ class Database {
mDatabaseKDBX?.masterKey = masterKey
}
val rootGroup: Group?
var rootGroup: Group?
get() {
mDatabaseKDB?.rootGroup?.let {
return Group(it)
@@ -374,6 +374,25 @@ class Database {
}
return null
}
set(value) {
value?.groupKDB?.let { rootKDB ->
mDatabaseKDB?.rootGroup = rootKDB
}
value?.groupKDBX?.let { rootKDBX ->
mDatabaseKDBX?.rootGroup = rootKDBX
}
}
val rootGroupIsVirtual: Boolean
get() {
mDatabaseKDB?.let {
return true
}
mDatabaseKDBX?.let {
return false
}
return true
}
/**
* Do not modify groups here, used for read only

View File

@@ -46,7 +46,7 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
init {
// New manual root because KDB contains multiple root groups (here available with getRootGroups())
rootGroup = createGroup().apply {
icon.standard = getStandardIcon(IconImageStandard.FOLDER_ID)
icon.standard = getStandardIcon(IconImageStandard.DATABASE_ID)
}
kdfListV3.add(KdfFactory.aesKdf)
}

View File

@@ -89,6 +89,7 @@ abstract class DatabaseVersioned<
set(value) {
field = value
value?.let {
removeGroupIndex(it)
addGroupIndex(it)
}
}

View File

@@ -81,6 +81,7 @@ class IconImageStandard : IconImageDraw {
const val CREDIT_CARD_ID = 37
const val TRASH_ID = 43
const val FOLDER_ID = 48
const val DATABASE_ID = 50
const val LIST_ID = 57
const val BUILD_ID = 59
const val STAR_ID = 61