mirror of
https://github.com/rebelonion/Dantotsu.git
synced 2026-01-23 00:31:02 +00:00
Merge pull request #1 from AbandonedCart/dev
fixed the manga prediction code
This commit is contained in:
@@ -17,9 +17,9 @@ import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Configuration
|
||||
import android.content.res.Resources
|
||||
import android.content.res.Resources.getSystem
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.media.MediaScannerConnection
|
||||
import android.net.ConnectivityManager
|
||||
@@ -45,15 +45,15 @@ import android.telephony.TelephonyManager
|
||||
import android.text.InputFilter
|
||||
import android.text.Spanned
|
||||
import android.util.AttributeSet
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.TypedValue
|
||||
import android.view.GestureDetector
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewAnimationUtils
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.view.animation.AlphaAnimation
|
||||
import android.view.animation.Animation
|
||||
@@ -64,10 +64,10 @@ import android.view.animation.TranslateAnimation
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.AutoCompleteTextView
|
||||
import android.widget.DatePicker
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
@@ -80,9 +80,9 @@ import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
@@ -91,10 +91,10 @@ import ani.dantotsu.BuildConfig.APPLICATION_ID
|
||||
import ani.dantotsu.connections.anilist.Genre
|
||||
import ani.dantotsu.connections.anilist.api.FuzzyDate
|
||||
import ani.dantotsu.connections.bakaupdates.MangaUpdates
|
||||
import ani.dantotsu.connections.crashlytics.CrashlyticsInterface
|
||||
import ani.dantotsu.databinding.ItemCountDownBinding
|
||||
import ani.dantotsu.media.Media
|
||||
import ani.dantotsu.notifications.IncognitoNotificationClickReceiver
|
||||
import ani.dantotsu.others.CustomBottomDialog
|
||||
import ani.dantotsu.others.SpoilerPlugin
|
||||
import ani.dantotsu.parsers.ShowResponse
|
||||
import ani.dantotsu.settings.saving.PrefManager
|
||||
@@ -120,6 +120,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.google.android.material.internal.ViewUtils
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||
import io.noties.markwon.AbstractMarkwonPlugin
|
||||
import io.noties.markwon.Markwon
|
||||
@@ -135,10 +136,13 @@ import io.noties.markwon.image.glide.GlideImagesPlugin
|
||||
import jp.wasabeef.glide.transformations.BlurTransformation
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import nl.joery.animatedbottombar.AnimatedBottomBar
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.OutputStream
|
||||
@@ -158,30 +162,8 @@ import kotlin.math.pow
|
||||
|
||||
var statusBarHeight = 0
|
||||
var navBarHeight = 0
|
||||
|
||||
val Number.toPx get() = TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), Resources.getSystem().displayMetrics
|
||||
).toInt()
|
||||
|
||||
val Number.toDp get() = TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_PX, this.toFloat(), Resources.getSystem().displayMetrics
|
||||
)
|
||||
|
||||
val Number.dpToColumns: Int get() {
|
||||
val columns = currContext()?.run {
|
||||
val metrics = DisplayMetrics()
|
||||
with(getSystemService(Context.WINDOW_SERVICE) as WindowManager) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
val bounds: Rect = currentWindowMetrics.bounds
|
||||
((bounds.width() / (resources.configuration.densityDpi / 160)) + 0.5)/ this@dpToColumns.toInt()
|
||||
} else @Suppress("deprecation") {
|
||||
defaultDisplay.getRealMetrics(metrics)
|
||||
metrics.widthPixels.toDp / this@dpToColumns.toInt()
|
||||
}
|
||||
}
|
||||
} ?: 1
|
||||
return columns.toInt()
|
||||
}
|
||||
val Int.dp: Float get() = (this / getSystem().displayMetrics.density)
|
||||
val Float.px: Int get() = (this * getSystem().displayMetrics.density).toInt()
|
||||
|
||||
lateinit var bottomBar: AnimatedBottomBar
|
||||
var selectedOption = 1
|
||||
@@ -207,6 +189,10 @@ fun currActivity(): Activity? {
|
||||
var loadMedia: Int? = null
|
||||
var loadIsMAL = false
|
||||
|
||||
val Int.toPx get() = TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), Resources.getSystem().displayMetrics
|
||||
).toInt()
|
||||
|
||||
fun initActivity(a: Activity) {
|
||||
val window = a.window
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
@@ -290,16 +276,6 @@ fun Activity.setNavigationTheme() {
|
||||
}
|
||||
}
|
||||
|
||||
@ColorInt
|
||||
fun Context.getColorFromAttr(
|
||||
@AttrRes attrColor: Int,
|
||||
typedValue: TypedValue = TypedValue(),
|
||||
resolveRefs: Boolean = true
|
||||
): Int {
|
||||
theme.resolveAttribute(attrColor, typedValue, resolveRefs)
|
||||
return typedValue.data
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets clipToPadding false and sets the combined height of navigation bars as bottom padding.
|
||||
*
|
||||
@@ -323,48 +299,29 @@ fun ViewGroup.setBaseline(navBar: AnimatedBottomBar, overlayView: View) {
|
||||
setPadding(paddingLeft, paddingTop, paddingRight, navBarHeight + navBar.measuredHeight + overlayView.measuredHeight)
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish the calling activity and launch it again within the same lifecycle scope
|
||||
*/
|
||||
|
||||
fun Activity.reloadActivity() {
|
||||
Refresh.all()
|
||||
finish()
|
||||
startActivity(Intent(this, this::class.java))
|
||||
initActivity(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* Restarts the application from the launch intent and redirects to the calling activity
|
||||
*/
|
||||
fun Activity.restartApp() {
|
||||
fun Context.restartApp(view: View) {
|
||||
val mainIntent = Intent.makeRestartActivityTask(
|
||||
packageManager.getLaunchIntentForPackage(this.packageName)!!.component
|
||||
)
|
||||
val component = ComponentName(this@restartApp.packageName, this@restartApp::class.qualifiedName!!)
|
||||
try {
|
||||
startActivity(Intent().setComponent(component))
|
||||
} catch (anything: Exception) {
|
||||
startActivity(mainIntent)
|
||||
}
|
||||
finishAndRemoveTask()
|
||||
}
|
||||
|
||||
suspend fun serverDownDialog(activity: FragmentActivity?) = withContext(Dispatchers.Main) {
|
||||
activity?.let {
|
||||
CustomBottomDialog.newInstance().apply {
|
||||
title = it.getString(R.string.anilist_broken_title)
|
||||
addView(TextView(activity).apply {
|
||||
text = it.getString(R.string.anilist_broken)
|
||||
})
|
||||
|
||||
setNegativeButton(it.getString(R.string.cancel)) {
|
||||
dismiss()
|
||||
Snackbar.make(view, R.string.restart_app, Snackbar.LENGTH_INDEFINITE).apply {
|
||||
setAction(R.string.do_it) {
|
||||
this.dismiss()
|
||||
try {
|
||||
startActivity(Intent().setComponent(component))
|
||||
} catch (anything: Exception) {
|
||||
startActivity(mainIntent)
|
||||
}
|
||||
|
||||
setPositiveButton(it.getString(R.string.close)) {
|
||||
it.finishAffinity()
|
||||
}
|
||||
show(it.supportFragmentManager, "dialog")
|
||||
Runtime.getRuntime().exit(0)
|
||||
}
|
||||
show()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,13 +397,17 @@ fun isOnline(context: Context): Boolean {
|
||||
fun startMainActivity(activity: Activity, bundle: Bundle? = null) {
|
||||
activity.finishAffinity()
|
||||
activity.startActivity(
|
||||
Intent(activity, MainActivity::class.java).apply {
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
Intent(
|
||||
activity,
|
||||
MainActivity::class.java
|
||||
).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
if (bundle != null) putExtras(bundle)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class DatePickerFragment(activity: Activity, var date: FuzzyDate = FuzzyDate().getToday()) :
|
||||
DialogFragment(),
|
||||
DatePickerDialog.OnDateSetListener {
|
||||
@@ -644,6 +605,11 @@ fun MutableList<ShowResponse>.sortByTitle(string: String) {
|
||||
}
|
||||
}
|
||||
|
||||
fun String.findBetween(a: String, b: String): String? {
|
||||
val string = substringAfter(a, "").substringBefore(b, "")
|
||||
return string.ifEmpty { null }
|
||||
}
|
||||
|
||||
fun ImageView.loadImage(url: String?, size: Int = 0) {
|
||||
if (!url.isNullOrEmpty()) {
|
||||
val localFile = File(url)
|
||||
@@ -655,13 +621,8 @@ fun ImageView.loadImage(url: String?, size: Int = 0) {
|
||||
}
|
||||
}
|
||||
|
||||
fun geUrlOrTrolled(url: String?) : String {
|
||||
return if (PrefManager.getVal(PrefName.DisableMitM)) url ?: "" else
|
||||
PrefManager.getVal<String>(PrefName.ImageUrl).ifEmpty { url ?: "" }
|
||||
}
|
||||
|
||||
fun ImageView.loadImage(file: FileUrl?, size: Int = 0) {
|
||||
file?.url = geUrlOrTrolled(file?.url)
|
||||
file?.url = PrefManager.getVal<String>(PrefName.ImageUrl).ifEmpty { file?.url ?: "" }
|
||||
if (file?.url?.isNotEmpty() == true) {
|
||||
tryWith {
|
||||
if (file.url.startsWith("content://")) {
|
||||
@@ -1164,6 +1125,68 @@ class EmptyAdapter(private val count: Int) : RecyclerView.Adapter<RecyclerView.V
|
||||
inner class EmptyViewHolder(view: View) : RecyclerView.ViewHolder(view)
|
||||
}
|
||||
|
||||
fun getAppString(res: Int): String {
|
||||
return currContext()?.getString(res) ?: ""
|
||||
}
|
||||
|
||||
fun toast(string: String?) {
|
||||
if (string != null) {
|
||||
Logger.log(string)
|
||||
MainScope().launch {
|
||||
Toast.makeText(currActivity()?.application ?: return@launch, string, Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun toast(res: Int) {
|
||||
toast(getAppString(res))
|
||||
}
|
||||
|
||||
fun snackString(s: String?, activity: Activity? = null, clipboard: String? = null): Snackbar? {
|
||||
try { //I have no idea why this sometimes crashes for some people...
|
||||
if (s != null) {
|
||||
(activity ?: currActivity())?.apply {
|
||||
val snackBar = Snackbar.make(
|
||||
window.decorView.findViewById(android.R.id.content),
|
||||
s,
|
||||
Snackbar.LENGTH_SHORT
|
||||
)
|
||||
runOnUiThread {
|
||||
snackBar.view.apply {
|
||||
updateLayoutParams<FrameLayout.LayoutParams> {
|
||||
gravity = (Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM)
|
||||
width = WRAP_CONTENT
|
||||
}
|
||||
translationY = -(navBarHeight.dp + 32f)
|
||||
translationZ = 32f
|
||||
updatePadding(16f.px, right = 16f.px)
|
||||
setOnClickListener {
|
||||
snackBar.dismiss()
|
||||
}
|
||||
setOnLongClickListener {
|
||||
copyToClipboard(clipboard ?: s, false)
|
||||
toast(getString(R.string.copied_to_clipboard))
|
||||
true
|
||||
}
|
||||
}
|
||||
snackBar.show()
|
||||
}
|
||||
return snackBar
|
||||
}
|
||||
Logger.log(s)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.log(e)
|
||||
Injekt.get<CrashlyticsInterface>().logException(e)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun snackString(r: Int, activity: Activity? = null, clipboard: String? = null): Snackbar? {
|
||||
return snackString(getAppString(r), activity, clipboard)
|
||||
}
|
||||
|
||||
open class NoPaddingArrayAdapter<T>(context: Context, layoutId: Int, items: List<T>) :
|
||||
ArrayAdapter<T>(context, layoutId, items) {
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
@@ -1328,12 +1351,12 @@ fun openSettings(context: Context, channelId: String?): Boolean {
|
||||
}
|
||||
|
||||
suspend fun View.pop() {
|
||||
withContext(Dispatchers.Main) {
|
||||
currActivity()?.runOnUiThread {
|
||||
ObjectAnimator.ofFloat(this@pop, "scaleX", 1f, 1.25f).setDuration(120).start()
|
||||
ObjectAnimator.ofFloat(this@pop, "scaleY", 1f, 1.25f).setDuration(120).start()
|
||||
}
|
||||
delay(120)
|
||||
withContext(Dispatchers.Main) {
|
||||
currActivity()?.runOnUiThread {
|
||||
ObjectAnimator.ofFloat(this@pop, "scaleX", 1.25f, 1f).setDuration(100).start()
|
||||
ObjectAnimator.ofFloat(this@pop, "scaleY", 1.25f, 1f).setDuration(100).start()
|
||||
}
|
||||
@@ -1347,7 +1370,7 @@ fun blurImage(imageView: ImageView, banner: String?) {
|
||||
if (PrefManager.getVal(PrefName.BlurBanners)) {
|
||||
val context = imageView.context
|
||||
if (!(context as Activity).isDestroyed) {
|
||||
val url = geUrlOrTrolled(banner)
|
||||
val url = PrefManager.getVal<String>(PrefName.ImageUrl).ifEmpty { banner }
|
||||
Glide.with(context as Context)
|
||||
.load(
|
||||
if (banner.startsWith("http")) GlideUrl(url) else if (banner.startsWith("content://")) Uri.parse(
|
||||
@@ -1355,11 +1378,7 @@ fun blurImage(imageView: ImageView, banner: String?) {
|
||||
) else File(url)
|
||||
)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE).override(400)
|
||||
.apply(if (PrefManager.getVal<String>(PrefName.ImageUrl).isEmpty()) {
|
||||
RequestOptions.noTransformation()
|
||||
} else {
|
||||
RequestOptions.bitmapTransform(BlurTransformation(radius, sampling))
|
||||
})
|
||||
.apply(RequestOptions.bitmapTransform(BlurTransformation(radius, sampling)))
|
||||
.into(imageView)
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -5,7 +5,6 @@ import ani.dantotsu.R
|
||||
import ani.dantotsu.client
|
||||
import ani.dantotsu.media.Media
|
||||
import ani.dantotsu.tryWithSuspend
|
||||
import ani.dantotsu.utf8
|
||||
import ani.dantotsu.util.Logger
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
@@ -15,6 +14,8 @@ import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import java.net.URLEncoder
|
||||
import java.nio.charset.Charset
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
@@ -23,6 +24,8 @@ import java.util.concurrent.TimeUnit
|
||||
|
||||
class MangaUpdates {
|
||||
|
||||
val String.utf8: String get() = URLEncoder.encode(this, Charset.forName("UTF-8").name())
|
||||
|
||||
private val Int?.dateFormat get() = String.format("%02d", this)
|
||||
|
||||
suspend fun findLatestRelease(media: Media) : ReleaseResponse.Results? {
|
||||
@@ -123,32 +126,38 @@ class MangaUpdates {
|
||||
|
||||
suspend fun predictRelease(media: Media, latest: Long): Long? {
|
||||
val releaseDates = findReleaseDates(media)
|
||||
if (releaseDates.size < 3) return null
|
||||
if (releaseDates.size < 5) return null
|
||||
releaseDates.forEach {
|
||||
Logger.log(it)
|
||||
}
|
||||
val dateLatest = getCalendarInstance(releaseDates[0])
|
||||
val dateMiddle = getCalendarInstance(releaseDates[1])
|
||||
val dateOldest = getCalendarInstance(releaseDates[2])
|
||||
val daysNew: Long = TimeUnit.MILLISECONDS.toDays(dateLatest.timeInMillis - dateMiddle.timeInMillis)
|
||||
val daysOld: Long = TimeUnit.MILLISECONDS.toDays(dateMiddle.timeInMillis - dateOldest.timeInMillis)
|
||||
val date01 = getCalendarInstance(releaseDates[0])
|
||||
val date02 = getCalendarInstance(releaseDates[1])
|
||||
val date03 = getCalendarInstance(releaseDates[2])
|
||||
val date04 = getCalendarInstance(releaseDates[3])
|
||||
val date05 = getCalendarInstance(releaseDates[4])
|
||||
val days0102: Long = TimeUnit.MILLISECONDS.toDays(date01.timeInMillis - date02.timeInMillis)
|
||||
val days0203: Long = TimeUnit.MILLISECONDS.toDays(date02.timeInMillis - date03.timeInMillis)
|
||||
val days0304: Long = TimeUnit.MILLISECONDS.toDays(date03.timeInMillis - date04.timeInMillis)
|
||||
val days0405: Long = TimeUnit.MILLISECONDS.toDays(date04.timeInMillis - date05.timeInMillis)
|
||||
|
||||
val average = (days0102 + days0203 + days0304 + days0405) / 4
|
||||
|
||||
val date: Calendar = Calendar.getInstance()
|
||||
date.timeInMillis = latest
|
||||
|
||||
return when {
|
||||
daysNew in 5..14 && daysOld in 5..14 -> {
|
||||
average in 5..14 -> {
|
||||
latest + 604800000 // 7 days
|
||||
}
|
||||
daysNew in 28..36 && daysOld in 28..36 -> {
|
||||
average in 28..36 -> {
|
||||
date.add(Calendar.MONTH, 1)
|
||||
date.timeInMillis
|
||||
}
|
||||
daysNew in 84..98 && daysOld in 84..98 -> {
|
||||
average in 84..98 -> {
|
||||
date.add(Calendar.MONTH, 3)
|
||||
date.timeInMillis
|
||||
}
|
||||
daysNew >= 358 && daysOld >= 358 -> {
|
||||
average >= 358 -> {
|
||||
date.add(Calendar.YEAR, 1)
|
||||
date.timeInMillis
|
||||
}
|
||||
@@ -238,4 +247,4 @@ class MangaUpdates {
|
||||
val asString: String?
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,10 +35,10 @@ import ani.dantotsu.others.webview.CookieCatcher
|
||||
import ani.dantotsu.parsers.DynamicMangaParser
|
||||
import ani.dantotsu.parsers.MangaReadSources
|
||||
import ani.dantotsu.parsers.MangaSources
|
||||
import ani.dantotsu.px
|
||||
import ani.dantotsu.settings.FAQActivity
|
||||
import ani.dantotsu.settings.saving.PrefManager
|
||||
import ani.dantotsu.settings.saving.PrefName
|
||||
import ani.dantotsu.sinceWhen
|
||||
import ani.dantotsu.toast
|
||||
import com.google.android.material.chip.Chip
|
||||
import eu.kanade.tachiyomi.data.notification.Notifications.CHANNEL_SUBSCRIPTION_CHECK
|
||||
@@ -53,6 +53,7 @@ class MangaReadAdapter(
|
||||
private val fragment: MangaReadFragment,
|
||||
private val mangaReadSources: MangaReadSources
|
||||
) : RecyclerView.Adapter<MangaReadAdapter.ViewHolder>() {
|
||||
|
||||
var subscribe: MediaDetailsActivity.PopImageButton? = null
|
||||
private var _binding: ItemAnimeWatchBinding? = null
|
||||
val hiddenScanlators = mutableListOf<String>()
|
||||
@@ -228,7 +229,7 @@ class MangaReadAdapter(
|
||||
refresh = true
|
||||
val intent = Intent(fragment.requireContext(), CookieCatcher::class.java)
|
||||
.putExtra("url", url)
|
||||
startActivity(fragment.requireContext(), intent, null)
|
||||
ContextCompat.startActivity(fragment.requireContext(), intent, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -366,7 +367,7 @@ class MangaReadAdapter(
|
||||
fun updateChips(limit: Int, names: Array<String>, arr: Array<Int>, selected: Int = 0) {
|
||||
val binding = _binding
|
||||
if (binding != null) {
|
||||
val screenWidth = fragment.resources.displayMetrics.widthPixels
|
||||
val screenWidth = fragment.screenWidth.px
|
||||
var select: Chip? = null
|
||||
for (position in arr.indices) {
|
||||
val last = if (position + 1 == arr.size) names.size else (limit * (position + 1))
|
||||
@@ -484,8 +485,9 @@ class MangaReadAdapter(
|
||||
binding.animeSourceContinue.visibility = View.GONE
|
||||
}
|
||||
binding.animeSourceProgressBar.visibility = View.GONE
|
||||
|
||||
val sourceFound = media.manga.chapters!!.isNotEmpty()
|
||||
binding.animeSourceNotFound.isGone = sourceFound
|
||||
binding.faqbutton.isGone = sourceFound
|
||||
if (!sourceFound && PrefManager.getVal(PrefName.SearchSources)) {
|
||||
if (binding.animeSource.adapter.count > media.selected!!.sourceIndex + 1) {
|
||||
val nextIndex = media.selected!!.sourceIndex + 1
|
||||
@@ -502,8 +504,6 @@ class MangaReadAdapter(
|
||||
fragment.loadChapters(nextIndex, invalidate)
|
||||
}
|
||||
}
|
||||
binding.animeSourceNotFound.isGone = sourceFound
|
||||
binding.faqbutton.isGone = sourceFound
|
||||
} else {
|
||||
binding.animeSourceContinue.visibility = View.GONE
|
||||
binding.animeSourceNotFound.visibility = View.GONE
|
||||
@@ -523,19 +523,16 @@ class MangaReadAdapter(
|
||||
ext.sourceLanguage = lang
|
||||
}
|
||||
try {
|
||||
binding?.animeSourceLanguage?.setText(
|
||||
LanguageMapper.getExtensionItem(parser.extension.sources[lang]))
|
||||
binding?.animeSourceLanguage?.setText(parser.extension.sources[lang].lang)
|
||||
} catch (e: IndexOutOfBoundsException) {
|
||||
binding?.animeSourceLanguage?.setText(
|
||||
parser.extension.sources.firstOrNull()?.let {
|
||||
LanguageMapper.getExtensionItem(it)
|
||||
} ?: "Unknown"
|
||||
parser.extension.sources.firstOrNull()?.lang ?: "Unknown"
|
||||
)
|
||||
}
|
||||
val adapter = ArrayAdapter(
|
||||
fragment.requireContext(),
|
||||
R.layout.item_dropdown,
|
||||
parser.extension.sources.map { LanguageMapper.getExtensionItem(it) }
|
||||
parser.extension.sources.map { LanguageMapper.mapLanguageCodeToName(it.lang) }
|
||||
)
|
||||
val items = adapter.count
|
||||
binding?.animeSourceLanguageContainer?.isVisible = items > 1
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en-rUS">
|
||||
|
||||
<string name="repo" translatable="false">rebelonion/Dantotsu</string>
|
||||
<string name="preference_file_key" translatable="false">dantotsuprefs</string>
|
||||
|
||||
<string name="app_name" translatable="false">Dantotsu</string>
|
||||
<string name="slogan">The NEW Best Anime & Manga app for Android.</string>
|
||||
|
||||
<string name="sign_in">Sign In</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="logout">Logout</string>
|
||||
|
||||
<string name="conversion_title">Welcome back!</string>
|
||||
<string name="conversion_message">It appears you have an older package installed.\nPlease select \"Backup\" to open the older version and perform a backup. You can then return to this app and use \"Restore Settings\".</string>
|
||||
<string name="backup">Backup</string>
|
||||
<string name="dantotsu" translatable="false">https://dantotsu.app/</string>
|
||||
<string name="discord" translatable="false">https://discord.gg/4HPZ5nAWwM</string>
|
||||
<string name="github" translatable="false">https://github.com/rebelonion/Dantotsu</string>
|
||||
<string name="telegram" translatable="false" tools:ignore="Typos">https://t.me/+gzBCQExtLQo1YTNh </string>
|
||||
<string name="coffee" translatable="false">https://www.buymeacoffee.com/rebelonion</string>
|
||||
|
||||
<string name="anilist_link">https://anilist.co/user/%1$s/</string>
|
||||
<string name="myanilist_link">https://myanimelist.net/profile/%1$s/</string>
|
||||
<string name="discord_link">https://discord.com/users/%1$s/</string>
|
||||
|
||||
<string name="home">Home</string>
|
||||
<string name="anime">Anime</string>
|
||||
@@ -29,7 +39,6 @@
|
||||
<string name="colon">" : "</string>
|
||||
|
||||
<string name="no_internet">No Internet Connection</string>
|
||||
<string name="no_internet_offline">No Internet Connection\nOffline mode available</string>
|
||||
<string name="refresh">Refresh</string>
|
||||
|
||||
<string name="search">Search</string>
|
||||
@@ -46,10 +55,11 @@
|
||||
|
||||
<string name="username">Username</string>
|
||||
<string name="chapters_read">Chapters Read</string>
|
||||
<string name="chapters_read_n">Chapters\nRead</string>
|
||||
<string name="episodes_watched">Episodes Watched</string>
|
||||
<string name="episodes_watched_n">Episodes\nWatched</string>
|
||||
<string name="continue_reading">Continue Reading</string>
|
||||
<string name="continue_watching">Continue Watching</string>
|
||||
<string name="continue_media">Continue…</string>
|
||||
<string name="recommended">Recommended</string>
|
||||
|
||||
<string name="get_recommendations">Watch/Read some Anime or Manga to get Recommendations</string>
|
||||
@@ -73,12 +83,8 @@
|
||||
<item>All</item>
|
||||
</string-array>
|
||||
|
||||
<string name="use_foldable">Use foldable layouts</string>
|
||||
<string name="use_shortcuts">Add shortcuts to launcher icon</string>
|
||||
|
||||
<string name="no_notifications">No more notifications</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="social_in_media">Show social stats in media</string>
|
||||
|
||||
<string name="status">STATUS</string>
|
||||
<string-array name="status" translatable="false">
|
||||
@@ -168,19 +174,6 @@
|
||||
<string name="prequel">Prequel</string>
|
||||
<string name="sequel">Sequel</string>
|
||||
|
||||
<string name="torrserver">TorrServer</string>
|
||||
<string name="torrent_running">Server is running…</string>
|
||||
<string name="settings_torrent">Internal TorrServer</string>
|
||||
<string name="torrent_port">Server port number</string>
|
||||
<string name="torrents">torrents</string>
|
||||
<string name="active_torrents">Active torrents</string>
|
||||
<string name="remove_torrent">Remove this torrent?</string>
|
||||
<string name="invalid_port">Invalid port entered!</string>
|
||||
<string name="port_range">Port must be a valid TCP port (0 – 65535)</string>
|
||||
<string name="server_disabled">TorrServer in disabled!</string>
|
||||
<string name="server_enabled">Starting TorrServer</string>
|
||||
<string name="enable_server">Would you like to temporarily enable TorrServer (disabled on app close)?</string>
|
||||
|
||||
<string name="anilist_settings">Anilist Settings</string>
|
||||
<string name="extension_settings">Extensions</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
@@ -189,7 +182,7 @@
|
||||
<string name="extensions">Extensions</string>
|
||||
<string name="extension_updates_available">Extension updates available</string>
|
||||
<string name="player_settings">Player Settings</string>
|
||||
<string name="recentlyListOnly">Only my content in \"Recently Updated\"</string>
|
||||
<string name="recentlyListOnly">Only show my content in \"Recently Updated\"</string>
|
||||
<string name="download_manager_select">Download Manager</string>
|
||||
<string name="downloadInSd">Download in SD card</string>
|
||||
<string name="noSdFound">No SD card was Found.</string>
|
||||
@@ -201,13 +194,10 @@
|
||||
<string name="ui">User Interface</string>
|
||||
<string name="common">Common</string>
|
||||
<string name="theme">Theme</string>
|
||||
<string name="theme_ui">Theme / UI</string>
|
||||
<string name="day_night">Light / Dark Theme</string>
|
||||
<string name="ui_settings">UI Settings</string>
|
||||
<string name="system">System</string>
|
||||
<string name="about">About</string>
|
||||
<string name="desc">" Dantotsu is crafted from the ashes of Saikou and based on simplistic yet state-of-the-art elegance. It is an Anilist only client, which also lets you stream-download Anime through extensions & Manga.\nDantotsu literally means the \"best of the best\" in japanese. Well, we would like to say this is the best open source app for anime and manga on Android, what would you say?"</string>
|
||||
<string name="devs">Contributors</string>
|
||||
<string name="devs">Developers/Helpers</string>
|
||||
<string name="disclaimer">Disclaimer</string>
|
||||
<string name="full_disclaimer">
|
||||
- Dantotsu by itself only provides an anime and manga tracker and does not provide any anime or manga streaming or downloading capabilities.
|
||||
@@ -265,7 +255,6 @@
|
||||
<string name="sub_text_example">Example Sub</string>
|
||||
<string name="sub_font_select">Subtitle Font</string>
|
||||
<string name="subtitle_font_size">Subtitle Size</string>
|
||||
<string name="no_subs_available">No Subtitles Available</string>
|
||||
|
||||
<string name="auto">Auto</string>
|
||||
<string name="auto_play_next_episode">Autoplay Next Episode</string>
|
||||
@@ -287,7 +276,7 @@
|
||||
<string name="watch_complete_percentage_info">The percentage at which your Anilist progress should be updated after watching an episode. \nThis also sets the \% for when to preload links for the next episode.</string>
|
||||
|
||||
<string name="behaviour">Behaviour</string>
|
||||
<string name="always_continue">Always resume from timestamp</string>
|
||||
<string name="always_continue">Always Continue from where you left off</string>
|
||||
<string name="pause_video_focus">Pause when not in Focus</string>
|
||||
<string name="gestures">Volume & Brightness Gestures</string>
|
||||
<string name="double_tap">Double tap to Seek</string>
|
||||
@@ -343,10 +332,6 @@
|
||||
<string name="spaced_pages">Spaced Pages</string>
|
||||
<string name="direction">Direction</string>
|
||||
|
||||
<string name="comments_api">Comments API (Private)</string>
|
||||
|
||||
<string name="disable_mitm">Prevent Injection (\"Pranks\")</string>
|
||||
|
||||
<string name="general">General</string>
|
||||
<string name="show_system_bars">Show Status & Navigation Bars</string>
|
||||
<string name="auto_detect_webtoon">Auto Detect Webtoon</string>
|
||||
@@ -373,7 +358,7 @@
|
||||
<string name="other">Other</string>
|
||||
<string name="total_repeats">TOTAL REPEATS</string>
|
||||
<string name="custom_lists">Custom Lists</string>
|
||||
<string name="donate_desc">Want to support Mr. Matagi?\nConsider Donating</string>
|
||||
<string name="donate_desc">Want to support Dantotsu\'s Maintainer?\nConsider Donating</string>
|
||||
<string name="donate_goal">No donation goal atm</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="year">Year</string>
|
||||
@@ -387,8 +372,8 @@
|
||||
<string name="release_calendar">Calendar</string>
|
||||
<string name="planned_anime">Planned Anime</string>
|
||||
<string name="planned_manga">Planned Manga</string>
|
||||
<string name="image_long_clicking">Long click to open image</string>
|
||||
<string name="always_continue_content">Continue previously opened items</string>
|
||||
<string name="image_long_clicking">Open image by Long Clicking</string>
|
||||
<string name="always_continue_content">Always continue previous items</string>
|
||||
<string name="search_source_list">Search next available source</string>
|
||||
<string name="timestamp_proxy_desc">Useful if you are getting Handshake Fails</string>
|
||||
<string name="timestamp_proxy">Use Proxy for Timestamps</string>
|
||||
@@ -398,7 +383,7 @@
|
||||
<string name="faq">FAQ</string>
|
||||
<string name="accounts">Accounts</string>
|
||||
<string name="myanimelist">MyAnimeList</string>
|
||||
<string name="login_with_anilist">Log in with Anilist</string>
|
||||
<string name="login_with_anilist">Login with Anilist!</string>
|
||||
<string name="anilist">Anilist</string>
|
||||
<string name="account_help">How does this work\?</string>
|
||||
<string name="full_account_help">
|
||||
@@ -417,15 +402,15 @@
|
||||
|
||||
\n\n_It is not required to sync both MAL and Anilist accounts._
|
||||
</string>
|
||||
<string name="notification_for_checking_subscriptions">Show notification for checking subscriptions</string>
|
||||
<string name="notification_for_checking_subscriptions">Show notification for Checking Subscriptions</string>
|
||||
<string name="use_alarm_manager">Use Alarm Manager</string>
|
||||
<string name="use_alarm_manager_reliable">Use Alarm Manager (Reliable Notifications)</string>
|
||||
<string name="use_alarm_manager_reliable">Use Alarm Manager for reliable Notifications</string>
|
||||
<string name="use_alarm_manager_confirm">Using Alarm Manger can help fight against battery optimization, but may consume more battery. It also requires the Alarm Manager permission.</string>
|
||||
<string name="use">Use</string>
|
||||
<string name="checking_subscriptions">Subscription Check Notifications</string>
|
||||
<string name="checking_subscriptions">Notification for Checking Subscriptions</string>
|
||||
<string name="subscriptions_checking_time_s">Subscriptions Update Frequency : %1$s</string>
|
||||
<string name="subscriptions_checking_time">Subscriptions Update Frequency</string>
|
||||
<string name="subscriptions_info">Amount of time for Dantotsu to check for new episodes / chapters\n(Less time consumes more battery)</string>
|
||||
<string name="subscriptions_info">Amount of time for Dantotsu to periodically check for new Episodes/Chapters\n(Less time will cause more battery consumption)</string>
|
||||
<string name="do_not_update">Don\'t Update</string>
|
||||
<string name="loading_chap_number">Loading Chapter %1$s</string>
|
||||
<string name="sort_by_release_date">Sort by Release Date</string>
|
||||
@@ -442,12 +427,6 @@
|
||||
<string name="install_step">Step: %1$s</string>
|
||||
<string name="review">Review</string>
|
||||
|
||||
<string name="select_source">Select a Source</string>
|
||||
|
||||
<string name="update_notice">Dantotsu update %1$s</string>
|
||||
<string name="install_update">Install update %1$s?</string>
|
||||
<string name="update_blocked">Update permission denied!</string>
|
||||
|
||||
<string name="discord_nothing_button">Display only the first button</string>
|
||||
<string name="discord_dantotsu_button">Display dantotsu in the second button</string>
|
||||
<string name="discord_anilist_button">Display your AniList profile instead</string>
|
||||
@@ -460,18 +439,19 @@
|
||||
<string name="error_loading_data">Error loading data %1$s</string>
|
||||
<string name="long_click_to_check_update">Long click to check for app updates</string>
|
||||
<string name="saved_to_path">Saved to:\n%s</string>
|
||||
<string name="setting_progress">✔ [%1$s] %2$d</string>
|
||||
<string name="login_anilist_account">Please log into AniList account!</string>
|
||||
<string name="setting_progress">Setting progress to %1$d</string>
|
||||
<string name="login_anilist_account">Please Login into AniList account!</string>
|
||||
<string name="congrats_vro">Congrats Vro</string>
|
||||
<string name="please_reload">Please Reload.</string>
|
||||
<string name="copied_text">Copied "%1$s"</string>
|
||||
<string name="back_to_exit">Press BACK again to exit</string>
|
||||
<string name="no_internet_connection">No Internet Connection</string>
|
||||
<string name="anilist_not_found">Seems like that wasn\'t found on Anilist.</string>
|
||||
<string name="disabled_auto_skip">Disabled Auto Skipping OP & ED</string>
|
||||
<string name="auto_skip">Auto Skipping OP & ED</string>
|
||||
<string name="show_skip_time_stamp_button">Show Skip [Segment] Buttons</string>
|
||||
<string name="show_skip_time_stamp_button">Show Skip Time Stamp Button</string>
|
||||
<string name="always_load_time_stamps">Always Load Time Stamps</string>
|
||||
<string name="auto_hide_time_stamps">>Auto Hide Skip [Segment] Buttons</string>
|
||||
<string name="auto_hide_time_stamps">Auto Hide Time Stamps</string>string
|
||||
<string name="timestamps">Segments</string>
|
||||
<string name="auto_skip_op_ed">Auto Skip OP / ED</string>
|
||||
<string name="requires_time_stamps_to_be_enabled">Requires Time Stamps to be Enabled</string>
|
||||
@@ -486,7 +466,7 @@
|
||||
<string name="getting_user_data">Getting User Data</string>
|
||||
<string name="no_next_episode">No next episode found!</string>
|
||||
<string name="enable_banner_animations">Try enabling \"Banner Animations\" in settings</string>
|
||||
<string name="please_login_anilist">Please log in with Anilist!</string>
|
||||
<string name="please_login_anilist">Please Login with Anilist!</string>
|
||||
<string name="auto_update_reset">Auto Update progress has now been reset-ed</string>
|
||||
<string name="cant_wait">Can\'t wait, huh? fine X(</string>
|
||||
<string name="downloading">Downloading…</string>
|
||||
@@ -503,15 +483,10 @@
|
||||
<string name="list_updated">List Updated</string>
|
||||
<string name="deleted_from_list">Deleted from List</string>
|
||||
<string name="no_list_id">No List ID found…</string>
|
||||
|
||||
<string name="matagi_update">Mr. Matagi Update %1$s</string>
|
||||
<string name="matagi_dont_show">Don\'t notify again for %1$s</string>
|
||||
<string name="matagi_downloading">Downloading Mr. Matagi %1$s</string>
|
||||
|
||||
<string name="checking_for_update">Checking for Update</string>
|
||||
<string name="dont_show_again">Don\'t notify again for version %1$s</string>
|
||||
<string name="dont_show_again">Don\'t show again for version %1$s</string>
|
||||
<string name="no_update_found">No Update Found</string>
|
||||
<string name="downloading_update">Downloading Dantotsu %1$s</string>
|
||||
<string name="downloading_update">Downloading Update %1$s</string>
|
||||
<string name="permission_required">Please give permission to access Files & Folders from Settings, & Try again.</string>
|
||||
<string name="started_downloading">Started Downloading\n%1$s</string>
|
||||
<string name="install_1dm">Please install 1DM</string>
|
||||
@@ -636,7 +611,7 @@
|
||||
<string name="answer_2">Some mentionable features of Dantotsu are\n\n- Easy and functional way to both, watch anime and read manga and light novels, Ad Free.\n- A completely open source app with a nice UI & Animations\n- 3rd party plugin support \n- Synchronize anime and manga real-time with AniList. Easily categorize anime and manga based on your current status. (Powered by AniList)\n- Find all shows using thoroughly and frequently updated list of all trending, popular and ongoing anime based on scores.\n- View extensive details about anime shows, movies and manga titles. It also features ability to countdown to the next episode of airing anime. (Powered by AniList & MyAnimeList)</string>
|
||||
|
||||
<string name="question_3">Whats the difference between Stable, Beta & Alpha versions?</string>
|
||||
<string name="answer_3">This fork does not provide separate tracks. The version you download from the [repository](https://github.com/RepoDevil/Mr.Matagi) is the same one [AbandonedCart](https://github.com/AbandonedCart) is running. If you find bugs and have already updated to the latest version, feel free to submit an [issue](https://github.com/RepoDevil/Mr.Matagi/issues)</string>
|
||||
<string name="answer_3">A Stable release is a version that has been tested as thoroughly as possible and is as reliable as we can make it.\n\nA Beta release is a version which is meant for testing new features or providing hot fixes.\n\nAn Alpha release is like a beta version but has many bugs and you can only find it on our [discord](https://discord.gg/invite/4HPZ5nAWwM) server. It gets frequent updates and has a high chance to break.\n\nIf you want a reliable app then go for the Stable. If you want the latest and greatest features and bugs then go for Alpha.</string>
|
||||
|
||||
<string name="question_4">Is Dantotsu available for PC?</string>
|
||||
<string name="answer_4">Currently no (for both Windows and Linux). There isn\'t any estimation when it will be available. But you can download any Android emulator and run Dantotsu on it. For Windows 11 users, they can use the Windows Subsystem for Android (WSA) to run Dantotsu in Windows.</string>
|
||||
@@ -722,7 +697,7 @@
|
||||
<string name="theme_">Theme:</string>
|
||||
<string name="user_agent">User Agent</string>
|
||||
<string name="custom_theme">Custom Theme:</string>
|
||||
<string name="use_custom_theme">Custom Theme</string>
|
||||
<string name="use_custom_theme">Custom theme</string>
|
||||
<string name="use_unique_theme_for_each_item">Theme as Anime/Manga </string>
|
||||
<string name="oled_theme_variant">OLED theme variant</string>
|
||||
<string name="installed_anime">Installed Anime</string>
|
||||
@@ -782,7 +757,6 @@
|
||||
<string name="please_wait">Please wait</string>
|
||||
<string name="upcoming">Upcoming</string>
|
||||
<string name="no_shows_to_display">No shows to display</string>
|
||||
<string name="no_media_to_display">No media to display</string>
|
||||
<string name="extension_name">Extension Name</string>
|
||||
<string name="extension_version">version</string>
|
||||
<string name="enter_password_to_decrypt_file">Enter your password to decrypt the file</string>
|
||||
@@ -801,6 +775,14 @@
|
||||
<string name="set_cookies">Set Cookies</string>
|
||||
<string name="open_website">Open Website</string>
|
||||
|
||||
<string name="lorem_ipsum" translatable="false">
|
||||
|
||||
Lorem ipsum dolor sit amet. Est consectetur sint qui internos optio nam Quis excepturi qui voluptatem animi. Qui labore quasi vel suscipit deleniti et doloremque omnis in velit suscipit et quasi eaque. Et doloribus recusandae id laudantium Quis qui natus velit in voluptatem voluptatem!
|
||||
|
||||
Et magni quasi vel nemo omnis et voluptate quisquam vel corporis fuga ut consequatur voluptas At quis veniam. At assumenda illum id minus veritatis id consequatur ipsum est quod corrupti quo adipisci sint. Quo explicabo doloribus et excepturi internos est reiciendis laboriosam ut explicabo veniam ut culpa mollitia in ducimus sint aut autem voluptatem! In consectetur laudantium non omnis saepe nam sint fuga.
|
||||
|
||||
Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exercitationem adipisci quo nemo aliquam ea numquam beatae. Eum Quis dolore aut quia accusantium sed vero autem vel quaerat eaque et beatae dicta non delectus galisum non ullam nulla.
|
||||
</string>
|
||||
<string name="log_to_file">Log to File</string>
|
||||
<string name="logging_warning">Logging to a file will slow down the app. Only enable if you are experiencing issues.</string>
|
||||
<string name="radius">Radius</string>
|
||||
@@ -821,6 +803,8 @@
|
||||
<string name="download_manager">Download Manager</string>
|
||||
<string name="enter_password">Enter Password</string>
|
||||
|
||||
<string name="you_cursed">youwu have been cuwsed :pwayge:</string>
|
||||
<string name="cursed_yt" translatable="false">https://www.youtube.com/watch?v=dQw4w9WgXcQ</string>
|
||||
<string name="purge_confirm">Are you sure you want to purge all %1$s downloads?</string>
|
||||
|
||||
<string name="delete_fail_reason">Failed to delete because of… %1$s</string>
|
||||
@@ -855,19 +839,19 @@
|
||||
<string name="button_restore">Restore</string>
|
||||
<string name="button_backup">Backup</string>
|
||||
<string name="no_location_selected">No location selected</string>
|
||||
<string name="enjoying_app">Enjoying the App?</string>
|
||||
<string name="consider_donating">Consider donating!</string>
|
||||
<string name="no_moners">no moners :(</string>
|
||||
<string name="you_be_rich">That\'s alright, you\'ll be a rich man soon :prayge:</string>
|
||||
<string name="donate">donate :)</string>
|
||||
<string name="do_it">Do it!</string>
|
||||
<string name="password">Password</string>
|
||||
|
||||
<string name="anilist_broken_title">Internal Server Error!</string>
|
||||
<string name="anilist_broken">AniList appears to be unresponsive and functionality will be severely limited. Would you like to close the app and try again later?\n</string>
|
||||
|
||||
<string name="search_title">Search %1$s</string>
|
||||
|
||||
<string name="profile_stats_widget">Track progress directly from your home screen</string>
|
||||
<string name="anime_watched">Anime</string>
|
||||
<string name="manga_read">Manga</string>
|
||||
<string name="chapters_read_n">Chapters</string>
|
||||
<string name="episodes_watched_n">Episodes</string>
|
||||
<string name="anime_watched">Anime\nWatched</string>
|
||||
<string name="manga_read">Manga\nRead</string>
|
||||
<string name="loading">Loading…</string>
|
||||
<string name="user_stats">%1$s\'s Stats</string>
|
||||
|
||||
@@ -875,17 +859,11 @@
|
||||
<string name="log_in">log in</string>
|
||||
<string name="or_join">or join</string>
|
||||
|
||||
<string name="audio_tracks">Audio Tracks</string>
|
||||
<string name="disabled_track">\[💬\] Disabled</string>
|
||||
<string name="invalid_track">\[⁉️\] Invalid</string>
|
||||
<string name="unknown_track">\[%1$s\] Unknown</string>
|
||||
|
||||
<string name="top_background_color">Top background color</string>
|
||||
<string name="bottom_background_color">Bottom Background Color</string>
|
||||
<string name="countdown_text_color">Countdown Text Color</string>
|
||||
<string name="title_color">Title Color</string>
|
||||
<string name="stat_text_color">Stats Text Color</string>
|
||||
<string name="flipper_color">Flipper Color</string>
|
||||
<string name="placeholder">Placeholder</string>
|
||||
|
||||
<string name="anime_add_repository">Add Anime Repo</string>
|
||||
@@ -900,18 +878,13 @@
|
||||
<string name="trending_manhwa">Trending Manhwa</string>
|
||||
<string name="liked_by">Liked By</string>
|
||||
<string name="adult_only_content">Adult only content</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="ban">Ban</string>
|
||||
|
||||
<string name="activity_label">Activity</string>
|
||||
|
||||
<string name="dir_error">Your path could not be set</string>
|
||||
<string name="dir_access">Downloads access</string>
|
||||
<string name="dir_access_msg">Please choose a directory to save your downloads</string>
|
||||
<string name="download_subtitle">Download Subtitle</string>
|
||||
<string name="change_download_location">Change Download Location</string>
|
||||
<string name="download_location_msg">Are you sure you want to change the download location?\nOld downloads may no longer be accessible.</string>
|
||||
|
||||
<string name="report">Report</string>
|
||||
<string name="ban">Ban</string>
|
||||
<string name="voice_actors">Voice Actors</string>
|
||||
<string name="download_permission_required">Permission is required to download</string>
|
||||
<string name="media">Media</string>
|
||||
@@ -919,18 +892,16 @@
|
||||
<string name="social">Social</string>
|
||||
<string name="auto_skip_recap">Auto Skip Recap</string>
|
||||
<string name="use_anilist_icon">Use AniList Icon</string>
|
||||
|
||||
<string name="exo_source_exception">Source Exception: %1$s</string>
|
||||
<string name="exo_decoding_failed">Decoding failed: %1$s</string>
|
||||
<string name="exo_player_error">Player Error: %1$d %2$s: %3$s</string>
|
||||
|
||||
<string name="audio_tracks">Audio Tracks</string>
|
||||
<string name="disabled_track">Disabled</string>
|
||||
<string name="invalid_track">Invalid</string>
|
||||
<string name="unknown_track">\[%1$s\] Unknown</string>
|
||||
<string name="accounts_desc">Anilist, MAL and Discord.\nWhat more could you need?</string>
|
||||
<string name="theme_desc">Change the vibe of your app</string>
|
||||
<string name="extensions_desc">Manage your repo collection</string>
|
||||
<string name="common_desc">Downloads, DNS, and defaults</string>
|
||||
<string name="extensions_desc">Manage your reliable repositories</string>
|
||||
<string name="common_desc">UI and other mischievous stuff</string>
|
||||
<string name="notifications_desc">Customise your news and updates</string>
|
||||
<string name="anime_desc">Choose how you watch</string>
|
||||
<string name="manga_desc">Choose how you read</string>
|
||||
<string name="notifications_desc">Customize news and updates</string>
|
||||
<string name="system_desc">Updates and useful utilities</string>
|
||||
<string name="about_desc">Learn more about Mr. Matagi</string>
|
||||
<string name="about_desc">Learn more about Dantotsu</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user