From cbdacc199ab08ff93c3d6ee950a278e8ef067ced Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Dec 2020 17:17:01 +0300 Subject: [PATCH 1/2] Disable scroll effect when click to a link in the topic. --- CHANGES.md | 1 + .../app/core/epoxy/ExpandableTextItem.kt | 7 +++-- .../app/core/ui/views/NonScrollingTextView.kt | 31 +++++++++++++++++++ .../roomprofile/RoomProfileController.kt | 13 ++++++++ .../roomprofile/RoomProfileFragment.kt | 4 +++ .../res/layout/item_expandable_textview.xml | 2 +- 6 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/core/ui/views/NonScrollingTextView.kt diff --git a/CHANGES.md b/CHANGES.md index a028ef6f1e..27229361a7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Improvements 🙌: Bugfix 🐛: - Url previews sometimes attached to wrong message (#2561) + - Room Topic not displayed correctly after visiting a link (#2551) Translations 🗣: - diff --git a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt index 3dceec48ef..eb8d4a41c4 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt @@ -18,6 +18,7 @@ package im.vector.app.core.epoxy import android.animation.ObjectAnimator import android.text.TextUtils +import android.text.method.MovementMethod import android.widget.ImageView import android.widget.TextView import androidx.core.view.doOnPreDraw @@ -25,7 +26,6 @@ import androidx.core.view.isVisible import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass import im.vector.app.R -import im.vector.app.core.extensions.copyOnLongClick @EpoxyModelClass(layout = R.layout.item_expandable_textview) abstract class ExpandableTextItem : VectorEpoxyModel() { @@ -36,13 +36,16 @@ abstract class ExpandableTextItem : VectorEpoxyModel( @EpoxyAttribute var maxLines: Int = 3 + @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) + var movementMethod: MovementMethod? = null + private var isExpanded = false private var expandedLines = 0 override fun bind(holder: Holder) { super.bind(holder) holder.content.text = content - holder.content.copyOnLongClick() + holder.content.movementMethod = movementMethod holder.content.doOnPreDraw { if (holder.content.lineCount > maxLines) { diff --git a/vector/src/main/java/im/vector/app/core/ui/views/NonScrollingTextView.kt b/vector/src/main/java/im/vector/app/core/ui/views/NonScrollingTextView.kt new file mode 100644 index 0000000000..712432abfd --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/ui/views/NonScrollingTextView.kt @@ -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 + } +} diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 891d15d04f..6b988df94d 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -26,6 +26,8 @@ import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider import im.vector.app.core.ui.list.genericFooterItem 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 org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel import org.matrix.android.sdk.api.session.room.model.RoomSummary @@ -53,6 +55,7 @@ class RoomProfileController @Inject constructor( fun onSettingsClicked() fun onLeaveRoomClicked() fun onRoomIdClicked() + fun onUrlInTopicLongClicked(url: String) } override fun buildModels(data: RoomProfileViewState?) { @@ -71,6 +74,16 @@ class RoomProfileController @Inject constructor( id("topic") content(it) 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 + } + })) } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 473c1d4324..44e17a1681 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -261,6 +261,10 @@ class RoomProfileFragment @Inject constructor( copyToClipboard(requireContext(), roomProfileArgs.roomId) } + override fun onUrlInTopicLongClicked(url: String) { + copyToClipboard(requireContext(), url, true) + } + private fun onShareRoomProfile(permalink: String) { startSharePlainTextIntent( fragment = this, diff --git a/vector/src/main/res/layout/item_expandable_textview.xml b/vector/src/main/res/layout/item_expandable_textview.xml index 9f61a3c4d4..4dc7085737 100644 --- a/vector/src/main/res/layout/item_expandable_textview.xml +++ b/vector/src/main/res/layout/item_expandable_textview.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content" android:padding="16dp"> - Date: Tue, 5 Jan 2021 15:06:50 +0300 Subject: [PATCH 2/2] Fix copy topic on long click. --- .../main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt index eb8d4a41c4..218a22533a 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt @@ -26,6 +26,7 @@ import androidx.core.view.isVisible import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass import im.vector.app.R +import im.vector.app.core.extensions.copyOnLongClick @EpoxyModelClass(layout = R.layout.item_expandable_textview) abstract class ExpandableTextItem : VectorEpoxyModel() { @@ -45,6 +46,7 @@ abstract class ExpandableTextItem : VectorEpoxyModel( override fun bind(holder: Holder) { super.bind(holder) holder.content.text = content + holder.content.copyOnLongClick() holder.content.movementMethod = movementMethod holder.content.doOnPreDraw {