Added a option to toggle fast forward / Added NSFW extension toggle to extension settings (#48)

* Remove 18+ extension if Anilist 18+ is off
 ~requested by @arif

* Translation filter for extension(WIP)

* Added a option to toggle fast forward
suggested by arif

* Added NFSW toggle to extension settings
now it will be more easy rather then going to anilist to toggle it
 ~suggested by arif

* Forgot to undo this

* changed icons in extension setting

* get rid of companion object (todo)

* get rid of companion object (todo)

---------

Co-authored-by: rebelonion <87634197+rebelonion@users.noreply.github.com>
This commit is contained in:
aayush262 2023-11-18 02:40:58 +05:30 committed by GitHub
parent 5543d29317
commit 736b06bdbe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 192 additions and 55 deletions

View file

@ -15,6 +15,7 @@ class DevelopersDialogFragment : BottomSheetDialogFragment() {
private val developers = arrayOf(
Developer("rebelonion","https://avatars.githubusercontent.com/u/87634197?v=4","Owner and Maintainer","https://github.com/rebelonion"),
Developer("Wai What", "https://avatars.githubusercontent.com/u/149729762?v=4", "Icon Designer", "https://github.com/WaiWhat"),
Developer("Aayush262", "https://avatars.githubusercontent.com/u/99584765?v=4", "Contributor", "https://github.com/aayush2622"),
)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {

View file

@ -6,12 +6,14 @@ import android.os.Build.VERSION.*
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.View
import android.view.ViewGroup
import android.widget.AutoCompleteTextView
import android.widget.LinearLayout
import android.widget.SearchView
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
@ -21,6 +23,9 @@ import ani.dantotsu.databinding.ActivityExtensionsBinding
import ani.dantotsu.themes.ThemeManager
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class ExtensionsActivity : AppCompatActivity() {
private val restartMainActivity = object : OnBackPressedCallback(false) {
@ -86,6 +91,12 @@ class ExtensionsActivity : AppCompatActivity() {
initActivity(this)
binding.languageselect.setOnClickListener {
val popup = PopupMenu(this, it)
popup.inflate(R.menu.launguage_selector_menu)
popup.show()
}
binding.settingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight

View file

@ -222,15 +222,9 @@ class InstalledAnimeExtensionsFragment : Fragment() {
holder.extensionIconImageView.setImageDrawable(extension.icon)
}
if (extension.hasUpdate) {
holder.closeTextView.text = "Update"
holder.closeTextView.setTextColor(
ContextCompat.getColor(
holder.itemView.context,
R.color.warning
)
)
holder.closeTextView.setImageResource(R.drawable.ic_round_sync_24)
} else {
holder.closeTextView.text = "Uninstall"
holder.closeTextView.setImageResource(R.drawable.ic_round_delete_24)
}
holder.closeTextView.setOnClickListener {
onUninstallClicked(extension)
@ -245,7 +239,7 @@ class InstalledAnimeExtensionsFragment : Fragment() {
val extensionVersionTextView: TextView = view.findViewById(R.id.extensionVersionTextView)
val settingsImageView: ImageView = view.findViewById(R.id.settingsImageView)
val extensionIconImageView: ImageView = view.findViewById(R.id.extensionIconImageView)
val closeTextView: TextView = view.findViewById(R.id.closeTextView)
val closeTextView: ImageView = view.findViewById(R.id.closeTextView)
}
companion object {

View file

@ -215,15 +215,9 @@ class InstalledMangaExtensionsFragment : Fragment() {
holder.extensionIconImageView.setImageDrawable(extension.icon)
}
if (extension.hasUpdate) {
holder.closeTextView.text = "Update"
holder.closeTextView.setTextColor(
ContextCompat.getColor(
holder.itemView.context,
R.color.warning
)
)
holder.closeTextView.setImageResource(R.drawable.ic_round_sync_24)
} else {
holder.closeTextView.text = "Uninstall"
holder.closeTextView.setImageResource(R.drawable.ic_round_delete_24)
}
holder.closeTextView.setOnClickListener {
onUninstallClicked(extension)
@ -238,7 +232,7 @@ class InstalledMangaExtensionsFragment : Fragment() {
val extensionVersionTextView: TextView = view.findViewById(R.id.extensionVersionTextView)
val settingsImageView: ImageView = view.findViewById(R.id.settingsImageView)
val extensionIconImageView: ImageView = view.findViewById(R.id.extensionIconImageView)
val closeTextView: TextView = view.findViewById(R.id.closeTextView)
val closeTextView: ImageView = view.findViewById(R.id.closeTextView)
}
companion object {

View file

@ -40,6 +40,7 @@ data class PlayerSettings(
var focusPause: Boolean = true,
var gestures: Boolean = true,
var doubleTap: Boolean = true,
var fastforward: Boolean = true,
var seekTime: Int = 10,
var skipTime: Int = 85,

View file

@ -183,7 +183,11 @@ class PlayerSettingsActivity : AppCompatActivity() {
settings.doubleTap = isChecked
saveData(player, settings)
}
binding.playerSettingsFastForward.isChecked = settings.fastforward
binding.playerSettingsFastForward.setOnCheckedChangeListener { _, isChecked ->
settings.fastforward = isChecked
saveData(player, settings)
}
binding.playerSettingsSeekTime.value = settings.seekTime.toFloat()
binding.playerSettingsSeekTime.addOnChangeListener { _, value, _ ->
settings.seekTime = value.toInt()

View file

@ -50,6 +50,11 @@ class SettingsActivity : AppCompatActivity() {
private val restartMainActivity = object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() = startMainActivity(this@SettingsActivity)
}
companion object {
@Volatile
var isNsfwEnabled: Boolean = loadData("NFSWExtension") ?: false
}
lateinit var binding: ActivitySettingsBinding
private val extensionInstaller = Injekt.get<BasePreferences>().extensionInstaller()
private val networkPreferences = Injekt.get<NetworkPreferences>()
@ -167,6 +172,12 @@ OS Version: $CODENAME $RELEASE ($SDK_INT)
binding.skipExtensionIcons.setOnCheckedChangeListener { _, isChecked ->
saveData("skip_extension_icons", isChecked)
}
binding.NSFWExtension.isChecked = loadData("NFSWExtension") ?: false
binding.NSFWExtension.setOnCheckedChangeListener { _, isChecked ->
isNsfwEnabled = isChecked
saveData("NFSWExtension", isChecked)
}
binding.userAgent.setText(networkPreferences.defaultUserAgent().get())
binding.userAgent.setOnEditorActionListener { _, _, _ ->

View file

@ -15,6 +15,7 @@ import androidx.paging.PagingState
import androidx.paging.cachedIn
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import ani.dantotsu.settings.SettingsActivity
import ani.dantotsu.databinding.ItemExtensionAllBinding
import ani.dantotsu.loadData
import com.bumptech.glide.Glide
@ -82,16 +83,20 @@ class AnimeExtensionPagingSource(
} else {
availableExtensions.filter { it.name.contains(query, ignoreCase = true) }
}
val filternfsw = if(SettingsActivity.isNsfwEnabled) {//TODO
filteredExtensions
} else {
filteredExtensions.filterNot { it.isNsfw }
}
return try {
val sublist = filteredExtensions.subList(
val sublist = filternfsw.subList(
fromIndex = position,
toIndex = (position + params.loadSize).coerceAtMost(filteredExtensions.size)
toIndex = (position + params.loadSize).coerceAtMost(filternfsw.size)
)
LoadResult.Page(
data = sublist,
prevKey = if (position == 0) null else position - params.loadSize,
nextKey = if (position + params.loadSize >= filteredExtensions.size) null else position + params.loadSize
nextKey = if (position + params.loadSize >= filternfsw.size) null else position + params.loadSize
)
} catch (e: Exception) {
LoadResult.Error(e)

View file

@ -16,6 +16,7 @@ import androidx.paging.PagingState
import androidx.paging.cachedIn
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import ani.dantotsu.settings.SettingsActivity
import ani.dantotsu.databinding.ItemExtensionAllBinding
import ani.dantotsu.loadData
import com.bumptech.glide.Glide
@ -86,16 +87,20 @@ class MangaExtensionPagingSource(
} else {
availableExtensions.filter { it.name.contains(query, ignoreCase = true) }
}
val filternfsw = if(SettingsActivity.isNsfwEnabled) {//TODO
filteredExtensions
} else {
filteredExtensions.filterNot { it.isNsfw }
}
return try {
val sublist = filteredExtensions.subList(
val sublist = filternfsw.subList(
fromIndex = position,
toIndex = (position + params.loadSize).coerceAtMost(filteredExtensions.size)
toIndex = (position + params.loadSize).coerceAtMost(filternfsw.size)
)
LoadResult.Page(
data = sublist,
prevKey = if (position == 0) null else position - params.loadSize,
nextKey = if (position + params.loadSize >= filteredExtensions.size) null else position + params.loadSize
nextKey = if (position + params.loadSize >= filternfsw.size) null else position + params.loadSize
)
} catch (e: Exception) {
LoadResult.Error(e)