feat(core/ui): opera download icon

This commit is contained in:
rhunk
2023-11-10 23:07:56 +01:00
parent 6fa7993712
commit 673b86618d
4 changed files with 51 additions and 1 deletions

View File

@ -27,9 +27,10 @@ class MenuViewInjector : Feature("MenuViewInjector", loadParams = FeatureLoadPar
@SuppressLint("ResourceType")
override fun asyncOnActivityCreate() {
menuMap[OperaContextActionMenu::class] = OperaContextActionMenu()
menuMap[OperaDownloadIconMenu::class] = OperaDownloadIconMenu()
menuMap[SettingsGearInjector::class] = SettingsGearInjector()
menuMap[FriendFeedInfoMenu::class] = FriendFeedInfoMenu()
menuMap[OperaContextActionMenu::class] = OperaContextActionMenu()
menuMap[ChatActionMenu::class] = ChatActionMenu()
menuMap[SettingsMenu::class] = SettingsMenu()
@ -42,6 +43,7 @@ class MenuViewInjector : Feature("MenuViewInjector", loadParams = FeatureLoadPar
val actionMenu = context.resources.getIdentifier("action_menu", "id")
val componentsHolder = context.resources.getIdentifier("components_holder", "id")
val feedNewChat = context.resources.getIdentifier("feed_new_chat", "id")
val contextMenuButtonIconView = context.resources.getIdentifier("context_menu_button_icon_view", "id")
context.event.subscribe(AddViewEvent::class) { event ->
val originalAddView: (View) -> Unit = {
@ -57,6 +59,10 @@ class MenuViewInjector : Feature("MenuViewInjector", loadParams = FeatureLoadPar
val childView: View = event.view
menuMap[OperaContextActionMenu::class]!!.inject(viewGroup, childView, originalAddView)
if (childView.id == contextMenuButtonIconView) {
menuMap[OperaDownloadIconMenu::class]!!.inject(viewGroup, childView, originalAddView)
}
if (event.parent.id == componentsHolder && childView.id == feedNewChat) {
menuMap[SettingsGearInjector::class]!!.inject(viewGroup, childView, originalAddView)
return@subscribe

View File

@ -0,0 +1,39 @@
package me.rhunk.snapenhance.core.ui.menu.impl
import android.graphics.Color
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import me.rhunk.snapenhance.core.features.impl.downloader.MediaDownloader
import me.rhunk.snapenhance.core.ui.menu.AbstractMenu
import me.rhunk.snapenhance.core.util.ktx.getDimens
import me.rhunk.snapenhance.core.util.ktx.getDrawable
class OperaDownloadIconMenu : AbstractMenu() {
private val downloadSvgDrawable by lazy { context.resources.getDrawable("svg_download", context.androidContext.theme) }
private val actionMenuIconSize by lazy { context.resources.getDimens("action_menu_icon_size") }
private val actionMenuIconMargin by lazy { context.resources.getDimens("action_menu_icon_margin") }
private val actionMenuIconMarginTop by lazy { context.resources.getDimens("action_menu_icon_margin_top") }
override fun inject(parent: ViewGroup, view: View, viewConsumer: (View) -> Unit) {
if (!context.config.downloader.operaDownloadButton.get()) return
parent.addView(ImageView(view.context).apply {
setImageDrawable(downloadSvgDrawable)
setColorFilter(Color.WHITE)
layoutParams = FrameLayout.LayoutParams(
actionMenuIconSize,
actionMenuIconSize
).apply {
setMargins(0, actionMenuIconMarginTop * 2 + actionMenuIconSize, 0, 0)
marginEnd = actionMenuIconMargin
gravity = Gravity.TOP or Gravity.END
}
setOnClickListener {
this@OperaDownloadIconMenu.context.feature(MediaDownloader::class).downloadLastOperaMediaAsync()
}
}, 0)
}
}