Merge branch 'release/3.3.2'

This commit is contained in:
J-Jamet
2022-03-15 20:21:45 +01:00
113 changed files with 2328 additions and 13328 deletions

View File

@@ -1,3 +1,7 @@
KeePassDX(3.3.2)
* Merge KeePassDX & KeePassDX Pro #1257
* Create new Contributor Pro app
KeePassDX(3.3.1)
* Fix Japanese keyboard in search #1248
* Better OOM management #256

View File

@@ -12,8 +12,8 @@ android {
applicationId "com.kunzisoft.keepass"
minSdkVersion 15
targetSdkVersion 31
versionCode = 103
versionName = "3.3.1"
versionCode = 104
versionName = "3.3.2"
multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests"
@@ -43,30 +43,20 @@ android {
dimension "version"
applicationIdSuffix = ".libre"
buildConfigField "String", "BUILD_VERSION", "\"libre\""
buildConfigField "boolean", "FULL_VERSION", "true"
buildConfigField "boolean", "CLOSED_STORE", "false"
buildConfigField "String[]", "STYLES_DISABLED",
"{\"KeepassDXStyle_Red\"," +
"\"KeepassDXStyle_Red_Night\"," +
"\"KeepassDXStyle_Reply\"," +
"\"KeepassDXStyle_Reply_Night\"," +
"\"KeepassDXStyle_Purple\"," +
"\"KeepassDXStyle_Purple_Dark\"}"
buildConfigField "String[]", "ICON_PACKS_DISABLED", "{}"
}
pro {
dimension "version"
applicationIdSuffix = ".pro"
buildConfigField "String", "BUILD_VERSION", "\"pro\""
buildConfigField "boolean", "FULL_VERSION", "true"
buildConfigField "boolean", "CLOSED_STORE", "true"
buildConfigField "String[]", "STYLES_DISABLED", "{}"
buildConfigField "String[]", "ICON_PACKS_DISABLED", "{}"
manifestPlaceholders = [ googleAndroidBackupAPIKey:"AEdPqrEAAAAIZiXvrQCzSV9LNI6-p7cjTKENZLHIrz_zaqZuQQ" ]
}
free {
dimension "version"
applicationIdSuffix = ".free"
buildConfigField "String", "BUILD_VERSION", "\"free\""
buildConfigField "boolean", "FULL_VERSION", "false"
buildConfigField "boolean", "CLOSED_STORE", "true"
buildConfigField "String[]", "STYLES_DISABLED",
"{\"KeepassDXStyle_Simple\"," +
@@ -86,7 +76,6 @@ android {
sourceSets {
libre.res.srcDir 'src/libre/res'
pro.res.srcDir 'src/pro/res'
free.res.srcDir 'src/free/res'
}

View File

@@ -1,61 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="108"
android:viewportHeight="108"
android:width="108dp"
android:height="108dp">
android:height="108dp"
android:viewportWidth="120"
android:viewportHeight="120">
<group
android:translateY="-332">
<group
android:translateY="332">
<path
android:pathData="M65.728516 32.791016L58.052734 35.904297 56.173828 48.380859 35.306641 69.267578 35.238281 73.759766 69.478516 108 108 108 108 70.810547 73.09375 35.904297 65.728516 32.791016Z"
android:strokeLineJoin="round"
android:strokeLineCap="round"
android:strokeMiterLimit="4" >
<aapt:attr name="android:fillColor">
<gradient
android:endColor="#0000"
android:endX="80"
android:endY="80"
android:startColor="#4e000000"
android:startX="0"
android:startY="0"
android:type="linear"/>
</aapt:attr>
</path>
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M88.76953 339.91602L4.1718754 424.59766 4.0000004 436 15.400391 435.82813 27.240234 424 40 424l0 -12 12 0 0 -12.73438 34.01172 -33.97656A8 8 0 0 1 84 360a8 8 0 0 1 8 -8 8 8 0 0 1 5.296882 2.01367l2.787098 -2.7832 -11.31445 -11.31445z"
android:fillColor="#eaeaea"
android:strokeWidth="1"
android:strokeColor="#58000000" />
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M4.0000004 340L4.1718754 351.40137 88.59863 435.82812 100 436 99.828122 424.59863 15.401367 340.17188Z"
android:fillColor="#81c784" />
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M81.39454 332.00195a27 27 0 0 0 -19.48634 7.90625 27 27 0 0 0 0 38.1836 27 27 0 0 0 38.1836 0 27 27 0 0 0 0 -38.1836 27 27 0 0 0 -18.69726 -7.90625zM92 352a8 8 0 0 1 8 8 8 8 0 0 1 -8 8 8 8 0 0 1 -8 -8 8 8 0 0 1 8 -8z"
android:fillColor="#eaeaea"
android:strokeWidth="1"
android:strokeColor="#58000000" />
</group>
android:translateX="6"
android:translateY="8">
<path
android:fillColor="#24000000"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#24000000"
android:strokeWidth="1.99999297"
android:pathData="M63.9961,34.0059 C61.5643,34.096,59.2564,35.102,57.5352,36.8223 C53.7682,40.589,53.7682,46.6982,57.5352,50.4649 C61.3017,54.232,67.4073,54.232,71.1739,50.4649 C74.9409,46.6982,74.9409,40.589,71.1739,36.8223 C69.2766,34.9258,66.6768,33.9054,63.9962,34.0059 Z M68.1992,40.6954 C69.8278,40.6958,71.148,42.016,71.1484,43.6446 C71.148,45.2732,69.8278,46.5934,68.1992,46.5938 C66.5706,46.5934,65.2504,45.2732,65.25,43.6446 C65.2504,42.016,66.5706,40.6958,68.1992,40.6954 Z M48.3438,55.4141 L36,67.7578 L36,72 L40.2422,72 L44.7578,67.4844 L44.7578,67.5 L49,67.5 L49,63.2578 L48.9844,63.2578 L49,63.2422 L49,63.2578 L53.2578,63.2578 L53.2578,60.3281 Z" />
</group>
<group
android:translateX="6"
android:translateY="6">
<path
android:fillColor="#ffa726"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"
android:pathData="M63.9961,34.0059 C61.5643,34.096,59.2564,35.102,57.5352,36.8223 C53.7682,40.589,53.7682,46.6982,57.5352,50.4649 C61.3017,54.232,67.4073,54.232,71.1739,50.4649 C74.9409,46.6982,74.9409,40.589,71.1739,36.8223 C69.2766,34.9258,66.6768,33.9054,63.9962,34.0059 Z M68.1992,40.6954 C69.8278,40.6958,71.148,42.016,71.1484,43.6446 C71.148,45.2732,69.8278,46.5934,68.1992,46.5938 C66.5706,46.5934,65.2504,45.2732,65.25,43.6446 C65.2504,42.016,66.5706,40.6958,68.1992,40.6954 Z M48.3438,55.4141 L36,67.7578 L36,72 L40.2422,72 L44.7578,67.4844 L44.7578,67.5 L49,67.5 L49,63.2578 L48.9844,63.2578 L49,63.2422 L49,63.2578 L53.2578,63.2578 L53.2578,60.3281 Z" />
</group>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,61 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="108"
android:viewportHeight="108"
android:width="108dp"
android:height="108dp">
android:height="108dp"
android:viewportWidth="120"
android:viewportHeight="120">
<group
android:translateY="-332">
<group
android:translateY="332">
<path
android:pathData="M65.728516 32.791016L58.052734 35.904297 56.173828 48.380859 35.306641 69.267578 35.238281 73.759766 69.478516 108 108 108 108 70.810547 73.09375 35.904297 65.728516 32.791016Z"
android:strokeLineJoin="round"
android:strokeLineCap="round"
android:strokeMiterLimit="4" >
<aapt:attr name="android:fillColor">
<gradient
android:endColor="#0000"
android:endX="80"
android:endY="80"
android:startColor="#4e000000"
android:startX="0"
android:startY="0"
android:type="linear"/>
</aapt:attr>
</path>
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M88.76953 339.91602L4.1718754 424.59766 4.0000004 436 15.400391 435.82813 27.240234 424 40 424l0 -12 12 0 0 -12.73438 34.01172 -33.97656A8 8 0 0 1 84 360a8 8 0 0 1 8 -8 8 8 0 0 1 5.296882 2.01367l2.787098 -2.7832 -11.31445 -11.31445z"
android:fillColor="#eaeaea"
android:strokeWidth="1"
android:strokeColor="#58000000"/>
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M4.0000004 340L4.1718754 351.40137 88.59863 435.82812 100 436 99.828122 424.59863 15.401367 340.17188Z"
android:fillColor="#64b5f6" />
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M81.39454 332.00195a27 27 0 0 0 -19.48634 7.90625 27 27 0 0 0 0 38.1836 27 27 0 0 0 38.1836 0 27 27 0 0 0 0 -38.1836 27 27 0 0 0 -18.69726 -7.90625zM92 352a8 8 0 0 1 8 8 8 8 0 0 1 -8 8 8 8 0 0 1 -8 -8 8 8 0 0 1 8 -8z"
android:fillColor="#eaeaea"
android:strokeWidth="1"
android:strokeColor="#58000000" />
</group>
android:translateX="6"
android:translateY="8">
<path
android:fillColor="#24000000"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#24000000"
android:strokeWidth="1.99999297"
android:pathData="M64.501,35.0576 C63.7095,35.0576,62.918,35.3613,62.3115,35.9678 L55.0127,43.2666 C53.7998,44.4795,53.7998,46.4306,55.0127,47.6436 L62.3115,54.9424 C63.5244,56.1553,65.4775,56.1553,66.6904,54.9424 L73.9873,47.6436 C75.2002,46.4307,75.2002,44.4796,73.9873,43.2666 L66.6904,35.9678 C66.0839,35.3613,65.2924,35.0576,64.5009,35.0576 Z M67.6729,42.6006 C69.3298,42.6006,70.6729,43.9437,70.6729,45.6006 C70.6729,47.2575,69.3298,48.6006,67.6729,48.6006 C66.016,48.6006,64.6729,47.2575,64.6729,45.6006 C64.6729,43.9437,66.016,42.6006,67.6729,42.6006 Z M48.3438,55.4141 L36,67.7578 L36,72 L40.2422,72 L44.7578,67.4844 L44.7578,67.5 L49,67.5 L49,63.2578 L48.9844,63.2578 L49,63.2422 L49,63.2578 L53.2578,63.2578 L53.2578,60.3281 Z" />
</group>
<group
android:translateX="6"
android:translateY="6">
<path
android:fillColor="#ffa726"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"
android:pathData="M64.501,35.0576 C63.7095,35.0576,62.918,35.3613,62.3115,35.9678 L55.0127,43.2666 C53.7998,44.4795,53.7998,46.4306,55.0127,47.6436 L62.3115,54.9424 C63.5244,56.1553,65.4775,56.1553,66.6904,54.9424 L73.9873,47.6436 C75.2002,46.4307,75.2002,44.4796,73.9873,43.2666 L66.6904,35.9678 C66.0839,35.3613,65.2924,35.0576,64.5009,35.0576 Z M67.6729,42.6006 C69.3298,42.6006,70.6729,43.9437,70.6729,45.6006 C70.6729,47.2575,69.3298,48.6006,67.6729,48.6006 C66.016,48.6006,64.6729,47.2575,64.6729,45.6006 C64.6729,43.9437,66.016,42.6006,67.6729,42.6006 Z M48.3438,55.4141 L36,67.7578 L36,72 L40.2422,72 L44.7578,67.4844 L44.7578,67.5 L49,67.5 L49,63.2578 L48.9844,63.2578 L49,63.2422 L49,63.2578 L53.2578,63.2578 L53.2578,60.3281 Z" />
</group>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -31,12 +31,14 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
@@ -73,6 +75,7 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
// Views
private lateinit var coordinatorLayout: CoordinatorLayout
private var specialTitle: View? = null
private var createDatabaseButtonView: View? = null
private var openDatabaseButtonView: View? = null
@@ -112,6 +115,9 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
toolbar.title = ""
setSupportActionBar(toolbar)
// Special title
specialTitle = findViewById(R.id.file_selection_title_part_3)
// Create database button
createDatabaseButtonView = findViewById(R.id.create_database_button)
createDatabaseButtonView?.setOnClickListener { createNewFile() }
@@ -335,6 +341,9 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
override fun onResume() {
super.onResume()
// Define special title
specialTitle?.isVisible = UriUtil.contributingUser(this)
// Show open and create button or special mode
when (mSpecialMode) {
SpecialMode.DEFAULT -> {
@@ -391,7 +400,7 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(),
super.onCreateOptionsMenu(menu)
if (mSpecialMode == SpecialMode.DEFAULT) {
MenuUtil.defaultMenuInflater(menuInflater, menu)
MenuUtil.defaultMenuInflater(this, menuInflater, menu)
}
Handler(Looper.getMainLooper()).post {

View File

@@ -539,7 +539,7 @@ class MainCredentialActivity : DatabaseModeActivity(), AdvancedUnlockFragment.Bu
}
if (mSpecialMode == SpecialMode.DEFAULT) {
MenuUtil.defaultMenuInflater(inflater, menu)
MenuUtil.defaultMenuInflater(this, inflater, menu)
}
super.onCreateOptionsMenu(menu)

View File

@@ -204,9 +204,10 @@ class SetOTPDialogFragment : DatabaseDialogFragment() {
android.R.layout.simple_spinner_item, mHotpTokenTypeArray!!).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
}
// Proprietary only on closed and full version
// Proprietary only on full version
mTotpTokenTypeArray = OtpTokenType.getTotpTokenTypeValues(
BuildConfig.CLOSED_STORE && BuildConfig.FULL_VERSION)
UriUtil.contributingUser(activity)
)
totpTokenTypeAdapter = ArrayAdapter(activity,
android.R.layout.simple_spinner_item, mTotpTokenTypeArray!!).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

View File

@@ -25,7 +25,6 @@ import android.text.SpannableStringBuilder
import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.fragment.app.DialogFragment
import com.kunzisoft.keepass.BuildConfig
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.utils.UriUtil
@@ -40,22 +39,12 @@ class UnderDevelopmentFeatureDialogFragment : DialogFragment() {
val builder = AlertDialog.Builder(activity)
val stringBuilder = SpannableStringBuilder()
if (BuildConfig.CLOSED_STORE) {
if (BuildConfig.FULL_VERSION) {
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_thanks), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_rose), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_work_hard), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_upgrade), HtmlCompat.FROM_HTML_MODE_LEGACY)).append(" ")
builder.setPositiveButton(android.R.string.ok) { _, _ -> dismiss() }
} else {
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_buy_pro), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_encourage), HtmlCompat.FROM_HTML_MODE_LEGACY))
builder.setPositiveButton(R.string.download) { _, _ ->
UriUtil.gotoUrl(requireContext(), R.string.app_pro_url)
}
builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() }
}
if (UriUtil.contributingUser(activity)) {
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_thanks), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_rose), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_work_hard), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_upgrade), HtmlCompat.FROM_HTML_MODE_LEGACY)).append(" ")
builder.setPositiveButton(android.R.string.ok) { _, _ -> dismiss() }
} else {
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_contibute), HtmlCompat.FROM_HTML_MODE_LEGACY)).append(" ")

View File

@@ -360,6 +360,13 @@ open class Education(val activity: Activity) {
context.resources.getBoolean(R.bool.education_setup_OTP_default))
}
fun setEducationScreenReclickedPerformed(context: Context) {
getEducationSharedPreferences(context)
.edit()
.putBoolean(context.getString(R.string.education_screen_reclicked_key), true)
.apply()
}
/**
* Defines if the reset education preference has been reclicked
*

View File

@@ -382,13 +382,17 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
findPreference<ListPreference>(getString(R.string.setting_style_key))?.setOnPreferenceChangeListener { _, newValue ->
var styleEnabled = true
val styleIdString = newValue as String
if (BuildConfig.CLOSED_STORE || !Education.isEducationScreenReclickedPerformed(activity))
if (!UriUtil.contributingUser(activity)) {
for (themeIdDisabled in BuildConfig.STYLES_DISABLED) {
if (themeIdDisabled == styleIdString) {
styleEnabled = false
ProFeatureDialogFragment().show(parentFragmentManager, "pro_feature_dialog")
ProFeatureDialogFragment().show(
parentFragmentManager,
"pro_feature_dialog"
)
}
}
}
if (styleEnabled) {
Stylish.assignStyle(activity, styleIdString)
// Relaunch the current activity to redraw theme
@@ -409,13 +413,17 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
findPreference<IconPackListPreference>(getString(R.string.setting_icon_pack_choose_key))?.setOnPreferenceChangeListener { _, newValue ->
var iconPackEnabled = true
val iconPackId = newValue as String
if (BuildConfig.CLOSED_STORE || !Education.isEducationScreenReclickedPerformed(activity))
if (!UriUtil.contributingUser(activity)) {
for (iconPackIdDisabled in BuildConfig.ICON_PACKS_DISABLED) {
if (iconPackIdDisabled == iconPackId) {
iconPackEnabled = false
ProFeatureDialogFragment().show(parentFragmentManager, "pro_feature_dialog")
ProFeatureDialogFragment().show(
parentFragmentManager,
"pro_feature_dialog"
)
}
}
}
if (iconPackEnabled) {
IconPackChooser.setSelectedIconPack(iconPackId)
}
@@ -509,9 +517,8 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
override fun onStop() {
super.onStop()
activity?.let { activity ->
if (mCount == 10) {
Education.getEducationSharedPreferences(activity).edit()
.putBoolean(getString(R.string.education_screen_reclicked_key), true).apply()
if (mCount == 10 && !BuildConfig.CLOSED_STORE) {
Education.setEducationScreenReclickedPerformed(activity)
}
}
}

View File

@@ -33,6 +33,7 @@ import com.kunzisoft.keepass.biometric.AdvancedUnlockManager
import com.kunzisoft.keepass.database.element.SortNodeEnum
import com.kunzisoft.keepass.education.Education
import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.UriUtil
import java.util.*
object PreferencesUtil {
@@ -151,7 +152,7 @@ object PreferencesUtil {
fun setStyle(context: Context, styleString: String) {
var tempThemeString = styleString
if (BuildConfig.CLOSED_STORE || !Education.isEducationScreenReclickedPerformed(context)) {
if (!UriUtil.contributingUser(context)) {
if (tempThemeString in BuildConfig.STYLES_DISABLED) {
tempThemeString = Stylish.defaultStyle(context)
}

View File

@@ -25,17 +25,16 @@ import android.content.Intent
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import com.kunzisoft.keepass.BuildConfig
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.AboutActivity
import com.kunzisoft.keepass.settings.SettingsActivity
object MenuUtil {
fun defaultMenuInflater(inflater: MenuInflater, menu: Menu) {
fun defaultMenuInflater(context: Context, inflater: MenuInflater, menu: Menu) {
inflater.inflate(R.menu.settings, menu)
inflater.inflate(R.menu.about, menu)
if (!(BuildConfig.FULL_VERSION && BuildConfig.CLOSED_STORE))
if (!UriUtil.contributingUser(context))
menu.findItem(R.id.menu_contribute)?.isVisible = false
}

View File

@@ -30,6 +30,7 @@ import android.widget.Toast
import androidx.documentfile.provider.DocumentFile
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
import com.kunzisoft.keepass.education.Education
import java.io.*
import java.util.*
@@ -255,9 +256,16 @@ object UriUtil {
gotoUrl(context, context.getString(resId))
}
fun isExternalAppInstalled(context: Context, packageName: String): Boolean {
fun contributingUser(context: Context): Boolean {
return (Education.isEducationScreenReclickedPerformed(context)
|| isExternalAppInstalled(context, "com.kunzisoft.keepass.pro")
)
}
private fun isExternalAppInstalled(context: Context, packageName: String): Boolean {
try {
context.applicationContext.packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
Education.setEducationScreenReclickedPerformed(context)
return true
} catch (e: Exception) {
Log.e(TAG, "App not accessible", e)

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

View File

@@ -103,6 +103,7 @@
android:layout_marginLeft="12dp"
android:textSize="32sp"
android:textStyle="bold"
android:visibility="gone"
android:shadowColor="#80000000"
android:shadowDx="2"
android:shadowDy="2"

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -28,7 +28,7 @@
<string name="app_name" translatable="false">KeePassDX</string>
<string name="app_name_part1" translatable="false">KeePass</string>
<string name="app_name_part2" translatable="false">DX</string>
<string name="app_name_part3" translatable="false" />
<string name="app_name_part3" translatable="false">Pro</string>
<string name="app_pro_url" translatable="false">https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro</string>
<string name="contribution_url" translatable="false">https://www.keepassdx.com/contribution</string>

View File

@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="108"
android:viewportHeight="108"
android:width="108dp"
android:height="108dp">
<group
android:translateY="-332">
<group
android:translateY="332">
<path
android:pathData="M65.728516 32.791016L58.052734 35.904297 56.173828 48.380859 35.306641 69.267578 35.238281 73.759766 69.478516 108 108 108 108 70.810547 73.09375 35.904297 65.728516 32.791016Z"
android:strokeLineJoin="round"
android:strokeLineCap="round"
android:strokeMiterLimit="4" >
<aapt:attr name="android:fillColor">
<gradient
android:endColor="#0000"
android:endX="80"
android:endY="80"
android:startColor="#4e000000"
android:startX="0"
android:startY="0"
android:type="linear"/>
</aapt:attr>
</path>
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M88.76953 339.91602L4.1718754 424.59766 4.0000004 436 15.400391 435.82813 27.240234 424 40 424l0 -12 12 0 0 -12.73438 34.01172 -33.97656A8 8 0 0 1 84 360a8 8 0 0 1 8 -8 8 8 0 0 1 5.296882 2.01367l2.787098 -2.7832 -11.31445 -11.31445z"
android:fillColor="#DBDBDB" />
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M4.0000004 340L4.1718754 351.40137 88.59863 435.82812 100 436 99.828122 424.59863 15.401367 340.17188Z"
android:fillColor="#ffa726" />
</group>
<group
android:scaleX="0.3939503"
android:scaleY="0.3939503"
android:translateX="33.66343"
android:translateY="233.998">
<path
android:pathData="M81.39454 332.00195a27 27 0 0 0 -19.48634 7.90625 27 27 0 0 0 0 38.1836 27 27 0 0 0 38.1836 0 27 27 0 0 0 0 -38.1836 27 27 0 0 0 -18.69726 -7.90625zM92 352a8 8 0 0 1 8 8 8 8 0 0 1 -8 8 8 8 0 0 1 -8 -8 8 8 0 0 1 8 -8z"
android:fillColor="#eaeaea" />
</group>
</group>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2019 Jeremy Jamet / Kunzisoft.
This file is part of KeePassDX.
KeePassDX is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KeePassDX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
-->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2019 Jeremy Jamet / Kunzisoft.
This file is part of KeePassDX.
KeePassDX is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KeePassDX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
-->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/green" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018 Jeremy Jamet / Kunzisoft.
This file is part of KeePassDX.
KeePassDX is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
KeePassDX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<string name="app_name" translatable="false">KeePassDX Pro</string>
<string name="app_name_part3" translatable="false">Pro</string>
</resources>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -15,7 +15,7 @@
viewBox="0 0 135.46666 135.46667"
version="1.1"
id="svg3912"
inkscape:version="0.92.1 r15371"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="app_store_logo.svg"
inkscape:export-filename="/home/joker/Projects/KeePassDX/art/app_store_logo.png"
inkscape:export-xdpi="96.000008"
@@ -358,28 +358,6 @@
operator="over"
result="composite2" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12540"
id="linearGradient12546"
x1="52"
y1="52"
x2="108"
y2="108"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.9683885,0,0,1.9683885,-49.789796,-49.50694)" />
<linearGradient
inkscape:collect="always"
id="linearGradient12540">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop12542" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop12544" />
</linearGradient>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath28-7">
@@ -521,6 +499,416 @@
id="path100-7"
inkscape:connector-curvature="0" />
</clipPath>
<linearGradient
gradientTransform="matrix(1.2543209,0,0,1.2543209,6.6666667e-7,56.170341)"
inkscape:collect="always"
xlink:href="#linearGradient1672"
id="linearGradient1674"
x1="0"
y1="84"
x2="108"
y2="192"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient1672">
<stop
style="stop-color:#42ab46;stop-opacity:1"
offset="0"
id="stop1668" />
<stop
style="stop-color:#439447;stop-opacity:1"
offset="1"
id="stop1670" />
</linearGradient>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1061">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1051" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1053" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1055" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1057" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1059" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1073">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1063" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1065" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1067" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1069" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1071" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1085">
<feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1075" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1077" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1079" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1081" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="fbSourceGraphic"
id="feComposite1083" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix1099" />
<feFlood
id="feFlood1101"
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
in="fbSourceGraphic" />
<feComposite
in2="fbSourceGraphic"
id="feComposite1103"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur1105"
in="composite1"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset1107"
dx="4.57967e-15"
dy="2"
result="offset" />
<feComposite
in2="offset"
id="feComposite1109"
in="fbSourceGraphic"
operator="over"
result="composite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1097">
<feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1087" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1089" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1091" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1093" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="fbSourceGraphic"
id="feComposite1095" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix1111" />
<feFlood
id="feFlood1113"
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
in="fbSourceGraphic" />
<feComposite
in2="fbSourceGraphic"
id="feComposite1115"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur1117"
in="composite1"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset1119"
dx="4.57967e-15"
dy="2"
result="offset" />
<feComposite
in2="offset"
id="feComposite1121"
in="fbSourceGraphic"
operator="over"
result="composite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1133">
<feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1123" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1125" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1127" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1129" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="fbSourceGraphic"
id="feComposite1131" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix1147" />
<feFlood
id="feFlood1149"
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
in="fbSourceGraphic" />
<feComposite
in2="fbSourceGraphic"
id="feComposite1151"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur1153"
in="composite1"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset1155"
dx="4.57967e-15"
dy="2"
result="offset" />
<feComposite
in2="offset"
id="feComposite1157"
in="fbSourceGraphic"
operator="over"
result="composite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1145">
<feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1135" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1137" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1139" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1141" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="fbSourceGraphic"
id="feComposite1143" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix1159" />
<feFlood
id="feFlood1161"
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
in="fbSourceGraphic" />
<feComposite
in2="fbSourceGraphic"
id="feComposite1163"
in="flood"
operator="in"
result="composite1" />
<feGaussianBlur
id="feGaussianBlur1165"
in="composite1"
stdDeviation="2"
result="blur" />
<feOffset
id="feOffset1167"
dx="4.57967e-15"
dy="2"
result="offset" />
<feComposite
in2="offset"
id="feComposite1169"
in="fbSourceGraphic"
operator="over"
result="composite2" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1253">
<feFlood
flood-opacity="0.27451"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1243" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1245" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1247" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1249" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1251" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1265">
<feFlood
flood-opacity="0.27451"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1255" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1257" />
<feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1259" />
<feOffset
dx="4.57967e-15"
dy="2"
result="offset"
id="feOffset1261" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1263" />
</filter>
</defs>
<sodipodi:namedview
id="base"
@@ -529,11 +917,11 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="220.74861"
inkscape:cy="287.08269"
inkscape:zoom="0.70710678"
inkscape:cx="254.20118"
inkscape:cy="159.99738"
inkscape:document-units="mm"
inkscape:current-layer="g5083"
inkscape:current-layer="layer2"
showgrid="true"
units="px"
inkscape:pagecheckerboard="true"
@@ -562,7 +950,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -571,54 +959,32 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-161.53332)"
style="display:inline"
sodipodi:insensitive="true">
<path
d="M 0,161.53332 H 135.46667 V 296.99999 H 0 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
id="path20"
inkscape:connector-curvature="0" />
style="display:inline">
<rect
y="161.53333"
x="1.5894572e-07"
height="135.46666"
width="135.46666"
id="rect4978-4"
style="display:inline;fill:url(#linearGradient1674);fill-opacity:1;stroke:none;stroke-width:75.25925446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="draw"
style="display:inline">
<rect
y="8.1380213e-06"
x="7.1054274e-15"
height="135.46666"
width="135.46666"
id="rect4978-4"
style="display:inline;fill:#43a047;fill-opacity:1;stroke:none;stroke-width:75.25925446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
id="g5083"
transform="translate(10.876099,9.3192152)">
<path
inkscape:connector-curvature="0"
id="rect4978-4-7"
d="m 79.589462,15.038515 -15.108921,6.128152 -3.698418,24.55872 -41.074732,41.113179 -0.134582,8.842372 67.398105,67.398082 H 162.79617 V 89.875729 L 94.087103,21.166667 Z"
style="display:inline;fill:url(#linearGradient12546);fill-opacity:0.16756759;stroke:none;stroke-width:118.10330963;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4972"
d="M 88.76953,339.91602 4.1718754,424.59766 4.0000004,436 15.400391,435.82813 27.240234,424 H 40 V 412 H 52 V 399.26562 L 86.01172,365.28906 A 8,8 0 0 1 84,360 a 8,8 0 0 1 8,-8 8,8 0 0 1 5.296882,2.01367 l 2.787098,-2.7832 z"
style="display:inline;fill:#eaeaea;fill-opacity:1;filter:url(#filter6016-3-1)"
inkscape:connector-curvature="0"
transform="matrix(0.77544714,0,0,0.77544714,16.472917,-242.41286)" />
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="path4974"
d="M 4.0000004,340 4.1718754,351.40137 88.59863,435.82812 100,436 99.828122,424.59863 15.401367,340.17188 Z"
style="display:inline;fill:#c6c6c6;fill-opacity:1;filter:url(#filter6016-3-1)"
transform="matrix(0.77544714,0,0,0.77544714,16.472917,-242.41286)" />
<path
inkscape:connector-curvature="0"
id="path4976"
d="m 81.39454,332.00195 a 27,27 0 0 0 -19.48634,7.90625 27,27 0 0 0 0,38.1836 27,27 0 0 0 38.1836,0 27,27 0 0 0 0,-38.1836 27,27 0 0 0 -18.69726,-7.90625 z M 92,352 a 8,8 0 0 1 8,8 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 z"
style="display:inline;fill:#eaeaea;fill-opacity:1;filter:url(#filter6016-3-1)"
transform="matrix(0.77544714,0,0,0.77544714,16.472917,-242.41286)" />
</g>
<path
sodipodi:nodetypes="ccccccc"
style="display:inline;fill:#ffa726;fill-opacity:1;stroke-width:3.75985432;filter:url(#filter1253)"
inkscape:connector-curvature="0"
d="m 33.866667,33.920901 v 7.975186 L 93.568211,101.6 h 7.974909 V 93.624805 L 41.841558,33.920901 Z"
id="path1717" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccc"
id="path1719"
d="m 86.496087,30.17525 c -4.57161,0.169389 -8.910241,2.060668 -12.145971,5.294733 -7.081661,7.08111 -7.081661,18.562749 0,25.643858 7.080828,7.081912 18.561988,7.081912 25.642803,0 7.081661,-7.081109 7.081661,-18.562748 0,-25.643858 -3.566853,-3.565199 -8.457348,-5.483705 -13.496832,-5.294733 z m 7.901546,12.572445 c 3.061609,8.31e-4 5.543331,2.482664 5.544155,5.544397 -8.24e-4,3.061737 -2.482546,5.543567 -5.544155,5.544392 -3.061617,-8.25e-4 -5.543331,-2.482655 -5.54416,-5.544392 8.29e-4,-3.061733 2.482543,-5.543566 5.54416,-5.544397 z M 57.071676,70.418527 33.866667,93.624429 v 7.975181 h 7.974891 l 8.488822,-8.489155 v 0.02913 h 7.974864 V 85.1646 h -0.02984 l 0.02984,-0.02915 v 0.02915 h 8.004179 v -5.507572 z"
inkscape:connector-curvature="0"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:3.75985432;filter:url(#filter1265)" />
</g>
<g
inkscape:groupmode="layer"

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

After

Width:  |  Height:  |  Size: 368 KiB

View File

@@ -30,41 +30,31 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-height="1043"
id="namedview4"
showgrid="false"
inkscape:zoom="5.6568542"
inkscape:cx="101.33858"
inkscape:cy="66.05461"
inkscape:zoom="2.8284271"
inkscape:cx="-7.8772259"
inkscape:cy="59.023519"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer6"
showguides="true"><inkscape:grid
visible="true"
empspacing="4"
type="xygrid"
id="grid4646" /></sodipodi:namedview><metadata
id="grid1474" /></sodipodi:namedview><metadata
id="metadata8"><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="defs6"><linearGradient
inkscape:collect="always"
id="linearGradient4674"><stop
style="stop-color:#ffffff;stop-opacity:0.20205479"
id="linearGradient1672"><stop
style="stop-color:#42ab46;stop-opacity:1"
offset="0"
id="stop4676" /><stop
style="stop-color:#ffffff;stop-opacity:0"
id="stop1668" /><stop
style="stop-color:#439447;stop-opacity:1"
offset="1"
id="stop4678" /></linearGradient><linearGradient
inkscape:collect="always"
id="linearGradient12540"><stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop12542" /><stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop12544" /></linearGradient><marker
id="stop1670" /></linearGradient><marker
inkscape:isstock="true"
style="overflow:visible"
id="marker11240"
@@ -1520,27 +1510,219 @@
operator="over"
in="fbSourceGraphic"
in2="offset"
id="feComposite5110" /></filter><linearGradient
id="feComposite5110" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1535"><feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1525" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1527" /><feGaussianBlur
in="composite1"
stdDeviation="4"
result="blur"
id="feGaussianBlur1529" /><feOffset
dx="4"
dy="4.52416e-15"
result="offset"
id="feOffset1531" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1533" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1559"><feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1549" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1551" /><feGaussianBlur
in="composite1"
stdDeviation="4"
result="blur"
id="feGaussianBlur1553" /><feOffset
dx="-2.41474e-15"
dy="4"
result="offset"
id="feOffset1555" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1557" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1583"><feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1573" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1575" /><feGaussianBlur
in="composite1"
stdDeviation="0"
result="blur"
id="feGaussianBlur1577" /><feOffset
dx="-2.41474e-15"
dy="4"
result="offset"
id="feOffset1579" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="fbSourceGraphic"
id="feComposite1581" /><feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix1585" /><feFlood
id="feFlood1587"
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
in="fbSourceGraphic" /><feComposite
in2="fbSourceGraphic"
id="feComposite1589"
in="flood"
operator="in"
result="composite1" /><feGaussianBlur
id="feGaussianBlur1591"
in="composite1"
stdDeviation="2"
result="blur" /><feOffset
id="feOffset1593"
dx="-2.41474e-15"
dy="2"
result="offset" /><feComposite
in2="offset"
id="feComposite1595"
in="fbSourceGraphic"
operator="over"
result="composite2" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1607"><feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1597" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1599" /><feGaussianBlur
in="composite1"
stdDeviation="2"
result="blur"
id="feGaussianBlur1601" /><feOffset
dx="-2.41474e-15"
dy="2"
result="offset"
id="feOffset1603" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1605" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1619"><feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1609" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1611" /><feGaussianBlur
in="composite1"
stdDeviation="1"
result="blur"
id="feGaussianBlur1613" /><feOffset
dx="-2.41474e-15"
dy="2"
result="offset"
id="feOffset1615" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1617" /></filter><filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter1631"><feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1621" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1623" /><feGaussianBlur
in="composite1"
stdDeviation="1"
result="blur"
id="feGaussianBlur1625" /><feOffset
dx="-2.41474e-15"
dy="2"
result="offset"
id="feOffset1627" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1629" /></filter><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12540"
id="linearGradient12546"
x1="52"
y1="52"
x2="87.847458"
y2="87.847458"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4674"
id="radialGradient4680"
cx="20"
cy="20"
fx="20"
fy="20"
r="54"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.7846366e-8,1.2592593,-1.2592593,2.7846366e-8,45.185185,-5.1851858)" /></defs><g
xlink:href="#linearGradient1672"
id="linearGradient1674"
x1="0"
y1="84"
x2="108"
y2="192"
gradientUnits="userSpaceOnUse" /><filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter1631-3"><feFlood
flood-opacity="0.2"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood1621-6" /><feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite1623-7" /><feGaussianBlur
in="composite1"
stdDeviation="1"
result="blur"
id="feGaussianBlur1625-5" /><feOffset
dx="-2.41474e-15"
dy="2"
result="offset"
id="feOffset1627-3" /><feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite1629-5" /></filter></defs><g
transform="translate(0,-84)"
style="display:none"
style="display:inline"
inkscape:label="Work_Background"
id="layer4"
inkscape:groupmode="layer"><rect
@@ -1549,7 +1731,7 @@
height="108"
width="108"
id="rect4978-4"
style="display:inline;fill:#43a047;fill-opacity:1;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
style="display:inline;fill:url(#linearGradient1674);fill-opacity:1;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
sodipodi:insensitive="true"
style="display:none"
inkscape:label="Lines"
@@ -1691,7 +1873,7 @@
id="rect4815"
style="display:inline;fill:#ffffff;fill-opacity:0;stroke:#8e8e8e;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
sodipodi:insensitive="true"
style="display:none"
style="display:inline"
inkscape:label="Extrude_point"
id="layer5"
inkscape:groupmode="layer"><path
@@ -1725,42 +1907,36 @@
id="g9678-5"
style="display:inline;opacity:1;fill:#ffc10f;fill-opacity:0.94117647;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.24545455,0,0,0.24545455,33.627273,414.71818)" /><path
style="display:inline;fill:url(#linearGradient12546);fill-opacity:0.16756759;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 65.728516,32.791016 58.052734,35.904297 56.173828,48.380859 35.306641,69.267578 35.238281,73.759766 69.478516,108 H 108 V 70.810547 L 73.09375,35.904297 Z"
style="display:inline;fill:#ffa726;fill-opacity:1;stroke-width:1.99999297;filter:url(#filter1631)"
d="m 36,36 v 4.242188 L 67.757812,72 H 72 V 67.757812 L 40.242188,36 Z"
transform="translate(0,332)"
id="rect4978-4-7"
inkscape:connector-curvature="0" /><path
transform="matrix(0.39395025,0,0,0.39395025,33.66343,233.99805)"
inkscape:connector-curvature="0"
style="display:inline;fill:#eaeaea;fill-opacity:1;filter:url(#filter6016-3-1)"
d="M 88.76953,339.91602 4.1718754,424.59766 4.0000004,436 15.400391,435.82813 27.240234,424 H 40 V 412 H 52 V 399.26562 L 86.01172,365.28906 A 8,8 0 0 1 84,360 a 8,8 0 0 1 8,-8 8,8 0 0 1 5.296882,2.01367 l 2.787098,-2.7832 z"
id="path4972" /><path
transform="matrix(0.39395025,0,0,0.39395025,33.66343,233.99805)"
style="display:inline;fill:#c6c6c6;fill-opacity:1;filter:url(#filter6016-3-1)"
d="M 4.0000004,340 4.1718754,351.40137 88.59863,435.82812 100,436 99.828122,424.59863 15.401367,340.17188 Z"
id="path4974"
id="path1487"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" /><path
transform="matrix(0.39395025,0,0,0.39395025,33.66343,233.99805)"
style="display:inline;fill:#eaeaea;fill-opacity:1;filter:url(#filter6016-3-1)"
d="m 81.39454,332.00195 a 27,27 0 0 0 -19.48634,7.90625 27,27 0 0 0 0,38.1836 27,27 0 0 0 38.1836,0 27,27 0 0 0 0,-38.1836 27,27 0 0 0 -18.69726,-7.90625 z M 92,352 a 8,8 0 0 1 8,8 8,8 0 0 1 -8,8 8,8 0 0 1 -8,-8 8,8 0 0 1 8,-8 z"
id="path4976"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.99999297;filter:url(#filter1631)"
d="m 63.996094,34.005859 c -2.431796,0.0901 -4.739744,1.096097 -6.460938,2.816407 -3.766972,3.76668 -3.766972,9.875898 0,13.642578 3.76653,3.76711 9.872142,3.76711 13.638672,0 3.766972,-3.76668 3.766972,-9.875898 0,-13.642578 -1.89733,-1.89645 -4.497065,-2.916927 -7.177734,-2.816407 z m 4.203125,6.689453 c 1.628576,4.42e-4 2.948778,1.320579 2.949219,2.949219 -4.41e-4,1.62864 -1.320643,2.948779 -2.949219,2.949219 -1.628576,-4.4e-4 -2.948778,-1.320579 -2.949219,-2.949219 4.41e-4,-1.62864 1.320643,-2.948778 2.949219,-2.949219 z M 48.34375,55.414062 36,67.757812 V 72 h 4.242188 l 4.515624,-4.515625 V 67.5 H 49 V 63.257812 H 48.98437 L 49,63.242188 v 0.01562 h 4.257812 v -2.929687 z"
transform="translate(0,332)"
id="path1666"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccccccc" /><path
style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.99999297;filter:url(#filter1631-3)"
d="m -15.499022,367.05762 c -0.791464,0 -1.582993,0.30369 -2.189454,0.91015 l -7.298828,7.29883 c -1.212921,1.21293 -1.212921,3.16403 0,4.37695 l 7.298828,7.29883 c 1.212922,1.21292 3.165985,1.21292 4.378907,0 l 7.296875,-7.29883 c 1.212921,-1.21292 1.212921,-3.16403 0,-4.37695 l -7.296875,-7.29883 c -0.606461,-0.60646 -1.397989,-0.91015 -2.189453,-0.91015 z m 3.171875,7.54297 c 1.656854,0 3,1.34314 3,3 0,1.65685 -1.343146,3 -3,3 -1.656854,0 -3,-1.34315 -3,-3 0,-1.65686 1.343146,-3 3,-3 z M -31.656249,387.41406 -44,399.75781 V 404 h 4.242188 l 4.515625,-4.51562 v 0.0156 h 4.242188 v -4.24219 h -0.01563 l 0.01563,-0.0156 v 0.0156 h 4.257812 v -2.92969 z"
id="path1451"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssssccccsssssscccccccccccccc" /></g><g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Mask_Circle"
style="display:none"><path
style="fill:#000000;fill-opacity:0.31818183;stroke:none;stroke-width:0.57448816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
d="M 0,0 V 108 H 108 V 0 Z M 54,18 A 36,36 0 0 1 90,54 36,36 0 0 1 54,90 36,36 0 0 1 18,54 36,36 0 0 1 54,18 Z"
id="rect1499"
inkscape:connector-curvature="0" /></g><g
style="display:none"
inkscape:label="Work_Light"
id="layer2"
inkscape:groupmode="layer"><rect
y="0"
x="0"
height="108"
width="108"
id="rect10849"
style="display:inline;opacity:0.20200004;fill:url(#radialGradient4680);fill-opacity:1;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
style="display:none"
inkscape:label="Mask"
inkscape:label="Mask_Rounded_Square"
id="layer3"
inkscape:groupmode="layer"><path
inkscape:connector-curvature="0"
id="rect4978-4-8"
d="M 0,0 V 108 H 108 V 0 Z M 28.259766,18 H 79.740234 C 85.42416,18 90,22.57584 90,28.259766 V 79.740234 C 90,85.42416 85.42416,90 79.740234,90 H 28.259766 C 22.57584,90 18,85.42416 18,79.740234 V 28.259766 C 18,22.57584 22.57584,18 28.259766,18 Z"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></svg>
d="M 0,0 V 108 H 108 V 0 Z M 28.25977,18 H 79.74023 C 85.42416,18 90,22.57584 90,28.259766 V 79.740234 C 90,85.42416 85.42416,90 79.74023,90 H 28.25977 C 22.57584,90 18,85.42416 18,79.740234 V 28.259766 C 18,22.57584 22.57584,18 28.25977,18 Z"
style="display:inline;fill:#000000;fill-opacity:0.31764706;stroke:none;stroke-width:60;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></svg>

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 70 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 372 KiB

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -10,7 +10,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.1'
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

View File

@@ -31,18 +31,6 @@ platform :android do
"android.injected.signing.key.password" => options[:keypass],
}
)
gradle(
task: "assemble",
flavor: "pro",
build_type: "Release",
print_command: false,
properties: {
"android.injected.signing.store.file" => options[:storefile],
"android.injected.signing.store.password" => options[:storepass],
"android.injected.signing.key.alias" => options[:keyalias],
"android.injected.signing.key.password" => options[:keypass],
}
)
end
desc "Deploy a new Free Beta version to the Google Play"
@@ -57,20 +45,4 @@ platform :android do
)
end
desc "Deploy a new Pro Beta version to the Google Play"
lane :deploy_beta_pro do
sh("cp", "-a", "./pro/.", "./")
upload_to_play_store(
track: "beta",
skip_upload_metadata: "true",
skip_upload_images: "true",
skip_upload_screenshots: "true",
apk: "./app/build/outputs/apk/pro/release/app-pro-release.apk",
validate_only: "false",
)
gradle(
task: 'clean'
)
sh("git", "checkout", ".")
end
end

View File

@@ -39,14 +39,6 @@ Build a new Beta version
Deploy a new Free Beta version to the Google Play
### android deploy_beta_pro
```sh
[bundle exec] fastlane android deploy_beta_pro
```
Deploy a new Pro Beta version to the Google Play
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.

View File

@@ -0,0 +1,2 @@
* Merge KeePassDX & KeePassDX Pro #1257
* Create new Contributor Pro app

View File

@@ -0,0 +1,2 @@
* Fusion de KeePassDX & KeePassDX Pro #1257
* Creation de l'application Contributor Pro

View File

@@ -1,2 +0,0 @@
json_key_file "./../Integration/Google_Play_Android_Developer.json" # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name "com.kunzisoft.keepass.pro"

View File

@@ -1,30 +0,0 @@
<b>Multi-format KeePass password manager</b>, the app allows saving and using passwords, keys and digital identities in a secure way, by integrating the Android design standards and <b>requires no internet connection</b>.
This pro version encourages <b>development</b>, <b>better service</b>, and you contribute to the creation of <b>open source softwares without advertising</b>.
<i>Currently, the application has the same features as the free version with the themes unlocked but is intended to integrate elements related to non-free sites and services commonly used.</i>
<b>Features</b>
- Create database files / entries and groups.
- Support for .kdb and .kdbx files (version 1 to 4) with AES - Twofish - ChaCha20 - Argon2 algorithm.
- Compatible with the majority of alternative programs (KeePass, KeePassX, KeePassXC, …).
- Allows opening and copying URI / URL fields quickly.
- Biometric recognition for fast unlocking (fingerprint / face unlock / …).
- One-time password management (HOTP / TOTP) for two-factor authentication (2FA).
- Material design with themes.
- Auto-Fill and integration.
- Field filling keyboard.
- Dynamic templates.
- History of each entry.
- Precise management of settings.
- Code written in native languages (Kotlin / Java / JNI / C).
<b>Pro Features</b>
- Access to custom themes.
- TOTP Steam creation.
- Deleting donation buttons.
KeePassDX Pro is <b>open source</b> and <b>ad-free</b>.
The project is constantly evolving. Do not hesitate to check the development status of the next updates: <a href="https://github.com/Kunzisoft/KeePassDX/projects">https://github.com/Kunzisoft/KeePassDX/projects</a>
Send issues to: <a href="https://github.com/Kunzisoft/KeePassDX/issues">https://github.com/Kunzisoft/KeePassDX/issues</a>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

View File

@@ -1 +0,0 @@
Pro version of KeePassDX, secure and open source password manager

View File

@@ -1 +0,0 @@
KeePassDX Pro

View File

@@ -1,31 +0,0 @@
<b>Gestionnaire de mots de passe KeePass multiformats</b>, l'application permet d'enregistrer et d'utiliser des mots de passe, des clés et des identités numériques de manière sécurisée, en intégrant les normes de conception Android et <b>ne requiert aucune connexion internet</b>.
Cette version pro encourage <b>les développements</b>, <b>un meilleur service</b> et vous contribuez à la création de <b>logiciels open source sans publicité</b>.
<i>Actuellement, l'application possède les mêmes fonctionnalités que la version gratuite avec les thèmes débloqués mais est destinée à intégrer des éléments liés à des sites et services non gratuits couramment utilisés.</i>
<b>Fonctionnalités</b>
- Création de bases de données / entrées et groupes.
- Support des fichiers .kdb et .kdbx (version 1 à 4) avec algorithme AES - Twofish - ChaCha20 - Argon2.
- Compatible avec la majorité des programmes alternatifs (KeePass, KeePassX, KeePassXC, …)
- Permet la copie rapide de champs et l'ouverture d'URI /URL.
- Reconnaissance biométrique pour un déblocage rapide (Empreintes digitales / Déverouillage par visage / …).
- Gestion des mots de passe à usage unique (One-Time Password HOTP / TOTP) pour l'authentification à deux facteurs (2FA).
- Material design avec thèmes.
- Remplissage automatique de champs.
- Clavier de remplissage de champs.
- Gabarits dynamiques.
- Historique de chaque entrée.
- Gestion précise des paramètres.
- Code écrit en langages natifs (Kotlin / Java / JNI / C).
<b>Fonctionnalités Pro</b>
- Accès aux thèmes personnalisés.
- Création de TOTP Steam.
- Suppression des boutons de don.
KeePassDX est <b>opensource</b> et <b>sans publicité</b>.
Le projet est en constante évolution. N'hésitez pas à vérifier l'état de développement des prochaines mises à jour : <a href="https://github.com/Kunzisoft/KeePassDX/projects">https://github.com/Kunzisoft/KeePassDX/projects</a>
Vous avez un bug : <a href="https://github.com/Kunzisoft/KeePassDX/issues">https://github.com/Kunzisoft/KeePassDX/issues</a>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

Some files were not shown because too many files have changed in this diff Show More