diff --git a/app/build.gradle b/app/build.gradle index b9d89015d3..393584a6e9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -80,4 +80,7 @@ dependencies { testImplementation unitTestDependencies.junit //Acceptance tests dependencies + + + implementation project(':domain') } diff --git a/app/src/main/java/com/agileburo/anytype/DocumentAdapter.kt b/app/src/main/java/com/agileburo/anytype/DocumentAdapter.kt index 7b2894b7ae..92cb3e44c2 100644 --- a/app/src/main/java/com/agileburo/anytype/DocumentAdapter.kt +++ b/app/src/main/java/com/agileburo/anytype/DocumentAdapter.kt @@ -1,26 +1,39 @@ package com.agileburo.anytype import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import anytype.io.mobile.model.Block -class DocumentAdapter() : RecyclerView.Adapter() { +class DocumentAdapter(private val blocks : MutableList) : RecyclerView.Adapter() { - override fun onCreateViewHolder(p0: ViewGroup, p1: Int): ViewHolder { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_text_holder, parent, false) + return ViewHolder.TextHolder(view) } override fun getItemCount(): Int { - return 10 + return blocks.size } - override fun onBindViewHolder(p0: ViewHolder, p1: Int) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + + } + + fun onItemMoved(fromPosition: Int, toPosition: Int) : Boolean { + swapPosition(fromPosition, toPosition) + notifyItemMoved(fromPosition, toPosition) + return true + } + + private fun swapPosition(fromPosition: Int, toPosition: Int) { + blocks.swap(fromPosition, toPosition) } sealed class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) { - + class TextHolder(itemView : View) : ViewHolder(itemView) } diff --git a/app/src/main/java/com/agileburo/anytype/DragAndDropBehavior.kt b/app/src/main/java/com/agileburo/anytype/DragAndDropBehavior.kt new file mode 100644 index 0000000000..6ae862c358 --- /dev/null +++ b/app/src/main/java/com/agileburo/anytype/DragAndDropBehavior.kt @@ -0,0 +1,27 @@ +package com.agileburo.anytype + +import android.support.v7.widget.RecyclerView +import android.support.v7.widget.helper.ItemTouchHelper +import android.support.v7.widget.helper.ItemTouchHelper.DOWN +import android.support.v7.widget.helper.ItemTouchHelper.UP + +class DragAndDropBehavior(val adapter : DocumentAdapter) : ItemTouchHelper.Callback() { + + override fun getMovementFlags(p0: RecyclerView, p1: RecyclerView.ViewHolder): Int { + return makeMovementFlags(UP or DOWN, 0) + } + + override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { + return adapter.onItemMoved(viewHolder.adapterPosition, target.adapterPosition) + } + + override fun isLongPressDragEnabled(): Boolean { + return true + } + + override fun isItemViewSwipeEnabled(): Boolean { + return false + } + + override fun onSwiped(p0: RecyclerView.ViewHolder, p1: Int) {} +} \ No newline at end of file diff --git a/app/src/main/java/com/agileburo/anytype/Extensions.kt b/app/src/main/java/com/agileburo/anytype/Extensions.kt new file mode 100644 index 0000000000..fe6c6df8ae --- /dev/null +++ b/app/src/main/java/com/agileburo/anytype/Extensions.kt @@ -0,0 +1,7 @@ +package com.agileburo.anytype + +fun MutableList.swap(index1: Int, index2: Int) { + val tmp = this[index1] // 'this' corresponds to the list + this[index1] = this[index2] + this[index2] = tmp +} \ No newline at end of file diff --git a/app/src/main/java/com/agileburo/anytype/MainActivity.kt b/app/src/main/java/com/agileburo/anytype/MainActivity.kt index c3dee60815..8237c17117 100644 --- a/app/src/main/java/com/agileburo/anytype/MainActivity.kt +++ b/app/src/main/java/com/agileburo/anytype/MainActivity.kt @@ -10,13 +10,22 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + btnART.setOnClickListener { - val editorFragment = kRichEditorFragment{ - } + + val editorFragment = kRichEditorFragment{} + supportFragmentManager.beginTransaction() .add(R.id.container, editorFragment) .commit() } + + dragAndDropButton.setOnClickListener { + supportFragmentManager + .beginTransaction() + .add(R.id.container, PageFragment.getInstance()) + .commit() + } } } diff --git a/app/src/main/java/com/agileburo/anytype/PageFragment.kt b/app/src/main/java/com/agileburo/anytype/PageFragment.kt new file mode 100644 index 0000000000..f502fb9607 --- /dev/null +++ b/app/src/main/java/com/agileburo/anytype/PageFragment.kt @@ -0,0 +1,42 @@ +package com.agileburo.anytype + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.helper.ItemTouchHelper +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import anytype.io.mobile.model.Block +import kotlinx.android.synthetic.main.fragment_page.* + +class PageFragment : Fragment() { + + companion object { + fun getInstance() : PageFragment { + return PageFragment() + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_page, container, false) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + pageRecycler.apply { + layoutManager = LinearLayoutManager(context) + adapter = configureAdapter() + } + } + + private fun configureAdapter() : DocumentAdapter { + return DocumentAdapter( + blocks = mutableListOf(Block(), Block(), Block(), Block(), Block(), Block(), Block()) + ).apply { + val callback = DragAndDropBehavior(this) + val touchHelper = ItemTouchHelper(callback) + touchHelper.attachToRecyclerView(pageRecycler) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 13f4e3dcb2..7e6ac3cae9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,11 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/container" + tools:context=".MainActivity">