1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

Refact | Module dependencies (#1046)

This commit is contained in:
Evgenii Kozlov 2020-11-04 15:13:14 +02:00 committed by GitHub
parent 3d2ddd78c9
commit 212a9f801a
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
220 changed files with 907 additions and 2008 deletions

View file

@ -1,6 +1,5 @@
package com.anytypeio.anytype.features.editor.base
import com.anytypeio.anytype.core_ui.features.page.pattern.DefaultPatternMatcher
import com.anytypeio.anytype.core_utils.tools.Counter
import com.anytypeio.anytype.domain.base.Either
import com.anytypeio.anytype.domain.block.interactor.*
@ -28,6 +27,7 @@ import com.anytypeio.anytype.presentation.page.PageViewModelFactory
import com.anytypeio.anytype.presentation.page.editor.Interactor
import com.anytypeio.anytype.presentation.page.editor.Orchestrator
import com.anytypeio.anytype.presentation.page.editor.Proxy
import com.anytypeio.anytype.presentation.page.editor.pattern.DefaultPatternMatcher
import com.anytypeio.anytype.presentation.page.render.DefaultBlockViewRenderer
import com.anytypeio.anytype.presentation.page.selection.SelectionStateHolder
import com.anytypeio.anytype.presentation.page.toggle.ToggleStateHolder

View file

@ -1,7 +1,6 @@
package com.anytypeio.anytype.di.feature
import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.core_ui.features.page.pattern.DefaultPatternMatcher
import com.anytypeio.anytype.core_utils.di.scope.PerScreen
import com.anytypeio.anytype.core_utils.tools.Counter
import com.anytypeio.anytype.domain.block.UpdateDivider
@ -25,6 +24,7 @@ import com.anytypeio.anytype.presentation.page.Editor
import com.anytypeio.anytype.presentation.page.PageViewModelFactory
import com.anytypeio.anytype.presentation.page.editor.Interactor
import com.anytypeio.anytype.presentation.page.editor.Orchestrator
import com.anytypeio.anytype.presentation.page.editor.pattern.DefaultPatternMatcher
import com.anytypeio.anytype.presentation.page.render.DefaultBlockViewRenderer
import com.anytypeio.anytype.presentation.page.selection.SelectionStateHolder
import com.anytypeio.anytype.presentation.page.toggle.ToggleStateHolder

View file

@ -3,11 +3,11 @@ package com.anytypeio.anytype.ext
import android.text.Editable
import android.text.Spanned
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.domain.block.model.Block.Content.Text.Mark
import com.anytypeio.anytype.domain.ext.overlap
import com.anytypeio.anytype.domain.misc.Overlap
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
fun Editable.extractMarks(): List<Mark> = getSpans(0, length, Span::class.java).mapNotNull { span ->
when (span) {

View file

@ -13,12 +13,12 @@ import android.view.ViewTreeObserver
import android.widget.PopupWindow
import android.widget.TextView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.menu.ContextMenuType
import com.anytypeio.anytype.core_utils.ext.PopupExtensions.calculateContentBounds
import com.anytypeio.anytype.core_utils.ext.PopupExtensions.calculateRectInWindow
import com.anytypeio.anytype.core_utils.ext.PopupExtensions.lerp
import com.anytypeio.anytype.presentation.page.editor.Markup
import java.lang.ref.WeakReference
class AnytypeContextMenu constructor(

View file

@ -40,20 +40,17 @@ import com.anytypeio.anytype.BuildConfig
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.extensions.isKeyboardVisible
import com.anytypeio.anytype.core_ui.features.page.BlockAdapter
import com.anytypeio.anytype.core_ui.features.page.BlockDimensions
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.TurnIntoActionReceiver
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.*
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.DefaultScrollAndMoveTargetDescriptor
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.ScrollAndMoveStateListener
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.ScrollAndMoveTargetHighlighter
import com.anytypeio.anytype.core_ui.menu.DocumentPopUpMenu
import com.anytypeio.anytype.core_ui.menu.ProfilePopUpMenu
import com.anytypeio.anytype.core_ui.model.UiBlock
import com.anytypeio.anytype.core_ui.reactive.clicks
import com.anytypeio.anytype.core_ui.state.ControlPanelState
import com.anytypeio.anytype.core_ui.tools.ClipboardInterceptor
import com.anytypeio.anytype.core_ui.tools.FirstItemInvisibilityDetector
import com.anytypeio.anytype.core_ui.tools.MentionFooterItemDecorator
import com.anytypeio.anytype.core_ui.tools.OutsideClickDetector
import com.anytypeio.anytype.core_ui.widgets.ActionItemType
import com.anytypeio.anytype.core_utils.common.EventWrapper
import com.anytypeio.anytype.core_utils.ext.*
import com.anytypeio.anytype.core_utils.ext.PopupExtensions.calculateRectInWindow
@ -67,8 +64,15 @@ import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.ext.extractMarks
import com.anytypeio.anytype.presentation.page.PageViewModel
import com.anytypeio.anytype.presentation.page.PageViewModelFactory
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.Command
import com.anytypeio.anytype.presentation.page.editor.ViewState
import com.anytypeio.anytype.presentation.page.editor.actions.ActionItemType
import com.anytypeio.anytype.presentation.page.editor.control.ControlPanelState
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.UiBlock
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTarget
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor
import com.anytypeio.anytype.ui.alert.AlertUpdateAppFragment
import com.anytypeio.anytype.ui.base.NavigationFragment
import com.anytypeio.anytype.ui.page.gallery.FullScreenPictureFragment

View file

@ -8,10 +8,8 @@ import android.widget.FrameLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.modal.AddBlockOrTurnIntoAdapter
import com.anytypeio.anytype.core_ui.layout.SpacingItemDecoration
import com.anytypeio.anytype.core_ui.model.UiBlock
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetFragment
import com.anytypeio.anytype.presentation.page.editor.model.UiBlock
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.android.synthetic.main.fragment_add_block.*

View file

@ -17,10 +17,11 @@ import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetFragment
import com.anytypeio.anytype.di.common.componentManager
import com.anytypeio.anytype.library_page_icon_picker_widget.ui.DocumentEmojiIconPickerAdapter
import com.anytypeio.anytype.library_page_icon_picker_widget.ui.DocumentEmojiIconPickerViewHolder
import com.anytypeio.anytype.presentation.page.picker.DocumentEmojiIconPickerViewModel
import com.anytypeio.anytype.presentation.page.picker.DocumentEmojiIconPickerViewModel.ViewState
import com.anytypeio.anytype.presentation.page.picker.DocumentEmojiIconPickerViewModelFactory
import com.anytypeio.anytype.presentation.page.picker.EmojiPickerView.Companion.HOLDER_EMOJI_CATEGORY_HEADER
import com.anytypeio.anytype.presentation.page.picker.EmojiPickerView.Companion.HOLDER_EMOJI_ITEM
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.android.synthetic.main.fragment_page_icon_picker.*
@ -87,8 +88,8 @@ open class DocumentEmojiIconPickerFragment : BaseBottomSheetFragment() {
spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int) =
when (val type = emojiPickerAdapter.getItemViewType(position)) {
DocumentEmojiIconPickerViewHolder.HOLDER_EMOJI_ITEM -> 1
DocumentEmojiIconPickerViewHolder.HOLDER_EMOJI_CATEGORY_HEADER -> PAGE_ICON_PICKER_DEFAULT_SPAN_COUNT
HOLDER_EMOJI_ITEM -> 1
HOLDER_EMOJI_CATEGORY_HEADER -> PAGE_ICON_PICKER_DEFAULT_SPAN_COUNT
else -> throw IllegalStateException("$UNEXPECTED_VIEW_TYPE_MESSAGE: $type")
}
}

View file

@ -10,9 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.TurnIntoActionReceiver
import com.anytypeio.anytype.core_ui.features.page.modal.AddBlockOrTurnIntoAdapter
import com.anytypeio.anytype.core_ui.model.UiBlock
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetFragment
import com.anytypeio.anytype.domain.common.Id
import com.anytypeio.anytype.presentation.page.editor.model.UiBlock
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.android.synthetic.main.fragment_add_block.*

View file

@ -18,19 +18,19 @@ import androidx.fragment.app.Fragment
import androidx.transition.*
import com.anytypeio.anytype.BuildConfig
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.common.toSpannable
import com.anytypeio.anytype.core_ui.extensions.addVerticalDivider
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.extensions.drawable
import com.anytypeio.anytype.core_ui.features.page.BlockDimensions
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.ActionItemType
import com.anytypeio.anytype.core_ui.widgets.BlockActionBarItem
import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.actions.ActionItemType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.ui.page.OnFragmentInteractionListener
import kotlinx.android.synthetic.main.action_toolbar.*
import timber.log.Timber

View file

@ -1,8 +1,8 @@
package com.anytypeio.anytype.ui.page.modals.actions
import androidx.core.os.bundleOf
import com.anytypeio.anytype.core_ui.features.page.BlockDimensions
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
object BlockActionToolbarFactory {

View file

@ -7,7 +7,7 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
class BookmarkBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class BulletedBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class CheckBoxBlockActionToolbar : BlockActionToolbar() {

View file

@ -9,8 +9,8 @@ import android.widget.LinearLayout
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.ThemeColorCode
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.CodeTextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class CodeBlockActionToolbar : BlockActionToolbar() {

View file

@ -4,7 +4,7 @@ import android.os.Bundle
import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class DividerLineBlockActionToolbar : BlockActionToolbar() {

View file

@ -7,8 +7,8 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class ErrorActionToolbar : BlockActionToolbar() {

View file

@ -12,11 +12,11 @@ import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.const.MimeTypes
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class FileBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class HeaderOneBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class HeaderThreeBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class HeaderTwoBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,8 +5,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class HighlightBlockActionToolbar : BlockActionToolbar() {

View file

@ -7,9 +7,9 @@ import android.widget.ImageView
import android.widget.TextView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.addDot
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class NumberedBlockActionToolbar : BlockActionToolbar() {

View file

@ -6,17 +6,16 @@ import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.VALUE_ROUNDED
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import java.lang.Exception
class PageArchiveBlockActionToolbar : BlockActionToolbar() {

View file

@ -5,9 +5,9 @@ import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import timber.log.Timber

View file

@ -7,8 +7,8 @@ import android.widget.ImageView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class ParagraphBlockActionToolbar : BlockActionToolbar() {

View file

@ -4,7 +4,7 @@ import android.os.Bundle
import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
class PictureBlockActionToolbar : BlockActionToolbar() {

View file

@ -7,11 +7,11 @@ import android.widget.FrameLayout.LayoutParams
import android.widget.ImageView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_BOOKMARK_PLACEHOLDER
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_FILE_PLACEHOLDER
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_PICTURE_PLACEHOLDER
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_VIDEO_PLACEHOLDER
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class PlaceholderActionToolbar : BlockActionToolbar() {

View file

@ -6,8 +6,8 @@ import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.features.editor.holders.text.Toggle
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class ToggleBlockActionToolbar : BlockActionToolbar() {

View file

@ -4,8 +4,8 @@ import android.os.Bundle
import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class UploadActionToolbar : BlockActionToolbar() {

View file

@ -6,8 +6,8 @@ import android.view.View
import android.widget.ImageView
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.BuildConfig
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.ui.PlayerView

View file

@ -3,13 +3,13 @@ package com.anytypeio.anytype
import android.os.Build
import android.text.Spannable
import android.text.SpannableString
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.common.toSpannable
import com.anytypeio.anytype.domain.block.model.Block.Content.Text.Mark
import com.anytypeio.anytype.ext.extractMarks
import com.anytypeio.anytype.ext.isSpanInRange
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.stub
import org.junit.Before

View file

@ -44,6 +44,7 @@ dependencies {
def unitTestDependencies = rootProject.ext.unitTesting
implementation project(':core-utils')
implementation project(':presentation')
implementation project(':library-emojifier')
implementation project(':library-syntax-highlighter')

View file

@ -1,3 +0,0 @@
package com.anytypeio.anytype.core_ui.common
enum class Alignment { START, CENTER, END }

View file

@ -1,79 +1,8 @@
package com.anytypeio.anytype.core_ui.common
import android.graphics.Color
import com.anytypeio.anytype.core_ui.features.page.BlockView
/**
* @property title color code name
* @property text text color integer for text styling
* @property background background color integer for background/highlight styling
*/
enum class ThemeColor(
val title: String,
val text: Int,
val background: Int
) {
DEFAULT(
title = "default",
text = Color.parseColor("#2C2B27"),
background = Color.parseColor("#FFFFFF")
),
GREY(
title = "grey",
text = Color.parseColor("#ACA996"),
background = Color.parseColor("#F3F2EC")
),
YELLOW(
title = "yellow",
text = Color.parseColor("#ECD91B"),
background = Color.parseColor("#FEF9CC")
),
ORANGE(
title = "orange",
text = Color.parseColor("#FFB522"),
background = Color.parseColor("#FEF3C5")
),
RED(
title = "red",
text = Color.parseColor("#F55522"),
background = Color.parseColor("#FFEBE5")
),
PINK(
title = "pink",
text = Color.parseColor("#E51CA0"),
background = Color.parseColor("#FEE3F5")
),
PURPLE(
title = "purple",
text = Color.parseColor("#AB50CC"),
background = Color.parseColor("#F4E3FA")
),
BLUE(
title = "blue",
text = Color.parseColor("#3E58EB"),
background = Color.parseColor("#E4E7FC")
),
ICE(
title = "ice",
text = Color.parseColor("#2AA7EE"),
background = Color.parseColor("#D6EFFD")
),
TEAL(
title = "teal",
text = Color.parseColor("#0FC8BA"),
background = Color.parseColor("#D6F5F3")
),
GREEN(
title = "lime",
text = Color.parseColor("#57C600"),
background = Color.parseColor("#E3F7D0")
);
companion object {
val text = values().associate { color -> color.text to color.title }
val background = values().associate { color -> color.background to color.title }
}
}
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
enum class ThemeColorCode(
val title: String,

View file

@ -1,9 +1,7 @@
package com.anytypeio.anytype.core_ui.common
import android.content.Context
import android.os.Parcelable
import android.text.Editable
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.style.ClickableSpan
import android.view.View
@ -13,68 +11,10 @@ import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.VALUE_ROUNDED
import com.anytypeio.anytype.core_utils.ext.removeSpans
import kotlinx.android.parcel.Parcelize
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import timber.log.Timber
/**
* Classes implementing this interface should support markup rendering.
*/
interface Markup {
/**
* A text body that this markup should be applied to.
*/
val body: String
/**
* List of marks associated with the text body.
*/
var marks: List<Mark>
/**
* @property from caracter index where this markup starts (inclusive)
* @property to caracter index where this markup ends (inclusive)
* @property type markup's type
*/
@Parcelize
data class Mark(
val from: Int,
val to: Int,
val type: Type,
val param: String? = null,
val extras: Map<String, String?> = emptyMap()
) : Parcelable {
val image: String? by extras
val emoji: String? by extras
fun color(): Int? = ThemeColor.values().find { color -> color.title == param }?.text
fun background(): Int? =
ThemeColor.values().find { color -> color.title == param }?.background
}
/**
* Markup types.
*/
enum class Type {
ITALIC,
BOLD,
STRIKETHROUGH,
TEXT_COLOR,
BACKGROUND_COLOR,
LINK,
KEYBOARD,
MENTION
}
companion object {
const val DEFAULT_SPANNABLE_FLAG = Spannable.SPAN_EXCLUSIVE_INCLUSIVE
const val MENTION_SPANNABLE_FLAG = Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
const val SPAN_MONOSPACE = "monospace"
}
}
fun Markup.toSpannable(
textColor: Int,
context: Context? = null,
@ -257,7 +197,7 @@ fun Editable.setMentionSpan(
placeholder = context.drawable(R.drawable.ic_block_page_without_emoji),
imageSize = mentionImageSize,
imagePadding = mentionImagePadding,
param = mark.param,
param = mark.param!!,
emoji = if (mark.extras.isNotEmpty()) mark.emoji else null,
image = if (mark.extras.isNotEmpty()) mark.image else null
),
@ -268,7 +208,7 @@ fun Editable.setMentionSpan(
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
(widget as? TextInputWidget)?.enableReadMode()
click?.invoke( mark.param)
click?.invoke(mark.param!!)
}
}
setSpan(

View file

@ -1,8 +1,8 @@
package com.anytypeio.anytype.core_ui.extensions
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.isLinksOrMentionsPresent
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.presentation.page.editor.Markup
fun TextInputWidget.preserveSelection(block: () -> Unit) = synchronized(this) {
val selection = selectionStart..selectionEnd

View file

@ -8,8 +8,8 @@ import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockDimensions
import com.anytypeio.anytype.core_utils.ext.PopupExtensions.calculateRectInWindow
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
fun Context.toast(
msg: CharSequence,

View file

@ -7,13 +7,13 @@ import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.editor.holders.other.PageArchive
import com.anytypeio.anytype.core_ui.features.editor.holders.other.Title
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_ARCHIVE_TITLE
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOLDER_PAGE_ARCHIVE
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.typeOf
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import timber.log.Timber
class ArchiveAdapter(

View file

@ -3,10 +3,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.error
import android.view.View
import android.widget.TextView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_bookmark_error.view.*
class BookmarkError(view: View) : MediaError(view) {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.error
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class FileError(view: View) : MediaError(view) {

View file

@ -1,9 +1,13 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.error
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
abstract class MediaError(view: View) : BlockViewHolder(view),
BlockViewHolder.IndentableHolder {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.error
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class PictureError(view: View) : MediaError(view) {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.error
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class VideoError(view: View) : MediaError(view) {

View file

@ -3,13 +3,13 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.`interface`
import android.view.Gravity
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.anytypeio.anytype.core_ui.common.Alignment
import com.anytypeio.anytype.core_ui.common.Focusable
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.core_utils.text.BackspaceKeyDetector
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.model.Alignment
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.Focusable
import timber.log.Timber
/**

View file

@ -8,13 +8,13 @@ import android.widget.TextView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_DESCRIPTION_KEY
import com.anytypeio.anytype.core_ui.features.page.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_TITLE_KEY
import com.anytypeio.anytype.core_ui.features.page.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_URL_KEY
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.*
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_DESCRIPTION_KEY
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_TITLE_KEY
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Media.Bookmark.Companion.SEARCH_FIELD_URL_KEY
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException

View file

@ -8,17 +8,17 @@ import android.text.style.RelativeSizeSpan
import android.view.View
import android.widget.TextView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.const.MimeTypes
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_file.view.*
class File(view: View) : Media(view) {
@ -32,10 +32,10 @@ class File(view: View) : Media(view) {
super.bind(item, clicked)
name.enableReadMode()
if (item.size != null && item.name != null) {
val size = Formatter.formatFileSize(itemView.context, item.size)
val size = Formatter.formatFileSize(itemView.context, item.size!!)
val spannable = SpannableString("${item.name} $size")
val start = item.name.length + 2
val end = item.name.length + 2 + size.length
val start = item.name!!.length + 2
val end = item.name!!.length + 2 + size.length
spannable.setSpan(
RelativeSizeSpan(0.87f),
start,

View file

@ -1,9 +1,13 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.media
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
abstract class Media(view: View) : BlockViewHolder(view), BlockViewHolder.IndentableHolder {

View file

@ -3,12 +3,12 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.media
import android.graphics.drawable.Drawable
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
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.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException

View file

@ -5,10 +5,10 @@ import android.view.View
import android.widget.FrameLayout
import com.anytypeio.anytype.core_ui.BuildConfig
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory

View file

@ -12,12 +12,9 @@ import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Focusable
import com.anytypeio.anytype.core_ui.common.ThemeColorCode
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_ui.tools.DefaultTextWatcher
import com.anytypeio.anytype.core_ui.widgets.text.CodeTextInputWidget
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
@ -25,6 +22,9 @@ import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.core_utils.text.BackspaceKeyDetector
import com.anytypeio.anytype.library_syntax_highlighter.Syntaxes
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.Focusable
import kotlinx.android.synthetic.main.item_block_code_snippet.view.*
import timber.log.Timber
@ -107,7 +107,7 @@ class Code(view: View) : BlockViewHolder(view) {
if (!item.lang.isNullOrEmpty()) {
content.setupSyntax(item.lang)
menu.text = item.lang.capitalize()
menu.text = item.lang!!.capitalize()
} else {
content.setupSyntax(Syntaxes.GENERIC)
menu.setText(R.string.block_code_menu_title)

View file

@ -4,11 +4,11 @@ import android.view.View
import android.widget.FrameLayout
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_divider_line.view.*
open class Divider(view: View) : BlockViewHolder(view), BlockViewHolder.IndentableHolder {

View file

@ -1,8 +1,8 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.other
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class DividerDots(view: View) : Divider(view) {

View file

@ -1,8 +1,8 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.other
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class DividerLine(view: View) : Divider(view) {

View file

@ -6,13 +6,17 @@ import android.widget.TextView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockView.Searchable.Field.Companion.DEFAULT_SEARCH_FIELD_KEY
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Searchable.Field.Companion.DEFAULT_SEARCH_FIELD_KEY
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.android.synthetic.main.item_block_page.view.*
@ -48,7 +52,7 @@ class Page(view: View) : BlockViewHolder(view), BlockViewHolder.IndentableHolder
try {
Glide
.with(emoji)
.load(Emojifier.uri(item.emoji))
.load(Emojifier.uri(item.emoji!!))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(emoji)
} catch (e: Throwable) {

View file

@ -5,18 +5,22 @@ import android.text.SpannableStringBuilder
import android.view.View
import android.widget.TextView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockView.Searchable.Field.Companion.DEFAULT_SEARCH_FIELD_KEY
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.VALUE_ROUNDED
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Searchable.Field.Companion.DEFAULT_SEARCH_FIELD_KEY
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.android.synthetic.main.item_block_page_archived.view.*
@ -71,7 +75,7 @@ class PageArchive(view: View) : BlockViewHolder(view), BlockViewHolder.Indentabl
try {
Glide
.with(emoji)
.load(Emojifier.uri(item.emoji))
.load(Emojifier.uri(item.emoji!!))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(emoji)
} catch (e: Exception) {

View file

@ -14,7 +14,6 @@ import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
import com.anytypeio.anytype.core_ui.extensions.avatarColor
import com.anytypeio.anytype.core_ui.features.editor.holders.`interface`.TextHolder
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.tools.DefaultSpannableFactory
@ -25,6 +24,7 @@ import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.android.synthetic.main.item_block_title.view.*
@ -205,7 +205,7 @@ sealed class Title(view: View) : BlockViewHolder(view), TextHolder {
try {
Glide
.with(emoji)
.load(Emojifier.uri(item.emoji))
.load(Emojifier.uri(item.emoji!!))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(emoji)
} catch (e: Throwable) {

View file

@ -2,11 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.placeholders
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import kotlinx.android.synthetic.main.item_block_bookmark_placeholder.view.*
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class BookmarkPlaceholder(view: View) : MediaPlaceholder(view) {

View file

@ -2,11 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.placeholders
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import kotlinx.android.synthetic.main.item_block_file_placeholder.view.*
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class FilePlaceholder(view: View) : MediaPlaceholder(view) {

View file

@ -1,9 +1,13 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.placeholders
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
abstract class MediaPlaceholder(view: View) : BlockViewHolder(view),
BlockViewHolder.IndentableHolder {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.placeholders
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class PicturePlaceholder(view: View) : MediaPlaceholder(view) {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.placeholders
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class VideoPlaceholder(view: View) : MediaPlaceholder(view) {

View file

@ -4,12 +4,16 @@ import android.text.Editable
import android.view.View
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.extensions.tint
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_bulleted.view.*
class Bulleted(

View file

@ -5,9 +5,13 @@ import android.view.View
import android.widget.ImageView
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_checkbox.view.*
class Checkbox(

View file

@ -4,9 +4,14 @@ import android.text.Editable
import android.view.View
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.TextBlockHolder
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
abstract class Header(
view: View

View file

@ -2,8 +2,6 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.text
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.menu.ContextMenuType
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import kotlinx.android.synthetic.main.item_block_header_one.view.*

View file

@ -2,8 +2,6 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.text
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.menu.ContextMenuType
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import kotlinx.android.synthetic.main.item_block_header_three.view.*

View file

@ -2,8 +2,6 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.text
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.menu.ContextMenuType
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import kotlinx.android.synthetic.main.item_block_header_two.view.*

View file

@ -4,10 +4,14 @@ import android.text.Editable
import android.view.View
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.tools.DefaultSpannableFactory
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_highlight.view.*
class Highlight(

View file

@ -6,11 +6,16 @@ import android.view.View
import android.widget.LinearLayout
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.addDot
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_numbered.view.*
class Numbered(

View file

@ -4,9 +4,13 @@ import android.text.Editable
import android.view.View
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_text.view.*
class Paragraph(

View file

@ -7,17 +7,17 @@ import android.text.Editable
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Checkable
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.extensions.applyMovementMethod
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_ui.features.page.TextBlockHolder
import com.anytypeio.anytype.core_ui.tools.DefaultTextWatcher
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.Checkable
abstract class Text(
view: View

View file

@ -4,9 +4,14 @@ import android.text.Editable
import android.view.View
import androidx.core.view.isVisible
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import kotlinx.android.synthetic.main.item_block_toggle.view.*
class Toggle(

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.upload
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class FileUpload(view: View) : MediaUpload(view) {

View file

@ -1,9 +1,13 @@
package com.anytypeio.anytype.core_ui.features.editor.holders.upload
import android.view.View
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder
import com.anytypeio.anytype.core_ui.widgets.text.EditorLongClickListener
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
abstract class MediaUpload(view: View) : BlockViewHolder(view),
BlockViewHolder.IndentableHolder {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.upload
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class PictureUpload(view: View) : MediaUpload(view) {

View file

@ -2,10 +2,10 @@ package com.anytypeio.anytype.core_ui.features.editor.holders.upload
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.ListenerType
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.indentize
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
class VideoUpload(view: View) : MediaUpload(view) {

View file

@ -4,20 +4,19 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.SearchView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.widget.doAfterTextChanged
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.core_utils.ext.invisible
import com.anytypeio.anytype.core_utils.ext.toast
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.presentation.navigation.PageLinkView
import com.anytypeio.anytype.presentation.navigation.filterBy
import kotlinx.android.synthetic.main.view_page_links_filter.view.*
import kotlinx.android.synthetic.main.widget_search_view.view.*
import timber.log.Timber
class FilterView @JvmOverloads constructor(
context: Context,

View file

@ -8,6 +8,7 @@ import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_utils.ext.gone
import com.anytypeio.anytype.core_utils.ext.visible
import com.anytypeio.anytype.emojifier.Emojifier
import com.anytypeio.anytype.presentation.navigation.PageLinkView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.android.synthetic.main.item_page_link.view.*
@ -65,7 +66,7 @@ class PageLinksAdapter(
}
if (link.emoji != null) {
try {
Emojifier.uri(link.emoji).let { uri ->
Emojifier.uri(link.emoji!!).let { uri ->
Glide
.with(icon)
.load(uri)

View file

@ -6,6 +6,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.extensions.toast
import com.anytypeio.anytype.core_utils.ui.BottomOffsetDecoration
import com.anytypeio.anytype.presentation.navigation.PageLinkView
import kotlinx.android.synthetic.main.item_page_link_list.view.*
class PageLinksListHolder(view: View) : RecyclerView.ViewHolder(view) {

View file

@ -4,6 +4,7 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.presentation.navigation.PageLinkView
class PageNavigationAdapter(
private val onClick: (String) -> Unit,

View file

@ -63,6 +63,9 @@ import com.anytypeio.anytype.core_ui.features.page.BlockViewHolder.Companion.HOL
import com.anytypeio.anytype.core_ui.tools.ClipboardInterceptor
import com.anytypeio.anytype.core_utils.ext.imm
import com.anytypeio.anytype.core_utils.ext.typeOf
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import timber.log.Timber
/**

View file

@ -1,3 +1,145 @@
package com.anytypeio.anytype.core_ui.features.page
/*
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.holders.*
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_utils.ext.typeOf
import timber.log.Timber
class BlockTextAdapter(
private var blocks: List<BlockView>,
private val event: (BlockTextEvent) -> Unit,
private val click: (ListenerType) -> Unit
) : RecyclerView.Adapter<BlockTextViewHolder>() {
val views: List<BlockView> get() = blocks
override fun getItemViewType(position: Int) = blocks[position].getViewType()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlockTextViewHolder {
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
BlockViewHolder.HOLDER_PARAGRAPH -> {
ParagraphViewHolder(
view = inflater.inflate(R.layout.item_block_text, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.TEXT)
)
}
BlockViewHolder.HOLDER_CHECKBOX -> {
CheckboxViewHolder(
view = inflater.inflate(R.layout.item_block_checkbox, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.TEXT)
)
}
BlockViewHolder.HOLDER_HEADER_ONE -> {
HeaderOneViewHolder(
view = inflater.inflate(R.layout.item_block_header_one, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
BlockViewHolder.HOLDER_HEADER_TWO -> {
HeaderTwoViewHolder(
view = inflater.inflate(R.layout.item_block_header_two, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
BlockViewHolder.HOLDER_HEADER_THREE -> {
HeaderThreeViewHolder(
view = inflater.inflate(R.layout.item_block_header_three, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
else -> throw IllegalStateException("Unexpected view type: $viewType")
}
}
override fun getItemCount(): Int = blocks.size
override fun onBindViewHolder(holder: BlockTextViewHolder, position: Int) {
val block = blocks[position]
if (holder is Holder.Indentable && block is BlockView.Indentable) {
holder.indentize(block.indent)
}
if (holder is Holder.Selectable && block is BlockView.Selectable) {
holder.select(block.isSelected)
}
if (holder is Holder.Alignable && block is BlockView.Alignable) {
holder.align(block.alignment)
}
}
// Bug workaround for losing text selection ability, see:
// https://code.google.com/p/android/issues/detail?id=208169
override fun onViewAttachedToWindow(holder: BlockTextViewHolder) {
super.onViewAttachedToWindow(holder)
holder.content.isEnabled = false
holder.content.isEnabled = true
}
fun updateWithDiffUtil(items: List<BlockView>) {
logDataSetUpdateEvent(items)
val result = DiffUtil.calculateDiff(BlockViewDiffUtil(old = blocks, new = items))
blocks = items
result.dispatchUpdatesTo(this)
}
private fun logDataSetUpdateEvent(items: List<BlockView>) {
Timber.d("----------Updating------------")
items.forEach { Timber.d(it.toString()) }
Timber.d("----------Finished------------")
}
override fun onBindViewHolder(
holder: BlockTextViewHolder,
position: Int,
payloads: MutableList<Any>
) {
if (payloads.isEmpty())
onBindViewHolder(holder, position)
else {
val block = blocks[position]
if (block is Item) {
holder.payload(
payloads = payloads.typeOf(),
clicked = click,
item = block
)
}
}
}
}
package com.anytypeio.anytype.core_ui.features.page.models
import android.text.Editable
@ -581,4 +723,6 @@ abstract class BlockTextViewHolder(
payloadPermission(payload, item)
payloadFocusable(payload, item)
}
}
}
*/

View file

@ -1,44 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page
import android.text.Editable
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.features.page.models.Item
sealed class BlockTextEvent {
sealed class TextEvent : BlockTextEvent() {
data class Default(val id: String, val item: Item) : BlockTextEvent()
data class Pattern(val id: String, val item: Item) : BlockTextEvent()
}
data class FocusEvent(val target: String, val focused: Boolean) : BlockTextEvent()
data class SelectionEvent(val target: String, val range: IntRange) : BlockTextEvent()
sealed class MentionEvent : BlockTextEvent() {
data class Start(val cursorCoordinate: Int, val mentionStart: Int) : MentionEvent()
data class Text(val text: CharSequence) : MentionEvent()
object Stop : MentionEvent()
}
sealed class KeyboardEvent : BlockTextEvent() {
data class EndLineEnter(val target: String, val text: Editable) : KeyboardEvent()
data class SplitLineEnter(val target: String, val index: Int, val text: CharSequence) :
KeyboardEvent()
data class EmptyBlockBackspace(val target: String) : KeyboardEvent()
data class NonEmptyBlockBackspace(val target: String, val editable: Editable) :
KeyboardEvent()
}
sealed class Action : BlockTextEvent() {
data class Copy(val selection: IntRange) : Action()
data class Paste(val selection: IntRange) : Action()
}
data class MarkupEvent(val type: Markup.Type, val range: IntRange) : BlockTextEvent()
sealed class CheckboxEvent: BlockTextEvent() {
data class Click(val target: String) : CheckboxEvent()
}
}

View file

@ -1,9 +1,10 @@
package com.anytypeio.anytype.core_ui.features.page
import androidx.recyclerview.widget.DiffUtil
import com.anytypeio.anytype.core_ui.common.Focusable
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.features.page.BlockView.Indentable
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.BlockView.Indentable
import com.anytypeio.anytype.presentation.page.editor.model.Focusable
import timber.log.Timber
class BlockViewDiffUtil(

View file

@ -4,6 +4,9 @@ import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.features.page.BlockViewDiffUtil.Payload
import com.anytypeio.anytype.core_utils.ext.PopupExtensions
import com.anytypeio.anytype.presentation.page.editor.BlockDimensions
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
/**
* Viewholder for rendering different type of blocks (i.e its UI-models).

View file

@ -1,10 +1,10 @@
package com.anytypeio.anytype.core_ui.features.page
import android.text.Editable
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
fun Editable.marks(): List<Markup.Mark> = getSpans(0, length, Span::class.java).mapNotNull { span ->
when (span) {

View file

@ -16,6 +16,12 @@ import com.anytypeio.anytype.core_ui.tools.MentionTextWatcher
import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.core_utils.ext.hideKeyboard
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.presentation.page.editor.Markup
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.page.editor.mention.MentionEvent
import com.anytypeio.anytype.presentation.page.editor.model.BlockView
import com.anytypeio.anytype.presentation.page.editor.model.Checkable
import timber.log.Timber
/**

View file

@ -1,6 +1,7 @@
package com.anytypeio.anytype.core_ui.features.page
import com.anytypeio.anytype.core_ui.model.UiBlock
import com.anytypeio.anytype.presentation.page.editor.model.UiBlock
interface TurnIntoActionReceiver {
/**

View file

@ -1,71 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.holders
import android.text.Editable
import android.view.View
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.extensions.tint
import com.anytypeio.anytype.core_ui.features.page.BlockTextEvent
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.features.page.models.BlockTextViewHolder
import com.anytypeio.anytype.core_ui.features.page.models.Item
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import kotlinx.android.synthetic.main.item_block_bulleted.view.*
class BulletViewHolder(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : BlockTextViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
private val bulletIndent = itemView.bulletIndent
private val bullet = itemView.bullet
private val container = itemView.bulletBlockContainer
override val content: TextInputWidget
get() = itemView.bulletedListContent
override val spannableFactory: DefaultSpannableFactory
get() = DefaultSpannableFactory()
override fun indentize(indent: Int) {
bulletIndent.updateLayoutParams { width = indent * dimen(R.dimen.indent) }
}
override fun getMentionSizes(): Pair<Int, Int> =
with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_default),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_default)
)
}
override fun setTextColor(textColor: Int) {
super.setTextColor(textColor)
bullet.setColorFilter(textColor)
}
override fun select(isSelected: Boolean) {}
override fun onTextEvent(
event: (BlockTextEvent) -> Unit,
id: String,
item: Item,
editable: Editable
) {
item.apply {
text = editable.toString()
marks = editable.marks()
}
event(BlockTextEvent.TextEvent.Default(id, item))
}
}

View file

@ -1,108 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.holders
import android.text.Editable
import android.view.View
import android.widget.ImageView
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.getBlockTextColor
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.features.page.BlockTextEvent
import com.anytypeio.anytype.core_ui.features.page.BlockView
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.features.page.models.BlockTextViewHolder
import com.anytypeio.anytype.core_ui.features.page.models.Item
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import kotlinx.android.synthetic.main.item_block_checkbox.view.*
class CheckboxViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : BlockTextViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
private val checkbox: ImageView = itemView.checkboxIcon
override val content: TextInputWidget get() = itemView.checkboxContent
fun bind(
item: Item,
isChecked: Boolean,
event: (BlockTextEvent.CheckboxEvent) -> Unit
) {
checkbox.isActivated = isChecked
val textColor = item.getBlockTextColor()
setTextColor(textColor, isChecked)
checkbox.setOnClickListener {
onCheckClick(
textColor = textColor,
event = event,
id = item.id,
mode = item.mode
)
}
}
override fun indentize(indent: Int) {
checkbox.updatePadding(left = indent * dimen(R.dimen.indent))
}
override fun getMentionSizes(): Pair<Int, Int> = with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_default),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_default)
)
}
/**
* Override default behaviour, use [setTextColor(textColor: String?, isSelected: Boolean)]
*/
override fun setTextColor(textColor: Int) {}
private fun setTextColor(textColor: Int, isSelected: Boolean) {
if (isSelected) {
content.setTextColor(itemView.context.color(R.color.checkbox_state_checked))
} else {
content.setTextColor(textColor)
}
}
private fun onCheckClick(
textColor: Int,
event: (BlockTextEvent.CheckboxEvent) -> Unit,
id: String,
mode: BlockView.Mode
) {
if (mode == BlockView.Mode.EDIT) {
checkbox.isActivated = !checkbox.isActivated
setTextColor(
textColor = textColor,
isSelected = checkbox.isActivated
)
event.invoke(BlockTextEvent.CheckboxEvent.Click(id))
}
}
override fun onTextEvent(
event: (BlockTextEvent) -> Unit,
id: String,
item: Item,
editable: Editable
) {
item.apply {
text = editable.toString()
marks = editable.marks()
}
event(BlockTextEvent.TextEvent.Pattern(id, item))
}
override fun select(isSelected: Boolean) {
TODO("Not yet implemented")
}
}

View file

@ -1,119 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.holders
import android.text.Editable
import android.view.View
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockTextEvent
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.features.page.models.BlockTextViewHolder
import com.anytypeio.anytype.core_ui.features.page.models.Item
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import kotlinx.android.synthetic.main.item_block_header_one.view.*
import kotlinx.android.synthetic.main.item_block_header_three.view.*
import kotlinx.android.synthetic.main.item_block_header_two.view.*
abstract class HeaderViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : BlockTextViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
private val defaultPadding = dimen(R.dimen.default_document_content_padding_start)
abstract override val content: TextInputWidget
override val spannableFactory: DefaultSpannableFactory = DefaultSpannableFactory()
override fun indentize(indent: Int) {
content.updatePadding(left = defaultPadding + indent * dimen(R.dimen.indent))
}
override fun getMentionSizes(): Pair<Int, Int> {
TODO("Not yet implemented")
}
override fun select(isSelected: Boolean) {
TODO("Not yet implemented")
}
override fun onTextEvent(
event: (BlockTextEvent) -> Unit,
id: String,
item: Item,
editable: Editable
) {
item.apply {
text = editable.toString()
marks = editable.marks()
}
event(BlockTextEvent.TextEvent.Default(id, item))
}
}
class HeaderOneViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : HeaderViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
override val content: TextInputWidget get() = itemView.headerOne
override fun getMentionSizes(): Pair<Int, Int> = with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_header_one),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_header_one)
)
}
override fun select(isSelected: Boolean) {
TODO("Not yet implemented")
}
}
class HeaderTwoViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : HeaderViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
override val content: TextInputWidget get() = itemView.headerTwo
override fun getMentionSizes(): Pair<Int, Int> = with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_header_two),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_header_two)
)
}
}
class HeaderThreeViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : HeaderViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
override val content: TextInputWidget get() = itemView.headerThree
override fun getMentionSizes(): Pair<Int, Int> = with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_header_three),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_default)
)
}
}

View file

@ -1,31 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.holders
import android.view.Gravity
import android.widget.TextView
import com.anytypeio.anytype.core_ui.common.Alignment
interface Holder {
interface Selectable {
fun select(isSelected: Boolean)
}
interface Indentable {
fun indentize(indent: Int)
}
interface Alignable {
val alignable: TextView
fun align(alignment: Alignment?) {
if (alignment != null) {
alignable.gravity = when (alignment) {
Alignment.START -> Gravity.START
Alignment.CENTER -> Gravity.CENTER
Alignment.END -> Gravity.END
}
}
}
}
}

View file

@ -1,56 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.holders
import android.text.Editable
import android.view.View
import androidx.core.view.updatePadding
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.BlockTextEvent
import com.anytypeio.anytype.core_ui.features.page.marks
import com.anytypeio.anytype.core_ui.features.page.models.BlockTextViewHolder
import com.anytypeio.anytype.core_ui.features.page.models.Item
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.dimen
import kotlinx.android.synthetic.main.item_block_text.view.*
class ParagraphViewHolder constructor(
view: View,
textWatcher: BlockTextWatcher,
mentionWatcher: BlockTextMentionWatcher,
backspaceWatcher: BlockTextBackspaceWatcher,
enterWatcher: BlockTextEnterWatcher,
actionMenu: BlockTextMenu
) : BlockTextViewHolder(
view, textWatcher, mentionWatcher, backspaceWatcher, enterWatcher, actionMenu
) {
private val defaultPadding = dimen(R.dimen.default_document_content_padding_start)
override val content: TextInputWidget get() = itemView.textContent
override fun indentize(indent: Int) {
content.updatePadding(left = defaultPadding + indent * dimen(R.dimen.indent))
}
override fun getMentionSizes(): Pair<Int, Int> = with(itemView) {
Pair(
first = resources.getDimensionPixelSize(R.dimen.mention_span_image_size_default),
second = resources.getDimensionPixelSize(R.dimen.mention_span_image_padding_default)
)
}
override fun select(isSelected: Boolean) {}
override fun onTextEvent(
event: (BlockTextEvent) -> Unit,
id: String,
item: Item,
editable: Editable
) {
item.apply {
text = editable.toString()
marks = editable.marks()
}
event(BlockTextEvent.TextEvent.Pattern(id, item))
}
}

View file

@ -6,7 +6,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.ViewType
import com.anytypeio.anytype.core_ui.model.UiBlock
import com.anytypeio.anytype.presentation.page.editor.model.UiBlock
import kotlinx.android.synthetic.main.item_add_block_or_turn_into_item.view.*
import kotlinx.android.synthetic.main.item_add_block_or_turn_into_section.view.*

View file

@ -1,139 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.models
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.features.page.*
import com.anytypeio.anytype.core_ui.features.page.holders.*
import com.anytypeio.anytype.core_ui.tools.*
import com.anytypeio.anytype.core_utils.ext.typeOf
import timber.log.Timber
class BlockTextAdapter(
private var blocks: List<BlockView>,
private val event: (BlockTextEvent) -> Unit,
private val click: (ListenerType) -> Unit
) : RecyclerView.Adapter<BlockTextViewHolder>() {
val views: List<BlockView> get() = blocks
override fun getItemViewType(position: Int) = blocks[position].getViewType()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlockTextViewHolder {
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
BlockViewHolder.HOLDER_PARAGRAPH -> {
ParagraphViewHolder(
view = inflater.inflate(R.layout.item_block_text, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.TEXT)
)
}
BlockViewHolder.HOLDER_CHECKBOX -> {
CheckboxViewHolder(
view = inflater.inflate(R.layout.item_block_checkbox, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.TEXT)
)
}
BlockViewHolder.HOLDER_HEADER_ONE -> {
HeaderOneViewHolder(
view = inflater.inflate(R.layout.item_block_header_one, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
BlockViewHolder.HOLDER_HEADER_TWO -> {
HeaderTwoViewHolder(
view = inflater.inflate(R.layout.item_block_header_two, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
BlockViewHolder.HOLDER_HEADER_THREE -> {
HeaderThreeViewHolder(
view = inflater.inflate(R.layout.item_block_header_three, parent, false),
textWatcher = BlockTextWatcher(),
mentionWatcher = BlockTextMentionWatcher(),
backspaceWatcher = BlockTextBackspaceWatcher(),
enterWatcher = BlockTextEnterWatcher(),
actionMenu = BlockTextMenu(ContextMenuType.HEADER)
)
}
else -> throw IllegalStateException("Unexpected view type: $viewType")
}
}
override fun getItemCount(): Int = blocks.size
override fun onBindViewHolder(holder: BlockTextViewHolder, position: Int) {
val block = blocks[position]
if (holder is Holder.Indentable && block is BlockView.Indentable) {
holder.indentize(block.indent)
}
if (holder is Holder.Selectable && block is BlockView.Selectable) {
holder.select(block.isSelected)
}
if (holder is Holder.Alignable && block is BlockView.Alignable) {
holder.align(block.alignment)
}
}
// Bug workaround for losing text selection ability, see:
// https://code.google.com/p/android/issues/detail?id=208169
override fun onViewAttachedToWindow(holder: BlockTextViewHolder) {
super.onViewAttachedToWindow(holder)
holder.content.isEnabled = false
holder.content.isEnabled = true
}
fun updateWithDiffUtil(items: List<BlockView>) {
logDataSetUpdateEvent(items)
val result = DiffUtil.calculateDiff(BlockViewDiffUtil(old = blocks, new = items))
blocks = items
result.dispatchUpdatesTo(this)
}
private fun logDataSetUpdateEvent(items: List<BlockView>) {
Timber.d("----------Updating------------")
items.forEach { Timber.d(it.toString()) }
Timber.d("----------Finished------------")
}
override fun onBindViewHolder(
holder: BlockTextViewHolder,
position: Int,
payloads: MutableList<Any>
) {
if (payloads.isEmpty())
onBindViewHolder(holder, position)
else {
val block = blocks[position]
if (block is Item) {
holder.payload(
payloads = payloads.typeOf(),
clicked = click,
item = block
)
}
}
}
}

View file

@ -1,148 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.models
import android.content.Context
import android.text.Editable
import android.text.Spannable
import android.text.style.ClickableSpan
import android.view.View
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Markup
import com.anytypeio.anytype.core_ui.common.Span
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.extensions.drawable
import com.anytypeio.anytype.core_ui.widgets.text.MentionSpan
import com.anytypeio.anytype.core_ui.widgets.text.TextInputWidget
import com.anytypeio.anytype.core_utils.ext.VALUE_ROUNDED
import com.anytypeio.anytype.core_utils.ext.removeSpans
import timber.log.Timber
fun Editable.setMarkup(
markup: Markup,
context: Context? = null,
click: ((String) -> Unit)? = null,
mentionImageSize: Int = 0,
mentionImagePadding: Int = 0
) {
apply {
removeSpans<Span>()
setMarkup(markup, context, click, mentionImageSize, mentionImagePadding)
}
}
fun Spannable.setMarkup(
markup: Markup?,
context: Context? = null,
click: ((String) -> Unit)? = null,
mentionImageSize: Int = 0,
mentionImagePadding: Int = 0,
textColor: Int
) = markup?.marks?.forEach { mark ->
when (mark.type) {
Markup.Type.ITALIC -> setSpan(
Span.Italic(),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
Markup.Type.BOLD -> setSpan(
Span.Bold(),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
Markup.Type.STRIKETHROUGH -> setSpan(
Span.Strikethrough(),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
Markup.Type.TEXT_COLOR -> {
val color = mark.color() ?: ThemeColor.DEFAULT.text
setSpan(
Span.TextColor(color),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
}
Markup.Type.BACKGROUND_COLOR -> {
val background = mark.background() ?: ThemeColor.DEFAULT.background
setSpan(
Span.Highlight(background.toString()),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
}
Markup.Type.LINK -> setSpan(
Span.Url(mark.param as String, textColor),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
Markup.Type.KEYBOARD -> {
setSpan(
Span.Font(Markup.SPAN_MONOSPACE),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
setSpan(
Span.Keyboard(VALUE_ROUNDED),
mark.from,
mark.to,
Markup.DEFAULT_SPANNABLE_FLAG
)
}
Markup.Type.MENTION -> {
context?.let {
setMentionSpan(
mark = mark,
context = it,
click = click,
mentionImageSize = mentionImageSize,
mentionImagePadding = mentionImagePadding
)
} ?: run { Timber.d("Mention Span context is null") }
}
}
}
fun Spannable.setMentionSpan(
mark: Markup.Mark,
context: Context,
click: ((String) -> Unit)? = null,
mentionImageSize: Int = 0,
mentionImagePadding: Int = 0
): Spannable = apply {
if (!mark.param.isNullOrBlank()) {
setSpan(
MentionSpan(
context = context,
image = mark.image,
emoji = mark.emoji,
imageSize = mentionImageSize,
imagePadding = mentionImagePadding,
param = mark.param,
placeholder = context.drawable(R.drawable.ic_block_page_without_emoji),
),
mark.from,
mark.to,
Markup.MENTION_SPANNABLE_FLAG
)
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) {
(widget as? TextInputWidget)?.enableReadMode()
click?.invoke(mark.param)
}
}
setSpan(
clickableSpan,
mark.from,
mark.to,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
} else {
Timber.e("Get MentionSpan without param!")
}
}

View file

@ -1,5 +1,8 @@
package com.anytypeio.anytype.core_ui.features.page.scrollandmove
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTarget
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor
class DefaultScrollAndMoveTargetDescriptor : ScrollAndMoveTargetDescriptor {

View file

@ -7,9 +7,11 @@ import android.graphics.drawable.Drawable
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.features.page.SupportNesting
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.ScrollAndMoveTargetDescriptor.Companion.END_RANGE
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.ScrollAndMoveTargetDescriptor.Companion.INNER_RANGE
import com.anytypeio.anytype.core_ui.features.page.scrollandmove.ScrollAndMoveTargetDescriptor.Companion.START_RANGE
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTarget
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor.Companion.END_RANGE
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor.Companion.INNER_RANGE
import com.anytypeio.anytype.presentation.page.editor.sam.ScrollAndMoveTargetDescriptor.Companion.START_RANGE
class ScrollAndMoveTargetHighlighter(
private val screen: Point,

View file

@ -5,11 +5,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.Alignment.*
import com.anytypeio.anytype.core_ui.common.ThemeColor
import com.anytypeio.anytype.core_ui.features.page.styling.StylingEvent.*
import com.anytypeio.anytype.core_ui.features.page.styling.StylingType.*
import com.anytypeio.anytype.core_ui.state.ControlPanelState
import com.anytypeio.anytype.presentation.page.editor.ThemeColor
import com.anytypeio.anytype.presentation.page.editor.control.ControlPanelState
import com.anytypeio.anytype.presentation.page.editor.model.Alignment.*
import com.anytypeio.anytype.presentation.page.editor.styling.StylingEvent
import com.anytypeio.anytype.presentation.page.editor.styling.StylingEvent.*
import com.anytypeio.anytype.presentation.page.editor.styling.StylingType
import com.anytypeio.anytype.presentation.page.editor.styling.StylingType.*
import kotlinx.android.synthetic.main.block_style_toolbar_background.view.*
import kotlinx.android.synthetic.main.block_style_toolbar_color.view.*
import kotlinx.android.synthetic.main.block_style_toolbar_style.view.*

View file

@ -1,5 +0,0 @@
package com.anytypeio.anytype.core_ui.features.page.styling
enum class StylingMode {
MARKUP, BLOCK
}

Some files were not shown because too many files have changed in this diff Show more