From 736b06bdbe70c591ed6ac6cd36b21c0fab221ea2 Mon Sep 17 00:00:00 2001 From: aayush262 <99584765+aayush2622@users.noreply.github.com> Date: Sat, 18 Nov 2023 02:40:58 +0530 Subject: [PATCH] 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> --- .../ani/dantotsu/media/anime/ExoplayerView.kt | 9 +++-- .../settings/DevelopersDialogFragment.kt | 1 + .../dantotsu/settings/ExtensionsActivity.kt | 11 ++++++ .../InstalledAnimeExtensionsFragment.kt | 12 ++---- .../InstalledMangaExtensionsFragment.kt | 12 ++---- .../ani/dantotsu/settings/PlayerSettings.kt | 1 + .../settings/PlayerSettingsActivity.kt | 6 ++- .../ani/dantotsu/settings/SettingsActivity.kt | 11 ++++++ .../settings/paging/AnimePagingSource.kt | 13 +++++-- .../settings/paging/MangaPagingSource.kt | 13 +++++-- .../main/res/drawable/ic_round_delete_24.xml | 20 ++++++++++ .../drawable/ic_round_dots_vertical_24.xml | 7 ++++ ...nd_no_icon.xml => ic_round_no_icon_24.xml} | 0 .../main/res/drawable/ic_round_nsfw_24.xml | 7 ++++ .../res/drawable/ic_round_translate_24.xml | 7 ++++ .../main/res/layout/activity_extensions.xml | 10 +++++ .../res/layout/activity_player_settings.xml | 23 +++++++++++ app/src/main/res/layout/activity_settings.xml | 20 +++++++++- app/src/main/res/layout/item_anime_page.xml | 3 +- app/src/main/res/layout/item_extension.xml | 38 +++++++++---------- .../main/res/layout/item_extension_all.xml | 4 +- .../main/res/menu/launguage_selector_menu.xml | 15 ++++++++ app/src/main/res/values/strings.xml | 4 +- 23 files changed, 192 insertions(+), 55 deletions(-) create mode 100644 app/src/main/res/drawable/ic_round_delete_24.xml create mode 100644 app/src/main/res/drawable/ic_round_dots_vertical_24.xml rename app/src/main/res/drawable/{ic_round_no_icon.xml => ic_round_no_icon_24.xml} (100%) create mode 100644 app/src/main/res/drawable/ic_round_nsfw_24.xml create mode 100644 app/src/main/res/drawable/ic_round_translate_24.xml create mode 100644 app/src/main/res/menu/launguage_selector_menu.xml diff --git a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt index 472939b5..2ee95fca 100644 --- a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt +++ b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt @@ -823,7 +823,9 @@ class ExoplayerView : AppCompatActivity(), Player.Listener { //FastRewind (Left Panel) val fastRewindDetector = GestureDetector(this, object : GesturesListener() { - override fun onLongClick(event: MotionEvent) = fastForward() + override fun onLongClick(event: MotionEvent) { + if (settings.fastforward) fastForward() + } override fun onDoubleClick(event: MotionEvent) { doubleTap(false, event) @@ -853,8 +855,9 @@ class ExoplayerView : AppCompatActivity(), Player.Listener { //FastForward (Right Panel) val fastForwardDetector = GestureDetector(this, object : GesturesListener() { - override fun onLongClick(event: MotionEvent) = fastForward() - + override fun onLongClick(event: MotionEvent) { + if (settings.fastforward) fastForward() + } override fun onDoubleClick(event: MotionEvent) { doubleTap(true, event) } diff --git a/app/src/main/java/ani/dantotsu/settings/DevelopersDialogFragment.kt b/app/src/main/java/ani/dantotsu/settings/DevelopersDialogFragment.kt index ebdd27a2..7a999083 100644 --- a/app/src/main/java/ani/dantotsu/settings/DevelopersDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/DevelopersDialogFragment.kt @@ -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 { diff --git a/app/src/main/java/ani/dantotsu/settings/ExtensionsActivity.kt b/app/src/main/java/ani/dantotsu/settings/ExtensionsActivity.kt index f6a765dc..30a900bd 100644 --- a/app/src/main/java/ani/dantotsu/settings/ExtensionsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/ExtensionsActivity.kt @@ -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 { topMargin = statusBarHeight diff --git a/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt b/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt index e05c018e..3af4ce55 100644 --- a/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/InstalledAnimeExtensionsFragment.kt @@ -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 { diff --git a/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt b/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt index abb795f5..298feffa 100644 --- a/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt +++ b/app/src/main/java/ani/dantotsu/settings/InstalledMangaExtensionsFragment.kt @@ -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 { diff --git a/app/src/main/java/ani/dantotsu/settings/PlayerSettings.kt b/app/src/main/java/ani/dantotsu/settings/PlayerSettings.kt index 92036469..1589d66d 100644 --- a/app/src/main/java/ani/dantotsu/settings/PlayerSettings.kt +++ b/app/src/main/java/ani/dantotsu/settings/PlayerSettings.kt @@ -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, diff --git a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt index 06c4c45b..285e68fa 100644 --- a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt @@ -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() diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt index 9975baf5..24d1ff51 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt @@ -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().extensionInstaller() private val networkPreferences = Injekt.get() @@ -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 { _, _, _ -> diff --git a/app/src/main/java/ani/dantotsu/settings/paging/AnimePagingSource.kt b/app/src/main/java/ani/dantotsu/settings/paging/AnimePagingSource.kt index 9d016f6b..2a14a8ec 100644 --- a/app/src/main/java/ani/dantotsu/settings/paging/AnimePagingSource.kt +++ b/app/src/main/java/ani/dantotsu/settings/paging/AnimePagingSource.kt @@ -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) diff --git a/app/src/main/java/ani/dantotsu/settings/paging/MangaPagingSource.kt b/app/src/main/java/ani/dantotsu/settings/paging/MangaPagingSource.kt index 715d425f..d4eb8884 100644 --- a/app/src/main/java/ani/dantotsu/settings/paging/MangaPagingSource.kt +++ b/app/src/main/java/ani/dantotsu/settings/paging/MangaPagingSource.kt @@ -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) diff --git a/app/src/main/res/drawable/ic_round_delete_24.xml b/app/src/main/res/drawable/ic_round_delete_24.xml new file mode 100644 index 00000000..abc47a0b --- /dev/null +++ b/app/src/main/res/drawable/ic_round_delete_24.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_round_dots_vertical_24.xml b/app/src/main/res/drawable/ic_round_dots_vertical_24.xml new file mode 100644 index 00000000..db5b6d10 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_dots_vertical_24.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/drawable/ic_round_no_icon.xml b/app/src/main/res/drawable/ic_round_no_icon_24.xml similarity index 100% rename from app/src/main/res/drawable/ic_round_no_icon.xml rename to app/src/main/res/drawable/ic_round_no_icon_24.xml diff --git a/app/src/main/res/drawable/ic_round_nsfw_24.xml b/app/src/main/res/drawable/ic_round_nsfw_24.xml new file mode 100644 index 00000000..7672c9c0 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_nsfw_24.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_round_translate_24.xml b/app/src/main/res/drawable/ic_round_translate_24.xml new file mode 100644 index 00000000..4cfe3379 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_translate_24.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/layout/activity_extensions.xml b/app/src/main/res/layout/activity_extensions.xml index bdfc2e63..30e5de8d 100644 --- a/app/src/main/res/layout/activity_extensions.xml +++ b/app/src/main/res/layout/activity_extensions.xml @@ -47,7 +47,17 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> + + + + + + + - - diff --git a/app/src/main/res/layout/item_extension.xml b/app/src/main/res/layout/item_extension.xml index 78754f21..cd9e7d32 100644 --- a/app/src/main/res/layout/item_extension.xml +++ b/app/src/main/res/layout/item_extension.xml @@ -15,7 +15,7 @@ android:layout_marginEnd="3dp" /> + android:textSize="15sp" /> - + + - - + android:contentDescription="uninstall" + android:src="@drawable/ic_round_delete_24" + app:tint="?attr/colorOnBackground" /> diff --git a/app/src/main/res/layout/item_extension_all.xml b/app/src/main/res/layout/item_extension_all.xml index 36c65aa6..e3326d91 100644 --- a/app/src/main/res/layout/item_extension_all.xml +++ b/app/src/main/res/layout/item_extension_all.xml @@ -36,13 +36,13 @@ android:textSize="11sp" /> - diff --git a/app/src/main/res/menu/launguage_selector_menu.xml b/app/src/main/res/menu/launguage_selector_menu.xml new file mode 100644 index 00000000..87284fe4 --- /dev/null +++ b/app/src/main/res/menu/launguage_selector_menu.xml @@ -0,0 +1,15 @@ + + + + + + + \ 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 3b52f524..c6a34e48 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -154,7 +154,7 @@ Sequel Anilist Settings - Extension Settings + Extension Downloads Settings Extensions @@ -253,6 +253,7 @@ Pause when not in Focus Volume & Brightness Gestures Double tap to Seek + Fast Forward Turning off will show fast forward & rewind buttons Seek Time Amount of time in seconds for fast forward & rewind. @@ -624,6 +625,7 @@ View Manga Force Legacy Installer Extensions + NSFW Extensions Skip loading extension icons Use Material You Extension-specific DNS