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

[FEAT/#76] 소개 페이지 구현 #91

Merged
merged 11 commits into from
Jan 25, 2024
5 changes: 4 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@
android:name=".presentation.signin.SignInActivity"
android:exported="false" />
<activity
android:name=".presentation.familiar.location.LocationActivity"
android:name=".presentation.familiar.neighbor.NeighborActivity"
android:exported="false" />
<activity
android:name=".presentation.familiar.introduce.IntroduceActivity"
android:exported="false" />
<activity
android:name=".presentation.signup.terms.TermsActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@ package com.teumteum.teumteum.di
import com.teumteum.data.repository.AuthRepositoryImpl
import com.teumteum.data.repository.GroupRepositoryImpl
import com.teumteum.data.repository.HomeRepositoryImpl
import com.teumteum.data.repository.NeighborRepositoryImpl
import com.teumteum.data.repository.SampleRepositoryImpl
import com.teumteum.data.repository.SettingRepositoryImpl
import com.teumteum.data.repository.UserRepositoryImpl
import com.teumteum.domain.repository.AuthRepository
import com.teumteum.domain.repository.GroupRepository
import com.teumteum.domain.repository.HomeRepository
import com.teumteum.domain.repository.NeighborRepository
import com.teumteum.domain.repository.SampleRepository
import com.teumteum.domain.repository.SettingRepository
import com.teumteum.domain.repository.UserRepository
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
Expand All @@ -31,6 +32,10 @@ interface RepositoryModule {
@Binds
fun bindHomeRepository(homeRepositoryImpl: HomeRepositoryImpl): HomeRepository

@Singleton
@Binds
fun bindNeighborRepository(neighborRepositoryImpl: NeighborRepositoryImpl): NeighborRepository

@Singleton
@Binds
fun provideGroupRepository(groupRepositoryImpl: GroupRepositoryImpl): GroupRepository
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/teumteum/teumteum/di/ServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.teumteum.teumteum.di

import com.teumteum.data.service.GroupService
import com.teumteum.data.service.HomeService
import com.teumteum.data.service.NeighborService
import com.teumteum.data.service.SampleService
import com.teumteum.data.service.SettingService
import com.teumteum.data.service.UserService
Expand Down Expand Up @@ -35,6 +36,11 @@ object ServiceModule {
fun provideUserService(retrofit: Retrofit) =
retrofit.create(UserService::class.java)

@Singleton
@Provides
fun provideNeighborService(retrofit: Retrofit) =
retrofit.create(NeighborService::class.java)

@Singleton
@Provides
fun provideSettingService(retrofit: Retrofit) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import android.os.Bundle
import com.teumteum.base.BindingFragment
import com.teumteum.teumteum.R
import com.teumteum.teumteum.databinding.FragmentFamiliarBinding
import com.teumteum.teumteum.presentation.familiar.location.LocationActivity
import com.teumteum.teumteum.presentation.familiar.neighbor.NeighborActivity
import com.teumteum.teumteum.presentation.familiar.onboarding.FamiliarOnBoardingActivity
import dagger.hilt.android.AndroidEntryPoint

Expand All @@ -21,10 +21,8 @@ class FamiliarFragment :

if (!sharedPreferencesManager.isOnboardingCompleted()) {
startActivity(Intent(requireContext(), FamiliarOnBoardingActivity::class.java))
requireActivity().finish()
} else {
startActivity(Intent(requireContext(), LocationActivity::class.java))
requireActivity().finish()
startActivity(Intent(requireContext(), NeighborActivity::class.java))
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package com.teumteum.teumteum.presentation.familiar.introduce

import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.tabs.TabLayoutMediator
import com.teumteum.base.BindingActivity
import com.teumteum.base.R.color
import com.teumteum.base.component.appbar.AppBarLayout
import com.teumteum.base.component.appbar.AppBarMenu
import com.teumteum.base.databinding.LayoutCommonAppbarBinding
import com.teumteum.domain.entity.Friend
import com.teumteum.teumteum.R
import com.teumteum.teumteum.databinding.ActivityIntroduceBinding
import com.teumteum.teumteum.presentation.familiar.neighbor.NeighborActivity.Companion.EXTRA_NEIGHBORS_IDS
import com.teumteum.teumteum.presentation.familiar.shake.ShakeActivity
import com.teumteum.teumteum.util.custom.view.model.FrontCard
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber


@AndroidEntryPoint
class IntroduceActivity
: BindingActivity<ActivityIntroduceBinding>(R.layout.activity_introduce), AppBarLayout {

private val introduceAdapter = IntroduceAdapter()
private val viewpagerList = ArrayList<Friend>()
private val viewModel by viewModels<IntroduceViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
getIntroduceUsers()
initAppBarLayout()
initViewPager()
setUpListener()
initObserver()
}

private fun getIntroduceUsers(){
val ids = intent.getStringExtra(EXTRA_NEIGHBORS_IDS) ?: ""
Timber.tag("테스따").d("$ids")
viewModel.getIntroduceUser(id = ids)
}

private fun initObserver(){
viewModel.introduceUser.observe(this) { friends ->
introduceAdapter.submitList(friends)
}
}

private fun setUpListener() {
binding.btnStart.setOnClickListener {
startShakeActivity()
}
}

private fun startShakeActivity() {
val friends = viewModel.introduceUser.value ?: listOf()

val intent = Intent(this, ShakeActivity::class.java).apply {
putExtra(EXTRA_FRIENDS, ArrayList(friends))
}
startActivity(intent)
}

override val appBarBinding: LayoutCommonAppbarBinding
get() = binding.appBar

override fun initAppBarLayout() {
setAppBarHeight(48)

setAppBarBackgroundColor(color.background)
addMenuToLeft(
AppBarMenu.IconStyle(
resourceId = R.drawable.ic_arrow_left_l,
useRippleEffect = false,
clickEvent = ::finish
)
)
}

private fun initViewPager() {
introduceAdapter.submitList(viewpagerList)
with(binding) {
vp.adapter = introduceAdapter
vp.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER
tl.clearOnTabSelectedListeners()
}
TabLayoutMediator(binding.tl, binding.vp) { tab, _ ->
tab.view.isClickable = false
}.attach()
}

companion object {
const val EXTRA_FRIENDS = "EXTRA_FRIENDS"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.teumteum.teumteum.presentation.familiar.introduce

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.teumteum.domain.entity.Friend
import com.teumteum.teumteum.databinding.ItemIntroduceBinding
import com.teumteum.teumteum.util.IdMapper

class IntroduceAdapter() :
ListAdapter<Friend, IntroduceAdapter.ItemViewHolder>(
ItemListDiffCallback
) {
private lateinit var binding: ItemIntroduceBinding

override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ItemViewHolder {
binding =
ItemIntroduceBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ItemViewHolder(binding)
}

override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
holder.bind(getItem(position))
}

class ItemViewHolder(private val binding: ItemIntroduceBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: Friend) {
val imageRes = IdMapper.getCardCharacterDrawableById(characterId = item.characterId)

with(binding.cvCharacter) {
tvName.text = item.name
tvCompany.text = item.job.name
tvJob.text = item.job.detailClass
tvLevel.text = item.mannerTemperature.toString()
tvArea.text = item.activityArea + "에 사는"
tvMbti.text = item.mbti

Glide.with(itemView.context)
.load(imageRes)
.apply(RequestOptions.centerInsideTransform())
.into(ivCharacter)
}
}
}

object ItemListDiffCallback : DiffUtil.ItemCallback<Friend>() {
override fun areItemsTheSame(oldItem: Friend, newItem: Friend): Boolean {
return oldItem.id == newItem.id
}

override fun areContentsTheSame(
oldItem: Friend,
newItem: Friend
): Boolean {
return oldItem == newItem
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.teumteum.teumteum.presentation.familiar.introduce

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.teumteum.domain.entity.Friend
import com.teumteum.domain.repository.UserRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class IntroduceViewModel @Inject constructor(
private val userRepository: UserRepository
) : ViewModel() {

private var _introduceUser = MutableLiveData<MutableList<Friend>>()
val introduceUser: LiveData<MutableList<Friend>>
get() = _introduceUser

fun getIntroduceUser(id: String) {
viewModelScope.launch {
userRepository.getUsers(id = id)
.onSuccess {
_introduceUser.value = it.users.toMutableList()
}
}
}
}





Loading
Loading