mirror of
https://github.com/android-password-store/Android-Password-Store.git
synced 2025-09-07 01:27:18 +02:00
* Modernize legacy RecyclerView adapters Introduces new adapters based on the SearchableRepositoryViewModel and using androidx.recyclerview.selection for multiselection support. The following positive effects in behavior are observable to end-users: - Search and navigation actions are executed on IO threads. - RecyclerViews are now animated during searches (but not navigations). - Exact scroll position is restored when navigating back. - The ActionBar title is updated with the current folder name. The following negative effects may warrant attention: - Support for the "always search from root" setting has been removed. - Due to a limitation of the fast scroll dependency, using the scroller may result in unwanted multiselections. If this is not fixed in the library, native fast scroller capabilities could be used, but these are more limited in appearance and to not offer popups. * Fix lint * Fix FastScroller/SelectionTracker incompatibility * Immediately react to settings changes * List directory entries when search term is blank * Use isEmpty() instead of == "" * Replace adapter inheritance with builders and fix selection drags * Remove dividers in password lists * Run spotlessApply * Use a more logical string in action mode * Commonize and constify path bundle key * Make lambda parameter name explicit Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
128 lines
4.3 KiB
Groovy
128 lines
4.3 KiB
Groovy
/*
|
|
* Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
|
|
* SPDX-License-Identifier: GPL-3.0-only
|
|
*/
|
|
plugins {
|
|
id 'kotlin-android'
|
|
id 'kotlin-android-extensions'
|
|
}
|
|
|
|
final def keystorePropertiesFile = rootProject.file 'keystore.properties'
|
|
|
|
final def gitHash = { ->
|
|
final def stdout = new ByteArrayOutputStream()
|
|
exec {
|
|
commandLine 'git', 'describe', '--tags'
|
|
standardOutput = stdout
|
|
}
|
|
stdout.toString().trim()
|
|
}
|
|
|
|
static final def isSnapshot() {
|
|
return System.env['GITHUB_WORKFLOW'] != null && System.env['SNAPSHOT'] != null
|
|
}
|
|
|
|
android {
|
|
if (isSnapshot()) {
|
|
android.applicationVariants.all { final variant ->
|
|
variant.outputs.all {
|
|
outputFileName = "aps_${versions.versionName}.apk"
|
|
}
|
|
}
|
|
}
|
|
|
|
defaultConfig {
|
|
applicationId versions.packageName
|
|
}
|
|
|
|
lintOptions {
|
|
abortOnError = true // make sure build fails with lint errors!
|
|
disable 'MissingTranslation', 'PluralsCandidate'
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude '.readme'
|
|
exclude 'META-INF/LICENSE.txt'
|
|
exclude 'META-INF/NOTICE.txt'
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled = true
|
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
buildConfigField 'boolean', 'ENABLE_DEBUG_FEATURES', isSnapshot() ? 'true' : 'false'
|
|
}
|
|
debug {
|
|
applicationIdSuffix = '.debug'
|
|
versionNameSuffix = '-debug'
|
|
minifyEnabled = false
|
|
buildConfigField 'boolean', 'ENABLE_DEBUG_FEATURES', 'true'
|
|
}
|
|
}
|
|
|
|
if (keystorePropertiesFile.exists()) {
|
|
final def keystoreProperties = new Properties()
|
|
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
|
signingConfigs {
|
|
release {
|
|
keyAlias = keystoreProperties['keyAlias']
|
|
keyPassword = keystoreProperties['keyPassword']
|
|
storeFile = rootProject.file keystoreProperties['storeFile']
|
|
storePassword = keystoreProperties['storePassword']
|
|
}
|
|
}
|
|
buildTypes.release.signingConfig = signingConfigs.release
|
|
buildTypes.debug.signingConfig = signingConfigs.release
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation deps.androidx.annotation
|
|
implementation deps.androidx.activity_ktx
|
|
implementation deps.androidx.appcompat
|
|
implementation deps.androidx.biometric
|
|
implementation deps.androidx.constraint_layout
|
|
implementation deps.androidx.core_ktx
|
|
implementation deps.androidx.documentfile
|
|
implementation deps.androidx.fragment_ktx
|
|
implementation deps.androidx.lifecycle_livedata_ktx
|
|
implementation deps.androidx.lifecycle_viewmodel_ktx
|
|
implementation deps.androidx.local_broadcast_manager
|
|
implementation deps.androidx.material
|
|
implementation deps.androidx.preference
|
|
implementation deps.androidx.swiperefreshlayout
|
|
implementation deps.androidx.recycler_view
|
|
implementation deps.androidx.recycler_view_selection
|
|
|
|
implementation deps.kotlin.coroutines.android
|
|
implementation deps.kotlin.coroutines.core
|
|
|
|
implementation deps.third_party.commons_io
|
|
implementation deps.third_party.commons_codec
|
|
implementation deps.third_party.fastscroll
|
|
implementation(deps.third_party.jgit) {
|
|
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
|
|
}
|
|
implementation deps.third_party.jsch
|
|
implementation deps.third_party.openpgp_ktx
|
|
implementation deps.third_party.publicsuffixlist
|
|
implementation deps.third_party.ssh_auth
|
|
implementation deps.third_party.timber
|
|
implementation deps.third_party.timberkt
|
|
implementation deps.third_party.whatthestack
|
|
|
|
if (isSnapshot()) {
|
|
implementation deps.third_party.leakcanary
|
|
} else {
|
|
debugImplementation deps.third_party.leakcanary
|
|
}
|
|
|
|
// Testing-only dependencies
|
|
androidTestImplementation deps.testing.junit
|
|
androidTestImplementation deps.testing.androidx.runner
|
|
androidTestImplementation deps.testing.androidx.rules
|
|
androidTestImplementation deps.testing.androidx.junit
|
|
androidTestImplementation deps.testing.androidx.espresso_core
|
|
androidTestImplementation deps.testing.androidx.espresso_intents
|
|
}
|