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:
parent
3d2ddd78c9
commit
212a9f801a
220 changed files with 907 additions and 2008 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.*
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
package com.anytypeio.anytype.core_ui.common
|
||||
|
||||
enum class Alignment { START, CENTER, END }
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.*
|
||||
|
||||
|
|
|
@ -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.*
|
||||
|
||||
|
|
|
@ -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.*
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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(
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 {
|
||||
/**
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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.*
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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!")
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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.*
|
||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue