-
Notifications
You must be signed in to change notification settings - Fork 3
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
add CountDownTimer in CameraViewmodel #9 #56
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.
고생 많았습니다~
import javax.inject.Inject | ||
|
||
@HiltViewModel | ||
class CameraViewModel @Inject constructor( | ||
): ViewModel() { | ||
// TODO: add viewmodel code here | ||
private val _progressState = mutableFloatStateOf(1f) | ||
val progressState: Float by _progressState |
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.
Float by _progressState
이 부분이 이해가 잘 안되는데요,
혹시 코드 설명 부탁드려도 될까요?
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.
촬영할때 LinearProgressbar를 두어 촬영 타이머가 얼만큼 됐는지 확인하는 작업을했습니다
해당부분은 그 progressbar의 state를 조정하기위함입니다
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.
재질문: progressbar의 state를 조정하기 위해 사용된 것은 알겠습니다. 질문의 요지는 by
키워드를 사용해서 progressState를 초기화했는데 그 부분의 의도가 궁금해서 물어봤습니다.
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.
by 키워드를 사용하지 않을경우 MutableFloatState에 대한 내용으로 정의되기때문에
@Suppress(names = {"NOTHING_TO_INLINE"})
public inline operator fun FloatState.getValue(
thisObj: Any?,
property: KProperty<*>
): Float
로 정의되어있는 내용을 불러오기 위해 by 키워드를 사용했습니다
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.
이해했습니다. 설명 감사합니다 ㅎㅎ
@@ -49,7 +61,15 @@ fun CameraScreen( | |||
// tint = MaterialTheme.colorScheme.primary | |||
// ) | |||
// } | |||
|
|||
LinearProgressIndicator( | |||
progress = { viewModel.progressState }, |
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.
질문: viewModel.progressState
가 Flow가 아니라 Float로 보입니다.
Flow를 구독하는 것이 아니라 직접 값을 변경하여 구현한 이유가 궁금합니다 😄
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.
Flow를 구독하여 사용하기엔 Timer의 onTick에 따라 동기적으로 동작해야할거같아 State를 사용했습니다
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.
flow를 구독하여 구현해도 충분히 동기적으로 구현될 것 같습니다. timer에서 원하는 시점에 flow 변수를 emit해주면 ui가 상태변화에 맞춰 반응할 것 같은데요, 동기/비동기가 사유라면 flow로 구현하는게 맞을 것 같습니다.
만약 지금 구현하는것이 시간적으로 애매하다면 // TODO
주석 부탁합니다~
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 주석 처리하였습니다
viewModel.startCaptureTimer() | ||
mjpegView?.startStream() | ||
} | ||
LifecycleEventEffect(Lifecycle.Event.ON_STOP) { |
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.
LifecycleStartEffect
, LifecycleResumeEffect
, DisposableEffect
도 있는 것 같네요
나중에 참고해보면 좋을 것 같아요 ㅎㅎ
https://wannabe-master.tistory.com/6
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.
넵 참고하겠습니다
fontWeight = FontWeight.Bold, | ||
fontSize = 24.sp, | ||
) | ||
} | ||
LifecycleEventEffect(Lifecycle.Event.ON_START) { |
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.
질문: 해당 Lifecycle이 activity의 생명주기에 트리거되는 것인지, CameraScreen에 트리거되는 것인지 궁금합니다. 만약 activity의 생명주기를 따라간다면 의도대로 동작하지 않을 것으로 보입니다 ㅎㅎ
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.
참고. ChatGPT
LifecycleEventEffect(Lifecycle.Event.ON_RESUME)가 CameraScreen() 안에 있을 때, 이 코드가 따르는 생명주기는 CameraScreen의 생명주기입니다. 이 생명주기는 CameraScreen이 포함된 컴포저블의 생명주기를 따르며, 컴포저블이 재구성(recomposition)되거나 화면에서 제거되었을 때 해당 이벤트도 영향을 받습니다.
하지만, CameraScreen이 액티비티 전체의 일부로 존재하므로, LifecycleEventEffect가 감지하는 실제 생명주기 이벤트는 CameraScreen이 포함된 컴포저블의 LifecycleOwner를 기반으로 동작하게 됩니다. 대부분의 경우, 이는 액티비티나 프래그먼트의 생명주기를 반영하게 됩니다.
즉, 만약 CameraScreen이 특정 화면이나 탭과 연결되어 있다면 해당 화면이나 탭의 생명주기를 따를 수 있으며, LifecycleOwner에 따라 다소 달라질 수 있습니다.
따라서 정확하게는, CameraScreen을 포함한 컴포저블이 언제 렌더링되고 언제 사라지느냐에 따라 생명주기가 결정되며, 액티비티의 생명주기를 따르는 것은 아닙니다.
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.
Screen이 onStart일때, Screen의 구성요소를 구성하는 부분이기 때문에 Timer를 먼저 정의하는 작업부터 해야했습니다.
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의 경우 start 이후, 혹은 activity가 꺼지지않고 다른activity로 옮겨갔다가 다시 왔을경우 create를 실행하지않고 resume을 실행됩니다.
현재 해당 설명의 경우 화면이 재구성되는 가짓수를 이야기되어야하는데 pause와 stop의 경우가 해당되는 경우입니다
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.
재질문: 음... 답변이 이해가 잘 되지 않는데요, 질문의 요지는 LifecycleEventEffect()
함수의 생명주기가 Activity를 기준으로 하는지 Screen을 기준으로 하는지 알고싶었다는 것입니다.
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.
LifecycleEventEffect()는 Screen 기준으로 진행됩니다
@@ -49,7 +61,15 @@ fun CameraScreen( | |||
// tint = MaterialTheme.colorScheme.primary |
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.
#29 이슈를 분리하여 PR 올릴 계획인가요?
만약 그렇다면 다음 PR에서 위에 주석 부분은 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.
넵 이슈 분리하여 작업하려합니다
해당 주석부분 삭제하겠습니다
@@ -49,7 +61,15 @@ fun CameraScreen( | |||
// tint = MaterialTheme.colorScheme.primary | |||
// ) | |||
// } | |||
|
|||
LinearProgressIndicator( | |||
progress = { viewModel.progressState }, |
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.
flow를 구독하여 구현해도 충분히 동기적으로 구현될 것 같습니다. timer에서 원하는 시점에 flow 변수를 emit해주면 ui가 상태변화에 맞춰 반응할 것 같은데요, 동기/비동기가 사유라면 flow로 구현하는게 맞을 것 같습니다.
만약 지금 구현하는것이 시간적으로 애매하다면 // TODO
주석 부탁합니다~
fontWeight = FontWeight.Bold, | ||
fontSize = 24.sp, | ||
) | ||
} | ||
LifecycleEventEffect(Lifecycle.Event.ON_START) { |
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.
재질문: 음... 답변이 이해가 잘 되지 않는데요, 질문의 요지는 LifecycleEventEffect()
함수의 생명주기가 Activity를 기준으로 하는지 Screen을 기준으로 하는지 알고싶었다는 것입니다.
import javax.inject.Inject | ||
|
||
@HiltViewModel | ||
class CameraViewModel @Inject constructor( | ||
): ViewModel() { | ||
// TODO: add viewmodel code here | ||
private val _progressState = mutableFloatStateOf(1f) | ||
val progressState: Float by _progressState |
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.
재질문: progressbar의 state를 조정하기 위해 사용된 것은 알겠습니다. 질문의 요지는 by
키워드를 사용해서 progressState를 초기화했는데 그 부분의 의도가 궁금해서 물어봤습니다.
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 javax.inject.Inject | ||
|
||
@HiltViewModel | ||
class CameraViewModel @Inject constructor( | ||
): ViewModel() { | ||
// TODO: add viewmodel code here | ||
private val _progressState = mutableFloatStateOf(1f) | ||
val progressState: Float by _progressState |
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.
이해했습니다. 설명 감사합니다 ㅎㅎ
[Issue] #9
[Descriptions]