Visual point to see if a database is modified

This commit is contained in:
J-Jamet
2022-02-12 18:49:38 +01:00
parent de2160f992
commit ca51f591de
6 changed files with 140 additions and 21 deletions

View File

@@ -46,6 +46,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.GravityCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout
import androidx.recyclerview.widget.RecyclerView
import com.kunzisoft.keepass.R
@@ -102,6 +103,7 @@ class GroupActivity : DatabaseLockActivity(),
private var lockView: View? = null
private var toolbar: Toolbar? = null
private var databaseNameContainer: ViewGroup? = null
private var databaseModifiedView: ImageView? = null
private var databaseColorView: ImageView? = null
private var databaseNameView: TextView? = null
private var searchView: SearchView? = null
@@ -237,6 +239,7 @@ class GroupActivity : DatabaseLockActivity(),
addNodeButtonView = findViewById(R.id.add_node_button)
toolbar = findViewById(R.id.toolbar)
databaseNameContainer = findViewById(R.id.database_name_container)
databaseModifiedView = findViewById(R.id.database_modified)
databaseColorView = findViewById(R.id.database_color)
databaseNameView = findViewById(R.id.database_name)
searchFiltersView = findViewById(R.id.search_filters)
@@ -575,12 +578,28 @@ class GroupActivity : DatabaseLockActivity(),
mRootGroup = database?.rootGroup
loadGroup()
// Search suggestion
// Update view
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) }
databaseNavView?.setDatabaseName(databaseName)
databaseNameView?.text = databaseName
databaseNavView?.setDatabaseVersion(it.version)
val modified = it.dataModifiedSinceLastLoading
databaseNavView?.setDatabaseModifiedSinceLastLoading(modified)
databaseModifiedView?.isVisible = modified
val customColor = it.customColor
databaseNavView?.setDatabaseColor(customColor)
if (customColor != null) {
@@ -592,16 +611,7 @@ class GroupActivity : DatabaseLockActivity(),
} else {
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(
@@ -749,6 +759,7 @@ class GroupActivity : DatabaseLockActivity(),
} else {
// Add breadcrumb
setBreadcrumbNode(group)
refreshDatabaseViews()
invalidateOptionsMenu()
}
initAddButton(group)

View File

@@ -7,6 +7,7 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat
import androidx.core.view.isVisible
import com.google.android.material.navigation.NavigationView
import com.kunzisoft.keepass.R
@@ -17,6 +18,7 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
private var databaseNavContainerView: View? = null
private var databaseNavIconView: ImageView? = null
private var databaseNavModifiedView: ImageView? = null
private var databaseNavColorView: ImageView? = null
private var databaseNavNameView: TextView? = null
private var databaseNavVersionView: TextView? = null
@@ -24,6 +26,7 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
init {
inflateHeaderView(R.layout.nav_header_database)
databaseNavIconView = databaseNavContainerView?.findViewById(R.id.nav_database_icon)
databaseNavModifiedView = databaseNavContainerView?.findViewById(R.id.nav_database_modified)
databaseNavColorView = databaseNavContainerView?.findViewById(R.id.nav_database_color)
databaseNavNameView = databaseNavContainerView?.findViewById(R.id.nav_database_name)
databaseNavVersionView = databaseNavContainerView?.findViewById(R.id.nav_database_version)
@@ -43,6 +46,10 @@ class NavigationDatabaseView @JvmOverloads constructor(context: Context,
databaseNavVersionView?.text = version
}
fun setDatabaseModifiedSinceLastLoading(modified: Boolean) {
databaseNavModifiedView?.isVisible = modified
}
fun setDatabaseColor(color: Int?) {
if (color != null) {
databaseNavColorView?.drawable?.colorFilter = BlendModeColorFilterCompat

View 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>

View File

@@ -60,16 +60,31 @@
</FrameLayout>
</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
android:id="@+id/database_color"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginTop="22dp"
android:layout_marginStart="54dp"
android:layout_marginLeft="54dp"
android:layout_below="@+id/special_mode_view"
android:layout_gravity="center_vertical|start"
android:src="@drawable/background_rounded_square"
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
android:id="@+id/group_coordinator"

View File

@@ -43,15 +43,27 @@
app:srcCompat="@drawable/ic_database_white_48dp"
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
android:id="@+id/nav_database_color"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_gravity="center"
android:contentDescription="@string/content_description_database_color"
android:src="@drawable/background_icon"
app:layout_constraintBottom_toBottomOf="@+id/nav_database_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/nav_database_name" />
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/nav_database_name"

61
art/ic_modified.svg Normal file
View 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