diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2667330ac..3f60d69c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,46 +9,37 @@ jobs: name: Assemble runs-on: ubuntu-latest timeout-minutes: 25 - env: - JAVA_TOOL_OPTIONS: -Xmx6g - GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false -Dkotlin.compiler.execution.strategy=in-process steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 - with: - java-version: 11 - - uses: actions/cache@v2 + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v2 + - uses: actions/setup-java@v4 with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + distribution: 'zulu' + java-version: '17' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - name: Assemble run: ./gradlew assemble working-directory: . - - name: Cleanup Gradle Cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties detekt: name: Detekt runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v2 + - uses: actions/setup-java@v4 with: - java-version: 11 + distribution: 'zulu' + java-version: '17' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - name: Detekt run: ./gradlew detekt --stacktrace working-directory: . - name: Upload failure reports if: failure() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: path: '**/build/reports' @@ -56,103 +47,92 @@ jobs: name: Unit tests runs-on: ubuntu-latest timeout-minutes: 20 - env: - JAVA_TOOL_OPTIONS: -Xmx4g - GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false -Dkotlin.compiler.execution.strategy=in-process steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v2 + - uses: actions/setup-java@v4 with: - java-version: 11 - - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + distribution: 'zulu' + java-version: '17' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - name: Unit tests run: ./gradlew testDebugUnitTest working-directory: . - name: Upload failure reports if: failure() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: unit-test-reports path: '**/build/reports' - - name: Cleanup Gradle Cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties instrumentation-tests: - runs-on: macOS-latest - timeout-minutes: 60 - env: - JAVA_TOOL_OPTIONS: -Xmx4g - GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false -Dkotlin.compiler.execution.strategy=in-process - strategy: - fail-fast: false - matrix: - api-level: [22,25,29] - name: Instrumentation tests [API=${{ matrix.api-level }}] + name: Instrumentation tests + runs-on: macos-13 + timeout-minutes: 30 steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: - java-version: 11 - - uses: actions/cache@v2 + distribution: 'zulu' + java-version: '17' + - uses: gradle/wrapper-validation-action@v1 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + - name: Pre build sources before launching emulator + run: ./gradlew compileDebugAndroidTestSources + - name: AVD cache + uses: actions/cache@v4 + id: avd-cache with: path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + ~/.android/avd/* + ~/.android/adb* + key: avd-29-ribs + - name: Create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + # Use API 29 https://github.com/ReactiveCircus/android-emulator-runner/issues/222 + api-level: 29 + arch: x86_64 + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." - name: Instrumentation tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: ${{ matrix.api-level }} - arch: x86 - script: ./gradlew connectedCheck - - - name: Upload failure reports + # Use API 29 https://github.com/ReactiveCircus/android-emulator-runner/issues/222 + api-level: 29 + arch: x86_64 + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: | + adb logcat > logcat.out & + ./gradlew connectedCheck + - name: Upload failed instrumentation artifacts if: failure() - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: instrumentation-reports-api-${{ matrix.api-level }} - path: '**/build/reports' - - - name: Cleanup Gradle Cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties - + name: instrumentation-failures + path: | + **/build/reports + logcat.out verify-publication: name: Verify publication runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 - with: - java-version: 11 - - uses: actions/cache@v2 + - uses: actions/checkout@v4 + - uses: gradle/wrapper-validation-action@v2 + - uses: actions/setup-java@v4 with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + distribution: 'zulu' + java-version: '17' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 - name: Verify run: ./gradlew publishToMavenLocal working-directory: . - - name: Cleanup Gradle Cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties diff --git a/build.gradle b/build.gradle index ce2c29c36..b7be93a03 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,6 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + buildscript { apply from: 'gradle/dependencies.gradle' @@ -11,7 +14,6 @@ buildscript { dependencies { classpath deps.build.gradlePlugins.android classpath deps.build.gradlePlugins.kotlin - classpath deps.build.gradlePlugins.mavenPublish classpath deps.build.gradlePlugins.detekt classpath deps.build.gradlePlugins.jacoco } @@ -40,13 +42,14 @@ subprojects { maven { url "https://www.jitpack.io" } } - configurations.all { + configurations.configureEach { resolutionStrategy.eachDependency { } } - tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.name + tasks.withType(KotlinCompile).configureEach { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + freeCompilerArgs.add("-Xopt-in=com.badoo.ribs.annotation.ExperimentalApi") } } } diff --git a/detekt.yml b/detekt.yml index 5e8418305..c13b8cb6c 100644 --- a/detekt.yml +++ b/detekt.yml @@ -178,6 +178,7 @@ naming: FunctionNaming: active: true functionPattern: '^([a-z$][a-zA-Z$0-9]*)|(`.*`)$' + ignoreAnnotated: [ 'Composable' ] VariableNaming: active: true variablePattern: '^(_)?[a-z$][a-zA-Z$0-9]*$' diff --git a/documentation/index.md b/documentation/index.md index 7ceadff75..424991209 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -62,7 +62,6 @@ - Demo apps - [Tooling](extras/tooling.md) - [Minimal reactive API](extras/minimal-reactive-api.md) -- Template plugin ## Experimental features diff --git a/gradle.properties b/gradle.properties index 4d33e348d..b273445d1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,21 +10,13 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512M +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.caching=true org.gradle.parallel=true -GROUP=com.badoo.ribs VERSION_NAME=0.40.2 -POM_DESCRIPTION=Badoo RIBs is an evolution of Uber RIBs, with notable differences and additions -POM_URL=https://github.com/badoo/RIBs/ -POM_SCM_URL=https://github.com/badoo/RIBs/ -POM_SCM_CONNECTION=scm:git:git://github.com/badoo/RIBs.git -POM_SCM_DEV_CONNECTION=scm:git:ssh://git@github.com/badoo/RIBs.git -POM_LICENCE_NAME=The Apache Software License, Version 2.0 -POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt -POM_LICENCE_DIST=repo -POM_DEVELOPER_ID=badoo -POM_DEVELOPER_NAME=Badoo Trading Limited android.useAndroidX=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gradle/code-coverage.gradle b/gradle/code-coverage.gradle index 913ad4202..e4bda4e86 100644 --- a/gradle/code-coverage.gradle +++ b/gradle/code-coverage.gradle @@ -2,7 +2,7 @@ apply plugin: 'jacoco' jacoco { toolVersion = deps.versions.jacoco - reportsDir = file("$buildDir/codeCoverageReports") + reportsDirectory = file("$buildDir/codeCoverageReports") } tasks.withType(Test) { @@ -52,10 +52,6 @@ task debugCombinedCodeCoverageReport(type: JacocoReport, dependsOn: ['testDebugU group = "Code coverage" description = "Generate coverage reports that combine both Unit and UI tests for debug builds" - reports { - html.enabled = true - } - classDirectories.setFrom(files([javaClasses, kotlinClasses])) sourceDirectories.setFrom(files([javaSourceDirectory, kotlinSourceDirectory])) executionData(files([unitTestsData, androidTestsData])) @@ -66,10 +62,6 @@ task debugUnitTestCodeCoverageReport(type: JacocoReport, dependsOn: ['testDebugU group = "Code coverage" description = "Generate coverage reports on Unit tests for debug builds" - reports { - html.enabled = true - } - classDirectories.setFrom(files([javaClasses, kotlinClasses])) sourceDirectories.setFrom(files([javaSourceDirectory, kotlinSourceDirectory])) executionData(files([unitTestsData])) @@ -80,10 +72,6 @@ task debugUiTestCodeCoverageReport(type: JacocoReport, dependsOn: ['createDebugC group = "Code coverage" description = "Generate coverage reports on UI tests for debug builds" - reports { - html.enabled = true - } - classDirectories.setFrom(files([javaClasses, kotlinClasses])) sourceDirectories.setFrom(files([javaSourceDirectory, kotlinSourceDirectory])) executionData(files([androidTestsData])) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 0f7a1a48f..7a67f902e 100755 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -5,17 +5,15 @@ while (!rootDirectory.listFiles().any { it.isDirectory() && it.name == ".github" rootDirectory = rootDirectory.parentFile } -def kotlinVersion = '1.8.10' +def kotlinVersion = '1.9.21' def versions = [ dagger : '2.45', - intellij : '212.5457.46', - intellij_kotlin : '212-1.6.21-release-334-AS5457.46', kotlin : kotlinVersion, mviCore : '1.4.0', - robolectric : '4.8.1', - composeBom : '2022.12.00', - composeCompiler : '1.4.4', + robolectric : '4.13', + composeBom : '2023.10.01', + composeCompiler : '1.5.7', materialVersion : '1.4.0', // https://github.com/material-components/material-components-android/releases androidxAnnotationVersion : '1.2.0', // https://developer.android.com/jetpack/androidx/releases/annotation @@ -37,7 +35,7 @@ def versions = [ androidxPercentLayoutVersion : '1.0.0', // https://developer.android.com/jetpack/androidx/releases/percentlayout androidxRecyclerViewVersion : '1.1.0', // https://developer.android.com/jetpack/androidx/releases/recyclerview androidxSavedStateVersion : '1.2.0', // https://developer.android.com/jetpack/androidx/releases/savedstate - androidxTestVersion : '1.4.0', // https://developer.android.com/jetpack/androidx/releases/test + androidxTestVersion : '1.5.0', // https://developer.android.com/jetpack/androidx/releases/test androidxTestUiAutoVersion : '2.2.0', retrofitVersion : '2.9.0', okhttp : '3.14.7', @@ -54,23 +52,19 @@ def apt = [ javaxInject : "javax.inject:javax.inject:1", ] -def agp = 'com.android.tools.build:gradle:7.2.2' +def agp = 'com.android.tools.build:gradle:8.2.2' def build = [ - compileSdk : 33, + compileSdk : 34, gradlePluginsUrl: "https://plugins.gradle.org/m2/", ci : 'true' == System.getenv('CI'), minSdk : 21, - targetSdk : 32, + targetSdk : 33, guava : "com.google.guava:guava:20.0", - commonsLang : "commons-lang:commons-lang:2.6", - intellijPlugin : "org.jetbrains.intellij:org.jetbrains.intellij.gradle.plugin:1.1.4", - kotlinIdeaPlugin: "org.jetbrains.kotlin:${versions.intellij_kotlin}", gradlePlugins : [ android : agp, kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}", - mavenPublish: 'com.vanniktech:gradle-maven-publish-plugin:0.15.1', - detekt : 'io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.17.1', + detekt : 'io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.21.0', jacoco : "org.jacoco:org.jacoco.core:${versions.jacoco}" ] ] @@ -102,16 +96,13 @@ def test = [ junitParams : "org.junit.jupiter:junit-jupiter-params:${versions.junit5}", junitEngine : "org.junit.jupiter:junit-jupiter-engine:${versions.junit5}", junitVintage : "org.junit.vintage:junit-vintage-engine:${versions.junit5}", - byteBuddy : "net.bytebuddy:byte-buddy:1.10.21", - mockito : "org.mockito:mockito-core:2.24.0", - mockitoKotlin : "org.mockito.kotlin:mockito-kotlin:3.2.0", + mockitoKotlin : "org.mockito.kotlin:mockito-kotlin:5.4.0", assertj : "org.assertj:assertj-core:2.9.1", // 2.x version is Android compatible - compileTesting: "com.google.testing.compile:compile-testing:0.11", ] def androidTest = [ - espresso : 'androidx.test.espresso:espresso-core:3.4.0', - espressoIntents: 'androidx.test.espresso:espresso-intents:3.4.0', + espresso : 'androidx.test.espresso:espresso-core:3.5.0', + espressoIntents: 'androidx.test.espresso:espresso-intents:3.5.0', runner : "androidx.test:runner:${versions.androidxTestVersion}", rules : "androidx.test:rules:${versions.androidxTestVersion}" ] @@ -127,10 +118,6 @@ def external = [ rxrelay2 : "com.jakewharton.rxrelay2:rxrelay:2.1.0", rxandroid2 : "io.reactivex.rxjava2:rxandroid:2.1.1", roboelectricBase : "org.robolectric:robolectric:${versions.robolectric}", - rxbinding : 'com.jakewharton.rxbinding2:rxbinding:2.2.0', - leakcanaryDebug : 'com.squareup.leakcanary:leakcanary-android:1.6.3', - apacheCommons : 'org.apache.commons:commons-lang3:3.0', - gson : 'com.google.code.gson:gson:2.8.5', coil : "io.coil-kt:coil:${versions.coil}", leakCanary : "com.squareup.leakcanary:leakcanary-android:${versions.leakCanary}", appyxCustomisations: "com.bumble.appyx:customisations:${versions.appyx}", diff --git a/gradle/gradle-mvn-push.gradle b/gradle/gradle-mvn-push.gradle index ac46fbad3..8eb8529d7 100755 --- a/gradle/gradle-mvn-push.gradle +++ b/gradle/gradle-mvn-push.gradle @@ -1,6 +1,3 @@ -version = VERSION_NAME -group = GROUP - def getReleaseRepositoryUrl() { return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL : "https://oss.sonatype.org/service/local/staging/deploy/maven2/" @@ -11,22 +8,57 @@ def getSnapshotRepositoryUrl() { : "https://oss.sonatype.org/content/repositories/snapshots/" } -apply plugin: "com.vanniktech.maven.publish" +apply plugin: "maven-publish" -publishing { - repositories { - maven { - url = version.endsWith('SNAPSHOT') ? getSnapshotRepositoryUrl() : getReleaseRepositoryUrl() +android { + publishing { + singleVariant("release") { + withSourcesJar() + withJavadocJar() } } } -mavenPublish { - releaseSigningEnabled false -} +afterEvaluate { + publishing { + repositories { + maven { + url = version.endsWith('SNAPSHOT') ? getSnapshotRepositoryUrl() : getReleaseRepositoryUrl() + } + } -project.afterEvaluate { - project.tasks.named("androidSourcesJar").configure { - from project.android.sourceSets.main.java.srcDirs + publications { + release(MavenPublication) { + afterEvaluate { + from components.release + } + groupId = "com.badoo.ribs" + version = VERSION_NAME + + pom { + name.set("MVICore") + description.set("Badoo RIBs is an evolution of Uber RIBs, with notable differences and additions") + url.set("https://github.com/badoo/RIBs/") + licenses { + license { + name.set("The Apache Software License, Version 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + } + } + developers { + developer { + id.set("badoo") + name.set("Badoo Trading Limited") + } + } + scm { + connection.set("scm:git:git://github.com/badoo/RIBs.git") + developerConnection.set("scm:git:ssh://git@github.com/badoo/RIBs.git") + url.set("https://github.com/badoo/RIBs/") + } + } + } + } } } + diff --git a/gradle/utils.gradle b/gradle/utils.gradle index 10db1a585..f4e3be774 100755 --- a/gradle/utils.gradle +++ b/gradle/utils.gradle @@ -37,7 +37,6 @@ ext.junitTestImplementation = { it -> testImplementation deps.test.junitParams testRuntimeOnly deps.test.junitEngine testImplementation deps.test.junitVintage - testImplementation deps.test.byteBuddy testImplementation project(':internal:junitextensions') } } @@ -79,6 +78,11 @@ private def configureAndroidModule(Project project) { } } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + project.afterEvaluate { project.android.kotlinOptions.freeCompilerArgs += "-Xopt-in=com.badoo.ribs.annotation.ExperimentalApi" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 063e574e6..5fbdbe6a7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip diff --git a/internal/junitextensions/build.gradle b/internal/junitextensions/build.gradle index 54517642b..2cca1259d 100644 --- a/internal/junitextensions/build.gradle +++ b/internal/junitextensions/build.gradle @@ -8,7 +8,15 @@ dependencies { } android { + namespace 'com.badoo.ribs.internal.junitextensions' + packagingOptions { - exclude 'META-INF/LICENSE*.*' + jniLibs { + excludes += ['META-INF/LICENSE*.*'] + } + resources { + excludes += ['META-INF/LICENSE*.*'] + } } } + diff --git a/internal/junitextensions/src/main/AndroidManifest.xml b/internal/junitextensions/src/main/AndroidManifest.xml deleted file mode 100644 index cc3069585..000000000 --- a/internal/junitextensions/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-base-test-activity/build.gradle b/libraries/rib-base-test-activity/build.gradle index 4f9c33639..afcf812d6 100644 --- a/libraries/rib-base-test-activity/build.gradle +++ b/libraries/rib-base-test-activity/build.gradle @@ -1,6 +1,8 @@ configureAndroidLibrary(project) android { + namespace 'com.badoo.ribs.test.activity' + defaultConfig { versionCode 1 versionName '1.0' diff --git a/libraries/rib-base-test-activity/src/main/AndroidManifest.xml b/libraries/rib-base-test-activity/src/main/AndroidManifest.xml index d7ab8e207..cceb5a314 100644 --- a/libraries/rib-base-test-activity/src/main/AndroidManifest.xml +++ b/libraries/rib-base-test-activity/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ + xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/libraries/rib-base-test-rx2/build.gradle b/libraries/rib-base-test-rx2/build.gradle index 93a507a69..7def029a4 100644 --- a/libraries/rib-base-test-rx2/build.gradle +++ b/libraries/rib-base-test-rx2/build.gradle @@ -1,6 +1,8 @@ configureAndroidLibrary(project) android { + namespace 'com.badoo.ribs.test.rx2' + defaultConfig { versionCode 1 versionName '1.0' @@ -22,7 +24,7 @@ dependencies { api deps.external.rxjava2 api deps.external.rxrelay2 - implementation deps.test.mockito + implementation deps.test.mockitoKotlin } apply from: rootProject.file('gradle/gradle-mvn-push.gradle') diff --git a/libraries/rib-base-test-rx2/src/main/AndroidManifest.xml b/libraries/rib-base-test-rx2/src/main/AndroidManifest.xml deleted file mode 100644 index 4dca1ac38..000000000 --- a/libraries/rib-base-test-rx2/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt b/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt index 8f9838571..38f6b98fb 100644 --- a/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt +++ b/libraries/rib-base-test-rx2/src/main/java/com/badoo/common/ribs/rx2/InteractorTestHelper.kt @@ -10,10 +10,9 @@ import com.jakewharton.rxrelay2.PublishRelay import com.jakewharton.rxrelay2.Relay import io.reactivex.ObservableSource import io.reactivex.Observer -import org.mockito.ArgumentMatchers.any -import org.mockito.Mockito -import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` as whenever +import org.mockito.kotlin.any +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever @Deprecated("Use RibInteractorTestHelper") inline fun createInteractorTestHelper( @@ -29,7 +28,7 @@ inline fun Interactor.mockIO( inputRelay: Relay = PublishRelay.create(), outputRelay: Relay = PublishRelay.create() ) where R : Rib, R : Connectable { - val rib = mock(R::class.java).apply { + val rib = mock().apply { whenever(input).thenReturn(inputRelay) whenever(output).thenReturn(outputRelay) } @@ -38,9 +37,9 @@ inline fun Interactor.mockIO( @Deprecated("Use RibInteractorTestHelper") inline fun Relay.subscribedView(): RView where RView : RibView, RView : ObservableSource = - mock(RView::class.java).apply { - Mockito.`when`(this.androidView).thenReturn(mock(ViewGroup::class.java)) - Mockito.`when`(this.subscribe(any())).thenAnswer { + mock().apply { + whenever(this.androidView).thenReturn(mock()) + whenever(this.subscribe(any())).thenAnswer { val observer = it.getArgument>(0) this@subscribedView.subscribe(observer) } diff --git a/libraries/rib-base-test/build.gradle b/libraries/rib-base-test/build.gradle index 282d3d3dd..95a8c6a6a 100644 --- a/libraries/rib-base-test/build.gradle +++ b/libraries/rib-base-test/build.gradle @@ -1,6 +1,8 @@ configureAndroidLibrary(project) android { + namespace 'com.badoo.ribs.test' + defaultConfig { versionCode 1 versionName '1.0' @@ -16,8 +18,7 @@ android { dependencies { compileOnly project(':libraries:rib-base') - - implementation deps.test.mockito + implementation deps.test.mockitoKotlin } apply from: rootProject.file('gradle/gradle-mvn-push.gradle') diff --git a/libraries/rib-base-test/src/main/AndroidManifest.xml b/libraries/rib-base-test/src/main/AndroidManifest.xml deleted file mode 100644 index 2e8696f91..000000000 --- a/libraries/rib-base-test/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt b/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt index 8a7ff8217..b252d10da 100644 --- a/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt +++ b/libraries/rib-base-test/src/main/java/com/badoo/ribs/test/InteractorTestHelper.kt @@ -9,7 +9,7 @@ import com.badoo.ribs.core.modality.BuildContext import com.badoo.ribs.core.modality.BuildParams import com.badoo.ribs.core.view.RibView import com.badoo.ribs.core.view.ViewFactory -import org.mockito.Mockito.mock +import org.mockito.kotlin.mock @Deprecated("Use RibInteractorTestHelper") class InteractorTestHelper( @@ -60,7 +60,7 @@ class InteractorTestHelper( buildContext = BuildContext.root(savedInstanceState = null) ) as Node node.onCreate() - node.onCreateView(mock(RibView::class.java)) + node.onCreateView(mock()) node.onAttachToView() block(node) node.onDetachFromView() diff --git a/libraries/rib-base/build.gradle b/libraries/rib-base/build.gradle index db5382827..08daa0a5a 100644 --- a/libraries/rib-base/build.gradle +++ b/libraries/rib-base/build.gradle @@ -2,6 +2,10 @@ configureAndroidLibrary(project) apply from: rootProject.file('gradle/code-coverage.gradle') +android { + namespace 'com.badoo.ribs.base' +} + dependencies { api deps.android.appCompat diff --git a/libraries/rib-base/src/androidTest/AndroidManifest.xml b/libraries/rib-base/src/androidTest/AndroidManifest.xml index b12780686..bf141c50d 100644 --- a/libraries/rib-base/src/androidTest/AndroidManifest.xml +++ b/libraries/rib-base/src/androidTest/AndroidManifest.xml @@ -1,4 +1,4 @@ - + diff --git a/libraries/rib-compose/build.gradle b/libraries/rib-compose/build.gradle index 9e35bd5e5..af98d8f75 100644 --- a/libraries/rib-compose/build.gradle +++ b/libraries/rib-compose/build.gradle @@ -1,11 +1,13 @@ configureAndroidLibrary(project) android { - compileSdk 33 + namespace 'com.badoo.ribs.compose' + + compileSdk 34 defaultConfig { minSdk deps.build.minSdk - targetSdk 32 + targetSdk 33 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/libraries/rib-compose/src/main/AndroidManifest.xml b/libraries/rib-compose/src/main/AndroidManifest.xml deleted file mode 100644 index 6673a902f..000000000 --- a/libraries/rib-compose/src/main/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/libraries/rib-debug-utils/build.gradle b/libraries/rib-debug-utils/build.gradle index 2eb1bbca6..6e8302e41 100644 --- a/libraries/rib-debug-utils/build.gradle +++ b/libraries/rib-debug-utils/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.debugutils' +} + dependencies { api project(":libraries:rib-base") } diff --git a/libraries/rib-debug-utils/src/main/AndroidManifest.xml b/libraries/rib-debug-utils/src/main/AndroidManifest.xml deleted file mode 100644 index b6ccede6d..000000000 --- a/libraries/rib-debug-utils/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-mvicore/build.gradle b/libraries/rib-mvicore/build.gradle index 9b645d87e..7e4fb9705 100644 --- a/libraries/rib-mvicore/build.gradle +++ b/libraries/rib-mvicore/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.mvicore' +} + dependencies { api project(":libraries:rib-base") api deps.external.mviCore diff --git a/libraries/rib-mvicore/src/main/AndroidManifest.xml b/libraries/rib-mvicore/src/main/AndroidManifest.xml deleted file mode 100644 index f35e9a53c..000000000 --- a/libraries/rib-mvicore/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-portal-rx2/build.gradle b/libraries/rib-portal-rx2/build.gradle index 4d31774c1..21b2583bb 100644 --- a/libraries/rib-portal-rx2/build.gradle +++ b/libraries/rib-portal-rx2/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.portal.rx2' +} + dependencies { api deps.android.appCompat diff --git a/libraries/rib-portal-rx2/src/main/AndroidManifest.xml b/libraries/rib-portal-rx2/src/main/AndroidManifest.xml deleted file mode 100644 index 0a0c7bc10..000000000 --- a/libraries/rib-portal-rx2/src/main/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/libraries/rib-portal/build.gradle b/libraries/rib-portal/build.gradle index 6d9ab9809..aadfdfca8 100644 --- a/libraries/rib-portal/build.gradle +++ b/libraries/rib-portal/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.portal' +} + dependencies { api deps.android.appCompat diff --git a/libraries/rib-portal/src/main/AndroidManifest.xml b/libraries/rib-portal/src/main/AndroidManifest.xml deleted file mode 100644 index a80c5d8c7..000000000 --- a/libraries/rib-portal/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/libraries/rib-recyclerview/build.gradle b/libraries/rib-recyclerview/build.gradle index 04eb9e5ba..a3cf176d3 100644 --- a/libraries/rib-recyclerview/build.gradle +++ b/libraries/rib-recyclerview/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.android.recyclerview' +} + dependencies { api deps.android.appCompat diff --git a/libraries/rib-recyclerview/src/main/AndroidManifest.xml b/libraries/rib-recyclerview/src/main/AndroidManifest.xml deleted file mode 100644 index acb29a1b9..000000000 --- a/libraries/rib-recyclerview/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/libraries/rib-rx2/build.gradle b/libraries/rib-rx2/build.gradle index e8870b95a..fa88c0f11 100644 --- a/libraries/rib-rx2/build.gradle +++ b/libraries/rib-rx2/build.gradle @@ -1,5 +1,9 @@ configureAndroidLibrary(project) +android { + namespace 'com.badoo.ribs.rx2' +} + dependencies { api deps.external.rxrelay2 api deps.external.rxjava2 diff --git a/libraries/rib-rx2/src/main/AndroidManifest.xml b/libraries/rib-rx2/src/main/AndroidManifest.xml deleted file mode 100644 index d5aba58d5..000000000 --- a/libraries/rib-rx2/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/libraries/rib-rx2/src/main/java/com/badoo/ribs/rx2/adapter/Rx2.kt b/libraries/rib-rx2/src/main/java/com/badoo/ribs/rx2/adapter/Rx2.kt index 2bf3ba01c..2df5b1218 100644 --- a/libraries/rib-rx2/src/main/java/com/badoo/ribs/rx2/adapter/Rx2.kt +++ b/libraries/rib-rx2/src/main/java/com/badoo/ribs/rx2/adapter/Rx2.kt @@ -3,7 +3,7 @@ package com.badoo.ribs.rx2.adapter import com.badoo.ribs.minimal.reactive.Source import io.reactivex.Observable -fun Source.rx2(): Observable = +fun Source.rx2(): Observable = Observable.create { emitter -> val cancellable = observe { emitter.onNext(it) } emitter.setCancellable { cancellable.cancel() } diff --git a/plugins/build.gradle b/plugins/build.gradle deleted file mode 100644 index 2036ded19..000000000 --- a/plugins/build.gradle +++ /dev/null @@ -1,50 +0,0 @@ -apply plugin: 'groovy' -apply plugin: 'kotlin' -apply plugin: 'java-gradle-plugin' -apply from: "$projectDir/../gradle/dependencies.gradle" - -buildscript { - apply from: "$projectDir/../gradle/dependencies.gradle" - - repositories { - mavenCentral() - google() - maven { - url "https://plugins.gradle.org/m2/" - } - } - - dependencies { - classpath deps.build.gradlePlugins.android - classpath deps.build.gradlePlugins.kotlin - } -} - -sourceSets { - main.kotlin.srcDirs += 'src/main/kotlin' -} - -repositories { - mavenCentral() - google() - maven { url "https://jitpack.io" } - maven { - url "https://plugins.gradle.org/m2/" - } -} - -dependencies { - implementation localGroovy() - implementation gradleApi() - implementation deps.build.gradlePlugins.android - implementation deps.external.gson -} - -gradlePlugin { - plugins { - lintReportPlugin { - id = 'com.badoo.ribs.templategenerator' - implementationClass = 'com.badoo.ribs.templategenerator.TemplateGeneratorPlugin' - } - } -} diff --git a/plugins/settings.gradle b/plugins/settings.gradle deleted file mode 100644 index e69de29bb..000000000 diff --git a/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorExtension.kt b/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorExtension.kt deleted file mode 100644 index cbd936aa6..000000000 --- a/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorExtension.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.badoo.ribs.templategenerator - -import groovy.lang.Closure -import org.gradle.api.Project - -open class TemplateGeneratorExtension(private val project: Project) { - - val templates: MutableList = mutableListOf() - - fun template(templateConfigurator: Closure<*>) { - templates += TemplateExtension().apply { - templateConfigurator.delegate = this - templateConfigurator.call() - } - } - - class TemplateExtension { - var id: String? = null - var name: String? = null - var fromProject: Project? = null - var modulePackage: String? = null - var sourcePackage: String? = null - - var resources: List? = null - - val tokens: MutableList = mutableListOf() - - fun token(tokenConfigurator: Closure<*>) { - val token = Token().apply { - tokenConfigurator.delegate = this - tokenConfigurator.resolveStrategy = Closure.DELEGATE_ONLY - tokenConfigurator.call() - } - tokens += token - } - } - - class Token { - var id: String? = null - var name: String? = null - var sourceValue: String? = null - } -} diff --git a/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorPlugin.kt b/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorPlugin.kt deleted file mode 100644 index 2fd7238c6..000000000 --- a/plugins/src/main/kotlin/com/badoo/ribs/templategenerator/TemplateGeneratorPlugin.kt +++ /dev/null @@ -1,67 +0,0 @@ -package com.badoo.ribs.templategenerator - -import com.android.build.gradle.BaseExtension -import com.android.build.gradle.internal.tasks.factory.dependsOn -import com.badoo.ribs.templategenerator.generate.GenerateTemplatesTask -import com.badoo.ribs.templategenerator.generate.Template -import com.badoo.ribs.templategenerator.generate.Token -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.tasks.SourceSetContainer - -class TemplateGeneratorPlugin : Plugin { - - override fun apply(project: Project) { - val extension: TemplateGeneratorExtension = project.extensions.create("templates", TemplateGeneratorExtension::class.java, project) - - project.afterEvaluate { - val outputDirectory = project.file("${project.buildDir}/generated-template-resources") - - extension.templates.forEach { template -> - template.fromProject?.path?.let { projectPath -> - project.evaluationDependsOn(projectPath) - } - } - - val task = project.tasks.register("generateTemplates", GenerateTemplatesTask::class.java) { task -> - task.templates = extension.templates.validateTemplatesAndMap() - task.outputDirectory = outputDirectory - } - - val sourceSets = (project.extensions.getByType(SourceSetContainer::class.java) as SourceSetContainer) - sourceSets.getByName("main").output.dir(mapOf("buildBy" to task.name), outputDirectory) - - project.tasks.named("processResources").dependsOn(task) - } - } - - private fun List.validateTemplatesAndMap(): List