From 63d6ea02c02dec3c99d3ce8ce9606874d7a15de5 Mon Sep 17 00:00:00 2001 From: Blatzar <46196380+Blatzar@users.noreply.github.com> Date: Tue, 16 Aug 2022 21:42:32 +0200 Subject: [PATCH] Added option to uppercase all subtitles closes #18 --- .../cloudstream3/ui/home/HomeFragment.kt | 1 - .../ui/player/CustomSubtitleDecoderFactory.kt | 4 + .../ui/player/PlayerSubtitleHelper.kt | 2 + .../ui/subtitles/SubtitlesFragment.kt | 41 +- app/src/main/res/layout/subtitle_settings.xml | 403 +++++++++--------- app/src/main/res/values/strings.xml | 1 + 6 files changed, 241 insertions(+), 211 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt index d841deaa..20f215d2 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeFragment.kt @@ -457,7 +457,6 @@ class HomeFragment : Fragment() { private fun loadHomePage(successful: Boolean = false) { val apiName = context?.getKey(USER_SELECTED_HOMEPAGE_API) - println("LOAD HOMEPAGE $successful $apiName ${homeViewModel.apiName.value}") if (homeViewModel.apiName.value != apiName || apiName == null) { //println("Caught home: " + homeViewModel.apiName.value + " at " + apiName) homeViewModel.loadAndCancel(apiName) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt index 0ede20d7..690d3706 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/CustomSubtitleDecoderFactory.kt @@ -39,6 +39,7 @@ class CustomDecoder : SubtitleDecoder { private var overrideEncoding: String? = null var regexSubtitlesToRemoveCaptions = false var regexSubtitlesToRemoveBloat = false + var uppercaseSubtitles = false val bloatRegex = listOf( Regex( @@ -193,6 +194,9 @@ class CustomDecoder : SubtitleDecoder { bloatRegex.forEach { rgx -> str = str.replace(rgx, "\n") } + if (uppercaseSubtitles) { + str = str.uppercase() + } } inputBuffer.setSubtitleText(str) } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt index 7e13c292..142b73ab 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/player/PlayerSubtitleHelper.kt @@ -9,6 +9,7 @@ import com.google.android.exoplayer2.util.MimeTypes import com.lagradost.cloudstream3.SubtitleFile import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.regexSubtitlesToRemoveBloat import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.regexSubtitlesToRemoveCaptions +import com.lagradost.cloudstream3.ui.player.CustomDecoder.Companion.uppercaseSubtitles import com.lagradost.cloudstream3.ui.subtitles.SaveCaptionStyle import com.lagradost.cloudstream3.ui.subtitles.SubtitlesFragment.Companion.fromSaveToStyle import com.lagradost.cloudstream3.utils.UIHelper.toPx @@ -87,6 +88,7 @@ class PlayerSubtitleHelper { fun setSubStyle(style: SaveCaptionStyle) { regexSubtitlesToRemoveBloat = style.removeBloat + uppercaseSubtitles = style.upperCase regexSubtitlesToRemoveCaptions = style.removeCaptions subtitleView?.context?.let { ctx -> subStyle = style diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt index 4d7c9fc1..8095b007 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/subtitles/SubtitlesFragment.kt @@ -38,6 +38,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage import kotlinx.android.synthetic.main.subtitle_settings.* +import kotlinx.android.synthetic.main.toast.view.* import java.io.File const val SUBTITLE_KEY = "subtitle_settings" @@ -60,6 +61,8 @@ data class SaveCaptionStyle( @JsonProperty("fixedTextSize") var fixedTextSize: Float?, @JsonProperty("removeCaptions") var removeCaptions: Boolean = false, @JsonProperty("removeBloat") var removeBloat: Boolean = true, + /** Apply caps lock to the text **/ + @JsonProperty("upperCase") var upperCase: Boolean = false, ) const val DEF_SUBS_ELEVATION = 20 @@ -182,6 +185,19 @@ class SubtitlesFragment : Fragment() { private fun Context.updateState() { subtitle_text?.setStyle(fromSaveToStyle(state)) + val text = subtitle_text.context.getString(R.string.subtitles_example_text) + val fixedText = if (state.upperCase) text.uppercase() else text + subtitle_text?.setCues( + listOf( + Cue.Builder() + .setTextSize( + getPixels(TypedValue.COMPLEX_UNIT_SP, 25.0f).toFloat(), + Cue.TEXT_SIZE_TYPE_ABSOLUTE + ) + .setText(fixedText) + .build() + ) + ) } private fun getColor(id: Int): Int { @@ -222,7 +238,6 @@ class SubtitlesFragment : Fragment() { context?.getExternalFilesDir(null)?.absolutePath.toString() + "/Fonts" ) - context?.fixPaddingStatusbar(subs_root) state = getCurrentSavedStyle() @@ -404,6 +419,12 @@ class SubtitlesFragment : Fragment() { subtitles_remove_bloat?.setOnCheckedChangeListener { _, b -> state.removeBloat = b } + subtitles_uppercase?.isChecked = state.upperCase + subtitles_uppercase?.setOnCheckedChangeListener { _, b -> + state.upperCase = b + context?.updateState() + } + subtitles_remove_captions?.isChecked = state.removeCaptions subtitles_remove_captions?.setOnCheckedChangeListener { _, b -> state.removeCaptions = b @@ -418,9 +439,11 @@ class SubtitlesFragment : Fragment() { //Fetch current value from preference context?.let { ctx -> - subtitles_filter_sub_lang?.isChecked = PreferenceManager.getDefaultSharedPreferences(ctx) - .getBoolean(getString(R.string.filter_sub_lang_key), false) + subtitles_filter_sub_lang?.isChecked = + PreferenceManager.getDefaultSharedPreferences(ctx) + .getBoolean(getString(R.string.filter_sub_lang_key), false) } + subtitles_filter_sub_lang?.setOnCheckedChangeListener { _, b -> context?.let { ctx -> PreferenceManager.getDefaultSharedPreferences(ctx) @@ -553,17 +576,5 @@ class SubtitlesFragment : Fragment() { it.context.fromSaveToStyle(state) activity?.popCurrentPage() } - - subtitle_text.setCues( - listOf( - Cue.Builder() - .setTextSize( - getPixels(TypedValue.COMPLEX_UNIT_SP, 25.0f).toFloat(), - Cue.TEXT_SIZE_TYPE_ABSOLUTE - ) - .setText(subtitle_text.context.getString(R.string.subtitles_example_text)) - .build() - ) - ) } } diff --git a/app/src/main/res/layout/subtitle_settings.xml b/app/src/main/res/layout/subtitle_settings.xml index da0c46f2..2491b254 100644 --- a/app/src/main/res/layout/subtitle_settings.xml +++ b/app/src/main/res/layout/subtitle_settings.xml @@ -1,235 +1,248 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/subs_root" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="?attr/primaryBlackBackground"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_rowWeight="1" + android:layout_marginTop="20dp" + android:layout_marginBottom="10dp" + android:paddingStart="20dp" + android:paddingEnd="20dp" + android:text="@string/subtitles_settings" + android:textColor="?attr/textColor" + android:textSize="20sp" + android:textStyle="bold" /> + android:layout_width="match_parent" + android:layout_height="75sp"> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/preview_background_img_des" + android:scaleType="centerCrop" + android:src="@drawable/subtitles_preview_background" /> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:foregroundGravity="center" /> + android:nextFocusRight="@id/cancel_btt" + android:nextFocusDown="@id/subs_font_size" + android:text="@string/subs_font" /> - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + android:layout_height="match_parent" + android:fontFamily="@font/google_sans" + android:nextFocusLeft="@id/apply_btt" + android:nextFocusRight="@id/cancel_btt" + android:nextFocusUp="@id/subs_download_languages" + android:nextFocusDown="@id/subtitles_remove_captions" + android:text="@string/subtitles_remove_bloat" + app:drawableEndCompat="@null" /> + + + + + + + android:gravity="center" + android:text="@string/subs_hold_to_reset_to_default" + android:textColor="?attr/textColor" + android:textSize="14sp" /> + android:id="@+id/subs_import_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_rowWeight="1" + android:gravity="center" + android:text="@string/subs_import_text" + android:textColor="?attr/textColor" + android:textSize="14sp" /> + android:layout_width="match_parent" + android:layout_height="60dp" + android:layout_gravity="bottom" + android:gravity="bottom|end" + android:orientation="horizontal"> + android:id="@+id/apply_btt" + style="@style/WhiteButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:nextFocusRight="@id/cancel_btt" + android:nextFocusUp="@id/subtitles_remove_captions" + android:text="@string/sort_apply" + android:visibility="visible"> + android:id="@+id/cancel_btt" + style="@style/BlackButton" + android:layout_width="wrap_content" + android:layout_gravity="center_vertical|end" + android:nextFocusLeft="@id/apply_btt" + android:nextFocusUp="@id/subtitles_remove_captions" + android:text="@string/sort_cancel" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a33e2b35..4a910c23 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -601,4 +601,5 @@ Add a repository to install site extensions View community repositories Public list + Uppercase all subtitles