Skip to content

Commit

Permalink
TIQR-334-TIQR-328:
Browse files Browse the repository at this point in the history
Explicit section for plugins in version catalog, use ksp when possible
Investigate OTP after backup & restore
Pass explicit dispatcher to repositories, fix unit tests.
Ensure that opening the identity details will not trigger an update of the biometrics flag when binding gets executed.
Update java & add proguard rules
Update dependencies
Use AGP 8.2.0 stable and remove retrofit sealed classes proguard rules
  • Loading branch information
Iulia STANA committed Dec 7, 2023
1 parent 7757232 commit 5620385
Show file tree
Hide file tree
Showing 25 changed files with 972 additions and 638 deletions.
36 changes: 16 additions & 20 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
plugins {
id("com.android.application")
kotlin("android")
kotlin("kapt")
id("kotlin-parcelize")
id("org.jetbrains.kotlin.android")
id("dagger.hilt.android.plugin")
id("kotlin-parcelize")
id("com.google.devtools.ksp")
kotlin("kapt")
}

if (JavaVersion.current() < JavaVersion.VERSION_11) {
throw GradleException("Please use JDK ${JavaVersion.VERSION_11} or above")
if (JavaVersion.current() < JavaVersion.VERSION_17) {
throw GradleException("Please use JDK ${JavaVersion.VERSION_17} or above")
}

android {
compileSdk = libs.versions.android.sdk.compile.get().toInt()
buildToolsVersion = libs.versions.android.buildTools.get()

defaultConfig {
applicationId = "org.tiqr.sample"
Expand Down Expand Up @@ -62,10 +62,11 @@ android {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
signingConfig = signingConfigs.getByName("debug")
}
}

packagingOptions {
packaging {
resources.excludes.addAll(
arrayOf(
"META-INF/AL2.0",
Expand All @@ -76,6 +77,7 @@ android {

buildFeatures {
dataBinding = true
buildConfig = true
}

sourceSets {
Expand All @@ -84,8 +86,12 @@ android {
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

kotlin {
jvmToolchain(17)
}

kapt {
Expand All @@ -95,11 +101,6 @@ android {
option("-Xmaxerrs", 1000)
}
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}

lint {
abortOnError = false
}
Expand All @@ -108,11 +109,6 @@ android {

dependencies {

repositories {
google()
mavenCentral()
}

implementation(project(":core"))
implementation(project(":data"))

Expand Down Expand Up @@ -149,7 +145,7 @@ dependencies {
implementation(libs.betterLink)

api(libs.moshi.moshi)
kapt(libs.moshi.codegen)
ksp(libs.moshi.codegen)

api(libs.okhttp.okhttp)
api(libs.okhttp.logging)
Expand Down
11 changes: 11 additions & 0 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,14 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# Firebase
-keep public class com.google.firebase.** {*;}
-keep class com.google.android.gms.** { *; }
-keep class com.google.android.gms.internal.** { *; }
-keepclasseswithmembers class com.google.firebase.FirebaseException
-keep interface com.google.firebase.analytics.connector.AnalyticsConnector
-keep class ** implements com.google.firebase.analytics.connector.AnalyticsConnector {
*;
}
-dontwarn com.google.firebase.analytics.connector.AnalyticsConnector
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,27 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

@file:Suppress("unused")

package org.tiqr.authenticator.runner

import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
import dagger.hilt.android.testing.HiltTestApplication
import org.tiqr.data.model.TiqrConfig

/**
* Custom [AndroidJUnitRunner] to enable Hilt in tests.
*/
class HiltAndroidTestRunner : AndroidJUnitRunner() {
override fun newApplication(cl: ClassLoader?, className: String?, context: Context?): Application {
return super.newApplication(cl, HiltTestApplication::class.java.name, context)
override fun newApplication(
cl: ClassLoader?,
className: String?,
context: Context?
): Application {
val application = super.newApplication(cl, HiltTestApplication::class.java.name, context)
TiqrConfig.initialize(application)
return application
}
}
35 changes: 11 additions & 24 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,26 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}

dependencies {
classpath(libs.android.gradle)
classpath(libs.kotlin.gradle)
classpath(libs.dagger.hilt.gradle)
classpath(libs.androidx.navigation.gradle)
classpath(libs.google.gms.gradle)
}
}

subprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.safe.args) apply false
//Try to avoid using KAPT, check if the library can work/supports KSP which is much faster.
alias(libs.plugins.kapt) apply false
//The plugin to use i.s.o. KAPT: https://developer.android.com/build/migrate-to-ksp
alias(libs.plugins.ksp) apply false
alias(libs.plugins.hilt) apply false
alias(libs.plugins.google.gms.gradle) apply false
}
115 changes: 60 additions & 55 deletions core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,15 @@ plugins {
id("androidx.navigation.safeargs.kotlin")
}

if (JavaVersion.current() < JavaVersion.VERSION_11) {
throw GradleException("Please use JDK ${JavaVersion.VERSION_11} or above")
if (JavaVersion.current() < JavaVersion.VERSION_17) {
throw GradleException("Please use JDK ${JavaVersion.VERSION_17} or above")
}

android {
compileSdk = libs.versions.android.sdk.compile.get().toInt()
buildToolsVersion = libs.versions.android.buildTools.get()

defaultConfig {
minSdk = libs.versions.android.sdk.min.get().toInt()
targetSdk = libs.versions.android.sdk.target.get().toInt()

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
Expand All @@ -28,7 +26,10 @@ android {
buildTypes {
getByName("release") {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}

buildFeatures {
Expand All @@ -45,18 +46,22 @@ android {
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
jvmTarget = JavaVersion.VERSION_17.toString()
}
}
namespace = "org.tiqr.core"
}

fun loadCustomProperties(file: File): java.util.Properties {
kotlin {
jvmToolchain(17)
}

fun loadCustomProperties(file: File): Properties {
val properties = Properties()
if (file.isFile) {
properties.load(file.inputStream())
Expand All @@ -66,52 +71,52 @@ fun loadCustomProperties(file: File): java.util.Properties {

val secureProperties = loadCustomProperties(file("../local.properties"))

dependencies {
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.androidx.core)
implementation(libs.kotlinx.coroutines.playServices)

implementation(libs.androidx.activity)
implementation(libs.androidx.autofill)
implementation(libs.androidx.biometric)
implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.camera2)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.view)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.core)
implementation(libs.androidx.concurrent)
implementation(libs.androidx.lifecycle.common)
implementation(libs.androidx.lifecycle.livedata)
implementation(libs.androidx.localBroadcastManager)
implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.navigation.ui)
implementation(libs.androidx.recyclerview)
implementation(libs.androidx.splashscreen)
implementation(libs.google.android.material)
implementation(libs.google.mlkit.barcode)
implementation(libs.google.firebase.messaging)

implementation(project(":data"))

implementation(libs.dagger.hilt.android)
implementation(libs.dagger.hilt.fragment)
kapt(libs.dagger.hilt.compiler)

implementation(libs.permission)
implementation(libs.coil)
implementation(libs.betterLink)

testImplementation(libs.junit)
androidTestImplementation(libs.junit)
androidTestImplementation(libs.androidx.testing.core)
androidTestImplementation(libs.androidx.testing.junit)
androidTestImplementation(libs.androidx.testing.rules)
androidTestImplementation(libs.androidx.testing.epsresso)
androidTestImplementation(libs.androidx.testing.uiautomator)
androidTestImplementation(libs.kotlinx.coroutines.test)
dependencies {
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.androidx.core)
implementation(libs.kotlinx.coroutines.playServices)

implementation(libs.androidx.activity)
implementation(libs.androidx.autofill)
implementation(libs.androidx.biometric)
implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.camera2)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.view)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.core)
implementation(libs.androidx.concurrent)
implementation(libs.androidx.lifecycle.common)
implementation(libs.androidx.lifecycle.livedata)
implementation(libs.androidx.localBroadcastManager)
implementation(libs.androidx.navigation.fragment)
implementation(libs.androidx.navigation.ui)
implementation(libs.androidx.recyclerview)
implementation(libs.androidx.splashscreen)
implementation(libs.google.android.material)
implementation(libs.google.mlkit.barcode)
implementation(libs.google.firebase.messaging)

implementation(project(":data"))

implementation(libs.dagger.hilt.android)
implementation(libs.dagger.hilt.fragment)
kapt(libs.dagger.hilt.compiler)

implementation(libs.permission)
implementation(libs.coil)
implementation(libs.betterLink)

testImplementation(libs.junit)
androidTestImplementation(libs.junit)
androidTestImplementation(libs.androidx.testing.core)
androidTestImplementation(libs.androidx.testing.junit)
androidTestImplementation(libs.androidx.testing.rules)
androidTestImplementation(libs.androidx.testing.epsresso)
androidTestImplementation(libs.androidx.testing.uiautomator)
androidTestImplementation(libs.kotlinx.coroutines.test)

androidTestImplementation(libs.dagger.hilt.testing)
kaptAndroidTest(libs.dagger.hilt.compiler)
Expand Down
3 changes: 3 additions & 0 deletions core/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,6 @@
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}

#Required because https://issuetracker.google.com/issues/250197571#comment25
-dontwarn java.lang.invoke.StringConcatFactory
4 changes: 2 additions & 2 deletions core/src/main/java/org/tiqr/core/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ open class MainActivity : BaseActivity<ActivityMainBinding>(),
else -> {
Timber.w("Could not parse the raw challenge")
MaterialAlertDialogBuilder(this)
.setTitle(R.string.error_challenge_title_opened_from_invalid_url)
.setMessage(R.string.error_challenge_opened_from_invalid_url)
.setTitle(org.tiqr.data.R.string.error_challenge_title_opened_from_invalid_url)
.setMessage(org.tiqr.data.R.string.error_challenge_opened_from_invalid_url)
.setPositiveButton(R.string.button_ok) { dialog, _ -> dialog.dismiss() }
.show()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,18 +64,22 @@ class IdentityDetailFragment : BaseFragment<FragmentIdentityDetailBinding>() {
viewModel.identity.observe(viewLifecycleOwner) {
it?.let { identity ->
binding.model = identity
binding.executePendingBindings()
binding.hasBiometric = requireContext().biometricUsable()
binding.hasBiometricSecret = viewModel.hasBiometricSecret(identity.identity)
binding.executePendingBindings()
} ?: findNavController().popBackStack()
}

binding.biometric.setOnCheckedChangeListener { _, isChecked ->
viewModel.useBiometric(args.identity.identity, isChecked)
binding.biometric.setOnCheckedChangeListener { toggle, isChecked ->
if (toggle.isPressed) {
viewModel.useBiometric(args.identity.identity, isChecked)
}
}

binding.biometricUpgrade.setOnCheckedChangeListener { _, isChecked ->
viewModel.upgradeToBiometric(args.identity.identity, isChecked)
binding.biometricUpgrade.setOnCheckedChangeListener { toggle, isChecked ->
if (toggle.isPressed) {
viewModel.upgradeToBiometric(args.identity.identity, isChecked)
}
}

binding.buttonDelete.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ class IdentityListAdapter(
private val onCancel: (RecyclerView.ViewHolder) -> Unit
) : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
private val frameSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80f, context.resources.displayMetrics)
private val background = ColorDrawable(context.getThemeColor(R.attr.colorError))
private val background = ColorDrawable(context.getThemeColor(com.google.android.material.R.attr.colorError))
private val icon = ContextCompat.getDrawable(context, R.drawable.ic_delete)?.apply {
DrawableCompat.setTint(this, context.getThemeColor(R.attr.colorOnError))
DrawableCompat.setTint(this, context.getThemeColor(com.google.android.material.R.attr.colorOnError))
}

override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder) = false
Expand Down
Loading

0 comments on commit 5620385

Please sign in to comment.