Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#153 shop screen #158

Merged
merged 75 commits into from
Jan 30, 2024
Merged
Changes from 13 commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
37f212e
#147 add user list api & follower api
skdud0629 Jan 24, 2024
a30f7e3
Merge remote-tracking branch 'origin/develop' into develop
skdud0629 Jan 24, 2024
468563a
Merge branch 'develop' into feature/#147-follower
skdud0629 Jan 24, 2024
29d1134
#147 modify type error
skdud0629 Jan 25, 2024
6e0b08e
#147 modify type error
skdud0629 Jan 25, 2024
67ec268
#147 add follower fragment
skdud0629 Jan 25, 2024
2b0edb0
#147 modify frame layout to fragment container
skdud0629 Jan 25, 2024
64cb0a2
#147 add follower item
skdud0629 Jan 25, 2024
0ceb4bd
#147 add follower adapter
skdud0629 Jan 25, 2024
a5f6d8d
#147 add get follower function at viewmodel
skdud0629 Jan 25, 2024
896d127
#147 add follower fragment initialize
skdud0629 Jan 25, 2024
b473602
#147 add fragment to activity & call get follower
skdud0629 Jan 25, 2024
302d8ae
#147 add follower item image
skdud0629 Jan 25, 2024
f3ccb51
#147 add follow request api
skdud0629 Jan 25, 2024
ded8f03
#147 add follow accept, cancle, reject api
skdud0629 Jan 25, 2024
2c6915e
#147 refactor data class name
skdud0629 Jan 25, 2024
c2ccefa
#147 modify follow api
skdud0629 Jan 26, 2024
c6e66bd
#147 refactor item name
skdud0629 Jan 26, 2024
c346b26
#147 add follow request check api
skdud0629 Jan 26, 2024
d709a42
#147 modify follow request check api
skdud0629 Jan 26, 2024
765ca87
#147 modify follow request check api
skdud0629 Jan 26, 2024
ce946b1
#147 add request recyclerview
skdud0629 Jan 26, 2024
a1e2312
#147 modify follow request api
skdud0629 Jan 27, 2024
58a44d7
#147 modify wrong parameter
skdud0629 Jan 27, 2024
e7c6795
#147 refactor item name
skdud0629 Jan 27, 2024
9b2c7cc
#147 modify user search api
skdud0629 Jan 27, 2024
9abbbc4
#147 add enum, user recycler view
skdud0629 Jan 28, 2024
1dcc410
#147 modify follower ui
skdud0629 Jan 28, 2024
90ea8be
#147 modify data type
skdud0629 Jan 28, 2024
478f877
#147 add search user function
skdud0629 Jan 28, 2024
8269d7c
#147 add follow request api
skdud0629 Jan 28, 2024
9f69a64
#modify follower fragment, viewmodel
skdud0629 Jan 28, 2024
fc73b4e
#147 add follower's review api
ThirFir Jan 28, 2024
ce44594
#147 add total review count response class
ThirFir Jan 28, 2024
8ec0924
#147 remove unnecessary response data
ThirFir Jan 28, 2024
6c2251f
#147 add follower review data source functions
ThirFir Jan 28, 2024
b1596ec
#147 add follower review repository functions
ThirFir Jan 28, 2024
5f51833
#147 add follower review usecase functions
ThirFir Jan 28, 2024
da1cd27
#147 add follower profile viewmodel
ThirFir Jan 28, 2024
51b038b
#147 add follower click listener
ThirFir Jan 28, 2024
3a70203
#147 add follower click listener
ThirFir Jan 28, 2024
f00261b
#147 add review item layout
ThirFir Jan 28, 2024
419bbc4
#147 add follower profile activity
ThirFir Jan 28, 2024
01c2d98
#147 add profile image
ThirFir Jan 28, 2024
bf2d694
#147 add no review content
ThirFir Jan 28, 2024
1095db6
#147 refector function name
skdud0629 Jan 29, 2024
c269a75
#147 add request follow recycler view
skdud0629 Jan 29, 2024
1f4042f
Merge remote-tracking branch 'origin/feature/#147-follower' into feat…
ThirFir Jan 29, 2024
918e90e
#147 remove empty content indicator
ThirFir Jan 29, 2024
d82effe
#147 duplicate code to function
ThirFir Jan 29, 2024
ef5512e
#147 duplicate code to function
ThirFir Jan 29, 2024
bbf58e0
#147 delete unnecessary fragment
ThirFir Jan 29, 2024
45555b5
#147 add profile image
skdud0629 Jan 29, 2024
80aefd5
Merge remote-tracking branch 'origin/feature/#147-follower' into feat…
skdud0629 Jan 29, 2024
33623f4
#147 refector class name
skdud0629 Jan 29, 2024
5d65784
#147 add send follow requst function
skdud0629 Jan 29, 2024
c8c1694
#147 refector class name, add recently active followers api
skdud0629 Jan 29, 2024
d5ca8ef
#147 add recently active followers xml
skdud0629 Jan 29, 2024
2e0d5ce
Merge remote-tracking branch 'origin/develop' into feature/temp
ThirFir Jan 29, 2024
36210d9
#147 add recently active adapter
skdud0629 Jan 29, 2024
ac533b7
#153 modify shop api(+response class) format
ThirFir Jan 29, 2024
a4e2efe
Merge remote-tracking branch 'origin/develop' into feature/#153-shop-…
ThirFir Jan 29, 2024
5ba85a0
#147 modify recently active function
skdud0629 Jan 29, 2024
93532fd
#153 add review follower profile image
ThirFir Jan 29, 2024
73c5965
#153 add total all followers review count
ThirFir Jan 29, 2024
24e4691
#147 modify recently active followers
skdud0629 Jan 29, 2024
0d72a79
#153 add shop rates
ThirFir Jan 29, 2024
2b5a52c
#153 modify period format
ThirFir Jan 30, 2024
526543d
#147 add string contents
skdud0629 Jan 30, 2024
401c288
#147 modify follower activity xml
skdud0629 Jan 30, 2024
da65a64
#147 modify follower cursor
skdud0629 Jan 30, 2024
941a784
Merge remote-tracking branch 'origin/feature/#147-follower' into feat…
ThirFir Jan 30, 2024
af540ab
#147 refector followers class name
skdud0629 Jan 30, 2024
cd03a93
Merge remote-tracking branch 'origin/feature/#147-follower' into feat…
ThirFir Jan 30, 2024
1fb5756
#153 ktlint check
ThirFir Jan 30, 2024
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
@@ -1,22 +1,11 @@
package com.jjbaksa.jjbaksa.ui.follower

import com.jjbaksa.jjbaksa.R
import android.Manifest
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.core.content.ContentProviderCompat
import com.jjbaksa.domain.enums.InquiryCursor
import com.jjbaksa.domain.enums.UserCursor
import com.jjbaksa.jjbaksa.base.BaseActivity
import com.jjbaksa.jjbaksa.databinding.ActivityFollowerBinding
import com.jjbaksa.jjbaksa.ui.follower.viewmodel.FollowerViewModel
import com.jjbaksa.jjbaksa.ui.mainpage.home.NaviHomeFragment
import com.jjbaksa.jjbaksa.ui.mainpage.home.viewmodel.HomeViewModel
import com.jjbaksa.jjbaksa.ui.mainpage.mypage.NaviMyPageFragment
import com.jjbaksa.jjbaksa.ui.mainpage.write.NaviWriteFragment
import com.jjbaksa.jjbaksa.util.FusedLocationUtil
import com.jjbaksa.jjbaksa.util.KeyboardProvider
import com.jjbaksa.jjbaksa.util.checkPermissionsAndRequest
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
@@ -37,20 +26,20 @@ class FollowerActivity : BaseActivity<ActivityFollowerBinding>() {

override fun initEvent() {
binding.jjAppBar.setOnClickListener { finish() }

binding.ivSearch.setOnClickListener {

binding.etSearch.text?.let {
if (it.isEmpty()) {
KeyboardProvider(this).hideKeyboard(binding.etSearch)
showSnackBar(getString(R.string.main_page_search_edit_text_hint))
viewModel.cursor.value = UserCursor.FOLLOWER
} else {
viewModel.getUserSearch(it.toString(), 20, null )
viewModel.cursor.value = UserCursor.ALL
}
else {
viewModel.getFollower(null, 10)
}

}
}
}

companion object {

}
}
193 changes: 159 additions & 34 deletions app/src/main/java/com/jjbaksa/jjbaksa/ui/follower/FollowerFragment.kt
Original file line number Diff line number Diff line change
@@ -1,24 +1,15 @@
package com.jjbaksa.jjbaksa.ui.follower

import android.content.Intent
import android.os.Bundle
import android.os.Parcel
import android.os.Parcelable
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.jjbaksa.domain.enums.InquiryCursor
import com.jjbaksa.domain.model.follower.FollowRequestCheck
import com.jjbaksa.domain.enums.UserCursor
import com.jjbaksa.jjbaksa.R
import com.jjbaksa.jjbaksa.base.BaseFragment
import com.jjbaksa.jjbaksa.databinding.FragmentFollowerBinding
import com.jjbaksa.jjbaksa.ui.follower.adapter.FollowRequestCheckAdapter
import com.jjbaksa.jjbaksa.ui.follower.adapter.FollowRequestAdapter
import com.jjbaksa.jjbaksa.ui.follower.adapter.FollowerAdapter
import com.jjbaksa.jjbaksa.ui.follower.viewmodel.FollowerViewModel
import dagger.hilt.android.AndroidEntryPoint
@@ -27,19 +18,27 @@ import dagger.hilt.android.AndroidEntryPoint
class FollowerFragment() : BaseFragment<FragmentFollowerBinding>() {

private lateinit var followerAdapter: FollowerAdapter
private lateinit var followRequestCheckAdapter: FollowRequestCheckAdapter
private lateinit var followRequestAdapter: FollowRequestAdapter
private lateinit var userAdapter: FollowerAdapter
private lateinit var sendRequestAdapter: FollowRequestAdapter
private lateinit var linearLayoutManager: LinearLayoutManager
private lateinit var requestLinearLayoutManager: LinearLayoutManager
private lateinit var userLinearLayoutManager: LinearLayoutManager
private lateinit var followRequestLinearLayoutManager: LinearLayoutManager
private val viewModel: FollowerViewModel by activityViewModels()

override val layoutId: Int
get() = R.layout.fragment_follower

override fun initView() {
viewModel.getFollower(null, 10)
viewModel.followRequestCheck(null,10)

viewModel.getFollower(null, 20)
viewModel.followRequestReceived(null, 20)
viewModel.followRequestSend(null,20)

followerAdapter = FollowerAdapter({
if(viewModel.unfollowedUsers.contains(it.account)) {
if (viewModel.unfollowedUsers.contains(it.account)) {
viewModel.followRequest(it.account)
} else {
viewModel.followerDelete(it.account)
@@ -51,27 +50,67 @@ class FollowerFragment() : BaseFragment<FragmentFollowerBinding>() {
putExtra("fid", it.id)
putExtra("profileImage", it.profileImage.url)
putExtra("followerCount", it.userCountResponse.friendCount)

}
startActivity(intent)
}
followRequestCheckAdapter = FollowRequestCheckAdapter {
viewModel.followRequest(it.user.account)
followRequestAdapter = FollowRequestAdapter({
viewModel.followRequestAccept(it.id)
}) {
viewModel.followRequestReject(it.id)
}

sendRequestAdapter = FollowRequestAdapter({
viewModel.followRequestAccept(it.id)
} ) {
viewModel.followRequestAccept(it.id)
}

userAdapter = FollowerAdapter({
if (viewModel.unfollowedUsers.contains(it.account)) {

viewModel.followRequest(it.account)
} else {
viewModel.followerDelete(it.account)
}
}) {
val intent = Intent(requireContext(), FollowerProfileActivity::class.java).apply {
putExtra("nickname", it.nickname)
putExtra("account", it.account)
putExtra("fid", it.id)
putExtra("profileImage", it.profileImage.url)
putExtra("followerCount", it.userCountResponse.friendCount)
}
startActivity(intent)
}

linearLayoutManager = LinearLayoutManager(requireContext())
requestLinearLayoutManager = LinearLayoutManager(requireContext())
userLinearLayoutManager = LinearLayoutManager(requireContext())
followRequestLinearLayoutManager = LinearLayoutManager(requireContext())

binding.followerRecyclerView.apply {
layoutManager = linearLayoutManager
adapter = followerAdapter
}
binding.followRequestRecyclerView.apply {
layoutManager = requestLinearLayoutManager
adapter = followRequestCheckAdapter
binding.recivedFollowRequestRecyclerView.apply {
layoutManager = requestLinearLayoutManager
adapter = followRequestAdapter
}

binding.sendFollowRequestRecyclerView.apply {
layoutManager = followRequestLinearLayoutManager
adapter = sendRequestAdapter
}

binding.allUsersRecyclerView.apply {
layoutManager = userLinearLayoutManager
adapter = userAdapter

}
}

override fun initEvent() {

binding.followerRecyclerView.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
@@ -83,30 +122,69 @@ class FollowerFragment() : BaseFragment<FragmentFollowerBinding>() {
viewModel.followerHasMore.value = false
viewModel.getFollower(
null,
10
20
)
binding.loadingView.setLoading(true)

}
}
})
binding.followRequestRecyclerView.addOnScrollListener(

binding.recivedFollowRequestRecyclerView.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val itemCount = requestLinearLayoutManager.itemCount
val lastPosition =
requestLinearLayoutManager.findLastCompletelyVisibleItemPosition()

if (lastPosition != -1 && lastPosition >= (itemCount - 1) && viewModel.followRequestHasMore.value == true) {
viewModel.followRequestHasMore.value = false
viewModel.followRequestCheck(
if (lastPosition != -1 && lastPosition >= (itemCount - 1) && viewModel.receivedFollowRequestHasMore.value == true) {
viewModel.receivedFollowRequestHasMore.value = false
viewModel.followRequestReceived(
null,
20
)
binding.loadingView.setLoading(true)
}
}
})

binding.sendFollowRequestRecyclerView.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val itemCount = followRequestLinearLayoutManager.itemCount
val lastPosition =
followRequestLinearLayoutManager.findLastCompletelyVisibleItemPosition()

if (lastPosition != -1 && lastPosition >= (itemCount - 1) && viewModel.sendFollowRequestHasMore.value == true) {
viewModel.sendFollowRequestHasMore.value = false
viewModel.followRequestSend(
null,
10
20
)
binding.loadingView.setLoading(true)
}
}
})


binding.allUsersRecyclerView.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val itemCount = userLinearLayoutManager.itemCount
val lastPosition =
userLinearLayoutManager.findLastCompletelyVisibleItemPosition()

if (lastPosition != -1 && lastPosition>= (itemCount - 1)) {
viewModel.getUserSearch(
viewModel.searchKeyword.value!!,
20,
userAdapter.currentList.last().id
)
binding.loadingView.setLoading(true)
}

}
})
}

override fun subscribe() {
@@ -117,18 +195,65 @@ class FollowerFragment() : BaseFragment<FragmentFollowerBinding>() {
followerAdapter.submitList(emptyList())
} else {
binding.emptyContainer.isVisible = false
followerAdapter.submitList(it.content)
followerAdapter.submitList(followerAdapter.currentList+it.content)
}
}
viewModel.followRequestList.observe(viewLifecycleOwner) {


viewModel.receivedFollowRequestList.observe(viewLifecycleOwner) {
binding.loadingView.setLoading(false)
if (it.content.isEmpty() && followRequestAdapter.currentList.isEmpty()) {
binding.emptyContainer.isVisible = true
followRequestAdapter.submitList(emptyList())
} else {
binding.emptyContainer.isVisible = false
followRequestAdapter.submitList(followRequestAdapter.currentList+it.content)
}
}


viewModel.sendFollowRequestList.observe(viewLifecycleOwner) {
binding.loadingView.setLoading(false)
if (it.content.isEmpty() && followRequestCheckAdapter.currentList.isEmpty()) {
binding.emptyContainer.isVisible = true
followRequestCheckAdapter.submitList(emptyList())
} else {
binding.emptyContainer.isVisible = false
followRequestCheckAdapter.submitList(it.content)
if (it.content.isEmpty() && sendRequestAdapter.currentList.isEmpty()) {
binding.emptyContainer.isVisible = true
sendRequestAdapter.submitList(emptyList())
} else {
binding.emptyContainer.isVisible = false
sendRequestAdapter.submitList(sendRequestAdapter.currentList+it.content)
}
}

viewModel.userList.observe(viewLifecycleOwner) {
binding.loadingView.setLoading(false)
if (it.content.isEmpty() && userAdapter.currentList.isEmpty()) {
binding.emptyContainer.isVisible = true
userAdapter.submitList(emptyList())
} else {
binding.emptyContainer.isVisible = false

userAdapter.submitList(userAdapter.currentList + it.content)

}
}




viewModel.cursor.observe(viewLifecycleOwner) {
when (it) {
UserCursor.ALL -> {
binding.followerRecyclerView.isVisible = false
binding.recivedFollowRequestRecyclerView.isVisible = false
binding.sendFollowRequestRecyclerView.isVisible = false
binding.allUsersRecyclerView.isVisible = true
}
UserCursor.FOLLOWER -> {
binding.followerRecyclerView.isVisible = true
binding.recivedFollowRequestRecyclerView.isVisible = true
binding.sendFollowRequestRecyclerView.isVisible = true
binding.allUsersRecyclerView.isVisible = false
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -11,21 +11,28 @@ import androidx.recyclerview.widget.RecyclerView
import com.jjbaksa.domain.model.follower.FollowContent
import com.jjbaksa.jjbaksa.databinding.ItemFollowBinding

class FollowRequestCheckAdapter(
private val onAcceptClicked: (FollowContent) -> Unit
) : ListAdapter<FollowContent, FollowRequestCheckAdapter.ViewHolder>(diffUtil) {
class FollowRequestAdapter(
private val onAcceptClicked: (FollowContent) -> Unit,
private val onDeleteClicked: (FollowContent) -> Unit,
) : ListAdapter<FollowContent, FollowRequestAdapter.ViewHolder>(diffUtil) {

inner class ViewHolder(private val binding: ItemFollowBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: FollowContent) {
binding.followerNameTextView.text = item.follower?.nickname
binding.followerAccountTextView.text = item.follower?.account
binding.followNameTextView.text = item.user?.nickname
binding.followAccountTextView.text = "@" +item.user?.account

binding.followButton.isVisible = false
binding.acceptButton.isVisible = true
binding.deleteButton.isVisible = true


binding.acceptButton.setOnClickListener {
onAcceptClicked(item)
}
binding.deleteButton.setOnClickListener {
onDeleteClicked(item)
}
}
}

@@ -50,7 +57,10 @@ class FollowRequestCheckAdapter(
return oldItem.id == newItem.id
}

override fun areContentsTheSame(oldItem: FollowContent, newItem: FollowContent): Boolean {
override fun areContentsTheSame(
oldItem: FollowContent,
newItem: FollowContent
): Boolean {
return oldItem == newItem
}
}
Loading