diff --git a/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt b/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt index 3e85c28ca2..a1ba0da798 100644 --- a/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt +++ b/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt @@ -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 ) } diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt index 79e120ef63..3a78a8b417 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt @@ -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() { 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 -> { diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockViewHolder.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockViewHolder.kt index 1f902436b4..bee858a301 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockViewHolder.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockViewHolder.kt @@ -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 = object : RequestListener { @@ -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) { diff --git a/core-ui/src/main/res/drawable/bg_menu_media_block.xml b/core-ui/src/main/res/drawable/bg_menu_media_block.xml new file mode 100644 index 0000000000..052c72a3d5 --- /dev/null +++ b/core-ui/src/main/res/drawable/bg_menu_media_block.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core-ui/src/main/res/drawable/ic_menu_media_block.xml b/core-ui/src/main/res/drawable/ic_menu_media_block.xml new file mode 100644 index 0000000000..051751fde9 --- /dev/null +++ b/core-ui/src/main/res/drawable/ic_menu_media_block.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-ui/src/main/res/layout/item_block_file.xml b/core-ui/src/main/res/layout/item_block_file.xml index 551fa29eab..610602ee17 100644 --- a/core-ui/src/main/res/layout/item_block_file.xml +++ b/core-ui/src/main/res/layout/item_block_file.xml @@ -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" /> + + \ No newline at end of file diff --git a/core-ui/src/main/res/layout/item_block_picture_error.xml b/core-ui/src/main/res/layout/item_block_picture_error.xml index 0f910389f9..dcef049db3 100644 --- a/core-ui/src/main/res/layout/item_block_picture_error.xml +++ b/core-ui/src/main/res/layout/item_block_picture_error.xml @@ -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" /> diff --git a/core-ui/src/main/res/layout/item_block_picture_placeholder.xml b/core-ui/src/main/res/layout/item_block_picture_placeholder.xml index 65ff200c0a..27f05c397c 100644 --- a/core-ui/src/main/res/layout/item_block_picture_placeholder.xml +++ b/core-ui/src/main/res/layout/item_block_picture_placeholder.xml @@ -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" /> diff --git a/core-ui/src/main/res/layout/item_block_picture_uploading.xml b/core-ui/src/main/res/layout/item_block_picture_uploading.xml index 5e7ff2800e..9c882493c9 100644 --- a/core-ui/src/main/res/layout/item_block_picture_uploading.xml +++ b/core-ui/src/main/res/layout/item_block_picture_uploading.xml @@ -43,7 +43,7 @@ app:layout_constraintTop_toTopOf="@+id/icPicture" /> + + \ No newline at end of file diff --git a/core-ui/src/main/res/layout/item_block_video_empty.xml b/core-ui/src/main/res/layout/item_block_video_empty.xml index 0d9433e420..bd7b25c51e 100644 --- a/core-ui/src/main/res/layout/item_block_video_empty.xml +++ b/core-ui/src/main/res/layout/item_block_video_empty.xml @@ -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" /> + + + + + \ No newline at end of file diff --git a/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt b/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt index a6d06d7f02..d2b81ef36c 100644 --- a/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt +++ b/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt @@ -1055,6 +1055,11 @@ class PageViewModel( } } + fun onMediaBlockMenuClicked(id: String) { + updateFocus(id) + onActionToolbarClicked() + } + private fun addNewBlockAtTheEnd() { proceedWithCreatingNewTextBlock( id = "",