mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 05:07:46 +02:00
feat: opera media debug info
This commit is contained in:
@ -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))
|
||||
}
|
||||
}
|
@ -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") {
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user