diff --git a/app/src/main/java/com/umc/ttoklip/data/api/OtherApi.kt b/app/src/main/java/com/umc/ttoklip/data/api/OtherApi.kt index 219905e2..5c8aec10 100644 --- a/app/src/main/java/com/umc/ttoklip/data/api/OtherApi.kt +++ b/app/src/main/java/com/umc/ttoklip/data/api/OtherApi.kt @@ -1,10 +1,14 @@ package com.umc.ttoklip.data.api +import com.umc.ttoklip.data.model.CommonResponse import com.umc.ttoklip.data.model.ResponseBody import com.umc.ttoklip.data.model.mypage.MyHoneyTipsResponse +import com.umc.ttoklip.data.model.news.ReportRequest import com.umc.ttoklip.data.model.stranger.OtherUserInfoResponse import retrofit2.Response +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query @@ -21,4 +25,9 @@ interface OtherApi { @Query("page") page : Int, ): Response> + @POST("/api/v1/member/report") + suspend fun postReportUserApi( + @Query("nickName") nickname: String, + @Body request : ReportRequest + ): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepository.kt b/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepository.kt index 9fc61a92..fc981194 100644 --- a/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepository.kt +++ b/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepository.kt @@ -1,6 +1,8 @@ package com.umc.ttoklip.data.repository.stranger +import com.umc.ttoklip.data.model.CommonResponse import com.umc.ttoklip.data.model.mypage.MyHoneyTipsResponse +import com.umc.ttoklip.data.model.news.ReportRequest import com.umc.ttoklip.data.model.signup.SignupResponse import com.umc.ttoklip.data.model.stranger.OtherUserInfoResponse import com.umc.ttoklip.data.model.stranger.StrangerResponse @@ -10,4 +12,6 @@ interface StrangerRepository { suspend fun getStranger(nick:String): NetworkResult suspend fun getStrangerTip(page : Int, id : Int) : NetworkResult + + suspend fun reportUser(nick: String, request: ReportRequest): NetworkResult } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepositoryImpl.kt b/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepositoryImpl.kt index f495838d..21c73245 100644 --- a/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepositoryImpl.kt +++ b/app/src/main/java/com/umc/ttoklip/data/repository/stranger/StrangerRepositoryImpl.kt @@ -1,8 +1,10 @@ package com.umc.ttoklip.data.repository.stranger import com.umc.ttoklip.data.api.OtherApi +import com.umc.ttoklip.data.model.CommonResponse import com.umc.ttoklip.data.model.ResponseBody import com.umc.ttoklip.data.model.mypage.MyHoneyTipsResponse +import com.umc.ttoklip.data.model.news.ReportRequest import com.umc.ttoklip.data.model.stranger.OtherUserInfoResponse import com.umc.ttoklip.module.NetworkResult import com.umc.ttoklip.module.handleApi @@ -21,4 +23,7 @@ class StrangerRepositoryImpl @Inject constructor( } + override suspend fun reportUser(nick: String, request: ReportRequest): NetworkResult { + return handleApi({api.postReportUserApi(nick, request)}) {response: ResponseBody -> response.result} + } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/ttoklip/di/NetworkModule.kt b/app/src/main/java/com/umc/ttoklip/di/NetworkModule.kt index 728d38ce..fdc5fb6f 100644 --- a/app/src/main/java/com/umc/ttoklip/di/NetworkModule.kt +++ b/app/src/main/java/com/umc/ttoklip/di/NetworkModule.kt @@ -75,9 +75,9 @@ object NetworkModule { return OkHttpClient.Builder().apply { addInterceptor (interceptor) - connectTimeout(5, TimeUnit.SECONDS) - readTimeout(5, TimeUnit.SECONDS) - writeTimeout(5, TimeUnit.SECONDS) + connectTimeout(25, TimeUnit.SECONDS) + readTimeout(25, TimeUnit.SECONDS) + writeTimeout(25, TimeUnit.SECONDS) }.build() } diff --git a/app/src/main/java/com/umc/ttoklip/presentation/mypage/MyPageFragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/mypage/MyPageFragment.kt index b35b3e46..5e24a797 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/mypage/MyPageFragment.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/mypage/MyPageFragment.kt @@ -55,20 +55,20 @@ class MyPageFragment : BaseFragment(R.layout.fragment_my_ startActivity(intent) } - binding.manageAccountFrame.setOnClickListener { //계정정보 화면 새로 만들 필요 있음 - val intent = Intent(requireContext(), AccountInfoActivity::class.java) - startActivity(intent) - } +// binding.manageAccountFrame.setOnClickListener { //계정정보 화면 새로 만들 필요 있음 +// val intent = Intent(requireContext(), AccountInfoActivity::class.java) +// startActivity(intent) +// } binding.announcementFrame.setOnClickListener { //공지사항 두 개만 넣어달라, api 연결은 해놨음 val intent = Intent(requireContext(), SetAnnouncementActivity::class.java) startActivity(intent) } - binding.usageManageFrame.setOnClickListener { //api 연결은 해놨음 - val intent = Intent(requireContext(), ManageUsageActivity::class.java) - startActivity(intent) - } +// binding.usageManageFrame.setOnClickListener { //api 연결은 해놨음 +// val intent = Intent(requireContext(), ManageUsageActivity::class.java) +// startActivity(intent) +// } binding.customerServiceCenterFrame.setOnClickListener { //고객센터-faq 불러오기 연동 필요, 1:1 문의 보내기 필요 val intent = Intent(requireContext(), CustomerServiceCenterActivity::class.java) diff --git a/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserActivity.kt index a34ff738..7d6f62d0 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserActivity.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserActivity.kt @@ -2,11 +2,20 @@ package com.umc.ttoklip.presentation.otheruser import android.content.Context import android.content.Intent +import android.widget.Toast import androidx.activity.viewModels +import androidx.core.view.isGone +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.umc.ttoklip.R +import com.umc.ttoklip.TtoklipApplication +import com.umc.ttoklip.data.model.honeytip.request.ReportRequest import com.umc.ttoklip.databinding.ActivityOtheruserProfileBinding import com.umc.ttoklip.presentation.base.BaseActivity +import com.umc.ttoklip.presentation.dialog.ReportDialogFragment import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.launch @AndroidEntryPoint class OtherUserActivity : @@ -16,18 +25,57 @@ class OtherUserActivity : override fun initView() { binding.vm = viewModel - viewModel.getStranger(intent.getStringExtra(OTHERUSER) ?: "") + (intent.getStringExtra(OTHERUSER) ?: "").let { + viewModel.getStranger(it) + if (it == TtoklipApplication.prefs.getString("nickname", "")) { + binding.reportBtn.isGone = true + } + } binding.otherprofileBackIb.setOnClickListener { finish() } binding.otherprofileHoneytipCl.setOnClickListener { - startActivity(OtherTipActivity.newIntent(this, viewModel.strangerInfo.value.userId, viewModel.strangerInfo.value.nickname)) + startActivity( + OtherTipActivity.newIntent( + this, + viewModel.strangerInfo.value.userId, + viewModel.strangerInfo.value.nickname + ) + ) + } + + + binding.reportBtn.setOnClickListener { + val reportDialog = ReportDialogFragment() + reportDialog.setDialogClickListener(object : ReportDialogFragment.DialogClickListener { + + override fun onClick(type: String, content: String) { + viewModel.postReportUser( + com.umc.ttoklip.data.model.news.ReportRequest( + content, + type + ) + ) + } + }) + reportDialog.show(supportFragmentManager, reportDialog.tag) } } override fun initObserver() { + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.event.collect { event -> + when(event){ + is OtherUserViewModel.OtherEvent.ToastMessage -> { + Toast.makeText(this@OtherUserActivity, event.message, Toast.LENGTH_SHORT).show() + } + } + } + } + } } companion object { diff --git a/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserViewModel.kt index 46b11146..5c8b276c 100644 --- a/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserViewModel.kt +++ b/app/src/main/java/com/umc/ttoklip/presentation/otheruser/OtherUserViewModel.kt @@ -3,6 +3,7 @@ package com.umc.ttoklip.presentation.otheruser import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.umc.ttoklip.data.model.news.ReportRequest import com.umc.ttoklip.data.model.stranger.OtherUserInfoResponse import com.umc.ttoklip.data.repository.stranger.StrangerRepository import com.umc.ttoklip.module.onException @@ -10,8 +11,11 @@ import com.umc.ttoklip.module.onFail import com.umc.ttoklip.module.onSuccess import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.launch import javax.inject.Inject @@ -24,7 +28,16 @@ class OtherUserViewModel @Inject constructor( val strangerInfo: StateFlow get() = _strangerInfo - fun getStranger(nick : String){ + val event : SharedFlow + get() = _event.asSharedFlow() + + private val _event = MutableSharedFlow() + + sealed class OtherEvent { + data class ToastMessage(val message: String) : OtherEvent() + } + + fun getStranger(nick: String) { viewModelScope.launch(Dispatchers.IO) { try { strangerRepository.getStranger(nick) @@ -41,4 +54,21 @@ class OtherUserViewModel @Inject constructor( } } } + + fun postReportUser(request: ReportRequest) { + viewModelScope.launch(Dispatchers.IO) { + try { + strangerRepository.reportUser(strangerInfo.value.nickname, request).onSuccess { + _event.emit(OtherEvent.ToastMessage(it.message)) + }.onFail { + _event.emit((OtherEvent.ToastMessage("신고 사유를 알려주세요"))) + }.onException { + throw it + } + } catch (e: Exception) { + e.printStackTrace() + Log.d("예외", "$e") + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_otheruser_profile.xml b/app/src/main/res/layout/activity_otheruser_profile.xml index 74074743..1270f3b7 100644 --- a/app/src/main/res/layout/activity_otheruser_profile.xml +++ b/app/src/main/res/layout/activity_otheruser_profile.xml @@ -123,6 +123,7 @@ android:layout_marginTop="10dp" android:background="@drawable/rectangle_corner_10" android:backgroundTint="@color/yellow" + android:visibility="invisible" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/otherprofile_address_tv"> @@ -152,11 +153,12 @@ + - - - + app:layout_constraintTop_toTopOf="parent" /> - + - + - + - + + + - - - - + + app:layout_constraintStart_toStartOf="@id/level_frame" + app:layout_constraintTop_toBottomOf="@id/level_frame" /> @@ -320,13 +311,13 @@ + app:layout_constraintStart_toStartOf="@id/otherprofile_history_nick_tv" + app:layout_constraintTop_toBottomOf="@id/otherprofile_history_nick_tv"> + app:layout_constraintStart_toStartOf="@id/otherprofile_honeytip_cl" + app:layout_constraintTop_toBottomOf="@id/otherprofile_honeytip_cl" /> + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/announcement_frame">