Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,16 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.navigation.fragment.findNavController
import coil.load
import coil.transform.CircleCropTransformation
import dagger.hilt.android.AndroidEntryPoint
import designsystem.components.dialog.LinkMindDialog
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.sopt.common.intentprovider.IntentProvider
import org.sopt.common.intentprovider.LOGIN
import org.sopt.datastore.datastore.SecurityDataStore
import org.sopt.model.user.MyPageData
import org.sopt.model.user.SettingPageData
import org.sopt.mypage.R
import org.sopt.mypage.databinding.FragmentSettingsBinding
Expand Down Expand Up @@ -122,6 +125,16 @@ class SettingsFragment : Fragment() {
}
}.launchIn(viewLifeCycleScope)

viewModel.getUserMyPage()
viewModel.myPageState.flowWithLifecycle(viewLifeCycle).onEach { state ->
when (state) {
is UiState.Success -> {
initMyPageData(state.data)
}
else -> {}
}
}.launchIn(viewLifeCycleScope)

onClickToggle()
onClickLogoutBtn()
onClickCloseBtn()
Expand Down Expand Up @@ -201,6 +214,19 @@ class SettingsFragment : Fragment() {
}
}

private fun initMyPageData(data: MyPageData) {
val myPage = data
if (myPage != null) {
with(binding) {
tvUserName.text = myPage.nickname
tvMyTotalLinkNum.text = myPage.allReadToast.toString()
tvReadLinkThisWeekNum.text = myPage.thisWeekendRead.toString()
tvSaveLinkThisWeekNum.text = myPage.thisWeekendSaved.toString()
ivProfile.load(data.profile) { transformations(CircleCropTransformation()) }
}
}
}

companion object {
const val URL_1ON1 = "https://open.kakao.com/o/sfN9Fr4f"
const val URL_RULE = "https://www.notion.so/db429c114629431f8301a969ed028e37"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.sopt.auth.repository.AuthRepository
import org.sopt.model.user.MyPageData
import org.sopt.model.user.SettingPageData
import org.sopt.ui.view.UiState
import org.sopt.user.usecase.GetUserMyPageUseCase
import org.sopt.user.usecase.GetUserSettingUseCase
import org.sopt.user.usecase.PatchPushUseCase
import javax.inject.Inject
Expand All @@ -19,6 +21,7 @@ import javax.inject.Inject
class SettingsViewModel @Inject constructor(
private val getUserSettingUseCase: GetUserSettingUseCase,
private val patchPushUseCase: PatchPushUseCase,
private val getUserMyPageUseCase: GetUserMyPageUseCase,
private val authRepository: AuthRepository,
) : ViewModel() {
private val _logoutState = MutableStateFlow<UiState<Unit>>(UiState.Empty)
Expand All @@ -30,6 +33,16 @@ class SettingsViewModel @Inject constructor(
private val _settingState = MutableStateFlow<UiState<SettingPageData>>(UiState.Empty)
val settingState: StateFlow<UiState<SettingPageData>> = _settingState.asStateFlow()

private val _myPageState = MutableStateFlow<UiState<MyPageData>>(UiState.Empty)
val myPageState: StateFlow<UiState<MyPageData>> = _myPageState.asStateFlow()
fun getUserMyPage() = viewModelScope.launch {
getUserMyPageUseCase.invoke().onSuccess { data ->
_myPageState.emit(UiState.Success(data))
}.onFailure { error ->
_myPageState.emit(UiState.Failure(error.toString()))
}
}

val pushIsAllowed = MutableStateFlow(true)

fun getUserInfo() = viewModelScope.launch {
Expand Down
190 changes: 153 additions & 37 deletions feature/mypage/src/main/res/layout/fragment_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,77 +53,193 @@
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

<FrameLayout
android:id="@+id/fl_settings_alert_off"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_mypage_now_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_settings_title">

<TextView
android:id="@+id/tv_settings_alert_off"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="12dp"
android:background="@drawable/shape_neutrals050_fill_12_rect"
android:gravity="center"
android:padding="12dp"
android:text="@string/settings_alert_off"
android:textAppearance="@style/Typography.suit.bold_12"
android:textColor="@color/neutrals400" />
</FrameLayout>


<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_user_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/fl_settings_alert_off">
<ImageView
android:id="@+id/iv_profile"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="1dp"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/img_mypage_profile" />

<TextView
android:id="@+id/tv_user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="22dp"
android:layout_marginStart="12dp"
android:layout_marginBottom="2dp"
android:textAppearance="@style/Typography.suit.bold_18"
android:textColor="@color/neutrals900"
app:layout_constraintBaseline_toBaselineOf="@id/tv_user_name_nim"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="ํ™๊ธธ๋™" />
app:layout_constraintBottom_toTopOf="@id/tv_now_link"
app:layout_constraintStart_toEndOf="@id/iv_profile"
tools:text="@string/mypage_name_ex" />

<TextView
android:id="@+id/tv_user_name_nim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="22dp"
android:layout_marginBottom="22dp"
android:text="@string/user_nim"
android:layout_marginBottom="2dp"
android:text="@string/mypage_nim"
android:textAppearance="@style/Typography.suit.regular_18"
android:textColor="@color/neutrals900"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBaseline_toBaselineOf="@id/tv_user_name"
app:layout_constraintStart_toEndOf="@id/tv_user_name"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/tv_now_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="26dp"
android:text="@string/mypage_link_number_now"
android:textAppearance="@style/Typography.suit.regular_18"
android:textColor="@color/neutrals900"
app:layout_constraintStart_toEndOf="@id/iv_profile"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/tv_my_total_link_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="3dp"
android:text="@string/search_clip_amount_n"
android:textAppearance="@style/Typography.suit.bold_28"
android:textColor="@color/primary"
app:layout_constraintBaseline_toBaselineOf="@id/tv_my_total_link"
app:layout_constraintEnd_toStartOf="@id/tv_my_total_link" />

<TextView
android:id="@+id/tv_my_total_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mypage_number"
android:textAppearance="@style/Typography.suit.regular_18"
android:textColor="@color/neutrals900"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>


<View
android:id="@+id/v_settings_1"
android:id="@+id/bg_link_record"
android:layout_width="0dp"
android:layout_height="83dp"
android:layout_marginStart="20dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="24dp"
android:background="@drawable/shape_neutrals050_line_12_rect"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cl_mypage_now_link" />

<TextView
android:id="@+id/tv_read_link_this_week"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="14dp"
android:text="@string/mypage_this_week_read_link"
android:textAppearance="@style/Typography.suit.regular_14"
android:textColor="@color/neutrals400"
app:layout_constraintStart_toStartOf="@+id/bg_link_record"
app:layout_constraintTop_toTopOf="@+id/bg_link_record" />

<TextView
android:id="@+id/tv_read_link_this_week_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="14dp"
android:layout_marginBottom="14dp"
tools:text="@string/mypage_nn"
android:textAppearance="@style/Typography.suit.bold_24"
android:textColor="@color/neutrals900"
app:layout_constraintBottom_toBottomOf="@id/bg_link_record"
app:layout_constraintEnd_toStartOf="@id/v_mypage_line" />

<TextView
android:id="@+id/tv_save_link_this_week"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="14dp"
android:text="@string/mypage_this_week_save_link"
android:textAppearance="@style/Typography.suit.regular_14"
android:textColor="@color/neutrals400"
app:layout_constraintStart_toEndOf="@+id/v_mypage_line"
app:layout_constraintTop_toTopOf="@+id/bg_link_record" />

<TextView
android:id="@+id/tv_save_link_this_week_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="14dp"
android:layout_marginBottom="14dp"
tools:text="@string/mypage_nn"
android:textAppearance="@style/Typography.suit.bold_24"
android:textColor="@color/neutrals900"
app:layout_constraintBottom_toBottomOf="@id/bg_link_record"
app:layout_constraintEnd_toEndOf="@id/bg_link_record" />

<View
android:id="@+id/v_mypage_line"
android:layout_width="1dp"
android:layout_height="0dp"
android:background="@color/neutrals100"
app:layout_constraintBottom_toBottomOf="@+id/bg_link_record"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/bg_link_record" />

<View
android:id="@+id/v_settings_0"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_marginTop="24dp"
android:background="@color/neutrals050"
app:layout_constraintTop_toBottomOf="@id/cl_user_info" />
app:layout_constraintTop_toBottomOf="@id/v_mypage_line" />

<FrameLayout
android:id="@+id/fl_settings_alert_off"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_settings_0">

<TextView
android:id="@+id/tv_settings_alert_off"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="6dp"
android:background="@drawable/shape_neutrals050_fill_12_rect"
android:gravity="center"
android:padding="12dp"
android:text="@string/settings_alert_off"
android:textAppearance="@style/Typography.suit.bold_12"
android:textColor="@color/neutrals400" />
</FrameLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_settings_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/v_settings_1">
app:layout_constraintTop_toBottomOf="@id/fl_settings_alert_off">

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_setting_1"
Expand Down
Loading