Skip to content

Commit

Permalink
Improve the appearance of the collapsing tags of the network detail d…
Browse files Browse the repository at this point in the history
…ialog.
  • Loading branch information
pandulapeter committed Oct 17, 2020
1 parent 526c3f8 commit 02050f1
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,9 @@ internal class NetworkLogDetailDialogFragment : DialogFragment() {
}
viewModel.isProgressBarVisible.observe(this, {
progressBar.visible = it
horizontalScrollView.visible = !it
if (!it) {
horizontalScrollView.visible = true
}
})
viewModel.longestLine.observe(this, { line ->
context?.let { context ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,14 @@ internal class NetworkLogDetailDialogViewModel(application: Application) : Andro
init {
areTagsExpanded.observeForever { areDetailsEnabled ->
viewModelScope.launch {
_isProgressBarVisible.postValue(true)
shouldShowMetadata = areDetailsEnabled
collapsedLineIndices.clear()
if (!areDetailsEnabled) {
collapsedLineIndices.addAll(items.value?.filter { it is LineViewHolder.UiModel && it.isClickable }?.map { it.lineIndex }.orEmpty())
}
refreshUi()
_isProgressBarVisible.postValue(false)
}
}
}
Expand Down Expand Up @@ -153,45 +155,55 @@ internal class NetworkLogDetailDialogViewModel(application: Application) : Andro
}

private suspend fun refreshUi() = withContext(Dispatchers.Default) {
_items.postValue(mutableListOf<NetworkLogDetailListItem>().apply {
add(TitleViewHolder.UiModel(title = title))
add(
HeaderViewHolder.UiModel(
lineIndex = -300,
content = metadataText,
isCollapsed = !shouldShowMetadata
if (jsonLines.isNotEmpty()) {
_items.postValue(mutableListOf<NetworkLogDetailListItem>().apply {
add(TitleViewHolder.UiModel(title = title))
add(
HeaderViewHolder.UiModel(
lineIndex = -300,
content = metadataText,
isCollapsed = !shouldShowMetadata
)
)
)
if (shouldShowMetadata) {
add(DetailsViewHolder.UiModel(details.trim()))
}
var levelToSkip = Int.MAX_VALUE
val linesToAdd = jsonLines.mapNotNull { line ->
if (collapsedLineIndices.contains(line.index)) {
levelToSkip = min(levelToSkip, line.level)
if (shouldShowMetadata) {
add(DetailsViewHolder.UiModel(details.trim()))
}
when {
line.level == levelToSkip -> {
if (!collapsedLineIndices.contains(line.index)) {
levelToSkip = Int.MAX_VALUE
var levelToSkip = Int.MAX_VALUE
lateinit var lastCollapsedLine: Line
val linesToAdd = jsonLines.mapNotNull { line ->
if (collapsedLineIndices.contains(line.index)) {
levelToSkip = min(levelToSkip, line.level)
}
when {
line.level == levelToSkip -> {
if (!collapsedLineIndices.contains(line.index)) {
levelToSkip = Int.MAX_VALUE
}
if (line.level == levelToSkip) {
line.copy(content = "${line.content}").also {
lastCollapsedLine = it
}
} else {
lastCollapsedLine.content += line.content
null
}
}
if (line.level == levelToSkip) line.copy(content = "${line.content}") else line
line.level < levelToSkip -> line
else -> null
}
line.level < levelToSkip -> line
else -> null
}
}
addAll(linesToAdd.map { line ->
LineViewHolder.UiModel(
lineIndex = line.index,
content = line.content,
level = line.level,
hasCollapsingContent = hasCollapsingContent,
isClickable = line.level != 0 && line.index != jsonLines.lastIndex && line.level < jsonLines[line.index + 1].level,
isCollapsed = collapsedLineIndices.contains(line.index)
)
addAll(linesToAdd.map { line ->
LineViewHolder.UiModel(
lineIndex = line.index,
content = line.content,
level = line.level,
hasCollapsingContent = hasCollapsingContent,
isClickable = line.level != 0 && line.index != jsonLines.lastIndex && line.level < jsonLines[line.index + 1].level,
isCollapsed = collapsedLineIndices.contains(line.index)
)
})
})
})
}
}

private fun List<String>.formatHeaders() = if (isNullOrEmpty()) " [${textNone}]" else joinToString("") { header -> "\n$header" }
Expand Down Expand Up @@ -220,7 +232,7 @@ internal class NetworkLogDetailDialogViewModel(application: Application) : Andro

private data class Line(
val index: Int,
val content: String,
var content: String,
val level: Int
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ internal class HeaderViewHolder private constructor(

fun bind(uiModel: UiModel) = textView.run {
setText(uiModel.content)
setCompoundDrawablesWithIntrinsicBounds(null, null, if (uiModel.isCollapsed) drawableExpand else drawableCollapse, null)
setCompoundDrawablesWithIntrinsicBounds(if (uiModel.isCollapsed) drawableExpand else drawableCollapse, null, null, null)
}

data class UiModel(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal class LineViewHolder private constructor(
private val drawableExpand by lazy { itemView.context.tintedDrawable(R.drawable.beagle_ic_expand, textView.textColors.defaultColor) }
private val drawableCollapse by lazy { itemView.context.tintedDrawable(R.drawable.beagle_ic_collapse, textView.textColors.defaultColor) }
private val drawableEmpty by lazy { itemView.context.tintedDrawable(R.drawable.beagle_ic_empty, textView.textColors.defaultColor) }
private val contentPadding = itemView.context.dimension(R.dimen.beagle_large_content_padding)
private val largeContentPadding = itemView.context.dimension(R.dimen.beagle_large_content_padding)

init {
itemView.setOnClickListener {
Expand All @@ -42,9 +42,9 @@ internal class LineViewHolder private constructor(
null, null, null
)
setPadding(
if (uiModel.hasCollapsingContent) max(contentPadding * (uiModel.level - 1), 0) else contentPadding * uiModel.level,
largeContentPadding + if (uiModel.hasCollapsingContent) max(largeContentPadding * (uiModel.level - 1), 0) else largeContentPadding * uiModel.level,
paddingTop,
if (uiModel.isClickable) contentPadding else 0,
largeContentPadding * if (uiModel.isClickable) 2 else 1,
paddingBottom
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<FrameLayout
android:id="@+id/beagle_frame_layout"
android:layout_width="match_parent"
android:animateLayoutChanges="true"
android:layout_height="match_parent">

<com.pandulapeter.beagle.core.view.TolerantHorizontalScrollView
Expand Down Expand Up @@ -57,11 +58,7 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingStart="@dimen/beagle_large_content_padding"
android:paddingLeft="@dimen/beagle_large_content_padding"
android:paddingTop="@dimen/beagle_content_padding"
android:paddingEnd="@dimen/beagle_large_content_padding"
android:paddingRight="@dimen/beagle_large_content_padding"
android:paddingBottom="@dimen/beagle_large_content_padding"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/beagle_longest_text_view"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/beagle_text_view"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/beagle_large_content_padding"
android:background="?attr/selectableItemBackground"
android:drawablePadding="@dimen/beagle_content_padding_small"
android:gravity="center_vertical"
android:paddingStart="@dimen/beagle_large_content_padding"
android:paddingLeft="@dimen/beagle_large_content_padding"
android:paddingTop="@dimen/beagle_content_padding_small"
android:paddingEnd="@dimen/beagle_large_content_padding"
android:paddingRight="@dimen/beagle_large_content_padding"
android:paddingBottom="@dimen/beagle_content_padding_small"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/beagle_text_view"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="@dimen/beagle_medium_content_padding"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:paddingStart="@dimen/beagle_large_content_padding"
android:paddingLeft="@dimen/beagle_large_content_padding"
android:paddingEnd="@dimen/beagle_large_content_padding"
android:paddingRight="@dimen/beagle_large_content_padding"
android:paddingBottom="@dimen/beagle_large_content_padding"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
Expand Down

0 comments on commit 02050f1

Please sign in to comment.