diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt
index 10edbbba9..990f2fcc5 100644
--- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt
+++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt
@@ -66,7 +66,6 @@ import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.tasks.AttachmentFileBinderManager
import com.kunzisoft.keepass.timeout.TimeoutHelper
-import com.kunzisoft.keepass.utils.MenuUtil
import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.utils.UuidUtil
import com.kunzisoft.keepass.view.changeControlColor
@@ -370,7 +369,6 @@ class EntryActivity : DatabaseLockActivity() {
super.onCreateOptionsMenu(menu)
if (mEntryLoaded) {
val inflater = menuInflater
- MenuUtil.contributionMenuInflater(inflater, menu)
inflater.inflate(R.menu.entry, menu)
inflater.inflate(R.menu.database, menu)
@@ -443,10 +441,6 @@ class EntryActivity : DatabaseLockActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
- R.id.menu_contribute -> {
- MenuUtil.onContributionItemSelected(this)
- return true
- }
R.id.menu_edit -> {
mDatabase?.let { database ->
mMainEntryId?.let { entryId ->
diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt
index edf58593b..129d89b29 100644
--- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt
+++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt
@@ -36,14 +36,21 @@ import android.widget.*
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
+import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.core.graphics.BlendModeColorFilterCompat
+import androidx.core.graphics.BlendModeCompat
+import androidx.core.view.GravityCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
+import androidx.drawerlayout.widget.DrawerLayout
+import androidx.navigation.ui.AppBarConfiguration
import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.navigation.NavigationView
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.*
import com.kunzisoft.keepass.activities.fragments.GroupFragment
@@ -68,14 +75,16 @@ import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.NEW_NODES_KEY
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.getListNodesFromBundle
import com.kunzisoft.keepass.settings.PreferencesUtil
+import com.kunzisoft.keepass.settings.SettingsActivity
import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.timeout.TimeoutHelper
-import com.kunzisoft.keepass.utils.MenuUtil
+import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.view.*
import com.kunzisoft.keepass.viewmodels.GroupEditViewModel
import com.kunzisoft.keepass.viewmodels.GroupViewModel
import org.joda.time.DateTime
+
class GroupActivity : DatabaseLockActivity(),
DatePickerDialog.OnDateSetListener,
TimePickerDialog.OnTimeSetListener,
@@ -86,6 +95,13 @@ class GroupActivity : DatabaseLockActivity(),
SortDialogFragment.SortSelectionListener {
// Views
+ private var drawerLayout: DrawerLayout? = null
+ private var databaseNavView: NavigationView? = null
+ private var databaseNavContainerView: View? = null
+ private var databaseNavIconView: ImageView? = null
+ private var databaseNavColorView: ImageView? = null
+ private var databaseNavNameView: TextView? = null
+ private var databaseNavVersionView: TextView? = null
private var rootContainerView: ViewGroup? = null
private var coordinatorLayout: CoordinatorLayout? = null
private var lockView: View? = null
@@ -102,6 +118,8 @@ class GroupActivity : DatabaseLockActivity(),
private var breadcrumbListView: RecyclerView? = null
private var loadingView: ProgressBar? = null
+ private lateinit var appBarConfiguration: AppBarConfiguration
+
private val mGroupViewModel: GroupViewModel by viewModels()
private val mGroupEditViewModel: GroupEditViewModel by viewModels()
@@ -215,6 +233,13 @@ class GroupActivity : DatabaseLockActivity(),
setContentView(layoutInflater.inflate(R.layout.activity_group, null))
// Initialize views
+ drawerLayout = findViewById(R.id.drawer_layout)
+ databaseNavView = findViewById(R.id.database_nav_view)
+ databaseNavContainerView = databaseNavView?.getHeaderView(0)
+ databaseNavIconView = databaseNavContainerView?.findViewById(R.id.nav_database_icon)
+ databaseNavColorView = databaseNavContainerView?.findViewById(R.id.nav_database_color)
+ databaseNavNameView = databaseNavContainerView?.findViewById(R.id.nav_database_name)
+ databaseNavVersionView = databaseNavContainerView?.findViewById(R.id.nav_database_version)
rootContainerView = findViewById(R.id.activity_group_container_view)
coordinatorLayout = findViewById(R.id.group_coordinator)
numberChildrenView = findViewById(R.id.group_numbers)
@@ -236,6 +261,35 @@ class GroupActivity : DatabaseLockActivity(),
toolbar?.title = ""
setSupportActionBar(toolbar)
+ supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ val toggle = ActionBarDrawerToggle(
+ this, drawerLayout, toolbar,
+ R.string.navigation_drawer_open, R.string.navigation_drawer_close
+ )
+ drawerLayout?.addDrawerListener(toggle)
+ toggle.syncState()
+
+ // Menu in drawer
+ databaseNavView?.apply {
+ inflateMenu(R.menu.settings)
+ inflateMenu(R.menu.database_extra)
+ inflateMenu(R.menu.about)
+ setNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.menu_app_settings -> {
+ // To avoid flickering when launch settings in a LockingActivity
+ SettingsActivity.launch(this@GroupActivity, true)
+ }
+ R.id.menu_contribute -> {
+ UriUtil.gotoUrl(this@GroupActivity, R.string.contribution_url)
+ }
+ R.id.menu_about -> {
+ startActivity(Intent(this@GroupActivity, AboutActivity::class.java))
+ }
+ }
+ false
+ }
+ }
searchFiltersView?.closeAdvancedFilters()
@@ -512,15 +566,22 @@ class GroupActivity : DatabaseLockActivity(),
// Search suggestion
database?.let {
- databaseNameView?.text = if (it.name.isNotEmpty()) it.name else getString(R.string.database)
+ val databaseName = it.name.ifEmpty { getString(R.string.database) }
+ databaseNavNameView?.text = databaseName
+ databaseNameView?.text = databaseName
+ databaseNavVersionView?.text = it.version
val customColor = it.customColor
if (customColor != null) {
+ databaseNavColorView?.drawable?.colorFilter = BlendModeColorFilterCompat
+ .createBlendModeColorFilterCompat(customColor, BlendModeCompat.SRC_IN)
+ databaseNavColorView?.visibility = View.VISIBLE
databaseColorView?.visibility = View.VISIBLE
databaseColorView?.setColorFilter(
customColor,
PorterDuff.Mode.SRC_IN
)
} else {
+ databaseNavColorView?.visibility = View.GONE
databaseColorView?.visibility = View.GONE
}
mBreadcrumbAdapter?.iconDrawableFactory = it.iconDrawableFactory
@@ -1060,9 +1121,7 @@ class GroupActivity : DatabaseLockActivity(),
if (!mMergeDataAllowed) {
menu.findItem(R.id.menu_merge_database)?.isVisible = false
}
- if (mSpecialMode == SpecialMode.DEFAULT) {
- MenuUtil.defaultMenuInflater(inflater, menu)
- } else {
+ if (mSpecialMode != SpecialMode.DEFAULT) {
menu.findItem(R.id.menu_merge_database)?.isVisible = false
menu.findItem(R.id.menu_reload_database)?.isVisible = false
}
@@ -1174,7 +1233,7 @@ class GroupActivity : DatabaseLockActivity(),
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
- // TODO change database
+ drawerLayout?.openDrawer(GravityCompat.START)
return true
}
R.id.menu_search -> {
@@ -1203,8 +1262,6 @@ class GroupActivity : DatabaseLockActivity(),
return true
}
else -> {
- // Check the time lock before launching settings
- MenuUtil.onDefaultMenuOptionsItemSelected(this, item, true)
return super.onOptionsItemSelected(item)
}
}
diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt
index 53ecdab5d..66d33a0bd 100644
--- a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt
+++ b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt
@@ -43,7 +43,6 @@ import com.kunzisoft.keepass.services.DatabaseTaskNotificationService
import com.kunzisoft.keepass.settings.preference.*
import com.kunzisoft.keepass.settings.preferencedialogfragment.*
import com.kunzisoft.keepass.tasks.ActionRunnable
-import com.kunzisoft.keepass.utils.MenuUtil
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetrieval {
@@ -673,19 +672,21 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
}
R.id.menu_merge_database -> {
mergeDatabase()
- return true
+ true
}
R.id.menu_reload_database -> {
reloadDatabase()
- return true
+ true
}
-
- else -> {
+ R.id.menu_app_settings -> {
// Check the time lock before launching settings
// TODO activity menu
(activity as SettingsActivity?)?.let {
- MenuUtil.onDefaultMenuOptionsItemSelected(it, item, true)
+ SettingsActivity.launch(it, true)
}
+ true
+ }
+ else -> {
super.onOptionsItemSelected(item)
}
}
diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/MenuUtil.kt b/app/src/main/java/com/kunzisoft/keepass/utils/MenuUtil.kt
index 73013862e..c7233968d 100644
--- a/app/src/main/java/com/kunzisoft/keepass/utils/MenuUtil.kt
+++ b/app/src/main/java/com/kunzisoft/keepass/utils/MenuUtil.kt
@@ -32,18 +32,11 @@ import com.kunzisoft.keepass.settings.SettingsActivity
object MenuUtil {
- fun contributionMenuInflater(inflater: MenuInflater, menu: Menu) {
- if (!(BuildConfig.FULL_VERSION && BuildConfig.CLOSED_STORE))
- inflater.inflate(R.menu.contribution, menu)
- }
-
fun defaultMenuInflater(inflater: MenuInflater, menu: Menu) {
- contributionMenuInflater(inflater, menu)
- inflater.inflate(R.menu.default_menu, menu)
- }
-
- fun onContributionItemSelected(context: Context) {
- UriUtil.gotoUrl(context, R.string.contribution_url)
+ inflater.inflate(R.menu.settings, menu)
+ inflater.inflate(R.menu.about, menu)
+ if (!(BuildConfig.FULL_VERSION && BuildConfig.CLOSED_STORE))
+ menu.findItem(R.id.menu_contribute)?.isVisible = false
}
/*
@@ -54,7 +47,7 @@ object MenuUtil {
timeoutEnable: Boolean = false) {
when (item.itemId) {
R.id.menu_contribute -> {
- onContributionItemSelected(activity)
+ UriUtil.gotoUrl(activity, R.string.contribution_url)
}
R.id.menu_app_settings -> {
// To avoid flickering when launch settings in a LockingActivity
diff --git a/app/src/main/res/drawable/ic_database_white_48dp.xml b/app/src/main/res/drawable/ic_database_white_48dp.xml
new file mode 100644
index 000000000..d866cf79d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_database_white_48dp.xml
@@ -0,0 +1,11 @@
+
+