mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Allow to change root group
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user