mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Visual point to see if a database is modified
This commit is contained in:
@@ -46,6 +46,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
@@ -102,6 +103,7 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
private var lockView: View? = null
|
private var lockView: View? = null
|
||||||
private var toolbar: Toolbar? = null
|
private var toolbar: Toolbar? = null
|
||||||
private var databaseNameContainer: ViewGroup? = null
|
private var databaseNameContainer: ViewGroup? = null
|
||||||
|
private var databaseModifiedView: ImageView? = null
|
||||||
private var databaseColorView: ImageView? = null
|
private var databaseColorView: ImageView? = null
|
||||||
private var databaseNameView: TextView? = null
|
private var databaseNameView: TextView? = null
|
||||||
private var searchView: SearchView? = null
|
private var searchView: SearchView? = null
|
||||||
@@ -237,6 +239,7 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
addNodeButtonView = findViewById(R.id.add_node_button)
|
addNodeButtonView = findViewById(R.id.add_node_button)
|
||||||
toolbar = findViewById(R.id.toolbar)
|
toolbar = findViewById(R.id.toolbar)
|
||||||
databaseNameContainer = findViewById(R.id.database_name_container)
|
databaseNameContainer = findViewById(R.id.database_name_container)
|
||||||
|
databaseModifiedView = findViewById(R.id.database_modified)
|
||||||
databaseColorView = findViewById(R.id.database_color)
|
databaseColorView = findViewById(R.id.database_color)
|
||||||
databaseNameView = findViewById(R.id.database_name)
|
databaseNameView = findViewById(R.id.database_name)
|
||||||
searchFiltersView = findViewById(R.id.search_filters)
|
searchFiltersView = findViewById(R.id.search_filters)
|
||||||
@@ -575,12 +578,28 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
mRootGroup = database?.rootGroup
|
mRootGroup = database?.rootGroup
|
||||||
loadGroup()
|
loadGroup()
|
||||||
|
|
||||||
// Search suggestion
|
// Update view
|
||||||
database?.let {
|
database?.let {
|
||||||
|
mBreadcrumbAdapter?.iconDrawableFactory = it.iconDrawableFactory
|
||||||
|
}
|
||||||
|
databaseNavView?.apply {
|
||||||
|
if (!mMergeDataAllowed) {
|
||||||
|
menu.findItem(R.id.menu_merge_from)?.isVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
refreshDatabaseViews()
|
||||||
|
invalidateOptionsMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshDatabaseViews() {
|
||||||
|
mDatabase?.let {
|
||||||
val databaseName = it.name.ifEmpty { getString(R.string.database) }
|
val databaseName = it.name.ifEmpty { getString(R.string.database) }
|
||||||
databaseNavView?.setDatabaseName(databaseName)
|
databaseNavView?.setDatabaseName(databaseName)
|
||||||
databaseNameView?.text = databaseName
|
databaseNameView?.text = databaseName
|
||||||
databaseNavView?.setDatabaseVersion(it.version)
|
databaseNavView?.setDatabaseVersion(it.version)
|
||||||
|
val modified = it.dataModifiedSinceLastLoading
|
||||||
|
databaseNavView?.setDatabaseModifiedSinceLastLoading(modified)
|
||||||
|
databaseModifiedView?.isVisible = modified
|
||||||
val customColor = it.customColor
|
val customColor = it.customColor
|
||||||
databaseNavView?.setDatabaseColor(customColor)
|
databaseNavView?.setDatabaseColor(customColor)
|
||||||
if (customColor != null) {
|
if (customColor != null) {
|
||||||
@@ -592,16 +611,7 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
} else {
|
} else {
|
||||||
databaseColorView?.visibility = View.GONE
|
databaseColorView?.visibility = View.GONE
|
||||||
}
|
}
|
||||||
mBreadcrumbAdapter?.iconDrawableFactory = it.iconDrawableFactory
|
|
||||||
}
|
}
|
||||||
|
|
||||||
databaseNavView?.apply {
|
|
||||||
if (!mMergeDataAllowed) {
|
|
||||||
menu.findItem(R.id.menu_merge_from)?.isVisible = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
invalidateOptionsMenu()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseActionFinished(
|
override fun onDatabaseActionFinished(
|
||||||
@@ -749,6 +759,7 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
} else {
|
} else {
|
||||||
// Add breadcrumb
|
// Add breadcrumb
|
||||||
setBreadcrumbNode(group)
|
setBreadcrumbNode(group)
|
||||||
|
refreshDatabaseViews()
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
initAddButton(group)
|
initAddButton(group)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import android.widget.ImageView
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.graphics.BlendModeColorFilterCompat
|
import androidx.core.graphics.BlendModeColorFilterCompat
|
||||||
import androidx.core.graphics.BlendModeCompat
|
import androidx.core.graphics.BlendModeCompat
|
||||||
|
import androidx.core.view.isVisible
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
|
|||||||
|
|
||||||
private var databaseNavContainerView: View? = null
|
private var databaseNavContainerView: View? = null
|
||||||
private var databaseNavIconView: ImageView? = null
|
private var databaseNavIconView: ImageView? = null
|
||||||
|
private var databaseNavModifiedView: ImageView? = null
|
||||||
private var databaseNavColorView: ImageView? = null
|
private var databaseNavColorView: ImageView? = null
|
||||||
private var databaseNavNameView: TextView? = null
|
private var databaseNavNameView: TextView? = null
|
||||||
private var databaseNavVersionView: TextView? = null
|
private var databaseNavVersionView: TextView? = null
|
||||||
@@ -24,6 +26,7 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
|
|||||||
init {
|
init {
|
||||||
inflateHeaderView(R.layout.nav_header_database)
|
inflateHeaderView(R.layout.nav_header_database)
|
||||||
databaseNavIconView = databaseNavContainerView?.findViewById(R.id.nav_database_icon)
|
databaseNavIconView = databaseNavContainerView?.findViewById(R.id.nav_database_icon)
|
||||||
|
databaseNavModifiedView = databaseNavContainerView?.findViewById(R.id.nav_database_modified)
|
||||||
databaseNavColorView = databaseNavContainerView?.findViewById(R.id.nav_database_color)
|
databaseNavColorView = databaseNavContainerView?.findViewById(R.id.nav_database_color)
|
||||||
databaseNavNameView = databaseNavContainerView?.findViewById(R.id.nav_database_name)
|
databaseNavNameView = databaseNavContainerView?.findViewById(R.id.nav_database_name)
|
||||||
databaseNavVersionView = databaseNavContainerView?.findViewById(R.id.nav_database_version)
|
databaseNavVersionView = databaseNavContainerView?.findViewById(R.id.nav_database_version)
|
||||||
@@ -43,6 +46,10 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
|
|||||||
databaseNavVersionView?.text = version
|
databaseNavVersionView?.text = version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setDatabaseModifiedSinceLastLoading(modified: Boolean) {
|
||||||
|
databaseNavModifiedView?.isVisible = modified
|
||||||
|
}
|
||||||
|
|
||||||
fun setDatabaseColor(color: Int?) {
|
fun setDatabaseColor(color: Int?) {
|
||||||
if (color != null) {
|
if (color != null) {
|
||||||
databaseNavColorView?.drawable?.colorFilter = BlendModeColorFilterCompat
|
databaseNavColorView?.drawable?.colorFilter = BlendModeColorFilterCompat
|
||||||
|
|||||||
13
app/src/main/res/drawable/ic_modified_white_12dp.xml
Normal file
13
app/src/main/res/drawable/ic_modified_white_12dp.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="12dp"
|
||||||
|
android:height="12dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="2.28571415"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M 12 8 C 14.2091389993 8 16 9.79086100068 16 12 C 16 14.2091389993 14.2091389993 16 12 16 C 9.79086100068 16 8 14.2091389993 8 12 C 8 9.79086100068 9.79086100068 8 12 8 Z" />
|
||||||
|
</vector>
|
||||||
@@ -60,16 +60,31 @@
|
|||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
</androidx.appcompat.widget.Toolbar>
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="48dp"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:layout_below="@+id/special_mode_view"
|
||||||
|
android:layout_marginStart="50dp"
|
||||||
|
android:layout_marginLeft="50dp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/database_color"
|
android:id="@+id/database_color"
|
||||||
android:layout_width="12dp"
|
android:layout_width="12dp"
|
||||||
android:layout_height="12dp"
|
android:layout_height="12dp"
|
||||||
android:layout_marginTop="22dp"
|
android:layout_gravity="center_vertical|start"
|
||||||
android:layout_marginStart="54dp"
|
|
||||||
android:layout_marginLeft="54dp"
|
|
||||||
android:layout_below="@+id/special_mode_view"
|
|
||||||
android:src="@drawable/background_rounded_square"
|
android:src="@drawable/background_rounded_square"
|
||||||
android:contentDescription="@string/content_description_database_color"/>
|
android:contentDescription="@string/content_description_database_color"/>
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/database_modified"
|
||||||
|
android:layout_width="12dp"
|
||||||
|
android:layout_height="12dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginLeft="12dp"
|
||||||
|
android:layout_gravity="center_vertical|start"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:src="@drawable/ic_modified_white_12dp"
|
||||||
|
android:tint="?attr/textColorInverse"
|
||||||
|
android:contentDescription="@string/save"/>
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
android:id="@+id/group_coordinator"
|
android:id="@+id/group_coordinator"
|
||||||
|
|||||||
@@ -43,15 +43,27 @@
|
|||||||
app:srcCompat="@drawable/ic_database_white_48dp"
|
app:srcCompat="@drawable/ic_database_white_48dp"
|
||||||
app:tint="?attr/textColorInverse"/>
|
app:tint="?attr/textColorInverse"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/nav_database_modified"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:contentDescription="@string/save"
|
||||||
|
android:src="@drawable/ic_modified_white_12dp"
|
||||||
|
android:tint="?attr/textColorInverse"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/nav_database_icon"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/nav_database_icon"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/nav_database_icon" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/nav_database_color"
|
android:id="@+id/nav_database_color"
|
||||||
android:layout_width="18dp"
|
android:layout_width="18dp"
|
||||||
android:layout_height="18dp"
|
android:layout_height="18dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:contentDescription="@string/content_description_database_color"
|
android:contentDescription="@string/content_description_database_color"
|
||||||
android:src="@drawable/background_icon"
|
android:src="@drawable/background_icon"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/nav_database_name"
|
app:layout_constraintBottom_toBottomOf="@+id/nav_database_name"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
app:layout_constraintTop_toTopOf="@+id/nav_database_name" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/nav_database_name"
|
android:id="@+id/nav_database_name"
|
||||||
|
|||||||
61
art/ic_modified.svg
Normal file
61
art/ic_modified.svg
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
version="1.1"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="ic_modified.svg"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||||
|
<metadata
|
||||||
|
id="metadata10">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#c8c8c8"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0.28235294"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1016"
|
||||||
|
id="namedview6"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="32.000001"
|
||||||
|
inkscape:cx="-2.6793549"
|
||||||
|
inkscape:cy="13.621945"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg4">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid818" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<circle
|
||||||
|
r="4"
|
||||||
|
cy="12"
|
||||||
|
cx="12"
|
||||||
|
id="circle816"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.28571415;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
Reference in New Issue
Block a user