Skip to content

Commit

Permalink
Refactor: combine liveData into actionEvents, clean up log lines, and…
Browse files Browse the repository at this point in the history
… unneeded comments
  • Loading branch information
zwarm committed Jun 15, 2024
1 parent e863a33 commit b22898c
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@ package org.wordpress.android.ui.voicetocontent
import org.wordpress.android.fluxc.model.SiteModel

sealed class VoiceToContentActionEvent {
data object Dismiss: VoiceToContentActionEvent()
data class LaunchEditPost(val site: SiteModel, val content: String) : VoiceToContentActionEvent()
data class LaunchExternalBrowser(val url: String) : VoiceToContentActionEvent()
data object RequestPermission : VoiceToContentActionEvent()

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,30 @@ import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.viewModels
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import dagger.hilt.android.AndroidEntryPoint
import org.wordpress.android.ui.compose.theme.AppTheme
import org.wordpress.android.R
import org.wordpress.android.util.audio.IAudioRecorder.Companion.REQUIRED_RECORDING_PERMISSIONS
import android.provider.Settings
import android.util.Log
import android.widget.FrameLayout
import androidx.compose.material.ExperimentalMaterialApi
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import org.wordpress.android.ui.ActivityLauncher
import org.wordpress.android.ui.ActivityNavigator
import org.wordpress.android.ui.PagePostCreationSourcesDetail
import org.wordpress.android.ui.compose.theme.AppTheme
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.Dismiss
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.LaunchEditPost
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.LaunchExternalBrowser
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.RequestPermission
import org.wordpress.android.util.audio.IAudioRecorder.Companion.REQUIRED_RECORDING_PERMISSIONS
import javax.inject.Inject

@AndroidEntryPoint
Expand Down Expand Up @@ -80,17 +83,15 @@ class VoiceToContentDialogFragment : BottomSheetDialogFragment() {
}

override fun onSlide(bottomSheet: View, slideOffset: Float) {
// Handle the slide offset if needed
}
})

// Disable touch interception by the bottom sheet to allow nested scrolling
// Disable touch interception by the bottom sheet to allow nested scrolling for landscape and small screens
bottomSheet.setOnTouchListener { _, _ -> false }
}

// Observe the ViewModel to update the cancelable state of closing on outside touch
viewModel.isCancelableOutsideTouch.observe(this) { cancelable ->
Log.i(javaClass.simpleName, "***=> disable outside touch")
dialog.setCanceledOnTouchOutside(cancelable)
}

Expand All @@ -107,21 +108,12 @@ class VoiceToContentDialogFragment : BottomSheetDialogFragment() {
}

private fun observeViewModel() {
viewModel.requestPermission.observe(viewLifecycleOwner) {
requestAllPermissionsForRecording()
}

viewModel.dismiss.observe(viewLifecycleOwner) {
dismiss()
}

viewModel.onIneligibleForVoiceToContent.observe(viewLifecycleOwner) { url ->
launchIneligibleForVoiceToContent(url)
}

viewModel.actionEvent.observe(viewLifecycleOwner) { actionEvent ->
when(actionEvent) {
is VoiceToContentActionEvent.LaunchEditPost -> launchEditPost(actionEvent)
is LaunchEditPost -> launchEditPost(actionEvent)
is LaunchExternalBrowser -> launchIneligibleForVoiceToContent(actionEvent)
is RequestPermission -> requestAllPermissionsForRecording()
is Dismiss -> dismiss()
}
}
}
Expand Down Expand Up @@ -159,13 +151,13 @@ class VoiceToContentDialogFragment : BottomSheetDialogFragment() {
.show()
}

private fun launchIneligibleForVoiceToContent(url: String) {
private fun launchIneligibleForVoiceToContent(event: LaunchExternalBrowser) {
context?.let {
activityNavigator.openIneligibleForVoiceToContent(it, url)
activityNavigator.openIneligibleForVoiceToContent(it, event.url)
}
}

private fun launchEditPost(event: VoiceToContentActionEvent.LaunchEditPost) {
private fun launchEditPost(event: LaunchEditPost) {
activity?.let {
ActivityLauncher.addNewPostWithContentFromAIForResult(
it,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.wordpress.android.ui.voicetocontent

import android.content.pm.PackageManager
import android.util.Log
import androidx.core.content.ContextCompat
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
Expand All @@ -17,6 +16,10 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat
import org.wordpress.android.fluxc.model.jetpackai.JetpackAIAssistantFeature
import org.wordpress.android.modules.UI_THREAD
import org.wordpress.android.ui.mysite.SelectedSiteRepository
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.Dismiss
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.LaunchEditPost
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.LaunchExternalBrowser
import org.wordpress.android.ui.voicetocontent.VoiceToContentActionEvent.RequestPermission
import org.wordpress.android.ui.voicetocontent.VoiceToContentUIStateType.ERROR
import org.wordpress.android.ui.voicetocontent.VoiceToContentUIStateType.INELIGIBLE_FOR_FEATURE
import org.wordpress.android.ui.voicetocontent.VoiceToContentUIStateType.INITIALIZING
Expand Down Expand Up @@ -45,20 +48,11 @@ class VoiceToContentViewModel @Inject constructor(
private val prepareVoiceToContentUseCase: PrepareVoiceToContentUseCase,
private val logger: VoiceToContentTelemetry
) : ScopedViewModel(mainDispatcher) {
private val _requestPermission = MutableLiveData<Unit>()
val requestPermission = _requestPermission as LiveData<Unit>

private val _dismiss = MutableLiveData<Unit>()
val dismiss = _dismiss as LiveData<Unit>

private val _recordingUpdate = MutableLiveData<RecordingUpdate>()
val recordingUpdate: LiveData<RecordingUpdate> get() = _recordingUpdate

private val _onIneligibleForVoiceToContent = MutableLiveData<String>()
val onIneligibleForVoiceToContent = _onIneligibleForVoiceToContent as LiveData<String>
val recordingUpdate = _recordingUpdate as LiveData<RecordingUpdate>

private val _isCancelableOutsideTouch = MutableLiveData(true)
val isCancelableOutsideTouch: LiveData<Boolean> get() = _isCancelableOutsideTouch
val isCancelableOutsideTouch = _isCancelableOutsideTouch as LiveData<Boolean>

private val _actionEvent = MutableLiveData<VoiceToContentActionEvent>()
val actionEvent = _actionEvent as LiveData<VoiceToContentActionEvent>
Expand Down Expand Up @@ -127,8 +121,6 @@ class VoiceToContentViewModel @Inject constructor(
stopRecording()
} else {
updateRecordingData(update)
// todo: Handle other updates if needed when UI is ready, e.g., elapsed time and file size
Log.d("AudioRecorder", "Recording update: $update")
}
}
}
Expand Down Expand Up @@ -185,16 +177,16 @@ class VoiceToContentViewModel @Inject constructor(
when (val result = voiceToContentUseCase.execute(site, file)) {
is VoiceToContentResult.Failure -> result.transitionToError()
is VoiceToContentResult.Success ->
_actionEvent.postValue(VoiceToContentActionEvent.LaunchEditPost(site, result.content))
_actionEvent.postValue(LaunchEditPost(site, result.content))
}
_dismiss.postValue(Unit)
_actionEvent.postValue(Dismiss)
}
}

// Permissions
private fun onRequestPermission() {
logger.track(Stat.VOICE_TO_CONTENT_BUTTON_START_RECORDING_TAPPED)
_requestPermission.postValue(Unit)
_actionEvent.postValue(RequestPermission)
}

private fun hasAllPermissionsForRecording(): Boolean {
Expand Down Expand Up @@ -224,7 +216,7 @@ class VoiceToContentViewModel @Inject constructor(
private fun onClose() {
logger.track(Stat.VOICE_TO_CONTENT_BUTTON_CLOSE_TAPPED)
recordingUseCase.endRecordingSession()
_dismiss.postValue(Unit)
_actionEvent.postValue(Dismiss)
}

private fun onRetryTap() {
Expand All @@ -235,7 +227,7 @@ class VoiceToContentViewModel @Inject constructor(
private fun onLinkTap(url: String?) {
logger.track(Stat.VOICE_TO_CONTENT_BUTTON_UPGRADE_TAPPED)
url?.let {
_onIneligibleForVoiceToContent.postValue(it)
_actionEvent.postValue(LaunchExternalBrowser(it))
}
}

Expand Down

0 comments on commit b22898c

Please sign in to comment.