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 1a6ab59766..9b071c2bf1 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 abfebb3ab1..c41d22ced6 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 7b2e0b1d95..412ed67692 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 fc21805e67..de1c76b8df 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 0000000000..1708ed0507 --- /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 2022fac101..7e58e87005 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 6f188b854c..c71a6a9bab 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 fdc2493769..5548401e79 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 3f8c04d725..200b388341 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 0000000000..bfd38be0a9 --- /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 fb66d6f036..548ad1771e 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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 z 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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