Disable scroll effect when click to a link in the topic.
This commit is contained in:
parent
4a5dbde8d3
commit
cbdacc199a
@ -9,6 +9,7 @@ Improvements 🙌:
|
|||||||
|
|
||||||
Bugfix 🐛:
|
Bugfix 🐛:
|
||||||
- Url previews sometimes attached to wrong message (#2561)
|
- Url previews sometimes attached to wrong message (#2561)
|
||||||
|
- Room Topic not displayed correctly after visiting a link (#2551)
|
||||||
|
|
||||||
Translations 🗣:
|
Translations 🗣:
|
||||||
-
|
-
|
||||||
|
@ -18,6 +18,7 @@ package im.vector.app.core.epoxy
|
|||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
|
import android.text.method.MovementMethod
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.view.doOnPreDraw
|
import androidx.core.view.doOnPreDraw
|
||||||
@ -25,7 +26,6 @@ import androidx.core.view.isVisible
|
|||||||
import com.airbnb.epoxy.EpoxyAttribute
|
import com.airbnb.epoxy.EpoxyAttribute
|
||||||
import com.airbnb.epoxy.EpoxyModelClass
|
import com.airbnb.epoxy.EpoxyModelClass
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.copyOnLongClick
|
|
||||||
|
|
||||||
@EpoxyModelClass(layout = R.layout.item_expandable_textview)
|
@EpoxyModelClass(layout = R.layout.item_expandable_textview)
|
||||||
abstract class ExpandableTextItem : VectorEpoxyModel<ExpandableTextItem.Holder>() {
|
abstract class ExpandableTextItem : VectorEpoxyModel<ExpandableTextItem.Holder>() {
|
||||||
@ -36,13 +36,16 @@ abstract class ExpandableTextItem : VectorEpoxyModel<ExpandableTextItem.Holder>(
|
|||||||
@EpoxyAttribute
|
@EpoxyAttribute
|
||||||
var maxLines: Int = 3
|
var maxLines: Int = 3
|
||||||
|
|
||||||
|
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
|
||||||
|
var movementMethod: MovementMethod? = null
|
||||||
|
|
||||||
private var isExpanded = false
|
private var isExpanded = false
|
||||||
private var expandedLines = 0
|
private var expandedLines = 0
|
||||||
|
|
||||||
override fun bind(holder: Holder) {
|
override fun bind(holder: Holder) {
|
||||||
super.bind(holder)
|
super.bind(holder)
|
||||||
holder.content.text = content
|
holder.content.text = content
|
||||||
holder.content.copyOnLongClick()
|
holder.content.movementMethod = movementMethod
|
||||||
|
|
||||||
holder.content.doOnPreDraw {
|
holder.content.doOnPreDraw {
|
||||||
if (holder.content.lineCount > maxLines) {
|
if (holder.content.lineCount > maxLines) {
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.core.ui.views
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import androidx.appcompat.widget.AppCompatTextView
|
||||||
|
|
||||||
|
class NonScrollingTextView : AppCompatTextView {
|
||||||
|
constructor(context: Context) : super(context)
|
||||||
|
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
|
||||||
|
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
|
||||||
|
|
||||||
|
override fun scrollTo(x: Int, y: Int) {
|
||||||
|
// NOOP
|
||||||
|
}
|
||||||
|
}
|
@ -26,6 +26,8 @@ import im.vector.app.core.resources.ColorProvider
|
|||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.core.ui.list.genericFooterItem
|
import im.vector.app.core.ui.list.genericFooterItem
|
||||||
import im.vector.app.features.home.ShortcutCreator
|
import im.vector.app.features.home.ShortcutCreator
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.tools.createLinkMovementMethod
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel
|
import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
||||||
@ -53,6 +55,7 @@ class RoomProfileController @Inject constructor(
|
|||||||
fun onSettingsClicked()
|
fun onSettingsClicked()
|
||||||
fun onLeaveRoomClicked()
|
fun onLeaveRoomClicked()
|
||||||
fun onRoomIdClicked()
|
fun onRoomIdClicked()
|
||||||
|
fun onUrlInTopicLongClicked(url: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun buildModels(data: RoomProfileViewState?) {
|
override fun buildModels(data: RoomProfileViewState?) {
|
||||||
@ -71,6 +74,16 @@ class RoomProfileController @Inject constructor(
|
|||||||
id("topic")
|
id("topic")
|
||||||
content(it)
|
content(it)
|
||||||
maxLines(2)
|
maxLines(2)
|
||||||
|
movementMethod(createLinkMovementMethod(object : TimelineEventController.UrlClickCallback {
|
||||||
|
override fun onUrlClicked(url: String, title: String): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUrlLongClicked(url: String): Boolean {
|
||||||
|
callback?.onUrlInTopicLongClicked(url)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,6 +261,10 @@ class RoomProfileFragment @Inject constructor(
|
|||||||
copyToClipboard(requireContext(), roomProfileArgs.roomId)
|
copyToClipboard(requireContext(), roomProfileArgs.roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onUrlInTopicLongClicked(url: String) {
|
||||||
|
copyToClipboard(requireContext(), url, true)
|
||||||
|
}
|
||||||
|
|
||||||
private fun onShareRoomProfile(permalink: String) {
|
private fun onShareRoomProfile(permalink: String) {
|
||||||
startSharePlainTextIntent(
|
startSharePlainTextIntent(
|
||||||
fragment = this,
|
fragment = this,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="16dp">
|
android:padding="16dp">
|
||||||
|
|
||||||
<TextView
|
<im.vector.app.core.ui.views.NonScrollingTextView
|
||||||
android:id="@+id/expandableContent"
|
android:id="@+id/expandableContent"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user