feat: opera media debug info

This commit is contained in:
rhunk
2023-09-30 17:19:51 +02:00
parent 1e2c71403e
commit 5e63f8fae7
4 changed files with 65 additions and 15 deletions

View File

@ -1,6 +1,7 @@
package me.rhunk.snapenhance
import android.app.Activity
import android.content.ClipData
import android.content.Context
import android.content.Intent
import android.content.res.Resources
@ -138,4 +139,8 @@ class ModContext {
fun getConfigLocale(): String {
return _config.locale
}
fun copyToClipboard(data: String, label: String = "Copied Text") {
androidContext.getSystemService(android.content.ClipboardManager::class.java).setPrimaryClip(ClipData.newPlainText(label, data))
}
}

View File

@ -4,8 +4,10 @@ import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.text.InputType
import android.view.Gravity
import android.view.ViewGroup.MarginLayoutParams
import android.widget.EditText
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.ProgressBar
@ -13,16 +15,12 @@ import android.widget.TextView
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import me.rhunk.snapenhance.SnapEnhance
import me.rhunk.snapenhance.bridge.DownloadCallback
import me.rhunk.snapenhance.core.database.objects.ConversationMessage
import me.rhunk.snapenhance.core.database.objects.FriendInfo
import me.rhunk.snapenhance.core.download.DownloadManagerClient
import me.rhunk.snapenhance.core.download.data.DownloadMediaType
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
import me.rhunk.snapenhance.core.download.data.InputMedia
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
import me.rhunk.snapenhance.core.download.data.SplitMediaAssetType
import me.rhunk.snapenhance.core.download.data.toKeyPair
import me.rhunk.snapenhance.core.download.data.*
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
import me.rhunk.snapenhance.core.util.download.RemoteMediaResolver
import me.rhunk.snapenhance.core.util.ktx.getObjectField
@ -31,6 +29,7 @@ import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
import me.rhunk.snapenhance.core.util.snap.MediaDownloaderHelper
import me.rhunk.snapenhance.core.util.snap.PreviewUtils
import me.rhunk.snapenhance.data.FileType
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
import me.rhunk.snapenhance.data.wrapper.impl.media.MediaInfo
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.LongformVideoPlaylistItem
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.SnapPlaylistItem
@ -179,6 +178,42 @@ class MediaDownloader : MessagingRuleFeature("MediaDownloader", MessagingRuleTyp
}
}
fun showLastOperaDebugMediaInfo() {
if (lastSeenMapParams == null || lastSeenMediaInfoMap == null) return
context.runOnUiThread {
val mediaInfoText = lastSeenMapParams?.concurrentHashMap?.map { (key, value) ->
val transformedValue = value.let {
if (it::class.java == SnapEnhance.classCache.snapUUID) {
SnapUUID(it).toString()
}
it
}
"- $key: $transformedValue"
}?.joinToString("\n") ?: "No media info found"
ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!).apply {
setTitle("Debug Media Info")
setView(EditText(context).apply {
inputType = InputType.TYPE_NULL
setTextIsSelectable(true)
isSingleLine = false
textSize = 12f
setPadding(20, 20, 20, 20)
setText(mediaInfoText)
setTextColor(context.resources.getColor(android.R.color.white, context.theme))
})
setNeutralButton("Copy") { _, _ ->
this@MediaDownloader.context.copyToClipboard(mediaInfoText)
}
setPositiveButton("Download") { _, _ ->
downloadLastOperaMediaAsync()
}
setNegativeButton("Cancel") { dialog, _ -> dialog.dismiss() }
}.show()
}
}
private fun handleLocalReferences(path: String) = runBlocking {
Uri.parse(path).let { uri ->
if (uri.scheme == "file") {

View File

@ -78,8 +78,7 @@ class ChatActionMenu : AbstractMenu() {
setMessage(text)
setPositiveButton("OK") { dialog, _ -> dialog.dismiss() }
setNegativeButton("Copy") { _, _ ->
val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
clipboardManager.setPrimaryClip(android.content.ClipData.newPlainText("debug", text))
this@ChatActionMenu.context.copyToClipboard(text, title)
}
}.show()
}
@ -173,8 +172,7 @@ class ChatActionMenu : AbstractMenu() {
val debugText = StringBuilder()
setOnClickListener {
val clipboardManager = context.getSystemService(android.content.Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
clipboardManager.setPrimaryClip(android.content.ClipData.newPlainText("debug", debugText.toString()))
this@ChatActionMenu.context.copyToClipboard(debugText.toString(), "debug")
}
addView(TextView(viewGroup.context).apply {

View File

@ -68,11 +68,23 @@ class OperaContextActionMenu : AbstractMenu() {
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
val button = Button(childView.getContext())
button.text = context.translation["opera_context_menu.download"]
button.setOnClickListener { context.feature(MediaDownloader::class).downloadLastOperaMediaAsync() }
button.applyTheme(isAmoled = false)
linearLayout.addView(button)
val translation = context.translation
val mediaDownloader = context.feature(MediaDownloader::class)
linearLayout.addView(Button(childView.getContext()).apply {
text = translation["opera_context_menu.download"]
setOnClickListener { mediaDownloader.downloadLastOperaMediaAsync() }
applyTheme(isAmoled = false)
})
if (context.isDeveloper) {
linearLayout.addView(Button(childView.getContext()).apply {
text = "Show debug info"
setOnClickListener { mediaDownloader.showLastOperaDebugMediaInfo() }
applyTheme(isAmoled = false)
})
}
(childView as ViewGroup).addView(linearLayout, 0)
} catch (e: Throwable) {
context.log.error("Error while injecting OperaContextActionMenu", e)