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/search #110

Open
wants to merge 3 commits into
base: dev
Choose a base branch
from
Open
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
Binary file modified .gradle/8.4/checksums/checksums.lock
Binary file not shown.
Binary file modified .gradle/8.4/checksums/md5-checksums.bin
Binary file not shown.
Binary file modified .gradle/8.4/checksums/sha1-checksums.bin
Binary file not shown.
Binary file modified .gradle/8.4/executionHistory/executionHistory.bin
Binary file not shown.
Binary file modified .gradle/8.4/executionHistory/executionHistory.lock
Binary file not shown.
Binary file modified .gradle/8.4/fileHashes/fileHashes.bin
Binary file not shown.
Binary file modified .gradle/8.4/fileHashes/fileHashes.lock
Binary file not shown.
Binary file modified .gradle/8.4/fileHashes/resourceHashesCache.bin
Binary file not shown.
Binary file modified .gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary file not shown.
Binary file modified .gradle/buildOutputCleanup/outputFiles.bin
Binary file not shown.
Binary file modified .gradle/file-system.probe
Binary file not shown.
33 changes: 12 additions & 21 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,6 @@ class EvaluationProjectFragment : Fragment() {
}

private fun initView() {
setViewPager()

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
Expand Down Expand Up @@ -140,6 +138,8 @@ class EvaluationProjectFragment : Fragment() {
}

private fun firstPage() = with(binding) {
setViewPager()

tvEvalPrev.visibility = View.INVISIBLE
tvEvalNext.visibility = View.VISIBLE
tvEvalNext.setOnClickListener {
Expand All @@ -153,6 +153,8 @@ class EvaluationProjectFragment : Fragment() {
}

private fun middlePage() = with(binding) {
setViewPager()

tvEvalPrev.visibility = View.VISIBLE
tvEvalPrev.setOnClickListener {
prevPage(viewPager)
Expand All @@ -168,6 +170,8 @@ class EvaluationProjectFragment : Fragment() {
}

private fun lastPage() = with(binding) {
setViewPager()

tvEvalNext.visibility = View.INVISIBLE
tvEvalPrev.setOnClickListener {
prevPage(viewPager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,6 @@ class EvaluationStudyFragment : Fragment() {
}

private fun initView() {
setViewPager()

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
Expand Down Expand Up @@ -136,6 +134,8 @@ class EvaluationStudyFragment : Fragment() {
}

private fun firstPage() = with(binding) {
setViewPager()

tvEvalPrev.visibility = View.INVISIBLE
tvEvalNext.visibility = View.VISIBLE
tvEvalNext.setOnClickListener {
Expand All @@ -148,6 +148,8 @@ class EvaluationStudyFragment : Fragment() {
}

private fun middlePage() = with(binding) {
setViewPager()

tvEvalPrev.visibility = View.VISIBLE
tvEvalPrev.setOnClickListener {
prevPage(viewPager)
Expand All @@ -163,6 +165,8 @@ class EvaluationStudyFragment : Fragment() {
}

private fun lastPage() = with(binding) {
setViewPager()

binding.tvEvalNext.visibility = View.INVISIBLE
binding.tvEvalPrev.setOnClickListener {
prevPage(viewPager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,13 @@ class EvaluationViewModel @Inject constructor(
userRepository.getUserDetails(data?.uid!!).getOrNull().let { member ->
userRepository.updateUserInfo(
member!!.copy(
grade = (member.grade!! * member.evaluatedNumber + data.grade!! * 2) / ++data.evalCount,
grade = ((member.grade!! * member.evaluatedNumber) + (data.grade!! * 2)) / ++data.evalCount,
communication = data.communication,
technicalSkill = data.technic,
diligence = data.diligence,
flexibility = data.flexibility,
creativity = data.creativity,
evaluatedNumber = data.evalCount,
evaluatedNumber = ++data.evalCount,
)
)
}
Expand Down Expand Up @@ -182,7 +182,7 @@ class EvaluationViewModel @Inject constructor(
userRepository.getUserDetails(data?.uid!!).getOrNull().let { member ->
userRepository.updateUserInfo(
member!!.copy(
grade = (member.grade!! * member.evaluatedNumber + data.grade!! * 2) / ++data.evalCount,
grade = ((member.grade!! * member.evaluatedNumber) + (data.grade!! * 2)) / ++data.evalCount,
diligence = data.diligence,
communication = data.communication,
flexibility = data.flexibility,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ class GroupFragment : Fragment() {
is GroupData.GroupWant -> {
lifecycleScope.launch {
if (item.key != null) {
val intent = GroupActivity.newIntent(
val intent = PostActivity.newIntent(
context = requireContext(),
key = item.key
)
Expand Down
75 changes: 45 additions & 30 deletions app/src/main/java/com/seven/colink/ui/search/SearchFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.seven.colink.R.color.white
import com.seven.colink.databinding.FragmentSearchBinding
import com.seven.colink.ui.post.register.PostActivity
import com.seven.colink.ui.sign.signin.SignInActivity
import com.seven.colink.util.convert.onThrottleClick
import com.seven.colink.util.dialog.setDialog
import com.seven.colink.util.progress.hideProgressOverlay
import com.seven.colink.util.progress.showProgressOverlay
Expand Down Expand Up @@ -133,30 +134,30 @@ class SearchFragment : Fragment() {


// 프로젝트 필터버튼
binding.tvSearchProject.setOnClickListener {
binding.tvSearchProject.onThrottleClick {
binding.etSearchSearch.text.toString().let { query ->
if (project) {
project = false
offColor(binding.tvSearchProject)
if (!project && study) {
searchViewModel.setStudyFilter(query)
} else {
searchViewModel.setGroupNone(query)
}
} else {
project = true
onColor(binding.tvSearchProject)
if (project && !study) {
searchViewModel.setProjectFilter(query)
if (project) {
project = false
offColor(binding.tvSearchProject)
if (!project && study) {
searchViewModel.setStudyFilter(query)
} else {
searchViewModel.setGroupNone(query)
}
} else {
searchViewModel.setGroupBoth(query)
project = true
onColor(binding.tvSearchProject)
if (project && !study) {
searchViewModel.setProjectFilter(query)
} else {
searchViewModel.setGroupBoth(query)
}
}
}
}
}

// 스터디 필터버튼
binding.tvSearchStudy.setOnClickListener {
binding.tvSearchStudy.onThrottleClick {
binding.etSearchSearch.text.toString().let { query ->
if (study) {
study = false
Expand All @@ -179,7 +180,7 @@ class SearchFragment : Fragment() {
}

// 모집완료 필터버튼
binding.tvSearchRecruitEnd.setOnClickListener {
binding.tvSearchRecruitEnd.onThrottleClick {
binding.etSearchSearch.text.toString().let { query ->
if (recruitEnd) {
recruitEnd = false
Expand All @@ -202,7 +203,7 @@ class SearchFragment : Fragment() {
}

// 모집중 필터버튼
binding.tvSearchRecruit.setOnClickListener {
binding.tvSearchRecruit.onThrottleClick {
binding.etSearchSearch.text.toString().let { query ->
if (recruit) {
recruit = false
Expand Down Expand Up @@ -239,10 +240,16 @@ class SearchFragment : Fragment() {
}

private fun setObserve() {
searchViewModel.searchModel.observe(viewLifecycleOwner) {state ->
when(state) {
searchViewModel.searchModel.observe(viewLifecycleOwner) { state ->
when (state) {
is UiState.Loading -> {
showProgressOverlay()
if (study.not() && project.not()) {
showEmpty()
} else if (recruit.not() && recruitEnd.not()) {
showEmpty()
} else {
showProgressOverlay()
}
}
is UiState.Success -> {
hideProgressOverlay()
Expand All @@ -253,7 +260,8 @@ class SearchFragment : Fragment() {
}
is UiState.Error -> {
hideProgressOverlay()
Toast.makeText(requireContext(), "${state.throwable}", Toast.LENGTH_SHORT).show()
Toast.makeText(requireContext(), "${state.throwable}", Toast.LENGTH_SHORT)
.show()
}
}
}
Expand All @@ -262,22 +270,26 @@ class SearchFragment : Fragment() {
override fun onResume() {
super.onResume()
setSearchAppbar()
searchViewModel.doSearch("")
lifecycleScope.launch {
searchViewModel.doSearch("")
}
}

override fun onPause() {
super.onPause()
returnAppbar()
}

private fun setSearchAppbar(){
activity?.findViewById<ImageView>(R.id.iv_main_toolbar_image)?.setImageResource(R.drawable.logo_co_link_search)
private fun setSearchAppbar() {
activity?.findViewById<ImageView>(R.id.iv_main_toolbar_image)
?.setImageResource(R.drawable.logo_co_link_search)
activity?.findViewById<AppBarLayout>(R.id.al_main_appbar)?.elevation = 0f
activity?.findViewById<AppBarLayout>(R.id.al_main_appbar)?.setBackgroundResource(main_color)
}

private fun returnAppbar(){
activity?.findViewById<ImageView>(R.id.iv_main_toolbar_image)?.setImageResource(R.drawable.logo_co_link)
private fun returnAppbar() {
activity?.findViewById<ImageView>(R.id.iv_main_toolbar_image)
?.setImageResource(R.drawable.logo_co_link)
activity?.findViewById<AppBarLayout>(R.id.al_main_appbar)?.elevation = 5f
activity?.findViewById<AppBarLayout>(R.id.al_main_appbar)?.setBackgroundResource(white)
}
Expand Down Expand Up @@ -317,6 +329,9 @@ class SearchFragment : Fragment() {
text.setTextColor(Color.parseColor("#FFFFFF"))
}



private fun showEmpty() {
searchAdapter.mItems.clear()
binding.rvSearchRecyclerView.visibility = View.INVISIBLE
binding.clSearchEmpty.visibility = View.VISIBLE
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ data class SearchModel(
val description: String? = "",
val tags: List<String>? = emptyList(),
val registeredDate: String?,
val views: Int? = -1,
val views: Int? = 0,
val likes: Int? = 0
)
13 changes: 9 additions & 4 deletions app/src/main/java/com/seven/colink/ui/search/SearchViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.seven.colink.ui.search

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.seven.colink.domain.entity.GroupEntity
import com.seven.colink.domain.entity.PostEntity
import com.seven.colink.domain.repository.AuthRepository
import com.seven.colink.domain.repository.GroupRepository
import com.seven.colink.domain.repository.PostRepository
import com.seven.colink.domain.repository.UserRepository
import com.seven.colink.util.convert.convertToDaysAgo
Expand All @@ -15,6 +18,7 @@ import com.seven.colink.util.status.ProjectStatus
import com.seven.colink.util.status.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
Expand All @@ -23,7 +27,8 @@ import javax.inject.Inject
class SearchViewModel @Inject constructor(
private val postRepository: PostRepository,
private val authRepository: AuthRepository,
private val userRepository: UserRepository
private val userRepository: UserRepository,
private val groupRepository: GroupRepository
) : ViewModel() {
private val _searchModel = MutableLiveData<UiState<List<SearchModel>>>()
val searchModel: LiveData<UiState<List<SearchModel>>> get() = _searchModel
Expand Down Expand Up @@ -66,8 +71,8 @@ class SearchViewModel @Inject constructor(
.sortedByDescending {
it.registeredDate
}.map {
it.convertSearchModel()
}
it.convertSearchModel()
}
UiState.Success(result)
} catch (e: Exception) {
UiState.Error(e)
Expand Down Expand Up @@ -134,7 +139,7 @@ class SearchViewModel @Inject constructor(
userRepository.getUserDetails(authId.toString()).getOrNull()?.name.toString()
},
title = title,
status = status,
status = groupRepository.getGroupDetail(key).getOrNull()?.status,
groupType = groupType,
description = description,
tags = tags,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.seven.colink.util.convert

import android.util.Log
import android.view.View
import android.view.View.OnClickListener

class OnThrottleClickListener(
private val clickListener: OnClickListener,
private val interval: Long = 1500
) : View.OnClickListener {

private var clickable = true

override fun onClick(view: View?) {
if (clickable) {
clickable = false
view?.run {
postDelayed({
clickable = true
}, interval)
clickListener.onClick(view)
}
} else {
Log.e("Error", "Too Fast Click")
}
}
}

fun View.onThrottleClick(action: (view: View) -> Unit) {
val listener = View.OnClickListener { action(it) }
setOnClickListener(OnThrottleClickListener(listener))
}

fun View.onThrottleClick(action: (view: View) -> Unit, interval: Long) {
val listener = View.OnClickListener { action(it) }
setOnClickListener(OnThrottleClickListener(listener, interval))
}
Loading
Loading