mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-03 03:57:31 +01:00
feat(crash-report): add crash report module
This commit is contained in:
parent
39a80161e1
commit
62ba4f1967
4
.gitignore
vendored
4
.gitignore
vendored
@ -8,3 +8,7 @@ captures
|
|||||||
.cxx
|
.cxx
|
||||||
local.properties
|
local.properties
|
||||||
xcuserdata
|
xcuserdata
|
||||||
|
|
||||||
|
google-services.json
|
||||||
|
GoogleService-Info.plist
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ plugins {
|
|||||||
alias(libs.plugins.android.application)
|
alias(libs.plugins.android.application)
|
||||||
alias(libs.plugins.kotlin.android)
|
alias(libs.plugins.kotlin.android)
|
||||||
alias(libs.plugins.compose)
|
alias(libs.plugins.compose)
|
||||||
|
alias(libs.plugins.gms)
|
||||||
|
alias(libs.plugins.crashlytics)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@ -48,4 +50,5 @@ dependencies {
|
|||||||
implementation(libs.koin.android)
|
implementation(libs.koin.android)
|
||||||
|
|
||||||
implementation(projects.shared)
|
implementation(projects.shared)
|
||||||
|
implementation(projects.coreCrashreport)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package com.github.diegoberaldin.raccoonforlemmy.android
|
package com.github.diegoberaldin.raccoonforlemmy.android
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.crashreport.CrashReportManager
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.sharedHelperModule
|
import com.github.diegoberaldin.raccoonforlemmy.sharedHelperModule
|
||||||
|
import org.koin.android.ext.android.inject
|
||||||
import org.koin.android.ext.koin.androidContext
|
import org.koin.android.ext.koin.androidContext
|
||||||
import org.koin.android.ext.koin.androidLogger
|
import org.koin.android.ext.koin.androidLogger
|
||||||
import org.koin.core.context.startKoin
|
import org.koin.core.context.startKoin
|
||||||
@ -16,6 +18,9 @@ class MainApplication : Application() {
|
|||||||
modules(
|
modules(
|
||||||
sharedHelperModule,
|
sharedHelperModule,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val crashManager: CrashReportManager by inject()
|
||||||
|
crashManager.setup()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@ plugins {
|
|||||||
alias(libs.plugins.ksp).apply(false)
|
alias(libs.plugins.ksp).apply(false)
|
||||||
alias(libs.plugins.ktorfit).apply(false)
|
alias(libs.plugins.ktorfit).apply(false)
|
||||||
alias(libs.plugins.kotlinx.serialization).apply(false)
|
alias(libs.plugins.kotlinx.serialization).apply(false)
|
||||||
|
alias(libs.plugins.crashlytics).apply(false)
|
||||||
|
alias(libs.plugins.gms).apply(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("clean", Delete::class) {
|
tasks.register("clean", Delete::class) {
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.commonui.createpost
|
||||||
|
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
|
||||||
|
|
||||||
|
interface CreatePostMviModel :
|
||||||
|
MviModel<CreatePostMviModel.Intent, CreatePostMviModel.UiState, CreatePostMviModel.Effect> {
|
||||||
|
|
||||||
|
sealed interface Intent {
|
||||||
|
data class SetTitle(val value: String) : Intent
|
||||||
|
data class SetText(val value: String) : Intent
|
||||||
|
|
||||||
|
object Send : Intent
|
||||||
|
}
|
||||||
|
|
||||||
|
data class UiState(
|
||||||
|
val title: String = "",
|
||||||
|
val body: String = "",
|
||||||
|
)
|
||||||
|
|
||||||
|
sealed interface Effect {
|
||||||
|
object Success : Effect
|
||||||
|
|
||||||
|
data class Failure(val message: String?) : Effect
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,168 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.commonui.createpost
|
||||||
|
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.heightIn
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
import androidx.compose.foundation.text.KeyboardActions
|
||||||
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Send
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.SnackbarHost
|
||||||
|
import androidx.compose.material3.SnackbarHostState
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
|
import androidx.compose.ui.focus.focusRequester
|
||||||
|
import androidx.compose.ui.text.input.ImeAction
|
||||||
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import cafe.adriel.voyager.core.model.rememberScreenModel
|
||||||
|
import cafe.adriel.voyager.core.screen.Screen
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.bindToLifecycle
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getCreatePostViewModel
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
||||||
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
|
|
||||||
|
class CreatePostScreen(
|
||||||
|
private val communityId: Int,
|
||||||
|
private val onPostCreated: () -> Unit = {},
|
||||||
|
) : Screen {
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
override fun Content() {
|
||||||
|
val model = rememberScreenModel { getCreatePostViewModel(communityId) }
|
||||||
|
model.bindToLifecycle(key)
|
||||||
|
val uiState by model.uiState.collectAsState()
|
||||||
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
|
val genericError = stringResource(MR.strings.message_generic_error)
|
||||||
|
|
||||||
|
LaunchedEffect(model) {
|
||||||
|
model.effects.onEach {
|
||||||
|
when (it) {
|
||||||
|
is CreatePostMviModel.Effect.Failure -> {
|
||||||
|
snackbarHostState.showSnackbar(it.message ?: genericError)
|
||||||
|
}
|
||||||
|
|
||||||
|
CreatePostMviModel.Effect.Success -> onPostCreated()
|
||||||
|
}
|
||||||
|
}.launchIn(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
Scaffold(
|
||||||
|
topBar = {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(Spacing.s),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier.width(60.dp)
|
||||||
|
.height(1.dp)
|
||||||
|
.background(
|
||||||
|
color = MaterialTheme.colorScheme.onSurface,
|
||||||
|
shape = RoundedCornerShape(1.dp),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
text = stringResource(MR.strings.create_post_title),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
snackbarHost = {
|
||||||
|
SnackbarHost(snackbarHostState)
|
||||||
|
}
|
||||||
|
) { padding ->
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.padding(padding)
|
||||||
|
) {
|
||||||
|
val bodyFocusRequester = remember { FocusRequester() }
|
||||||
|
TextField(
|
||||||
|
modifier = Modifier.fillMaxWidth().heightIn(max = 300.dp),
|
||||||
|
label = {
|
||||||
|
Text(text = stringResource(MR.strings.create_post_name))
|
||||||
|
},
|
||||||
|
textStyle = MaterialTheme.typography.titleMedium,
|
||||||
|
value = uiState.title,
|
||||||
|
keyboardOptions = KeyboardOptions(
|
||||||
|
keyboardType = KeyboardType.Ascii,
|
||||||
|
autoCorrect = false,
|
||||||
|
imeAction = ImeAction.Next,
|
||||||
|
),
|
||||||
|
keyboardActions = KeyboardActions(
|
||||||
|
onNext = {
|
||||||
|
bodyFocusRequester.requestFocus()
|
||||||
|
}
|
||||||
|
),
|
||||||
|
onValueChange = { value ->
|
||||||
|
model.reduce(CreatePostMviModel.Intent.SetTitle(value))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
TextField(
|
||||||
|
modifier = Modifier.height(500.dp)
|
||||||
|
.fillMaxWidth()
|
||||||
|
.focusRequester(bodyFocusRequester),
|
||||||
|
label = {
|
||||||
|
Text(text = stringResource(MR.strings.create_post_body))
|
||||||
|
},
|
||||||
|
textStyle = MaterialTheme.typography.bodyMedium,
|
||||||
|
value = uiState.body,
|
||||||
|
keyboardOptions = KeyboardOptions(
|
||||||
|
keyboardType = KeyboardType.Ascii,
|
||||||
|
autoCorrect = false,
|
||||||
|
imeAction = ImeAction.Send,
|
||||||
|
),
|
||||||
|
keyboardActions = KeyboardActions(
|
||||||
|
onSend = {
|
||||||
|
model.reduce(CreatePostMviModel.Intent.Send)
|
||||||
|
}
|
||||||
|
),
|
||||||
|
onValueChange = { value ->
|
||||||
|
model.reduce(CreatePostMviModel.Intent.SetText(value))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
Row {
|
||||||
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
IconButton(
|
||||||
|
content = {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Send,
|
||||||
|
contentDescription = null,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
model.reduce(CreatePostMviModel.Intent.Send)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.commonui.createpost
|
||||||
|
|
||||||
|
import cafe.adriel.voyager.core.model.ScreenModel
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostsRepository
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.IO
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
class CreatePostViewModel(
|
||||||
|
private val communityId: Int,
|
||||||
|
private val mvi: DefaultMviModel<CreatePostMviModel.Intent, CreatePostMviModel.UiState, CreatePostMviModel.Effect> = DefaultMviModel(
|
||||||
|
CreatePostMviModel.UiState()
|
||||||
|
),
|
||||||
|
private val identityRepository: IdentityRepository,
|
||||||
|
private val postsRepository: PostsRepository,
|
||||||
|
) : ScreenModel,
|
||||||
|
MviModel<CreatePostMviModel.Intent, CreatePostMviModel.UiState, CreatePostMviModel.Effect> by mvi {
|
||||||
|
|
||||||
|
override fun reduce(intent: CreatePostMviModel.Intent) {
|
||||||
|
when (intent) {
|
||||||
|
is CreatePostMviModel.Intent.SetTitle -> {
|
||||||
|
mvi.updateState {
|
||||||
|
it.copy(title = intent.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is CreatePostMviModel.Intent.SetText -> {
|
||||||
|
mvi.updateState {
|
||||||
|
it.copy(body = intent.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CreatePostMviModel.Intent.Send -> submit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun submit() {
|
||||||
|
mvi.scope.launch(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val auth = identityRepository.authToken.value.orEmpty()
|
||||||
|
val title = uiState.value.title
|
||||||
|
val body = uiState.value.body
|
||||||
|
postsRepository.create(
|
||||||
|
communityId = communityId,
|
||||||
|
title = title,
|
||||||
|
body = body,
|
||||||
|
auth = auth,
|
||||||
|
)
|
||||||
|
mvi.emitEffect(CreatePostMviModel.Effect.Success)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
val message = e.message
|
||||||
|
mvi.emitEffect(CreatePostMviModel.Effect.Failure(message))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
57
core-crashreport/build.gradle.kts
Normal file
57
core-crashreport/build.gradle.kts
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.kotlin.multiplatform)
|
||||||
|
alias(libs.plugins.android.library)
|
||||||
|
alias(libs.plugins.native.cocoapods)
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
|
||||||
|
kotlin {
|
||||||
|
targetHierarchy.default()
|
||||||
|
|
||||||
|
android {
|
||||||
|
compilations.all {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
iosX64()
|
||||||
|
iosArm64()
|
||||||
|
iosSimulatorArm64()
|
||||||
|
|
||||||
|
cocoapods {
|
||||||
|
summary = "Some description for the Shared Module"
|
||||||
|
homepage = "Link to the Shared Module homepage"
|
||||||
|
version = "1.0"
|
||||||
|
ios.deploymentTarget = "14.1"
|
||||||
|
framework {
|
||||||
|
baseName = "core-crashreport"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val androidMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(libs.firebase.crashlytics)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val commonMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(libs.koin.core)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val commonTest by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(kotlin("test"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "com.github.diegoberaldin.raccoonforlemmy.core.crashreport"
|
||||||
|
compileSdk = 33
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = 26
|
||||||
|
}
|
||||||
|
}
|
42
core-crashreport/core-crashreport.podspec
Normal file
42
core-crashreport/core-crashreport.podspec
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Pod::Spec.new do |spec|
|
||||||
|
spec.name = 'core-crashreport'
|
||||||
|
spec.version = '1.0'
|
||||||
|
spec.homepage = 'Link to the Shared Module homepage'
|
||||||
|
spec.source = { :git => "Not Published", :tag => "Cocoapods/#{spec.name}/#{spec.version}" }
|
||||||
|
spec.authors = ''
|
||||||
|
spec.license = ''
|
||||||
|
spec.summary = 'Some description for the Shared Module'
|
||||||
|
|
||||||
|
spec.vendored_frameworks = "build/cocoapods/framework/core-crashreport.framework"
|
||||||
|
spec.libraries = "c++"
|
||||||
|
spec.module_name = "#{spec.name}_umbrella"
|
||||||
|
|
||||||
|
spec.ios.deployment_target = '14.1'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
spec.pod_target_xcconfig = {
|
||||||
|
'KOTLIN_PROJECT_PATH' => ':core-crashreport',
|
||||||
|
'PRODUCT_MODULE_NAME' => 'core-crashreport',
|
||||||
|
}
|
||||||
|
|
||||||
|
spec.script_phases = [
|
||||||
|
{
|
||||||
|
:name => 'Build core-crashreport',
|
||||||
|
:execution_position => :before_compile,
|
||||||
|
:shell_path => '/bin/sh',
|
||||||
|
:script => <<-SCRIPT
|
||||||
|
if [ "YES" = "$COCOAPODS_SKIP_KOTLIN_BUILD" ]; then
|
||||||
|
echo "Skipping Gradle build task invocation due to COCOAPODS_SKIP_KOTLIN_BUILD environment variable set to \"YES\""
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
set -ev
|
||||||
|
REPO_ROOT="$PODS_TARGET_SRCROOT"
|
||||||
|
"$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \
|
||||||
|
-Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \
|
||||||
|
-Pkotlin.native.cocoapods.archs="$ARCHS" \
|
||||||
|
-Pkotlin.native.cocoapods.configuration=$CONFIGURATION
|
||||||
|
SCRIPT
|
||||||
|
}
|
||||||
|
]
|
||||||
|
end
|
39
core-crashreport/core_crashreport.podspec
Normal file
39
core-crashreport/core_crashreport.podspec
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
Pod::Spec.new do |spec|
|
||||||
|
spec.name = 'core_crashreport'
|
||||||
|
spec.version = '1.0'
|
||||||
|
spec.homepage = 'Link to the Shared Module homepage'
|
||||||
|
spec.source = { :http=> ''}
|
||||||
|
spec.authors = ''
|
||||||
|
spec.license = ''
|
||||||
|
spec.summary = 'Some description for the Shared Module'
|
||||||
|
spec.vendored_frameworks = 'build/cocoapods/framework/core-crashreport.framework'
|
||||||
|
spec.libraries = 'c++'
|
||||||
|
spec.ios.deployment_target = '14.1'
|
||||||
|
|
||||||
|
|
||||||
|
spec.pod_target_xcconfig = {
|
||||||
|
'KOTLIN_PROJECT_PATH' => ':core-crashreport',
|
||||||
|
'PRODUCT_MODULE_NAME' => 'core-crashreport',
|
||||||
|
}
|
||||||
|
|
||||||
|
spec.script_phases = [
|
||||||
|
{
|
||||||
|
:name => 'Build core_crashreport',
|
||||||
|
:execution_position => :before_compile,
|
||||||
|
:shell_path => '/bin/sh',
|
||||||
|
:script => <<-SCRIPT
|
||||||
|
if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then
|
||||||
|
echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\""
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
set -ev
|
||||||
|
REPO_ROOT="$PODS_TARGET_SRCROOT"
|
||||||
|
"$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \
|
||||||
|
-Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \
|
||||||
|
-Pkotlin.native.cocoapods.archs="$ARCHS" \
|
||||||
|
-Pkotlin.native.cocoapods.configuration="$CONFIGURATION"
|
||||||
|
SCRIPT
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.google.firebase.FirebaseApp
|
||||||
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||||
|
|
||||||
|
class DefaultCrashReportManager(
|
||||||
|
private val context: Context,
|
||||||
|
) : CrashReportManager {
|
||||||
|
override fun setup() {
|
||||||
|
FirebaseApp.initializeApp(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun log(message: String) {
|
||||||
|
FirebaseCrashlytics.getInstance().log(message)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun recordException(exc: Throwable) {
|
||||||
|
FirebaseCrashlytics.getInstance().recordException(exc)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport.di
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.crashreport.CrashReportManager
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.crashreport.DefaultCrashReportManager
|
||||||
|
import org.koin.dsl.module
|
||||||
|
|
||||||
|
actual val crashReportModule = module {
|
||||||
|
single<CrashReportManager> {
|
||||||
|
val context: Context by inject()
|
||||||
|
DefaultCrashReportManager(context)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport
|
||||||
|
|
||||||
|
interface CrashReportManager {
|
||||||
|
fun setup()
|
||||||
|
fun log(message: String)
|
||||||
|
fun recordException(exc: Throwable)
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport.di
|
||||||
|
|
||||||
|
import org.koin.core.module.Module
|
||||||
|
|
||||||
|
expect val crashReportModule: Module
|
@ -0,0 +1,15 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport
|
||||||
|
|
||||||
|
actual class DefaultCrashReportManager : CrashReportManager {
|
||||||
|
override fun setup() {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun log(message: String) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun recordException(exc: Throwable) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.github.diegoberaldin.raccoonforlemmy.core.crashreport.di
|
||||||
|
|
||||||
|
import org.koin.dsl.module
|
||||||
|
|
||||||
|
actual val crashReportModule = module { }
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.github.diegoberaldin.racconforlemmy.core.utils
|
||||||
|
|
||||||
|
object AppInfo {
|
||||||
|
var versionCode = ""
|
||||||
|
}
|
@ -3,6 +3,9 @@ androidx_activity_compose = "1.7.2"
|
|||||||
androidx_crypto = "1.0.0"
|
androidx_crypto = "1.0.0"
|
||||||
android_gradle = "7.4.2"
|
android_gradle = "7.4.2"
|
||||||
compose = "1.4.3"
|
compose = "1.4.3"
|
||||||
|
crashlytics = "18.4.1"
|
||||||
|
crashlytics_gradle = "2.9.9"
|
||||||
|
gms_gradle = "4.3.15"
|
||||||
kamel = "0.7.1"
|
kamel = "0.7.1"
|
||||||
koin = "3.2.0"
|
koin = "3.2.0"
|
||||||
kotlin = "1.8.20"
|
kotlin = "1.8.20"
|
||||||
@ -20,6 +23,8 @@ voyager = "1.0.0-rc05"
|
|||||||
androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "androidx.activity.compose" }
|
androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "androidx.activity.compose" }
|
||||||
androidx_security_crypto = { module = "androidx.security:security-crypto", version.ref = "androidx.crypto" }
|
androidx_security_crypto = { module = "androidx.security:security-crypto", version.ref = "androidx.crypto" }
|
||||||
|
|
||||||
|
firebase_crashlytics = { module = "com.google.firebase:firebase-crashlytics", version.ref = "crashlytics" }
|
||||||
|
|
||||||
kamel = { module = "media.kamel:kamel-image", version.ref = "kamel" }
|
kamel = { module = "media.kamel:kamel-image", version.ref = "kamel" }
|
||||||
markdown = { module = "org.jetbrains:markdown", version.ref = "markdown" }
|
markdown = { module = "org.jetbrains:markdown", version.ref = "markdown" }
|
||||||
multiplatform_settings = { module = "com.russhwolf:multiplatform-settings", version.ref = "multiplatform.settings" }
|
multiplatform_settings = { module = "com.russhwolf:multiplatform-settings", version.ref = "multiplatform.settings" }
|
||||||
@ -53,6 +58,7 @@ voyager_androidx = { module = "cafe.adriel.voyager:voyager-koin", version.ref =
|
|||||||
android_application = { id = "com.android.application", version.ref = "android.gradle" }
|
android_application = { id = "com.android.application", version.ref = "android.gradle" }
|
||||||
android_library = { id = "com.android.library", version.ref = "android.gradle" }
|
android_library = { id = "com.android.library", version.ref = "android.gradle" }
|
||||||
compose = { id = "org.jetbrains.compose", version = "1.4.1" }
|
compose = { id = "org.jetbrains.compose", version = "1.4.1" }
|
||||||
|
crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "crashlytics.gradle" }
|
||||||
kotlin_android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
kotlin_android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||||
kotlin_multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
kotlin_multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||||
kotlinx_serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
kotlinx_serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||||||
@ -60,3 +66,4 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
|||||||
ktorfit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktorfit.gradle" }
|
ktorfit = { id = "de.jensklingenberg.ktorfit", version.ref = "ktorfit.gradle" }
|
||||||
native_cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
|
native_cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
|
||||||
moko_resources = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko.resources" }
|
moko_resources = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko.resources" }
|
||||||
|
gms = { id = "com.google.gms.google-services", version.ref = "gms.gradle" }
|
@ -4,4 +4,7 @@ target 'iosApp' do
|
|||||||
use_frameworks!
|
use_frameworks!
|
||||||
platform :ios, '14.1'
|
platform :ios, '14.1'
|
||||||
pod 'shared', :path => '../shared'
|
pod 'shared', :path => '../shared'
|
||||||
|
|
||||||
|
pod 'FirebaseAuth'
|
||||||
|
pod 'FirebaseFirestore'
|
||||||
end
|
end
|
@ -1,2 +1,16 @@
|
|||||||
${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh
|
${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh
|
||||||
${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework
|
${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/abseil/absl.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
|
@ -1 +1,15 @@
|
|||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/openssl_grpc.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAppCheckInterop.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestore.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RecaptchaInterop.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/absl.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpcpp.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpc.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
|
@ -1,2 +1,16 @@
|
|||||||
${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh
|
${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh
|
||||||
${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework
|
${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/abseil/absl.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework
|
||||||
|
${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
|
@ -1 +1,15 @@
|
|||||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared.framework
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/openssl_grpc.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAppCheckInterop.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestore.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RecaptchaInterop.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/absl.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpcpp.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpc.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework
|
||||||
|
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
|
@ -176,10 +176,38 @@ code_sign_if_enabled() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$CONFIGURATION" == "Debug" ]]; then
|
if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||||
install_framework "${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/abseil/absl.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
|
||||||
fi
|
fi
|
||||||
if [[ "$CONFIGURATION" == "Release" ]]; then
|
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||||
install_framework "${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework"
|
install_framework "${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/abseil/absl.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework"
|
||||||
|
install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
|
||||||
fi
|
fi
|
||||||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||||
wait
|
wait
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import Firebase
|
||||||
|
|
||||||
@main
|
@main
|
||||||
struct iOSApp: App {
|
struct iOSApp: App {
|
||||||
@ -6,6 +7,7 @@ struct iOSApp: App {
|
|||||||
init() {
|
init() {
|
||||||
// DiHelperKt.initKoin()
|
// DiHelperKt.initKoin()
|
||||||
DiHelperKt.doInitKoin()
|
DiHelperKt.doInitKoin()
|
||||||
|
FirebaseApp.configure()
|
||||||
}
|
}
|
||||||
|
|
||||||
var body: some Scene {
|
var body: some Scene {
|
||||||
|
@ -21,21 +21,22 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
|||||||
rootProject.name = "Raccoon_for_Lemmy"
|
rootProject.name = "Raccoon_for_Lemmy"
|
||||||
include(":androidApp")
|
include(":androidApp")
|
||||||
include(":shared")
|
include(":shared")
|
||||||
|
include(":resources")
|
||||||
|
include(":core-utils")
|
||||||
|
include(":core-appearance")
|
||||||
|
include(":core-preferences")
|
||||||
|
include(":core-architecture")
|
||||||
|
include(":core-api")
|
||||||
|
include(":core-md")
|
||||||
|
include(":core-commonui")
|
||||||
|
include(":core-notifications")
|
||||||
|
include(":core-crashreport")
|
||||||
|
include(":domain-lemmy")
|
||||||
|
include(":domain-lemmy:repository")
|
||||||
|
include(":domain-lemmy:data")
|
||||||
|
include(":domain-identity")
|
||||||
include(":feature-home")
|
include(":feature-home")
|
||||||
include(":feature-inbox")
|
include(":feature-inbox")
|
||||||
include(":feature-search")
|
include(":feature-search")
|
||||||
include(":feature-profile")
|
include(":feature-profile")
|
||||||
include(":feature-settings")
|
include(":feature-settings")
|
||||||
include(":core-utils")
|
|
||||||
include(":core-appearance")
|
|
||||||
include(":core-preferences")
|
|
||||||
include(":resources")
|
|
||||||
include(":core-architecture")
|
|
||||||
include(":core-api")
|
|
||||||
include(":domain-lemmy")
|
|
||||||
include(":domain-lemmy:repository")
|
|
||||||
include(":domain-lemmy:data")
|
|
||||||
include(":domain-identity")
|
|
||||||
include(":core-md")
|
|
||||||
include(":core-commonui")
|
|
||||||
include(":core-notifications")
|
|
||||||
|
@ -60,6 +60,7 @@ kotlin {
|
|||||||
implementation(projects.corePreferences)
|
implementation(projects.corePreferences)
|
||||||
implementation(projects.coreApi)
|
implementation(projects.coreApi)
|
||||||
implementation(projects.coreNotifications)
|
implementation(projects.coreNotifications)
|
||||||
|
implementation(projects.coreCrashreport)
|
||||||
implementation(projects.domainIdentity)
|
implementation(projects.domainIdentity)
|
||||||
|
|
||||||
api(projects.resources)
|
api(projects.resources)
|
||||||
|
@ -3,6 +3,7 @@ package com.github.diegoberaldin.raccoonforlemmy
|
|||||||
import com.github.diegoberaldin.racconforlemmy.core.utils.hapticFeedbackModule
|
import com.github.diegoberaldin.racconforlemmy.core.utils.hapticFeedbackModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.api.di.coreApiModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.api.di.coreApiModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.coreAppearanceModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.coreAppearanceModule
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.crashreport.di.crashReportModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.coreNotificationModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.coreNotificationModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.preferences.di.corePreferencesModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.preferences.di.corePreferencesModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.di.coreIdentityModule
|
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.di.coreIdentityModule
|
||||||
@ -21,6 +22,7 @@ val sharedHelperModule = module {
|
|||||||
coreApiModule,
|
coreApiModule,
|
||||||
coreIdentityModule,
|
coreIdentityModule,
|
||||||
coreNotificationModule,
|
coreNotificationModule,
|
||||||
|
crashReportModule,
|
||||||
hapticFeedbackModule,
|
hapticFeedbackModule,
|
||||||
localizationModule,
|
localizationModule,
|
||||||
homeTabModule,
|
homeTabModule,
|
||||||
|
@ -3,6 +3,7 @@ package com.github.diegoberaldin.raccoonforlemmy
|
|||||||
import com.github.diegoberaldin.racconforlemmy.core.utils.hapticFeedbackModule
|
import com.github.diegoberaldin.racconforlemmy.core.utils.hapticFeedbackModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.api.di.coreApiModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.api.di.coreApiModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.coreAppearanceModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.coreAppearanceModule
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.crashreport.di.crashReportModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.coreNotificationModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.coreNotificationModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.preferences.di.corePreferencesModule
|
import com.github.diegoberaldin.raccoonforlemmy.core.preferences.di.corePreferencesModule
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.di.coreIdentityModule
|
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.di.coreIdentityModule
|
||||||
@ -22,6 +23,7 @@ fun initKoin() {
|
|||||||
coreApiModule,
|
coreApiModule,
|
||||||
coreIdentityModule,
|
coreIdentityModule,
|
||||||
coreNotificationModule,
|
coreNotificationModule,
|
||||||
|
crashReportModule,
|
||||||
hapticFeedbackModule,
|
hapticFeedbackModule,
|
||||||
localizationModule,
|
localizationModule,
|
||||||
homeTabModule,
|
homeTabModule,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user