Android-Password-Store/app/build.gradle
Fabian Henneke 575ef84726
Modernize legacy RecyclerView adapters (#694)
* 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>
2020-04-10 16:48:42 +05:30

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
}