For accessing internal declarations from other modules (e.g. access `rib-base` internals from `rib-test`), we are currently suppressing compiler errors with `@file:Suppress("invisible_reference", "invisible_member")`
A better approach is to:
1. Create an `internal` opt-in annotation.
2. Make the "accessible to friend modules" component `public`
3. Mark the (now public) component with the opt-in annotation.
4. Opt-in to the annotation from `build.gradle`.
Because the new annotation is `internal`, it cannot be normally accessed from external modules. But Gradle can see it if it's part of the source set.
This makes the internal visibility of those friend-modules APIs even stricter, since consumers now cannot just suppress `"invisible_reference"` and `"invisible_member"` to directly access the friend-module API. Plus, we get rid of the hacky suppressions in our codebase.
Docs state that:
> If you used the @JvmDefault annotation before, you can safely remove it and use one of the new modes. If you already used -Xjvm-default=enable, which generated only the default method implementations, you can now replace it with -Xjvm-default=all.
Also, a couple of minor fixes:
- A small warning on `RibActivity` against importing `android.R`.
- Replaces deprecated `String.toLowerCase()` and `String.capitalize()` with the equivalent `String.lowercase()` and `String.replaceFirstChar(Char::titlecase)`.
Kotlin 1.7.10 -> 1.8.20
Gradle 7.3.3 -> 8.1.1
AndroidX Lifecycle ViewModel Compose 1.0.0-alpha05 -> 2.5.1
AndroidX Activity 1.3.0-alpha08 -> 1.7.0
AndroidX Activity KTX 1.3.0-beta02 -> 1.7.0
AndroidX Activity Compose 1.3.0-beta02 -> 1.7.0
Compose compiler 1.3.0 -> 1.4.6
Compose libraries 1.2.1 -> 1.4.0
Java version 1.8 -> 11
IntelliJ plugin 1.11.0 -> 1.13.1 (1.13.2 onwards fails test `ribGenerators_shouldGenerateClassesThatCompiler` for reasons beyond my understanding)
AGP 7.2.2 -> 7.4.2 (8.0 not supported in IJ 2023.1 bundled Android plugin)
gradle-maven-publish 0.18.0 -> 0.25.2
### Additional changes
- Move package string from manifests to `android.namespace` in Gradle build scripts.
- Remove `targetSdk` from Android libraries (only applications should provide it)
- Remove `buildToolsVersion`.
- `compileSdkVersion`, `minSdkVersion`, `targetSdkVersion` swapped to `compileSdk`, `minSdk`, `targetSdk`.
- Disablement of `buildConfig` is now done by `buildFeatures.buildConfig = false` instead of in the project `build.gradle`.
- Added `exported="true"` in demo Android projects activities.
- `-Xfriend-paths` `kotlinc` option seemingly only works now if we use `@file:Suppress("invisible_reference", "invisible_member")` in files that access internal components.
- `androidx.lifecycle.ViewTreeLifecycleOwner(View, LifecycleOwner)` has been replaced with `View.setViewTreeLifecycleOwner(LifecycleOwner)`.
- Removed unnecessary dependencies on Kotlin stdlib, as the Kotlin JVM plugin automatically adds it. For reasons beyond my understanding, removing it from `android/libraries/rib-test` fails gradle sync with the following error, so it's the only place it's still kept.
```
com.intellij.openapi.externalSystem.model.ExternalSystemException: Could not resolve all dependencies for configuration ':libraries:rib-coroutines:testCompileClasspath'.
Cannot change dependencies of dependency configuration ':libraries:rib-test:api' after it has been included in dependency resolution.
```
This commit follows the example of #548 and satisfies #545 by enabling the explicit api mode for the following library modules:
- rib-debug-utils
- rib-router-navigator
- rib-test
- rib-compiler-app
- rib-android-compose
- rib-android-code
- rib-android
- rib-screen-stack-base
- rib-workflow-test
- rib-workflow
* Don't use default interface method bytecode optimization for target 1.8
* Update fix to rely on jvm-default=enable/@JvmDefault in order to preserve java compatibility:
* Integrate Spotless in build
* Update CONTRIBUTING.md
* Move improperly placed copyright comments
* Update copyright indent
* Don't format test fixtures
* Run spotlessApply over the whole repo
* Remove checkstyle configs
* Run spotlessCheck on CI
* Bump buildTools and compileSdk to 30
* Remove component type parameter from ViewRouter
* Xray updates
* Add support for onUserLeaveHint, onTrimMemory, and onPIPModeChanged callbacks
* Update build tools for Travis CI
* Move tests in rib-android-test to test source set of rib-android
* Set test theme in test activity instead of Android manifest
* Delete rib-android-test
* Remove Component type parameter from Router
* Add RibEvents and related classes for tooling
* Minor differences to align with internal version of rib-base
* Extended WorkerBinder functionality to allow for binding a worker to a presenter's lifecycle
* Minor differences & new tests to align with internal version of rib-base
* Migration to AndroidX #324
* Divided versions for androidx libraries and renamed dependencies #324
* Upgrade target sdk version for travis #324
* Migration to androidx part 2 #324
* Fixed spaces #324
Doing this allows us to run roboeletric tests without having to define a theme attribute (that needs to be overridden by consumers) inside the rib-android module.
* Add comment explaining why lifecycled presenters exist
* Fix package name for rib debug utils
* Rename rib-assert -> rib-test-utils
* Delete orphaned files
* Refactor router-navigator into its own module. Fix some gradle dependencies
* Update the rib intellij template readme
* Include prebuilt plugin.jar
* Include link to plugin.jar in readme
* Add link to plugin inside tutorial1 readme
* Add license
Plus Clean up android-base for release (squashed toghehter for file header reasons)
* Add initializer support by inlining the initializer annotation into rib-base
* Setup roboelectric tests. Setup roboelectric configuration