diff --git a/app/build.gradle b/app/build.gradle index a22e6a9a1..e28c46f95 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,39 +1,21 @@ import com.android.build.api.dsl.ManagedVirtualDevice -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'com.google.protobuf' -apply plugin: 'androidx.navigation.safeargs' -apply plugin: 'org.jlleitschuh.gradle.ktlint' -apply from: 'translations.gradle' -apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'app.cash.exhaustive' -apply plugin: 'kotlin-parcelize' -apply plugin: 'com.squareup.wire' -apply from: 'static-ips.gradle' - - -repositories { - maven { - url "https://raw.githubusercontent.com/signalapp/maven/master/sqlcipher/release/" - content { - includeGroupByRegex "org\\.signal.*" - } - } - - google() - mavenCentral() - mavenLocal() - maven { - url "https://dl.cloudsmith.io/qxAgwaeEE1vN8aLU/mobilecoin/mobilecoin/maven/" - } - jcenter { - content { - includeVersion "mobi.upod", "time-duration-picker", "1.1.3" - } - } +plugins { + id 'com.android.application' + id 'kotlin-android' + id 'com.google.protobuf' + id 'androidx.navigation.safeargs' + id 'org.jlleitschuh.gradle.ktlint' + id 'org.jetbrains.kotlin.android' + id 'app.cash.exhaustive' + id 'kotlin-parcelize' + id 'com.squareup.wire' + id 'android-constants' } +apply from: 'translations.gradle' +apply from: 'static-ips.gradle' + protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.18.0' @@ -102,8 +84,8 @@ def selectableVariants = [ android { namespace 'org.thoughtcrime.securesms' - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK + buildToolsVersion BUILD_TOOLS_VERSION + compileSdkVersion COMPILE_SDK_VERSION flavorDimensions 'distribution', 'environment' useLibrary 'org.apache.http.legacy' @@ -180,8 +162,8 @@ android { versionCode canonicalVersionCode * postFixSize versionName canonicalVersionName - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK + minSdkVersion MIN_SDK_VERSION + targetSdkVersion TARGET_SDK_VERSION multiDexEnabled true diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt index 1aacb1627..fae63552e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -13,7 +13,6 @@ import androidx.fragment.app.commit import com.google.android.material.shape.ShapeAppearanceModel import com.google.android.material.transition.platform.MaterialContainerTransform import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback -import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.PassphraseRequiredActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController diff --git a/build-logic/plugins/build.gradle b/build-logic/plugins/build.gradle new file mode 100644 index 000000000..7b6a69d19 --- /dev/null +++ b/build-logic/plugins/build.gradle @@ -0,0 +1,8 @@ +plugins { + id "groovy-gradle-plugin" +} + +dependencies { + implementation libs.android.library + implementation libs.android.application +} \ No newline at end of file diff --git a/build-logic/plugins/src/main/java/android-constants.gradle b/build-logic/plugins/src/main/java/android-constants.gradle new file mode 100644 index 000000000..a783878f1 --- /dev/null +++ b/build-logic/plugins/src/main/java/android-constants.gradle @@ -0,0 +1,9 @@ +ext { + BUILD_TOOLS_VERSION = '32.0.0' + + COMPILE_SDK_VERSION = 33 + TARGET_SDK_VERSION = 31 + MIN_SDK_VERSION = 21 + + JAVA_VERSION = JavaVersion.VERSION_1_8 +} diff --git a/signalModule.gradle b/build-logic/plugins/src/main/java/signal-library.gradle similarity index 50% rename from signalModule.gradle rename to build-logic/plugins/src/main/java/signal-library.gradle index 66cb20818..9448021cf 100644 --- a/signalModule.gradle +++ b/build-logic/plugins/src/main/java/signal-library.gradle @@ -1,14 +1,17 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'org.jlleitschuh.gradle.ktlint' +plugins { + id 'com.android.library' + id 'kotlin-android' + id 'org.jlleitschuh.gradle.ktlint' + id 'android-constants' +} android { - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK + buildToolsVersion BUILD_TOOLS_VERSION + compileSdkVersion COMPILE_SDK_VERSION defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK + minSdkVersion MIN_SDK_VERSION + targetSdkVersion TARGET_SDK_VERSION multiDexEnabled true } @@ -35,15 +38,25 @@ ktlint { dependencies { lintChecks project(':lintchecks') - implementation project(':core-util') - coreLibraryDesugaring libs.android.tools.desugar implementation libs.androidx.core.ktx implementation libs.androidx.fragment.ktx implementation libs.androidx.annotation implementation libs.androidx.appcompat + implementation libs.rxjava3.rxandroid + implementation libs.rxjava3.rxjava + implementation libs.rxjava3.rxkotlin + implementation libs.androidx.multidex implementation libs.kotlin.stdlib.jdk8 ktlintRuleset libs.ktlint.twitter.compose + + testImplementation testLibs.junit.junit + testImplementation testLibs.mockito.core + testImplementation testLibs.mockito.android + testImplementation testLibs.mockito.kotlin + testImplementation testLibs.robolectric.robolectric + testImplementation testLibs.androidx.test.core + testImplementation testLibs.androidx.test.core.ktx } diff --git a/build-logic/plugins/src/main/java/signal-sample-app.gradle b/build-logic/plugins/src/main/java/signal-sample-app.gradle new file mode 100644 index 000000000..0dfa43f77 --- /dev/null +++ b/build-logic/plugins/src/main/java/signal-sample-app.gradle @@ -0,0 +1,65 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' + id 'org.jlleitschuh.gradle.ktlint' + id 'android-constants' +} + +android { + buildToolsVersion BUILD_TOOLS_VERSION + compileSdkVersion COMPILE_SDK_VERSION + + defaultConfig { + versionCode 1 + versionName "1.0" + + minSdkVersion MIN_SDK_VERSION + targetSdkVersion TARGET_SDK_VERSION + multiDexEnabled true + } + + kotlinOptions { + jvmTarget = '1.8' + } + + compileOptions { + coreLibraryDesugaringEnabled true + sourceCompatibility JAVA_VERSION + targetCompatibility JAVA_VERSION + } +} + +ktlint { + // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 + version = "0.47.1" +} + +dependencies { + coreLibraryDesugaring libs.android.tools.desugar + + implementation project(':core-util') + + coreLibraryDesugaring libs.android.tools.desugar + + implementation libs.androidx.core.ktx + implementation libs.androidx.fragment.ktx + implementation libs.androidx.annotation + implementation libs.androidx.appcompat + implementation libs.rxjava3.rxandroid + implementation libs.rxjava3.rxjava + implementation libs.rxjava3.rxkotlin + implementation libs.androidx.multidex + implementation libs.material.material + implementation libs.androidx.constraintlayout + + implementation libs.kotlin.stdlib.jdk8 + ktlintRuleset libs.ktlint.twitter.compose + + testImplementation testLibs.junit.junit + testImplementation testLibs.mockito.core + testImplementation testLibs.mockito.android + testImplementation testLibs.mockito.kotlin + testImplementation testLibs.robolectric.robolectric + testImplementation testLibs.androidx.test.core + testImplementation testLibs.androidx.test.core.ktx +} diff --git a/build-logic/settings.gradle b/build-logic/settings.gradle new file mode 100644 index 000000000..91916c869 --- /dev/null +++ b/build-logic/settings.gradle @@ -0,0 +1,22 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +rootProject.name = "build-logic" + +include ':plugins' + +apply from: '../dependencies.gradle' diff --git a/build.gradle b/build.gradle index 5db044b82..d76ac03be 100644 --- a/build.gradle +++ b/build.gradle @@ -34,28 +34,10 @@ buildscript { } } -ext { - BUILD_TOOL_VERSION = '32.0.0' - - COMPILE_SDK = 33 - TARGET_SDK = 31 - MINIMUM_SDK = 21 - - JAVA_VERSION = JavaVersion.VERSION_1_8 -} - wrapper { distributionType = Wrapper.DistributionType.ALL } -allprojects { - repositories { - google() - mavenCentral() - mavenLocal() - } -} - subprojects { ext.lib_signal_service_version_number = "2.15.3" ext.lib_signal_service_group_info = "org.whispersystems" diff --git a/contacts/app/build.gradle b/contacts/app/build.gradle index dd0a375d4..82b9d2f20 100644 --- a/contacts/app/build.gradle +++ b/contacts/app/build.gradle @@ -1,51 +1,15 @@ plugins { - id 'com.android.application' - id 'kotlin-android' - id 'org.jlleitschuh.gradle.ktlint' + id 'signal-sample-app' } android { namespace 'org.signal.contactstest' - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - defaultConfig { applicationId "org.signal.contactstest" - versionCode 1 - versionName "1.0" - - minSdkVersion 21 - targetSdkVersion TARGET_SDK - multiDexEnabled true } - - kotlinOptions { - jvmTarget = '1.8' - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } -} - -ktlint { - // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 - version = "0.47.1" } dependencies { - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.activity.ktx - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.constraintlayout - - testImplementation testLibs.junit.junit - implementation project(':contacts') - implementation project(':core-util') } \ No newline at end of file diff --git a/contacts/lib/build.gradle b/contacts/lib/build.gradle index 97d44e129..cede9f34d 100644 --- a/contacts/lib/build.gradle +++ b/contacts/lib/build.gradle @@ -1,51 +1,11 @@ plugins { - id 'com.android.library' - id 'kotlin-android' - id 'org.jlleitschuh.gradle.ktlint' + id 'signal-library' } android { namespace 'org.signal.contacts' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - - kotlinOptions { - jvmTarget = '1.8' - } - - lintOptions { - disable 'InvalidVectorPath' - } -} - -ktlint { - // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 - version = "0.47.1" } dependencies { - lintChecks project(':lintchecks') - implementation project(':core-util') - - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.annotation - implementation libs.androidx.appcompat - - api libs.rxjava3.rxjava -} +} \ No newline at end of file diff --git a/core-ui/build.gradle b/core-ui/build.gradle index f86ebc1db..427f8f473 100644 --- a/core-ui/build.gradle +++ b/core-ui/build.gradle @@ -1,4 +1,6 @@ -apply from: "$rootProject.projectDir/signalModule.gradle" +plugins { + id 'signal-library' +} android { namespace 'org.signal.core.ui' diff --git a/core-util/build.gradle b/core-util/build.gradle index c9ca7803b..c53ac1aad 100644 --- a/core-util/build.gradle +++ b/core-util/build.gradle @@ -1,30 +1,11 @@ plugins { - id 'com.android.library' + id 'signal-library' id 'com.google.protobuf' - id 'kotlin-android' id 'kotlin-kapt' } android { namespace 'org.signal.core.util' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' - } } protobuf { @@ -43,17 +24,8 @@ protobuf { } dependencies { - lintChecks project(':lintchecks') - - coreLibraryDesugaring libs.android.tools.desugar - - api libs.androidx.annotation - - implementation libs.androidx.core.ktx - implementation libs.androidx.lifecycle.common.java8 implementation libs.google.protobuf.javalite implementation libs.androidx.sqlite - implementation libs.rxjava3.rxjava testImplementation testLibs.junit.junit testImplementation testLibs.mockito.core diff --git a/core-util/src/main/java/org/signal/core/util/AsciiArt.kt b/core-util/src/main/java/org/signal/core/util/AsciiArt.kt index a8741f985..c309d9583 100644 --- a/core-util/src/main/java/org/signal/core/util/AsciiArt.kt +++ b/core-util/src/main/java/org/signal/core/util/AsciiArt.kt @@ -5,7 +5,7 @@ import kotlin.math.max class AsciiArt { - private class Table ( + private class Table( private val columns: List, private val rows: List> ) { diff --git a/core-util/src/main/java/org/signal/core/util/DimensionUnitExtensions.kt b/core-util/src/main/java/org/signal/core/util/DimensionUnitExtensions.kt index 71828ad6d..a6fa0d76e 100644 --- a/core-util/src/main/java/org/signal/core/util/DimensionUnitExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/DimensionUnitExtensions.kt @@ -24,4 +24,4 @@ val Float.sp: Float get() = DimensionUnit.SP.toPixels(this) * Converts the given Int SP value into Pixels */ @get:Px -val Int.sp: Int get() = this.toFloat().sp.toInt() \ No newline at end of file +val Int.sp: Int get() = this.toFloat().sp.toInt() diff --git a/core-util/src/main/java/org/signal/core/util/FontUtil.kt b/core-util/src/main/java/org/signal/core/util/FontUtil.kt index 1cc9492b9..8ddf1727c 100644 --- a/core-util/src/main/java/org/signal/core/util/FontUtil.kt +++ b/core-util/src/main/java/org/signal/core/util/FontUtil.kt @@ -7,7 +7,6 @@ import android.graphics.Paint import android.graphics.PorterDuff import kotlin.math.abs - object FontUtil { private const val SAMPLE_EMOJI = "\uD83C\uDF0D" // 🌍 @@ -37,4 +36,4 @@ object FontUtil { return bitmap.getPixel(0, 0) != 0 } -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt b/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt index 4f4feadba..a3bf7e530 100644 --- a/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt @@ -16,4 +16,4 @@ fun Optional.isAbsent(): Boolean { fun E?.toOptional(): Optional { return Optional.ofNullable(this) -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/Serializer.kt b/core-util/src/main/java/org/signal/core/util/Serializer.kt index 5521d1d7f..5bbddb2f1 100644 --- a/core-util/src/main/java/org/signal/core/util/Serializer.kt +++ b/core-util/src/main/java/org/signal/core/util/Serializer.kt @@ -25,5 +25,4 @@ object StringStringSerializer : StringSerializer { override fun deserialize(data: String): String { return data } - -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/SqlUtil.kt b/core-util/src/main/java/org/signal/core/util/SqlUtil.kt index 757d45d4a..a100cbcdd 100644 --- a/core-util/src/main/java/org/signal/core/util/SqlUtil.kt +++ b/core-util/src/main/java/org/signal/core/util/SqlUtil.kt @@ -82,7 +82,7 @@ object SqlUtil { @JvmStatic fun getForeignKeyDependencies(db: SupportSQLiteDatabase, table: String): Set { return db.query("PRAGMA foreign_key_list($table)") - .readToSet{ cursor -> + .readToSet { cursor -> cursor.requireNonNullString("table") } } @@ -393,4 +393,4 @@ object SqlUtil { } class Query(val where: String, val whereArgs: Array) -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/StringExtensions.kt b/core-util/src/main/java/org/signal/core/util/StringExtensions.kt index c7103d24c..7cc0a2cf7 100644 --- a/core-util/src/main/java/org/signal/core/util/StringExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/StringExtensions.kt @@ -37,4 +37,4 @@ fun String.asListContains(item: String): Boolean { */ fun String.toSingleLine(): String { return this.trimIndent().split("\n").joinToString(separator = " ") -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt b/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt index 0de0e6432..a80ee8ace 100644 --- a/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt +++ b/core-util/src/main/java/org/signal/core/util/concurrent/DeadlockDetector.kt @@ -21,13 +21,13 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval var lastThreadDumpTime: Long = -1 fun start() { - Log.d(TAG, "Beginning deadlock monitoring."); + Log.d(TAG, "Beginning deadlock monitoring.") running = true handler.postDelayed(this::poll, pollingInterval) } fun stop() { - Log.d(TAG, "Ending deadlock monitoring."); + Log.d(TAG, "Ending deadlock monitoring.") running = false handler.removeCallbacksAndMessages(null) } @@ -122,7 +122,6 @@ class DeadlockDetector(private val handler: Handler, private val pollingInterval for (entry in blocked) { stringBuilder.append("-- [${entry.key.id}] ${entry.key.name} | ${entry.key.state}\n") - val callerThrowable: Throwable? = TracedThreads.callerStackTraces[entry.key.id] val stackTrace: Array = if (callerThrowable != null) { ExceptionUtil.joinStackTrace(entry.value, callerThrowable.stackTrace) diff --git a/core-util/src/main/java/org/signal/core/util/concurrent/TracingExecutorService.kt b/core-util/src/main/java/org/signal/core/util/concurrent/TracingExecutorService.kt index b4ed4e9f0..f603b3f70 100644 --- a/core-util/src/main/java/org/signal/core/util/concurrent/TracingExecutorService.kt +++ b/core-util/src/main/java/org/signal/core/util/concurrent/TracingExecutorService.kt @@ -31,25 +31,28 @@ internal class TracingExecutorService(val wrapped: ExecutorService) : ExecutorSe val queue: Queue get() { - return if (wrapped is ThreadPoolExecutor) + return if (wrapped is ThreadPoolExecutor) { wrapped.queue - else + } else { LinkedBlockingQueue() + } } val activeCount: Int get() { - return if (wrapped is ThreadPoolExecutor) + return if (wrapped is ThreadPoolExecutor) { wrapped.activeCount - else + } else { 0 + } } val maximumPoolSize: Int get() { - return if (wrapped is ThreadPoolExecutor) + return if (wrapped is ThreadPoolExecutor) { wrapped.maximumPoolSize - else + } else { 0 + } } } diff --git a/core-util/src/main/java/org/signal/core/util/concurrent/TracingUncaughtExceptionHandler.kt b/core-util/src/main/java/org/signal/core/util/concurrent/TracingUncaughtExceptionHandler.kt index 8ce330b9a..9648fb10f 100644 --- a/core-util/src/main/java/org/signal/core/util/concurrent/TracingUncaughtExceptionHandler.kt +++ b/core-util/src/main/java/org/signal/core/util/concurrent/TracingUncaughtExceptionHandler.kt @@ -5,12 +5,13 @@ import org.signal.core.util.ExceptionUtil /** * An uncaught exception handler that will combine a caller stack trace with the exception to print a more useful stack trace. */ -internal class TracingUncaughtExceptionHandler ( - val originalHandler: Thread.UncaughtExceptionHandler?, - private val callerStackTrace: Throwable) : Thread.UncaughtExceptionHandler { +internal class TracingUncaughtExceptionHandler( + val originalHandler: Thread.UncaughtExceptionHandler?, + private val callerStackTrace: Throwable +) : Thread.UncaughtExceptionHandler { override fun uncaughtException(thread: Thread, exception: Throwable) { val updated = ExceptionUtil.joinStackTrace(exception, callerStackTrace) originalHandler?.uncaughtException(thread, updated) } -} \ No newline at end of file +} diff --git a/core-util/src/main/java/org/signal/core/util/money/PlatformCurrencyUtil.kt b/core-util/src/main/java/org/signal/core/util/money/PlatformCurrencyUtil.kt index ab6c4ed45..2835218f1 100644 --- a/core-util/src/main/java/org/signal/core/util/money/PlatformCurrencyUtil.kt +++ b/core-util/src/main/java/org/signal/core/util/money/PlatformCurrencyUtil.kt @@ -21,4 +21,4 @@ object PlatformCurrencyUtil { fun getAvailableCurrencyCodes(): Set { return Currency.getAvailableCurrencies().map { it.currencyCode }.toSet() } -} \ No newline at end of file +} diff --git a/core-util/src/test/java/org/signal/core/util/StringExtensions_asListContains.kt b/core-util/src/test/java/org/signal/core/util/StringExtensions_asListContains.kt index 432d9bc5c..1f476d740 100644 --- a/core-util/src/test/java/org/signal/core/util/StringExtensions_asListContains.kt +++ b/core-util/src/test/java/org/signal/core/util/StringExtensions_asListContains.kt @@ -32,7 +32,7 @@ class StringExtensions_asListContains( arrayOf("a", "b", false), arrayOf("a", "abc", false), - arrayOf("b", "a*", false), + arrayOf("b", "a*", false) ).toList() } } diff --git a/core-util/src/test/java/org/signal/core/util/StringUtilTest_endsWith.kt b/core-util/src/test/java/org/signal/core/util/StringUtilTest_endsWith.kt index 324f0c134..f5a4d69b8 100644 --- a/core-util/src/test/java/org/signal/core/util/StringUtilTest_endsWith.kt +++ b/core-util/src/test/java/org/signal/core/util/StringUtilTest_endsWith.kt @@ -51,4 +51,4 @@ class StringUtilTest_endsWith { assertEquals(expected, result) } -} \ No newline at end of file +} diff --git a/core-util/src/test/java/org/signal/core/util/StringUtilTest_replace.kt b/core-util/src/test/java/org/signal/core/util/StringUtilTest_replace.kt index 6f99c2d99..dfa992b3b 100644 --- a/core-util/src/test/java/org/signal/core/util/StringUtilTest_replace.kt +++ b/core-util/src/test/java/org/signal/core/util/StringUtilTest_replace.kt @@ -48,4 +48,4 @@ class StringUtilTest_replace { assertEquals(expected.toString(), result.toString()) } -} \ No newline at end of file +} diff --git a/core-util/src/test/java/org/signal/core/util/StringUtilTest_startsWith.kt b/core-util/src/test/java/org/signal/core/util/StringUtilTest_startsWith.kt index 3e5ca2a9f..83daa460e 100644 --- a/core-util/src/test/java/org/signal/core/util/StringUtilTest_startsWith.kt +++ b/core-util/src/test/java/org/signal/core/util/StringUtilTest_startsWith.kt @@ -51,4 +51,4 @@ class StringUtilTest_startsWith { assertEquals(expected, result) } -} \ No newline at end of file +} diff --git a/dependencies.gradle b/dependencies.gradle index ccdbd5d57..fa5998f0c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -14,6 +14,11 @@ dependencyResolutionManagement { version('kotlin', '1.6.21') version('libsignal-client', '0.22.0') version('mp4parser', '1.9.39') + version('android-gradle-plugin', '7.4.1') + + // Android Plugins + alias('android-library').to('com.android.library', 'com.android.library.gradle.plugin').versionRef('android-gradle-plugin') + alias('android-application').to('com.android.application', 'com.android.application.gradle.plugin').versionRef('android-gradle-plugin') // Compose alias('androidx-compose-bom').to('androidx.compose:compose-bom:2022.12.00') diff --git a/device-transfer/app/build.gradle b/device-transfer/app/build.gradle index e098a92e4..426e7a567 100644 --- a/device-transfer/app/build.gradle +++ b/device-transfer/app/build.gradle @@ -1,18 +1,12 @@ -apply plugin: 'com.android.application' +plugins { + id 'signal-sample-app' +} android { namespace 'org.signal.devicetransfer.app' - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - defaultConfig { applicationId "org.signal.devicetransfer.app" - versionCode 1 - versionName "1.0" - - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' @@ -20,33 +14,8 @@ android { buildConfigField "String", "LIBSIGNAL_VERSION", "\"libsignal ${libs.versions.libsignal.client.get()}\"" } - - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - - buildTypes { - debug { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), - 'proguard/proguard.cfg' - } - - release { - minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), - 'proguard/proguard.cfg' - } - } } dependencies { - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.constraintlayout - - testImplementation testLibs.junit.junit - implementation project(':device-transfer') } diff --git a/device-transfer/lib/build.gradle b/device-transfer/lib/build.gradle index cae32694f..a79703426 100644 --- a/device-transfer/lib/build.gradle +++ b/device-transfer/lib/build.gradle @@ -1,34 +1,16 @@ -apply plugin: 'com.android.library' - -repositories { - mavenCentral() +plugins { + id 'signal-library' } android { namespace 'org.signal.devicetransfer' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - } - - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } } dependencies { - implementation libs.androidx.appcompat implementation project(':core-util') implementation libs.libsignal.android api libs.greenrobot.eventbus - testImplementation testLibs.junit.junit - testImplementation testLibs.androidx.test.core testImplementation (testLibs.robolectric.robolectric) { exclude group: 'com.google.protobuf', module: 'protobuf-java' } diff --git a/donations/app/build.gradle b/donations/app/build.gradle index a9d06d3d2..e4ec0b85d 100644 --- a/donations/app/build.gradle +++ b/donations/app/build.gradle @@ -1,43 +1,17 @@ plugins { - id 'com.android.application' - id 'kotlin-android' + id 'signal-sample-app' id 'kotlin-kapt' } android { namespace 'org.signal.donations.app' - compileSdk COMPILE_SDK - defaultConfig { applicationId "org.signal.donations.app" - versionCode 1 - versionName "1.0" - multiDexEnabled true - - minSdk MINIMUM_SDK - targetSdk TARGET_SDK - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' } } dependencies { - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material.material implementation project(':donations') implementation project(':core-util') } diff --git a/donations/app/src/main/java/org/signal/donations/app/TestUtil.kt b/donations/app/src/main/java/org/signal/donations/app/TestUtil.kt index a02a7620b..a4c4862d2 100644 --- a/donations/app/src/main/java/org/signal/donations/app/TestUtil.kt +++ b/donations/app/src/main/java/org/signal/donations/app/TestUtil.kt @@ -18,5 +18,4 @@ object TestUtil : GooglePayApi.Gateway { "MASTERCARD", "VISA" ) - -} \ No newline at end of file +} diff --git a/donations/lib/build.gradle b/donations/lib/build.gradle index 7dbb1b926..c2b382765 100644 --- a/donations/lib/build.gradle +++ b/donations/lib/build.gradle @@ -1,59 +1,23 @@ plugins { - id 'com.android.library' - id 'kotlin-android' + id 'signal-library' id 'kotlin-parcelize' } android { namespace 'org.signal.donations' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - - kotlinOptions { - jvmTarget = '1.8' - } - - lintOptions { - disable 'InvalidVectorPath' - } } dependencies { - lintChecks project(':lintchecks') - implementation project(':core-util') - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.annotation - implementation libs.androidx.appcompat - - implementation libs.kotlin.stdlib.jdk8 implementation libs.kotlin.reflect implementation libs.jackson.module.kotlin implementation libs.jackson.core - testImplementation testLibs.junit.junit - testImplementation testLibs.assertj.core testImplementation (testLibs.robolectric.robolectric) { exclude group: 'com.google.protobuf', module: 'protobuf-java' } api libs.google.play.services.wallet api libs.square.okhttp3 - api libs.rxjava3.rxjava } diff --git a/donations/lib/src/main/java/org/signal/donations/CreditCardPaymentSource.kt b/donations/lib/src/main/java/org/signal/donations/CreditCardPaymentSource.kt index 8f1f01eed..6ae00b921 100644 --- a/donations/lib/src/main/java/org/signal/donations/CreditCardPaymentSource.kt +++ b/donations/lib/src/main/java/org/signal/donations/CreditCardPaymentSource.kt @@ -12,4 +12,4 @@ class CreditCardPaymentSource( override fun parameterize(): JSONObject = payload override fun getTokenId(): String = parameterize().getString("id") override fun email(): String? = null -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt b/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt index 9b230d707..1b3cc067e 100644 --- a/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt +++ b/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt @@ -218,4 +218,4 @@ class GooglePayApi( } class GooglePayException(message: String?) : Exception(message) -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/GooglePayPaymentSource.kt b/donations/lib/src/main/java/org/signal/donations/GooglePayPaymentSource.kt index e185830a7..1b5d1afcd 100644 --- a/donations/lib/src/main/java/org/signal/donations/GooglePayPaymentSource.kt +++ b/donations/lib/src/main/java/org/signal/donations/GooglePayPaymentSource.kt @@ -25,4 +25,4 @@ class GooglePayPaymentSource(private val paymentData: PaymentData) : StripeApi.P null } } -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/ResponseFieldLogger.kt b/donations/lib/src/main/java/org/signal/donations/ResponseFieldLogger.kt index 2a191b16a..0845b1d25 100644 --- a/donations/lib/src/main/java/org/signal/donations/ResponseFieldLogger.kt +++ b/donations/lib/src/main/java/org/signal/donations/ResponseFieldLogger.kt @@ -24,4 +24,4 @@ internal object ResponseFieldLogger { Log.w(TAG, "Failed to produce key map.", true) } } -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/StripeApi.kt b/donations/lib/src/main/java/org/signal/donations/StripeApi.kt index 8194ac612..b39ea6f5b 100644 --- a/donations/lib/src/main/java/org/signal/donations/StripeApi.kt +++ b/donations/lib/src/main/java/org/signal/donations/StripeApi.kt @@ -90,13 +90,15 @@ class StripeApi( Single.just(CreatePaymentIntentResult.AmountIsTooSmall(price)) } else if (Validation.isAmountTooLarge(price)) { Single.just(CreatePaymentIntentResult.AmountIsTooLarge(price)) - } else if (!Validation.supportedCurrencyCodes.contains(price.currency.currencyCode.uppercase(Locale.ROOT))) { - Single.just(CreatePaymentIntentResult.CurrencyIsNotSupported(price.currency.currencyCode)) } else { - paymentIntentFetcher - .fetchPaymentIntent(price, level) - .map { CreatePaymentIntentResult.Success(it) } - }.subscribeOn(Schedulers.io()) + if (!Validation.supportedCurrencyCodes.contains(price.currency.currencyCode.uppercase(Locale.ROOT))) { + Single.just(CreatePaymentIntentResult.CurrencyIsNotSupported(price.currency.currencyCode)) + } else { + paymentIntentFetcher + .fetchPaymentIntent(price, level) + .map { CreatePaymentIntentResult.Success(it) } + }.subscribeOn(Schedulers.io()) + } } /** @@ -231,7 +233,7 @@ class StripeApi( val tokenId = paymentSource.getTokenId() val parameters = mutableMapOf( "card[token]" to tokenId, - "type" to "card", + "type" to "card" ) return postForm("payment_methods", parameters) @@ -554,5 +556,4 @@ class StripeApi( } } } - -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/StripeIntentAccessor.kt b/donations/lib/src/main/java/org/signal/donations/StripeIntentAccessor.kt index 33fb6ca0d..29a840691 100644 --- a/donations/lib/src/main/java/org/signal/donations/StripeIntentAccessor.kt +++ b/donations/lib/src/main/java/org/signal/donations/StripeIntentAccessor.kt @@ -27,7 +27,7 @@ data class StripeIntentAccessor( * noActionRequired is a safe default for when there was no 3DS required, * in order to continue a reactive payment chain. */ - val NO_ACTION_REQUIRED = StripeIntentAccessor(ObjectType.NONE,"", "") + val NO_ACTION_REQUIRED = StripeIntentAccessor(ObjectType.NONE, "", "") private const val KEY_PAYMENT_INTENT = "payment_intent" private const val KEY_PAYMENT_INTENT_CLIENT_SECRET = "payment_intent_client_secret" @@ -51,4 +51,4 @@ data class StripeIntentAccessor( } } } -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/json/StripeIntentStatus.kt b/donations/lib/src/main/java/org/signal/donations/json/StripeIntentStatus.kt index 13fcec908..e365be416 100644 --- a/donations/lib/src/main/java/org/signal/donations/json/StripeIntentStatus.kt +++ b/donations/lib/src/main/java/org/signal/donations/json/StripeIntentStatus.kt @@ -24,4 +24,4 @@ enum class StripeIntentStatus(private val code: String) { @JsonCreator fun fromCode(code: String): StripeIntentStatus = StripeIntentStatus.values().first { it.code == code } } -} \ No newline at end of file +} diff --git a/donations/lib/src/main/java/org/signal/donations/json/StripePaymentIntent.kt b/donations/lib/src/main/java/org/signal/donations/json/StripePaymentIntent.kt index a785a9741..a1504add8 100644 --- a/donations/lib/src/main/java/org/signal/donations/json/StripePaymentIntent.kt +++ b/donations/lib/src/main/java/org/signal/donations/json/StripePaymentIntent.kt @@ -15,4 +15,4 @@ data class StripePaymentIntent @JsonCreator constructor( @JsonProperty("client_secret") val clientSecret: String, @JsonProperty("status") val status: StripeIntentStatus?, @JsonProperty("payment_method") val paymentMethod: String? -) \ No newline at end of file +) diff --git a/donations/lib/src/main/java/org/signal/donations/json/StripeSetupIntent.kt b/donations/lib/src/main/java/org/signal/donations/json/StripeSetupIntent.kt index 0d34e1582..799d360dc 100644 --- a/donations/lib/src/main/java/org/signal/donations/json/StripeSetupIntent.kt +++ b/donations/lib/src/main/java/org/signal/donations/json/StripeSetupIntent.kt @@ -16,4 +16,4 @@ data class StripeSetupIntent @JsonCreator constructor( @JsonProperty("status") val status: StripeIntentStatus, @JsonProperty("payment_method") val paymentMethod: String?, @JsonProperty("customer") val customer: String? -) \ No newline at end of file +) diff --git a/donations/lib/src/test/java/org/signal/donations/ResponseFieldLoggerTest.kt b/donations/lib/src/test/java/org/signal/donations/ResponseFieldLoggerTest.kt index f2e2f3df0..718dec68d 100644 --- a/donations/lib/src/test/java/org/signal/donations/ResponseFieldLoggerTest.kt +++ b/donations/lib/src/test/java/org/signal/donations/ResponseFieldLoggerTest.kt @@ -32,7 +32,9 @@ class ResponseFieldLoggerTest { @Test fun `Given non-empty, when I logFields, then I expect no crash`() { - ResponseFieldLogger.logFields(ObjectMapper(), """ + ResponseFieldLogger.logFields( + ObjectMapper(), + """ { "id": "asdf", "client_secret": 12345, @@ -40,6 +42,7 @@ class ResponseFieldLoggerTest { "a": "a" } } - """.trimIndent()) + """.trimIndent() + ) } -} \ No newline at end of file +} diff --git a/donations/lib/src/test/java/org/signal/donations/StripeIntentAccessorTest.kt b/donations/lib/src/test/java/org/signal/donations/StripeIntentAccessorTest.kt index 4772ed862..cbdf292e6 100644 --- a/donations/lib/src/test/java/org/signal/donations/StripeIntentAccessorTest.kt +++ b/donations/lib/src/test/java/org/signal/donations/StripeIntentAccessorTest.kt @@ -36,4 +36,4 @@ class StripeIntentAccessorTest { assertEquals(expected, result) } -} \ No newline at end of file +} diff --git a/donations/lib/src/test/java/org/signal/donations/StripeSetupIntentTest.kt b/donations/lib/src/test/java/org/signal/donations/StripeSetupIntentTest.kt index 948e1e03b..e57691d9e 100644 --- a/donations/lib/src/test/java/org/signal/donations/StripeSetupIntentTest.kt +++ b/donations/lib/src/test/java/org/signal/donations/StripeSetupIntentTest.kt @@ -67,4 +67,4 @@ class StripeSetupIntentTest { assertEquals(intent.status, StripeIntentStatus.REQUIRES_PAYMENT_METHOD) assertEquals(intent.customer, "cus_Fh6d95jDS2fVSL") } -} \ No newline at end of file +} diff --git a/glide-config/build.gradle b/glide-config/build.gradle index 70b261547..f5fe3d458 100644 --- a/glide-config/build.gradle +++ b/glide-config/build.gradle @@ -1,40 +1,13 @@ plugins { - id 'com.android.library' - id 'kotlin-android' + id 'signal-library' id 'kotlin-kapt' } android { namespace 'org.signal.glide' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' - } } dependencies { - lintChecks project(':lintchecks') - - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.annotation - implementation libs.androidx.appcompat - implementation libs.glide.glide kapt libs.glide.compiler } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 1477d0d5e..16008f0c7 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -507,6 +507,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -517,6 +522,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -696,6 +706,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1338,6 +1353,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1348,6 +1368,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1358,6 +1383,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1368,6 +1398,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1378,6 +1413,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1398,6 +1438,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1418,6 +1463,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1428,6 +1478,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1438,6 +1493,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1448,6 +1508,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1458,6 +1523,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1468,6 +1538,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1478,6 +1553,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1523,6 +1603,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1539,6 +1627,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1549,6 +1645,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1559,6 +1660,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1575,6 +1681,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1591,6 +1705,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1607,6 +1729,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1633,6 +1763,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1649,6 +1787,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1657,6 +1803,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1673,6 +1827,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1714,6 +1876,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1759,6 +1926,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1809,6 +1981,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1824,6 +2001,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1845,6 +2027,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1866,6 +2053,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1887,6 +2079,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1908,6 +2105,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1953,6 +2155,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1974,6 +2181,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -2469,6 +2681,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -2992,6 +3209,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4287,6 +4509,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4307,6 +4534,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4317,6 +4549,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4342,6 +4579,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4352,6 +4594,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4362,6 +4609,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4387,6 +4639,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4400,6 +4657,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -4416,6 +4681,17 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + @@ -4424,11 +4700,24 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -4442,6 +4731,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -4452,6 +4749,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4462,6 +4764,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4472,6 +4779,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4502,6 +4814,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4527,6 +4844,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4572,6 +4894,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4582,6 +4909,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4592,6 +4924,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4602,6 +4939,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4612,6 +4954,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4672,6 +5019,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4737,6 +5089,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4787,6 +5144,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4837,6 +5199,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4852,6 +5219,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4867,6 +5239,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -4877,6 +5254,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + diff --git a/image-editor/app/build.gradle b/image-editor/app/build.gradle index 87df661f1..161a4ae98 100644 --- a/image-editor/app/build.gradle +++ b/image-editor/app/build.gradle @@ -1,44 +1,17 @@ plugins { - id 'com.android.application' - id 'kotlin-android' + id 'signal-sample-app' id 'kotlin-kapt' } android { namespace 'org.signal.imageeditor.app' - compileSdk COMPILE_SDK - defaultConfig { applicationId "org.signal.imageeditor.app" - versionCode 1 - versionName "1.0" - multiDexEnabled true - - minSdk MINIMUM_SDK - targetSdk TARGET_SDK - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' } } dependencies { - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.material.material - implementation project(':core-util') implementation project(':image-editor') implementation libs.glide.glide diff --git a/image-editor/app/src/test/java/com/example/imageeditor/app/ExampleUnitTest.kt b/image-editor/app/src/test/java/com/example/imageeditor/app/ExampleUnitTest.kt index 03c24560b..915950b9d 100644 --- a/image-editor/app/src/test/java/com/example/imageeditor/app/ExampleUnitTest.kt +++ b/image-editor/app/src/test/java/com/example/imageeditor/app/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package com.example.imageeditor.app +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/image-editor/lib/build.gradle b/image-editor/lib/build.gradle index 20045b8a4..c9d5223e4 100644 --- a/image-editor/lib/build.gradle +++ b/image-editor/lib/build.gradle @@ -1,39 +1,11 @@ plugins { - id 'com.android.library' - id 'kotlin-android' + id 'signal-library' } android { namespace 'org.signal.imageeditor' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - - kotlinOptions { - jvmTarget = '1.8' - } } dependencies { - lintChecks project(':lintchecks') - implementation project(':core-util') - - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.annotation - implementation libs.androidx.appcompat } \ No newline at end of file diff --git a/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/SelectedElementGuideRenderer.kt b/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/SelectedElementGuideRenderer.kt index 190cee2dc..35706b5c3 100644 --- a/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/SelectedElementGuideRenderer.kt +++ b/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/SelectedElementGuideRenderer.kt @@ -4,9 +4,9 @@ import android.graphics.Color import android.graphics.DashPathEffect import android.graphics.Paint import android.graphics.Path -import org.signal.core.util.DimensionUnit import android.os.Parcel import android.os.Parcelable +import org.signal.core.util.DimensionUnit import org.signal.imageeditor.core.Bounds import org.signal.imageeditor.core.Renderer import org.signal.imageeditor.core.RendererContext @@ -15,10 +15,14 @@ class SelectedElementGuideRenderer : Renderer { private val allPointsOnScreen = FloatArray(8) private val allPointsInLocalCords = floatArrayOf( - Bounds.LEFT, Bounds.TOP, - Bounds.RIGHT, Bounds.TOP, - Bounds.RIGHT, Bounds.BOTTOM, - Bounds.LEFT, Bounds.BOTTOM + Bounds.LEFT, + Bounds.TOP, + Bounds.RIGHT, + Bounds.TOP, + Bounds.RIGHT, + Bounds.BOTTOM, + Bounds.LEFT, + Bounds.BOTTOM ) private val circleRadius = DimensionUnit.DP.toPixels(5f) diff --git a/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/TrashRenderer.kt b/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/TrashRenderer.kt index 4373d6186..c5f2dbde7 100644 --- a/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/TrashRenderer.kt +++ b/image-editor/lib/src/main/java/org/signal/imageeditor/core/renderers/TrashRenderer.kt @@ -67,7 +67,7 @@ internal class TrashRenderer : InvalidateableRenderer, Renderer, Parcelable { rendererContext.canvas.drawCircle(buttonCenter[0], buttonCenter[1], diameter / 2f, shadePaint) rendererContext.canvas.drawCircle(buttonCenter[0], buttonCenter[1], diameter / 2f, outlinePaint) rendererContext.canvas.translate(bounds.centerX(), bounds.bottom - diameterLarge / 2f - padBottom) - rendererContext.canvas.translate(- (trashSize / 2f), - (trashSize / 2f)) + rendererContext.canvas.translate(-(trashSize / 2f), -(trashSize / 2f)) trash.draw(rendererContext.canvas) rendererContext.canvas.restore() diff --git a/libsignal/service/build.gradle b/libsignal/service/build.gradle index 84d904054..79457c7b5 100644 --- a/libsignal/service/build.gradle +++ b/libsignal/service/build.gradle @@ -22,11 +22,6 @@ compileJava { options.release = 8 } -repositories { - mavenCentral() - mavenLocal() -} - configurations { ideaTestFixturesImplementation { extendsFrom testFixturesImplementation; canBeConsumed false; canBeResolved true } } diff --git a/lintchecks/build.gradle b/lintchecks/build.gradle index 952c57ccb..3274d1daf 100644 --- a/lintchecks/build.gradle +++ b/lintchecks/build.gradle @@ -1,10 +1,5 @@ apply plugin: 'java-library' -repositories { - google() - mavenCentral() -} - dependencies { compileOnly lintLibs.lint.api compileOnly lintLibs.lint.checks diff --git a/paging/app/build.gradle b/paging/app/build.gradle index 1d7e8c158..5a003895b 100644 --- a/paging/app/build.gradle +++ b/paging/app/build.gradle @@ -1,36 +1,15 @@ -apply plugin: 'com.android.application' +plugins { + id 'signal-sample-app' +} android { namespace 'org.signal.pagingtest' - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - defaultConfig { applicationId "org.signal.pagingtest" - versionCode 1 - versionName "1.0" - - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION } } dependencies { - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.constraintlayout - - testImplementation testLibs.junit.junit - implementation project(':paging') } \ No newline at end of file diff --git a/paging/lib/build.gradle b/paging/lib/build.gradle index 1fd9c09f8..aa3b1d694 100644 --- a/paging/lib/build.gradle +++ b/paging/lib/build.gradle @@ -1,29 +1,11 @@ -apply plugin: 'com.android.library' +plugins { + id 'signal-library' +} android { namespace 'org.signal.paging' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } } dependencies { - implementation libs.androidx.appcompat - implementation libs.androidx.multidex - implementation libs.material.material - implementation libs.rxjava3.rxandroid - implementation libs.rxjava3.rxjava implementation project(':core-util') - testImplementation testLibs.junit.junit -} \ No newline at end of file +} diff --git a/photoview/build.gradle b/photoview/build.gradle index f5dc4bd48..5fde00f77 100644 --- a/photoview/build.gradle +++ b/photoview/build.gradle @@ -1,64 +1,11 @@ plugins { - id 'com.android.library' - id 'com.google.protobuf' - id 'kotlin-android' - id 'kotlin-kapt' + id 'signal-library' } android { namespace 'com.github.chrisbanes.photoview' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' - } -} - -protobuf { - protoc { - artifact = 'com.google.protobuf:protoc:3.18.0' - } - generateProtoTasks { - all().each { task -> - task.builtins { - java { - option "lite" - } - } - } - } } dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' - lintChecks project(':lintchecks') - - coreLibraryDesugaring libs.android.tools.desugar - - api libs.androidx.annotation - - implementation libs.androidx.core.ktx - implementation libs.androidx.lifecycle.common.java8 - implementation libs.google.protobuf.javalite - implementation libs.androidx.sqlite - implementation libs.rxjava3.rxjava - - testImplementation testLibs.junit.junit - testImplementation testLibs.mockito.core - testImplementation (testLibs.robolectric.robolectric) { - exclude group: 'com.google.protobuf', module: 'protobuf-java' - } } diff --git a/qr/app/build.gradle b/qr/app/build.gradle index f085fd3c8..0933d86b6 100644 --- a/qr/app/build.gradle +++ b/qr/app/build.gradle @@ -1,4 +1,6 @@ -apply from: "$rootProject.projectDir/signalModuleApp.gradle" +plugins { + id 'signal-sample-app' +} android { namespace 'org.signal.qrtest' @@ -10,9 +12,6 @@ android { dependencies { implementation project(':qr') - implementation libs.rxjava3.rxjava - implementation libs.rxjava3.rxandroid - implementation libs.rxjava3.rxkotlin implementation libs.google.zxing.android.integration implementation libs.google.zxing.core diff --git a/qr/lib/build.gradle b/qr/lib/build.gradle index 74d962996..94d7c62e4 100644 --- a/qr/lib/build.gradle +++ b/qr/lib/build.gradle @@ -1,10 +1,15 @@ -apply from: "$rootProject.projectDir/signalModule.gradle" +plugins { + id 'signal-library' +} android { namespace 'org.signal.qr' } + dependencies { + implementation project(':core-util') + implementation libs.androidx.camera.core implementation libs.androidx.camera.camera2 implementation libs.androidx.camera.lifecycle @@ -15,6 +20,4 @@ dependencies { implementation libs.google.guava.android implementation libs.google.zxing.android.integration implementation libs.google.zxing.core - - implementation libs.rxjava3.rxjava } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 274bb3bbd..f0094b527 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,34 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } + includeBuild("build-logic") +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + mavenLocal() + maven { + url "https://raw.githubusercontent.com/signalapp/maven/master/sqlcipher/release/" + content { + includeGroupByRegex "org\\.signal.*" + } + } + maven { + url "https://dl.cloudsmith.io/qxAgwaeEE1vN8aLU/mobilecoin/mobilecoin/maven/" + } + jcenter { + content { + includeVersion "mobi.upod", "time-duration-picker", "1.1.3" + } + } + } +} + enableFeaturePreview('VERSION_CATALOGS') include ':app' diff --git a/signalModuleApp.gradle b/signalModuleApp.gradle deleted file mode 100644 index f81fd4588..000000000 --- a/signalModuleApp.gradle +++ /dev/null @@ -1,49 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'org.jlleitschuh.gradle.ktlint' - -android { - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - versionCode 1 - versionName "1.0" - - minSdkVersion 21 - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - kotlinOptions { - jvmTarget = '1.8' - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } -} - -ktlint { - // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 - version = "0.47.1" -} - -dependencies { - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.activity.ktx - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.constraintlayout - - implementation libs.kotlin.stdlib.jdk8 - - testImplementation testLibs.junit.junit - - implementation project(':core-util') - - ktlintRuleset libs.ktlint.twitter.compose -} \ No newline at end of file diff --git a/sms-exporter/app/build.gradle b/sms-exporter/app/build.gradle index 06161b997..47c18ec2f 100644 --- a/sms-exporter/app/build.gradle +++ b/sms-exporter/app/build.gradle @@ -1,4 +1,6 @@ -apply from: "$rootProject.projectDir/signalModuleApp.gradle" +plugins { + id 'signal-sample-app' +} android { namespace 'org.signal.smsexporter.app' @@ -9,13 +11,5 @@ android { } dependencies { - implementation libs.androidx.core.ktx - implementation libs.androidx.appcompat - implementation libs.androidx.core.role - implementation libs.material.material - implementation libs.rxjava3.rxjava - implementation libs.rxjava3.rxandroid - implementation libs.rxjava3.rxkotlin - implementation project(':core-util') implementation project(':sms-exporter') } diff --git a/sms-exporter/lib/build.gradle b/sms-exporter/lib/build.gradle index 7884e4617..5f20e25ad 100644 --- a/sms-exporter/lib/build.gradle +++ b/sms-exporter/lib/build.gradle @@ -1,30 +1,14 @@ -apply from: "$rootProject.projectDir/signalModule.gradle" +plugins { + id 'signal-library' +} android { namespace 'org.signal.smsexporter' } dependencies { - lintChecks project(':lintchecks') - implementation project(':core-util') - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.annotation - implementation libs.androidx.appcompat implementation libs.androidx.core.role implementation libs.android.smsmms - implementation libs.rxjava3.rxjava - implementation libs.rxjava3.rxandroid - implementation libs.rxjava3.rxkotlin - - testImplementation testLibs.junit.junit - testImplementation testLibs.mockito.core - testImplementation testLibs.mockito.android - testImplementation testLibs.mockito.kotlin - testImplementation testLibs.robolectric.robolectric - testImplementation testLibs.androidx.test.core - testImplementation testLibs.androidx.test.core.ktx } \ No newline at end of file diff --git a/spinner/app/build.gradle b/spinner/app/build.gradle index e85352096..df44d15e9 100644 --- a/spinner/app/build.gradle +++ b/spinner/app/build.gradle @@ -1,63 +1,18 @@ plugins { - id 'com.android.application' - id 'kotlin-android' - id 'org.jlleitschuh.gradle.ktlint' -} - -repositories { - maven { - url "https://raw.githubusercontent.com/signalapp/maven/master/sqlcipher/release/" - content { - includeGroupByRegex "org\\.signal.*" - } - } -} - -ktlint { - // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 - version = "0.47.1" + id 'signal-sample-app' } android { namespace 'org.signal.spinnertest' - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - defaultConfig { applicationId "org.signal.spinnertest" - versionCode 1 - versionName "1.0" - - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - kotlinOptions { - jvmTarget = '1.8' - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION } } dependencies { - coreLibraryDesugaring libs.android.tools.desugar - - implementation libs.androidx.core.ktx - implementation libs.androidx.activity.ktx - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.multidex - implementation libs.androidx.constraintlayout - implementation libs.signal.android.database.sqlcipher - implementation libs.androidx.sqlite - - testImplementation testLibs.junit.junit - implementation project(':spinner') + + implementation libs.androidx.sqlite + implementation libs.signal.android.database.sqlcipher } \ No newline at end of file diff --git a/spinner/lib/build.gradle b/spinner/lib/build.gradle index 8e01f67b1..74c86c9eb 100644 --- a/spinner/lib/build.gradle +++ b/spinner/lib/build.gradle @@ -1,45 +1,17 @@ plugins { - id 'com.android.library' - id 'kotlin-android' - id 'org.jlleitschuh.gradle.ktlint' + id 'signal-library' } android { namespace 'org.signal.spinner' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - - kotlinOptions { - jvmTarget = '1.8' - } -} - -ktlint { - // Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507 - version = "0.47.1" } dependencies { - implementation libs.jknack.handlebars - - implementation libs.androidx.appcompat - implementation libs.material.material - implementation libs.androidx.multidex - implementation libs.androidx.sqlite implementation project(':core-util') - testImplementation testLibs.junit.junit + implementation libs.jknack.handlebars implementation libs.nanohttpd.webserver + implementation libs.androidx.sqlite + + testImplementation testLibs.junit.junit } \ No newline at end of file diff --git a/sticky-header-grid/build.gradle b/sticky-header-grid/build.gradle index 5b6100926..ef55b26f3 100644 --- a/sticky-header-grid/build.gradle +++ b/sticky-header-grid/build.gradle @@ -1,64 +1,11 @@ plugins { - id 'com.android.library' - id 'com.google.protobuf' - id 'kotlin-android' - id 'kotlin-kapt' + id 'signal-library' } android { namespace 'com.codewaves.stickyheadergrid' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - multiDexEnabled true - } - - compileOptions { - coreLibraryDesugaringEnabled true - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } - kotlinOptions { - jvmTarget = '1.8' - } -} - -protobuf { - protoc { - artifact = 'com.google.protobuf:protoc:3.18.0' - } - generateProtoTasks { - all().each { task -> - task.builtins { - java { - option "lite" - } - } - } - } } dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' - lintChecks project(':lintchecks') - - coreLibraryDesugaring libs.android.tools.desugar - - api libs.androidx.annotation - - implementation libs.androidx.core.ktx - implementation libs.androidx.lifecycle.common.java8 - implementation libs.google.protobuf.javalite - implementation libs.androidx.sqlite - implementation libs.rxjava3.rxjava - - testImplementation testLibs.junit.junit - testImplementation testLibs.mockito.core - testImplementation (testLibs.robolectric.robolectric) { - exclude group: 'com.google.protobuf', module: 'protobuf-java' - } } diff --git a/video/build.gradle b/video/build.gradle index f3855f6c5..47e27bb2d 100644 --- a/video/build.gradle +++ b/video/build.gradle @@ -1,27 +1,12 @@ -apply plugin: 'com.android.library' +plugins { + id 'signal-library' +} android { namespace 'org.signal.video' - - buildToolsVersion BUILD_TOOL_VERSION - compileSdkVersion COMPILE_SDK - - defaultConfig { - minSdkVersion MINIMUM_SDK - targetSdkVersion TARGET_SDK - } - - compileOptions { - sourceCompatibility JAVA_VERSION - targetCompatibility JAVA_VERSION - } } dependencies { - lintChecks project(':lintchecks') - - api libs.androidx.annotation - implementation project(':core-util') implementation(libs.bundles.mp4parser) {