From b09f26ed346341afe9513cbd21d428b4b7a79364 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Sat, 29 Jun 2024 10:59:18 -0500 Subject: [PATCH] fix: some markdown fixes --- app/src/main/AndroidManifest.xml | 1 + app/src/main/java/ani/dantotsu/Functions.kt | 15 +++- .../main/java/ani/dantotsu/MainActivity.kt | 8 ++- .../media/comments/CommentsFragment.kt | 1 + .../ani/dantotsu/others/AlignTagHandler.kt | 32 +++++++++ .../ani/dantotsu/settings/SettingsActivity.kt | 14 ++-- .../dantotsu/settings/saving/Preferences.kt | 1 + .../dantotsu/util/ActivityMarkdownCreator.kt | 9 ++- .../java/ani/dantotsu/util/AniMarkdown.kt | 65 ++++++++++++++---- .../java/ani/dantotsu/util/AudioHelper.kt | 58 ++++++++++++++++ .../res/layout/activity_markdown_creator.xml | 15 ++++ app/src/main/res/raw/audio.mp3 | Bin 0 -> 34560 bytes app/src/main/res/values/strings.xml | 2 + 13 files changed, 194 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/ani/dantotsu/others/AlignTagHandler.kt create mode 100644 app/src/main/java/ani/dantotsu/util/AudioHelper.kt create mode 100644 app/src/main/res/raw/audio.mp3 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a6ab597..9b071c2b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ + diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt index abfebb3a..c41d22ce 100644 --- a/app/src/main/java/ani/dantotsu/Functions.kt +++ b/app/src/main/java/ani/dantotsu/Functions.kt @@ -68,7 +68,6 @@ import android.widget.ImageView import android.widget.TextView import android.widget.Toast import androidx.annotation.AttrRes -import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatDelegate import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -98,6 +97,7 @@ import ani.dantotsu.databinding.ItemCountDownBinding import ani.dantotsu.media.Media import ani.dantotsu.media.MediaDetailsActivity import ani.dantotsu.notifications.IncognitoNotificationClickReceiver +import ani.dantotsu.others.AlignTagHandler import ani.dantotsu.others.ImageViewDialog import ani.dantotsu.others.SpoilerPlugin import ani.dantotsu.parsers.ShowResponse @@ -119,8 +119,8 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withC import com.bumptech.glide.load.resource.gif.GifDrawable import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target -import com.bumptech.glide.request.target.ViewTarget import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior @@ -1448,6 +1448,8 @@ fun openOrCopyAnilistLink(link: String) { } else { copyToClipboard(link, true) } + } else if (getYoutubeId(link).isNotEmpty()) { + openLinkInYouTube(link) } else { copyToClipboard(link, true) } @@ -1484,6 +1486,7 @@ fun buildMarkwon( TagHandlerNoOp.create("h1", "h2", "h3", "h4", "h5", "h6", "hr", "pre", "a") ) } + plugin.addHandler(AlignTagHandler()) }) .usePlugin(GlideImagesPlugin.create(object : GlideImagesPlugin.GlideStore { @@ -1527,3 +1530,11 @@ fun buildMarkwon( .build() return markwon } + + + +fun getYoutubeId(url: String): String { + val regex = """(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|(?:youtu\.be|youtube\.com)/)([^"&?/\s]{11})|youtube\.com/""".toRegex() + val matchResult = regex.find(url) + return matchResult?.groupValues?.getOrNull(1) ?: "" +} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/MainActivity.kt b/app/src/main/java/ani/dantotsu/MainActivity.kt index 7b2e0b1d..412ed676 100644 --- a/app/src/main/java/ani/dantotsu/MainActivity.kt +++ b/app/src/main/java/ani/dantotsu/MainActivity.kt @@ -2,7 +2,6 @@ package ani.dantotsu import android.animation.ObjectAnimator import android.annotation.SuppressLint -import android.app.AlertDialog import android.content.Intent import android.content.res.Configuration import android.graphics.drawable.Animatable @@ -60,11 +59,11 @@ import ani.dantotsu.settings.saving.SharedPreferenceBooleanLiveData import ani.dantotsu.settings.saving.internal.PreferenceKeystore import ani.dantotsu.settings.saving.internal.PreferencePackager import ani.dantotsu.themes.ThemeManager +import ani.dantotsu.util.AudioHelper import ani.dantotsu.util.Logger import ani.dantotsu.util.customAlertDialog import com.google.android.material.snackbar.BaseTransientBottomBar import com.google.android.material.snackbar.Snackbar -import com.google.android.material.textfield.TextInputEditText import eu.kanade.domain.source.service.SourcePreferences import io.noties.markwon.Markwon import io.noties.markwon.SoftBreakAddsNewLinePlugin @@ -455,7 +454,10 @@ class MainActivity : AppCompatActivity() { } } } - + if (PrefManager.getVal(PrefName.OC)) { + AudioHelper.run(this, R.raw.audio) + PrefManager.setVal(PrefName.OC, false) + } val torrentManager = Injekt.get() fun startTorrent() { if (torrentManager.isAvailable() && PrefManager.getVal(PrefName.TorrentEnabled)) { diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt index fc21805e..de1c76b8 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt @@ -353,6 +353,7 @@ class CommentsFragment : Fragment() { } } } + @SuppressLint("NotifyDataSetChanged") override fun onResume() { super.onResume() diff --git a/app/src/main/java/ani/dantotsu/others/AlignTagHandler.kt b/app/src/main/java/ani/dantotsu/others/AlignTagHandler.kt new file mode 100644 index 00000000..1708ed05 --- /dev/null +++ b/app/src/main/java/ani/dantotsu/others/AlignTagHandler.kt @@ -0,0 +1,32 @@ +package ani.dantotsu.others + +import android.text.Layout +import android.text.style.AlignmentSpan +import io.noties.markwon.MarkwonConfiguration +import io.noties.markwon.RenderProps +import io.noties.markwon.html.HtmlTag +import io.noties.markwon.html.tag.SimpleTagHandler + + +class AlignTagHandler : SimpleTagHandler() { + + override fun getSpans( + configuration: MarkwonConfiguration, + renderProps: RenderProps, + tag: HtmlTag + ): Any { + val alignment: Layout.Alignment = if (tag.attributes().containsKey("center")) { + Layout.Alignment.ALIGN_CENTER + } else if (tag.attributes().containsKey("end")) { + Layout.Alignment.ALIGN_OPPOSITE + } else { + Layout.Alignment.ALIGN_NORMAL + } + + return AlignmentSpan.Standard(alignment) + } + + override fun supportedTags(): Collection { + return setOf("align") + } +} diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt index 2022fac1..7e58e870 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt @@ -23,12 +23,12 @@ import ani.dantotsu.databinding.ActivitySettingsBinding import ani.dantotsu.initActivity import ani.dantotsu.navBarHeight import ani.dantotsu.openLinkInBrowser -import ani.dantotsu.openLinkInYouTube import ani.dantotsu.others.AppUpdater import ani.dantotsu.others.CustomBottomDialog import ani.dantotsu.pop import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.settings.saving.PrefManager +import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.snackString import ani.dantotsu.startMainActivity import ani.dantotsu.statusBarHeight @@ -217,10 +217,14 @@ class SettingsActivity : AppCompatActivity() { settingsLogo.setSafeOnClickListener { cursedCounter++ (settingsLogo.drawable as Animatable).start() - if (cursedCounter % 7 == 0) { - toast(R.string.you_cursed) - openLinkInYouTube(getString(R.string.cursed_yt)) - //PrefManager.setVal(PrefName.ImageUrl, !PrefManager.getVal(PrefName.ImageUrl, false)) + if (cursedCounter % 16 == 0) { + val oldVal: Boolean = PrefManager.getVal(PrefName.OC) + if (!oldVal) { + toast(R.string.omega_cursed) + } else { + toast(R.string.omega_freed) + } + PrefManager.setVal(PrefName.OC, !oldVal) } else { snackString(array[(Math.random() * array.size).toInt()], context) } diff --git a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt index 6f188b85..c71a6a9b 100644 --- a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt +++ b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt @@ -191,6 +191,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files SubscriptionNotificationStore(Pref(Location.Irrelevant, List::class, listOf())), UnreadCommentNotifications(Pref(Location.Irrelevant, Int::class, 0)), DownloadsDir(Pref(Location.Irrelevant, String::class, "")), + OC(Pref(Location.Irrelevant, Boolean::class, false)), RefreshStatus(Pref(Location.Irrelevant, Boolean::class, false)), //Protected diff --git a/app/src/main/java/ani/dantotsu/util/ActivityMarkdownCreator.kt b/app/src/main/java/ani/dantotsu/util/ActivityMarkdownCreator.kt index fdc24937..5548401e 100644 --- a/app/src/main/java/ani/dantotsu/util/ActivityMarkdownCreator.kt +++ b/app/src/main/java/ani/dantotsu/util/ActivityMarkdownCreator.kt @@ -6,6 +6,7 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.LinearLayout import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.core.widget.addTextChangedListener import ani.dantotsu.R @@ -42,7 +43,7 @@ class ActivityMarkdownCreator : AppCompatActivity() { BOLD("****", 2, R.id.formatBold), ITALIC("**", 1, R.id.formatItalic), STRIKETHROUGH("~~~~", 2, R.id.formatStrikethrough), - SPOILER("~||~", 2, R.id.formatSpoiler), + SPOILER("~!!~", 2, R.id.formatSpoiler), LINK("[Placeholder](%s)", 0, R.id.formatLink), IMAGE("img(%s)", 0, R.id.formatImage), YOUTUBE("youtube(%s)", 0, R.id.formatYoutube), @@ -267,9 +268,13 @@ class ActivityMarkdownCreator : AppCompatActivity() { private fun previewMarkdown(preview: Boolean) { val markwon = buildMarkwon(this, false, anilist = true) if (preview) { + binding.editText.isVisible = false binding.editText.isEnabled = false - markwon.setMarkdown(binding.editText, text) + binding.markdownPreview.isVisible = true + markwon.setMarkdown(binding.markdownPreview, AniMarkdown.getBasicAniHTML(text)) } else { + binding.editText.isVisible = true + binding.markdownPreview.isVisible = false binding.editText.setText(text) binding.editText.isEnabled = true val markwonEditor = MarkwonEditor.create(markwon) diff --git a/app/src/main/java/ani/dantotsu/util/AniMarkdown.kt b/app/src/main/java/ani/dantotsu/util/AniMarkdown.kt index 3f8c04d7..200b3883 100644 --- a/app/src/main/java/ani/dantotsu/util/AniMarkdown.kt +++ b/app/src/main/java/ani/dantotsu/util/AniMarkdown.kt @@ -1,12 +1,13 @@ package ani.dantotsu.util +import ani.dantotsu.getYoutubeId import ani.dantotsu.util.ColorEditor.Companion.toCssColor class AniMarkdown { //istg anilist has the worst api companion object { - private fun convertNestedImageToHtml(markdown: String): String { + private fun String.convertNestedImageToHtml(): String { val regex = """\[!\[(.*?)]\((.*?)\)]\((.*?)\)""".toRegex() - return regex.replace(markdown) { matchResult -> + return regex.replace(this) { matchResult -> val altText = matchResult.groupValues[1] val imageUrl = matchResult.groupValues[2] val linkUrl = matchResult.groupValues[3] @@ -14,26 +15,49 @@ class AniMarkdown { //istg anilist has the worst api } } - private fun convertImageToHtml(markdown: String): String { + private fun String.convertImageToHtml(): String { val regex = """!\[(.*?)]\((.*?)\)""".toRegex() - return regex.replace(markdown) { matchResult -> + val anilistRegex = """img\(.*?\)""".toRegex() + val markdownImage = regex.replace(this) { matchResult -> val altText = matchResult.groupValues[1] val imageUrl = matchResult.groupValues[2] """$altText""" } + return anilistRegex.replace(markdownImage) { matchResult -> + val imageUrl = matchResult.groupValues[1] + """Image""" + } } - private fun convertLinkToHtml(markdown: String): String { + private fun String.convertLinkToHtml(): String { val regex = """\[(.*?)]\((.*?)\)""".toRegex() - return regex.replace(markdown) { matchResult -> + return regex.replace(this) { matchResult -> val linkText = matchResult.groupValues[1] val linkUrl = matchResult.groupValues[2] """$linkText""" } } - private fun replaceLeftovers(html: String): String { - return html.replace(" ", " ") + private fun String.convertYoutubeToHtml(): String { + val regex = """
""".toRegex() + return regex.replace(this) { matchResult -> + val url = matchResult.groupValues[1] + val id = getYoutubeId(url) + if (id.isNotEmpty()) { + """
+ $url + + Youtube Link + +
""".trimIndent() + } else { + """Youtube Video""" + } + } + } + + private fun String.replaceLeftovers(): String { + return this.replace(" ", " ") .replace("&", "&") .replace("<", "<") .replace(">", ">") @@ -46,18 +70,29 @@ class AniMarkdown { //istg anilist has the worst api .replace("\n", "
") } - private fun underlineToHtml(html: String): String { - return html.replace("(?s)___(.*?)___".toRegex(), "
$1
") + private fun String.underlineToHtml(): String { + return this.replace("(?s)___(.*?)___".toRegex(), "
$1
") .replace("(?s)__(.*?)__".toRegex(), "
$1
") .replace("(?s)\\s+_([^_]+)_\\s+".toRegex(), "$1") } + private fun String.convertCenterToHtml(): String { + val regex = """~~~(.*?)~~~""".toRegex() + return regex.replace(this) { matchResult -> + val centerText = matchResult.groupValues[1] + """$centerText""" + } + } + fun getBasicAniHTML(html: String): String { - val step0 = convertNestedImageToHtml(html) - val step1 = convertImageToHtml(step0) - val step2 = convertLinkToHtml(step1) - val step3 = replaceLeftovers(step2) - return underlineToHtml(step3) + return html + .convertNestedImageToHtml() + .convertImageToHtml() + .convertLinkToHtml() + .convertYoutubeToHtml() + .convertCenterToHtml() + .replaceLeftovers() + .underlineToHtml() } fun getFullAniHTML(html: String, textColor: Int): String { diff --git a/app/src/main/java/ani/dantotsu/util/AudioHelper.kt b/app/src/main/java/ani/dantotsu/util/AudioHelper.kt new file mode 100644 index 00000000..bfd38be0 --- /dev/null +++ b/app/src/main/java/ani/dantotsu/util/AudioHelper.kt @@ -0,0 +1,58 @@ +package ani.dantotsu.util + +import android.content.Context +import android.media.AudioManager +import android.media.MediaPlayer + +class AudioHelper(private val context: Context) { + + private val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + private var mediaPlayer: MediaPlayer? = null + + fun routeAudioToSpeaker() { + audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN) + audioManager.mode = AudioManager.MODE_IN_COMMUNICATION + audioManager.isSpeakerphoneOn = true + } + + private val maxVolume: Int + get() = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + private var oldVolume: Int = 0 + fun setVolume(percentage: Int) { + oldVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) + val volume = (maxVolume * percentage) / 100 + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0) + } + + fun playAudio(audio: Int) { + mediaPlayer?.release() + mediaPlayer = MediaPlayer.create(context, audio) + mediaPlayer?.setOnCompletionListener { + setVolume(oldVolume) + audioManager.abandonAudioFocus(null) + it.release() + } + mediaPlayer?.setOnPreparedListener { + it.start() + } + } + + fun stopAudio() { + mediaPlayer?.let { + if (it.isPlaying) { + it.stop() + } + it.release() + mediaPlayer = null + } + } + + companion object { + fun run(context: Context, audio: Int) { + val audioHelper = AudioHelper(context) + audioHelper.routeAudioToSpeaker() + audioHelper.setVolume(90) + audioHelper.playAudio(audio) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_markdown_creator.xml b/app/src/main/res/layout/activity_markdown_creator.xml index fb66d6f0..548ad177 100644 --- a/app/src/main/res/layout/activity_markdown_creator.xml +++ b/app/src/main/res/layout/activity_markdown_creator.xml @@ -92,6 +92,21 @@ android:textIsSelectable="true" android:textSize="18sp" tools:ignore="LabelFor" /> + + diff --git a/app/src/main/res/raw/audio.mp3 b/app/src/main/res/raw/audio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..49e1e430f00161703b3ef817055fd833ed1c4eed GIT binary patch literal 34560 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%0AY$&r)ffXF=M^X{UW2&tA#xGp+W|39*lV&3`?+ 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

n*I~A2M{vu;iCh0p&ySuMmYkQLp(@n&0* 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 Forgot Password (hold clear button for 10 seconds) Hide Notification Dot Private + you have been Ǫ̴̺̙͎̤̫͓̮̰̿͝M̴͇̤͗́̾̈́̑̍̿̈͌͝Ȅ̴̡̨̛͉̣̙̩̲̣̤̟̪̣̎͗̎̆̒̉͆̆̕ͅͅǴ̸̯̬̗̠̙͛͐̀̈͋̀̈̽́̎̿͘͘͝ͅĀ̶̧̲̀ͅ ̴̢̟͕̜̓̾̓C̶̬̜̰̘̝̱̫͓͙̭̈́͐͋̓̏̈̍̓̀̌̾̚Ư̸̛̤̱̈́͆̽͊͛̐̓́̑͘̕̕͝R̸̨̨͈̬̱̺͕̪̪̘͕͎̂͛́̅̆̓̀͝ͅS̴̨̨̛̩̭̗̹̰̭̥͉̮̝̠̓̔͆̂͊͆̀̈́̅̕͘̚͝È̴̢̛̝͈̳͉͈͒͒̒̄̏̈̈́D̸̢̡̨̜̞̩̼̫̹̗̮͛̀̈̋̾̇̕̕͜ͅ + you have been freed