-
Notifications
You must be signed in to change notification settings - Fork 1
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/explore #22
Feature/explore #22
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR 생성 시 효과적이고 의미있는 리뷰를 위해 다음과 같은 부분을 고려해주시면 좋겠습니다.
-
PR의 제목은 이 PR에서 어떤 작업이 있었는지, 무엇을 중점으로 보아야 하는지를 요약합니다. 따라서 리뷰어는 어떤 작업이 있을지 예상이 가능합니다. Feature/explore와 같은 제목은 리뷰어에게 그 어떤 단서도 주어지지 않습니다.
-
PR의 내용은 작업물의 내용에 대한 상세를 작성해주시기 바랍니다. 이러한 내용을 토대로 작업물의 이해도를 높이고, 어떤 부분을 고려하면 좋을지 리뷰어에게 단서를 제공합니다. 리뷰를 하는 사람은 현재 PR이 어떤 작업인지 컨텍스트가 전혀 없다는 것을 고려하여 가능한 간결하고 정확한 데이터를 제공해주어야 합니다.
-
하나의 PR은 하나의 작업만을 포함하는게 좋습니다. 현재의 PR은 작업 내용이 다양하고, 커밋이 많습니다. 이것은 리뷰어에게 혼란을 주기 쉽습니다. 일반적으로 효율적인 리뷰를 위한 변화량은 400라인을 권장합니다.
-
일관적인 PR 생성을 위해 템플릿 작성을 권장합니다.
|
||
if (checkStoragePermission(this)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
onResume에서 storage permission을 체크하여 setContent를 호출하는 것은 바람직하지 않은 구조같습니다.
권한에 따라 UI의 상태가 변경되어야 한다면, 그에 따른 UI 상태를 Composable에 넘겨주어 리컴포지션할 수 있도록 구조를 변경하는게 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추상 클래스로 변경했습니다
|
||
internal fun checkStoragePermission( | ||
activity: ComponentActivity, | ||
): Boolean = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Util함수로 구현하는 것 보다, 외부 스토리지 권한 로직을 캡슐화한 클래스 또는 인터페이스로 제공하는 것이 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추상 클래스로 변경 했습니다
activity.startActivityForResult(intent, MANAGE_EXTERNAL_STORAGE_PERMISSION_REQUEST) | ||
} | ||
|
||
fun requestStoragePermissionApi19(activity: ComponentActivity) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 함수가 public인 이유가 무엇일까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
단순 실수였습니다 바로 위 PR에서 수정했습니다
.clearAndSetSemantics { }, | ||
imageVector = SeeDocsIcon.PDF, | ||
contentDescription = null, | ||
tint = Color.Unspecified |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tint는 Color.Unspecified로 적용되는 것이 맞나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 혹시 뭔가 이상한점이 있나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구현의 의도, 실수를 확인하기 위한 질문입니다.
보통 tint 파라미터를 넘기는 경우는 특정한 컬러로 표현하기 위함인데, Color.Unspecified 를 지정하는 이유가 궁금해서요.
color = Theme.colors.text | ||
) | ||
Text( | ||
text = "2023.01.01", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
하드코딩된 이유가 궁금합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
외부로 부터 데이터를 받을 부분이라 UI를 보기위한 더미 데이터입니다.
기능 구현 이후 수정하였습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나중에 구현이 되어야할 부분이라면 TODO 코멘트를 남겨주시는 것이 좋을 것 같습니다.
private fun readPDFOrDirectory( | ||
path: String, | ||
): List<Item> = | ||
File(path).listFiles()?.filter { !it.isHidden && (it.isDirectory || it.extension == "pdf") }?.map { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 함수를 UI 쓰레드에서 호출해도 괜찮을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
백그라운드 스레드에서 호출하는게 맞을 것 같네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네, TODO 등의 코멘트를 달고 다른 PR에서 수정하시면 될 것 같습니다.
) | ||
}?: emptyList() | ||
|
||
private data class Item( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
UI 모델이라면 분리된 파일 또는 패키지에 위치하는 것은 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여러 화면에서 사용될 모델 이라 생각해서 임시로 안에 적은 뒤
다른 화면 로컬 파일 설정등을 하며 데이터 윤곽이 잡히면 수정할 계획이었습니다.
|
||
import androidx.lifecycle.ViewModel | ||
import dagger.hilt.android.lifecycle.HiltViewModel | ||
import javax.inject.Inject |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
미완성된 또는 미사용되는 코드는 포함하지 않아도 될 것 같습니다.
), | ||
) { | ||
tabs.forEach { tab -> | ||
Item( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BottomTabItem과 같이 명확한 이름을 주는 것은 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정하겠습니다
.idea/gradle.xml
Outdated
@@ -37,6 +37,7 @@ | |||
<option value="$PROJECT_DIR$/feature/bookmark" /> | |||
<option value="$PROJECT_DIR$/feature/explore" /> | |||
<option value="$PROJECT_DIR$/feature/main" /> | |||
<option value="$PROJECT_DIR$/feature/pdf" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 파일은 git에 올릴 필요가 있는 파일인가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필요없는걸 같이 PR 한것 같습니다
@Guri999 SonarQube 결과가 실패인 이유를 확인하고 수정해주세요. |
… feature/explore # Conflicts: # core/ui/src/main/java/kr/co/ui/widget/FileBox.kt # feature/main/src/main/java/kr/co/main/navigation/MainNavHost.kt
Quality Gate passedIssues Measures |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM + 코멘트를 확인해주세요.
꼭 반영해야할 필요는 없습니다만, 한번 고민해보시면 좋을 것 같아요.
import androidx.core.app.ActivityCompat | ||
import androidx.core.content.ContextCompat | ||
|
||
abstract class PermissionActivity : ComponentActivity() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추상화된 함수를 제공하지 않는다면 open class가 더 어울릴 것 같습니다.
|
||
abstract class PermissionActivity : ComponentActivity() { | ||
|
||
internal fun ComponentActivity.checkStoragePermission(): Boolean = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
함수들이 이미 ComponentActivity 내에 있으므로 확장함수로 구현하지 않아도 될 것 같아요.
import androidx.core.app.ActivityCompat | ||
import androidx.core.content.ContextCompat | ||
|
||
abstract class PermissionActivity : ComponentActivity() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
권한이 Storage permission으로 한정되어 있으므로 이름을 명확하게 하는것이 좋을 것 같아요.
import androidx.core.app.ActivityCompat | ||
import androidx.core.content.ContextCompat | ||
|
||
abstract class PermissionActivity : ComponentActivity() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어차피 캡슐화를 할 것이라면, 스토리지 권한만을 위한 로직의 책임을 가진 class로 만들고, 사용하는 곳에서 활용하도록 하는것도 좋을 것 같아요.
Explore 화면
LocalStorage 접근