From 71a649d55ac5ea20e91d499a2117e5255356cc81 Mon Sep 17 00:00:00 2001 From: Jake Fetiu Kim Date: Sun, 6 Oct 2024 00:58:30 +0900 Subject: [PATCH 1/4] add usecase to set external camera ip [#55] --- .../repository/AppPreferencesRepository.kt | 19 +++++++++++++++++++ data/src/main/proto/app_preferences.proto | 1 + .../input/GetExternalCameraIPInterface.kt | 8 ++++++++ .../interactor/GetExternalCameraIPUseCase.kt | 18 ++++++++++++++++++ .../interactor/entity/ExternalCameraIP.kt | 5 +++++ .../domain/output/AppPreferenceInterface.kt | 4 ++++ 6 files changed, 55 insertions(+) create mode 100644 domain/src/main/java/com/foke/together/domain/input/GetExternalCameraIPInterface.kt create mode 100644 domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt create mode 100644 domain/src/main/java/com/foke/together/domain/interactor/entity/ExternalCameraIP.kt diff --git a/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt b/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt index 6d3362e..19d551f 100644 --- a/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt +++ b/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt @@ -4,6 +4,7 @@ import androidx.datastore.core.DataStore import com.foke.together.AppPreferences import com.foke.together.CameraSource import com.foke.together.domain.interactor.entity.CameraSourceType +import com.foke.together.domain.interactor.entity.ExternalCameraIP import com.foke.together.domain.output.AppPreferenceInterface import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map @@ -39,6 +40,24 @@ class AppPreferencesRepository @Inject constructor( } } + override fun getExternalCameraIP(): Flow = + appPreferencesFlow.map { + val address = it.externalCameraIp + if (address.isNullOrEmpty()) { + ExternalCameraIP("0.0.0.0") + } else { + ExternalCameraIP(address) + } + } + + override suspend fun setExternalCameraIP(ip: ExternalCameraIP) { + appPreferences.updateData { + it.toBuilder() + .setExternalCameraIp(ip.address) + .build() + } + } + override suspend fun clearAll() { appPreferences.updateData { it.toBuilder().clear().build() diff --git a/data/src/main/proto/app_preferences.proto b/data/src/main/proto/app_preferences.proto index 6d7fe53..8243404 100644 --- a/data/src/main/proto/app_preferences.proto +++ b/data/src/main/proto/app_preferences.proto @@ -13,6 +13,7 @@ message AppPreferences { // * Max size of field number is 536870911 CameraSource camera_source = 10; + string external_camera_ip = 11; // TODO: sample code. remove later. string sample_id = 999997; diff --git a/domain/src/main/java/com/foke/together/domain/input/GetExternalCameraIPInterface.kt b/domain/src/main/java/com/foke/together/domain/input/GetExternalCameraIPInterface.kt new file mode 100644 index 0000000..a10320c --- /dev/null +++ b/domain/src/main/java/com/foke/together/domain/input/GetExternalCameraIPInterface.kt @@ -0,0 +1,8 @@ +package com.foke.together.domain.input + +import com.foke.together.domain.interactor.entity.ExternalCameraIP +import kotlinx.coroutines.flow.Flow + +interface GetExternalCameraIPInterface { + operator fun invoke(): Flow +} \ No newline at end of file diff --git a/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt b/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt new file mode 100644 index 0000000..f014776 --- /dev/null +++ b/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt @@ -0,0 +1,18 @@ +package com.foke.together.domain.interactor + + +import com.foke.together.domain.input.GetExternalCameraIPInterface +import com.foke.together.domain.interactor.entity.ExternalCameraIP +import com.foke.together.domain.output.AppPreferenceInterface +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +class GetExternalCameraIPUseCase @Inject constructor( + private val appPreference: AppPreferenceInterface +): GetExternalCameraIPInterface { + override fun invoke(): Flow = + appPreference.getExternalCameraIP().map { it } +} + + diff --git a/domain/src/main/java/com/foke/together/domain/interactor/entity/ExternalCameraIP.kt b/domain/src/main/java/com/foke/together/domain/interactor/entity/ExternalCameraIP.kt new file mode 100644 index 0000000..28aadd8 --- /dev/null +++ b/domain/src/main/java/com/foke/together/domain/interactor/entity/ExternalCameraIP.kt @@ -0,0 +1,5 @@ +package com.foke.together.domain.interactor.entity + +data class ExternalCameraIP ( + val address: String, +) \ No newline at end of file diff --git a/domain/src/main/java/com/foke/together/domain/output/AppPreferenceInterface.kt b/domain/src/main/java/com/foke/together/domain/output/AppPreferenceInterface.kt index ed36f1a..fc924bf 100644 --- a/domain/src/main/java/com/foke/together/domain/output/AppPreferenceInterface.kt +++ b/domain/src/main/java/com/foke/together/domain/output/AppPreferenceInterface.kt @@ -1,11 +1,15 @@ package com.foke.together.domain.output import com.foke.together.domain.interactor.entity.CameraSourceType +import com.foke.together.domain.interactor.entity.ExternalCameraIP import kotlinx.coroutines.flow.Flow interface AppPreferenceInterface { fun getCameraSourceType(): Flow suspend fun setCameraSourceType(type: CameraSourceType) + fun getExternalCameraIP(): Flow + suspend fun setExternalCameraIP(ip: ExternalCameraIP) + suspend fun clearAll() } \ No newline at end of file From f74e293c1d5e0822d38176b19e812c48d26b73e9 Mon Sep 17 00:00:00 2001 From: Jake Fetiu Kim Date: Sun, 6 Oct 2024 21:36:41 +0900 Subject: [PATCH 2/4] add AppPolicy for the default value of externalCameraIp app preference [#55] --- .../datasource/local/datastore/AppPreferencesSerializer.kt | 2 ++ .../together/data/repository/AppPreferencesRepository.kt | 7 +------ util/src/main/java/com/foke/together/util/AppPolicy.kt | 5 +++++ 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 util/src/main/java/com/foke/together/util/AppPolicy.kt diff --git a/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt b/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt index 28eaacf..dd573c6 100644 --- a/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt +++ b/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt @@ -3,6 +3,7 @@ package com.foke.together.data.datasource.local.datastore import androidx.datastore.core.Serializer import com.foke.together.AppPreferences import com.foke.together.util.AppLog +import com.foke.together.util.AppPolicy import java.io.InputStream import java.io.OutputStream import javax.inject.Inject @@ -14,6 +15,7 @@ class AppPreferencesSerializer @Inject constructor(): Serializer // You need to check default value of each types from link below // https://protobuf.dev/programming-guides/proto3/ // ex> isDebugMode = true + externalCameraIp = AppPolicy.DEFAULT_EXTERNAL_CAMERA_IP build() } diff --git a/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt b/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt index 19d551f..4907d7f 100644 --- a/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt +++ b/data/src/main/java/com/foke/together/data/repository/AppPreferencesRepository.kt @@ -42,12 +42,7 @@ class AppPreferencesRepository @Inject constructor( override fun getExternalCameraIP(): Flow = appPreferencesFlow.map { - val address = it.externalCameraIp - if (address.isNullOrEmpty()) { - ExternalCameraIP("0.0.0.0") - } else { - ExternalCameraIP(address) - } + ExternalCameraIP(it.externalCameraIp) } override suspend fun setExternalCameraIP(ip: ExternalCameraIP) { diff --git a/util/src/main/java/com/foke/together/util/AppPolicy.kt b/util/src/main/java/com/foke/together/util/AppPolicy.kt new file mode 100644 index 0000000..995c682 --- /dev/null +++ b/util/src/main/java/com/foke/together/util/AppPolicy.kt @@ -0,0 +1,5 @@ +package com.foke.together.util + +object AppPolicy { + const val DEFAULT_EXTERNAL_CAMERA_IP = "0.0.0.0" +} \ No newline at end of file From fe2ddb281a26245a169c49f0b4e1d147a3ec9b57 Mon Sep 17 00:00:00 2001 From: Jake Fetiu Kim Date: Sun, 6 Oct 2024 22:04:25 +0900 Subject: [PATCH 3/4] minor typo correction ex> to e.g. --- .../data/datasource/local/datastore/AppPreferencesSerializer.kt | 2 +- .../src/main/java/com/foke/together/presenter/theme/Shape.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt b/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt index dd573c6..8c92d27 100644 --- a/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt +++ b/data/src/main/java/com/foke/together/data/datasource/local/datastore/AppPreferencesSerializer.kt @@ -14,7 +14,7 @@ class AppPreferencesSerializer @Inject constructor(): Serializer // Add proto datastore default value here. // You need to check default value of each types from link below // https://protobuf.dev/programming-guides/proto3/ - // ex> isDebugMode = true + // e.g. isDebugMode = true externalCameraIp = AppPolicy.DEFAULT_EXTERNAL_CAMERA_IP build() } diff --git a/presenter/src/main/java/com/foke/together/presenter/theme/Shape.kt b/presenter/src/main/java/com/foke/together/presenter/theme/Shape.kt index 375de9c..22aabf3 100644 --- a/presenter/src/main/java/com/foke/together/presenter/theme/Shape.kt +++ b/presenter/src/main/java/com/foke/together/presenter/theme/Shape.kt @@ -1,4 +1,4 @@ package com.foke.together.presenter.theme // Defines commonly used or recycled values -// ex> https://github.com/android/compose-samples/blob/main/JetNews/app/src/main/java/com/example/jetnews/ui/theme/Shape.kt +// e.g. https://github.com/android/compose-samples/blob/main/JetNews/app/src/main/java/com/example/jetnews/ui/theme/Shape.kt From ae38dab9ebc302e9f4ef1263918ef2ca601fcc88 Mon Sep 17 00:00:00 2001 From: Jake Fetiu Kim Date: Sun, 6 Oct 2024 22:49:23 +0900 Subject: [PATCH 4/4] add UseCase & Interface for setExternalCameraIP --- .../domain/input/SetExternalCameraIPInterface.kt | 7 +++++++ .../interactor/GetExternalCameraIPUseCase.kt | 2 +- .../interactor/SetExternalCameraIPUseCase.kt | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 domain/src/main/java/com/foke/together/domain/input/SetExternalCameraIPInterface.kt create mode 100644 domain/src/main/java/com/foke/together/domain/interactor/SetExternalCameraIPUseCase.kt diff --git a/domain/src/main/java/com/foke/together/domain/input/SetExternalCameraIPInterface.kt b/domain/src/main/java/com/foke/together/domain/input/SetExternalCameraIPInterface.kt new file mode 100644 index 0000000..c404c41 --- /dev/null +++ b/domain/src/main/java/com/foke/together/domain/input/SetExternalCameraIPInterface.kt @@ -0,0 +1,7 @@ +package com.foke.together.domain.input + +import com.foke.together.domain.interactor.entity.ExternalCameraIP + +interface SetExternalCameraIPInterface { + suspend operator fun invoke(externalCameraIP: ExternalCameraIP) +} \ No newline at end of file diff --git a/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt b/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt index f014776..0e23fd8 100644 --- a/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt +++ b/domain/src/main/java/com/foke/together/domain/interactor/GetExternalCameraIPUseCase.kt @@ -11,7 +11,7 @@ import javax.inject.Inject class GetExternalCameraIPUseCase @Inject constructor( private val appPreference: AppPreferenceInterface ): GetExternalCameraIPInterface { - override fun invoke(): Flow = + override operator fun invoke(): Flow = appPreference.getExternalCameraIP().map { it } } diff --git a/domain/src/main/java/com/foke/together/domain/interactor/SetExternalCameraIPUseCase.kt b/domain/src/main/java/com/foke/together/domain/interactor/SetExternalCameraIPUseCase.kt new file mode 100644 index 0000000..f60f960 --- /dev/null +++ b/domain/src/main/java/com/foke/together/domain/interactor/SetExternalCameraIPUseCase.kt @@ -0,0 +1,16 @@ +package com.foke.together.domain.interactor + + +import com.foke.together.domain.input.SetExternalCameraIPInterface +import com.foke.together.domain.interactor.entity.ExternalCameraIP +import com.foke.together.domain.output.AppPreferenceInterface +import javax.inject.Inject + +class SetExternalCameraIPUseCase @Inject constructor( + private val appPreference: AppPreferenceInterface +): SetExternalCameraIPInterface { + override suspend operator fun invoke(externalCameraIP: ExternalCameraIP)= + appPreference.setExternalCameraIP(externalCameraIP) +} + +