diff --git a/core/designsystem/src/main/res/drawable/ic_read_after_24.xml b/core/designsystem/src/main/res/drawable/ic_read_after_24.xml index a6e13179..7dd2fa37 100644 --- a/core/designsystem/src/main/res/drawable/ic_read_after_24.xml +++ b/core/designsystem/src/main/res/drawable/ic_read_after_24.xml @@ -4,6 +4,10 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M15,13L11,17L9,15M19,9H16.2C15.08,9 14.52,9 14.092,8.782C13.715,8.59 13.41,8.284 13.218,7.908C13,7.48 13,6.92 13,5.8V3M19,17.8V9.325C19,8.836 19,8.592 18.944,8.362C18.895,8.157 18.815,7.962 18.705,7.783C18.581,7.582 18.409,7.409 18.063,7.063L14.938,3.937C14.592,3.591 14.419,3.418 14.217,3.295C14.038,3.185 13.843,3.104 13.639,3.055C13.409,3 13.164,3 12.675,3H8.2C7.08,3 6.52,3 6.092,3.218C5.715,3.41 5.41,3.716 5.218,4.092C5,4.52 5,5.08 5,6.2V17.8C5,18.92 5,19.48 5.218,19.908C5.41,20.284 5.715,20.59 6.092,20.782C6.52,21 7.08,21 8.2,21H15.8C16.92,21 17.48,21 17.908,20.782C18.284,20.59 18.59,20.284 18.782,19.908C19,19.48 19,18.92 19,17.8Z" + android:strokeLineJoin="round" + android:strokeWidth="2" + android:fillColor="#00000000" + android:strokeColor="#F05A39" + android:strokeLineCap="round"/> diff --git a/core/designsystem/src/main/res/drawable/ic_read_before_24.xml b/core/designsystem/src/main/res/drawable/ic_read_before_24.xml new file mode 100644 index 00000000..2dbf41ee --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_read_before_24.xml @@ -0,0 +1,13 @@ + + + diff --git a/feature/clip/src/main/java/org/sopt/clip/clipchange/ClipChangeFragment.kt b/feature/clip/src/main/java/org/sopt/clip/clipchange/ClipChangeFragment.kt index d6b364a9..caa58d59 100644 --- a/feature/clip/src/main/java/org/sopt/clip/clipchange/ClipChangeFragment.kt +++ b/feature/clip/src/main/java/org/sopt/clip/clipchange/ClipChangeFragment.kt @@ -32,6 +32,7 @@ class ClipChangeFragment : getCategoryAll() collectClipState(args) initCloseButtonClickListener() + initNextButtonClickListener() } private fun getCategoryAll() { @@ -76,21 +77,33 @@ class ClipChangeFragment : list.onEach { it.isSelected = false } list[index].isSelected = true binding.btnClipChangeSelectNext.state = LinkMindButtonState.ENABLE + viewModel.updateSelectedCategoryState(toastId, newClipId, true) } else { list.onEach { it.isSelected = false } binding.btnClipChangeSelectNext.state = LinkMindButtonState.DISABLE + viewModel.updateSelectedCategoryState(toastId, newClipId, false) } - - initNextButtonClickListener(toastId, newClipId) } - private fun initNextButtonClickListener(toastId: Long, newClipId: Long) { + private fun initNextButtonClickListener() { binding.btnClipChangeSelectNext.btnClick { - viewModel.patchLinkCategory(toastId = toastId, categoryId = newClipId) + collectSelectedCategoryState() findNavController().popBackStack() } } + private fun collectSelectedCategoryState() { + viewModel.selectedCategory.flowWithLifecycle(viewLifeCycle).onEach { state -> + when (state) { + is UiState.Success -> { + viewModel.patchLinkCategory(toastId = state.data.first, categoryId = state.data.second) + } + + else -> {} + } + }.launchIn(viewLifeCycleScope) + } + private fun initCloseButtonClickListener() { binding.ivClipChangeClose.onThrottleClick { findNavController().popBackStack() diff --git a/feature/clip/src/main/java/org/sopt/clip/cliplink/ClipLinkViewModel.kt b/feature/clip/src/main/java/org/sopt/clip/cliplink/ClipLinkViewModel.kt index 9d90c454..a792f120 100644 --- a/feature/clip/src/main/java/org/sopt/clip/cliplink/ClipLinkViewModel.kt +++ b/feature/clip/src/main/java/org/sopt/clip/cliplink/ClipLinkViewModel.kt @@ -42,6 +42,9 @@ class ClipLinkViewModel @Inject constructor( private val _categoryState = MutableStateFlow>>(UiState.Empty) val categoryState: StateFlow>> = _categoryState.asStateFlow() + private val _selectedCategory = MutableStateFlow>>(UiState.Empty) + val selectedCategory: StateFlow>> = _selectedCategory.asStateFlow() + private val _patchLinkCategory = MutableStateFlow>(UiState.Empty) val patchLinkCategory: StateFlow> = _patchLinkCategory.asStateFlow() @@ -99,6 +102,13 @@ class ClipLinkViewModel @Inject constructor( } } + fun updateSelectedCategoryState(toastId: Long, newClipId: Long, isSelected: Boolean) = viewModelScope.launch { + when (isSelected) { + true -> _selectedCategory.emit(UiState.Success(Pair(toastId, newClipId))) + false -> _selectedCategory.emit(UiState.Empty) + } + } + fun initState() { _linkState.value = UiState.Empty _patchLinkCategory.value = UiState.Empty diff --git a/feature/clip/src/main/java/org/sopt/clip/webview/WebViewFragment.kt b/feature/clip/src/main/java/org/sopt/clip/webview/WebViewFragment.kt index 4b01e567..e7b183a3 100644 --- a/feature/clip/src/main/java/org/sopt/clip/webview/WebViewFragment.kt +++ b/feature/clip/src/main/java/org/sopt/clip/webview/WebViewFragment.kt @@ -20,7 +20,6 @@ import dagger.hilt.android.AndroidEntryPoint import designsystem.components.toast.linkMindSnackBar import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import org.sopt.clip.R import org.sopt.clip.databinding.FragmentWebviewBinding import org.sopt.ui.base.BindingFragment import org.sopt.ui.context.hideKeyboard @@ -71,7 +70,7 @@ class WebViewFragment : BindingFragment({ FragmentWebvie } false -> { - binding.ivRead.setImageResource(R.drawable.ic_read_before_24) + binding.ivRead.setImageResource(org.sopt.mainfeature.R.drawable.ic_read_before_24) if (isPatched) requireActivity().linkMindSnackBar(binding.clBottomBar, "열람 취소") } } @@ -83,6 +82,7 @@ class WebViewFragment : BindingFragment({ FragmentWebvie // initReadBtnClickLister() initNavigationBtnClickListener() initBrowserBtnClickListener() + initShareBtnClickListener() initEditorActionListener() } @@ -196,6 +196,17 @@ class WebViewFragment : BindingFragment({ FragmentWebvie } } + private fun initShareBtnClickListener() { + binding.ivShared.onThrottleClick { + val toasterShareIntent = Intent().apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, args.site) + type = "text/plain" + } + startActivity(Intent.createChooser(toasterShareIntent, null)) + } + } + private fun initBrowserBtnClickListener() { binding.ivInternet.onThrottleClick { val url = binding.wbClip.url diff --git a/feature/clip/src/main/res/drawable/ic_read_before_24.xml b/feature/clip/src/main/res/drawable/ic_read_before_24.xml deleted file mode 100644 index 15cc7f2e..00000000 --- a/feature/clip/src/main/res/drawable/ic_read_before_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/feature/clip/src/main/res/drawable/ic_share_24.xml b/feature/clip/src/main/res/drawable/ic_share_24.xml new file mode 100644 index 00000000..fafa2bd0 --- /dev/null +++ b/feature/clip/src/main/res/drawable/ic_share_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/feature/clip/src/main/res/layout/fragment_webview.xml b/feature/clip/src/main/res/layout/fragment_webview.xml index b20fa072..e73c3b0e 100644 --- a/feature/clip/src/main/res/layout/fragment_webview.xml +++ b/feature/clip/src/main/res/layout/fragment_webview.xml @@ -108,11 +108,22 @@ android:layout_height="wrap_content" android:padding="8dp" android:src="@drawable/ic_read_before_24" - app:layout_constraintEnd_toStartOf="@+id/iv_internet" + app:layout_constraintEnd_toStartOf="@+id/iv_shared" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/iv_next" app:layout_constraintTop_toTopOf="parent" /> + + ({ FragmentHomeBinding. navigateToSetting() navigateToSearch() navigateToAllClip() + viewModel.checkMarketUpdateState() } private fun initView() { @@ -89,7 +90,6 @@ class HomeFragment : BindingFragment({ FragmentHomeBinding. getRecentSavedClip() getWeekBestLink() getPopupListInfo() - checkMarketUpdateState() } } diff --git a/feature/home/src/main/res/layout/fragment_home.xml b/feature/home/src/main/res/layout/fragment_home.xml index 3958f0ef..859fd0d7 100644 --- a/feature/home/src/main/res/layout/fragment_home.xml +++ b/feature/home/src/main/res/layout/fragment_home.xml @@ -194,8 +194,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_black_svg" - android:paddingBottom="7dp" + android:paddingStart="40dp" android:paddingEnd="26dp" + android:paddingVertical="7dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="@id/tv_home_user_clip_name"/>