Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ dependencies {
implementation(libs.androidx.material3)
implementation(libs.androidx.viewMaterial)
implementation(libs.androidx.icons)
implementation(libs.androidx.constraintLayoutCompose)

// Timber
implementation(libs.timber)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import com.github.ai.split.api.response.PostGroupResponse
import com.github.ai.split.api.response.PostMemberResponse
import com.github.ai.split.api.response.PutExpenseResponse
import com.github.ai.split.api.response.PutGroupResponse
import io.ktor.client.HttpClient

class ApiClient(
private val jsonSerializer: JsonSerializer,
Expand All @@ -27,23 +28,28 @@ class ApiClient(

private var baseUrl by atomicReference(settings.serverUrl)
private var httpClient by atomicReference(
HttpClientFactory.createHttpClient(
jsonSerializer = jsonSerializer,
isSslVerificationEnabled = settings.isSslVerificationEnabled
)
buildHttpClient(jsonSerializer, settings)
)

fun updateHttpClient() {
httpClient = HttpClientFactory.createHttpClient(
jsonSerializer = jsonSerializer,
isSslVerificationEnabled = settings.isSslVerificationEnabled
)
httpClient = buildHttpClient(jsonSerializer, settings)
}

fun updateServerUrl() {
baseUrl = settings.serverUrl
}

private fun buildHttpClient(
jsonSerializer: JsonSerializer,
settings: Settings
): HttpClient {
return HttpClientFactory.createHttpClient(
jsonSerializer = jsonSerializer,
isSslVerificationEnabled = settings.isSslVerificationEnabled,
logLevel = settings.httpLogLevel
)
}

suspend fun getGroups(
uids: List<String>,
passwords: List<String>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ suspend inline fun <reified Request, reified Response> HttpClient.sendRequest(

val status = response.status
if (status != HttpStatusCode.OK) {
// TODO: Kotlin serializer cannot parse quoted json object from server
val errorBody = Either
.catch { response.body<ErrorMessageDto>() }
.getOrNull()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ object HttpClientFactory {

fun createHttpClient(
jsonSerializer: JsonSerializer,
isSslVerificationEnabled: Boolean
isSslVerificationEnabled: Boolean,
logLevel: LogLevel
): HttpClient {
return HttpClient(OkHttp) {
install(ContentNegotiation) {
Expand All @@ -34,7 +35,7 @@ object HttpClientFactory {
Timber.d(message)
}
}
level = LogLevel.INFO
level = logLevel
}

if (BuildConfig.DEBUG && !isSslVerificationEnabled) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.github.ai.simplesplit.android.data.database.dao.GroupCredentialsDao
import com.github.ai.simplesplit.android.model.db.GroupCredentials
import com.github.ai.simplesplit.android.data.database.model.GroupCredentials

@Database(
entities = [GroupCredentials::class],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.github.ai.simplesplit.android.model.db.GroupCredentials
import com.github.ai.simplesplit.android.data.database.model.GroupCredentials
import kotlinx.coroutines.flow.Flow

@Dao
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.ai.simplesplit.android.model.db
package com.github.ai.simplesplit.android.data.database.model

import androidx.room.Entity
import androidx.room.PrimaryKey
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.ai.simplesplit.android.data.repository

import com.github.ai.simplesplit.android.data.database.dao.GroupCredentialsDao
import com.github.ai.simplesplit.android.model.db.GroupCredentials
import com.github.ai.simplesplit.android.data.database.model.GroupCredentials
import kotlinx.coroutines.flow.Flow

class GroupCredentialsRepository(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ package com.github.ai.simplesplit.android.data.settings
enum class SettingKey(
val key: String
) {
IS_SSL_VERIFICATION_ENABLE(
key = "isSslVerificationEnabled"
),
SERVER_URL(
key = "serverUrl"
)
IS_SSL_VERIFICATION_ENABLED(key = "isSslVerificationEnabled"),
SERVER_URL(key = "serverUrl"),
HTTP_LOG_LEVEL(key = "httpLogLevel")
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ package com.github.ai.simplesplit.android.data.settings
import android.content.Context
import com.cioccarellia.ksprefs.KsPrefs
import com.github.ai.simplesplit.android.data.api.ApiClient
import com.github.ai.simplesplit.android.data.settings.SettingKey.IS_SSL_VERIFICATION_ENABLE
import com.github.ai.simplesplit.android.data.settings.SettingKey.HTTP_LOG_LEVEL
import com.github.ai.simplesplit.android.data.settings.SettingKey.IS_SSL_VERIFICATION_ENABLED
import com.github.ai.simplesplit.android.data.settings.SettingKey.SERVER_URL
import com.github.ai.simplesplit.android.utils.StringUtils
import io.ktor.client.plugins.logging.LogLevel

interface Settings {
var serverUrl: String
var isSslVerificationEnabled: Boolean
var httpLogLevel: LogLevel
}

class SettingsImpl(
Expand All @@ -18,14 +22,25 @@ class SettingsImpl(
private val prefs = KsPrefs(context.applicationContext)

override var isSslVerificationEnabled: Boolean
get() = prefs.pull(IS_SSL_VERIFICATION_ENABLE.key, false)
get() = prefs.pull(IS_SSL_VERIFICATION_ENABLED.key, true)
set(value) {
prefs.push(IS_SSL_VERIFICATION_ENABLE.key, value)
prefs.push(IS_SSL_VERIFICATION_ENABLED.key, value)
}

override var serverUrl: String
get() = prefs.pull(SERVER_URL.key, ApiClient.PROD_SERVER_URL)
set(value) {
prefs.push(SERVER_URL.key, value)
}

override var httpLogLevel: LogLevel
get() {
return prefs.pull<String>(HTTP_LOG_LEVEL.key, StringUtils.EMPTY).let { name ->
LogLevel.entries.find { level -> level.name == name }
?: LogLevel.INFO
}
}
set(value) {
prefs.push(HTTP_LOG_LEVEL.key, value.name)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.ai.simplesplit.android.domain.usecase

import com.github.ai.simplesplit.android.data.database.model.GroupCredentials
import com.github.ai.simplesplit.android.data.settings.Settings
import com.github.ai.simplesplit.android.model.db.GroupCredentials

class CreateExportUrlUseCase(
private val settings: Settings
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.ai.simplesplit.android.domain.usecase

import com.github.ai.simplesplit.android.data.database.model.GroupCredentials
import com.github.ai.simplesplit.android.data.settings.Settings
import com.github.ai.simplesplit.android.model.db.GroupCredentials

class CreateGroupUrlUseCase(
private val settings: Settings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.github.ai.simplesplit.android.domain.usecase
import androidx.core.net.toUri
import arrow.core.Either
import arrow.core.raise.either
import com.github.ai.simplesplit.android.model.db.GroupCredentials
import com.github.ai.simplesplit.android.data.database.model.GroupCredentials
import com.github.ai.simplesplit.android.model.exception.ParsingException

class ParseGroupUrlUseCase {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.github.ai.simplesplit.android.model

import androidx.compose.runtime.Immutable

@Immutable
data class ErrorMessage(
val message: String,
val actionText: String,
val actionId: Int? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ class NetworkException(
) : ApiException(cause = cause)

class InvalidResponseException(
statusCode: Int,
errorMessage: ErrorMessageDto? = null
val statusCode: Int,
val errorMessage: ErrorMessageDto? = null
) : ApiException(
message = "Invalid server response, HTTP status code: $statusCode"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.github.ai.simplesplit.android.presentation.core.compose

import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import com.github.ai.simplesplit.android.presentation.core.compose.preview.ThemedScreenPreview
import com.github.ai.simplesplit.android.presentation.core.compose.theme.LightTheme

@Composable
fun EmptyState(text: String) {
Text(
text = text,
style = TextSize.TITLE_LARGE.toTextStyle(),
color = TextColor.PRIMARY.toColor()
)
}

@Preview
@Composable
fun EmptyTextPreview() {
ThemedScreenPreview(theme = LightTheme) {
CenteredBox {
EmptyState("No data")
}
}
}
Loading