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.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)
|
||||
|
||||
@@ -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
|
||||
|
||||
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>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
<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"
|
||||
<FrameLayout
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
android:layout_below="@+id/special_mode_view"
|
||||
android:src="@drawable/background_rounded_square"
|
||||
android:contentDescription="@string/content_description_database_color"/>
|
||||
android:layout_marginStart="50dp"
|
||||
android:layout_marginLeft="50dp">
|
||||
<ImageView
|
||||
android:id="@+id/database_color"
|
||||
android:layout_width="12dp"
|
||||
android:layout_height="12dp"
|
||||
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"
|
||||
|
||||
@@ -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
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