Compare commits

...

12 Commits
4.0.0 ... 4.0.2

Author SHA1 Message Date
J-Jamet
798c95d8a8 Merge branch 'release/4.0.2' 2023-09-11 21:55:48 +02:00
J-Jamet
ef77c2acfb fix: Add buggy method comment #1638 2023-09-11 21:38:12 +02:00
J-Jamet
11a98267a2 fix: Upgrade to 4.0.2 2023-09-11 21:17:18 +02:00
J-Jamet
b2aa1155d0 fix: Autofill authentication 2023-09-11 21:13:26 +02:00
J-Jamet
5d6aac2d1b Merge tag '4.0.1' into develop
4.0.1
2023-09-10 11:07:13 +02:00
J-Jamet
c6723ecd4e Merge branch 'release/4.0.1' 2023-09-10 11:07:06 +02:00
J-Jamet
838c8f48d3 fix: Translation for themes #1631 2023-09-10 10:53:43 +02:00
J-Jamet
65229fae1f fix: Lock button in Autofill settings and Magikeyboard settings #1630 2023-09-10 10:26:01 +02:00
J-Jamet
f25ea89160 fix: Add CHANGELOG link 2023-09-10 09:57:56 +02:00
J-Jamet
18401d5d1e fix: Upgrade to 4.0.1 2023-09-10 09:50:26 +02:00
J-Jamet
1f2cf08108 fix: back lock 2023-09-10 09:43:08 +02:00
J-Jamet
74e86badba Merge tag '4.0.0' into develop
4.0.0
2023-09-09 21:34:37 +02:00
16 changed files with 148 additions and 111 deletions

View File

@@ -1,3 +1,11 @@
KeePassDX(4.0.2)
* Fix Autofill with API 33
KeePassDX(4.0.1)
* Fix back lock #1635 #1629 #1634
* Fix lock button in settings #1630
* Improve theme translation #1631
KeePassDX(4.0.0)
* New UX/UI with Material 3 #1183 #1529 #1428 #1441 #1607
* Material You theme (follow system colors) #1469

View File

@@ -12,8 +12,8 @@ android {
applicationId "com.kunzisoft.keepass"
minSdkVersion 15
targetSdkVersion 33
versionCode = 123
versionName = "4.0.0"
versionCode = 125
versionName = "4.0.2"
multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests"

View File

@@ -23,7 +23,6 @@ import android.app.SearchManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.PorterDuff
import android.net.Uri
import android.os.Build
@@ -50,9 +49,7 @@ import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.view.GravityCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.isVisible

View File

@@ -3,6 +3,7 @@ package com.kunzisoft.keepass.activities.legacy
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
import com.kunzisoft.keepass.activities.helpers.SpecialMode
@@ -33,7 +34,9 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
* To call the regular onBackPressed() method in special mode
*/
protected fun onRegularBackPressed() {
onBackPressedDispatcher.onBackPressed()
// Do not call onBackPressedDispatcher.onBackPressed() to avoid loop
// Calling onBackPressed() is now deprecated, directly finish the activity
finish()
}
/**
@@ -100,6 +103,12 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
onDatabaseBackPressed()
}
})
mSpecialMode = EntrySelectionHelper.retrieveSpecialModeFromIntent(intent)
mTypeMode = EntrySelectionHelper.retrieveTypeModeFromIntent(intent)
}

View File

@@ -283,15 +283,23 @@ class KeeAutofillService : AutofillService() {
// Build response
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
responseBuilder.setAuthentication(
autofillIds,
intentSender,
Presentations.Builder().apply {
inlinePresentation?.let {
setInlinePresentation(it)
}
}.setDialogPresentation(remoteViewsUnlock).build()
)
try {
// Buggy method on some API 33 devices
responseBuilder.setAuthentication(
autofillIds,
intentSender,
Presentations.Builder().apply {
inlinePresentation?.let {
setInlinePresentation(it)
}
setDialogPresentation(remoteViewsUnlock)
}.build()
)
} catch (e: Exception) {
Log.e(TAG, "Unable to use the new setAuthentication method.", e)
@Suppress("DEPRECATION")
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
}
} else {
@Suppress("DEPRECATION")
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)

View File

@@ -19,35 +19,16 @@
*/
package com.kunzisoft.keepass.settings
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceFragmentCompat
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
class AutofillSettingsActivity : DatabaseModeActivity() {
class AutofillSettingsActivity : ExternalSettingsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(R.string.autofill_preference_title)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, AutofillSettingsFragment())
.commit()
}
override fun retrieveTitle(): Int {
return R.string.autofill_preference_title
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onDatabaseBackPressed()
}
return super.onOptionsItemSelected(item)
override fun retrievePreferenceFragment(): PreferenceFragmentCompat {
return AutofillSettingsFragment()
}
}

View File

@@ -0,0 +1,47 @@
package com.kunzisoft.keepass.settings
import android.os.Bundle
import android.view.MenuItem
import androidx.annotation.StringRes
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceFragmentCompat
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
abstract class ExternalSettingsActivity : DatabaseModeActivity() {
private var lockView: FloatingActionButton? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(retrieveTitle())
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
lockView = findViewById(R.id.lock_button)
lockView?.hide()
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, retrievePreferenceFragment())
.commit()
}
}
@StringRes
abstract fun retrieveTitle(): Int
abstract fun retrievePreferenceFragment(): PreferenceFragmentCompat
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onDatabaseBackPressed()
}
return super.onOptionsItemSelected(item)
}
}

View File

@@ -19,37 +19,17 @@
*/
package com.kunzisoft.keepass.settings
import android.os.Bundle
import androidx.appcompat.widget.Toolbar
import android.view.MenuItem
import androidx.preference.PreferenceFragmentCompat
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
class MagikeyboardSettingsActivity : DatabaseModeActivity() {
class MagikeyboardSettingsActivity : ExternalSettingsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(R.string.keyboard_setting_label)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, MagikeyboardSettingsFragment())
.commit()
}
override fun retrieveTitle(): Int {
return R.string.keyboard_setting_label
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onDatabaseBackPressed()
}
return super.onOptionsItemSelected(item)
override fun retrievePreferenceFragment(): PreferenceFragmentCompat {
return MagikeyboardSettingsFragment()
}
}

View File

@@ -427,17 +427,15 @@
<string name="hide_expired_entries_summary">Abgelaufene Einträge werden nicht angezeigt</string>
<string name="style_choose_title">App-Design</string>
<string name="style_choose_summary">In der App verwendetes Design</string>
<string-array name="list_style_names">
<item>Wald</item>
<item>Göttlich</item>
<item>Klassisch</item>
<item>Einfach</item>
<item>Mond</item>
<item>Sonne</item>
<item>Antwort</item>
<item>Kunzite</item>
<item>System verfolgen</item>
</string-array>
<string name="style_name_forest">Wald</string>
<string name="style_name_divine">Göttlich</string>
<string name="style_name_classic">Klassisch</string>
<string name="style_name_simple">Einfach</string>
<string name="style_name_moon">Mond</string>
<string name="style_name_sun">Sonne</string>
<string name="style_name_reply">Antwort</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">System verfolgen</string>
<string name="warning_database_read_only">Schreibrechte gewähren, um Datenbankänderungen zu speichern</string>
<string name="education_setup_OTP_summary">Einmal-Passwortverwaltung (HOTP/TOTP) einrichten, um Token für Zwei-Faktor-Authentifizierung (2FA) zu generieren.</string>
<string name="education_setup_OTP_title">OTP einrichten</string>

View File

@@ -262,17 +262,17 @@
</string-array>
<string name="style_choose_title">Thème de lapplication</string>
<string name="style_choose_summary">Thème utilisé dans lapplication</string>
<string-array name="list_style_names">
<item>Forêt</item>
<item>Divin</item>
<item>Classique</item>
<item>Simple</item>
<item>Lune</item>
<item>Soleil</item>
<item>Réponse</item>
<item>Kunzite</item>
<item>Suivre le système</item>
</string-array>
<string name="style_name_forest">Forêt</string>
<string name="style_name_divine">Divin</string>
<string name="style_name_classic">Classique</string>
<string name="style_name_simple">Simple</string>
<string name="style_name_moon">Lune</string>
<string name="style_name_sun">Soleil</string>
<string name="style_name_reply">Réponse</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">Suivre le système</string>
<string name="style_name_light">Lumière</string>
<string name="style_name_dark">Ombre</string>
<string name="icon_pack_choose_title">Collection dicônes</string>
<string name="icon_pack_choose_summary">Collection dicônes utilisées dans lapplication</string>
<string name="menu_copy">Copier</string>

View File

@@ -468,17 +468,7 @@
</string-array>
<string name="style_choose_title">アプリのテーマ</string>
<string name="style_choose_summary">アプリで使用するテーマ</string>
<string-array name="list_style_names">
<item>Forest</item>
<item>Divine</item>
<item>Classic</item>
<item>Simple</item>
<item>Moon</item>
<item>Sun</item>
<item>Reply</item>
<item>Kunzite</item>
<item>システムに従う</item>
</string-array>
<string name="style_name_follow_system">システムに従う</string>
<string name="icon_pack_choose_title">アイコンパック</string>
<string name="icon_pack_choose_summary">アプリで使用するアイコンパック</string>
<string name="hide_expired_entries_title">有効期限切れのエントリーを非表示にする</string>

View File

@@ -693,23 +693,34 @@
</string-array>
<string name="style_choose_title">App theme</string>
<string name="style_choose_summary">Theme used in the app</string>
<string name="style_name_forest">Forest</string>
<string name="style_name_divine">Divine</string>
<string name="style_name_classic">Classic</string>
<string name="style_name_simple">Simple</string>
<string name="style_name_moon">Moon</string>
<string name="style_name_sun">Sun</string>
<string name="style_name_reply">Reply</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">Follow the system</string>
<string-array name="list_style_names">
<item>Forest</item>
<item>Divine</item>
<item>Classic</item>
<item>Simple</item>
<item>Moon</item>
<item>Sun</item>
<item>Reply</item>
<item>Kunzite</item>
<item>Follow the system</item>
<item>@string/style_name_forest</item>
<item>@string/style_name_divine</item>
<item>@string/style_name_classic</item>
<item>@string/style_name_simple</item>
<item>@string/style_name_moon</item>
<item>@string/style_name_sun</item>
<item>@string/style_name_reply</item>
<item>@string/style_name_kunzite</item>
<item>@string/style_name_follow_system</item>
</string-array>
<string name="style_brightness_title">Theme brightness</string>
<string name="style_brightness_summary">Select light or dark themes</string>
<string name="style_name_light">Light</string>
<string name="style_name_dark">Dark</string>
<string-array name="list_style_brightness_names">
<item>Light</item>
<item>Dark</item>
<item>Follow the system</item>
<item>@string/style_name_light</item>
<item>@string/style_name_dark</item>
<item>@string/style_name_follow_system</item>
</string-array>
<string name="icon_section_standard">Standard</string>
<string name="icon_section_custom">Custom</string>

View File

@@ -0,0 +1,3 @@
* Fix back lock #1635 #1629 #1634
* Fix lock button in settings #1630
* Improve theme translation #1631

View File

@@ -0,0 +1 @@
* Fix Autofill with API 33

View File

@@ -0,0 +1,3 @@
* Correction du verrouillage de retour #1635 #1629 #1634
* Correction du bouton de verrouillage dans les paramètres #1630
* Amélioration des traductions de thèmes #1631

View File

@@ -0,0 +1 @@
* Correction de l'Autofill avec l'API 33