commit 5e63f8fae7e44c4fd17856d33893ee3b80589938
parent 1e2c71403e2535db4293a9cb4686fc4bf63de09f
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 30 Sep 2023 17:19:51 +0200
feat: opera media debug info
Diffstat:
4 files changed, 65 insertions(+), 15 deletions(-)
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt b/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt
@@ -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))
+ }
}
\ No newline at end of file
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/downloader/MediaDownloader.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/downloader/MediaDownloader.kt
@@ -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") {
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/ui/menu/impl/ChatActionMenu.kt b/core/src/main/kotlin/me/rhunk/snapenhance/ui/menu/impl/ChatActionMenu.kt
@@ -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 {
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/ui/menu/impl/OperaContextActionMenu.kt b/core/src/main/kotlin/me/rhunk/snapenhance/ui/menu/impl/OperaContextActionMenu.kt
@@ -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)