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

View File

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

View File

@@ -364,7 +364,7 @@ class Database {
mDatabaseKDBX?.masterKey = masterKey mDatabaseKDBX?.masterKey = masterKey
} }
val rootGroup: Group? var rootGroup: Group?
get() { get() {
mDatabaseKDB?.rootGroup?.let { mDatabaseKDB?.rootGroup?.let {
return Group(it) return Group(it)
@@ -374,6 +374,25 @@ class Database {
} }
return null 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 * Do not modify groups here, used for read only

View File

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

View File

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

View File

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