Skip to content

Commit df20c5e

Browse files
ing03201DokySp
authored andcommitted
Maker Faire Set up
1 parent 929ca60 commit df20c5e

File tree

23 files changed

+380
-162
lines changed

23 files changed

+380
-162
lines changed

domain/src/main/java/com/foke/together/domain/interactor/GeneratePhotoFrameUseCase.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.graphics.Bitmap
55
import android.net.Uri
66
import com.foke.together.domain.interactor.entity.CutFrameType
77
import com.foke.together.domain.output.ImageRepositoryInterface
8+
import com.foke.together.util.AppPolicy
89
import dagger.hilt.android.qualifiers.ApplicationContext
910
import kotlinx.coroutines.flow.Flow
1011
import javax.inject.Inject
@@ -20,4 +21,20 @@ class GeneratePhotoFrameUseCase @Inject constructor(
2021
suspend fun clearCapturedImageList() = imageRepositoryInterface.clearCacheDir()
2122
suspend fun saveGraphicsLayerImage(image: Bitmap, fileName: String) = imageRepositoryInterface.cachingImage(image, fileName)
2223
suspend fun saveFinalImage(image: Bitmap, fileName: String) = imageRepositoryInterface.saveToStorage(image, fileName)
24+
25+
fun getFinalSingleImageUri(): Uri {
26+
var finalSingleImageUri: Uri = Uri.EMPTY
27+
context.cacheDir.listFiles().forEach {
28+
file -> if (file.name.contains("${AppPolicy.SINGLE_ROW_FINAL_IMAGE_NAME}")) { finalSingleImageUri = Uri.fromFile(file) }
29+
}
30+
return finalSingleImageUri
31+
}
32+
33+
fun getFinalTwoImageUri(): Uri {
34+
var finalTwoImageUri: Uri = Uri.EMPTY
35+
context.cacheDir.listFiles().forEach {
36+
file -> if (file.name.contains("${AppPolicy.TWO_ROW_FINAL_IMAGE_NAME}")) { finalTwoImageUri = Uri.fromFile(file) }
37+
}
38+
return finalTwoImageUri
39+
}
2340
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.foke.together.domain.interactor.entity
2+
3+
enum class FramePosition {
4+
LEFT,
5+
RIGHT;
6+
fun findBy(ordinal: Int): FramePosition {
7+
return when (ordinal) {
8+
LEFT.ordinal -> LEFT
9+
RIGHT.ordinal -> RIGHT
10+
else -> throw IllegalArgumentException("Unknown value: $ordinal")
11+
}
12+
}
13+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.foke.together.domain.interactor.web
2+
3+
import com.foke.together.util.AppPolicy
4+
import javax.inject.Inject
5+
6+
// Download url
7+
// https://4cuts.store/download/{user_name}/{key}
8+
class GetDownloadUrlUseCase @Inject constructor(
9+
private val getCurrentUserInformationUseCase: GetCurrentUserInformationUseCase
10+
) {
11+
suspend operator fun invoke(key: String): Result<String> {
12+
getCurrentUserInformationUseCase()
13+
.onSuccess {
14+
"${AppPolicy.WEB_SERVER_URL}download/${it.name}/$key"
15+
}
16+
return Result.failure(Exception("Unknown error"))
17+
}
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.foke.together.domain.interactor.web
2+
3+
import com.foke.together.domain.output.SessionRepositoryInterface
4+
import javax.inject.Inject
5+
6+
class SessionKeyUseCase @Inject constructor(
7+
private val sessionRepository: SessionRepositoryInterface
8+
) {
9+
suspend fun setSessionKey() {
10+
sessionRepository.setSessionKey()
11+
}
12+
13+
fun getSessionKey(): String {
14+
return sessionRepository.getSessionKey()
15+
}
16+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.foke.together.domain.output
2+
3+
interface SessionRepositoryInterface {
4+
suspend fun setSessionKey()
5+
fun getSessionKey(): String
6+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.foke.together.external.repository
2+
3+
import com.foke.together.domain.output.SessionRepositoryInterface
4+
import com.foke.together.util.TimeUtil
5+
import javax.inject.Inject
6+
7+
class SessionRepository @Inject constructor(): SessionRepositoryInterface {
8+
private var sessionKey: String = ""
9+
override suspend fun setSessionKey() {
10+
sessionKey = TimeUtil.getCurrentTimeSec()
11+
}
12+
13+
override fun getSessionKey(): String {
14+
return sessionKey
15+
}
16+
}

external/src/main/java/com/foke/together/external/repository/di/RepositoryModule.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package com.foke.together.external.repository.di
33
import com.foke.together.domain.output.ExternalCameraRepositoryInterface
44
import com.foke.together.domain.output.ImageRepositoryInterface
55
import com.foke.together.domain.output.QRCodeRepositoryInterface
6+
import com.foke.together.domain.output.SessionRepositoryInterface
67
import com.foke.together.external.repository.ExternalCameraRepository
78
import com.foke.together.external.repository.ImageRepository
89
import com.foke.together.external.repository.QRCodeRepository
10+
import com.foke.together.external.repository.SessionRepository
911
import dagger.Binds
1012
import dagger.Module
1113
import dagger.hilt.InstallIn
@@ -32,4 +34,10 @@ abstract class RepositoryModule {
3234
abstract fun bindQRCodeRepository(
3335
qrCodeRepository: QRCodeRepository
3436
): QRCodeRepositoryInterface
37+
38+
@Singleton
39+
@Binds
40+
abstract fun bindSessionRepository(
41+
sessionRepository: SessionRepository
42+
): SessionRepositoryInterface
3543
}

presenter/src/main/java/com/foke/together/presenter/frame/FourCutFrame.kt

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Box
88
import androidx.compose.foundation.layout.Column
99
import androidx.compose.foundation.layout.PaddingValues
1010
import androidx.compose.foundation.layout.aspectRatio
11+
import androidx.compose.foundation.layout.padding
1112
import androidx.compose.foundation.layout.wrapContentSize
1213
import androidx.compose.foundation.lazy.LazyColumn
1314
import androidx.compose.foundation.lazy.rememberLazyListState
@@ -26,6 +27,8 @@ import androidx.compose.ui.graphics.rememberGraphicsLayer
2627
import androidx.compose.ui.graphics.vector.ImageVector
2728
import androidx.compose.ui.platform.LocalContext
2829
import androidx.compose.ui.res.vectorResource
30+
import androidx.compose.ui.text.font.FontWeight
31+
import androidx.compose.ui.text.style.TextAlign
2932
import androidx.compose.ui.tooling.preview.Preview
3033
import androidx.compose.ui.unit.dp
3134
import androidx.compose.ui.unit.sp
@@ -35,6 +38,7 @@ import androidx.lifecycle.Lifecycle
3538
import androidx.lifecycle.compose.LifecycleEventEffect
3639
import coil.compose.AsyncImage
3740
import coil.request.ImageRequest
41+
import com.foke.together.domain.interactor.entity.FramePosition
3842
import com.foke.together.presenter.R
3943
import com.foke.together.presenter.theme.FourCutTogetherTheme
4044
import com.foke.together.presenter.theme.highContrastDarkColorScheme
@@ -48,13 +52,31 @@ import kotlinx.coroutines.launch
4852
fun FourCutFrame(
4953
// TODO: Need to refactoring. separate frame design with application theme
5054
designColorScheme: ColorScheme = mediumContrastLightColorScheme,
51-
cameraImageUrlList : List<Uri>? = null
55+
cameraImageUrlList : List<Uri>? = null,
56+
position: FramePosition? = null
5257
) {
5358
ConstraintLayout(
5459
modifier = Modifier
5560
.aspectRatio(ratio = 0.3333f)
5661
.background(color = designColorScheme.surface)
5762
.border(1.dp, designColorScheme.inverseSurface)
63+
.padding(
64+
start = position.let {
65+
when(it){
66+
FramePosition.LEFT -> 20.dp
67+
FramePosition.RIGHT -> 0.dp
68+
null -> 10.dp
69+
}
70+
},
71+
end = position.let {
72+
when(it){
73+
FramePosition.LEFT -> 0.dp
74+
FramePosition.RIGHT -> 20.dp
75+
null -> 10.dp
76+
}
77+
},
78+
top = 40.dp
79+
)
5880
) {
5981
val (cameraColumn, decorateRow) = createRefs()
6082
LazyColumn(
@@ -67,9 +89,8 @@ fun FourCutFrame(
6789
bottom.linkTo(decorateRow.top)
6890
start.linkTo(parent.start)
6991
end.linkTo(parent.end)
70-
width = Dimension.fillToConstraints
71-
height = Dimension.wrapContent
7292
}
93+
.wrapContentSize()
7394
) {
7495
items(AppPolicy.CAPTURE_COUNT){
7596
//TODO: add camera image
@@ -114,7 +135,9 @@ fun FourCutFrame(
114135
text = TimeUtil.getCurrentDisplayTime(),
115136
modifier = Modifier.weight(1f),
116137
color = designColorScheme.inverseSurface,
117-
fontSize = 12.sp
138+
fontSize = 15.sp,
139+
textAlign = TextAlign.Center,
140+
fontWeight = FontWeight.Bold
118141
)
119142
}
120143
}

presenter/src/main/java/com/foke/together/presenter/frame/MakerFaireFrame.kt

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.foundation.background
66
import androidx.compose.foundation.border
77
import androidx.compose.foundation.layout.Arrangement
88
import androidx.compose.foundation.layout.Box
9+
import androidx.compose.foundation.layout.Column
910
import androidx.compose.foundation.layout.PaddingValues
1011
import androidx.compose.foundation.layout.aspectRatio
1112
import androidx.compose.foundation.layout.padding
@@ -15,6 +16,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState
1516
import androidx.compose.material3.Text
1617
import androidx.compose.runtime.Composable
1718
import androidx.compose.runtime.rememberCoroutineScope
19+
import androidx.compose.ui.Alignment
1820
import androidx.compose.ui.Modifier
1921
import androidx.compose.ui.draw.drawWithContent
2022
import androidx.compose.ui.graphics.Color
@@ -24,6 +26,8 @@ import androidx.compose.ui.graphics.layer.drawLayer
2426
import androidx.compose.ui.graphics.rememberGraphicsLayer
2527
import androidx.compose.ui.platform.LocalContext
2628
import androidx.compose.ui.res.painterResource
29+
import androidx.compose.ui.text.font.FontWeight
30+
import androidx.compose.ui.text.style.TextAlign
2731
import androidx.compose.ui.tooling.preview.Preview
2832
import androidx.compose.ui.unit.dp
2933
import androidx.compose.ui.unit.sp
@@ -33,6 +37,7 @@ import androidx.lifecycle.Lifecycle
3337
import androidx.lifecycle.compose.LifecycleEventEffect
3438
import coil.compose.AsyncImage
3539
import coil.request.ImageRequest
40+
import com.foke.together.domain.interactor.entity.FramePosition
3641
import com.foke.together.presenter.R
3742
import com.foke.together.presenter.theme.FourCutTogetherTheme
3843
import com.foke.together.util.AppPolicy
@@ -44,25 +49,40 @@ import kotlinx.coroutines.launch
4449
fun MakerFaireFrame(
4550
cameraImageUrlList : List<Uri>? = null,
4651
backgroundColor : Color = Color(0xFFF5B934),
47-
decorateImageUrl: String? = null
52+
position: FramePosition? = null
4853
) {
4954
ConstraintLayout(
5055
modifier = Modifier
5156
.aspectRatio(ratio = 0.3333f)
5257
.background(backgroundColor)
5358
.border(1.dp, Color.White)
59+
.padding(
60+
start = position.let {
61+
when(it){
62+
FramePosition.LEFT -> 20.dp
63+
FramePosition.RIGHT -> 0.dp
64+
null -> 10.dp
65+
}
66+
},
67+
end = position.let {
68+
when(it){
69+
FramePosition.LEFT -> 0.dp
70+
FramePosition.RIGHT -> 20.dp
71+
null -> 10.dp
72+
}
73+
},
74+
top = 40.dp
75+
)
5476
) {
55-
val (cameraColumn,decorateImage, curTime) = createRefs()
56-
val logoImageGuideLineStart = createGuidelineFromStart(0.15f)
57-
val logoImageGuideLineEnd = createGuidelineFromEnd(0.15f)
77+
val (cameraColumn,decorateRow) = createRefs()
5878
LazyColumn(
5979
state = rememberLazyListState(),
6080
verticalArrangement = Arrangement.spacedBy(10.dp),
61-
contentPadding = PaddingValues(horizontal = 10.dp, vertical = 10.dp),
81+
contentPadding = PaddingValues(horizontal = 15.dp, vertical = 15.dp),
6282
modifier = Modifier
6383
.constrainAs(cameraColumn) {
64-
top.linkTo(parent.top, margin = 15.dp)
65-
bottom.linkTo(decorateImage.top)
84+
top.linkTo(parent.top)
85+
bottom.linkTo(decorateRow.top)
6686
start.linkTo(parent.start)
6787
end.linkTo(parent.end)
6888
}
@@ -84,33 +104,34 @@ fun MakerFaireFrame(
84104
}
85105
}
86106
}
87-
88-
Image(
89-
painter = painterResource(
90-
id = R.drawable.maker_faire_logo
91-
),
92-
contentDescription = "for decorate",
93-
modifier = Modifier.constrainAs(decorateImage){
94-
top.linkTo(cameraColumn.bottom)
95-
bottom.linkTo(curTime.top)
96-
start.linkTo(logoImageGuideLineStart)
97-
end.linkTo(logoImageGuideLineEnd)
98-
width = Dimension.fillToConstraints
99-
height = Dimension.wrapContent
100-
}
101-
)
102-
103-
Text(
104-
text = TimeUtil.getCurrentDisplayTime(),
105-
modifier = Modifier.constrainAs(curTime){
106-
top.linkTo(decorateImage.bottom)
107-
bottom.linkTo(parent.bottom, margin = 15.dp)
108-
start.linkTo(parent.start)
109-
end.linkTo(parent.end)
110-
},
111-
color = Color.White,
112-
fontSize = 12.sp
113-
)
107+
Column(
108+
modifier = Modifier
109+
.constrainAs(decorateRow){
110+
top.linkTo(cameraColumn.bottom)
111+
bottom.linkTo(parent.bottom)
112+
start.linkTo(parent.start)
113+
end.linkTo(parent.end)
114+
height = Dimension.fillToConstraints
115+
width = Dimension.fillToConstraints
116+
},
117+
horizontalAlignment = Alignment.CenterHorizontally
118+
) {
119+
Image(
120+
painter = painterResource(
121+
id = R.drawable.maker_faire_logo
122+
),
123+
contentDescription = "for decorate",
124+
modifier = Modifier.weight(1f)
125+
)
126+
Text(
127+
modifier = Modifier.weight(1f),
128+
text = TimeUtil.getCurrentDisplayTime(),
129+
color = Color.White,
130+
fontSize = 15.sp,
131+
textAlign = TextAlign.Center,
132+
fontWeight = FontWeight.Bold
133+
)
134+
}
114135
}
115136
}
116137

presenter/src/main/java/com/foke/together/presenter/screen/CameraScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ fun CameraScreen(
6161
end.linkTo(parent.end, margin = 24.dp)
6262
bottom.linkTo(title.top)
6363
width = Dimension.fillToConstraints
64+
height = Dimension.wrapContent
6465
},
6566
)
6667
Text(

0 commit comments

Comments
 (0)