Skip to content
4 changes: 3 additions & 1 deletion CatchMate/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
<activity
android:name="com.catchmate.presentation.view.home.MainActivity"
android:exported="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize"
tools:replace="android:exported">
tools:replace="android:exported"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
8 changes: 6 additions & 2 deletions CatchMate/app/src/main/res/values-night/themes.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.CatchMate" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
<item name="colorPrimary">@color/brand500</item>
<item name="android:statusBarColor">@color/grey0</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowBackground">@color/grey0</item>
</style>

<style name="Theme.CatchMate" parent="Base.Theme.CatchMate" />
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.catchmate.presentation.view.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.viewbinding.ViewBinding
import com.catchmate.presentation.R

abstract class BaseFragment<VB : ViewBinding>(
private val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> VB,
) : Fragment() {
private var _binding: VB? = null
val binding
get() = requireNotNull(_binding)

private var backPressedCallback: OnBackPressedCallback? = null
protected var onBackPressedAction: (() -> Unit)? = null
protected var enableDoubleBackPressedExit = false
private var lastBackPressedTime: Long = 0L // 마지막으로 백버튼 눌렀던 시간 저장

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
_binding = bindingInflater(inflater, container, false)
return binding.root
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)

backPressedCallback =
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (enableDoubleBackPressedExit) {
handleDoubleBackToExit()
} else {
onBackPressedAction?.invoke() ?: findNavController().popBackStack()
}
}
}

requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
backPressedCallback as OnBackPressedCallback,
)
}

private fun handleDoubleBackToExit() {
val currentTime = System.currentTimeMillis()
if (currentTime - lastBackPressedTime < 2000) {
requireActivity().moveTaskToBack(true) // 앱을 백그라운드로 이동시킴
} else {
lastBackPressedTime = currentTime
Toast.makeText(requireContext(), R.string.back_pressed_toast, Toast.LENGTH_SHORT).show()
}
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
backPressedCallback?.remove()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ package com.catchmate.presentation.view.chatting

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
Expand All @@ -15,16 +12,14 @@ import com.catchmate.domain.model.chatting.ChatRoomInfo
import com.catchmate.presentation.R
import com.catchmate.presentation.databinding.FragmentChattingHomeBinding
import com.catchmate.presentation.interaction.OnChattingRoomSelectedListener
import com.catchmate.presentation.view.base.BaseFragment
import com.catchmate.presentation.viewmodel.ChattingHomeViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class ChattingHomeFragment :
Fragment(),
BaseFragment<FragmentChattingHomeBinding>(FragmentChattingHomeBinding::inflate),
OnChattingRoomSelectedListener {
private var _binding: FragmentChattingHomeBinding? = null
val binding get() = _binding!!

private val chattingHomeViewModel: ChattingHomeViewModel by viewModels()
private var currentPage: Int = 0
private var isLastPage = false
Expand All @@ -33,21 +28,12 @@ class ChattingHomeFragment :
private var isFirstLoad = true
private var chatRoomList: MutableList<ChatRoomInfo> = mutableListOf()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
_binding = FragmentChattingHomeBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)

enableDoubleBackPressedExit = true
initHeader()
initViewModel()
initRecyclerView()
Expand All @@ -58,11 +44,6 @@ class ChattingHomeFragment :
}
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

private fun initHeader() {
binding.layoutHeaderChattingHome.apply {
tvHeaderTextTitle.setText(R.string.chatting_home_title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
Expand All @@ -24,6 +21,7 @@ import com.catchmate.presentation.databinding.LayoutSimpleDialogBinding
import com.catchmate.presentation.util.DateUtils.formatISODateTime
import com.catchmate.presentation.util.DateUtils.getCurrentTimeFormatted
import com.catchmate.presentation.util.ResourceUtil.setTeamViewResources
import com.catchmate.presentation.view.base.BaseFragment
import com.catchmate.presentation.viewmodel.ChattingRoomViewModel
import com.catchmate.presentation.viewmodel.LocalDataViewModel
import com.gmail.bishoybasily.stomp.lib.Event
Expand All @@ -33,10 +31,7 @@ import dagger.hilt.android.AndroidEntryPoint
import org.json.JSONObject

@AndroidEntryPoint
class ChattingRoomFragment : Fragment() {
private var _binding: FragmentChattingRoomBinding? = null
val binding get() = _binding!!

class ChattingRoomFragment : BaseFragment<FragmentChattingRoomBinding>(FragmentChattingRoomBinding::inflate) {
private val chattingRoomViewModel: ChattingRoomViewModel by viewModels()
private val localDataViewModel: LocalDataViewModel by viewModels()
private var chatRoomId: Long = -1L
Expand All @@ -49,15 +44,6 @@ class ChattingRoomFragment : Fragment() {
Log.e("chatRoomId", chatRoomId.toString())
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
_binding = FragmentChattingRoomBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
Expand All @@ -74,7 +60,6 @@ class ChattingRoomFragment : Fragment() {
override fun onDestroyView() {
super.onDestroyView()
chattingRoomViewModel.disposables.dispose()
_binding = null
}

private fun getChatRoomId(): Long = arguments?.getLong("chatRoomId") ?: -1L
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@ import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
Expand All @@ -24,16 +21,14 @@ import com.catchmate.presentation.R
import com.catchmate.presentation.databinding.FragmentChattingSettingBinding
import com.catchmate.presentation.interaction.OnKickOutClickListener
import com.catchmate.presentation.util.ImageUtils.convertBitmapToMultipart
import com.catchmate.presentation.view.base.BaseFragment
import com.catchmate.presentation.viewmodel.ChattingSettingViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class ChattingSettingFragment :
Fragment(),
BaseFragment<FragmentChattingSettingBinding>(FragmentChattingSettingBinding::inflate),
OnKickOutClickListener {
private var _binding: FragmentChattingSettingBinding? = null
val binding get() = _binding!!

private val chattingSettingViewModel: ChattingSettingViewModel by viewModels()

private lateinit var requestAlbumLauncher: ActivityResultLauncher<Intent>
Expand All @@ -57,15 +52,6 @@ class ChattingSettingFragment :
Log.e("값 확인", "$chattingRoomImage \n $chattingCrewList \n $loginUserId \n $writerId \n $chatRoomId ")
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
_binding = FragmentChattingSettingBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
Expand All @@ -78,11 +64,6 @@ class ChattingSettingFragment :
initChattingRoomImageView()
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

private fun getChattingRoomImage(): String = arguments?.getString("chattingRoomImage") ?: ""

private fun getChattingCrewList(): MutableList<GetUserProfileResponse>? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@ package com.catchmate.presentation.view.favorite

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
Expand All @@ -17,18 +14,16 @@ import com.catchmate.presentation.databinding.FragmentFavoriteBinding
import com.catchmate.presentation.interaction.OnPostItemAllRemovedListener
import com.catchmate.presentation.interaction.OnPostItemClickListener
import com.catchmate.presentation.interaction.OnPostItemToggleClickListener
import com.catchmate.presentation.view.base.BaseFragment
import com.catchmate.presentation.viewmodel.FavoriteViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class FavoriteFragment :
Fragment(),
BaseFragment<FragmentFavoriteBinding>(FragmentFavoriteBinding::inflate),
OnPostItemClickListener,
OnPostItemToggleClickListener,
OnPostItemAllRemovedListener {
private var _binding: FragmentFavoriteBinding? = null
val binding get() = _binding!!

private val favoriteViewModel: FavoriteViewModel by viewModels()

private var currentPage: Int = 0
Expand All @@ -38,20 +33,12 @@ class FavoriteFragment :
private var isFirstLoad = true
private var likedList: MutableList<Board> = mutableListOf()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View? {
_binding = FragmentFavoriteBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
enableDoubleBackPressedExit = true
initHeader()
initViewModel()
initRecyclerView()
Expand All @@ -62,11 +49,6 @@ class FavoriteFragment :
}
}

override fun onDestroyView() {
super.onDestroyView()
_binding = null
}

private fun initHeader() {
binding.layoutHeaderFavorite.apply {
tvHeaderTextTitle.setText(R.string.favorite_title)
Expand Down
Loading