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

Media blocks menu (#331)

This commit is contained in:
Konstantin Ivanov 2020-03-27 15:02:36 +03:00 committed by GitHub
parent 2c04db3d77
commit 94fe66555a
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 145 additions and 48 deletions

View file

@ -121,7 +121,8 @@ open class PageFragment : NavigationFragment(R.layout.fragment_page),
onAddLocalPictureClick = vm::onAddLocalPictureClicked,
onAddLocalFileClick = vm::onAddLocalFileClicked,
onTogglePlaceholderClicked = vm::onTogglePlaceholderClicked,
onToggleClicked = vm::onToggleClicked
onToggleClicked = vm::onToggleClicked,
onMediaBlockMenuClick = vm::onMediaBlockMenuClicked
)
}

View file

@ -67,7 +67,8 @@ class BlockAdapter(
private val onDownloadFileClicked: (String) -> Unit,
private val onBookmarkPlaceholderClicked: (String) -> Unit,
private val onTogglePlaceholderClicked: (String) -> Unit,
private val onToggleClicked: (String) -> Unit
private val onToggleClicked: (String) -> Unit,
private val onMediaBlockMenuClick:(String) -> Unit
) : RecyclerView.Adapter<BlockViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlockViewHolder {
@ -512,12 +513,14 @@ class BlockAdapter(
is BlockViewHolder.File -> {
holder.bind(
item = blocks[position] as BlockView.File.View,
onDownloadFileClicked = onDownloadFileClicked
onDownloadFileClicked = onDownloadFileClicked,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.File.Error -> {
holder.bind(
item = blocks[position] as BlockView.File.Error
item = blocks[position] as BlockView.File.Error,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.File.Upload -> {
@ -528,12 +531,14 @@ class BlockAdapter(
is BlockViewHolder.File.Placeholder -> {
holder.bind(
item = blocks[position] as BlockView.File.Placeholder,
onAddLocalFileClick = onAddLocalFileClick
onAddLocalFileClick = onAddLocalFileClick,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Video -> {
holder.bind(
item = blocks[position] as BlockView.Video.View
item = blocks[position] as BlockView.Video.View,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Video.Upload -> {
@ -544,12 +549,14 @@ class BlockAdapter(
is BlockViewHolder.Video.Placeholder -> {
holder.bind(
item = blocks[position] as BlockView.Video.Placeholder,
onAddLocalVideoClick = onAddLocalVideoClick
onAddLocalVideoClick = onAddLocalVideoClick,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Video.Error -> {
holder.bind(
item = blocks[position] as BlockView.Video.Error
item = blocks[position] as BlockView.Video.Error,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Page -> {
@ -571,18 +578,21 @@ class BlockAdapter(
}
is BlockViewHolder.Picture -> {
holder.bind(
item = blocks[position] as BlockView.Picture.View
item = blocks[position] as BlockView.Picture.View,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Picture.Placeholder -> {
holder.bind(
item = blocks[position] as BlockView.Picture.Placeholder,
onAddLocalPictureClick = onAddLocalPictureClick
onAddLocalPictureClick = onAddLocalPictureClick,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Picture.Error -> {
holder.bind(
item = blocks[position] as BlockView.Picture.Error
item = blocks[position] as BlockView.Picture.Error,
menuClick = onMediaBlockMenuClick
)
}
is BlockViewHolder.Picture.Upload -> {

View file

@ -15,7 +15,10 @@ import com.agileburo.anytype.core_ui.BuildConfig
import com.agileburo.anytype.core_ui.R
import com.agileburo.anytype.core_ui.common.isLinksPresent
import com.agileburo.anytype.core_ui.common.toSpannable
import com.agileburo.anytype.core_ui.extensions.*
import com.agileburo.anytype.core_ui.extensions.color
import com.agileburo.anytype.core_ui.extensions.invisible
import com.agileburo.anytype.core_ui.extensions.tint
import com.agileburo.anytype.core_ui.extensions.visible
import com.agileburo.anytype.core_ui.features.page.BlockViewDiffUtil.Companion.NUMBER_CHANGED
import com.agileburo.anytype.core_ui.features.page.BlockViewDiffUtil.Companion.TEXT_CHANGED
import com.agileburo.anytype.core_ui.features.page.BlockViewDiffUtil.Companion.TOGGLE_EMPTY_STATE_CHANGED
@ -61,7 +64,6 @@ import kotlinx.android.synthetic.main.item_block_toggle.view.*
import kotlinx.android.synthetic.main.item_block_video.view.*
import kotlinx.android.synthetic.main.item_block_video_empty.view.*
import kotlinx.android.synthetic.main.item_block_video_error.view.*
import kotlinx.android.synthetic.main.item_block_video_error.view.icMore
import kotlinx.android.synthetic.main.item_block_video_uploading.view.*
import android.text.format.Formatter as FileSizeFormatter
@ -601,10 +603,12 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val size = itemView.fileSize
private val name = itemView.filename
private val guideline = itemView.fileGuideline
private val btnMenu = itemView.btnFileMenu
fun bind(
item: BlockView.File.View,
onDownloadFileClicked: (String) -> Unit
onDownloadFileClicked: (String) -> Unit,
menuClick: (String) -> Unit
) {
indentize(item)
name.text = item.name
@ -622,6 +626,7 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
MimeTypes.Category.PRESENTATION -> icon.setImageResource(R.drawable.ic_mime_presentation)
MimeTypes.Category.OTHER -> icon.setImageResource(R.drawable.ic_mime_other)
}
btnMenu.setOnClickListener { menuClick(item.id) }
itemView.setOnClickListener { onDownloadFileClicked(item.id) }
}
@ -634,18 +639,16 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Placeholder(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.filePlaceholderRoot
private val btnMenu = itemView.btnFilePlaceholderMenu
fun bind(
item: BlockView.File.Placeholder,
onAddLocalFileClick: (String) -> Unit
onAddLocalFileClick: (String) -> Unit,
menuClick: (String) -> Unit
) {
indentize(item)
itemView.setOnClickListener {
onAddLocalFileClick(item.id)
}
itemView.icMore.setOnClickListener {
it.context.toast("Not implemented yet!")
}
btnMenu.setOnClickListener { menuClick(item.id) }
itemView.setOnClickListener { onAddLocalFileClick(item.id) }
}
override fun indentize(item: BlockView.Indentable) {
@ -658,8 +661,10 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Error(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.fileErrorPlaceholderRoot
private val btnMenu = itemView.btnFileErrorMenu
fun bind(item: BlockView.File.Error) {
fun bind(item: BlockView.File.Error, menuClick: (String) -> Unit) {
btnMenu.setOnClickListener { menuClick(item.id) }
indentize(item)
}
@ -689,8 +694,10 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Video(view: View) : BlockViewHolder(view), IndentableHolder {
private val player = itemView.playerView
private val btnMenu = itemView.btnVideoMenu
fun bind(item: BlockView.Video.View) {
fun bind(item: BlockView.Video.View, menuClick: (String) -> Unit) {
btnMenu.setOnClickListener { menuClick(item.id) }
indentize(item)
initPlayer(item.url)
}
@ -719,12 +726,14 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Placeholder(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.videoPlaceholderRoot
private val btnMenu = itemView.btnVideoPlaceholderMenu
fun bind(item: BlockView.Video.Placeholder, onAddLocalVideoClick: (String) -> Unit) {
fun bind(item: BlockView.Video.Placeholder,
onAddLocalVideoClick: (String) -> Unit,
menuClick: (String) -> Unit) {
indentize(item)
itemView.setOnClickListener {
onAddLocalVideoClick(item.id)
}
btnMenu.setOnClickListener { menuClick(item.id) }
itemView.setOnClickListener { onAddLocalVideoClick(item.id) }
}
override fun indentize(item: BlockView.Indentable) {
@ -737,8 +746,10 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Error(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.videoErrorRoot
private val btnMenu = itemView.btnVideoErrorMenu
fun bind(item: BlockView.Video.Error) {
fun bind(item: BlockView.Video.Error, menuClick: (String) -> Unit) {
btnMenu.setOnClickListener { menuClick(item.id) }
indentize(item)
}
@ -879,6 +890,7 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val image = itemView.image
private val root = itemView.pictureRootLayout
private val error = itemView.error
private val btnMenu = itemView.btnPicMenu
private val listener: RequestListener<Drawable> = object : RequestListener<Drawable> {
@ -904,8 +916,11 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
}
}
fun bind(item: BlockView.Picture.View) {
fun bind(item: BlockView.Picture.View, menuClick: (String) -> Unit) {
indentize(item)
btnMenu.setOnClickListener {
menuClick(item.id)
}
Glide.with(image).load(item.url).listener(listener).into(image)
}
@ -918,9 +933,17 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Placeholder(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.picturePlaceholderRoot
private val btnMore = itemView.btnPicPlaceholderMenu
fun bind(item: BlockView.Picture.Placeholder, onAddLocalPictureClick: (String) -> Unit) {
fun bind(
item: BlockView.Picture.Placeholder,
onAddLocalPictureClick: (String) -> Unit,
menuClick: (String) -> Unit
) {
indentize(item)
btnMore.setOnClickListener {
menuClick(item.id)
}
itemView.setOnClickListener {
onAddLocalPictureClick(item.id)
}
@ -936,9 +959,13 @@ sealed class BlockViewHolder(view: View) : RecyclerView.ViewHolder(view) {
class Error(view: View) : BlockViewHolder(view), IndentableHolder {
private val root = itemView.pictureErrorRoot
private val btnMore = itemView.btnPicErrorMenu
fun bind(item: BlockView.Picture.Error) {
fun bind(item: BlockView.Picture.Error, menuClick: (String) -> Unit) {
indentize(item)
btnMore.setOnClickListener {
menuClick(item.id)
}
}
override fun indentize(item: BlockView.Indentable) {

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#59000000" />
<corners android:radius="4dp" />
</shape>

View file

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="24dp"
android:viewportWidth="25"
android:viewportHeight="24">
<path
android:pathData="M6.0029,14.0323C7.1075,14.0323 8.0029,13.1369 8.0029,12.0323C8.0029,10.9278 7.1075,10.0323 6.0029,10.0323C4.8984,10.0323 4.0029,10.9278 4.0029,12.0323C4.0029,13.1369 4.8984,14.0323 6.0029,14.0323Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M12.0029,14.0323C13.1075,14.0323 14.0029,13.1369 14.0029,12.0323C14.0029,10.9278 13.1075,10.0323 12.0029,10.0323C10.8984,10.0323 10.0029,10.9278 10.0029,12.0323C10.0029,13.1369 10.8984,14.0323 12.0029,14.0323Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M18.0029,14.0323C19.1075,14.0323 20.0029,13.1369 20.0029,12.0323C20.0029,10.9278 19.1075,10.0323 18.0029,10.0323C16.8984,10.0323 16.0029,10.9278 16.0029,12.0323C16.0029,13.1369 16.8984,14.0323 18.0029,14.0323Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -44,12 +44,12 @@
android:id="@+id/fileSize"
style="@style/BlockFileFileSizeContentStyle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/fileMenuButton"
app:layout_constraintEnd_toStartOf="@+id/btnFileMenu"
app:layout_constraintTop_toTopOf="parent"
tools:text="2.1 MB" />
<ImageView
android:id="@+id/fileMenuButton"
android:id="@+id/btnFileMenu"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginTop="3dp"

View file

@ -40,13 +40,13 @@
android:text="@string/error_while_loading"
android:textColor="@android:color/holo_red_dark"
app:layout_constraintBottom_toBottomOf="@+id/icFile"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnFileErrorMenu"
app:layout_constraintStart_toEndOf="@+id/icFile"
app:layout_constraintTop_toTopOf="@+id/icFile"
tools:text="@string/error_while_loading" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnFileErrorMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"

View file

@ -40,12 +40,12 @@
android:text="@string/hint_upload_file"
android:textColor="#ACA996"
app:layout_constraintBottom_toBottomOf="@+id/icFile"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnFilePlaceholderMenu"
app:layout_constraintStart_toEndOf="@+id/icFile"
app:layout_constraintTop_toTopOf="@+id/icFile" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnFilePlaceholderMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pictureRootLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -34,4 +35,14 @@
app:layout_constraintStart_toStartOf="@+id/image"
app:layout_constraintTop_toTopOf="@+id/image" />
<include
android:id="@+id/btnPicMenu"
layout="@layout/menu_media_block"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/image" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -42,17 +42,17 @@
tools:text="@string/error_while_loading"
android:textColor="@android:color/holo_red_dark"
app:layout_constraintBottom_toBottomOf="@+id/icPicture"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnPicErrorMenu"
app:layout_constraintStart_toEndOf="@+id/icPicture"
app:layout_constraintTop_toTopOf="@+id/icPicture" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnPicErrorMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginEnd="12dp"
android:visibility="invisible"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_block_more" />

View file

@ -41,17 +41,17 @@
android:text="@string/hint_upload_image"
android:textColor="#ACA996"
app:layout_constraintBottom_toBottomOf="@+id/icPicture"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnPicPlaceholderMenu"
app:layout_constraintStart_toEndOf="@+id/icPicture"
app:layout_constraintTop_toTopOf="@+id/icPicture" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnPicPlaceholderMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginEnd="12dp"
android:visibility="invisible"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_block_more" />

View file

@ -43,7 +43,7 @@
app:layout_constraintTop_toTopOf="@+id/icPicture" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnPicUploadMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"

View file

@ -14,4 +14,13 @@
android:layout_height="250dp"
android:visibility="visible" />
<include
android:id="@+id/btnVideoMenu"
layout="@layout/menu_media_block"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="4dp"
android:layout_marginEnd="4dp" />
</FrameLayout>

View file

@ -41,12 +41,12 @@
android:textColor="#ACA996"
app:layout_constraintBottom_toBottomOf="@+id/icVideo"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnVideoPlaceholderMenu"
app:layout_constraintStart_toEndOf="@+id/icVideo"
app:layout_constraintTop_toTopOf="@+id/icVideo" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnVideoPlaceholderMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"

View file

@ -39,13 +39,13 @@
android:text="@string/error_while_loading"
android:textColor="@android:color/holo_red_dark"
app:layout_constraintBottom_toBottomOf="@+id/icVideo"
app:layout_constraintEnd_toStartOf="@+id/icMore"
app:layout_constraintEnd_toStartOf="@+id/btnVideoErrorMenu"
app:layout_constraintStart_toEndOf="@+id/icVideo"
app:layout_constraintTop_toTopOf="@+id/icVideo"
tools:text="@string/error_while_loading" />
<ImageView
android:id="@+id/icMore"
android:id="@+id/btnVideoErrorMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icMore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_menu_media_block"
android:src="@drawable/ic_menu_media_block" />
</FrameLayout>

View file

@ -1055,6 +1055,11 @@ class PageViewModel(
}
}
fun onMediaBlockMenuClicked(id: String) {
updateFocus(id)
onActionToolbarClicked()
}
private fun addNewBlockAtTheEnd() {
proceedWithCreatingNewTextBlock(
id = "",