Skip to content

Commit 16bae89

Browse files
committed
Improve expand buttons for long texts
This also improves the performance of BBCodeViews significantly
1 parent d3e2f22 commit 16bae89

File tree

4 files changed

+12
-64
lines changed

4 files changed

+12
-64
lines changed

app/src/main/kotlin/com/proxerme/app/adapter/media/CommentAdapter.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,20 +147,12 @@ class CommentAdapter : PagingAdapter<Comment>() {
147147
}
148148

149149
private fun bindExpanded(item: Comment) {
150-
val maximumHeight = DeviceUtils.convertDpToPx(comment.context, 150f)
151-
152-
if (comment.measureAndGetHeight(32f) <= maximumHeight) {
153-
expand.visibility = View.GONE
154-
} else {
155-
expand.visibility = View.VISIBLE
156-
}
157-
158150
if (expandedMap.get(item.id.toLong(), false)) {
159151
comment.maxHeight = Int.MAX_VALUE
160152

161153
ViewCompat.animate(expand).rotation(ROTATION_HALF)
162154
} else {
163-
comment.maxHeight = maximumHeight
155+
comment.maxHeight = DeviceUtils.convertDpToPx(comment.context, 150f)
164156

165157
ViewCompat.animate(expand).rotation(0f)
166158
}

app/src/main/kotlin/com/proxerme/app/adapter/news/NewsAdapter.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import com.proxerme.app.adapter.framework.PagingAdapter
1717
import com.proxerme.app.util.DeviceUtils
1818
import com.proxerme.app.util.TimeUtils
1919
import com.proxerme.app.util.bindView
20-
import com.proxerme.app.util.measureAndGetHeight
2120
import com.proxerme.library.connection.notifications.entitiy.News
2221
import com.proxerme.library.info.ProxerUrlHolder
2322
import java.util.*
2423

24+
2525
/**
2626
* TODO: Describe Class
2727
*
@@ -114,12 +114,6 @@ class NewsAdapter : PagingAdapter<News>() {
114114
time.text = TimeUtils.convertToRelativeReadableTime(time.context,
115115
item.time)
116116

117-
if (description.measureAndGetHeight(14f) <= maximumHeight) {
118-
expand.visibility = View.GONE
119-
} else {
120-
expand.visibility = View.VISIBLE
121-
}
122-
123117
if (expanded.containsKey(item.id)) {
124118
description.maxHeight = Int.MAX_VALUE
125119

@@ -130,6 +124,14 @@ class NewsAdapter : PagingAdapter<News>() {
130124
ViewCompat.animate(expand).rotation(0f)
131125
}
132126

127+
description.post {
128+
if (description.measuredHeight < maximumHeight) {
129+
expand.visibility = View.GONE
130+
} else {
131+
expand.visibility = View.VISIBLE
132+
}
133+
}
134+
133135
Glide.with(image.context)
134136
.load(ProxerUrlHolder.getNewsImageUrl(item.id, item.imageId).toString())
135137
.diskCacheStrategy(DiskCacheStrategy.SOURCE)

app/src/main/kotlin/com/proxerme/app/util/Extensions.kt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ import android.support.v4.content.ContextCompat
1010
import android.support.v7.widget.LinearLayoutManager
1111
import android.support.v7.widget.RecyclerView
1212
import android.support.v7.widget.StaggeredGridLayoutManager
13-
import android.view.View
1413
import android.view.WindowManager
1514
import android.view.inputmethod.InputMethodManager
16-
import android.widget.TextView
1715
import com.proxerme.app.R
1816
import com.proxerme.app.activity.WebViewActivity
1917
import com.proxerme.app.adapter.framework.PagingAdapter
@@ -38,18 +36,6 @@ val Context.alarmManager: AlarmManager
3836
val Context.windowManager: WindowManager
3937
get() = getSystemService(Context.WINDOW_SERVICE) as WindowManager
4038

41-
fun TextView.measureAndGetHeight(totalMarginDp: Float): Int {
42-
val widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(
43-
DeviceUtils.getScreenWidth(context) - DeviceUtils.convertDpToPx(context, totalMarginDp),
44-
View.MeasureSpec.AT_MOST)
45-
val heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0,
46-
View.MeasureSpec.UNSPECIFIED)
47-
48-
measure(widthMeasureSpec, heightMeasureSpec)
49-
50-
return measuredHeight
51-
}
52-
5339
fun CustomTabsHelperFragment.openHttpPage(activity: Activity, url: HttpUrl) {
5440
val customTabsIntent = CustomTabsIntent.Builder(session)
5541
.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary))

app/src/main/kotlin/com/proxerme/app/view/bbcode/BBCodeView.kt

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import android.content.Context
44
import android.support.v7.widget.AppCompatTextView
55
import android.util.AttributeSet
66
import android.view.View
7-
import android.view.ViewGroup
87
import android.widget.LinearLayout
9-
import com.proxerme.app.util.DeviceUtils
108
import java.util.*
119
import kotlin.properties.Delegates
1210

@@ -18,18 +16,11 @@ import kotlin.properties.Delegates
1816
class BBCodeView : LinearLayout {
1917

2018
var bbCode by Delegates.observable<String?>(null, { property, old, new ->
21-
if (old != new) {
22-
build()
23-
}
19+
build()
2420
})
2521

2622
var maxHeight = Int.MAX_VALUE
27-
28-
var expanded by Delegates.observable(true, { property, old, new ->
29-
if (old != new) {
30-
invalidate()
31-
}
32-
})
23+
var expanded = true
3324

3425
var spoilerStateListener: ((spoilerStates: List<Boolean>) -> Unit)? = null
3526

@@ -73,29 +64,6 @@ class BBCodeView : LinearLayout {
7364
}
7465
}
7566

76-
fun measureAndGetHeight(totalMarginDp: Float): Int {
77-
val previousMaxHeight = maxHeight
78-
val previousSpoilerStates = getSpoilerStates()
79-
80-
maxHeight = Int.MAX_VALUE
81-
82-
setSpoilerStates(BooleanArray(spoilers.size, { true }).toList())
83-
84-
val widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(DeviceUtils.getScreenWidth(context) -
85-
DeviceUtils.convertDpToPx(context, totalMarginDp), View.MeasureSpec.AT_MOST)
86-
val heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(ViewGroup.LayoutParams.WRAP_CONTENT,
87-
View.MeasureSpec.UNSPECIFIED)
88-
89-
measure(widthMeasureSpec, heightMeasureSpec)
90-
91-
val result = measuredHeight
92-
93-
maxHeight = previousMaxHeight
94-
setSpoilerStates(previousSpoilerStates)
95-
96-
return result
97-
}
98-
9967
private fun build() {
10068
removeAllViews()
10169
spoilers.clear()

0 commit comments

Comments
 (0)