Fix some crashes

This commit is contained in:
Benoit Marty 2020-12-16 10:36:33 +01:00
parent 6c64fb2169
commit 9e3eb993ee
30 changed files with 69 additions and 108 deletions

View File

@ -69,8 +69,8 @@ class AttachmentTypeSelectorView(context: Context,
init { init {
val root = FrameLayout(context) val root = FrameLayout(context)
val layout = inflater.inflate(R.layout.view_attachment_type_selector, root, true) inflater.inflate(R.layout.view_attachment_type_selector, root, true)
views = ViewAttachmentTypeSelectorBinding.bind(layout) views = ViewAttachmentTypeSelectorBinding.bind(root)
views.attachmentGalleryButton.configure(Type.GALLERY) views.attachmentGalleryButton.configure(Type.GALLERY)
views.attachmentCameraButton.configure(Type.CAMERA) views.attachmentCameraButton.configure(Type.CAMERA)
views.attachmentFileButton.configure(Type.FILE) views.attachmentFileButton.configure(Type.FILE)

View File

@ -49,7 +49,6 @@ import im.vector.app.core.utils.attachSnapHelperWithListener
import im.vector.app.databinding.FragmentAttachmentsPreviewBinding import im.vector.app.databinding.FragmentAttachmentsPreviewBinding
import im.vector.app.features.media.createUCropWithDefaultSettings import im.vector.app.features.media.createUCropWithDefaultSettings
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.content.ContentAttachmentData import org.matrix.android.sdk.api.session.content.ContentAttachmentData
import java.io.File import java.io.File

View File

@ -50,7 +50,6 @@ import im.vector.app.features.home.room.detail.RoomDetailActivity
import im.vector.app.features.home.room.detail.RoomDetailArgs import im.vector.app.features.home.room.detail.RoomDetailArgs
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.call.CallState import org.matrix.android.sdk.api.session.call.CallState
import org.matrix.android.sdk.api.session.call.EglUtils import org.matrix.android.sdk.api.session.call.EglUtils
import org.matrix.android.sdk.api.session.call.MxCallDetail import org.matrix.android.sdk.api.session.call.MxCallDetail

View File

@ -31,7 +31,6 @@ import im.vector.app.core.di.ScreenComponent
import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseActivity
import im.vector.app.databinding.ActivityJitsiBinding import im.vector.app.databinding.ActivityJitsiBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.jitsi.meet.sdk.JitsiMeetActivityDelegate import org.jitsi.meet.sdk.JitsiMeetActivityDelegate
import org.jitsi.meet.sdk.JitsiMeetActivityInterface import org.jitsi.meet.sdk.JitsiMeetActivityInterface
import org.jitsi.meet.sdk.JitsiMeetConferenceOptions import org.jitsi.meet.sdk.JitsiMeetConferenceOptions

View File

@ -36,7 +36,6 @@ import im.vector.app.core.platform.SimpleFragmentActivity
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.crypto.recover.SetupMode
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -38,7 +38,6 @@ import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.databinding.BottomSheetBootstrapBinding import im.vector.app.databinding.BottomSheetBootstrapBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -49,7 +49,6 @@ import im.vector.app.features.crypto.verification.request.VerificationRequestFra
import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.AvatarRenderer
import im.vector.app.features.settings.VectorSettingsActivity import im.vector.app.features.settings.VectorSettingsActivity
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME

View File

@ -30,7 +30,6 @@ import im.vector.app.databinding.BottomSheetVerificationChildFragmentBinding
import im.vector.app.features.crypto.verification.VerificationAction import im.vector.app.features.crypto.verification.VerificationAction
import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
class VerificationConclusionFragment @Inject constructor( class VerificationConclusionFragment @Inject constructor(

View File

@ -27,7 +27,6 @@ import im.vector.app.core.extensions.configureWith
import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.databinding.BottomSheetVerificationChildFragmentBinding import im.vector.app.databinding.BottomSheetVerificationChildFragmentBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
class VerificationQRWaitingFragment @Inject constructor( class VerificationQRWaitingFragment @Inject constructor(

View File

@ -58,7 +58,6 @@ import im.vector.app.features.workers.signout.ServerBackupStatusViewState
import im.vector.app.push.fcm.FcmHelper import im.vector.app.push.fcm.FcmHelper
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.InitialSyncProgressService import org.matrix.android.sdk.api.session.InitialSyncProgressService
import org.matrix.android.sdk.api.session.permalinks.PermalinkService import org.matrix.android.sdk.api.session.permalinks.PermalinkService
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem

View File

@ -69,7 +69,6 @@ import com.airbnb.mvrx.args
import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState import com.airbnb.mvrx.withState
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.google.android.material.textfield.TextInputEditText
import com.jakewharton.rxbinding3.widget.textChanges import com.jakewharton.rxbinding3.widget.textChanges
import com.vanniktech.emoji.EmojiPopup import com.vanniktech.emoji.EmojiPopup
import im.vector.app.R import im.vector.app.R
@ -113,6 +112,7 @@ import im.vector.app.core.utils.saveMedia
import im.vector.app.core.utils.shareMedia import im.vector.app.core.utils.shareMedia
import im.vector.app.core.utils.shareText import im.vector.app.core.utils.shareText
import im.vector.app.core.utils.toast import im.vector.app.core.utils.toast
import im.vector.app.databinding.DialogReportContentBinding
import im.vector.app.databinding.FragmentRoomDetailBinding import im.vector.app.databinding.FragmentRoomDetailBinding
import im.vector.app.features.attachments.AttachmentTypeSelectorView import im.vector.app.features.attachments.AttachmentTypeSelectorView
import im.vector.app.features.attachments.AttachmentsHelper import im.vector.app.features.attachments.AttachmentsHelper
@ -169,7 +169,6 @@ import im.vector.app.features.widgets.permissions.RoomWidgetPermissionBottomShee
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import nl.dionsegijn.konfetti.models.Shape import nl.dionsegijn.konfetti.models.Shape
import nl.dionsegijn.konfetti.models.Size import nl.dionsegijn.konfetti.models.Size
import org.billcarsonfr.jsonviewer.JSonViewerDialog import org.billcarsonfr.jsonviewer.JSonViewerDialog
@ -409,12 +408,13 @@ class RoomDetailFragment @Inject constructor(
.setPosition(-50f, views.viewKonfetti.width + 50f, -50f, -50f) .setPosition(-50f, views.viewKonfetti.width + 50f, -50f, -50f)
.streamFor(150, 3000L) .streamFor(150, 3000L)
} }
ChatEffect.SNOW -> { ChatEffect.SNOW -> {
views.viewSnowFall.isVisible = true views.viewSnowFall.isVisible = true
views.viewSnowFall.restartFalling() views.viewSnowFall.restartFalling()
} }
} }
} }
private fun handleStopChatEffects() { private fun handleStopChatEffects() {
TransitionManager.beginDelayedTransition(views.rootConstraintLayout) TransitionManager.beginDelayedTransition(views.rootConstraintLayout)
views.viewSnowFall.isVisible = false views.viewSnowFall.isVisible = false
@ -735,36 +735,36 @@ class RoomDetailFragment @Inject constructor(
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
R.id.invite -> { R.id.invite -> {
navigator.openInviteUsersToRoom(requireActivity(), roomDetailArgs.roomId) navigator.openInviteUsersToRoom(requireActivity(), roomDetailArgs.roomId)
true true
} }
R.id.timeline_setting -> { R.id.timeline_setting -> {
navigator.openRoomProfile(requireActivity(), roomDetailArgs.roomId) navigator.openRoomProfile(requireActivity(), roomDetailArgs.roomId)
true true
} }
R.id.resend_all -> { R.id.resend_all -> {
roomDetailViewModel.handle(RoomDetailAction.ResendAll) roomDetailViewModel.handle(RoomDetailAction.ResendAll)
true true
} }
R.id.open_matrix_apps -> { R.id.open_matrix_apps -> {
roomDetailViewModel.handle(RoomDetailAction.ManageIntegrations) roomDetailViewModel.handle(RoomDetailAction.ManageIntegrations)
true true
} }
R.id.voice_call, R.id.voice_call,
R.id.video_call -> { R.id.video_call -> {
handleCallRequest(item) handleCallRequest(item)
true true
} }
R.id.hangup_call -> { R.id.hangup_call -> {
roomDetailViewModel.handle(RoomDetailAction.EndCall) roomDetailViewModel.handle(RoomDetailAction.EndCall)
true true
} }
R.id.search -> { R.id.search -> {
handleSearchAction() handleSearchAction()
true true
} }
else -> super.onOptionsItemSelected(item) else -> super.onOptionsItemSelected(item)
} }
} }
@ -1361,14 +1361,13 @@ class RoomDetailFragment @Inject constructor(
private fun promptReasonToReportContent(action: EventSharedAction.ReportContentCustom) { private fun promptReasonToReportContent(action: EventSharedAction.ReportContentCustom) {
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
val layout = inflater.inflate(R.layout.dialog_report_content, null) val layout = inflater.inflate(R.layout.dialog_report_content, null)
val views = DialogReportContentBinding.bind(layout)
val input = layout.findViewById<TextInputEditText>(R.id.dialog_report_content_input)
AlertDialog.Builder(requireActivity()) AlertDialog.Builder(requireActivity())
.setTitle(R.string.report_content_custom_title) .setTitle(R.string.report_content_custom_title)
.setView(layout) .setView(layout)
.setPositiveButton(R.string.report_content_custom_submit) { _, _ -> .setPositiveButton(R.string.report_content_custom_submit) { _, _ ->
val reason = input.text.toString() val reason = views.dialogReportContentInput.text.toString()
roomDetailViewModel.handle(RoomDetailAction.ReportContent(action.eventId, action.senderId, reason)) roomDetailViewModel.handle(RoomDetailAction.ReportContent(action.eventId, action.senderId, reason))
} }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)

View File

@ -33,7 +33,6 @@ import im.vector.app.features.home.room.detail.timeline.action.EventSharedAction
import im.vector.app.features.home.room.detail.timeline.action.MessageSharedActionViewModel import im.vector.app.features.home.room.detail.timeline.action.MessageSharedActionViewModel
import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
@Parcelize @Parcelize

View File

@ -38,7 +38,6 @@ import im.vector.app.core.platform.StateView
import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.databinding.FragmentSearchBinding import im.vector.app.databinding.FragmentSearchBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.Event
import javax.inject.Inject import javax.inject.Inject

View File

@ -51,7 +51,6 @@ import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedA
import im.vector.app.features.home.room.list.widget.NotifsFabMenuView import im.vector.app.features.home.room.list.widget.NotifsFabMenuView
import im.vector.app.features.notifications.NotificationDrawerManager import im.vector.app.features.notifications.NotificationDrawerManager
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.Membership
import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.RoomSummary

View File

@ -31,7 +31,6 @@ import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.databinding.BottomSheetGenericListBinding import im.vector.app.databinding.BottomSheetGenericListBinding
import im.vector.app.features.navigation.Navigator import im.vector.app.features.navigation.Navigator
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
@Parcelize @Parcelize

View File

@ -46,7 +46,6 @@ import im.vector.app.features.userdirectory.UserListSharedActionViewModel
import im.vector.app.features.userdirectory.UserListViewModel import im.vector.app.features.userdirectory.UserListViewModel
import im.vector.app.features.userdirectory.UserListViewState import im.vector.app.features.userdirectory.UserListViewState
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.Failure
import java.net.HttpURLConnection import java.net.HttpURLConnection
import javax.inject.Inject import javax.inject.Inject

View File

@ -37,7 +37,6 @@ import im.vector.app.R
import im.vector.app.core.utils.AssetReader import im.vector.app.core.utils.AssetReader
import im.vector.app.databinding.FragmentLoginCaptchaBinding import im.vector.app.databinding.FragmentLoginCaptchaBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.MoshiProvider
import timber.log.Timber import timber.log.Timber
import java.net.URLDecoder import java.net.URLDecoder

View File

@ -35,7 +35,6 @@ import im.vector.app.core.extensions.isEmail
import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.setTextOrHide
import im.vector.app.databinding.FragmentLoginGenericTextInputFormBinding import im.vector.app.databinding.FragmentLoginGenericTextInputFormBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.auth.registration.RegisterThreePid import org.matrix.android.sdk.api.auth.registration.RegisterThreePid
import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.failure.is401 import org.matrix.android.sdk.api.failure.is401

View File

@ -25,7 +25,6 @@ import com.airbnb.mvrx.args
import im.vector.app.R import im.vector.app.R
import im.vector.app.databinding.FragmentLoginWaitForEmailBinding import im.vector.app.databinding.FragmentLoginWaitForEmailBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.failure.is401 import org.matrix.android.sdk.api.failure.is401
import javax.inject.Inject import javax.inject.Inject

View File

@ -31,7 +31,6 @@ import im.vector.app.features.login.AbstractLoginFragment
import im.vector.app.features.login.LoginAction import im.vector.app.features.login.LoginAction
import im.vector.app.features.login.LoginViewState import im.vector.app.features.login.LoginViewState
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.internal.auth.registration.LocalizedFlowDataLoginTerms import org.matrix.android.sdk.internal.auth.registration.LocalizedFlowDataLoginTerms
import javax.inject.Inject import javax.inject.Inject

View File

@ -36,7 +36,6 @@ import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.databinding.BottomSheetMatrixToCardBinding import im.vector.app.databinding.BottomSheetMatrixToCardBinding
import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.AvatarRenderer
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
class MatrixToBottomSheet : class MatrixToBottomSheet :

View File

@ -30,7 +30,6 @@ import android.view.animation.DecelerateInterpolator
import android.view.animation.OvershootInterpolator import android.view.animation.OvershootInterpolator
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.ColorRes import androidx.annotation.ColorRes
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@ -39,6 +38,7 @@ import im.vector.app.EmojiCompatWrapper
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.HasScreenInjector import im.vector.app.core.di.HasScreenInjector
import im.vector.app.core.utils.TextUtils import im.vector.app.core.utils.TextUtils
import im.vector.app.databinding.ReactionButtonBinding
import javax.inject.Inject import javax.inject.Inject
/** /**
@ -64,13 +64,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
@Inject lateinit var emojiCompatWrapper: EmojiCompatWrapper @Inject lateinit var emojiCompatWrapper: EmojiCompatWrapper
private var emojiView: TextView? = null private lateinit var views: ReactionButtonBinding
private var countTextView: TextView? = null
private var reactionSelector: View? = null
private var dotsView: DotsView
private var circleView: CircleView
var reactedListener: ReactedListener? = null var reactedListener: ReactedListener? = null
private var dotPrimaryColor: Int = 0 private var dotPrimaryColor: Int = 0
private var dotSecondaryColor: Int = 0 private var dotSecondaryColor: Int = 0
@ -80,7 +75,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
var reactionCount = 11 var reactionCount = 11
set(value) { set(value) {
field = value field = value
countTextView?.text = TextUtils.formatCountToShortDecimal(value) views.reactionCount.text = TextUtils.formatCountToShortDecimal(value)
} }
var reactionString = "😀" var reactionString = "😀"
@ -88,7 +83,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
field = value field = value
// maybe cache this for performances? // maybe cache this for performances?
val emojiSpanned = emojiCompatWrapper.safeEmojiSpanify(value) val emojiSpanned = emojiCompatWrapper.safeEmojiSpanify(value)
emojiView?.text = emojiSpanned views.reactionText.text = emojiSpanned
} }
private var animationScaleFactor: Float = 0.toFloat() private var animationScaleFactor: Float = 0.toFloat()
@ -102,13 +97,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
init { init {
LayoutInflater.from(getContext()).inflate(R.layout.reaction_button, this, true) LayoutInflater.from(getContext()).inflate(R.layout.reaction_button, this, true)
emojiView = findViewById(R.id.reactionText) views = ReactionButtonBinding.bind(this)
dotsView = findViewById(R.id.dots) views.reactionCount.text = TextUtils.formatCountToShortDecimal(reactionCount)
circleView = findViewById(R.id.circle)
reactionSelector = findViewById(R.id.reactionSelector)
countTextView = findViewById(R.id.reactionCount)
countTextView?.text = TextUtils.formatCountToShortDecimal(reactionCount)
// emojiView?.typeface = this.emojiTypeFace ?: Typeface.DEFAULT // emojiView?.typeface = this.emojiTypeFace ?: Typeface.DEFAULT
context.withStyledAttributes(attrs, R.styleable.ReactionButton, defStyleAttr) { context.withStyledAttributes(attrs, R.styleable.ReactionButton, defStyleAttr) {
@ -118,20 +108,20 @@ class ReactionButton @JvmOverloads constructor(context: Context,
circleStartColor = getColor(R.styleable.ReactionButton_circle_start_color, 0) circleStartColor = getColor(R.styleable.ReactionButton_circle_start_color, 0)
if (circleStartColor != 0) { if (circleStartColor != 0) {
circleView.startColor = circleStartColor views.circle.startColor = circleStartColor
} }
circleEndColor = getColor(R.styleable.ReactionButton_circle_end_color, 0) circleEndColor = getColor(R.styleable.ReactionButton_circle_end_color, 0)
if (circleEndColor != 0) { if (circleEndColor != 0) {
circleView.endColor = circleEndColor views.circle.endColor = circleEndColor
} }
dotPrimaryColor = getColor(R.styleable.ReactionButton_dots_primary_color, 0) dotPrimaryColor = getColor(R.styleable.ReactionButton_dots_primary_color, 0)
dotSecondaryColor = getColor(R.styleable.ReactionButton_dots_secondary_color, 0) dotSecondaryColor = getColor(R.styleable.ReactionButton_dots_secondary_color, 0)
if (dotPrimaryColor != 0 && dotSecondaryColor != 0) { if (dotPrimaryColor != 0 && dotSecondaryColor != 0) {
dotsView.setColors(dotPrimaryColor, dotSecondaryColor) views.dots.setColors(dotPrimaryColor, dotSecondaryColor)
} }
getString(R.styleable.ReactionButton_emoji)?.let { getString(R.styleable.ReactionButton_emoji)?.let {
@ -168,7 +158,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
isChecked = !isChecked isChecked = !isChecked
// icon!!.setImageDrawable(if (isChecked) likeDrawable else unLikeDrawable) // icon!!.setImageDrawable(if (isChecked) likeDrawable else unLikeDrawable)
reactionSelector?.background = if (isChecked) onDrawable else offDrawable views.reactionSelector.background = if (isChecked) onDrawable else offDrawable
if (isChecked) { if (isChecked) {
reactedListener?.onReacted(this) reactedListener?.onReacted(this)
@ -181,36 +171,36 @@ class ReactionButton @JvmOverloads constructor(context: Context,
} }
if (isChecked) { if (isChecked) {
emojiView!!.animate().cancel() views.reactionText.animate().cancel()
emojiView!!.scaleX = 0f views.reactionText.scaleX = 0f
emojiView!!.scaleY = 0f views.reactionText.scaleY = 0f
circleView.innerCircleRadiusProgress = 0f views.circle.innerCircleRadiusProgress = 0f
circleView.outerCircleRadiusProgress = 0f views.circle.outerCircleRadiusProgress = 0f
dotsView.currentProgress = 0f views.dots.currentProgress = 0f
animatorSet = AnimatorSet() animatorSet = AnimatorSet()
val outerCircleAnimator = ObjectAnimator.ofFloat(circleView, CircleView.OUTER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f) val outerCircleAnimator = ObjectAnimator.ofFloat(views.circle, CircleView.OUTER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
outerCircleAnimator.duration = 250 outerCircleAnimator.duration = 250
outerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR outerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR
val innerCircleAnimator = ObjectAnimator.ofFloat(circleView, CircleView.INNER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f) val innerCircleAnimator = ObjectAnimator.ofFloat(views.circle, CircleView.INNER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
innerCircleAnimator.duration = 200 innerCircleAnimator.duration = 200
innerCircleAnimator.startDelay = 200 innerCircleAnimator.startDelay = 200
innerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR innerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR
val starScaleYAnimator = ObjectAnimator.ofFloat(emojiView, ImageView.SCALE_Y, 0.2f, 1f) val starScaleYAnimator = ObjectAnimator.ofFloat(views.reactionText, ImageView.SCALE_Y, 0.2f, 1f)
starScaleYAnimator.duration = 350 starScaleYAnimator.duration = 350
starScaleYAnimator.startDelay = 250 starScaleYAnimator.startDelay = 250
starScaleYAnimator.interpolator = OVERSHOOT_INTERPOLATOR starScaleYAnimator.interpolator = OVERSHOOT_INTERPOLATOR
val starScaleXAnimator = ObjectAnimator.ofFloat(emojiView, ImageView.SCALE_X, 0.2f, 1f) val starScaleXAnimator = ObjectAnimator.ofFloat(views.reactionText, ImageView.SCALE_X, 0.2f, 1f)
starScaleXAnimator.duration = 350 starScaleXAnimator.duration = 350
starScaleXAnimator.startDelay = 250 starScaleXAnimator.startDelay = 250
starScaleXAnimator.interpolator = OVERSHOOT_INTERPOLATOR starScaleXAnimator.interpolator = OVERSHOOT_INTERPOLATOR
val dotsAnimator = ObjectAnimator.ofFloat(dotsView, DotsView.DOTS_PROGRESS, 0f, 1f) // .ofFloat<DotsView>(dotsView, DotsView.DOTS_PROGRESS, 0, 1f) val dotsAnimator = ObjectAnimator.ofFloat(views.dots, DotsView.DOTS_PROGRESS, 0f, 1f) // .ofFloat<DotsView>(views.dots, DotsView.DOTS_PROGRESS, 0, 1f)
dotsAnimator.duration = 900 dotsAnimator.duration = 900
dotsAnimator.startDelay = 50 dotsAnimator.startDelay = 50
dotsAnimator.interpolator = ACCELERATE_DECELERATE_INTERPOLATOR dotsAnimator.interpolator = ACCELERATE_DECELERATE_INTERPOLATOR
@ -225,11 +215,11 @@ class ReactionButton @JvmOverloads constructor(context: Context,
animatorSet!!.addListener(object : AnimatorListenerAdapter() { animatorSet!!.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationCancel(animation: Animator) { override fun onAnimationCancel(animation: Animator) {
circleView.innerCircleRadiusProgress = 0f views.circle.innerCircleRadiusProgress = 0f
circleView.outerCircleRadiusProgress = 0f views.circle.outerCircleRadiusProgress = 0f
dotsView.currentProgress = 0f views.dots.currentProgress = 0f
emojiView!!.scaleX = 1f views.reactionText.scaleX = 1f
emojiView!!.scaleY = 1f views.reactionText.scaleY = 1f
} }
override fun onAnimationEnd(animation: Animator) { override fun onAnimationEnd(animation: Animator) {
@ -274,8 +264,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
// } // }
// //
// MotionEvent.ACTION_UP -> { // MotionEvent.ACTION_UP -> {
// emojiView!!.animate().scaleX(0.7f).scaleY(0.7f).setDuration(150).interpolator = DECCELERATE_INTERPOLATOR // views.reactionText!!.animate().scaleX(0.7f).scaleY(0.7f).setDuration(150).interpolator = DECCELERATE_INTERPOLATOR
// emojiView!!.animate().scaleX(1f).scaleY(1f).interpolator = DECCELERATE_INTERPOLATOR // views.reactionText!!.animate().scaleX(1f).scaleY(1f).interpolator = DECCELERATE_INTERPOLATOR
// if (isPressed) { // if (isPressed) {
// performClick() // performClick()
// isPressed = false // isPressed = false
@ -299,26 +289,26 @@ class ReactionButton @JvmOverloads constructor(context: Context,
* @param secondaryColor * @param secondaryColor
*/ */
fun setExplodingDotColorsRes(@ColorRes primaryColor: Int, @ColorRes secondaryColor: Int) { fun setExplodingDotColorsRes(@ColorRes primaryColor: Int, @ColorRes secondaryColor: Int) {
dotsView.setColors(ContextCompat.getColor(context, primaryColor), ContextCompat.getColor(context, secondaryColor)) views.dots.setColors(ContextCompat.getColor(context, primaryColor), ContextCompat.getColor(context, secondaryColor))
} }
fun setExplodingDotColorsInt(@ColorInt primaryColor: Int, @ColorInt secondaryColor: Int) { fun setExplodingDotColorsInt(@ColorInt primaryColor: Int, @ColorInt secondaryColor: Int) {
dotsView.setColors(primaryColor, secondaryColor) views.dots.setColors(primaryColor, secondaryColor)
} }
fun setCircleStartColorRes(@ColorRes circleStartColor: Int) { fun setCircleStartColorRes(@ColorRes circleStartColor: Int) {
this.circleStartColor = ContextCompat.getColor(context, circleStartColor) this.circleStartColor = ContextCompat.getColor(context, circleStartColor)
circleView.startColor = this.circleStartColor views.circle.startColor = this.circleStartColor
} }
fun setCircleStartColorInt(@ColorInt circleStartColor: Int) { fun setCircleStartColorInt(@ColorInt circleStartColor: Int) {
this.circleStartColor = circleStartColor this.circleStartColor = circleStartColor
circleView.startColor = circleStartColor views.circle.startColor = circleStartColor
} }
fun setCircleEndColorRes(@ColorRes circleEndColor: Int) { fun setCircleEndColorRes(@ColorRes circleEndColor: Int) {
this.circleEndColor = ContextCompat.getColor(context, circleEndColor) this.circleEndColor = ContextCompat.getColor(context, circleEndColor)
circleView.endColor = this.circleEndColor views.circle.endColor = this.circleEndColor
} }
/** /**
@ -330,10 +320,10 @@ class ReactionButton @JvmOverloads constructor(context: Context,
fun setChecked(status: Boolean?) { fun setChecked(status: Boolean?) {
if (status!!) { if (status!!) {
isChecked = true isChecked = true
reactionSelector?.background = onDrawable views.reactionSelector.background = onDrawable
} else { } else {
isChecked = false isChecked = false
reactionSelector?.background = offDrawable views.reactionSelector.background = offDrawable
} }
} }

View File

@ -54,7 +54,6 @@ import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore
import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet
import im.vector.app.features.roommemberprofile.powerlevel.EditPowerLevelDialogs import im.vector.app.features.roommemberprofile.powerlevel.EditPowerLevelDialogs
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.room.powerlevels.Role import org.matrix.android.sdk.api.session.room.powerlevels.Role
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem
import javax.inject.Inject import javax.inject.Inject

View File

@ -53,7 +53,6 @@ import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedA
import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
import im.vector.app.features.media.BigImageViewerActivity import im.vector.app.features.media.BigImageViewerActivity
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem
import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.api.util.toMatrixItem

View File

@ -30,7 +30,6 @@ import im.vector.app.core.extensions.configureWith
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.databinding.BottomSheetGenericListBinding import im.vector.app.databinding.BottomSheetGenericListBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
@Parcelize @Parcelize

View File

@ -21,11 +21,13 @@ import android.content.Context
import android.widget.CheckedTextView import android.widget.CheckedTextView
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.children
import androidx.preference.Preference import androidx.preference.Preference
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.restart import im.vector.app.core.extensions.restart
import im.vector.app.core.preference.VectorListPreference import im.vector.app.core.preference.VectorListPreference
import im.vector.app.core.preference.VectorPreference import im.vector.app.core.preference.VectorPreference
import im.vector.app.databinding.DialogSelectTextSizeBinding
import im.vector.app.features.configuration.VectorConfiguration import im.vector.app.features.configuration.VectorConfiguration
import im.vector.app.features.themes.ThemeUtils import im.vector.app.features.themes.ThemeUtils
import javax.inject.Inject import javax.inject.Inject
@ -142,8 +144,8 @@ class VectorSettingsPreferencesFragment @Inject constructor(
} }
private fun displayTextSizeSelection(activity: Activity) { private fun displayTextSizeSelection(activity: Activity) {
val inflater = activity.layoutInflater val layout = layoutInflater.inflate(R.layout.dialog_select_text_size, null)
val layout = inflater.inflate(R.layout.dialog_select_text_size, null) val views = DialogSelectTextSizeBinding.bind(layout)
val dialog = AlertDialog.Builder(activity) val dialog = AlertDialog.Builder(activity)
.setTitle(R.string.font_size) .setTitle(R.string.font_size)
@ -152,25 +154,20 @@ class VectorSettingsPreferencesFragment @Inject constructor(
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.show() .show()
val linearLayout = layout.findViewById<LinearLayout>(R.id.text_selection_group_view)
val childCount = linearLayout.childCount
val index = FontScale.getFontScaleValue(activity).index val index = FontScale.getFontScaleValue(activity).index
for (i in 0 until childCount) { views.textSelectionGroupView.children
val v = linearLayout.getChildAt(i) .filterIsInstance(CheckedTextView::class.java)
.forEachIndexed { i, v ->
v.isChecked = i == index
if (v is CheckedTextView) { v.setOnClickListener {
v.isChecked = i == index dialog.dismiss()
FontScale.updateFontScale(activity, i)
v.setOnClickListener { vectorConfiguration.applyToApplicationContext()
dialog.dismiss() activity.restart()
FontScale.updateFontScale(activity, i) }
vectorConfiguration.applyToApplicationContext()
activity.restart()
} }
}
}
} }
} }

View File

@ -31,7 +31,6 @@ import im.vector.app.core.extensions.configureWith
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
import im.vector.app.databinding.BottomSheetGenericListWithTitleBinding import im.vector.app.databinding.BottomSheetGenericListWithTitleBinding
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
@Parcelize @Parcelize

View File

@ -35,6 +35,7 @@ import im.vector.app.core.extensions.cleanup
import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.configureWith
import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.exhaustive
import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.databinding.DialogBaseEditTextBinding
import im.vector.app.databinding.FragmentGenericRecyclerBinding import im.vector.app.databinding.FragmentGenericRecyclerBinding
import im.vector.app.features.crypto.verification.VerificationBottomSheet import im.vector.app.features.crypto.verification.VerificationBottomSheet
@ -139,15 +140,14 @@ class VectorSettingsDevicesFragment @Inject constructor(
private fun displayDeviceRenameDialog(deviceInfo: DeviceInfo) { private fun displayDeviceRenameDialog(deviceInfo: DeviceInfo) {
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
val layout = inflater.inflate(R.layout.dialog_base_edit_text, null) val layout = inflater.inflate(R.layout.dialog_base_edit_text, null)
val views = DialogBaseEditTextBinding.bind(layout)
val input = layout.findViewById<EditText>(R.id.editText) views.editText.setText(deviceInfo.displayName)
input.setText(deviceInfo.displayName)
AlertDialog.Builder(requireActivity()) AlertDialog.Builder(requireActivity())
.setTitle(R.string.devices_details_device_name) .setTitle(R.string.devices_details_device_name)
.setView(layout) .setView(layout)
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
val newName = input.text.toString() val newName = views.editText.text.toString()
viewModel.handle(DevicesAction.Rename(deviceInfo.deviceId!!, newName)) viewModel.handle(DevicesAction.Rename(deviceInfo.deviceId!!, newName))
} }

View File

@ -36,7 +36,6 @@ import im.vector.app.core.utils.onPermissionDeniedSnackbar
import im.vector.app.databinding.ActivitySimpleBinding import im.vector.app.databinding.ActivitySimpleBinding
import im.vector.app.features.matrixto.MatrixToBottomSheet import im.vector.app.features.matrixto.MatrixToBottomSheet
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import javax.inject.Inject import javax.inject.Inject
import kotlin.reflect.KClass import kotlin.reflect.KClass

View File

@ -47,7 +47,6 @@ import im.vector.app.features.webview.WebViewEventListener
import im.vector.app.features.widgets.webview.clearAfterWidget import im.vector.app.features.widgets.webview.clearAfterWidget
import im.vector.app.features.widgets.webview.setupForWidget import im.vector.app.features.widgets.webview.setupForWidget
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.terms.TermsService
import timber.log.Timber import timber.log.Timber
import java.net.URISyntaxException import java.net.URISyntaxException