DROID-1803, DROID-2116 App | Tech | Fix misc. errors and crashes (#761)

This commit is contained in:
Evgenii Kozlov 2024-01-09 16:15:17 +01:00 committed by uburoiubu
parent 957f953972
commit e2d3b0faf6
No known key found for this signature in database
GPG Key ID: C8FB80E0A595FBB6
15 changed files with 51 additions and 47 deletions

View File

@ -6,6 +6,8 @@ import androidx.fragment.app.Fragment
import com.anytypeio.anytype.core_utils.ext.FilePickerUtils.getPermissionToRequestByMime import com.anytypeio.anytype.core_utils.ext.FilePickerUtils.getPermissionToRequestByMime
import com.anytypeio.anytype.core_utils.ext.FilePickerUtils.hasPermission import com.anytypeio.anytype.core_utils.ext.FilePickerUtils.hasPermission
import com.anytypeio.anytype.core_utils.ext.Mimetype import com.anytypeio.anytype.core_utils.ext.Mimetype
import com.anytypeio.anytype.core_utils.ext.msg
import com.anytypeio.anytype.core_utils.ext.toast
class MediaPermissionHelper( class MediaPermissionHelper(
private val fragment: Fragment, private val fragment: Fragment,
@ -31,15 +33,19 @@ class MediaPermissionHelper(
} }
fun openFilePicker(mimeType: Mimetype, requestCode: Int?) { fun openFilePicker(mimeType: Mimetype, requestCode: Int?) {
this.mimeType = mimeType try {
this.requestCode = requestCode this.mimeType = mimeType
val context = fragment.context ?: return this.requestCode = requestCode
val hasPermission = mimeType.hasPermission(context) val context = fragment.context ?: return
if (hasPermission) { val hasPermission = mimeType.hasPermission(context)
onPermissionSuccess(mimeType, requestCode) if (hasPermission) {
} else { onPermissionSuccess(mimeType, requestCode)
val permission = mimeType.getPermissionToRequestByMime() } else {
permissionReadStorage.launch(permission) val permission = mimeType.getPermissionToRequestByMime()
permissionReadStorage.launch(permission)
}
} catch (e: Exception) {
fragment.toast(e.msg())
} }
} }
} }

View File

@ -832,13 +832,15 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
} }
} }
subscribe(vm.isUndoRedoToolbarIsVisible) { isVisible -> subscribe(vm.isUndoRedoToolbarIsVisible) { isVisible ->
val behavior = BottomSheetBehavior.from(binding.undoRedoToolbar) if (hasBinding) {
if (isVisible) { val behavior = BottomSheetBehavior.from(binding.undoRedoToolbar)
behavior.state = BottomSheetBehavior.STATE_EXPANDED if (isVisible) {
behavior.addBottomSheetCallback(onHideBottomSheetCallback) behavior.state = BottomSheetBehavior.STATE_EXPANDED
} else { behavior.addBottomSheetCallback(onHideBottomSheetCallback)
behavior.removeBottomSheetCallback(onHideBottomSheetCallback) } else {
behavior.state = BottomSheetBehavior.STATE_HIDDEN behavior.removeBottomSheetCallback(onHideBottomSheetCallback)
behavior.state = BottomSheetBehavior.STATE_HIDDEN
}
} }
} }
subscribe(vm.icon) { icon -> subscribe(vm.icon) { icon ->
@ -936,7 +938,11 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
fromName = getFrom(), fromName = getFrom(),
isTemplate = command.isTemplate isTemplate = command.isTemplate
) )
fr.showChildFragment() if (!fr.isAdded) {
fr.showChildFragment()
} else {
Timber.d("Ignoring, fragment already added.")
}
} }
is Command.OpenCoverGallery -> { is Command.OpenCoverGallery -> {
findNavController().safeNavigate( findNavController().safeNavigate(

View File

@ -15,7 +15,7 @@ fun ImageView.setEmojiOrNull(unicode: String?) {
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(this) .into(this)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting emoji icon for: $unicode") Timber.w(e, "Error while setting emoji icon for: $unicode")
} }
else else
setImageDrawable(null) setImageDrawable(null)

View File

@ -9,7 +9,6 @@ import android.view.MenuItem
import android.widget.TextView import android.widget.TextView
import androidx.annotation.CallSuper import androidx.annotation.CallSuper
import com.anytypeio.anytype.core_models.ThemeColor import com.anytypeio.anytype.core_models.ThemeColor
import com.anytypeio.anytype.core_ui.BuildConfig
import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.CheckedCheckboxColorSpan import com.anytypeio.anytype.core_ui.common.CheckedCheckboxColorSpan
import com.anytypeio.anytype.core_ui.common.GhostEditorSelectionSpan import com.anytypeio.anytype.core_ui.common.GhostEditorSelectionSpan
@ -20,9 +19,6 @@ import com.anytypeio.anytype.core_ui.common.toSpannable
import com.anytypeio.anytype.core_ui.extensions.applyMovementMethod import com.anytypeio.anytype.core_ui.extensions.applyMovementMethod
import com.anytypeio.anytype.core_ui.extensions.cursorYBottomCoordinate import com.anytypeio.anytype.core_ui.extensions.cursorYBottomCoordinate
import com.anytypeio.anytype.core_ui.extensions.resolveThemedTextColor import com.anytypeio.anytype.core_ui.extensions.resolveThemedTextColor
import com.anytypeio.anytype.core_ui.extensions.setBlockBackgroundColor
import com.anytypeio.anytype.core_ui.features.editor.decoration.DecoratableViewHolder
import com.anytypeio.anytype.core_ui.features.editor.decoration.EditorDecorationContainer
import com.anytypeio.anytype.core_ui.features.editor.holders.`interface`.TextHolder import com.anytypeio.anytype.core_ui.features.editor.holders.`interface`.TextHolder
import com.anytypeio.anytype.core_ui.tools.DefaultSpannableFactory import com.anytypeio.anytype.core_ui.tools.DefaultSpannableFactory
import com.anytypeio.anytype.core_ui.tools.MentionTextWatcher import com.anytypeio.anytype.core_ui.tools.MentionTextWatcher
@ -360,7 +356,7 @@ interface TextBlockHolder : TextHolder {
} }
} }
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting cursor from $item") Timber.w(e, "Error while setting cursor from $item")
} }
} }

View File

@ -3,17 +3,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.media
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.core.view.updateLayoutParams
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.BuildConfig
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.databinding.ItemBlockPictureBinding import com.anytypeio.anytype.core_ui.databinding.ItemBlockPictureBinding
import com.anytypeio.anytype.core_ui.features.editor.decoration.DecoratableCardViewHolder import com.anytypeio.anytype.core_ui.features.editor.decoration.DecoratableCardViewHolder
import com.anytypeio.anytype.core_ui.features.editor.decoration.EditorDecorationContainer import com.anytypeio.anytype.core_ui.features.editor.decoration.EditorDecorationContainer
import com.anytypeio.anytype.core_ui.features.editor.decoration.applySelectorOffset import com.anytypeio.anytype.core_ui.features.editor.decoration.applySelectorOffset
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.core_utils.ext.invisible import com.anytypeio.anytype.core_utils.ext.invisible
import com.anytypeio.anytype.core_utils.ext.visible import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.presentation.editor.editor.listener.ListenerType import com.anytypeio.anytype.presentation.editor.editor.listener.ListenerType
@ -49,7 +42,7 @@ class Picture(val binding: ItemBlockPictureBinding) : Media(binding.root), Decor
isFirstResource: Boolean isFirstResource: Boolean
): Boolean { ): Boolean {
error.visible() error.visible()
Timber.e(e, "Error while loading picture") Timber.w(e, "Error while loading picture")
return false return false
} }

View File

@ -359,13 +359,13 @@ sealed class Title(view: View) : BlockViewHolder(view), TextHolder {
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(emoji) .into(emoji)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting emoji icon for: ${item.emoji}") Timber.w(e, "Error while setting emoji icon for: ${item.emoji}")
} }
} else { } else {
emoji.setImageDrawable(null) emoji.setImageDrawable(null)
} }
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Could not set emoji icon") Timber.w(e, "Could not set emoji icon")
} }
} }

View File

@ -8,7 +8,6 @@ import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.editor.BlockViewHolder import com.anytypeio.anytype.core_ui.features.editor.BlockViewHolder
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.editor.editor.KeyPressedEvent
import com.anytypeio.anytype.presentation.editor.editor.model.Alignment import com.anytypeio.anytype.presentation.editor.editor.model.Alignment
import com.anytypeio.anytype.presentation.editor.editor.model.BlockView import com.anytypeio.anytype.presentation.editor.editor.model.BlockView
import timber.log.Timber import timber.log.Timber
@ -76,7 +75,7 @@ class Description(val binding: ItemBlockDescriptionBinding) : BlockViewHolder(bi
} }
} }
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting cursor from $item") Timber.w(e, "Error while setting cursor from $item")
} }
} }
} }

View File

@ -43,7 +43,7 @@ class ObjectCardIconWidget @JvmOverloads constructor(
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ivIcon) .into(ivIcon)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting emoji icon for: ${icon.unicode}") Timber.w(e, "Error while setting emoji icon for: ${icon.unicode}")
} }
} }
is ObjectIcon.Basic.Image -> { is ObjectIcon.Basic.Image -> {

View File

@ -220,7 +220,7 @@ class ObjectIconWidget @JvmOverloads constructor(
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(binding.ivEmoji) .into(binding.ivEmoji)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting emoji icon for: $emoji") Timber.w(e, "Error while setting emoji icon for: $emoji")
} }
} else { } else {
binding.ivEmoji.setImageDrawable(null) binding.ivEmoji.setImageDrawable(null)

View File

@ -14,13 +14,13 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.content.res.use import androidx.core.content.res.use
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_models.ThemeColor
import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_ui.extensions.dark
import com.anytypeio.anytype.core_ui.extensions.light import com.anytypeio.anytype.core_ui.extensions.light
import com.anytypeio.anytype.core_utils.ext.formatTimestamp import com.anytypeio.anytype.core_utils.ext.formatTimestamp
import com.anytypeio.anytype.core_utils.ext.setDrawableColor import com.anytypeio.anytype.core_utils.ext.setDrawableColor
import com.anytypeio.anytype.emojifier.Emojifier import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.core_models.ThemeColor
import com.anytypeio.anytype.presentation.objects.ObjectIcon import com.anytypeio.anytype.presentation.objects.ObjectIcon
import com.anytypeio.anytype.presentation.relations.model.DefaultObjectRelationValueView import com.anytypeio.anytype.presentation.relations.model.DefaultObjectRelationValueView
import com.anytypeio.anytype.presentation.sets.model.ObjectView import com.anytypeio.anytype.presentation.sets.model.ObjectView
@ -242,7 +242,7 @@ class GalleryViewContentWidget @JvmOverloads constructor(
.load(Emojifier.uri(icon.unicode)) .load(Emojifier.uri(icon.unicode))
.into(image) .into(image)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e( Timber.w(
e, e,
"Error while setting emoji icon for: ${icon.unicode}" "Error while setting emoji icon for: ${icon.unicode}"
) )

View File

@ -118,7 +118,7 @@ class GalleryViewDefaultTitleIcon @JvmOverloads constructor(
.diskCacheStrategy(DiskCacheStrategy.ALL) .diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ivIconEmoji) .into(ivIconEmoji)
} catch (e: Throwable) { } catch (e: Throwable) {
Timber.e(e, "Error while setting emoji icon for: $emoji") Timber.w(e, "Error while setting emoji icon for: $emoji")
} }
} else { } else {
ivIconEmoji.setImageDrawable(null) ivIconEmoji.setImageDrawable(null)

View File

@ -55,7 +55,7 @@ object Emojifier {
return uri(page, index) return uri(page, index)
} catch (e: Exception) { } catch (e: Exception) {
return Config.EMPTY_URI.also { return Config.EMPTY_URI.also {
Timber.e(e, "Error while searching for uri") Timber.w(e, "Error while searching for uri")
} }
} }
} }

View File

@ -27,7 +27,7 @@ class MDNSDelegate(
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Error while starting MDNS delegate") Timber.w(e, "Error while starting MDNS delegate")
} }
} }
@ -38,7 +38,7 @@ class MDNSDelegate(
resolver.stop() resolver.stop()
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Error while stopping MDNS delegate") Timber.w(e, "Error while stopping MDNS delegate")
} }
} }
@ -49,7 +49,7 @@ class MDNSDelegate(
if (isStarted) start() if (isStarted) start()
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Error while setting observer") Timber.w(e, "Error while setting observer")
} }
} }
@ -60,7 +60,7 @@ class MDNSDelegate(
stop() stop()
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Error while removing observer") Timber.w(e, "Error while removing observer")
} }
} }
} }

View File

@ -39,7 +39,7 @@ class MDNSResolver(
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
Timber.e(e, "Error while starting MDNS Resolver") Timber.w(e, "Error while starting MDNS Resolver")
} }
} }

View File

@ -371,7 +371,11 @@ fun List<BlockView>.enterSAM(
is BlockView.DataView.EmptySource -> view.copy( is BlockView.DataView.EmptySource -> view.copy(
isSelected = isSelected isSelected = isSelected
) )
else -> view.also { check(view !is BlockView.Permission) } else -> view.also {
if(view !is BlockView.Permission) {
Timber.e("Attempts to enter SAM for block which does not support read / write mode")
}
}
} }
} }