Skip to content

Commit

Permalink
Disable sharing while the contents are being processed.
Browse files Browse the repository at this point in the history
  • Loading branch information
pandulapeter committed Oct 12, 2020
1 parent d00fd1c commit 6430942
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ import com.pandulapeter.beagle.core.manager.listener.OverlayListenerManager
import com.pandulapeter.beagle.core.manager.listener.UpdateListenerManager
import com.pandulapeter.beagle.core.manager.listener.VisibilityListenerManager
import com.pandulapeter.beagle.core.util.extension.hideKeyboard
import com.pandulapeter.beagle.core.view.LogDetailDialogFragment
import com.pandulapeter.beagle.core.view.NetworkLogDetailDialogFragment
import com.pandulapeter.beagle.core.view.logDetail.LogDetailDialogFragment
import com.pandulapeter.beagle.core.view.networkLogDetail.NetworkLogDetailDialogFragment
import com.pandulapeter.beagle.core.view.gallery.MediaPreviewDialogFragment
import com.pandulapeter.beagle.modules.LifecycleLogListModule
import com.pandulapeter.beagle.utils.view.GestureBlockingRecyclerView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ import com.pandulapeter.beagle.BeagleCore
import com.pandulapeter.beagle.core.OverlayFragment
import com.pandulapeter.beagle.core.util.SimpleActivityLifecycleCallbacks
import com.pandulapeter.beagle.core.util.extension.supportsDebugMenu
import com.pandulapeter.beagle.core.view.LogDetailDialogFragment
import com.pandulapeter.beagle.core.view.gallery.MediaPreviewDialogFragment
import com.pandulapeter.beagle.core.view.logDetail.LogDetailDialogFragment
import com.pandulapeter.beagle.core.view.networkLogDetail.NetworkLogDetailDialogFragment
import com.pandulapeter.beagle.modules.LifecycleLogListModule

internal class DebugMenuInjector(
Expand Down Expand Up @@ -177,5 +178,5 @@ internal class DebugMenuInjector(
}

private fun Fragment.shouldLogFragment() =
this !is OverlayFragment && this !is MediaPreviewDialogFragment && this !is LogDetailDialogFragment
this !is OverlayFragment && this !is MediaPreviewDialogFragment && this !is LogDetailDialogFragment && this !is NetworkLogDetailDialogFragment
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.pandulapeter.beagle.utils.extensions.drawable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.FileWriter
import java.io.IOException

Expand Down Expand Up @@ -46,7 +47,8 @@ internal fun Activity.shareFiles(uris: List<Uri>) {
}, null))
}

internal fun Activity.createAndShareFile(fileName: String, content: String) = GlobalScope.launch(Dispatchers.IO) {
@Suppress("BlockingMethodInNonBlockingContext")
internal suspend fun Activity.createAndShareFile(fileName: String, content: String) = withContext(Dispatchers.IO) {
val file = createLogFile(fileName)
try {
FileWriter(file).run {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pandulapeter.beagle.core.view
package com.pandulapeter.beagle.core.view.logDetail

import android.app.Dialog
import android.os.Bundle
Expand All @@ -14,8 +14,8 @@ import com.google.android.material.appbar.AppBarLayout
import com.pandulapeter.beagle.BeagleCore
import com.pandulapeter.beagle.core.R
import com.pandulapeter.beagle.core.util.extension.applyTheme
import com.pandulapeter.beagle.core.util.extension.createAndShareFile
import com.pandulapeter.beagle.core.util.extension.text
import com.pandulapeter.beagle.core.util.extension.viewModel
import com.pandulapeter.beagle.core.util.extension.withArguments
import com.pandulapeter.beagle.utils.BundleArgumentDelegate
import com.pandulapeter.beagle.utils.consume
Expand All @@ -30,6 +30,7 @@ internal class LogDetailDialogFragment : DialogFragment() {
private lateinit var scrollView: ScrollView
private lateinit var shareButton: MenuItem
private val scrollListener = ViewTreeObserver.OnScrollChangedListener { appBar.setLifted(scrollView.scrollY != 0) }
private val viewModel by viewModel<LogDetailDialogViewModel>()

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog.Builder(requireContext().applyTheme())
.setView(if (arguments?.isHorizontalScrollEnabled == true) R.layout.beagle_dialog_fragment_log_detail_scrolling else R.layout.beagle_dialog_fragment_log_detail)
Expand Down Expand Up @@ -58,6 +59,7 @@ internal class LogDetailDialogFragment : DialogFragment() {
}
setOnMenuItemClickListener(::onMenuItemClicked)
}
viewModel.isShareButtonEnabled.observe(this, { shareButton.isEnabled = it })
}
}

Expand All @@ -67,16 +69,10 @@ internal class LogDetailDialogFragment : DialogFragment() {
}

private fun onMenuItemClicked(menuItem: MenuItem) = when (menuItem.itemId) {
R.id.beagle_share -> consume(::shareLogs)
R.id.beagle_share -> consume { viewModel.shareLogs(activity, textView.text, arguments?.timestamp) }
else -> false
}

private fun shareLogs() {
textView.text?.let { text ->
activity?.createAndShareFile("${BeagleCore.implementation.behavior.getLogFileName(arguments?.timestamp ?: 0L)}.txt", text.toString())
}
}

companion object {
private var Bundle.content by BundleArgumentDelegate.CharSequence("content")
private var Bundle.timestamp by BundleArgumentDelegate.Long("timestamp")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.pandulapeter.beagle.core.view.logDetail

import android.app.Activity
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.pandulapeter.beagle.BeagleCore
import com.pandulapeter.beagle.core.util.extension.createAndShareFile
import kotlinx.coroutines.launch

internal class LogDetailDialogViewModel : ViewModel() {

private val _isShareButtonEnabled = MutableLiveData(true)
val isShareButtonEnabled: LiveData<Boolean> = _isShareButtonEnabled

fun shareLogs(activity: Activity?, text: CharSequence, timestamp: Long?) {
if (_isShareButtonEnabled.value == true) {
viewModelScope.launch {
_isShareButtonEnabled.postValue(false)
activity?.createAndShareFile("${BeagleCore.implementation.behavior.getLogFileName(timestamp ?: 0L)}.txt", text.toString())
_isShareButtonEnabled.postValue(true)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pandulapeter.beagle.core.view
package com.pandulapeter.beagle.core.view.networkLogDetail

import android.app.Dialog
import android.os.Bundle
Expand All @@ -15,7 +15,6 @@ import com.google.android.material.appbar.AppBarLayout
import com.pandulapeter.beagle.BeagleCore
import com.pandulapeter.beagle.core.R
import com.pandulapeter.beagle.core.util.extension.applyTheme
import com.pandulapeter.beagle.core.util.extension.createAndShareFile
import com.pandulapeter.beagle.core.util.extension.text
import com.pandulapeter.beagle.core.util.extension.viewModel
import com.pandulapeter.beagle.core.util.extension.visible
Expand All @@ -34,8 +33,8 @@ internal class NetworkLogDetailDialogFragment : DialogFragment() {
private lateinit var textView: TextView
private lateinit var scrollView: ScrollView
private lateinit var progressBar: ProgressBar
private lateinit var shareButton: MenuItem
private lateinit var toggleDetailsButton: MenuItem
private lateinit var shareButton: MenuItem
private val scrollListener = ViewTreeObserver.OnScrollChangedListener { appBar.setLifted(scrollView.scrollY != 0) }

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog.Builder(requireContext().applyTheme())
Expand All @@ -59,14 +58,14 @@ internal class NetworkLogDetailDialogFragment : DialogFragment() {
toolbar.run {
setNavigationOnClickListener { dismiss() }
navigationIcon = context.tintedDrawable(R.drawable.beagle_ic_close, textColor)
shareButton = menu.findItem(R.id.beagle_share).also {
it.title = context.text(BeagleCore.implementation.appearance.generalTexts.shareHint)
it.icon = context.tintedDrawable(R.drawable.beagle_ic_share, textColor)
}
toggleDetailsButton = menu.findItem(R.id.beagle_toggle_details).also {
it.isVisible = true
it.title = context.text(BeagleCore.implementation.appearance.networkLogTexts.toggleDetailsHint)
}
shareButton = menu.findItem(R.id.beagle_share).also {
it.title = context.text(BeagleCore.implementation.appearance.generalTexts.shareHint)
it.icon = context.tintedDrawable(R.drawable.beagle_ic_share, textColor)
}
setOnMenuItemClickListener(::onMenuItemClicked)
}
viewModel.isProgressBarVisible.observe(this, {
Expand All @@ -76,6 +75,7 @@ internal class NetworkLogDetailDialogFragment : DialogFragment() {
viewModel.areDetailsEnabled.observe(this, {
toggleDetailsButton.icon = context?.tintedDrawable(if (it) R.drawable.beagle_ic_toggle_details_on else R.drawable.beagle_ic_toggle_details_off, textColor)
})
viewModel.isShareButtonEnabled.observe(this, { shareButton.isEnabled = it })
viewModel.formattedContents.observe(this, { textView.text = it })
if (viewModel.isProgressBarVisible.value == true) {
viewModel.formatJson(
Expand All @@ -96,17 +96,11 @@ internal class NetworkLogDetailDialogFragment : DialogFragment() {
}

private fun onMenuItemClicked(menuItem: MenuItem) = when (menuItem.itemId) {
R.id.beagle_share -> consume(::shareLogs)
R.id.beagle_share -> consume { viewModel.shareLogs(activity, arguments?.timestamp) }
R.id.beagle_toggle_details -> consume(viewModel::onToggleDetailsButtonPressed)
else -> false
}

private fun shareLogs() {
textView.text?.let { text ->
activity?.createAndShareFile("${BeagleCore.implementation.behavior.getNetworkLogFileName(arguments?.timestamp ?: 0L)}.txt", text.toString())
}
}

companion object {
private var Bundle.isOutgoing by BundleArgumentDelegate.Boolean("isOutgoing")
private var Bundle.url by BundleArgumentDelegate.String("url")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pandulapeter.beagle.core.view
package com.pandulapeter.beagle.core.view.networkLogDetail

import android.app.Activity
import android.app.Application
import android.graphics.Typeface
import android.text.SpannableString
Expand All @@ -11,6 +12,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.pandulapeter.beagle.BeagleCore
import com.pandulapeter.beagle.core.util.extension.append
import com.pandulapeter.beagle.core.util.extension.createAndShareFile
import com.pandulapeter.beagle.core.util.extension.text
import kotlinx.coroutines.launch
import org.json.JSONArray
Expand All @@ -29,6 +31,8 @@ internal class NetworkLogDetailDialogViewModel(application: Application) : Andro
val isProgressBarVisible: LiveData<Boolean> = _isProgressBarVisible
private val _areDetailsEnabled = MutableLiveData(false)
val areDetailsEnabled: LiveData<Boolean> = _areDetailsEnabled
private val _isShareButtonEnabled = MutableLiveData(false)
val isShareButtonEnabled: LiveData<Boolean> = _isShareButtonEnabled
private val _formattedContents = MutableLiveData<CharSequence>("")
val formattedContents: LiveData<CharSequence> = _formattedContents
private var title: CharSequence = ""
Expand All @@ -54,12 +58,25 @@ internal class NetworkLogDetailDialogViewModel(application: Application) : Andro
formattedJson = payload.formatToJson()
refreshUi()
_isProgressBarVisible.postValue(false)
_isShareButtonEnabled.postValue(true)
}

fun onToggleDetailsButtonPressed() {
_areDetailsEnabled.value = !(areDetailsEnabled.value ?: true)
}

fun shareLogs(activity: Activity?, timestamp: Long?) {
if (_isShareButtonEnabled.value == true) {
_formattedContents.value?.let { text ->
viewModelScope.launch {
_isShareButtonEnabled.postValue(false)
activity?.createAndShareFile("${BeagleCore.implementation.behavior.getNetworkLogFileName(timestamp ?: 0L)}.txt", text.toString())
_isShareButtonEnabled.postValue(true)
}
}
}
}

private fun refreshUi() = _formattedContents.postValue(SpannableString(
title.run { if (_areDetailsEnabled.value == true) append(details) else this }
.append("\n\n${formattedJson}")
Expand Down

0 comments on commit 6430942

Please sign in to comment.