Skip to content

Commit f9dc69b

Browse files
committed
[FEAT] #19 - 서버 통신 완
1 parent c7d96fd commit f9dc69b

31 files changed

+505
-100
lines changed

Diff for: .idea/misc.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: app/src/main/AndroidManifest.xml

+11-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
xmlns:tools="http://schemas.android.com/tools"
44
package="org.sopt.sopkathon5.andorid">
55

6+
<uses-permission android:name="android.permission.INTERNET" />
7+
68
<application
79
android:allowBackup="true"
810
android:dataExtractionRules="@xml/data_extraction_rules"
@@ -12,20 +14,24 @@
1214
android:roundIcon="@mipmap/ic_launcher_round"
1315
android:supportsRtl="true"
1416
android:theme="@style/Theme.AndoridClient"
17+
android:usesCleartextTraffic="true"
1518
tools:targetApi="31">
1619
<activity
17-
android:name=".ui.write.WriteActivity"
18-
android:windowSoftInputMode="adjustPan"
19-
android:exported="false" />
20-
<activity
21-
android:name=".ui.MainActivity"
20+
android:name=".ui.SplashActivity"
2221
android:exported="true">
2322
<intent-filter>
2423
<action android:name="android.intent.action.MAIN" />
2524

2625
<category android:name="android.intent.category.LAUNCHER" />
2726
</intent-filter>
2827
</activity>
28+
<activity
29+
android:name=".ui.write.WriteActivity"
30+
android:exported="false"
31+
android:windowSoftInputMode="adjustPan" />
32+
<activity
33+
android:name=".ui.MainActivity"
34+
android:exported="true"/>
2935
</application>
3036

3137
</manifest>

Diff for: app/src/main/java/org/sopt/sopkathon5/andorid/data/model/request/RequestMissionCheck.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ data class RequestMissionCheck(
55
val userId: Int,
66
val dailyId: String,
77
val completeMissions: List<String>
8-
)
8+
)

Diff for: app/src/main/java/org/sopt/sopkathon5/andorid/data/model/response/ResponseDaily.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ data class ResponseDaily(
1111
val dailyName : String,
1212
val userId : Int,
1313
val userName : String,
14-
val missions : List<String>
14+
val missions : List<String>,
15+
val __v : Int
1516
)
1617
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.sopt.sopkathon5.andorid.data.model.response
2+
3+
data class ResponseDailyStore(
4+
val status: Int,
5+
val success: Boolean,
6+
val message: String,
7+
val data: List<Data>
8+
) {
9+
data class Data(
10+
val _id: String,
11+
val userId: Int,
12+
val userName: String,
13+
val dailyId: DailyId,
14+
val completeMissions: List<String>,
15+
val __v: Int
16+
) {
17+
data class DailyId(
18+
val _id: String,
19+
val dailyName: String,
20+
val userId: Int,
21+
val userName: String,
22+
val missions: List<String>,
23+
val __v: Int
24+
)
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package org.sopt.sopkathon5.andorid.data.model.response
22

3-
data class ResponseStoreDaily(
3+
data class ResponseMyDaily(
44
val status: Int,
55
val success: Boolean,
66
val message: String,
77
val data: List<Data>
88
) {
99
data class Data(
1010
val _id: String,
11+
val dailyName: String,
1112
val userId: Int,
1213
val userName: String,
13-
val dailyId: String,
14-
val completeMissions: List<List<String>>,
14+
val missions: List<String>,
1515
val __v: Int
1616
)
1717
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.sopt.sopkathon5.andorid.data.model.response
2+
3+
data class ResponsePostMissionCheck(
4+
val status: Int,
5+
val success: Boolean,
6+
val message: String
7+
)
8+
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
package org.sopt.sopkathon5.andorid.data.service
22

3-
import org.sopt.sopkathon5.andorid.data.model.response.ResponseStoreDaily
3+
import org.sopt.sopkathon5.andorid.data.model.response.ResponseDailyStore
4+
import org.sopt.sopkathon5.andorid.data.model.response.ResponseMyDaily
5+
import org.sopt.sopkathon5.andorid.data.model.response.ResponsePostMissionCheck
46
import retrofit2.Call
57
import retrofit2.http.GET
8+
import retrofit2.http.POST
69

710
interface MyPageService {
811
@GET("daily/1")
9-
fun getStoredDaily(): Call<ResponseStoreDaily>
12+
suspend fun getStoredDaily(): ResponseDailyStore
13+
14+
@POST("daily/check")
15+
suspend fun postMissionCheck(): ResponsePostMissionCheck
16+
17+
@GET("daily/my/2")
18+
suspend fun getMyDaily(): ResponseMyDaily
1019
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.sopt.sopkathon5.andorid.ui
2+
3+
import android.content.Intent
4+
import android.os.Bundle
5+
import android.os.Handler
6+
import android.os.Looper
7+
import androidx.appcompat.app.AppCompatActivity
8+
import org.sopt.sopkathon5.andorid.R
9+
10+
class SplashActivity : AppCompatActivity() {
11+
override fun onCreate(savedInstanceState: Bundle?) {
12+
super.onCreate(savedInstanceState)
13+
Handler(Looper.getMainLooper()).postDelayed({
14+
startActivity(Intent(this, MainActivity::class.java))
15+
finish()
16+
}, SPLASH_TIME)
17+
setContentView(R.layout.activity_splash)
18+
}
19+
20+
companion object {
21+
const val SPLASH_TIME = 2000L
22+
}
23+
}

Diff for: app/src/main/java/org/sopt/sopkathon5/andorid/ui/home/DailyAdapter.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.sopt.sopkathon5.andorid.data.model.DailyData
99
import org.sopt.sopkathon5.andorid.databinding.ItemDailyListBinding
1010

1111
class DailyAdapter(
12+
private val isBookmarkNotVisible: Boolean? = null,
1213
private val itemClick: (() -> (Unit))? = null,
1314
private val logoutClickListener: (() -> Unit)? = null
1415
) : RecyclerView.Adapter<DailyAdapter.DailyViewHolder>() {
@@ -19,7 +20,7 @@ class DailyAdapter(
1920
private val itemClick: (() -> Unit)?
2021
) :
2122
RecyclerView.ViewHolder(binding.root) {
22-
fun onBind(data: DailyData, logoutClickListener: (() -> Unit)?) {
23+
fun onBind(data: DailyData, logoutClickListener: (() -> Unit)?, isBookmarkNotVisible: Boolean?) {
2324
binding.data = data
2425
binding.tvLogout.setOnClickListener {
2526
logoutClickListener?.invoke()
@@ -31,6 +32,10 @@ class DailyAdapter(
3132
}
3233
binding.rvTodo.adapter = todoAdapter
3334

35+
isBookmarkNotVisible?.let {
36+
binding.isBookmarkNotVisible = it
37+
}
38+
3439
binding.btnPoint.setOnClickListener { //호출시 itemclick 람다함수실행함
3540
itemClick?.invoke()
3641
}
@@ -48,7 +53,7 @@ class DailyAdapter(
4853
}
4954

5055
override fun onBindViewHolder(holder: DailyViewHolder, position: Int) {
51-
holder.onBind(itemList[position], logoutClickListener)
56+
holder.onBind(itemList[position], logoutClickListener, isBookmarkNotVisible)
5257
}
5358

5459
override fun getItemCount(): Int = itemList.size

Diff for: app/src/main/java/org/sopt/sopkathon5/andorid/ui/home/HomeFragment.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.sopt.sopkathon5.andorid.ui.home
22

33
import android.os.Bundle
4+
import android.util.Log
45
import android.view.View
56
import androidx.lifecycle.lifecycleScope
67
import kotlinx.coroutines.launch
@@ -15,7 +16,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
1516
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1617
super.onViewCreated(view, savedInstanceState)
1718
initAdapter()
18-
1919
}
2020

2121
private fun initAdapter() {
@@ -26,17 +26,15 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
2626
.onSuccess {
2727
detailAdapter.itemList.clear()
2828
detailAdapter.itemList.addAll(
29-
it.data.map {
30-
DailyData(it.dailyName, it.missions)
29+
it.data.map { data ->
30+
DailyData(data.dailyName, data.missions)
3131
}
3232
)
33+
detailAdapter.notifyDataSetChanged()
3334
}
3435
.onFailure {
3536

3637
}
3738
}
38-
39-
4039
}
41-
4240
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,41 @@
11
package org.sopt.sopkathon5.andorid.ui.mypage
22

33
import android.os.Bundle
4+
import android.util.Log
45
import android.view.View
6+
import androidx.lifecycle.lifecycleScope
7+
import kotlinx.coroutines.launch
58
import org.sopt.sopkathon5.andorid.R
9+
import org.sopt.sopkathon5.andorid.data.ServiceCreator
10+
import org.sopt.sopkathon5.andorid.data.model.DailyData
611
import org.sopt.sopkathon5.andorid.databinding.FragmentMyDailyBinding
712
import org.sopt.sopkathon5.andorid.ui.home.DailyAdapter
8-
import org.sopt.sopkathon5.andorid.ui.mypage.adapter.MyPageTodoCheckAdapter
913
import org.sopt.sopkathon5.andorid.util.base.BaseFragment
1014

1115
class MyDailyFragment : BaseFragment<FragmentMyDailyBinding>(R.layout.fragment_my_daily) {
16+
private lateinit var detailAdapter: DailyAdapter
1217
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1318
super.onViewCreated(view, savedInstanceState)
1419
initAdapter()
1520
}
1621

1722
private fun initAdapter() {
18-
binding.rvMyDaily.adapter = DailyAdapter().apply {
19-
23+
detailAdapter = DailyAdapter(isBookmarkNotVisible = true)
24+
binding.rvMyDaily.adapter = detailAdapter
25+
lifecycleScope.launch {
26+
runCatching { ServiceCreator.myPageService.getMyDaily() }
27+
.onSuccess {
28+
detailAdapter.itemList.clear()
29+
detailAdapter.itemList.addAll(
30+
it.data.map { data ->
31+
DailyData(data.dailyName, data.missions)
32+
}
33+
)
34+
detailAdapter.notifyDataSetChanged()
35+
}
36+
.onFailure {
37+
Log.d("실패", it.message.toString())
38+
}
2039
}
2140
}
2241
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,17 @@
11
package org.sopt.sopkathon5.andorid.ui.mypage
22

3-
import android.app.Dialog
43
import android.os.Bundle
5-
import android.view.LayoutInflater
64
import android.view.View
7-
import androidx.databinding.DataBindingUtil
85
import org.sopt.sopkathon5.andorid.R
96
import org.sopt.sopkathon5.andorid.databinding.FragmentMyPageBinding
10-
import org.sopt.sopkathon5.andorid.databinding.LayoutCompleteDialogBinding
117
import org.sopt.sopkathon5.andorid.ui.mypage.adapter.MyPageViewPagerAdapter
12-
import org.sopt.sopkathon5.andorid.util.DialogUtil
138
import org.sopt.sopkathon5.andorid.util.base.BaseFragment
149

1510
class MyPageFragment : BaseFragment<FragmentMyPageBinding>(R.layout.fragment_my_page) {
16-
private lateinit var completeDialog: Dialog
17-
private lateinit var layoutCompleteDialogBinding: LayoutCompleteDialogBinding
1811

1912
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2013
super.onViewCreated(view, savedInstanceState)
2114
binding.tvMyDaily.isSelected = true
22-
initDialogBinding()
23-
initDialog()
2415
initViewPager()
2516
}
2617

@@ -48,25 +39,4 @@ class MyPageFragment : BaseFragment<FragmentMyPageBinding>(R.layout.fragment_my_
4839
}
4940
}
5041
}
51-
52-
private fun initDialogBinding() {
53-
layoutCompleteDialogBinding = DataBindingUtil.inflate(
54-
LayoutInflater.from(requireContext()),
55-
R.layout.layout_complete_dialog,
56-
null,
57-
false
58-
)
59-
}
60-
61-
private fun initDialog() {
62-
requireContext().apply {
63-
completeDialog = DialogUtil.makeDialog(this)
64-
}
65-
66-
layoutCompleteDialogBinding.btnComplete.setOnClickListener {
67-
completeDialog.dismiss()
68-
}
69-
70-
DialogUtil.setDialog(completeDialog, layoutCompleteDialogBinding.root)
71-
}
7242
}

0 commit comments

Comments
 (0)