Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
fceffc7
[feat] #109 ๊ฒ€์ƒ‰ ํ™”๋ฉด์—์„œ ์‹ ๊ณ ํ•˜๊ธฐ ๋ฒ„ํŠผ ์ œ๊ฑฐ
ikseong00 Dec 1, 2025
5f3ca89
[fix] #109 ๊ฒ€์ƒ‰ ์ƒ์„ธ ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ •
ikseong00 Dec 1, 2025
95f0480
[feat] #109 ๋„ค์ด๋ฒ„ ์ง€๋„ ๋กœ๊ณ  ํด๋ฆญ ๋น„ํ™œ์„ฑํ™”
ikseong00 Dec 1, 2025
fdc30fc
[feat] #109 ์•Œ๋žŒ ์„ค์ • ์ŠคํŽ˜์ด์Šค ์ œ๊ฑฐ
ikseong00 Dec 1, 2025
df08491
[feat] #109 ๊ฒŒ์ŠคํŠธ ์œ ์ €์ผ ๊ฒฝ์šฐ ๋งˆ์ดํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ
ikseong00 Dec 1, 2025
53c6b7f
[feat] #109 AD_ID ๊ถŒํ•œ ์ถ”๊ฐ€
ikseong00 Dec 1, 2025
4148104
[chore] #109 ์•ฑ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
ikseong00 Dec 1, 2025
5d698e2
[feat] #109 401 ์—๋Ÿฌ ์ „์šฉ ์˜ˆ์™ธ ํด๋ž˜์Šค ๊ตฌํ˜„
ikseong00 Dec 1, 2025
53a01df
[feat] #109 ํ™ˆ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ 401 ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ (์ž„์‹œ)
ikseong00 Dec 1, 2025
72dc1f7
[fix] #109 401 ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋กœ์ง ์ˆ˜์ •
ikseong00 Dec 2, 2025
6fc3cad
[style] #107 ๋งˆ์ดํŽ˜์ด์ง€ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋‹ค์ด์–ผ๋กœ๊ทธ UI ์ˆ˜์ •
ikseong00 Dec 2, 2025
c820d11
[fix] #107 401 ์—๋Ÿฌ ์‹œ AuthAuthenticator ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ • (์ž„์‹œ)
ikseong00 Dec 2, 2025
9de5fd6
[chore] #107 ์•ฑ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
ikseong00 Dec 3, 2025
c132472
[feat] ์•ฑ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ๋งˆ์ดํŽ˜์ด์ง€ ์„ค์ • ๋ฒ„ํŠผ ์ˆจ๊น€ ์ฒ˜๋ฆฌ
ikseong00 Dec 10, 2025
58655d6
[build] #107 ์•ฑ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
ikseong00 Dec 10, 2025
09f786b
[fix] ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ์ œ๊ฑฐ
ikseong00 Dec 11, 2025
f2bff24
[chore] #107 ์•ฑ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
ikseong00 Dec 11, 2025
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
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ android {
applicationId = "com.kuit.findu"
minSdk = 28
targetSdk = 35
versionCode = 5
versionName = "1.0.4"
versionCode = 12
versionName = "1.0.11"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("String", "GPT_KEY", properties["GPT_KEY"].toString())
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- CameraX -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"
tools:ignore="AdvertisingIdPolicy" />

<queries>
<package android:name="com.nhn.android.nmap" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.kuit.findu.data.dataremote.util

import android.content.Context
import android.content.Intent
import com.kuit.findu.data.datalocal.datasource.TokenLocalDataSource
import com.kuit.findu.presentation.ui.login.LoginActivity
import dagger.hilt.android.qualifiers.ApplicationContext
import okhttp3.Interceptor
import okhttp3.Response
import javax.inject.Inject

class AuthAuthenticator @Inject constructor(
private val tokenLocalDataSource: TokenLocalDataSource,
@ApplicationContext private val context: Context
) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)

// 401 Unauthorized ์—๋Ÿฌ ๊ฐ์ง€
if (response.code == 401) {
// ํ† ํฐ ์‚ญ์ œ
tokenLocalDataSource.clearToken()

// ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™
val intent = Intent(context, LoginActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
context.startActivity(intent)
}

return response
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.kuit.findu.data.dataremote.util

class AuthenticationException: Exception()
14 changes: 13 additions & 1 deletion app/src/main/java/com/kuit/findu/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFact
import com.kuit.findu.BuildConfig
import com.kuit.findu.BuildConfig.DEBUG
import com.kuit.findu.data.datalocal.datasource.TokenLocalDataSource
import com.kuit.findu.data.dataremote.util.AuthAuthenticator
import com.kuit.findu.data.dataremote.util.AuthInterceptor
import com.kuit.findu.data.dataremote.util.ErrorTrackingInterceptor
import dagger.Module
Expand Down Expand Up @@ -42,15 +43,17 @@ object NetworkModule {
fun providesOkHttpClient(
loggingInterceptor: HttpLoggingInterceptor,
authInterceptor: AuthInterceptor,
authAuthenticator: AuthAuthenticator,
errorTrackingInterceptor: ErrorTrackingInterceptor,
): OkHttpClient =
OkHttpClient.Builder().apply {
connectTimeout(10, TimeUnit.SECONDS)
writeTimeout(10, TimeUnit.SECONDS)
readTimeout(10, TimeUnit.SECONDS)
addInterceptor(authInterceptor)
if (DEBUG) addInterceptor(loggingInterceptor)
else addInterceptor(errorTrackingInterceptor)
addInterceptor(authInterceptor)
addInterceptor(authAuthenticator)
}.build()

@Provides
Expand All @@ -69,6 +72,15 @@ object NetworkModule {
return AuthInterceptor(tokenLocalDataSource, context)
}

@Provides
@Singleton
fun provideAuthAuthenticator(
tokenLocalDataSource: TokenLocalDataSource,
@ApplicationContext context: Context,
): AuthAuthenticator {
return AuthAuthenticator(tokenLocalDataSource, context)
}

@Provides
@Singleton
fun provideErrorTrackingInterceptor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.kuit.findu.presentation.ui.home.composeview.HomeScreen
import com.kuit.findu.presentation.ui.home.viewmodel.HomeUiEffect
import com.kuit.findu.presentation.ui.home.viewmodel.HomeUiEvent
import com.kuit.findu.presentation.ui.home.viewmodel.HomeViewModel
import com.kuit.findu.presentation.ui.login.LoginActivity
import com.kuit.findu.presentation.util.permission.LocationPermissionManager.hasLocationPermission
import dagger.hilt.android.AndroidEntryPoint

Expand Down Expand Up @@ -89,11 +90,13 @@ class HomeFragment : Fragment() {
is HomeUiEffect.NavigateToFindReport -> {
navigateToFindReport()
}

is HomeUiEffect.NavigateToLostReport -> {
navigateToLostReport()
}

is HomeUiEffect.Dial -> call120()
is HomeUiEffect.NavigateToLogin -> startLoginActivity()
}
}
}
Expand Down Expand Up @@ -173,6 +176,11 @@ class HomeFragment : Fragment() {
)
}

private fun startLoginActivity() {
val intent = Intent(requireContext(), LoginActivity::class.java)
startActivity(intent)
requireActivity().finish()
}

private fun navigateToProtectDetail(id: String, tag: String, name: String) {
when (tag) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.kuit.findu.presentation.ui.home.viewmodel

import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.kuit.findu.data.dataremote.util.AuthenticationException
import com.kuit.findu.domain.model.HomeData
import com.kuit.findu.domain.model.ProtectAnimal
import com.kuit.findu.domain.model.ReportAnimal
Expand Down Expand Up @@ -78,6 +80,7 @@ sealed class HomeUiEffect {
data class ShowToast(val message: String) : HomeUiEffect()

data object Dial : HomeUiEffect()
data object NavigateToLogin : HomeUiEffect()
}

@HiltViewModel
Expand Down Expand Up @@ -140,6 +143,11 @@ class HomeViewModel @Inject constructor(
}
},
onFailure = { error ->
Log.e("HomeViewModel", "loadHomeData: $error")
if(error.message?.contains("401") == true) {
_uiEffect.send(HomeUiEffect.NavigateToLogin)
return@fold
}
_uiState.update {
it.copy(
loadState = LoadState.Error,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import com.kuit.findu.ui.theme.FindUTheme
fun LoginScreen(
kakaoLoginButtonClicked: () -> Unit,
withoutSignUpButtonClicked: () -> Unit,
modifier: Modifier = Modifier
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
Expand Down Expand Up @@ -66,12 +66,13 @@ fun LoginScreen(
tint = Color.Unspecified,
)
Spacer(modifier = Modifier.height(53.dp))
Icon(
painter = painterResource(R.drawable.img_kakao_login),
contentDescription = null,
modifier = Modifier.noRippleClickable(kakaoLoginButtonClicked),
tint = Color.Unspecified
)
// Icon(
// painter = painterResource(R.drawable.img_kakao_login),
// contentDescription = null,
// modifier = Modifier.noRippleClickable(),
// tint = Color.Unspecified
// )
Spacer(modifier = Modifier.height(50.dp))
Spacer(modifier = Modifier.height(15.dp))
Text(
text = stringResource(R.string.login_without_signup),
Expand Down
23 changes: 19 additions & 4 deletions app/src/main/java/com/kuit/findu/presentation/ui/my/MyFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,14 @@ class MyFragment : Fragment() {
// clMyAlarmSetting.setOnClickListener {
// myViewModel.toggleAlarmSetting()
// }
binding.clMyAlarmSetting.isEnabled = false
// binding.clMyAlarmSetting.isEnabled = false

clMyGotoLogin.setOnClickListener {
with(requireActivity()) {
startActivity(Intent(requireContext(), LoginActivity::class.java))
finish()
}
}

setupVersion()
}
Expand Down Expand Up @@ -250,6 +257,14 @@ class MyFragment : Fragment() {
.load(type.drawableRes)
.into(binding.ivMyIllust)
}

if(it.nickname == "๊ฒŒ์ŠคํŠธ") {
binding.ivMyEditPen.visibility = View.GONE
binding.clMyWithdrawal.visibility = View.GONE
binding.clMyLogout.visibility = View.GONE
} else {
binding.clMyGotoLogin.visibility = View.GONE
}
}
}
}
Expand Down Expand Up @@ -284,9 +299,9 @@ class MyFragment : Fragment() {
}
launch {
myViewModel.alarmEnabled.collect { enabled ->
binding.ivMyAlarmIcon.setImageResource(
if (enabled) R.drawable.img_my_alarm_on else R.drawable.img_my_alarm_off
)
// binding.ivMyAlarmIcon.setImageResource(
// if (enabled) R.drawable.img_my_alarm_on else R.drawable.img_my_alarm_off
// )
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class SearchDisappearDetailFragment : Fragment() {

binding.mapView.getMapAsync { nMap ->
naverMap = nMap
naverMap?.uiSettings?.isLogoClickEnabled = false
pendingLocation?.let { location ->
setupMap(location.latitude, location.longitude)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class SearchProtectingDetailFragment : Fragment() {

binding.mapView.getMapAsync { nMap ->
naverMap = nMap
naverMap?.uiSettings?.isLogoClickEnabled = false
pendingLocation?.let { location ->
setupMap(location.latitude, location.longitude)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class SearchWitnessDetailFragment : Fragment() {
binding.mapView.onCreate(savedInstanceState)
binding.mapView.getMapAsync { nMap ->
naverMap = nMap
naverMap?.uiSettings?.isLogoClickEnabled = false
pendingLocation?.let { location ->
setupMap(location.latitude, location.longitude)
}
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/res/layout/dialog_my_profile_image.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
android:layout_width="320dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_my_dialog"
android:padding="20dp">
android:paddingHorizontal="24dp"
android:paddingVertical="20dp">

<TextView
android:id="@+id/tv_dialog_title"
Expand Down Expand Up @@ -99,7 +100,7 @@

<android.widget.Button
android:id="@+id/btn_change_profile_image"
android:layout_width="288dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="@drawable/bg_radius_8_g3"
Expand Down
71 changes: 45 additions & 26 deletions app/src/main/res/layout/fragment_my.xml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="22dp"
android:layout_marginEnd="20dp"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">

Expand Down Expand Up @@ -265,32 +266,32 @@
android:textAppearance="@style/TextAppearance.FindU.Body2_SB_14"
android:textColor="@color/gray4" />

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_my_alarm_setting"
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingHorizontal="22dp"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_set_alarm_permission"
android:textAppearance="@style/TextAppearance.FindU.Body1_SB_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<ImageView
android:id="@+id/iv_my_alarm_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_my_alarm_off"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
<!-- <androidx.constraintlayout.widget.ConstraintLayout-->
<!-- android:id="@+id/cl_my_alarm_setting"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="50dp"-->
<!-- android:paddingHorizontal="22dp"-->
<!-- app:layout_constraintTop_toTopOf="parent">-->

<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="@string/my_set_alarm_permission"-->
<!-- android:textAppearance="@style/TextAppearance.FindU.Body1_SB_16"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent" />-->

<!-- <ImageView-->
<!-- android:id="@+id/iv_my_alarm_icon"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:src="@drawable/img_my_alarm_off"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent" />-->

<!-- </androidx.constraintlayout.widget.ConstraintLayout>-->


<androidx.constraintlayout.widget.ConstraintLayout
Expand Down Expand Up @@ -418,6 +419,24 @@

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_my_goto_login"
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingHorizontal="22dp"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™"
android:textAppearance="@style/TextAppearance.FindU.Body1_SB_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_my_withdrawal"
android:layout_width="match_parent"
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/layout/fragment_search.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
android:paddingHorizontal="5dp"
android:drawablePadding="5dp"
android:text="์‹ ๊ณ ํ•˜๊ธฐ"
android:visibility="invisible"
android:textAppearance="@style/TextAppearance.FindU.Head2_SB_20"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
Expand Down
Loading