From 7fff2730bde2be4fc9deb65c3f059163e81e714c Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Tue, 1 Apr 2025 13:39:44 -0400 Subject: [PATCH 1/2] feat: setup package visibility restrictions for certain libs Only expose the public interface to accessor, leaving the implementation details to be handled via DI Signed-off-by: Brandon McAnsh --- apps/codeApp/build.gradle.kts | 6 +-- apps/flipchatApp/build.gradle.kts | 8 +-- libs/locale/{ => bindings}/.gitignore | 0 libs/locale/bindings/build.gradle.kts | 41 ++++++++++++++++ .../com/getcode/util/locale/LocaleModule.kt | 16 ++++++ .../connectivity => locale/impl}/.gitignore | 0 libs/locale/{ => impl}/build.gradle.kts | 15 ++---- .../com/getcode/util/locale/AndroidLocale.kt | 23 +++++++++ libs/locale/public/.gitignore | 2 + libs/locale/public/build.gradle.kts | 39 +++++++++++++++ .../com/getcode/util/locale/LocaleHelper.kt | 0 .../com/getcode/util/locale/LocaleUtils.kt | 0 libs/network/connectivity/bindings/.gitignore | 2 + .../connectivity/bindings/build.gradle.kts | 46 +++++++++++++++++ .../utils/network/ConnectivityModule.kt | 39 +++++++++++++++ libs/network/connectivity/impl/.gitignore | 2 + .../connectivity/impl/build.gradle.kts | 46 +++++++++++++++++ .../{ => impl}/src/main/AndroidManifest.xml | 0 .../utils/network/Api24NetworkObserver.kt | 2 +- .../utils/network/Api29NeworkObserver.kt | 2 +- .../getcode/utils/network/SignalStrength.kt | 10 ++++ libs/network/connectivity/public/.gitignore | 2 + .../{ => public}/build.gradle.kts | 0 .../network/NetworkConnectionListener.kt | 11 ----- .../kotlin/com/getcode/utils/network/Retry.kt | 0 .../connectivity/ConnectionStatusProvider.kt | 0 libs/permissions/{ => bindings}/.gitignore | 0 libs/permissions/bindings/build.gradle.kts | 49 +++++++++++++++++++ .../util/permissions/PermissionsModule.kt | 16 ++++++ .../{vibrator => permissions/impl}/.gitignore | 0 libs/permissions/impl/build.gradle.kts | 43 ++++++++++++++++ .../util/permissions/AndroidPermissions.kt | 26 ++++++++++ libs/permissions/public/.gitignore | 1 + .../permissions/{ => public}/build.gradle.kts | 0 .../com/getcode/util/ActivityLocator.kt | 0 .../util/permissions/CameraPermissionCheck.kt | 0 .../NotificationPermissionCheck.kt | 0 .../util/permissions/PermissionCheck.kt | 0 .../util/permissions/PermissionChecker.kt | 0 libs/vibrator/bindings/.gitignore | 1 + libs/vibrator/bindings/build.gradle.kts | 46 +++++++++++++++++ .../getcode/util/vibration/VibratorModule.kt | 35 +++++++++++++ libs/vibrator/impl/.gitignore | 1 + libs/vibrator/impl/build.gradle.kts | 43 ++++++++++++++++ .../src/main/kotlin}/AndroidManifest.xml | 0 .../getcode/util/vibration/AndroidVibrator.kt | 1 + libs/vibrator/public/.gitignore | 1 + libs/vibrator/{ => public}/build.gradle.kts | 0 .../com/getcode/util/vibration/Vibrator.kt | 0 services/code/build.gradle.kts | 4 +- services/shared/build.gradle.kts | 2 +- settings.gradle | 31 +++++++++--- ui/components/build.gradle.kts | 4 +- 53 files changed, 573 insertions(+), 43 deletions(-) rename libs/locale/{ => bindings}/.gitignore (100%) create mode 100644 libs/locale/bindings/build.gradle.kts create mode 100644 libs/locale/bindings/src/main/kotlin/com/getcode/util/locale/LocaleModule.kt rename libs/{network/connectivity => locale/impl}/.gitignore (100%) rename libs/locale/{ => impl}/build.gradle.kts (79%) create mode 100644 libs/locale/impl/src/main/kotlin/com/getcode/util/locale/AndroidLocale.kt create mode 100644 libs/locale/public/.gitignore create mode 100644 libs/locale/public/build.gradle.kts rename libs/locale/{ => public}/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt (100%) rename libs/locale/{ => public}/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt (100%) create mode 100644 libs/network/connectivity/bindings/.gitignore create mode 100644 libs/network/connectivity/bindings/build.gradle.kts create mode 100644 libs/network/connectivity/bindings/src/main/kotlin/com/getcode/utils/network/ConnectivityModule.kt create mode 100644 libs/network/connectivity/impl/.gitignore create mode 100644 libs/network/connectivity/impl/build.gradle.kts rename libs/network/connectivity/{ => impl}/src/main/AndroidManifest.xml (100%) rename libs/network/connectivity/{ => impl}/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt (98%) rename libs/network/connectivity/{ => impl}/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt (98%) create mode 100644 libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/SignalStrength.kt create mode 100644 libs/network/connectivity/public/.gitignore rename libs/network/connectivity/{ => public}/build.gradle.kts (100%) rename libs/network/connectivity/{ => public}/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt (85%) rename libs/network/connectivity/{ => public}/src/main/kotlin/com/getcode/utils/network/Retry.kt (100%) rename libs/network/connectivity/{ => public}/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt (100%) rename libs/permissions/{ => bindings}/.gitignore (100%) create mode 100644 libs/permissions/bindings/build.gradle.kts create mode 100644 libs/permissions/bindings/src/main/kotlin/com/getcode/util/permissions/PermissionsModule.kt rename libs/{vibrator => permissions/impl}/.gitignore (100%) create mode 100644 libs/permissions/impl/build.gradle.kts create mode 100644 libs/permissions/impl/src/main/kotlin/com/getcode/util/permissions/AndroidPermissions.kt create mode 100644 libs/permissions/public/.gitignore rename libs/permissions/{ => public}/build.gradle.kts (100%) rename libs/permissions/{ => public}/src/main/kotlin/com/getcode/util/ActivityLocator.kt (100%) rename libs/permissions/{ => public}/src/main/kotlin/com/getcode/util/permissions/CameraPermissionCheck.kt (100%) rename libs/permissions/{ => public}/src/main/kotlin/com/getcode/util/permissions/NotificationPermissionCheck.kt (100%) rename libs/permissions/{ => public}/src/main/kotlin/com/getcode/util/permissions/PermissionCheck.kt (100%) rename libs/permissions/{ => public}/src/main/kotlin/com/getcode/util/permissions/PermissionChecker.kt (100%) create mode 100644 libs/vibrator/bindings/.gitignore create mode 100644 libs/vibrator/bindings/build.gradle.kts create mode 100644 libs/vibrator/bindings/src/main/kotlin/com/getcode/util/vibration/VibratorModule.kt create mode 100644 libs/vibrator/impl/.gitignore create mode 100644 libs/vibrator/impl/build.gradle.kts rename libs/vibrator/{src/main => impl/src/main/kotlin}/AndroidManifest.xml (100%) rename libs/vibrator/{ => impl}/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt (97%) create mode 100644 libs/vibrator/public/.gitignore rename libs/vibrator/{ => public}/build.gradle.kts (100%) rename libs/vibrator/{ => public}/src/main/kotlin/com/getcode/util/vibration/Vibrator.kt (100%) diff --git a/apps/codeApp/build.gradle.kts b/apps/codeApp/build.gradle.kts index 9c2178a5b..ef8bc926b 100644 --- a/apps/codeApp/build.gradle.kts +++ b/apps/codeApp/build.gradle.kts @@ -112,10 +112,10 @@ android { dependencies { // libs (not included with services) - implementation(project(":libs:locale")) - implementation(project(":libs:vibrator")) + implementation(project(":libs:locale:public")) + implementation(project(":libs:vibrator:public")) implementation(project(":libs:messaging")) - implementation(project(":libs:permissions")) + implementation(project(":libs:permissions:public")) implementation(project(":libs:quickresponse")) implementation(project(":libs:requests")) diff --git a/apps/flipchatApp/build.gradle.kts b/apps/flipchatApp/build.gradle.kts index 441aae6d7..2a49a0d7a 100644 --- a/apps/flipchatApp/build.gradle.kts +++ b/apps/flipchatApp/build.gradle.kts @@ -118,8 +118,8 @@ dependencies { implementation(project(":services:flipchat:sdk")) implementation(project(":libs:datetime")) - implementation(project(":libs:locale")) - implementation(project(":libs:vibrator")) + implementation(project(":libs:locale:public")) + implementation(project(":libs:vibrator:public")) implementation(project(":libs:encryption:ed25519")) implementation(project(":libs:encryption:keys")) implementation(project(":libs:encryption:mnemonic")) @@ -129,9 +129,9 @@ dependencies { implementation(project(":libs:logging")) implementation(project(":libs:messaging")) implementation(project(":libs:network:exchange")) - implementation(project(":libs:network:connectivity")) + implementation(project(":libs:network:connectivity:public")) implementation(project(":libs:opengraph")) - implementation(project(":libs:permissions")) + implementation(project(":libs:permissions:public")) implementation(project(":libs:quickresponse")) implementation(project(":libs:requests")) implementation(project(":ui:components")) diff --git a/libs/locale/.gitignore b/libs/locale/bindings/.gitignore similarity index 100% rename from libs/locale/.gitignore rename to libs/locale/bindings/.gitignore diff --git a/libs/locale/bindings/build.gradle.kts b/libs/locale/bindings/build.gradle.kts new file mode 100644 index 000000000..e99e8ccb5 --- /dev/null +++ b/libs/locale/bindings/build.gradle.kts @@ -0,0 +1,41 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_serialization) + id(Plugins.kotlin_kapt) + id(Plugins.hilt) +} + +android { + namespace = "${Android.codeNamespace}.util.locale" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } +} + +dependencies { + implementation(project(":libs:locale:impl")) + api(project(":libs:locale:public")) + + implementation(Libs.hilt) + kapt(Libs.hilt_android_compiler) + kapt(Libs.hilt_compiler) +} diff --git a/libs/locale/bindings/src/main/kotlin/com/getcode/util/locale/LocaleModule.kt b/libs/locale/bindings/src/main/kotlin/com/getcode/util/locale/LocaleModule.kt new file mode 100644 index 000000000..b7dce651d --- /dev/null +++ b/libs/locale/bindings/src/main/kotlin/com/getcode/util/locale/LocaleModule.kt @@ -0,0 +1,16 @@ +package com.getcode.util.locale + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class LocaleModule { + + @Binds + @Singleton + abstract fun bindLocaleHelper(impl: AndroidLocale): LocaleHelper +} \ No newline at end of file diff --git a/libs/network/connectivity/.gitignore b/libs/locale/impl/.gitignore similarity index 100% rename from libs/network/connectivity/.gitignore rename to libs/locale/impl/.gitignore diff --git a/libs/locale/build.gradle.kts b/libs/locale/impl/build.gradle.kts similarity index 79% rename from libs/locale/build.gradle.kts rename to libs/locale/impl/build.gradle.kts index cd7b15d01..7c0f4547e 100644 --- a/libs/locale/build.gradle.kts +++ b/libs/locale/impl/build.gradle.kts @@ -2,6 +2,7 @@ plugins { id(Plugins.android_library) id(Plugins.kotlin_android) id(Plugins.kotlin_serialization) + id(Plugins.kotlin_kapt) } android { @@ -14,13 +15,6 @@ android { testInstrumentationRunner = Android.testInstrumentationRunner } - buildFeatures { - compose = true - } - - composeOptions { - kotlinCompilerExtensionVersion = Versions.compose_compiler - } kotlinOptions { jvmTarget = Versions.java @@ -38,6 +32,7 @@ android { } dependencies { + api(project(":libs:locale:public")) implementation(project(":libs:datetime")) implementation(project(":libs:currency")) api(Libs.androidx_annotation) @@ -45,7 +40,7 @@ dependencies { api(Libs.kotlinx_coroutines_core) api(Libs.kotlinx_coroutines_rx3) - implementation(platform(Libs.compose_bom)) - implementation(Libs.compose_ui) - implementation(Libs.compose_foundation) + implementation(Libs.hilt) + kapt(Libs.hilt_android_compiler) + kapt(Libs.hilt_compiler) } diff --git a/libs/locale/impl/src/main/kotlin/com/getcode/util/locale/AndroidLocale.kt b/libs/locale/impl/src/main/kotlin/com/getcode/util/locale/AndroidLocale.kt new file mode 100644 index 000000000..a8f1e5d55 --- /dev/null +++ b/libs/locale/impl/src/main/kotlin/com/getcode/util/locale/AndroidLocale.kt @@ -0,0 +1,23 @@ +package com.getcode.util.locale + +import android.content.Context +import com.getcode.model.Currency +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject + +class AndroidLocale @Inject constructor( + @ApplicationContext private val context: Context, + private val currencyUtils: com.getcode.utils.CurrencyUtils, +): LocaleHelper { + override fun getDefaultCurrencyName(): String { + return LocaleUtils.getDefaultCurrency(context) + } + + override fun getDefaultCurrency(): Currency? { + return currencyUtils.getCurrency(getDefaultCurrencyName()) + } + + override fun getDefaultCountry(): String { + return LocaleUtils.getDefaultCountry(context) + } +} \ No newline at end of file diff --git a/libs/locale/public/.gitignore b/libs/locale/public/.gitignore new file mode 100644 index 000000000..9f2a07880 --- /dev/null +++ b/libs/locale/public/.gitignore @@ -0,0 +1,2 @@ +build/ +.gradle/ diff --git a/libs/locale/public/build.gradle.kts b/libs/locale/public/build.gradle.kts new file mode 100644 index 000000000..5ce6bd507 --- /dev/null +++ b/libs/locale/public/build.gradle.kts @@ -0,0 +1,39 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_serialization) +} + +android { + namespace = "${Android.codeNamespace}.util.locale" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } +} + +dependencies { + implementation(project(":libs:datetime")) + implementation(project(":libs:currency")) + api(Libs.androidx_annotation) + api(Libs.kotlin_stdlib) + api(Libs.kotlinx_coroutines_core) + api(Libs.kotlinx_coroutines_rx3) +} diff --git a/libs/locale/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt b/libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt similarity index 100% rename from libs/locale/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt rename to libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt diff --git a/libs/locale/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt b/libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt similarity index 100% rename from libs/locale/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt rename to libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt diff --git a/libs/network/connectivity/bindings/.gitignore b/libs/network/connectivity/bindings/.gitignore new file mode 100644 index 000000000..9f2a07880 --- /dev/null +++ b/libs/network/connectivity/bindings/.gitignore @@ -0,0 +1,2 @@ +build/ +.gradle/ diff --git a/libs/network/connectivity/bindings/build.gradle.kts b/libs/network/connectivity/bindings/build.gradle.kts new file mode 100644 index 000000000..8a82db124 --- /dev/null +++ b/libs/network/connectivity/bindings/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) + id(Plugins.hilt) +} + +android { + namespace = "${Android.codeNamespace}.libs.network" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + implementation(project(":libs:network:connectivity:impl")) + api(project(":libs:network:connectivity:public")) + + implementation(Libs.hilt) + kapt(Libs.hilt_android_compiler) + kapt(Libs.hilt_compiler) +} diff --git a/libs/network/connectivity/bindings/src/main/kotlin/com/getcode/utils/network/ConnectivityModule.kt b/libs/network/connectivity/bindings/src/main/kotlin/com/getcode/utils/network/ConnectivityModule.kt new file mode 100644 index 000000000..cf1db2bfb --- /dev/null +++ b/libs/network/connectivity/bindings/src/main/kotlin/com/getcode/utils/network/ConnectivityModule.kt @@ -0,0 +1,39 @@ +package com.getcode.utils.network + +import android.annotation.SuppressLint +import android.net.ConnectivityManager +import android.net.wifi.WifiManager +import android.os.Build +import android.telephony.TelephonyManager +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object ConnectivityModule { + + @Provides + @SuppressLint("NewApi") + @Singleton + fun providesNetworkObserver( + connectivityManager: ConnectivityManager, + telephonyManager: TelephonyManager, + wifiManager: WifiManager + ): NetworkConnectivityListener = when (Build.VERSION.SDK_INT) { + in Build.VERSION_CODES.N..Build.VERSION_CODES.P -> { + Api24NetworkObserver( + wifiManager, + connectivityManager, + telephonyManager + ) + } + + else -> Api29NetworkObserver( + connectivityManager, + telephonyManager + ) + } +} \ No newline at end of file diff --git a/libs/network/connectivity/impl/.gitignore b/libs/network/connectivity/impl/.gitignore new file mode 100644 index 000000000..9f2a07880 --- /dev/null +++ b/libs/network/connectivity/impl/.gitignore @@ -0,0 +1,2 @@ +build/ +.gradle/ diff --git a/libs/network/connectivity/impl/build.gradle.kts b/libs/network/connectivity/impl/build.gradle.kts new file mode 100644 index 000000000..82e66180e --- /dev/null +++ b/libs/network/connectivity/impl/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) +} + +android { + namespace = "${Android.codeNamespace}.libs.network" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + api(project(":libs:network:connectivity:public")) + + implementation(Libs.kotlinx_coroutines_core) + implementation(Libs.kotlinx_serialization_json) + + implementation(Libs.inject) + implementation(Libs.hilt) +} diff --git a/libs/network/connectivity/src/main/AndroidManifest.xml b/libs/network/connectivity/impl/src/main/AndroidManifest.xml similarity index 100% rename from libs/network/connectivity/src/main/AndroidManifest.xml rename to libs/network/connectivity/impl/src/main/AndroidManifest.xml diff --git a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt similarity index 98% rename from libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt rename to libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt index c406545b2..4f22ec554 100644 --- a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt +++ b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api24NetworkObserver.kt @@ -123,7 +123,7 @@ class Api24NetworkObserver( } ?: ConnectionType.Unknown NetworkState( connected = connected, - signalStrength = maxOf(mobile, wifi), + signalStrength = kotlin.comparisons.maxOf(mobile, wifi), type = type, ) } diff --git a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt similarity index 98% rename from libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt rename to libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt index 5dd7497d9..148cb4f84 100644 --- a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt +++ b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/Api29NeworkObserver.kt @@ -120,7 +120,7 @@ class Api29NetworkObserver( } ?: ConnectionType.Unknown NetworkState( connected = connected, - signalStrength = maxOf(mobile, wifi), + signalStrength = kotlin.comparisons.maxOf(mobile, wifi), type = type, ) } diff --git a/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/SignalStrength.kt b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/SignalStrength.kt new file mode 100644 index 000000000..2f1d46e38 --- /dev/null +++ b/libs/network/connectivity/impl/src/main/kotlin/com/getcode/utils/network/SignalStrength.kt @@ -0,0 +1,10 @@ +package com.getcode.utils.network + +internal fun Int.toSignalStrength() = when (this) { + 0 -> SignalStrength.Weak + 1 -> SignalStrength.Poor + 2 -> SignalStrength.Good + 3 -> SignalStrength.Great + 4 -> SignalStrength.Strong + else -> SignalStrength.Unknown +} \ No newline at end of file diff --git a/libs/network/connectivity/public/.gitignore b/libs/network/connectivity/public/.gitignore new file mode 100644 index 000000000..9f2a07880 --- /dev/null +++ b/libs/network/connectivity/public/.gitignore @@ -0,0 +1,2 @@ +build/ +.gradle/ diff --git a/libs/network/connectivity/build.gradle.kts b/libs/network/connectivity/public/build.gradle.kts similarity index 100% rename from libs/network/connectivity/build.gradle.kts rename to libs/network/connectivity/public/build.gradle.kts diff --git a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt b/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt similarity index 85% rename from libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt rename to libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt index ddbac9d12..b298972c6 100644 --- a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt +++ b/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt @@ -50,15 +50,4 @@ class NetworkObserverStub : NetworkConnectivityListener { override val isConnected: Boolean = false override val type: ConnectionType = ConnectionType.Unknown override val state: StateFlow = MutableStateFlow(NetworkState.Default).asStateFlow() -} - - - -internal fun Int.toSignalStrength() = when (this) { - 0 -> SignalStrength.Weak - 1 -> SignalStrength.Poor - 2 -> SignalStrength.Good - 3 -> SignalStrength.Great - 4 -> SignalStrength.Strong - else -> SignalStrength.Unknown } \ No newline at end of file diff --git a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Retry.kt b/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Retry.kt similarity index 100% rename from libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/Retry.kt rename to libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Retry.kt diff --git a/libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt b/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt similarity index 100% rename from libs/network/connectivity/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt rename to libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt diff --git a/libs/permissions/.gitignore b/libs/permissions/bindings/.gitignore similarity index 100% rename from libs/permissions/.gitignore rename to libs/permissions/bindings/.gitignore diff --git a/libs/permissions/bindings/build.gradle.kts b/libs/permissions/bindings/build.gradle.kts new file mode 100644 index 000000000..642dbaf66 --- /dev/null +++ b/libs/permissions/bindings/build.gradle.kts @@ -0,0 +1,49 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) + id(Plugins.hilt) +} + +android { + namespace = "${Android.codeNamespace}.libs.permissions" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + implementation(project(":libs:permissions:impl")) + api(project(":libs:permissions:public")) + + implementation(Libs.hilt) + kapt(Libs.hilt_android_compiler) + kapt(Libs.hilt_compiler) + + implementation(Libs.timber) + implementation(Libs.bugsnag) +} diff --git a/libs/permissions/bindings/src/main/kotlin/com/getcode/util/permissions/PermissionsModule.kt b/libs/permissions/bindings/src/main/kotlin/com/getcode/util/permissions/PermissionsModule.kt new file mode 100644 index 000000000..0df87d6ec --- /dev/null +++ b/libs/permissions/bindings/src/main/kotlin/com/getcode/util/permissions/PermissionsModule.kt @@ -0,0 +1,16 @@ +package com.getcode.util.permissions + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class PermissionsModule { + + @Binds + @Singleton + abstract fun bindPermissionChecker(impl: AndroidPermissions): PermissionChecker +} \ No newline at end of file diff --git a/libs/vibrator/.gitignore b/libs/permissions/impl/.gitignore similarity index 100% rename from libs/vibrator/.gitignore rename to libs/permissions/impl/.gitignore diff --git a/libs/permissions/impl/build.gradle.kts b/libs/permissions/impl/build.gradle.kts new file mode 100644 index 000000000..386a5b56c --- /dev/null +++ b/libs/permissions/impl/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) +} + +android { + namespace = "${Android.codeNamespace}.libs.permissions" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + api(project(":libs:permissions:public")) + + implementation(Libs.inject) + implementation(Libs.hilt) +} diff --git a/libs/permissions/impl/src/main/kotlin/com/getcode/util/permissions/AndroidPermissions.kt b/libs/permissions/impl/src/main/kotlin/com/getcode/util/permissions/AndroidPermissions.kt new file mode 100644 index 000000000..dbd02f371 --- /dev/null +++ b/libs/permissions/impl/src/main/kotlin/com/getcode/util/permissions/AndroidPermissions.kt @@ -0,0 +1,26 @@ +package com.getcode.util.permissions + +import android.content.Context +import android.content.pm.PackageManager +import androidx.core.content.ContextCompat +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject + +class AndroidPermissions @Inject constructor( + @ApplicationContext private val context: Context +) : PermissionChecker { + override fun isGranted(permission: String): Boolean { + return check(permission) == PackageManager.PERMISSION_GRANTED + } + + override fun isDenied(permission: String): Boolean { + return check(permission) == PackageManager.PERMISSION_DENIED + } + + override fun check(permission: String): Int { + return ContextCompat.checkSelfPermission( + context, + permission, + ) + } +} \ No newline at end of file diff --git a/libs/permissions/public/.gitignore b/libs/permissions/public/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/libs/permissions/public/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/libs/permissions/build.gradle.kts b/libs/permissions/public/build.gradle.kts similarity index 100% rename from libs/permissions/build.gradle.kts rename to libs/permissions/public/build.gradle.kts diff --git a/libs/permissions/src/main/kotlin/com/getcode/util/ActivityLocator.kt b/libs/permissions/public/src/main/kotlin/com/getcode/util/ActivityLocator.kt similarity index 100% rename from libs/permissions/src/main/kotlin/com/getcode/util/ActivityLocator.kt rename to libs/permissions/public/src/main/kotlin/com/getcode/util/ActivityLocator.kt diff --git a/libs/permissions/src/main/kotlin/com/getcode/util/permissions/CameraPermissionCheck.kt b/libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/CameraPermissionCheck.kt similarity index 100% rename from libs/permissions/src/main/kotlin/com/getcode/util/permissions/CameraPermissionCheck.kt rename to libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/CameraPermissionCheck.kt diff --git a/libs/permissions/src/main/kotlin/com/getcode/util/permissions/NotificationPermissionCheck.kt b/libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/NotificationPermissionCheck.kt similarity index 100% rename from libs/permissions/src/main/kotlin/com/getcode/util/permissions/NotificationPermissionCheck.kt rename to libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/NotificationPermissionCheck.kt diff --git a/libs/permissions/src/main/kotlin/com/getcode/util/permissions/PermissionCheck.kt b/libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/PermissionCheck.kt similarity index 100% rename from libs/permissions/src/main/kotlin/com/getcode/util/permissions/PermissionCheck.kt rename to libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/PermissionCheck.kt diff --git a/libs/permissions/src/main/kotlin/com/getcode/util/permissions/PermissionChecker.kt b/libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/PermissionChecker.kt similarity index 100% rename from libs/permissions/src/main/kotlin/com/getcode/util/permissions/PermissionChecker.kt rename to libs/permissions/public/src/main/kotlin/com/getcode/util/permissions/PermissionChecker.kt diff --git a/libs/vibrator/bindings/.gitignore b/libs/vibrator/bindings/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/libs/vibrator/bindings/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/libs/vibrator/bindings/build.gradle.kts b/libs/vibrator/bindings/build.gradle.kts new file mode 100644 index 000000000..d749d55b4 --- /dev/null +++ b/libs/vibrator/bindings/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) + id(Plugins.hilt) +} + +android { + namespace = "${Android.codeNamespace}.util.vibration" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + implementation(project(":libs:vibrator:impl")) + api(project(":libs:vibrator:public")) + + implementation(Libs.hilt) + kapt(Libs.hilt_android_compiler) + kapt(Libs.hilt_compiler) +} diff --git a/libs/vibrator/bindings/src/main/kotlin/com/getcode/util/vibration/VibratorModule.kt b/libs/vibrator/bindings/src/main/kotlin/com/getcode/util/vibration/VibratorModule.kt new file mode 100644 index 000000000..4eebb592e --- /dev/null +++ b/libs/vibrator/bindings/src/main/kotlin/com/getcode/util/vibration/VibratorModule.kt @@ -0,0 +1,35 @@ +package com.getcode.util.vibration + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Build +import android.os.VibratorManager +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object VibratorModule { + + @SuppressLint("NewApi") + @Provides + @Singleton + fun providesVibrator( + @ApplicationContext context: Context + ): Vibrator = when (val apiLevel = Build.VERSION.SDK_INT) { + in Build.VERSION_CODES.BASE..Build.VERSION_CODES.R -> { + val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as android.os.Vibrator + if (apiLevel >= Build.VERSION_CODES.O) { + Api26Vibrator(vibrator) + } else { + Api25Vibrator(vibrator) + } + } + + else -> Api31Vibrator(context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager) + } +} \ No newline at end of file diff --git a/libs/vibrator/impl/.gitignore b/libs/vibrator/impl/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/libs/vibrator/impl/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/libs/vibrator/impl/build.gradle.kts b/libs/vibrator/impl/build.gradle.kts new file mode 100644 index 000000000..b19a3ca6c --- /dev/null +++ b/libs/vibrator/impl/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + id(Plugins.android_library) + id(Plugins.kotlin_android) + id(Plugins.kotlin_kapt) + id(Plugins.kotlin_serialization) +} + +android { + namespace = "${Android.codeNamespace}.util.vibration" + compileSdk = Android.compileSdkVersion + defaultConfig { + minSdk = Android.minSdkVersion + targetSdk = Android.targetSdkVersion + buildToolsVersion = Android.buildToolsVersion + testInstrumentationRunner = Android.testInstrumentationRunner + } + + compileOptions { + sourceCompatibility(Versions.java) + targetCompatibility(Versions.java) + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(Versions.java)) + } + } + + kotlinOptions { + jvmTarget = Versions.java + freeCompilerArgs += listOf( + "-opt-in=kotlin.ExperimentalUnsignedTypes", + "-opt-in=kotlin.RequiresOptIn" + ) + } +} + +dependencies { + api(project(":libs:vibrator:public")) + + implementation(Libs.inject) + implementation(Libs.hilt) +} diff --git a/libs/vibrator/src/main/AndroidManifest.xml b/libs/vibrator/impl/src/main/kotlin/AndroidManifest.xml similarity index 100% rename from libs/vibrator/src/main/AndroidManifest.xml rename to libs/vibrator/impl/src/main/kotlin/AndroidManifest.xml diff --git a/libs/vibrator/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt b/libs/vibrator/impl/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt similarity index 97% rename from libs/vibrator/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt rename to libs/vibrator/impl/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt index b040c434c..82483307b 100644 --- a/libs/vibrator/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt +++ b/libs/vibrator/impl/src/main/kotlin/com/getcode/util/vibration/AndroidVibrator.kt @@ -1,5 +1,6 @@ package com.getcode.util.vibration +import android.annotation.SuppressLint import android.os.Build import android.os.CombinedVibration import android.os.VibrationEffect diff --git a/libs/vibrator/public/.gitignore b/libs/vibrator/public/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/libs/vibrator/public/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/libs/vibrator/build.gradle.kts b/libs/vibrator/public/build.gradle.kts similarity index 100% rename from libs/vibrator/build.gradle.kts rename to libs/vibrator/public/build.gradle.kts diff --git a/libs/vibrator/src/main/kotlin/com/getcode/util/vibration/Vibrator.kt b/libs/vibrator/public/src/main/kotlin/com/getcode/util/vibration/Vibrator.kt similarity index 100% rename from libs/vibrator/src/main/kotlin/com/getcode/util/vibration/Vibrator.kt rename to libs/vibrator/public/src/main/kotlin/com/getcode/util/vibration/Vibrator.kt diff --git a/services/code/build.gradle.kts b/services/code/build.gradle.kts index cb20b101c..35c2b8d8c 100644 --- a/services/code/build.gradle.kts +++ b/services/code/build.gradle.kts @@ -76,9 +76,9 @@ dependencies { api(project(":libs:logging")) api(project(":libs:models")) api(project(":libs:network:exchange")) - api(project(":libs:network:connectivity")) + api(project(":libs:network:connectivity:public")) - implementation(project(":libs:locale")) + implementation(project(":libs:locale:public")) implementation(project(":ui:resources")) implementation(Libs.rxjava) diff --git a/services/shared/build.gradle.kts b/services/shared/build.gradle.kts index 8811723c9..3f4135659 100644 --- a/services/shared/build.gradle.kts +++ b/services/shared/build.gradle.kts @@ -52,7 +52,7 @@ dependencies { api(project(":libs:logging")) api(project(":libs:models")) api(project(":libs:network:exchange")) - api(project(":libs:network:connectivity")) + api(project(":libs:network:connectivity:public")) implementation(project(":ui:resources")) implementation(Libs.rxjava) diff --git a/settings.gradle b/settings.gradle index 87ab7fc56..288e30b0c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,6 +3,7 @@ rootProject.name = "Code" include( // apps ":apps:codeApp", + ":apps:flipcashApp", ":apps:flipchatApp", // protobuf model and service implementations for Code @@ -29,26 +30,40 @@ include( ":libs:encryption:sha256", ":libs:encryption:sha512", ":libs:encryption:utils", - ":libs:locale", + + ":libs:locale:bindings", + ":libs:locale:impl", + ":libs:locale:public", + ":libs:logging", ":libs:messaging", - ':libs:models', + ":libs:models", ":libs:network:exchange", - ':libs:opengraph', - ':libs:network:connectivity', - ":libs:permissions", + ":libs:opengraph", + + ":libs:network:connectivity:bindings", + ":libs:network:connectivity:impl", + ":libs:network:connectivity:public", + + ":libs:permissions:bindings", + ":libs:permissions:impl", + ":libs:permissions:public", + ":libs:quickresponse", ":libs:requests", ":libs:search", - ":libs:vibrator", + + ":libs:vibrator:bindings", + ":libs:vibrator:impl", + ":libs:vibrator:public", // Services definition for app and lib access ":services:shared", ":services:code", - ':services:flipchat:core', + ":services:flipchat:core", ":services:flipchat:chat", ":services:flipchat:payments", - ':services:flipchat:sdk', + ":services:flipchat:sdk", // common UI ":ui:analytics", diff --git a/ui/components/build.gradle.kts b/ui/components/build.gradle.kts index 497c95687..0d94e2c82 100644 --- a/ui/components/build.gradle.kts +++ b/ui/components/build.gradle.kts @@ -55,10 +55,10 @@ dependencies { implementation(project(":libs:messaging")) implementation(project(":libs:models")) implementation(project(":libs:network:exchange")) - implementation(project(":libs:network:connectivity")) + implementation(project(":libs:network:connectivity:public")) implementation(project(":libs:opengraph")) implementation(project(":libs:requests")) - implementation(project(":libs:vibrator")) + implementation(project(":libs:vibrator:public")) api(project(":ui:core")) implementation(project(":ui:emojis")) implementation(project(":ui:theme")) From 7d6162317160bdfa758304eb6714257a2e0fab01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:09:08 +0000 Subject: [PATCH 2/2] build(deps): bump org.jsoup:jsoup from 1.16.1 to 1.22.1 Bumps [org.jsoup:jsoup](https://github.com/jhy/jsoup) from 1.16.1 to 1.22.1. - [Release notes](https://github.com/jhy/jsoup/releases) - [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md) - [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.16.1...jsoup-1.22.1) --- updated-dependencies: - dependency-name: org.jsoup:jsoup dependency-version: 1.22.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- libs/opengraph/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/opengraph/build.gradle.kts b/libs/opengraph/build.gradle.kts index a6f6cdd3a..a0ead9f02 100644 --- a/libs/opengraph/build.gradle.kts +++ b/libs/opengraph/build.gradle.kts @@ -48,7 +48,7 @@ dependencies { implementation(platform(Libs.compose_bom)) implementation(Libs.compose_ui) - implementation("org.jsoup:jsoup:1.16.1") + implementation("org.jsoup:jsoup:1.22.1") implementation(project(":libs:encryption:utils")) implementation(Libs.kotlinx_coroutines_core)