From e2d3b0faf61e5b25d5d9760dd90fae4dbdd5aa16 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Tue, 9 Jan 2024 16:15:17 +0100 Subject: [PATCH] DROID-1803, DROID-2116 App | Tech | Fix misc. errors and crashes (#761) --- .../anytype/other/MediaPermissionHelper.kt | 24 ++++++++++++------- .../anytype/ui/editor/EditorFragment.kt | 22 ++++++++++------- .../core_ui/extensions/IconExtension.kt | 2 +- .../features/editor/TextBlockHolder.kt | 6 +---- .../features/editor/holders/media/Picture.kt | 9 +------ .../features/editor/holders/other/Title.kt | 4 ++-- .../editor/holders/text/Description.kt | 3 +-- .../core_ui/widgets/ObjectCardIconWidget.kt | 2 +- .../core_ui/widgets/ObjectIconWidget.kt | 2 +- .../widgets/dv/GalleryViewContentWidget.kt | 4 ++-- .../widgets/dv/GalleryViewDefaultTitleIcon.kt | 2 +- .../anytypeio/anytype/emojifier/Emojifier.kt | 2 +- .../middleware/discovery/MDNSDelegate.kt | 8 +++---- .../middleware/discovery/MDNSResolver.kt | 2 +- .../editor/editor/ext/BlockViewExt.kt | 6 ++++- 15 files changed, 51 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/other/MediaPermissionHelper.kt b/app/src/main/java/com/anytypeio/anytype/other/MediaPermissionHelper.kt index 35aab58cea..98838b9558 100644 --- a/app/src/main/java/com/anytypeio/anytype/other/MediaPermissionHelper.kt +++ b/app/src/main/java/com/anytypeio/anytype/other/MediaPermissionHelper.kt @@ -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.hasPermission 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( private val fragment: Fragment, @@ -31,15 +33,19 @@ class MediaPermissionHelper( } fun openFilePicker(mimeType: Mimetype, requestCode: Int?) { - this.mimeType = mimeType - this.requestCode = requestCode - val context = fragment.context ?: return - val hasPermission = mimeType.hasPermission(context) - if (hasPermission) { - onPermissionSuccess(mimeType, requestCode) - } else { - val permission = mimeType.getPermissionToRequestByMime() - permissionReadStorage.launch(permission) + try { + this.mimeType = mimeType + this.requestCode = requestCode + val context = fragment.context ?: return + val hasPermission = mimeType.hasPermission(context) + if (hasPermission) { + onPermissionSuccess(mimeType, requestCode) + } else { + val permission = mimeType.getPermissionToRequestByMime() + permissionReadStorage.launch(permission) + } + } catch (e: Exception) { + fragment.toast(e.msg()) } } } \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index bf125d1ed3..8a169825d1 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -832,13 +832,15 @@ open class EditorFragment : NavigationFragment(R.layout.f } } subscribe(vm.isUndoRedoToolbarIsVisible) { isVisible -> - val behavior = BottomSheetBehavior.from(binding.undoRedoToolbar) - if (isVisible) { - behavior.state = BottomSheetBehavior.STATE_EXPANDED - behavior.addBottomSheetCallback(onHideBottomSheetCallback) - } else { - behavior.removeBottomSheetCallback(onHideBottomSheetCallback) - behavior.state = BottomSheetBehavior.STATE_HIDDEN + if (hasBinding) { + val behavior = BottomSheetBehavior.from(binding.undoRedoToolbar) + if (isVisible) { + behavior.state = BottomSheetBehavior.STATE_EXPANDED + behavior.addBottomSheetCallback(onHideBottomSheetCallback) + } else { + behavior.removeBottomSheetCallback(onHideBottomSheetCallback) + behavior.state = BottomSheetBehavior.STATE_HIDDEN + } } } subscribe(vm.icon) { icon -> @@ -936,7 +938,11 @@ open class EditorFragment : NavigationFragment(R.layout.f fromName = getFrom(), isTemplate = command.isTemplate ) - fr.showChildFragment() + if (!fr.isAdded) { + fr.showChildFragment() + } else { + Timber.d("Ignoring, fragment already added.") + } } is Command.OpenCoverGallery -> { findNavController().safeNavigate( diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/IconExtension.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/IconExtension.kt index 5f5efe048f..f61b7da663 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/IconExtension.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/IconExtension.kt @@ -15,7 +15,7 @@ fun ImageView.setEmojiOrNull(unicode: String?) { .diskCacheStrategy(DiskCacheStrategy.ALL) .into(this) } catch (e: Throwable) { - Timber.e(e, "Error while setting emoji icon for: $unicode") + Timber.w(e, "Error while setting emoji icon for: $unicode") } else setImageDrawable(null) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/TextBlockHolder.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/TextBlockHolder.kt index 7ce43b5604..d55902db04 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/TextBlockHolder.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/TextBlockHolder.kt @@ -9,7 +9,6 @@ import android.view.MenuItem import android.widget.TextView import androidx.annotation.CallSuper 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.common.CheckedCheckboxColorSpan 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.cursorYBottomCoordinate 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.tools.DefaultSpannableFactory import com.anytypeio.anytype.core_ui.tools.MentionTextWatcher @@ -360,7 +356,7 @@ interface TextBlockHolder : TextHolder { } } } catch (e: Throwable) { - Timber.e(e, "Error while setting cursor from $item") + Timber.w(e, "Error while setting cursor from $item") } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/media/Picture.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/media/Picture.kt index 5da541edf3..265c2d3e42 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/media/Picture.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/media/Picture.kt @@ -3,17 +3,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.media import android.graphics.drawable.Drawable import android.view.View 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.features.editor.decoration.DecoratableCardViewHolder 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_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.visible import com.anytypeio.anytype.presentation.editor.editor.listener.ListenerType @@ -49,7 +42,7 @@ class Picture(val binding: ItemBlockPictureBinding) : Media(binding.root), Decor isFirstResource: Boolean ): Boolean { error.visible() - Timber.e(e, "Error while loading picture") + Timber.w(e, "Error while loading picture") return false } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Title.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Title.kt index 078ed61842..74c087cf8d 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Title.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Title.kt @@ -359,13 +359,13 @@ sealed class Title(view: View) : BlockViewHolder(view), TextHolder { .diskCacheStrategy(DiskCacheStrategy.ALL) .into(emoji) } 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 { emoji.setImageDrawable(null) } } catch (e: Throwable) { - Timber.e(e, "Could not set emoji icon") + Timber.w(e, "Could not set emoji icon") } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/text/Description.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/text/Description.kt index b910aebf2e..2c054e9476 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/text/Description.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/text/Description.kt @@ -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.widgets.text.TextInputWidget 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.BlockView import timber.log.Timber @@ -76,7 +75,7 @@ class Description(val binding: ItemBlockDescriptionBinding) : BlockViewHolder(bi } } } catch (e: Throwable) { - Timber.e(e, "Error while setting cursor from $item") + Timber.w(e, "Error while setting cursor from $item") } } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectCardIconWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectCardIconWidget.kt index 6688312835..3439545526 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectCardIconWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectCardIconWidget.kt @@ -43,7 +43,7 @@ class ObjectCardIconWidget @JvmOverloads constructor( .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivIcon) } 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 -> { diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectIconWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectIconWidget.kt index 12445d1952..0e62434f75 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectIconWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/ObjectIconWidget.kt @@ -220,7 +220,7 @@ class ObjectIconWidget @JvmOverloads constructor( .diskCacheStrategy(DiskCacheStrategy.ALL) .into(binding.ivEmoji) } catch (e: Throwable) { - Timber.e(e, "Error while setting emoji icon for: $emoji") + Timber.w(e, "Error while setting emoji icon for: $emoji") } } else { binding.ivEmoji.setImageDrawable(null) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewContentWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewContentWidget.kt index 0d3dd6ae9a..66752b7dbe 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewContentWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewContentWidget.kt @@ -14,13 +14,13 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.use 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.extensions.dark import com.anytypeio.anytype.core_ui.extensions.light import com.anytypeio.anytype.core_utils.ext.formatTimestamp import com.anytypeio.anytype.core_utils.ext.setDrawableColor 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.relations.model.DefaultObjectRelationValueView import com.anytypeio.anytype.presentation.sets.model.ObjectView @@ -242,7 +242,7 @@ class GalleryViewContentWidget @JvmOverloads constructor( .load(Emojifier.uri(icon.unicode)) .into(image) } catch (e: Throwable) { - Timber.e( + Timber.w( e, "Error while setting emoji icon for: ${icon.unicode}" ) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewDefaultTitleIcon.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewDefaultTitleIcon.kt index 0afdd2b592..722d74ffc2 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewDefaultTitleIcon.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/dv/GalleryViewDefaultTitleIcon.kt @@ -118,7 +118,7 @@ class GalleryViewDefaultTitleIcon @JvmOverloads constructor( .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivIconEmoji) } catch (e: Throwable) { - Timber.e(e, "Error while setting emoji icon for: $emoji") + Timber.w(e, "Error while setting emoji icon for: $emoji") } } else { ivIconEmoji.setImageDrawable(null) diff --git a/library-emojifier/src/main/java/com/anytypeio/anytype/emojifier/Emojifier.kt b/library-emojifier/src/main/java/com/anytypeio/anytype/emojifier/Emojifier.kt index 79a7ee95d6..ad4fb42387 100644 --- a/library-emojifier/src/main/java/com/anytypeio/anytype/emojifier/Emojifier.kt +++ b/library-emojifier/src/main/java/com/anytypeio/anytype/emojifier/Emojifier.kt @@ -55,7 +55,7 @@ object Emojifier { return uri(page, index) } catch (e: Exception) { return Config.EMPTY_URI.also { - Timber.e(e, "Error while searching for uri") + Timber.w(e, "Error while searching for uri") } } } diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSDelegate.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSDelegate.kt index 7dc76c4d90..31ff6ea886 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSDelegate.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSDelegate.kt @@ -27,7 +27,7 @@ class MDNSDelegate( } } } 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() } } 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() } } catch (e: Exception) { - Timber.e(e, "Error while setting observer") + Timber.w(e, "Error while setting observer") } } @@ -60,7 +60,7 @@ class MDNSDelegate( stop() } } catch (e: Exception) { - Timber.e(e, "Error while removing observer") + Timber.w(e, "Error while removing observer") } } } \ No newline at end of file diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSResolver.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSResolver.kt index 61287e2331..5b5798f14a 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSResolver.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/discovery/MDNSResolver.kt @@ -39,7 +39,7 @@ class MDNSResolver( } } } catch (e: Exception) { - Timber.e(e, "Error while starting MDNS Resolver") + Timber.w(e, "Error while starting MDNS Resolver") } } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ext/BlockViewExt.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ext/BlockViewExt.kt index fc9106bdda..1f591f43cc 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ext/BlockViewExt.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ext/BlockViewExt.kt @@ -371,7 +371,11 @@ fun List.enterSAM( is BlockView.DataView.EmptySource -> view.copy( 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") + } + } } }