From d40436fcfe708b3ead71c3f246b3e65c9ad3cc6e Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 00:04:59 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[FIX/#153]=20=EC=83=9D=EC=84=B1=EB=B7=B0=20?= =?UTF-8?q?FCV=20=EC=9E=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/create/CreateActivity.kt | 12 +----- .../drawable/layerlist_create_progressbar.xml | 9 +++-- .../src/main/res/layout/activity_create.xml | 37 +++++++++---------- presentation/src/main/res/values/strings.xml | 1 + 4 files changed, 25 insertions(+), 34 deletions(-) diff --git a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt index 798ea3fc..3d8df64f 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt @@ -39,14 +39,13 @@ class CreateActivity() : BaseActivity(R.layout.activity_c } private fun initView() { - setStatusBarColorFromResource(R.color.white) navController = binding.fcvCreate.getFragment().navController } private fun initBackBtnListener() { binding.btnBack.setOnSingleClickListener { when (navController.currentDestination?.id) { - R.id.defineFragment -> return@setOnSingleClickListener + R.id.defineFragment -> finish() R.id.poseFragment -> { AmplitudeManager.trackEvent( @@ -97,19 +96,12 @@ class CreateActivity() : BaseActivity(R.layout.activity_c interpolator = LinearInterpolator() start() } - binding.btnBack.isVisible = viewModel.currentPercent.value > 33 }.launchIn(lifecycleScope) } private fun observeGeneratingState() { viewModel.totalGeneratingState.flowWithLifecycle(lifecycle).onEach { state -> - if (state == UiState.Loading) { - setStatusBarColorFromResource(R.color.background_white) - binding.layoutLoading.isVisible = true - } else { - setStatusBarColorFromResource(R.color.white) - binding.layoutLoading.isVisible = false - } + binding.layoutLoading.isVisible = state == UiState.Loading }.launchIn(lifecycleScope) } diff --git a/presentation/src/main/res/drawable/layerlist_create_progressbar.xml b/presentation/src/main/res/drawable/layerlist_create_progressbar.xml index ea392dc1..b4e6e6aa 100644 --- a/presentation/src/main/res/drawable/layerlist_create_progressbar.xml +++ b/presentation/src/main/res/drawable/layerlist_create_progressbar.xml @@ -1,15 +1,16 @@ - - + - - + diff --git a/presentation/src/main/res/layout/activity_create.xml b/presentation/src/main/res/layout/activity_create.xml index 5db5d378..194ab56a 100644 --- a/presentation/src/main/res/layout/activity_create.xml +++ b/presentation/src/main/res/layout/activity_create.xml @@ -15,16 +15,16 @@ + android:background="@color/black"> - @@ -32,34 +32,31 @@ android:id="@+id/btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="28dp" - android:layout_marginTop="9dp" + android:layout_marginTop="5dp" + android:layout_marginStart="16dp" android:src="@drawable/ic_back" - android:visibility="gone" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@id/iv_create_logo" - tools:visibility="visible" /> + app:layout_constraintTop_toTopOf="@id/tv_create_title" + app:layout_constraintBottom_toBottomOf="@id/tv_create_title" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> 다음으로 젠티하러 가기 + 사진 만들기 만들고 싶은 사진을 설명해주세요✏️ 성적이거나 폭력적인 사진은 만들어지지 않아요 의상과 배경을 포함해서 설명해 주세요!\n\n*헤어스타일을 변경하는 기능은 준비 중이에요\n*너무 특정한 배경과 의상은 어려울 수 있어요\n(반포 한강 공원, 나이키 티셔츠 등) From 130578fdd45f2c4f8e8e9bb61b695ddd1031217a Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 00:13:11 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[UI/#153]=20=ED=8E=98=EC=9D=B4=EC=A6=88=20?= =?UTF-8?q?=EC=84=A4=EB=AA=85=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/create/CreateActivity.kt | 2 +- .../src/main/res/layout/activity_create.xml | 26 ++++++++++++++----- presentation/src/main/res/values/strings.xml | 1 + 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt index 3d8df64f..d41a161e 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt @@ -14,7 +14,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kr.genti.core.base.BaseActivity import kr.genti.core.extension.setOnSingleClickListener -import kr.genti.core.extension.setStatusBarColorFromResource import kr.genti.core.state.UiState import kr.genti.presentation.R import kr.genti.presentation.databinding.ActivityCreateBinding @@ -96,6 +95,7 @@ class CreateActivity() : BaseActivity(R.layout.activity_c interpolator = LinearInterpolator() start() } + binding.tvCreatePhase.text = getString(R.string.create_phase_text, percent / 33) }.launchIn(lifecycleScope) } diff --git a/presentation/src/main/res/layout/activity_create.xml b/presentation/src/main/res/layout/activity_create.xml index 194ab56a..d2199fad 100644 --- a/presentation/src/main/res/layout/activity_create.xml +++ b/presentation/src/main/res/layout/activity_create.xml @@ -22,9 +22,9 @@ style="@style/TextAppearance.Genti.Title_20_Bold" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="24dp" android:text="@string/create_tv_title" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -32,25 +32,37 @@ android:id="@+id/btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dp" android:layout_marginStart="16dp" + android:layout_marginTop="5dp" android:src="@drawable/ic_back" + app:layout_constraintBottom_toBottomOf="@id/tv_create_title" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@id/tv_create_title" - app:layout_constraintBottom_toBottomOf="@id/tv_create_title" /> + app:layout_constraintTop_toTopOf="@id/tv_create_title" /> + app:layout_constraintTop_toBottomOf="@id/tv_create_title" /> + + 젠티하러 가기 사진 만들기 + %1$d/3 만들고 싶은 사진을 설명해주세요✏️ 성적이거나 폭력적인 사진은 만들어지지 않아요 의상과 배경을 포함해서 설명해 주세요!\n\n*헤어스타일을 변경하는 기능은 준비 중이에요\n*너무 특정한 배경과 의상은 어려울 수 있어요\n(반포 한강 공원, 나이키 티셔츠 등) From ff484e9f81f126acce6102dab7392f9e551988a1 Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 00:34:11 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[FIX/#153]=20=ED=94=84=EB=9E=98=EA=B7=B8?= =?UTF-8?q?=EB=A8=BC=ED=8A=B8=20=EC=8A=A4=ED=83=9D=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/create/CreateActivity.kt | 45 +++++-------------- .../genti/presentation/create/PoseFragment.kt | 17 +++---- .../presentation/create/SelfieFragment.kt | 17 +++---- 3 files changed, 22 insertions(+), 57 deletions(-) diff --git a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt index d41a161e..fced7d87 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/CreateActivity.kt @@ -25,14 +25,13 @@ import kr.genti.presentation.util.AmplitudeManager.PROPERTY_PAGE @AndroidEntryPoint class CreateActivity() : BaseActivity(R.layout.activity_create) { private val viewModel by viewModels() - lateinit var navController: NavController + private lateinit var navController: NavController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initView() initBackBtnListener() - setCurrentFragment() observeProgressBar() observeGeneratingState() } @@ -45,42 +44,20 @@ class CreateActivity() : BaseActivity(R.layout.activity_c binding.btnBack.setOnSingleClickListener { when (navController.currentDestination?.id) { R.id.defineFragment -> finish() - - R.id.poseFragment -> { - AmplitudeManager.trackEvent( - EVENT_CLICK_BTN, - mapOf(PROPERTY_PAGE to "create2"), - mapOf(PROPERTY_BTN to "back"), - ) - navController.popBackStack() - viewModel.modCurrentPercent(-33) - } - - R.id.selfieFragment -> { - AmplitudeManager.trackEvent( - EVENT_CLICK_BTN, - mapOf(PROPERTY_PAGE to "create3"), - mapOf(PROPERTY_BTN to "back"), - ) - navController.popBackStack() - viewModel.modCurrentPercent(-34) - } + R.id.poseFragment -> navigateBackFragment("create2", -33) + R.id.selfieFragment -> navigateBackFragment("create3", -34) } } } - private fun setCurrentFragment() { - if (::navController.isInitialized) { - when (viewModel.currentPercent.value) { - 66 -> navController.navigate(R.id.poseFragment) - 100 -> { - navController.navigate(R.id.poseFragment) - navController.navigate(R.id.selfieFragment) - } - - else -> return - } - } + private fun navigateBackFragment(tag: String, amount: Int) { + AmplitudeManager.trackEvent( + EVENT_CLICK_BTN, + mapOf(PROPERTY_PAGE to tag), + mapOf(PROPERTY_BTN to "back"), + ) + navController.popBackStack() + viewModel.modCurrentPercent(amount) } private fun observeProgressBar() { diff --git a/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt b/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt index 3c68f44a..28a4bf45 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt @@ -50,21 +50,14 @@ class PoseFragment() : BaseFragment(R.layout.fragment_pose) } private fun initBackPressedListener() { - val onBackPressedCallback = + requireActivity().onBackPressedDispatcher.addCallback( + viewLifecycleOwner, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { - if (isAdded) { - findNavController().popBackStack() - viewModel.modCurrentPercent(-33) - } else { - requireActivity().onBackPressedDispatcher.onBackPressed() - } + viewModel.modCurrentPercent(-33) + findNavController().popBackStack() } - } - activity?.onBackPressedDispatcher?.addCallback( - requireActivity(), - onBackPressedCallback, - ) + }) } private fun initGuideIfNeeded() { diff --git a/presentation/src/main/java/kr/genti/presentation/create/SelfieFragment.kt b/presentation/src/main/java/kr/genti/presentation/create/SelfieFragment.kt index 47f476ab..543358bc 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/SelfieFragment.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/SelfieFragment.kt @@ -34,7 +34,6 @@ import kr.genti.domain.entity.response.ImageFileModel import kr.genti.presentation.R import kr.genti.presentation.databinding.FragmentSelfieBinding import kr.genti.presentation.generate.waiting.WaitingActivity -import kr.genti.presentation.main.MainActivity import kr.genti.presentation.main.feed.FeedFragment import kr.genti.presentation.util.AmplitudeManager import kr.genti.presentation.util.AmplitudeManager.EVENT_CLICK_BTN @@ -45,6 +44,7 @@ import kotlin.math.max @AndroidEntryPoint class SelfieFragment : BaseFragment(R.layout.fragment_selfie) { private val viewModel by activityViewModels() + private lateinit var photoPickerResult: ActivityResultLauncher private lateinit var galleryPickerResult: ActivityResultLauncher private lateinit var waitingResult: ActivityResultLauncher @@ -78,19 +78,14 @@ class SelfieFragment : BaseFragment(R.layout.fragment_sel } private fun initBackPressedListener() { - val onBackPressedCallback = + requireActivity().onBackPressedDispatcher.addCallback( + viewLifecycleOwner, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { - if (isAdded) { - findNavController().popBackStack() - viewModel.modCurrentPercent(-34) - } + viewModel.modCurrentPercent(-34) + findNavController().popBackStack() } - } - activity?.onBackPressedDispatcher?.addCallback( - requireActivity(), - onBackPressedCallback, - ) + }) } private fun initAddImageBtnListener() { From a9ecea63c7793f1884a5296e50f99f00e2310a6d Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 00:38:52 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[FIX/#153]=20=EA=B8=B0=EC=A1=B4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=8B=A4=EC=9D=B4?= =?UTF-8?q?=EC=96=BC=EB=A1=9C=EA=B7=B8=20=EB=A1=9C=EC=A7=81=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/genti/data/local/UserSharedPref.kt | 1 - .../kr/genti/data/local/UserSharedPrefImpl.kt | 5 - .../data/repositoryImpl/UserRepositoryImpl.kt | 6 - .../genti/domain/repository/UserRepository.kt | 4 - .../presentation/create/CreateGuideDialog.kt | 35 -- .../presentation/create/CreateViewModel.kt | 426 +++++++++--------- .../genti/presentation/create/PoseFragment.kt | 21 - .../main/res/drawable/img_green_bg_2_word.xml | 16 - .../main/res/drawable/img_green_bg_3_word.xml | 20 - .../src/main/res/drawable/img_guide_bg.png | Bin 13201 -> 0 bytes .../src/main/res/drawable/img_guide_ex.png | Bin 85935 -> 0 bytes .../main/res/layout/dialog_create_guide.xml | 119 ----- 12 files changed, 210 insertions(+), 443 deletions(-) delete mode 100644 presentation/src/main/java/kr/genti/presentation/create/CreateGuideDialog.kt delete mode 100644 presentation/src/main/res/drawable/img_green_bg_2_word.xml delete mode 100644 presentation/src/main/res/drawable/img_green_bg_3_word.xml delete mode 100644 presentation/src/main/res/drawable/img_guide_bg.png delete mode 100644 presentation/src/main/res/drawable/img_guide_ex.png delete mode 100644 presentation/src/main/res/layout/dialog_create_guide.xml diff --git a/data/src/main/java/kr/genti/data/local/UserSharedPref.kt b/data/src/main/java/kr/genti/data/local/UserSharedPref.kt index 35f3fd8b..f0b4c0c4 100644 --- a/data/src/main/java/kr/genti/data/local/UserSharedPref.kt +++ b/data/src/main/java/kr/genti/data/local/UserSharedPref.kt @@ -4,7 +4,6 @@ interface UserSharedPref { var accessToken: String var refreshToken: String var userRole: String - var isGuideNeeded: Boolean var isChatAccessible: Boolean fun clearInfo() diff --git a/data/src/main/java/kr/genti/data/local/UserSharedPrefImpl.kt b/data/src/main/java/kr/genti/data/local/UserSharedPrefImpl.kt index 50c6eaba..a4e3e80a 100644 --- a/data/src/main/java/kr/genti/data/local/UserSharedPrefImpl.kt +++ b/data/src/main/java/kr/genti/data/local/UserSharedPrefImpl.kt @@ -21,10 +21,6 @@ class UserSharedPrefImpl get() = dataStore.getString(USER_ROLE, "").orEmpty() set(value) = dataStore.edit { putString(USER_ROLE, value) } - override var isGuideNeeded: Boolean - get() = dataStore.getBoolean(IS_GUIDE_NEEDED, true) - set(value) = dataStore.edit { putBoolean(IS_GUIDE_NEEDED, value) } - override var isChatAccessible: Boolean get() = dataStore.getBoolean(IS_CHAT_ACCESSIBLE, true) set(value) = dataStore.edit { putBoolean(IS_CHAT_ACCESSIBLE, value) } @@ -37,7 +33,6 @@ class UserSharedPrefImpl private const val ACCESS_TOKEN = "ACCESS_TOKEN" private const val REFRESH_TOKEN = "REFRESH_TOKEN" private const val USER_ROLE = "USER_ROLE" - private const val IS_GUIDE_NEEDED = "IS_GUIDE_NEEDED" private const val IS_CHAT_ACCESSIBLE = "IS_CHAT_ACCESSIBLE" } } diff --git a/data/src/main/java/kr/genti/data/repositoryImpl/UserRepositoryImpl.kt b/data/src/main/java/kr/genti/data/repositoryImpl/UserRepositoryImpl.kt index 4200e4ab..71873f21 100644 --- a/data/src/main/java/kr/genti/data/repositoryImpl/UserRepositoryImpl.kt +++ b/data/src/main/java/kr/genti/data/repositoryImpl/UserRepositoryImpl.kt @@ -15,8 +15,6 @@ class UserRepositoryImpl override fun getUserRole(): String = userSharedPref.userRole - override fun getIsGuideNeeded(): Boolean = userSharedPref.isGuideNeeded - override fun getIsChatAccessible(): Boolean = userSharedPref.isChatAccessible override fun setTokens( @@ -31,10 +29,6 @@ class UserRepositoryImpl userSharedPref.userRole = userRole } - override fun setIsGuideNeeded(isGuideNeeded: Boolean) { - userSharedPref.isGuideNeeded = isGuideNeeded - } - override fun setIsChatAccessible(isChatAccessible: Boolean) { userSharedPref.isChatAccessible = isChatAccessible } diff --git a/domain/src/main/kotlin/kr/genti/domain/repository/UserRepository.kt b/domain/src/main/kotlin/kr/genti/domain/repository/UserRepository.kt index e103fbaa..19145745 100644 --- a/domain/src/main/kotlin/kr/genti/domain/repository/UserRepository.kt +++ b/domain/src/main/kotlin/kr/genti/domain/repository/UserRepository.kt @@ -7,8 +7,6 @@ interface UserRepository { fun getUserRole(): String - fun getIsGuideNeeded(): Boolean - fun getIsChatAccessible(): Boolean fun setTokens( @@ -18,8 +16,6 @@ interface UserRepository { fun setUserRole(userRole: String) - fun setIsGuideNeeded(isGuideNeeded: Boolean) - fun setIsChatAccessible(isChatAccessible: Boolean) fun clearInfo() diff --git a/presentation/src/main/java/kr/genti/presentation/create/CreateGuideDialog.kt b/presentation/src/main/java/kr/genti/presentation/create/CreateGuideDialog.kt deleted file mode 100644 index 944750a2..00000000 --- a/presentation/src/main/java/kr/genti/presentation/create/CreateGuideDialog.kt +++ /dev/null @@ -1,35 +0,0 @@ -package kr.genti.presentation.create - -import android.os.Bundle -import android.view.View -import android.view.WindowManager -import kr.genti.core.base.BaseDialog -import kr.genti.core.extension.setOnSingleClickListener -import kr.genti.presentation.R -import kr.genti.presentation.databinding.DialogCreateGuideBinding - -class CreateGuideDialog : BaseDialog(R.layout.dialog_create_guide) { - override fun onStart() { - super.onStart() - dialog?.window?.apply { - setLayout( - WindowManager.LayoutParams.WRAP_CONTENT, - WindowManager.LayoutParams.WRAP_CONTENT, - ) - setBackgroundDrawableResource(R.color.transparent) - } - } - - override fun onViewCreated( - view: View, - savedInstanceState: Bundle?, - ) { - super.onViewCreated(view, savedInstanceState) - - initCloseBtnListener() - } - - private fun initCloseBtnListener() { - binding.btnClose.setOnSingleClickListener { dismiss() } - } -} diff --git a/presentation/src/main/java/kr/genti/presentation/create/CreateViewModel.kt b/presentation/src/main/java/kr/genti/presentation/create/CreateViewModel.kt index bab0a503..0361c65b 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/CreateViewModel.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/CreateViewModel.kt @@ -22,256 +22,250 @@ import kr.genti.domain.enums.PictureRatio import kr.genti.domain.enums.ShotCoverage import kr.genti.domain.repository.CreateRepository import kr.genti.domain.repository.UploadRepository -import kr.genti.domain.repository.UserRepository import javax.inject.Inject import kotlin.random.Random @HiltViewModel class CreateViewModel - @Inject - constructor( - private val createRepository: CreateRepository, - private val uploadRepository: UploadRepository, - private val userRepository: UserRepository, - ) : ViewModel() { - val prompt = MutableLiveData() - var plusImage = emptyImageFileModel() - val isWritten = MutableLiveData(false) +@Inject +constructor( + private val createRepository: CreateRepository, + private val uploadRepository: UploadRepository, +) : ViewModel() { + val prompt = MutableLiveData() + var plusImage = emptyImageFileModel() + val isWritten = MutableLiveData(false) - val selectedRatio = MutableLiveData() - val selectedAngle = MutableLiveData() - val selectedCoverage = MutableLiveData() - val isSelected = MutableLiveData(false) + val selectedRatio = MutableLiveData() + val selectedAngle = MutableLiveData() + val selectedCoverage = MutableLiveData() + val isSelected = MutableLiveData(false) - var imageList = listOf() - var isCompleted = MutableLiveData(false) + var imageList = listOf() + var isCompleted = MutableLiveData(false) - private val _currentPercent = MutableStateFlow(33) - val currentPercent: StateFlow = _currentPercent + private val _currentPercent = MutableStateFlow(33) + val currentPercent: StateFlow = _currentPercent - private var currentPrompt: String = "" + private var currentPrompt: String = "" - private val _totalGeneratingState = MutableStateFlow>(UiState.Empty) - val totalGeneratingState: StateFlow> = _totalGeneratingState + private val _totalGeneratingState = MutableStateFlow>(UiState.Empty) + val totalGeneratingState: StateFlow> = _totalGeneratingState - private var plusImageS3Key = KeyRequestModel(null) - private var imageS3KeyList = listOf() + private var plusImageS3Key = KeyRequestModel(null) + private var imageS3KeyList = listOf() - fun modCurrentPercent(amount: Int) { - _currentPercent.value += amount - } + fun modCurrentPercent(amount: Int) { + _currentPercent.value += amount + } - fun checkWritten() { - isWritten.value = prompt.value?.isNotEmpty() - } + fun checkWritten() { + isWritten.value = prompt.value?.isNotEmpty() + } - fun selectRatio(item: PictureRatio) { - selectedRatio.value = item - checkSelected() - } + fun selectRatio(item: PictureRatio) { + selectedRatio.value = item + checkSelected() + } - fun selectAngle(item: CameraAngle) { - selectedAngle.value = item - checkSelected() - } + fun selectAngle(item: CameraAngle) { + selectedAngle.value = item + checkSelected() + } - fun selectFrame(item: ShotCoverage) { - selectedCoverage.value = item - checkSelected() - } + fun selectFrame(item: ShotCoverage) { + selectedCoverage.value = item + checkSelected() + } - private fun checkSelected() { - isSelected.value = - selectedRatio.value != null && selectedAngle.value != null && selectedCoverage.value != null - } + private fun checkSelected() { + isSelected.value = + selectedRatio.value != null && selectedAngle.value != null && selectedCoverage.value != null + } - fun startSendingImages() { - _totalGeneratingState.value = UiState.Loading - viewModelScope.launch { - runCatching { - listOfNotNull( - if (plusImage.id != (-1).toLong()) async { getSingleS3Url() } else null, - async { getMultiS3Urls() }, - ).awaitAll() - }.onSuccess { - postToGenerateImage() - }.onFailure { - _totalGeneratingState.value = UiState.Failure(it.message.toString()) - } + fun startSendingImages() { + _totalGeneratingState.value = UiState.Loading + viewModelScope.launch { + runCatching { + listOfNotNull( + if (plusImage.id != (-1).toLong()) async { getSingleS3Url() } else null, + async { getMultiS3Urls() }, + ).awaitAll() + }.onSuccess { + postToGenerateImage() + }.onFailure { + _totalGeneratingState.value = UiState.Failure(it.message.toString()) } } + } - private suspend fun getSingleS3Url() { - createRepository.getS3SingleUrl( - S3RequestModel(FileType.USER_UPLOADED_IMAGE, plusImage.name), - ) - .onSuccess { uriModel -> - plusImageS3Key = KeyRequestModel(uriModel.s3Key) - postSingleImage(uriModel) - }.onFailure { - _totalGeneratingState.value = UiState.Failure(it.message.toString()) - } - } - - private suspend fun getMultiS3Urls() { - createRepository.getS3MultiUrl( - listOf( - S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[0].name), - S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[1].name), - S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[2].name), - ), - ).onSuccess { uriList -> - imageS3KeyList = uriList.map { KeyRequestModel(it.s3Key) } - postMultiImage(uriList) + private suspend fun getSingleS3Url() { + createRepository.getS3SingleUrl( + S3RequestModel(FileType.USER_UPLOADED_IMAGE, plusImage.name), + ) + .onSuccess { uriModel -> + plusImageS3Key = KeyRequestModel(uriModel.s3Key) + postSingleImage(uriModel) }.onFailure { _totalGeneratingState.value = UiState.Failure(it.message.toString()) } - } + } - private suspend fun postSingleImage(urlModel: S3PresignedUrlModel) { - uploadRepository.uploadImage(urlModel.url, plusImage.url) - .onFailure { - _totalGeneratingState.value = UiState.Failure(it.message.toString()) - } + private suspend fun getMultiS3Urls() { + createRepository.getS3MultiUrl( + listOf( + S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[0].name), + S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[1].name), + S3RequestModel(FileType.USER_UPLOADED_IMAGE, imageList[2].name), + ), + ).onSuccess { uriList -> + imageS3KeyList = uriList.map { KeyRequestModel(it.s3Key) } + postMultiImage(uriList) + }.onFailure { + _totalGeneratingState.value = UiState.Failure(it.message.toString()) } + } - private suspend fun postMultiImage(urlModelList: List) { - urlModelList.mapIndexed { i, urlModel -> - viewModelScope.async { - uploadRepository.uploadImage(urlModel.url, imageList[i].url) - .onFailure { - _totalGeneratingState.value = UiState.Failure(it.message.toString()) - } - } - }.awaitAll() - } + private suspend fun postSingleImage(urlModel: S3PresignedUrlModel) { + uploadRepository.uploadImage(urlModel.url, plusImage.url) + .onFailure { + _totalGeneratingState.value = UiState.Failure(it.message.toString()) + } + } - private fun postToGenerateImage() { - viewModelScope.launch { - createRepository.postToCreate( - CreateRequestModel( - prompt.value ?: return@launch, - plusImageS3Key, - imageS3KeyList, - selectedAngle.value ?: return@launch, - selectedCoverage.value ?: return@launch, - selectedRatio.value ?: return@launch, - ), - ) - .onSuccess { - _totalGeneratingState.value = UiState.Success(it) - }.onFailure { + private suspend fun postMultiImage(urlModelList: List) { + urlModelList.mapIndexed { i, urlModel -> + viewModelScope.async { + uploadRepository.uploadImage(urlModel.url, imageList[i].url) + .onFailure { _totalGeneratingState.value = UiState.Failure(it.message.toString()) } } - } + }.awaitAll() + } - fun resetGeneratingState() { - _totalGeneratingState.value = UiState.Empty + private fun postToGenerateImage() { + viewModelScope.launch { + createRepository.postToCreate( + CreateRequestModel( + prompt.value ?: return@launch, + plusImageS3Key, + imageS3KeyList, + selectedAngle.value ?: return@launch, + selectedCoverage.value ?: return@launch, + selectedRatio.value ?: return@launch, + ), + ) + .onSuccess { + _totalGeneratingState.value = UiState.Success(it) + }.onFailure { + _totalGeneratingState.value = UiState.Failure(it.message.toString()) + } } + } - fun getIsGuideNeeded() = userRepository.getIsGuideNeeded() - - fun setIsGuideNeeded(isGuideNeeded: Boolean) = userRepository.setIsGuideNeeded(isGuideNeeded) + fun resetGeneratingState() { + _totalGeneratingState.value = UiState.Empty + } - fun getRandomPrompt(): String { - val randomPrompt = promptList[Random.nextInt(promptList.size)] - if (randomPrompt != currentPrompt) currentPrompt = randomPrompt - return currentPrompt - } + fun getRandomPrompt(): String { + val randomPrompt = promptList[Random.nextInt(promptList.size)] + if (randomPrompt != currentPrompt) currentPrompt = randomPrompt + return currentPrompt + } - companion object { - val promptList = - listOf( - "보트를 타고 바다 위를 여행하는 모습을 만들어주세요", - "모델이 되어서 패션쇼에서 런웨이를 서는 모습을 만들어주세요", - "원피스를 입고 꽃집에서 꽃을 들고 있는 모습을 만들어주세요", - "놀이공원에서 일본풍의 교복을 입고 서 있는 모습을 만들어주세요", - "정장을 입고 멋진 호텔에 앉아 있는 모습을 만들어주세요", - "콜로세움을 배경으로 로마 여행을 하는 모습을 만들어주세요", - "오토바이를 타고 광활한 사막 위를 달리는 모습을 만들어주세요", - "탑건 영화처럼 전투기 조종사가 되어 하늘에서 비행기를 조종하는 모습을 만들어주세요", - "산 꼭대기 호수 위에서 기념 사진을 찍는 모습을 만들어주세요", - "겨울 설원과 호수를 배경으로 코트를 입고 있는 모습을 만들어주세요", - "파자마를 입고 거실 소파에 편안하게 앉아 있는 모습을 만들어주세요", - "정장을 입고 스튜디오에서 사진을 찍는 모습을 만들어주세요", - "히말라야 정상에 등반한 모습을 만들어주세요", - "날씨 좋은 날 공원에서 멜빵바지를 입고 풍선을 손에 들고 있는 모습을 만들어주세요", - "한밤 중에 공원에서 운동복을 입고 러닝하는 모습을 만들어주세요", - "밤바다에서 가벼운 옷을 입고 산책하는 모습을 만들어주세요", - "파리의 에펠탑 앞에서 편안하게 앉아 있는 모습을 만들어주세요", - "바다 앞에서 원피스를 입고 걸어가는 모습을 만들어주세요", - "도심 야경을 배경으로 스트릿 스타일의 옷을 입고 있는 모습을 만들어주세요", - "한겨울에 목도리를 하고 있는 모습을 만들어주세요", - "드레스를 입고 파티장에 가 있는 모습을 만들어주세요", - "비행기에서 손님을 맞이하는 승무원차림의 모습을 만들어주세요", - "영화관에서 팝콘을 먹으면서 영화를 보는 모습을 만들어주세요", - "눈오는 날 눈사람을 완성한 모습을 만들어주세요", - "일본풍의 교복을 입고 벛꽃 아래에서 학교가는 모습을 만들어주세요", - "분위기 좋은 카페에 앉아 있는 모습을 만들어주세요", - "구름 위에 올라가서 무지개와 함께 있는 모습을 만들어주세요", - "웨딩드레스를 입고 행진하는 모습을 만들어주세요", - "승마복을 입고 말을 타고 있는 모습을 만들어주세요", - "트렌치 코트를 입고 낙옆이 쌓여 있는 거리를 걷고 있는 모습을 만들어주세요", - "이국적인 해변에서 원피스를 입고 걸어가는 사진을 만들어주세요", - "공항에서 캐리어를 끌고 걸어가는 사진을 만들어주세요", - "뉴욕의 타임스퀘어같은 전광판 아래에 서 있는 모습을 만들어주세요", - "기모노를 입고 교토 거리를 걸어가는 모습을 만들어주세요", - "강연장에서 프리젠테이션하고 있는 모습을 만들어주세요", - "겨울 옷을 입고 북극의 오로라와 함께있는 사진을 만들어주세요", - "변호사가 되어 법정에 서 있는 모습을 만들어주세요", - "런던의 빅밴을 배경으로 서 있는 모습을 만들어주세요", - "초원에서 말을 타고 있는 모습을 만들어주세요", - "이집트 피라미드 앞에서 서 있는 모습을 만들어주세요", - "무대 위에서 기타를 연주하는 모습을 만들어주세요", - "수의사가 되어 동물 병원에서 강아지를 진료하는 모습을 만들어주세요", - "제빵사가 되어 빵을 만들고 있는 모습을 만들어주세요", - "만개한 유채꽃밭에서 화려한 드레스를 입고 있는 모습을 만들어주세요", - "정장을 입고 공원에 앉아서 쉬고 있는 모습을 만들어주세요", - "강아지를 안고 있는 모습으로 만들어주세요", - "캠핑카 앞에 앉아서 캠핑을 즐기는 모습을 만들어주세요", - "정장을 입고 연설하는 모습을 만들어주세요", - "군복을 입고 있는 모습을 만들어주세요", - "경찰이 된 내 모습을 만들어주세요", - "청량한 바닷가에서 반팔과 반바지를 입고 있는 모습을 만들어주세요", - "고급스러운 레스토랑에서 식사하고 있는 모습을 만들어주세요", - "해변가에서 자전거를 타는 모습을 만들어주세요", - "꽃집 사장님이 된 모습을 만들어주세요", - "바닷가를 달리고 있는 모습을 만들어주세요", - "운동장에서 열심히 뛰고 있는 모습을 만들어주세요", - "마법학교에 입학한 마법사가 된 모습을 만들어주세요", - "아프리카 초원에서 사자와 함께 뛰고 있는 모습을 만들어주세요", - "크로스핏하는 모습을 만들어주세요", - "비행기 퍼스트 클래스를 타고 있는 모습을 만들어주세요", - "카페에서 커피 만드는 모습을 만들어주세요", - "잔디밭 위에서 디즈니 공주들이 입는 드레스를 입고 있는 모습을 만들어주세요", - "도서관에서 후드티를 입고 공부하는 모습을 만들어주세요", - "밤하늘에 반짝이는 별들 아래에서 앉아있는 사진을 만들어주세요", - "황혼이 짙어지는 사막에서 걸터앉아 멀리 바라보는 모습을 만들어주세요", - "번화가에서 커피를 들고 있는 사진을 만들어주세요", - "고요한 호수 위에 있는 작은 보트 안에서 비옷을 입고 있는 모습을 만들어주세요", - "황금빛 들녘에서 터틀넥 니트를 입고, 햇볕을 받고 있는 모습을 만들어주세요", - "가을 숲에서 단풍을 바라보는 모습을 만들어주세요", - "꽃이 만발한 정원에서 민소매 원피스를 입고, 꽃을 따고 있는 모습을 만들어주세요", - "도심 골목에서 가죽 재킷을 입고 벽에 기대어 있는 사진을 만들어주세요", - "늦은 가을 날씨에 니트와 스커트를 입고 단풍길을 걷는 사진을 만들어주세요", - "어두운 숲 속에서 검은색 망토를 입고있는 마법사의 모습을 만들어주세요", - "화창한 날씨에 티셔츠와 청바지를 입고 공원에서 피크닉을 즐기는 모습을 만들어주세요", - "빙하 위에서 털달린 점퍼를 입고 당당히 서 있는 모습을 만들어주세요", - "블라우스와 청바지를 입고 강가를 걷는 모습을 만들어주세요", - "해적 선박 위에서 항해하는 모습을 만들어주세요", - "카니발 축제에서 화려한 공연복을 입고 춤추는 모습을 만들어주세요", - "판타지 세계에서 화려한 마법 로브를 입고 마법진을 그리는 모습을 만들어주세요", - "고대 신전에서 황금색 로브를 입고 앉아 있는 모습을 만들어주세요", - "정글 속에서 군복을 입고 숨어있는 모습을 만들어주세요", - "중세시대 성에서 화려한 왕관과 드레스를 입고 공주처럼 앉아 있는 모습을 만들어주세요", - "중국 전통복을 입고 만리장성을 배경으로 사진을 찍고 있는 모습을 만들어주세요", - "이스탄불에서 터키 전통 의상을 입고 역사적인 건물을 구경하는 모습을 만들어주세요.", - "앙코르와트에서 탐험복을 입고 거대한 석조 건축물을 배경으로 사진을 찍는 모습을 만들어주세요", - "한 겨울 자작나무 숲에서 모피 재킷을 입고 산책을 즐기며 자연을 만끽하는 모습을 만들어주세요", - "클럽에서 원피스를 입고 춤추는 모습을 만들어주세요", - "가을의 따뜻한 햇빛이 느껴지는 날씨에, 갈대 밭 속에서 서있는 사진을 만들고 싶어요.", - "저격을 준비하고 있는 스나이퍼가 된 모습을 만들고 싶어요", - ) - } + companion object { + val promptList = + listOf( + "보트를 타고 바다 위를 여행하는 모습을 만들어주세요", + "모델이 되어서 패션쇼에서 런웨이를 서는 모습을 만들어주세요", + "원피스를 입고 꽃집에서 꽃을 들고 있는 모습을 만들어주세요", + "놀이공원에서 일본풍의 교복을 입고 서 있는 모습을 만들어주세요", + "정장을 입고 멋진 호텔에 앉아 있는 모습을 만들어주세요", + "콜로세움을 배경으로 로마 여행을 하는 모습을 만들어주세요", + "오토바이를 타고 광활한 사막 위를 달리는 모습을 만들어주세요", + "탑건 영화처럼 전투기 조종사가 되어 하늘에서 비행기를 조종하는 모습을 만들어주세요", + "산 꼭대기 호수 위에서 기념 사진을 찍는 모습을 만들어주세요", + "겨울 설원과 호수를 배경으로 코트를 입고 있는 모습을 만들어주세요", + "파자마를 입고 거실 소파에 편안하게 앉아 있는 모습을 만들어주세요", + "정장을 입고 스튜디오에서 사진을 찍는 모습을 만들어주세요", + "히말라야 정상에 등반한 모습을 만들어주세요", + "날씨 좋은 날 공원에서 멜빵바지를 입고 풍선을 손에 들고 있는 모습을 만들어주세요", + "한밤 중에 공원에서 운동복을 입고 러닝하는 모습을 만들어주세요", + "밤바다에서 가벼운 옷을 입고 산책하는 모습을 만들어주세요", + "파리의 에펠탑 앞에서 편안하게 앉아 있는 모습을 만들어주세요", + "바다 앞에서 원피스를 입고 걸어가는 모습을 만들어주세요", + "도심 야경을 배경으로 스트릿 스타일의 옷을 입고 있는 모습을 만들어주세요", + "한겨울에 목도리를 하고 있는 모습을 만들어주세요", + "드레스를 입고 파티장에 가 있는 모습을 만들어주세요", + "비행기에서 손님을 맞이하는 승무원차림의 모습을 만들어주세요", + "영화관에서 팝콘을 먹으면서 영화를 보는 모습을 만들어주세요", + "눈오는 날 눈사람을 완성한 모습을 만들어주세요", + "일본풍의 교복을 입고 벛꽃 아래에서 학교가는 모습을 만들어주세요", + "분위기 좋은 카페에 앉아 있는 모습을 만들어주세요", + "구름 위에 올라가서 무지개와 함께 있는 모습을 만들어주세요", + "웨딩드레스를 입고 행진하는 모습을 만들어주세요", + "승마복을 입고 말을 타고 있는 모습을 만들어주세요", + "트렌치 코트를 입고 낙옆이 쌓여 있는 거리를 걷고 있는 모습을 만들어주세요", + "이국적인 해변에서 원피스를 입고 걸어가는 사진을 만들어주세요", + "공항에서 캐리어를 끌고 걸어가는 사진을 만들어주세요", + "뉴욕의 타임스퀘어같은 전광판 아래에 서 있는 모습을 만들어주세요", + "기모노를 입고 교토 거리를 걸어가는 모습을 만들어주세요", + "강연장에서 프리젠테이션하고 있는 모습을 만들어주세요", + "겨울 옷을 입고 북극의 오로라와 함께있는 사진을 만들어주세요", + "변호사가 되어 법정에 서 있는 모습을 만들어주세요", + "런던의 빅밴을 배경으로 서 있는 모습을 만들어주세요", + "초원에서 말을 타고 있는 모습을 만들어주세요", + "이집트 피라미드 앞에서 서 있는 모습을 만들어주세요", + "무대 위에서 기타를 연주하는 모습을 만들어주세요", + "수의사가 되어 동물 병원에서 강아지를 진료하는 모습을 만들어주세요", + "제빵사가 되어 빵을 만들고 있는 모습을 만들어주세요", + "만개한 유채꽃밭에서 화려한 드레스를 입고 있는 모습을 만들어주세요", + "정장을 입고 공원에 앉아서 쉬고 있는 모습을 만들어주세요", + "강아지를 안고 있는 모습으로 만들어주세요", + "캠핑카 앞에 앉아서 캠핑을 즐기는 모습을 만들어주세요", + "정장을 입고 연설하는 모습을 만들어주세요", + "군복을 입고 있는 모습을 만들어주세요", + "경찰이 된 내 모습을 만들어주세요", + "청량한 바닷가에서 반팔과 반바지를 입고 있는 모습을 만들어주세요", + "고급스러운 레스토랑에서 식사하고 있는 모습을 만들어주세요", + "해변가에서 자전거를 타는 모습을 만들어주세요", + "꽃집 사장님이 된 모습을 만들어주세요", + "바닷가를 달리고 있는 모습을 만들어주세요", + "운동장에서 열심히 뛰고 있는 모습을 만들어주세요", + "마법학교에 입학한 마법사가 된 모습을 만들어주세요", + "아프리카 초원에서 사자와 함께 뛰고 있는 모습을 만들어주세요", + "크로스핏하는 모습을 만들어주세요", + "비행기 퍼스트 클래스를 타고 있는 모습을 만들어주세요", + "카페에서 커피 만드는 모습을 만들어주세요", + "잔디밭 위에서 디즈니 공주들이 입는 드레스를 입고 있는 모습을 만들어주세요", + "도서관에서 후드티를 입고 공부하는 모습을 만들어주세요", + "밤하늘에 반짝이는 별들 아래에서 앉아있는 사진을 만들어주세요", + "황혼이 짙어지는 사막에서 걸터앉아 멀리 바라보는 모습을 만들어주세요", + "번화가에서 커피를 들고 있는 사진을 만들어주세요", + "고요한 호수 위에 있는 작은 보트 안에서 비옷을 입고 있는 모습을 만들어주세요", + "황금빛 들녘에서 터틀넥 니트를 입고, 햇볕을 받고 있는 모습을 만들어주세요", + "가을 숲에서 단풍을 바라보는 모습을 만들어주세요", + "꽃이 만발한 정원에서 민소매 원피스를 입고, 꽃을 따고 있는 모습을 만들어주세요", + "도심 골목에서 가죽 재킷을 입고 벽에 기대어 있는 사진을 만들어주세요", + "늦은 가을 날씨에 니트와 스커트를 입고 단풍길을 걷는 사진을 만들어주세요", + "어두운 숲 속에서 검은색 망토를 입고있는 마법사의 모습을 만들어주세요", + "화창한 날씨에 티셔츠와 청바지를 입고 공원에서 피크닉을 즐기는 모습을 만들어주세요", + "빙하 위에서 털달린 점퍼를 입고 당당히 서 있는 모습을 만들어주세요", + "블라우스와 청바지를 입고 강가를 걷는 모습을 만들어주세요", + "해적 선박 위에서 항해하는 모습을 만들어주세요", + "카니발 축제에서 화려한 공연복을 입고 춤추는 모습을 만들어주세요", + "판타지 세계에서 화려한 마법 로브를 입고 마법진을 그리는 모습을 만들어주세요", + "고대 신전에서 황금색 로브를 입고 앉아 있는 모습을 만들어주세요", + "정글 속에서 군복을 입고 숨어있는 모습을 만들어주세요", + "중세시대 성에서 화려한 왕관과 드레스를 입고 공주처럼 앉아 있는 모습을 만들어주세요", + "중국 전통복을 입고 만리장성을 배경으로 사진을 찍고 있는 모습을 만들어주세요", + "이스탄불에서 터키 전통 의상을 입고 역사적인 건물을 구경하는 모습을 만들어주세요.", + "앙코르와트에서 탐험복을 입고 거대한 석조 건축물을 배경으로 사진을 찍는 모습을 만들어주세요", + "한 겨울 자작나무 숲에서 모피 재킷을 입고 산책을 즐기며 자연을 만끽하는 모습을 만들어주세요", + "클럽에서 원피스를 입고 춤추는 모습을 만들어주세요", + "가을의 따뜻한 햇빛이 느껴지는 날씨에, 갈대 밭 속에서 서있는 사진을 만들고 싶어요.", + "저격을 준비하고 있는 스나이퍼가 된 모습을 만들고 싶어요", + ) } +} diff --git a/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt b/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt index 28a4bf45..26edd36e 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/PoseFragment.kt @@ -19,8 +19,6 @@ import kr.genti.presentation.util.AmplitudeManager.PROPERTY_PAGE class PoseFragment() : BaseFragment(R.layout.fragment_pose) { private val viewModel by activityViewModels() - private var createGuideDialog: CreateGuideDialog? = null - override fun onViewCreated( view: View, savedInstanceState: Bundle?, @@ -30,7 +28,6 @@ class PoseFragment() : BaseFragment(R.layout.fragment_pose) initView() initNextBtnListener() initBackPressedListener() - initGuideIfNeeded() } private fun initView() { @@ -59,22 +56,4 @@ class PoseFragment() : BaseFragment(R.layout.fragment_pose) } }) } - - private fun initGuideIfNeeded() { - if (viewModel.getIsGuideNeeded()) { - createGuideDialog = CreateGuideDialog() - createGuideDialog?.show(childFragmentManager, DIALOG_GUIDE) - viewModel.setIsGuideNeeded(false) - } - } - - override fun onDestroyView() { - super.onDestroyView() - - createGuideDialog = null - } - - companion object { - const val DIALOG_GUIDE = "DIALOG_GUIDE" - } } diff --git a/presentation/src/main/res/drawable/img_green_bg_2_word.xml b/presentation/src/main/res/drawable/img_green_bg_2_word.xml deleted file mode 100644 index 1a095798..00000000 --- a/presentation/src/main/res/drawable/img_green_bg_2_word.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/presentation/src/main/res/drawable/img_green_bg_3_word.xml b/presentation/src/main/res/drawable/img_green_bg_3_word.xml deleted file mode 100644 index 93035f86..00000000 --- a/presentation/src/main/res/drawable/img_green_bg_3_word.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/presentation/src/main/res/drawable/img_guide_bg.png b/presentation/src/main/res/drawable/img_guide_bg.png deleted file mode 100644 index 452306cf889ec3f9fb46e7acef2370fc6fcd7842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13201 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 JcQ@ti{{q<*BoqJu diff --git a/presentation/src/main/res/drawable/img_guide_ex.png b/presentation/src/main/res/drawable/img_guide_ex.png deleted file mode 100644 index a893a72818178649e16e95fbe080cc8116930e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85935 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ℑcF{{J)fz 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 6369d664651f4b28f40b2c2950fd5b804d4ee366 Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 01:04:57 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[REFACTOR/#153]=20=ED=94=84=EB=A1=AC?= =?UTF-8?q?=ED=94=84=ED=8A=B8=EB=B7=B0=20UI=20=EB=B0=8F=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=A0=84=EB=A9=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/create/DefineFragment.kt | 81 ----- .../src/main/res/drawable/btn_play.xml | 9 + .../src/main/res/drawable/sel_btn.xml | 7 +- .../res/drawable/shape_black_fill_10_rect.xml | 5 + .../src/main/res/layout/fragment_define.xml | 321 +++++++----------- presentation/src/main/res/values/strings.xml | 10 +- 6 files changed, 147 insertions(+), 286 deletions(-) create mode 100644 presentation/src/main/res/drawable/btn_play.xml create mode 100644 presentation/src/main/res/drawable/shape_black_fill_10_rect.xml diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt index 3fe377f1..f9361931 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt @@ -16,7 +16,6 @@ import coil.load import dagger.hilt.android.AndroidEntryPoint import kr.genti.core.base.BaseFragment import kr.genti.core.extension.getFileName -import kr.genti.core.extension.initOnBackPressedListener import kr.genti.core.extension.setOnSingleClickListener import kr.genti.core.extension.toast import kr.genti.domain.entity.response.ImageFileModel @@ -31,8 +30,6 @@ import kr.genti.presentation.util.AmplitudeManager.PROPERTY_PAGE @AndroidEntryPoint class DefineFragment() : BaseFragment(R.layout.fragment_define) { private val viewModel by activityViewModels() - private lateinit var photoPickerResult: ActivityResultLauncher - private lateinit var galleryPickerResult: ActivityResultLauncher override fun onViewCreated( view: View, @@ -43,15 +40,6 @@ class DefineFragment() : BaseFragment(R.layout.fragment_d initView() initCreateBtnListener() initRefreshExBtnListener() - initAddImageBtnListener() - initDeleteBtnListener() - setGalleryImageWithPhotoPicker() - setGalleryImageWithGalleryPicker() - } - - override fun onResume() { - super.onResume() - setSavedImage() } private fun initView() { @@ -84,73 +72,4 @@ class DefineFragment() : BaseFragment(R.layout.fragment_d binding.tvCreateRandomExample.text = viewModel.getRandomPrompt() } } - - private fun initAddImageBtnListener() { - with(binding) { - btnCreatePlus.setOnSingleClickListener { checkAndGetImages() } - layoutPlusImage.setOnSingleClickListener { checkAndGetImages() } - } - } - - private fun initDeleteBtnListener() { - binding.btnDeleteImage.setOnSingleClickListener { - viewModel.plusImage = emptyImageFileModel() - binding.layoutPlusImage.isVisible = false - binding.btnDeleteImage.isVisible = false - } - } - - private fun checkAndGetImages() { - if (isPhotoPickerAvailable(requireContext())) { - photoPickerResult.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) - } else { - galleryPickerResult.launch( - Intent(Intent.ACTION_PICK).apply { type = "image/*" }, - ) - } - } - - private fun setGalleryImageWithPhotoPicker() { - photoPickerResult = - registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> - if (uri != null) setImageWithUri(uri) - } - } - - private fun setGalleryImageWithGalleryPicker() { - galleryPickerResult = - registerForActivityResult( - ActivityResultContracts.StartActivityForResult(), - ) { result -> - when (result.resultCode) { - Activity.RESULT_OK -> result.data?.data?.let { setImageWithUri(it) } - Activity.RESULT_CANCELED -> return@registerForActivityResult - else -> toast(getString(R.string.selfie_toast_picker_error)) - } - } - } - - private fun setImageWithUri(uri: Uri) { - viewModel.plusImage = - ImageFileModel( - uri.hashCode().toLong(), - uri.getFileName(requireActivity().contentResolver).toString(), - uri.toString(), - ) - with(binding) { - ivAddedImage.load(uri) - layoutPlusImage.isVisible = true - btnDeleteImage.isVisible = true - } - } - - private fun setSavedImage() { - if (viewModel.plusImage.id != (-1).toLong()) { - with(binding) { - ivAddedImage.load(viewModel.plusImage.url) - layoutPlusImage.isVisible = true - btnDeleteImage.isVisible = true - } - } - } } diff --git a/presentation/src/main/res/drawable/btn_play.xml b/presentation/src/main/res/drawable/btn_play.xml new file mode 100644 index 00000000..e80331c4 --- /dev/null +++ b/presentation/src/main/res/drawable/btn_play.xml @@ -0,0 +1,9 @@ + + + diff --git a/presentation/src/main/res/drawable/sel_btn.xml b/presentation/src/main/res/drawable/sel_btn.xml index aed2344e..919e18f2 100644 --- a/presentation/src/main/res/drawable/sel_btn.xml +++ b/presentation/src/main/res/drawable/sel_btn.xml @@ -4,7 +4,7 @@ - + @@ -12,7 +12,10 @@ - + diff --git a/presentation/src/main/res/drawable/shape_black_fill_10_rect.xml b/presentation/src/main/res/drawable/shape_black_fill_10_rect.xml new file mode 100644 index 00000000..f134f84d --- /dev/null +++ b/presentation/src/main/res/drawable/shape_black_fill_10_rect.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/layout/fragment_define.xml b/presentation/src/main/res/layout/fragment_define.xml index 58e7dff5..accb4331 100644 --- a/presentation/src/main/res/layout/fragment_define.xml +++ b/presentation/src/main/res/layout/fragment_define.xml @@ -15,229 +15,156 @@ + android:background="@color/black"> - + + + + + + + + + + + + + + + + + app:layout_constraintStart_toStartOf="parent"> - - - - - + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_margin="16dp" + android:background="@drawable/shape_black_fill_10_rect" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - - - + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> - - + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index 27b529d5..d955fd48 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -40,12 +40,10 @@ 사진 만들기 %1$d/3 - 만들고 싶은 사진을 설명해주세요✏️ - 성적이거나 폭력적인 사진은 만들어지지 않아요 - 의상과 배경을 포함해서 설명해 주세요!\n\n*헤어스타일을 변경하는 기능은 준비 중이에요\n*너무 특정한 배경과 의상은 어려울 수 있어요\n(반포 한강 공원, 나이키 티셔츠 등) - 참고할 구도의 사진이 있다면 추가해주세요 (선택) - (선택) - (참고사진은 최대 1장 업로드 할 수 있어요) + 어떤 사진을 만들고 싶나요? + AI가 이해하지 못하는 장소나 의상은 생성이 어려울 수 있어요. + 성적이거나 폭력적인 사진은 생성되지 않아요. + 만들고 싶은 사진을 설명해주세요. 이런 사진은 어때요? 프랑스 야경을 즐기는 모습을 그려주세요. 항공점퍼를 입고 테라스에 서 있는 모습이에요. From 162e41d64b74733f36fb5a5c34a6f0e342cd6238 Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 01:39:17 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[FIX/#153]=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=EB=B7=B0=20=ED=82=A4=EB=B3=B4=EB=93=9C=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EA=B4=80=EB=A0=A8=20=EC=9D=B4=EC=8A=88=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 ++- .../kr/genti/presentation/create/DefineFragment.kt | 14 +------------- .../src/main/res/layout/fragment_define.xml | 3 ++- presentation/src/main/res/values/themes.xml | 5 ++++- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8039127a..18ab8d7d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,7 +56,8 @@ + android:screenOrientation="portrait" + android:windowSoftInputMode="adjustResize" /> (R.layout.fragment_d binding.tvCreateRandomExample.text = viewModel.getRandomPrompt() } } + } diff --git a/presentation/src/main/res/layout/fragment_define.xml b/presentation/src/main/res/layout/fragment_define.xml index accb4331..22176e71 100644 --- a/presentation/src/main/res/layout/fragment_define.xml +++ b/presentation/src/main/res/layout/fragment_define.xml @@ -20,7 +20,7 @@ @@ -112,6 +112,7 @@ @color/black - @color/gray + @color/white_60 + + + @color/black @style/AppBottomSheetDialogTheme From 45de31a737d3eb3135958d17780dc123e98dd2f5 Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 20:13:16 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[ADD/#153]=20=EC=83=9D=EC=84=B1=EB=B7=B0=20?= =?UTF-8?q?=EC=98=88=EC=8B=9C=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?=EC=96=B4=EB=8C=91=ED=84=B0=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/create/DefineAdapter.kt | 36 +++++++++++ .../presentation/create/DefineViewHolder.kt | 14 +++++ .../main/res/layout/item_define_example.xml | 62 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt create mode 100644 presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt create mode 100644 presentation/src/main/res/layout/item_define_example.xml diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt new file mode 100644 index 00000000..a8985655 --- /dev/null +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt @@ -0,0 +1,36 @@ +package kr.genti.presentation.create + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import kr.genti.core.util.ItemDiffCallback +import kr.genti.presentation.databinding.ItemDefineExampleBinding + +class DefineAdapter : ListAdapter(diffUtil) { + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): DefineViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ItemDefineExampleBinding.inflate(inflater, parent, false) + return DefineViewHolder(binding) + } + + override fun onBindViewHolder( + holder: DefineViewHolder, + position: Int, + ) { + val item = getItem(position) ?: return + holder.onBind(item) + } + + companion object { + + private val diffUtil = + ItemDiffCallback( + onItemsTheSame = { old, new -> old.length == new.length }, + onContentsTheSame = { old, new -> old == new }, + ) + } +} \ No newline at end of file diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt new file mode 100644 index 00000000..767ffc81 --- /dev/null +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt @@ -0,0 +1,14 @@ +package kr.genti.presentation.create + +import androidx.recyclerview.widget.RecyclerView +import kr.genti.presentation.databinding.ItemDefineExampleBinding + +class DefineViewHolder( + val binding: ItemDefineExampleBinding, +) : RecyclerView.ViewHolder(binding.root) { + fun onBind(item: String) { + with(binding) { + tvDefineExample.text = item + } + } +} diff --git a/presentation/src/main/res/layout/item_define_example.xml b/presentation/src/main/res/layout/item_define_example.xml new file mode 100644 index 00000000..0d325560 --- /dev/null +++ b/presentation/src/main/res/layout/item_define_example.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 20fff727661344f24a88c340bde004f1dd6e6a2f Mon Sep 17 00:00:00 2001 From: Sangho Kim Date: Sun, 27 Oct 2024 20:48:07 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[FEAT/#153]=20=ED=94=84=EB=A1=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=EB=B7=B0=20=EC=98=88=EC=8B=9C=20=EB=B7=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A0=80=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/onboarding/OnboardingActivity.kt | 2 +- .../presentation/create/DefineAdapter.kt | 5 ++- .../presentation/create/DefineFragment.kt | 44 +++++++++++++------ .../presentation/create/DefineViewHolder.kt | 3 +- ...or_grey5.xml => ic_indicator_white_30.xml} | 2 +- .../main/res/layout/activity_onboarding.xml | 2 +- .../src/main/res/layout/fragment_define.xml | 35 +++++---------- .../main/res/layout/item_define_example.xml | 8 ++-- 8 files changed, 56 insertions(+), 45 deletions(-) rename presentation/src/main/res/drawable/{ic_indicator_grey5.xml => ic_indicator_white_30.xml} (89%) diff --git a/presentation/src/main/java/kr/genti/presentation/auth/onboarding/OnboardingActivity.kt b/presentation/src/main/java/kr/genti/presentation/auth/onboarding/OnboardingActivity.kt index f1cebf9b..ed8a2e9f 100644 --- a/presentation/src/main/java/kr/genti/presentation/auth/onboarding/OnboardingActivity.kt +++ b/presentation/src/main/java/kr/genti/presentation/auth/onboarding/OnboardingActivity.kt @@ -20,7 +20,7 @@ import kr.genti.presentation.util.AmplitudeManager.PROPERTY_PAGE @AndroidEntryPoint class OnboardingActivity : BaseActivity(R.layout.activity_onboarding) { private var _onboardingAdapter: OnboardingAdapter? = null - val onboardingAdapter + private val onboardingAdapter get() = requireNotNull(_onboardingAdapter) { getString(R.string.adapter_not_initialized_error_msg) } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt index a8985655..416171e8 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineAdapter.kt @@ -25,11 +25,14 @@ class DefineAdapter : ListAdapter(diffUtil) { holder.onBind(item) } + override fun getItemCount(): Int = TOTAL_VIEW_COUNT + companion object { + const val TOTAL_VIEW_COUNT = 5 private val diffUtil = ItemDiffCallback( - onItemsTheSame = { old, new -> old.length == new.length }, + onItemsTheSame = { old, new -> old == new }, onContentsTheSame = { old, new -> old == new }, ) } diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt index 77445f77..71b6fe68 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineFragment.kt @@ -4,10 +4,12 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController +import androidx.viewpager2.widget.ViewPager2 import dagger.hilt.android.AndroidEntryPoint import kr.genti.core.base.BaseFragment import kr.genti.core.extension.setOnSingleClickListener import kr.genti.presentation.R +import kr.genti.presentation.create.CreateViewModel.Companion.promptList import kr.genti.presentation.databinding.FragmentDefineBinding import kr.genti.presentation.util.AmplitudeManager import kr.genti.presentation.util.AmplitudeManager.EVENT_CLICK_BTN @@ -18,6 +20,10 @@ import kr.genti.presentation.util.AmplitudeManager.PROPERTY_PAGE class DefineFragment() : BaseFragment(R.layout.fragment_define) { private val viewModel by activityViewModels() + private var _adapter: DefineAdapter? = null + private val adapter + get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) } + override fun onViewCreated( view: View, savedInstanceState: Bundle?, @@ -26,12 +32,12 @@ class DefineFragment() : BaseFragment(R.layout.fragment_d initView() initCreateBtnListener() - initRefreshExBtnListener() + initViewPager() + setPromptExample() } private fun initView() { binding.vm = viewModel - binding.tvCreateRandomExample.text = viewModel.getRandomPrompt() } private fun initCreateBtnListener() { @@ -46,18 +52,30 @@ class DefineFragment() : BaseFragment(R.layout.fragment_d } } - private fun initRefreshExBtnListener() { - binding.btnRefresh.setOnClickListener { - AmplitudeManager.apply { - trackEvent( - EVENT_CLICK_BTN, - mapOf(PROPERTY_PAGE to "create1"), - mapOf(PROPERTY_BTN to "promptsuggest_refresh"), - ) - plusIntProperties("user_promptsuggest_refresh") - } - binding.tvCreateRandomExample.text = viewModel.getRandomPrompt() + private fun initViewPager() { + _adapter = DefineAdapter() + with(binding) { + vpCreateRandom.adapter = adapter + vpCreateRandom.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + AmplitudeManager.apply { + trackEvent( + EVENT_CLICK_BTN, + mapOf(PROPERTY_PAGE to "create1"), + mapOf(PROPERTY_BTN to "promptsuggest_refresh"), + ) + plusIntProperties("user_promptsuggest_refresh") + } + } + }) + dotIndicator.setViewPager(binding.vpCreateRandom) } } + private fun setPromptExample() { + adapter.submitList(promptList.subList(0, 5)) + adapter.notifyDataSetChanged() + } + } diff --git a/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt b/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt index 767ffc81..3e46bd81 100644 --- a/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt +++ b/presentation/src/main/java/kr/genti/presentation/create/DefineViewHolder.kt @@ -1,6 +1,7 @@ package kr.genti.presentation.create import androidx.recyclerview.widget.RecyclerView +import kr.genti.core.extension.breakLines import kr.genti.presentation.databinding.ItemDefineExampleBinding class DefineViewHolder( @@ -8,7 +9,7 @@ class DefineViewHolder( ) : RecyclerView.ViewHolder(binding.root) { fun onBind(item: String) { with(binding) { - tvDefineExample.text = item + tvDefineExample.text = item.breakLines() } } } diff --git a/presentation/src/main/res/drawable/ic_indicator_grey5.xml b/presentation/src/main/res/drawable/ic_indicator_white_30.xml similarity index 89% rename from presentation/src/main/res/drawable/ic_indicator_grey5.xml rename to presentation/src/main/res/drawable/ic_indicator_white_30.xml index e9310364..67d16ad7 100644 --- a/presentation/src/main/res/drawable/ic_indicator_grey5.xml +++ b/presentation/src/main/res/drawable/ic_indicator_white_30.xml @@ -5,5 +5,5 @@ android:viewportHeight="10"> + android:fillColor="@color/white_30"/> diff --git a/presentation/src/main/res/layout/activity_onboarding.xml b/presentation/src/main/res/layout/activity_onboarding.xml index e61e9e7d..a07297c3 100644 --- a/presentation/src/main/res/layout/activity_onboarding.xml +++ b/presentation/src/main/res/layout/activity_onboarding.xml @@ -60,7 +60,7 @@ android:layout_height="16dp" android:layout_marginBottom="98dp" app:ci_drawable="@drawable/ic_indicator_green" - app:ci_drawable_unselected="@drawable/ic_indicator_grey5" + app:ci_drawable_unselected="@drawable/ic_indicator_white_30" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> diff --git a/presentation/src/main/res/layout/fragment_define.xml b/presentation/src/main/res/layout/fragment_define.xml index 22176e71..65126633 100644 --- a/presentation/src/main/res/layout/fragment_define.xml +++ b/presentation/src/main/res/layout/fragment_define.xml @@ -79,35 +79,24 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_create_script_subtitle_2" /> - + app:layout_constraintTop_toBottomOf="@id/tv_create_random_title" /> - + app:layout_constraintStart_toStartOf="parent" /> diff --git a/presentation/src/main/res/layout/item_define_example.xml b/presentation/src/main/res/layout/item_define_example.xml index 0d325560..c011f1a6 100644 --- a/presentation/src/main/res/layout/item_define_example.xml +++ b/presentation/src/main/res/layout/item_define_example.xml @@ -9,8 +9,7 @@ + android:layout_height="match_parent"> + android:layout_height="match_parent">