Skip to content

Commit

Permalink
Migrate :components:bridge:connection to KMP (#912)
Browse files Browse the repository at this point in the history
**Background**

If we start writing new modules on KMP now, we can eventually migrate
the entire project to the KMP environment - an important infrastructural
step

**Changes**

- Migration of all modules :components:bridge:connection to KMP
- Downgrade to Kotlin 2.0.0 due issue
[KT-70415](https://youtrack.jetbrains.com/issue/KT-70415/Compose-Compiler-2.0.20-RC-NoClassDefFoundError-ComposeDefaultImpls-with-ExposedDropdownMenuBox)

**Test plan**

Try launch `:components:bridge:connection:sample`
  • Loading branch information
LionZXY authored Aug 1, 2024
1 parent d254fce commit 4d82361
Show file tree
Hide file tree
Showing 197 changed files with 555 additions and 322 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Attention: don't forget to add the flag for F-Droid before release
- [Refactor] Update to Kotlin 2.0
- [Refactor] Replace Ktorfit with Ktor requests in remote-controls
- [Refactor] Migrate :core:preference to KMP
- [Refactor] Migrate :bridge:connection:* to KMP
- [Refactor] Remove ktorfit
- [FIX] Distinct fap items by id in paging sources
- [FIX] Battery level charge
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,17 @@ package com.flipperdevices.buildlogic.model
*/
enum class FlavorType(
val isLogEnabled: Boolean,
val crashAppOnFailedChecks: Boolean
val crashAppOnFailedChecks: Boolean,
val loggingPendingCommands: Boolean
) {
DEV(isLogEnabled = true, crashAppOnFailedChecks = true),
PROD(isLogEnabled = true, crashAppOnFailedChecks = false)
DEV(
isLogEnabled = true,
crashAppOnFailedChecks = true,
loggingPendingCommands = true
),
PROD(
isLogEnabled = true,
crashAppOnFailedChecks = false,
loggingPendingCommands = true
)
}
5 changes: 1 addition & 4 deletions components/analytics/metric/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
}

android.namespace = "com.flipperdevices.metric.api"

dependencies {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.flipperdevices.metric.api

import com.flipperdevices.metric.api.events.SessionState

interface MetricAndroidApi : MetricApi {
fun reportSessionState(state: SessionState)
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.flipperdevices.metric.api

import com.flipperdevices.metric.api.events.ComplexEvent
import com.flipperdevices.metric.api.events.SessionState
import com.flipperdevices.metric.api.events.SimpleEvent

interface MetricApi {
fun reportSimpleEvent(simpleEvent: SimpleEvent, arg: String? = null)
fun reportComplexEvent(complexEvent: ComplexEvent)
fun reportSessionState(state: SessionState)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,24 @@ package com.flipperdevices.metric.impl.api
import com.flipperdevices.core.di.AppGraph
import com.flipperdevices.core.log.LogTagProvider
import com.flipperdevices.core.log.error
import com.flipperdevices.metric.api.MetricAndroidApi
import com.flipperdevices.metric.api.MetricApi
import com.flipperdevices.metric.api.events.ComplexEvent
import com.flipperdevices.metric.api.events.SessionState
import com.flipperdevices.metric.api.events.SimpleEvent
import com.flipperdevices.metric.impl.clickhouse.ClickhouseApi
import com.flipperdevices.metric.impl.countly.CountlyApi
import com.squareup.anvil.annotations.ContributesBinding
import dagger.Reusable
import javax.inject.Inject

@Reusable
@ContributesBinding(AppGraph::class, MetricApi::class)
@ContributesBinding(AppGraph::class, MetricAndroidApi::class)
class MetricApiImpl @Inject constructor(
private val countlyApi: CountlyApi,
private val clickhouseApi: ClickhouseApi
) : MetricApi, LogTagProvider {
) : MetricApi, MetricAndroidApi, LogTagProvider {
override val TAG = "MetricApi"

override fun reportSimpleEvent(simpleEvent: SimpleEvent, arg: String?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.flipperdevices.metric.noop
import com.flipperdevices.core.di.AppGraph
import com.flipperdevices.metric.api.MetricApi
import com.flipperdevices.metric.api.events.ComplexEvent
import com.flipperdevices.metric.api.events.SessionState
import com.flipperdevices.metric.api.events.SimpleEvent
import com.squareup.anvil.annotations.ContributesBinding
import javax.inject.Inject
Expand All @@ -13,6 +12,4 @@ class NoopMetricApiImpl @Inject constructor() : MetricApi {
override fun reportSimpleEvent(simpleEvent: SimpleEvent, arg: String?) = Unit

override fun reportComplexEvent(complexEvent: ComplexEvent) = Unit

override fun reportSessionState(state: SessionState) = Unit
}
6 changes: 3 additions & 3 deletions components/analytics/shake2report/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.shake2report.api"

dependencies {
implementation(projects.components.bridge.api)
commonDependencies {
implementation(projects.components.core.ui.decompose)

implementation(libs.kotlin.coroutines)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.flipperdevices.shake2report.api

import com.flipperdevices.bridge.api.model.FlipperGATTInformation
import kotlinx.coroutines.flow.StateFlow

interface Shake2ReportApi {
Expand All @@ -10,7 +9,6 @@ interface Shake2ReportApi {
*/
fun init()

fun updateGattInformation(gattInformation: FlipperGATTInformation)
fun setExtra(tags: List<Pair<String, String>>)

fun reportException(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.flipperdevices.analytics.shake2report.impl.api

import com.flipperdevices.analytics.shake2report.impl.InternalShake2Report
import com.flipperdevices.bridge.api.model.FlipperGATTInformation
import com.flipperdevices.core.di.AppGraph
import com.flipperdevices.shake2report.api.Shake2ReportApi
import com.squareup.anvil.annotations.ContributesBinding
Expand All @@ -17,10 +16,6 @@ class Shake2ReportApiImpl @Inject constructor(
internalShake2Report.register()
}

override fun updateGattInformation(gattInformation: FlipperGATTInformation) {
internalShake2Report.setExtra(convert(gattInformation))
}

override fun setExtra(tags: List<Pair<String, String>>) {
internalShake2Report.setExtra(tags)
}
Expand All @@ -35,28 +30,3 @@ class Shake2ReportApiImpl @Inject constructor(

override fun isInitialized() = internalShake2Report.getIsRegisteredFlow()
}

private const val FLIPPER_DEVICE_NAME = "flipper_device_name"
private const val FLIPPER_MANUFACTURER_NAME = "flipper_manufacturer_name"
private const val FLIPPER_HARDWARE_REVISION = "flipper_hardware_revision"
private const val FLIPPER_SOFTWARE_REVISION = "flipper_software_revision"
private const val FLIPPER_BATTERY_LEVEL = "flipper_battery_level"
private fun convert(gattInformation: FlipperGATTInformation): List<Pair<String, String>> {
val tagsList = mutableListOf<Pair<String, String>>()
gattInformation.deviceName?.let {
tagsList.add(FLIPPER_DEVICE_NAME to it)
}
gattInformation.manufacturerName?.let {
tagsList.add(FLIPPER_MANUFACTURER_NAME to it)
}
gattInformation.hardwareRevision?.let {
tagsList.add(FLIPPER_HARDWARE_REVISION to it)
}
gattInformation.softwareVersion?.let {
tagsList.add(FLIPPER_SOFTWARE_REVISION to it)
}
gattInformation.batteryLevel?.let {
tagsList.add(FLIPPER_BATTERY_LEVEL to it.toString())
}
return tagsList
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.flipperdevices.shake2report.noop

import com.flipperdevices.bridge.api.model.FlipperGATTInformation
import com.flipperdevices.core.di.AppGraph
import com.flipperdevices.shake2report.api.Shake2ReportApi
import com.squareup.anvil.annotations.ContributesBinding
Expand All @@ -12,10 +11,6 @@ class Shake2ReportStub @Inject constructor() : Shake2ReportApi {
override fun init() {
// Do nothing
}
override fun updateGattInformation(gattInformation: FlipperGATTInformation) {
// Do nothing
}

override fun setExtra(tags: List<Pair<String, String>>) {
// Do nothing
}
Expand Down
5 changes: 3 additions & 2 deletions components/bridge/connection/config/api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
id("kotlinx-serialization")
}

android.namespace = "com.flipperdevices.bridge.connection.config.api"

dependencies {
commonDependencies {
implementation(libs.kotlin.coroutines)
implementation(libs.kotlin.serialization.json)
}
8 changes: 5 additions & 3 deletions components/bridge/connection/config/impl/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
plugins {
id("flipper.android-lib")
id("flipper.anvil")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
id("flipper.anvil-multiplatform")
}

android.namespace = "com.flipperdevices.bridge.connection.config.impl"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.config.api)

implementation(projects.components.core.log)
implementation(projects.components.core.di)
implementation(projects.components.core.preference)

implementation(libs.kotlin.coroutines)
implementation(libs.dagger)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.bridge.connection.connectionbuilder.api"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.transport.common.api)
implementation(libs.kotlin.coroutines)
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
plugins {
id("flipper.android-lib")
id("flipper.anvil")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
id("flipper.anvil-multiplatform")
}

android.namespace = "com.flipperdevices.bridge.connection.connectionbuilder.impl"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.connectionbuilder.api)

implementation(projects.components.core.di)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.bridge.connection.device.common.api"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.feature.common.api)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.bridge.connection.device.fzero.api"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.device.common.api)
implementation(projects.components.bridge.connection.feature.common.api)
implementation(projects.components.bridge.connection.transport.common.api)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
plugins {
id("flipper.android-lib")
id("flipper.anvil")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
id("flipper.anvil-multiplatform")
}

android.namespace = "com.flipperdevices.bridge.connection.device.fzero.impl"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.device.fzero.api)

implementation(projects.components.core.di)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.bridge.connection.feature.common.api"

dependencies {
commonDependencies {
implementation(projects.components.core.di)

implementation(projects.components.bridge.connection.transport.common.api)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
plugins {
id("flipper.android-lib")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
}

android.namespace = "com.flipperdevices.bridge.connection.feature.getinfo.api"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.feature.common.api)

implementation(libs.kotlin.coroutines)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
plugins {
id("flipper.android-lib")
id("flipper.anvil")
id("flipper.multiplatform")
id("flipper.multiplatform-dependencies")
id("flipper.anvil-multiplatform")
}

android.namespace = "com.flipperdevices.bridge.connection.feature.getinfo.impl"

dependencies {
commonDependencies {
implementation(projects.components.bridge.connection.feature.getinfo.api)

implementation(projects.components.core.di)
Expand All @@ -18,7 +19,7 @@ dependencies {
implementation(projects.components.bridge.connection.feature.rpc.model)
implementation(projects.components.bridge.connection.feature.protocolversion.api)

implementation(projects.components.bridge.pbutils)
implementation(projects.components.bridge.connection.pbutils)

implementation(libs.kotlin.coroutines)
}
Loading

0 comments on commit 4d82361

Please sign in to comment.