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"/>