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

Merge branch 'feature_package_change' into 'feature/Convert_Block_contentType'

New packaging.

See merge request ra3orbladez/anytype.io.mobile!11
This commit is contained in:
Evgenii Kozlov 2019-03-31 09:49:53 +00:00
commit 99c928cc8b
9 changed files with 66 additions and 17 deletions

View file

@ -7,9 +7,9 @@ import com.agileburo.anytype.feature_editor.data.datasource.BlockDataSource
import com.agileburo.anytype.feature_editor.data.datasource.IPFSDataSourceImpl
import com.agileburo.anytype.feature_editor.domain.EditorInteractor
import com.agileburo.anytype.feature_editor.domain.EditorInteractorImpl
import com.agileburo.anytype.feature_editor.presentation.BlockContentTypeConverter
import com.agileburo.anytype.feature_editor.presentation.BlockContentTypeConverterImpl
import com.agileburo.anytype.feature_editor.presentation.EditorViewModelFactory
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverter
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverterImpl
import com.agileburo.anytype.feature_editor.presentation.mvvm.EditorViewModelFactory
import com.agileburo.anytype.feature_editor.ui.EditorFragment
import com.google.gson.Gson
import com.google.gson.GsonBuilder
@ -54,13 +54,14 @@ class EditorModule {
@Provides
@PerFeature
fun provideFactory(interactor: EditorInteractor,
contentTypeConverter: BlockContentTypeConverter): EditorViewModelFactory =
contentTypeConverter: BlockContentTypeConverter
): EditorViewModelFactory =
EditorViewModelFactory(interactor, contentTypeConverter)
@Provides
@PerFeature
fun provideContentTypeConverter(): BlockContentTypeConverter =
BlockContentTypeConverterImpl()
BlockContentTypeConverterImpl()
@Provides
@PerFeature

View file

@ -1,4 +1,4 @@
package com.agileburo.anytype.feature_editor.presentation
package com.agileburo.anytype.feature_editor.presentation.converter
import com.agileburo.anytype.feature_editor.domain.Block
import com.agileburo.anytype.feature_editor.domain.ContentParam
@ -12,12 +12,12 @@ interface BlockContentTypeConverter {
*/
fun convert(block : Block, type : ContentType) : Block
fun getPermittedTypes(typeInitial: ContentType): Set<ContentType>
fun getForbiddenTypes(typeInitial: ContentType): Set<ContentType>
}
class BlockContentTypeConverterImpl : BlockContentTypeConverter {
class BlockContentTypeConverterImpl :
BlockContentTypeConverter {
override
fun getPermittedTypes(typeInitial: ContentType): Set<ContentType> =

View file

@ -1,10 +1,11 @@
package com.agileburo.anytype.feature_editor.presentation
package com.agileburo.anytype.feature_editor.presentation.mvvm
import androidx.lifecycle.ViewModel
import com.agileburo.anytype.feature_editor.disposedBy
import com.agileburo.anytype.feature_editor.domain.Block
import com.agileburo.anytype.feature_editor.domain.ContentType
import com.agileburo.anytype.feature_editor.domain.EditorInteractor
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverter
import com.agileburo.anytype.feature_editor.ui.EditBlockAction
import com.agileburo.anytype.feature_editor.ui.EditorState
import com.jakewharton.rxrelay2.BehaviorRelay

View file

@ -1,8 +1,9 @@
package com.agileburo.anytype.feature_editor.presentation
package com.agileburo.anytype.feature_editor.presentation.mvvm
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.agileburo.anytype.feature_editor.domain.EditorInteractor
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverter
class EditorViewModelFactory(
private val editorInteractor: EditorInteractor,
@ -12,5 +13,8 @@ class EditorViewModelFactory(
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T =
EditorViewModel(interactor = editorInteractor, contentTypeConverter = contentTypeConverter) as T
EditorViewModel(
interactor = editorInteractor,
contentTypeConverter = contentTypeConverter
) as T
}

View file

@ -0,0 +1,21 @@
package com.agileburo.anytype.feature_editor.presentation.util
import androidx.recyclerview.widget.DiffUtil
import com.agileburo.anytype.feature_editor.presentation.model.BlockView
class BlockViewDiffUtil(
private val old : List<BlockView>,
private val new : List<BlockView>
) : DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return old[oldItemPosition].id == new[newItemPosition].id
}
override fun getOldListSize(): Int = old.size
override fun getNewListSize(): Int = new.size
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
return new[newItemPosition] == old[oldItemPosition]
}
}

View file

@ -6,12 +6,14 @@ import android.text.style.BulletSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.agileburo.anytype.core_utils.swap
import com.agileburo.anytype.feature_editor.R
import com.agileburo.anytype.feature_editor.domain.Block
import com.agileburo.anytype.feature_editor.domain.ContentType
import com.agileburo.anytype.feature_editor.presentation.model.BlockView
import com.agileburo.anytype.feature_editor.presentation.util.BlockViewDiffUtil
import kotlinx.android.synthetic.main.item_block_checkbox.view.*
import kotlinx.android.synthetic.main.item_block_code_snippet.view.*
import kotlinx.android.synthetic.main.item_block_editable.view.*
@ -44,6 +46,14 @@ class EditorAdapter(
}
}
fun update(items : List<BlockView>) {
val callback = BlockViewDiffUtil(old = blocks, new = items)
val result = DiffUtil.calculateDiff(callback)
blocks.clear()
blocks.addAll(items)
result.dispatchUpdatesTo(this)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val inflater = LayoutInflater.from(parent.context)

View file

@ -30,6 +30,7 @@ sealed class EditorState {
data class ShowToolbar(val block: Block, val typesToHide: Set<ContentType>) : EditorState()
object HideToolbar : EditorState()
data class Result(val blocks: List<Block>) : EditorState()
data class Updates(val blocks : List<Block>) : EditorState()
data class Update(val block: Block) : EditorState()
object Loading : EditorState()
}

View file

@ -13,12 +13,11 @@ import com.agileburo.anytype.feature_editor.R
import com.agileburo.anytype.feature_editor.disposedBy
import com.agileburo.anytype.feature_editor.domain.Block
import com.agileburo.anytype.feature_editor.domain.ContentType
import com.agileburo.anytype.feature_editor.presentation.EditorViewModel
import com.agileburo.anytype.feature_editor.presentation.EditorViewModelFactory
import com.agileburo.anytype.feature_editor.presentation.mvvm.EditorViewModel
import com.agileburo.anytype.feature_editor.presentation.mvvm.EditorViewModelFactory
import com.agileburo.anytype.feature_editor.presentation.mapper.BlockViewMapper
import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.fragment_editor.*
import timber.log.Timber
import javax.inject.Inject
abstract class EditorFragment : Fragment() {
@ -32,7 +31,12 @@ abstract class EditorFragment : Fragment() {
private val viewModel by lazy {
ViewModelProviders.of(this, factory).get(EditorViewModel::class.java)
}
private var disposable = CompositeDisposable()
private val disposable = CompositeDisposable()
private val blockAdapter by lazy {
EditorAdapter(mutableListOf()) { block -> viewModel.onBlockClicked(block.id) }
}
abstract fun inject()
@ -40,7 +44,7 @@ abstract class EditorFragment : Fragment() {
inject()
super.onAttach(context)
viewModel.observeState()
.subscribe { handleState(it) }
.subscribe(this::handleState)
.disposedBy(disposable)
}
@ -61,7 +65,7 @@ abstract class EditorFragment : Fragment() {
layoutManager = LinearLayoutManager(requireContext())
adapter = EditorAdapter(mutableListOf()) { block -> viewModel.onBlockClicked(block.id) }
adapter = blockAdapter
editBlockToolbar.setMainActions(
textClick = { viewModel.onContentTypeClicked(EditBlockAction.TextClick(it)) },
@ -90,6 +94,7 @@ abstract class EditorFragment : Fragment() {
is EditorState.Loading -> {}
is EditorState.Result -> setBlocks(state.blocks)
is EditorState.Update -> updateBlock(state.block)
is EditorState.Updates -> render(state.blocks)
is EditorState.ShowToolbar -> showToolbar(block = state.block, typesToHide = state.typesToHide)
is EditorState.HideToolbar -> hideToolbar()
}
@ -101,6 +106,10 @@ abstract class EditorFragment : Fragment() {
(blockList.adapter as? EditorAdapter)?.updateBlock(mapper.mapToView(block))
}
private fun render(blocks : List<Block>) {
blockAdapter.update(blocks.map(mapper::mapToView))
}
private fun showToolbar(block: Block, typesToHide: Set<ContentType>) = with(editBlockToolbar) {
show(initialBlock = block, typesToHide = typesToHide)
visibility = View.VISIBLE

View file

@ -1,6 +1,8 @@
package com.agileburo.anytype.feature_editor.presentation
import com.agileburo.anytype.feature_editor.domain.ContentType
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverter
import com.agileburo.anytype.feature_editor.presentation.converter.BlockContentTypeConverterImpl
import org.junit.Assert
import org.junit.Before
import org.junit.Test