Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
623bd57
fix: ProfileSmallKeywordChip 패딩 수정
nahy-512 Jan 23, 2026
9980028
feat: 타인 프로필 뒤로가기 헤더 추가
nahy-512 Jan 23, 2026
d5901f5
feat: ProfileScreen 프리뷰 추가
nahy-512 Jan 23, 2026
0ad85ed
style: 로딩 인디케이터 색상 변경
nahy-512 Jan 23, 2026
8ee50c3
fix: profileNavGraph navigateUp 함수 추가
nahy-512 Jan 23, 2026
2a97ae3
refactor: 프로필 화면 프로필 및 작품/컬렉션 데이터 비동기 로딩
nahy-512 Jan 23, 2026
b2c9154
feat: 회원탈퇴 이스터에그 추가
nahy-512 Jan 23, 2026
808f8ea
refactor: 회원탈퇴 후 앱 재시작
nahy-512 Jan 23, 2026
75afa24
refactor: ContextExt를 통한 앱 재시작 로직 수정
nahy-512 Jan 23, 2026
2ad8a60
refactor: 프로필 화면 ProfileTopSection 로딩 범위에서 제외
nahy-512 Jan 23, 2026
872635d
refactor: 프로필 로딩바 위치 수정
nahy-512 Jan 23, 2026
398e1e4
style: 디자인 QA 반영
nahy-512 Jan 23, 2026
48dc5e4
feat: 회원탈퇴 플래그 추가
nahy-512 Jan 23, 2026
7947b31
Merge remote-tracking branch 'origin/develop' into fix/#183-profile-qa
nahy-512 Jan 23, 2026
4489afb
fix: 코드리뷰 내용 반영
nahy-512 Jan 23, 2026
3d981ed
Merge remote-tracking branch 'origin/develop' into fix/#183-profile-qa
nahy-512 Jan 23, 2026
86d8557
fix: Ott 바텀시트 표시, CollectionInputTextField 수정
nahy-512 Jan 23, 2026
94b1084
fix: 생성 컬렉션 표시
nahy-512 Jan 23, 2026
d5ad75d
fix: BasicTextField 텍스트 포커싱 영역 수정
nahy-512 Jan 23, 2026
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
14 changes: 14 additions & 0 deletions app/src/main/java/com/flint/core/common/extension/ContextExt.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.flint.core.common.extension

import android.app.Activity
import android.content.Context
import android.content.ContextWrapper

fun Context.findActivity(): Activity {
var context = this
while (context is ContextWrapper) {
if (context is Activity) return context
context = context.baseContext
}
throw IllegalStateException("no activity")
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,21 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.flint.core.designsystem.theme.FlintTheme

@Composable
fun FlintLoadingIndicator() {
fun FlintLoadingIndicator(
modifier: Modifier = Modifier
) {
Box(
modifier =
Modifier
modifier
.fillMaxSize()
.background(Color.Transparent),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator()
CircularProgressIndicator(
color = FlintTheme.colors.primary400
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.flint.core.designsystem.component.textfield

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
Expand Down Expand Up @@ -49,7 +50,8 @@ fun CollectionInputTextField(
maxLines = maxLines,
keyboardOptions = keyboardOptions,
keyboardActions = keyboardActions,
modifier = modifier,
paddingValues = PaddingValues(horizontal = 12.dp, vertical = 10.dp),
modifier = modifier.heightIn(min = 40.dp),
)

if (!isShowLengthTitle) return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.flint.core.designsystem.component.textfield

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand All @@ -24,6 +25,8 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.text.TextStyle
Expand Down Expand Up @@ -54,6 +57,7 @@ fun FlintBasicTextField(
trailingContent: @Composable () -> Unit = {},
) {
val interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
val focusRequester = remember { FocusRequester() }

Box(
modifier =
Expand All @@ -64,10 +68,18 @@ fun FlintBasicTextField(
width = 1.dp,
color = borderColor,
shape = RoundedCornerShape(radius),
),
)
.clickable(
interactionSource = interactionSource,
indication = null,
) {
focusRequester.requestFocus()
},
) {
BasicTextField(
modifier = Modifier.fillMaxSize(),
modifier = Modifier
.fillMaxSize()
.focusRequester(focusRequester),
value = value,
textStyle = textStyle.copy(color = FlintTheme.colors.white),
onValueChange = {
Expand All @@ -84,8 +96,7 @@ fun FlintBasicTextField(
cursorBrush = SolidColor(FlintTheme.colors.gray300),
decorationBox = { innerTextField ->
Row(
modifier =
Modifier
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
horizontalArrangement = Arrangement.SpaceBetween,
Expand Down Expand Up @@ -121,7 +132,9 @@ private fun BasicTextFieldPreview() {
var text by remember { mutableStateOf("") }

FlintBasicTextField(
modifier = Modifier.fillMaxWidth().height(40.dp),
modifier = Modifier
.fillMaxWidth()
.height(40.dp),
placeholder = "PlaceHolder",
value = text,
onValueChange = { text = it },
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/com/flint/data/api/AuthApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import com.flint.data.dto.auth.request.SignupRequestDto
import com.flint.data.dto.auth.request.SocialVerifyRequestDto
import com.flint.data.dto.auth.response.SignupResponseDto
import com.flint.data.dto.auth.response.SocialVerifyResponseDto
import com.flint.data.dto.auth.response.WithdrawResponseDto
import com.flint.data.dto.base.BaseResponse
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.POST

interface AuthApi {
Expand All @@ -18,4 +20,7 @@ interface AuthApi {
suspend fun socialVerify(
@Body requestDto: SocialVerifyRequestDto,
): BaseResponse<SocialVerifyResponseDto>

@DELETE("/api/v1/auth/withdraw")
suspend fun withdraw(): WithdrawResponseDto
Comment on lines +24 to +25
Copy link
Contributor

@coderabbitai coderabbitai bot Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, let's look at the AuthApi.kt file to see all methods and their return types
fd "AuthApi.kt" --type f --exec cat -n {}

Repository: imflint/Flint-Android

Length of output: 1116


🏁 Script executed:

# Also search for WithdrawResponseDto to understand its structure
fd "WithdrawResponseDto" --type f --exec cat -n {}

Repository: imflint/Flint-Android

Length of output: 420


🏁 Script executed:

# Search for BaseResponse usage patterns in API files
rg "BaseResponse|@DELETE|@POST|@GET" app/src/main/java/com/flint/data/api/ -A1 --type kotlin

Repository: imflint/Flint-Android

Length of output: 8866


withdraw() 메서드의 응답 타입 래핑 불일치 수정 필요

withdraw() 함수는 WithdrawResponseDto를 직접 반환하지만, 다른 모든 API 메서드(signup, socialVerify 포함)와 전체 코드베이스의 패턴에서는 BaseResponse<T> 래핑을 사용합니다. WithdrawResponseDtostatusmessage 필드만 포함하는 응답 엔벨로프 구조이므로, 표준 API 응답 패턴에 맞게 BaseResponse<WithdrawResponseDto> 또는 BaseResponse<Unit>로 수정해야 합니다.

🤖 Prompt for AI Agents
In `@app/src/main/java/com/flint/data/api/AuthApi.kt` around lines 24 - 25, The
withdraw() API method currently returns WithdrawResponseDto directly but must
follow the project's standard response envelope; change its return type to
BaseResponse<WithdrawResponseDto> (or BaseResponse<Unit> if the body contains no
data) to match other methods like signup and socialVerify, update the
AuthApi.withdraw() signature and any related call sites/imports to use
BaseResponse, and ensure WithdrawResponseDto is used only as the inner generic
payload type.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서버에서 data가 안와서 BaseResponse를 쓸 수 없음;
data를 nullable로 두기보다는 그냥 따로 관리하는 게 나을듯. 서버한테 지금 말하기 힘든 상황이니까 나중에 고칠게

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nahy-512, 이해했습니다! 백엔드 API가 표준 응답 형식을 따르지 않는 상황이라면 현재 방식이 합리적입니다.

나중에 백엔드 팀과 조율이 가능할 때 통일된 응답 형식으로 수정하시면 좋을 것 같습니다. 필요하시다면 이 기술 부채를 추적하기 위한 이슈를 생성해드릴 수도 있습니다.


✏️ Learnings added
Learnt from: nahy-512
Repo: imflint/Flint-Android PR: 189
File: app/src/main/java/com/flint/data/api/AuthApi.kt:24-25
Timestamp: 2026-01-23T08:53:45.699Z
Learning: In `app/src/main/java/com/flint/data/api/AuthApi.kt`, the `withdraw()` endpoint returns `WithdrawResponseDto` directly instead of `BaseResponse<WithdrawResponseDto>` because the backend API does not follow the standard response envelope pattern for this specific endpoint. This is a known exception planned for future alignment with backend team.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.flint.data.dto.auth.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class WithdrawResponseDto(
@SerialName("status")
val status: Int,
@SerialName("message")
val message: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,9 @@ class AuthRepository @Inject constructor(
result
}

suspend fun withdraw(): Result<Unit> =
suspendRunCatching {
api.withdraw()
preferencesManager.clearAll()
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/com/flint/presentation/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class MainActivity : ComponentActivity() {
}
}

private fun restartApplication() {
fun restartApplication() {
val packageManager: PackageManager = this.packageManager
val intent = packageManager.getLaunchIntentForPackage(this.packageName)
val componentName = intent!!.component
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ fun CollectionFileItem(

Column(
verticalArrangement = Arrangement.spacedBy(4.dp),
modifier = Modifier.width(154.dp),
modifier = Modifier
.width(154.dp)
.padding(horizontal = 8.dp),
) {
Text(
text = collection.title,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ fun MainNavHost(

profileNavGraph(
paddingValues = paddingValues,
navigateUp = navigator::navigateUp,
navigateToCollectionList = navigator::navigateToCollectionList,
navigateToSavedContentList = navigator::navigateToSavedContent,
navigateToCollectionDetail = navigator::navigateToCollectionDetail,
Expand Down
Loading