forked from recloudstream/cloudstream
You can now import subtitle fonts :)
This commit is contained in:
parent
d2beb5e253
commit
f451b71b0b
3 changed files with 190 additions and 135 deletions
|
@ -37,6 +37,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideSystemUI
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
import com.lagradost.cloudstream3.utils.UIHelper.navigate
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage
|
import com.lagradost.cloudstream3.utils.UIHelper.popCurrentPage
|
||||||
import kotlinx.android.synthetic.main.subtitle_settings.*
|
import kotlinx.android.synthetic.main.subtitle_settings.*
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
const val SUBTITLE_KEY = "subtitle_settings"
|
const val SUBTITLE_KEY = "subtitle_settings"
|
||||||
const val SUBTITLE_AUTO_SELECT_KEY = "subs_auto_select"
|
const val SUBTITLE_AUTO_SELECT_KEY = "subs_auto_select"
|
||||||
|
@ -48,9 +49,10 @@ data class SaveCaptionStyle(
|
||||||
@JsonProperty("windowColor") var windowColor: Int,
|
@JsonProperty("windowColor") var windowColor: Int,
|
||||||
@CaptionStyleCompat.EdgeType
|
@CaptionStyleCompat.EdgeType
|
||||||
@JsonProperty("edgeType") var edgeType: Int,
|
@JsonProperty("edgeType") var edgeType: Int,
|
||||||
@JsonProperty("edgeColor") var edgeColor: Int,
|
@JsonProperty("edgeColor") var edgeColor: Int,
|
||||||
@FontRes
|
@FontRes
|
||||||
@JsonProperty("typeface") var typeface: Int?,
|
@JsonProperty("typeface") var typeface: Int?,
|
||||||
|
@JsonProperty("typefaceFilePath") var typefaceFilePath: String?,
|
||||||
/**in dp**/
|
/**in dp**/
|
||||||
@JsonProperty("elevation") var elevation: Int,
|
@JsonProperty("elevation") var elevation: Int,
|
||||||
/**in sp**/
|
/**in sp**/
|
||||||
|
@ -64,17 +66,26 @@ class SubtitlesFragment : Fragment() {
|
||||||
val applyStyleEvent = Event<SaveCaptionStyle>()
|
val applyStyleEvent = Event<SaveCaptionStyle>()
|
||||||
|
|
||||||
fun Context.fromSaveToStyle(data: SaveCaptionStyle): CaptionStyleCompat {
|
fun Context.fromSaveToStyle(data: SaveCaptionStyle): CaptionStyleCompat {
|
||||||
val typeface = data.typeface
|
|
||||||
return CaptionStyleCompat(
|
return CaptionStyleCompat(
|
||||||
data.foregroundColor,
|
data.foregroundColor,
|
||||||
data.backgroundColor,
|
data.backgroundColor,
|
||||||
data.windowColor,
|
data.windowColor,
|
||||||
data.edgeType,
|
data.edgeType,
|
||||||
data.edgeColor,
|
data.edgeColor,
|
||||||
if (typeface == null) Typeface.SANS_SERIF else ResourcesCompat.getFont(
|
data.typefaceFilePath?.let {
|
||||||
this,
|
try {
|
||||||
typeface
|
// RuntimeException: Font asset not found
|
||||||
)
|
Typeface.createFromFile(File(it))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
} ?: data.typeface?.let {
|
||||||
|
ResourcesCompat.getFont(
|
||||||
|
this,
|
||||||
|
it
|
||||||
|
)
|
||||||
|
}
|
||||||
|
?: Typeface.SANS_SERIF
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,11 +117,24 @@ class SubtitlesFragment : Fragment() {
|
||||||
CaptionStyleCompat.EDGE_TYPE_OUTLINE,
|
CaptionStyleCompat.EDGE_TYPE_OUTLINE,
|
||||||
getDefColor(1),
|
getDefColor(1),
|
||||||
null,
|
null,
|
||||||
|
null,
|
||||||
DEF_SUBS_ELEVATION,
|
DEF_SUBS_ELEVATION,
|
||||||
null,
|
null,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Context.getSavedFonts(): List<File> {
|
||||||
|
val externalFiles = getExternalFilesDir(null) ?: return emptyList()
|
||||||
|
val fontDir = File(externalFiles.absolutePath + "/Fonts").also {
|
||||||
|
it.mkdir()
|
||||||
|
}
|
||||||
|
return fontDir.list()?.mapNotNull {
|
||||||
|
if (it.endsWith(".ttf")) {
|
||||||
|
File(fontDir.absolutePath + "/" + it)
|
||||||
|
} else null
|
||||||
|
} ?: listOf()
|
||||||
|
}
|
||||||
|
|
||||||
private fun Context.getCurrentStyle(): CaptionStyleCompat {
|
private fun Context.getCurrentStyle(): CaptionStyleCompat {
|
||||||
return fromSaveToStyle(getCurrentSavedStyle())
|
return fromSaveToStyle(getCurrentSavedStyle())
|
||||||
}
|
}
|
||||||
|
@ -191,6 +215,10 @@ class SubtitlesFragment : Fragment() {
|
||||||
hide = arguments?.getBoolean("hide") ?: true
|
hide = arguments?.getBoolean("hide") ?: true
|
||||||
onColorSelectedEvent += ::onColorSelected
|
onColorSelectedEvent += ::onColorSelected
|
||||||
onDialogDismissedEvent += ::onDialogDismissed
|
onDialogDismissedEvent += ::onDialogDismissed
|
||||||
|
subs_import_text?.text = getString(R.string.subs_import_text).format(
|
||||||
|
context?.getExternalFilesDir(null)?.absolutePath.toString() + "/Fonts"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
context?.fixPaddingStatusbar(subs_root)
|
context?.fixPaddingStatusbar(subs_root)
|
||||||
|
|
||||||
|
@ -395,22 +423,38 @@ class SubtitlesFragment : Fragment() {
|
||||||
Pair(R.font.comic_sans, "Comic Sans"),
|
Pair(R.font.comic_sans, "Comic Sans"),
|
||||||
Pair(R.font.poppins_regular, "Poppins"),
|
Pair(R.font.poppins_regular, "Poppins"),
|
||||||
)
|
)
|
||||||
|
val savedFontTypes = textView.context.getSavedFonts()
|
||||||
|
|
||||||
|
val currentIndex =
|
||||||
|
savedFontTypes.indexOfFirst { it.absolutePath == state.typefaceFilePath }
|
||||||
|
.let { index ->
|
||||||
|
if (index == -1)
|
||||||
|
fontTypes.indexOfFirst { it.first == state.typeface }
|
||||||
|
else index + fontTypes.size
|
||||||
|
}
|
||||||
|
|
||||||
//showBottomDialog
|
//showBottomDialog
|
||||||
activity?.showDialog(
|
activity?.showDialog(
|
||||||
fontTypes.map { it.second },
|
fontTypes.map { it.second } + savedFontTypes.map { it.name },
|
||||||
fontTypes.map { it.first }.indexOf(state.typeface),
|
currentIndex,
|
||||||
(textView as TextView).text.toString(),
|
(textView as TextView).text.toString(),
|
||||||
false,
|
false,
|
||||||
dismissCallback
|
dismissCallback
|
||||||
) { index ->
|
) { index ->
|
||||||
state.typeface = fontTypes.map { it.first }[index]
|
if (index < fontTypes.size) {
|
||||||
|
state.typeface = fontTypes[index].first
|
||||||
|
state.typefaceFilePath = null
|
||||||
|
} else {
|
||||||
|
state.typefaceFilePath = savedFontTypes[index - fontTypes.size].absolutePath
|
||||||
|
state.typeface = null
|
||||||
|
}
|
||||||
textView.context.updateState()
|
textView.context.updateState()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subs_font.setOnLongClickListener { textView ->
|
subs_font.setOnLongClickListener { textView ->
|
||||||
state.typeface = null
|
state.typeface = null
|
||||||
|
state.typefaceFilePath = null
|
||||||
textView.context.updateState()
|
textView.context.updateState()
|
||||||
showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT)
|
showToast(activity, R.string.subs_default_reset_toast, Toast.LENGTH_SHORT)
|
||||||
return@setOnLongClickListener true
|
return@setOnLongClickListener true
|
||||||
|
|
|
@ -1,185 +1,195 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/subs_root"
|
||||||
android:layout_height="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/subs_root"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/primaryBlackBackground">
|
android:background="?attr/primaryBlackBackground">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="vertical"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:paddingStart="20dp"
|
android:layout_width="match_parent"
|
||||||
android:paddingEnd="20dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="20dp"
|
android:layout_rowWeight="1"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginTop="20dp"
|
||||||
android:textStyle="bold"
|
android:layout_marginBottom="10dp"
|
||||||
android:text="@string/subtitles_settings"
|
android:paddingStart="20dp"
|
||||||
android:textSize="20sp"
|
android:paddingEnd="20dp"
|
||||||
android:textColor="?attr/textColor"
|
android:text="@string/subtitles_settings"
|
||||||
android:layout_width="match_parent"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_rowWeight="1"
|
android:textSize="20sp"
|
||||||
android:layout_height="wrap_content" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="75sp">
|
android:layout_height="75sp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:scaleType="centerCrop"
|
android:layout_width="match_parent"
|
||||||
android:src="@drawable/subtitles_preview_background"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:contentDescription="@string/preview_background_img_des"
|
||||||
android:layout_height="match_parent"
|
android:scaleType="centerCrop"
|
||||||
android:contentDescription="@string/preview_background_img_des" />
|
android:src="@drawable/subtitles_preview_background" />
|
||||||
|
|
||||||
<com.google.android.exoplayer2.ui.SubtitleView
|
<com.google.android.exoplayer2.ui.SubtitleView
|
||||||
android:id="@+id/subtitle_text"
|
android:id="@+id/subtitle_text"
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_gravity="center"
|
android:layout_height="match_parent"
|
||||||
android:foregroundGravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_height="match_parent" />
|
android:foregroundGravity="center" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusDown="@id/subs_font_size"
|
android:id="@+id/subs_font"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_font"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
android:text="@string/subs_font"
|
android:nextFocusDown="@id/subs_font_size"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_font" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_font"
|
android:id="@+id/subs_font_size"
|
||||||
android:nextFocusDown="@id/subs_text_color"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_font_size"
|
android:nextFocusUp="@id/subs_font"
|
||||||
android:text="@string/subs_font_size"
|
android:nextFocusDown="@id/subs_text_color"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_font_size" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_font_size"
|
android:id="@+id/subs_text_color"
|
||||||
android:nextFocusDown="@id/subs_outline_color"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_text_color"
|
android:nextFocusUp="@id/subs_font_size"
|
||||||
android:text="@string/subs_text_color"
|
android:nextFocusDown="@id/subs_outline_color"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_text_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_text_color"
|
android:id="@+id/subs_outline_color"
|
||||||
android:nextFocusDown="@id/subs_background_color"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_outline_color"
|
android:nextFocusUp="@id/subs_text_color"
|
||||||
android:text="@string/subs_outline_color"
|
android:nextFocusDown="@id/subs_background_color"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_outline_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_outline_color"
|
android:id="@+id/subs_background_color"
|
||||||
android:nextFocusDown="@id/subs_window_color"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_background_color"
|
android:nextFocusUp="@id/subs_outline_color"
|
||||||
android:text="@string/subs_background_color"
|
android:nextFocusDown="@id/subs_window_color"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_background_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_background_color"
|
android:id="@+id/subs_window_color"
|
||||||
android:nextFocusDown="@id/subs_edge_type"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_window_color"
|
android:nextFocusUp="@id/subs_background_color"
|
||||||
android:text="@string/subs_window_color"
|
android:nextFocusDown="@id/subs_edge_type"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_window_color" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_window_color"
|
android:id="@+id/subs_edge_type"
|
||||||
android:nextFocusDown="@id/subs_subtitle_elevation"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_edge_type"
|
android:nextFocusUp="@id/subs_window_color"
|
||||||
android:text="@string/subs_edge_type"
|
android:nextFocusDown="@id/subs_subtitle_elevation"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_edge_type" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_edge_type"
|
android:id="@+id/subs_subtitle_elevation"
|
||||||
android:nextFocusDown="@id/subs_auto_select_language"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_subtitle_elevation"
|
android:nextFocusUp="@id/subs_edge_type"
|
||||||
android:text="@string/subs_subtitle_elevation"
|
android:nextFocusDown="@id/subs_auto_select_language"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_subtitle_elevation" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_subtitle_elevation"
|
android:id="@+id/subs_auto_select_language"
|
||||||
android:nextFocusDown="@id/subs_download_languages"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_auto_select_language"
|
android:nextFocusUp="@id/subs_subtitle_elevation"
|
||||||
android:text="@string/subs_auto_select_language"
|
android:nextFocusDown="@id/subs_download_languages"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_auto_select_language" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:nextFocusUp="@id/subs_auto_select_language"
|
android:id="@+id/subs_download_languages"
|
||||||
android:nextFocusDown="@id/apply_btt"
|
style="@style/SettingsItem"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
|
|
||||||
android:id="@+id/subs_download_languages"
|
android:nextFocusUp="@id/subs_auto_select_language"
|
||||||
android:text="@string/subs_download_languages"
|
android:nextFocusDown="@id/apply_btt"
|
||||||
style="@style/SettingsItem" />
|
android:text="@string/subs_download_languages" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:gravity="center"
|
android:layout_width="match_parent"
|
||||||
android:text="@string/subs_hold_to_reset_to_default"
|
android:layout_height="wrap_content"
|
||||||
android:textSize="14sp"
|
android:layout_rowWeight="1"
|
||||||
|
|
||||||
android:textColor="?attr/textColor"
|
android:gravity="center"
|
||||||
android:layout_width="match_parent"
|
android:text="@string/subs_hold_to_reset_to_default"
|
||||||
android:layout_rowWeight="1"
|
android:textColor="?attr/textColor"
|
||||||
android:layout_height="wrap_content" />
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
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" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:layout_width="match_parent"
|
||||||
android:layout_gravity="bottom"
|
android:layout_height="60dp"
|
||||||
android:gravity="bottom|end"
|
android:layout_gravity="bottom"
|
||||||
android:layout_width="match_parent"
|
android:gravity="bottom|end"
|
||||||
android:layout_height="60dp">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:nextFocusUp="@id/subs_download_languages"
|
android:id="@+id/apply_btt"
|
||||||
android:nextFocusRight="@id/cancel_btt"
|
style="@style/WhiteButton"
|
||||||
style="@style/WhiteButton"
|
android:layout_width="wrap_content"
|
||||||
android:layout_gravity="center_vertical|end"
|
android:layout_gravity="center_vertical|end"
|
||||||
android:visibility="visible"
|
android:nextFocusRight="@id/cancel_btt"
|
||||||
android:text="@string/sort_apply"
|
android:nextFocusUp="@id/subs_download_languages"
|
||||||
android:id="@+id/apply_btt"
|
android:text="@string/sort_apply"
|
||||||
android:layout_width="wrap_content">
|
android:visibility="visible">
|
||||||
|
|
||||||
<requestFocus />
|
<requestFocus />
|
||||||
</com.google.android.material.button.MaterialButton>
|
</com.google.android.material.button.MaterialButton>
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:nextFocusUp="@id/subs_download_languages"
|
android:id="@+id/cancel_btt"
|
||||||
android:nextFocusLeft="@id/apply_btt"
|
style="@style/BlackButton"
|
||||||
style="@style/BlackButton"
|
android:layout_width="wrap_content"
|
||||||
android:layout_gravity="center_vertical|end"
|
android:layout_gravity="center_vertical|end"
|
||||||
android:text="@string/sort_cancel"
|
android:nextFocusLeft="@id/apply_btt"
|
||||||
android:id="@+id/cancel_btt"
|
android:nextFocusUp="@id/subs_download_languages"
|
||||||
android:layout_width="wrap_content" />
|
android:text="@string/sort_cancel" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
|
@ -175,6 +175,7 @@
|
||||||
<string name="subs_auto_select_language">Auto-Select Language</string>
|
<string name="subs_auto_select_language">Auto-Select Language</string>
|
||||||
<string name="subs_download_languages">Download Languages</string>
|
<string name="subs_download_languages">Download Languages</string>
|
||||||
<string name="subs_hold_to_reset_to_default">Hold to reset to default</string>
|
<string name="subs_hold_to_reset_to_default">Hold to reset to default</string>
|
||||||
|
<string name="subs_import_text" formatted="true">Import fonts by placing them in %s</string>
|
||||||
<string name="continue_watching">Continue Watching</string>
|
<string name="continue_watching">Continue Watching</string>
|
||||||
|
|
||||||
<string name="action_remove_watching">Remove</string>
|
<string name="action_remove_watching">Remove</string>
|
||||||
|
|
Loading…
Reference in a new issue