Skip to content

Commit 1c0f1a0

Browse files
committed
Merge branch 'release/3.4.4'
2 parents f907aa5 + 831b649 commit 1c0f1a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+304
-143
lines changed

CHANGELOG

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
KeePassDX(3.4.4)
2+
* Fix crash in New Android 13 #1321
3+
* Better backstack management for selection mode
4+
* Prevent Tapjacking #1318
5+
* Small changes #1298
6+
17
KeePassDX(3.4.3)
28
* Remove "Select share info" setting for Magikeyboard #1304
39
* Fix quick search and better loadGroup implementation #1302

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "com.kunzisoft.keepass"
1313
minSdkVersion 15
1414
targetSdkVersion 31
15-
versionCode = 112
16-
versionName = "3.4.3"
15+
versionCode = 113
16+
versionName = "3.4.4"
1717
multiDexEnabled true
1818

1919
testApplicationId = "com.kunzisoft.keepass.tests"
@@ -105,7 +105,7 @@ dependencies {
105105
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
106106
implementation 'androidx.documentfile:documentfile:1.0.1'
107107
implementation 'androidx.biometric:biometric:1.1.0'
108-
implementation 'androidx.media:media:1.5.0'
108+
implementation 'androidx.media:media:1.6.0'
109109
// Lifecycle - LiveData - ViewModel - Coroutines
110110
implementation "androidx.core:core-ktx:$android_core_version"
111111
implementation 'androidx.fragment:fragment-ktx:1.4.1'

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@
150150
<activity
151151
android:name="com.kunzisoft.keepass.activities.AutofillLauncherActivity"
152152
android:theme="@style/Theme.Transparent"
153-
android:configChanges="keyboardHidden" />
153+
android:configChanges="keyboardHidden"
154+
android:excludeFromRecents="true"/>
154155
<activity
155156
android:name="com.kunzisoft.keepass.settings.SettingsAdvancedUnlockActivity" />
156157
<activity

app/src/main/java/com/kunzisoft/keepass/activities/AboutActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.core.text.HtmlCompat
3030
import com.kunzisoft.keepass.BuildConfig
3131
import com.kunzisoft.keepass.R
3232
import com.kunzisoft.keepass.activities.stylish.StylishActivity
33+
import com.kunzisoft.keepass.utils.UriUtil
3334
import org.joda.time.DateTime
3435

3536
class AboutActivity : StylishActivity() {
@@ -45,6 +46,12 @@ class AboutActivity : StylishActivity() {
4546
supportActionBar?.setDisplayHomeAsUpEnabled(true)
4647
supportActionBar?.setDisplayShowHomeEnabled(true)
4748

49+
val appName = if (UriUtil.contributingUser(this))
50+
getString(R.string.app_name) + " " + getString(R.string.app_name_part3)
51+
else
52+
getString(R.string.app_name)
53+
findViewById<TextView>(R.id.activity_about_app_name).text = appName
54+
4855
var version: String
4956
var build: String
5057
try {

app/src/main/java/com/kunzisoft/keepass/activities/EntrySelectionLauncherActivity.kt

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import com.kunzisoft.keepass.database.search.SearchHelper
3131
import com.kunzisoft.keepass.magikeyboard.MagikeyboardService
3232
import com.kunzisoft.keepass.model.SearchInfo
3333
import com.kunzisoft.keepass.otp.OtpEntryFields
34-
import com.kunzisoft.keepass.settings.PreferencesUtil
3534

3635
/**
3736
* Activity to search or select entry in database,
@@ -44,7 +43,7 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
4443
}
4544

4645
override fun finishActivityIfReloadRequested(): Boolean {
47-
return true
46+
return false
4847
}
4948

5049
override fun onDatabaseRetrieved(database: Database?) {
@@ -74,27 +73,40 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
7473
sharedWebDomain = Uri.parse(extra).host
7574
}
7675
}
76+
launchSelection(database, sharedWebDomain, otpString)
7777
}
7878
Intent.ACTION_VIEW -> {
7979
// Retrieve OTP
8080
intent.dataString?.let { extra ->
8181
if (OtpEntryFields.isOTPUri(extra))
8282
otpString = extra
8383
}
84+
launchSelection(database, sharedWebDomain, otpString)
85+
}
86+
else -> {
87+
if (database != null) {
88+
GroupActivity.launch(this, database)
89+
} else {
90+
FileDatabaseSelectActivity.launch(this)
91+
}
8492
}
85-
else -> {}
8693
}
94+
}
95+
finish()
96+
}
8797

88-
// Build domain search param
89-
val searchInfo = SearchInfo().apply {
90-
this.webDomain = sharedWebDomain
91-
this.otpString = otpString
92-
}
98+
private fun launchSelection(database: Database?,
99+
sharedWebDomain: String?,
100+
otpString: String?) {
101+
// Build domain search param
102+
val searchInfo = SearchInfo().apply {
103+
this.webDomain = sharedWebDomain
104+
this.otpString = otpString
105+
}
93106

94-
SearchInfo.getConcreteWebDomain(this, searchInfo.webDomain) { concreteWebDomain ->
95-
searchInfo.webDomain = concreteWebDomain
96-
launch(database, searchInfo)
97-
}
107+
SearchInfo.getConcreteWebDomain(this, searchInfo.webDomain) { concreteWebDomain ->
108+
searchInfo.webDomain = concreteWebDomain
109+
launch(database, searchInfo)
98110
}
99111
}
100112

@@ -188,7 +200,6 @@ class EntrySelectionLauncherActivity : DatabaseModeActivity() {
188200
}
189201
}
190202
)
191-
finish()
192203
}
193204

194205
companion object {

app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -320,16 +320,6 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
320320
}
321321
}
322322

323-
override fun onValidateSpecialMode() {
324-
super.onValidateSpecialMode()
325-
finish()
326-
}
327-
328-
override fun onCancelSpecialMode() {
329-
super.onCancelSpecialMode()
330-
finish()
331-
}
332-
333323
private fun launchPasswordActivityWithPath(databaseUri: Uri) {
334324
launchPasswordActivity(databaseUri, null)
335325
// Delete flickering for kitkat <=

app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -369,16 +369,6 @@ class MainCredentialActivity : DatabaseModeActivity(), AdvancedUnlockFragment.Bu
369369
}
370370
}
371371

372-
override fun onValidateSpecialMode() {
373-
super.onValidateSpecialMode()
374-
finish()
375-
}
376-
377-
override fun onCancelSpecialMode() {
378-
super.onCancelSpecialMode()
379-
finish()
380-
}
381-
382372
override fun retrieveCredentialForEncryption(): ByteArray {
383373
return mainCredentialView?.retrieveCredentialForStorage(credentialStorageListener)
384374
?: byteArrayOf()

app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseModeActivity.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.kunzisoft.keepass.activities.legacy
22

3-
import android.os.Build
43
import android.os.Bundle
5-
import android.os.Handler
6-
import android.os.Looper
74
import android.view.View
85
import android.widget.Toast
96
import com.kunzisoft.keepass.R
@@ -96,9 +93,8 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
9693

9794
private fun backToTheMainAppAndFinish() {
9895
// To move the app in background and return to the main app
99-
// Not visible as opened with FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
10096
moveTaskToBack(true)
101-
// Not finish() to prevent service kill
97+
// Not using FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or finish() because kills the service
10298
}
10399

104100
override fun onCreate(savedInstanceState: Bundle?) {

app/src/main/java/com/kunzisoft/keepass/magikeyboard/MagikeyboardService.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import android.widget.TextView
3737
import androidx.core.content.ContextCompat
3838
import androidx.core.graphics.BlendModeColorFilterCompat
3939
import androidx.core.graphics.BlendModeCompat
40+
import androidx.recyclerview.widget.LinearLayoutManager
41+
import androidx.recyclerview.widget.RecyclerView
4042
import com.kunzisoft.keepass.R
4143
import com.kunzisoft.keepass.activities.EntrySelectionLauncherActivity
4244
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
@@ -93,6 +95,14 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL
9395
switchToPreviousKeyboard()
9496
}
9597

98+
fieldsAdapter = FieldsAdapter(this)
99+
fieldsAdapter?.onItemClickListener = object : FieldsAdapter.OnItemClickListener {
100+
override fun onItemClick(item: Field) {
101+
currentInputConnection.commitText(getEntryInfo()?.getGeneratedFieldValue(item.name) , 1)
102+
actionTabAutomatically()
103+
}
104+
}
105+
96106
registerLockReceiver(lockReceiver, true)
97107
}
98108

@@ -121,15 +131,8 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL
121131
contentView = popupFieldsView
122132
}
123133

124-
val recyclerView = popupFieldsView.findViewById<androidx.recyclerview.widget.RecyclerView>(R.id.keyboard_popup_fields_list)
125-
fieldsAdapter = FieldsAdapter(this)
126-
fieldsAdapter?.onItemClickListener = object : FieldsAdapter.OnItemClickListener {
127-
override fun onItemClick(item: Field) {
128-
currentInputConnection.commitText(getEntryInfo()?.getGeneratedFieldValue(item.name) , 1)
129-
actionTabAutomatically()
130-
}
131-
}
132-
recyclerView.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this, androidx.recyclerview.widget.LinearLayoutManager.HORIZONTAL, true)
134+
val recyclerView = popupFieldsView.findViewById<RecyclerView>(R.id.keyboard_popup_fields_list)
135+
recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)
133136
recyclerView.adapter = fieldsAdapter
134137

135138
val closeView = popupFieldsView.findViewById<View>(R.id.keyboard_popup_close)
@@ -141,7 +144,7 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL
141144
return rootKeyboardView
142145
}
143146

144-
return super.onCreateInputView()
147+
return rootKeyboardView
145148
}
146149

147150
private fun getEntryInfo(): EntryInfo? {

app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,17 +269,18 @@ object UriUtil {
269269

270270
fun contributingUser(context: Context): Boolean {
271271
return (Education.isEducationScreenReclickedPerformed(context)
272-
|| isExternalAppInstalled(context, "com.kunzisoft.keepass.pro")
272+
|| isExternalAppInstalled(context, "com.kunzisoft.keepass.pro", false)
273273
)
274274
}
275275

276-
private fun isExternalAppInstalled(context: Context, packageName: String): Boolean {
276+
private fun isExternalAppInstalled(context: Context, packageName: String, showError: Boolean = true): Boolean {
277277
try {
278278
context.applicationContext.packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
279279
Education.setEducationScreenReclickedPerformed(context)
280280
return true
281281
} catch (e: Exception) {
282-
Log.e(TAG, "App not accessible", e)
282+
if (showError)
283+
Log.e(TAG, "App not accessible", e)
283284
}
284285
return false
285286
}

0 commit comments

Comments
 (0)