diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt index 5dd9dbc3..c8962104 100644 --- a/app/src/main/java/ani/dantotsu/Functions.kt +++ b/app/src/main/java/ani/dantotsu/Functions.kt @@ -270,6 +270,32 @@ fun Activity.setNavigationTheme() { } } +fun Activity.reloadActivity() { + Refresh.all() + finish() + startActivity(Intent(this, this::class.java)) + initActivity(this) +} + +fun Context.restartApp(view: View) { + val mainIntent = Intent.makeRestartActivityTask( + packageManager.getLaunchIntentForPackage(this.packageName)!!.component + ) + val component = ComponentName(this@restartApp.packageName, this@restartApp::class.qualifiedName!!) + 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) + } + Runtime.getRuntime().exit(0) + } + show() + } +} + open class BottomSheetDialogFragment : BottomSheetDialogFragment() { override fun onStart() { super.onStart() @@ -1272,7 +1298,7 @@ fun blurImage(imageView: ImageView, banner: String?) { val url = PrefManager.getVal(PrefName.ImageUrl).ifEmpty { banner } Glide.with(context as Context) .load(GlideUrl(url)) - .diskCacheStrategy(DiskCacheStrategy.ALL).override(400) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE).override(400) .apply(RequestOptions.bitmapTransform(BlurTransformation(radius, sampling))) .into(imageView) } diff --git a/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchAdapter.kt b/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchAdapter.kt index 3b69477f..2f798a22 100644 --- a/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchAdapter.kt @@ -159,8 +159,7 @@ class AnimeWatchAdapter( } subscribeButton(false) fragment.loadEpisodes(media.selected!!.sourceIndex, true) - } ?: run { - } + } ?: run { } } //settings @@ -430,6 +429,22 @@ class AnimeWatchAdapter( val sourceFound = media.anime.episodes!!.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 + binding.animeSource.setText(binding.animeSource.adapter + .getItem(nextIndex).toString(), false) + fragment.onSourceChange(nextIndex).apply { + binding.animeSourceTitle.text = showUserText + showUserTextListener = { MainScope().launch { binding.animeSourceTitle.text = it } } + binding.animeSourceDubbed.isChecked = selectDub + binding.animeSourceDubbedCont.isVisible = isDubAvailableSeparately() + setLanguageList(0, nextIndex) + } + subscribeButton(false) + fragment.loadEpisodes(nextIndex, false) + } + } } else { binding.animeSourceContinue.visibility = View.GONE binding.animeSourceNotFound.visibility = View.GONE 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 8d0d1d64..259cfb89 100644 --- a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt +++ b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt @@ -481,7 +481,7 @@ class ExoplayerView : AppCompatActivity(), Player.Listener, SessionAvailabilityL playerView.subtitleView?.alpha = when (PrefManager.getVal(PrefName.Subtitles)) { - true -> 1f + true -> PrefManager.getVal(PrefName.SubAlpha) false -> 0f } val fontSize = PrefManager.getVal(PrefName.FontSize).toFloat() diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt index 16cd3ed0..08a9bfb9 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt @@ -481,6 +481,22 @@ class MangaReadAdapter( 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 + binding.animeSource.setText(binding.animeSource.adapter + .getItem(nextIndex).toString(), false) + fragment.onSourceChange(nextIndex).apply { + binding.animeSourceTitle.text = showUserText + showUserTextListener = { MainScope().launch { binding.animeSourceTitle.text = it } } + setLanguageList(0, nextIndex) + } + subscribeButton(false) + // invalidate if it's the last source + val invalidate = nextIndex == mangaReadSources.names.size - 1 + fragment.loadChapters(nextIndex, invalidate) + } + } } else { binding.animeSourceContinue.visibility = View.GONE binding.animeSourceNotFound.visibility = View.GONE diff --git a/app/src/main/java/ani/dantotsu/others/Xpandable.kt b/app/src/main/java/ani/dantotsu/others/Xpandable.kt index 527380ef..c4025c58 100644 --- a/app/src/main/java/ani/dantotsu/others/Xpandable.kt +++ b/app/src/main/java/ani/dantotsu/others/Xpandable.kt @@ -13,6 +13,7 @@ class Xpandable @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : LinearLayout(context, attrs) { var expanded: Boolean = false + private var listener: OnChangeListener? = null init { context.withStyledAttributes(attrs, R.styleable.Xpandable) { @@ -37,7 +38,6 @@ class Xpandable @JvmOverloads constructor( super.onAttachedToWindow() } - private fun hideAll() { children.forEach { if (it != getChildAt(0)) { @@ -48,8 +48,10 @@ class Xpandable @JvmOverloads constructor( it.visibility = GONE }, 300) } - } + postDelayed({ + listener?.onRetract() + }, 300) } private fun showAll() { @@ -61,6 +63,19 @@ class Xpandable @JvmOverloads constructor( ObjectAnimator.ofFloat(it, "alpha", 0f, 1f).setDuration(200).start() } } + postDelayed({ + listener?.onExpand() + }, 300) + } + + @Suppress("unused") + fun setOnChangeListener(listener: OnChangeListener) { + this.listener = listener + } + + interface OnChangeListener { + fun onExpand() + fun onRetract() } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt index 0a7b7d9e..ff18527d 100644 --- a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt @@ -1,14 +1,17 @@ package ani.dantotsu.settings import android.app.AlertDialog -import android.content.Intent +import android.content.res.Resources +import android.graphics.Color import android.os.Build import android.os.Bundle +import android.util.TypedValue import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import androidx.activity.addCallback import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.res.ResourcesCompat import androidx.core.view.updateLayoutParams import androidx.core.widget.addTextChangedListener import ani.dantotsu.R @@ -16,6 +19,7 @@ import ani.dantotsu.databinding.ActivityPlayerSettingsBinding import ani.dantotsu.initActivity import ani.dantotsu.media.Media import ani.dantotsu.navBarHeight +import ani.dantotsu.others.Xpandable import ani.dantotsu.others.getSerialized import ani.dantotsu.parsers.Subtitle import ani.dantotsu.settings.saving.PrefManager @@ -24,7 +28,7 @@ import ani.dantotsu.snackString import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import ani.dantotsu.toast -import com.google.android.material.snackbar.Snackbar +import com.google.android.material.slider.Slider.OnChangeListener import kotlin.math.roundToInt @@ -35,6 +39,9 @@ class PlayerSettingsActivity : AppCompatActivity() { var media: Media? = null var subtitle: Subtitle? = null + private val Int.toSP get() = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_SP, this.toFloat(), Resources.getSystem().displayMetrics + ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -273,66 +280,33 @@ class PlayerSettingsActivity : AppCompatActivity() { dialog.window?.setDimAmount(0.8f) } - fun restartApp() { - Snackbar.make( - binding.root, - R.string.restart_app, Snackbar.LENGTH_SHORT - ).apply { - val mainIntent = - Intent.makeRestartActivityTask( - context.packageManager.getLaunchIntentForPackage( - context.packageName - )!!.component - ) - setAction("Do it!") { - context.startActivity(mainIntent) - Runtime.getRuntime().exit(0) - } - show() - } - } - - fun toggleButton(button: android.widget.Button, toggle: Boolean) { - button.isClickable = toggle - button.alpha = when (toggle) { - true -> 1f - false -> 0.5f - } - } - fun toggleSubOptions(isChecked: Boolean) { - toggleButton(binding.videoSubColorPrimary, isChecked) - toggleButton(binding.videoSubColorSecondary, isChecked) - toggleButton(binding.videoSubOutline, isChecked) - toggleButton(binding.videoSubFont, isChecked) - binding.subtitleFontSizeCard.isEnabled = isChecked - binding.subtitleFontSizeCard.isClickable = isChecked - binding.subtitleFontSizeCard.alpha = when (isChecked) { - true -> 1f - false -> 0.5f - } - binding.subtitleFontSize.isEnabled = isChecked - binding.subtitleFontSize.isClickable = isChecked - binding.subtitleFontSize.alpha = when (isChecked) { - true -> 1f - false -> 0.5f - } - ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.isEnabled = - isChecked - ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.isClickable = - isChecked - ActivityPlayerSettingsBinding.bind(binding.root).subtitleFontSizeText.alpha = - when (isChecked) { + arrayOf( + binding.videoSubColorPrimary, + binding.videoSubColorSecondary, + binding.videoSubOutline, + binding.videoSubColorBackground, + binding.videoSubAlphaButton, + binding.videoSubColorWindow, + binding.videoSubFont, + binding.videoSubAlpha, + binding.subtitleFontSizeText, + binding.subtitleFontSize + ).forEach { + it.isEnabled = isChecked + it.isClickable = isChecked + it.alpha = when (isChecked) { true -> 1f false -> 0.5f } + } } binding.subSwitch.isChecked = PrefManager.getVal(PrefName.Subtitles) binding.subSwitch.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.Subtitles, isChecked) toggleSubOptions(isChecked) - restartApp() } + toggleSubOptions(binding.subSwitch.isChecked) val colorsPrimary = arrayOf( "Black", @@ -356,6 +330,7 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.PrimaryColor, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } @@ -382,6 +357,7 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.SecondaryColor, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } @@ -395,6 +371,7 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.Outline, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } @@ -421,6 +398,7 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.SubBackground, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } @@ -448,9 +426,19 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.SubWindow, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } + + binding.videoSubAlpha.value = PrefManager.getVal(PrefName.SubAlpha) + binding.videoSubAlpha.addOnChangeListener(OnChangeListener { _, value, fromUser -> + if (fromUser) { + PrefManager.setVal(PrefName.SubAlpha, value) + updateSubPreview() + } + }) + val fonts = arrayOf( "Poppins Semi Bold", "Poppins Bold", @@ -469,6 +457,7 @@ class PlayerSettingsActivity : AppCompatActivity() { ) { dialog, count -> PrefManager.setVal(PrefName.Font, count) dialog.dismiss() + updateSubPreview() }.show() dialog.window?.setDimAmount(0.8f) } @@ -483,8 +472,79 @@ class PlayerSettingsActivity : AppCompatActivity() { val size = binding.subtitleFontSize.text.toString().toIntOrNull() if (size != null) { PrefManager.setVal(PrefName.FontSize, size) + updateSubPreview() } } - toggleSubOptions(PrefManager.getVal(PrefName.Subtitles)) + binding.subtitleTest.setOnChangeListener(object: Xpandable.OnChangeListener { + override fun onExpand() { + updateSubPreview() + } + override fun onRetract() {} + }) + updateSubPreview() + } + + private fun updateSubPreview() { + binding.subtitleTestWindow.run { + alpha = PrefManager.getVal(PrefName.SubAlpha) + setBackgroundColor(when (PrefManager.getVal(PrefName.SubWindow)) { + 0 -> Color.TRANSPARENT + 1 -> Color.BLACK + 2 -> Color.DKGRAY + 3 -> Color.GRAY + 4 -> Color.LTGRAY + 5 -> Color.WHITE + 6 -> Color.RED + 7 -> Color.YELLOW + 8 -> Color.GREEN + 9 -> Color.CYAN + 10 -> Color.BLUE + 11 -> Color.MAGENTA + else -> Color.TRANSPARENT + }) + } + binding.subtitleTestText.run { + textSize = PrefManager.getVal(PrefName.FontSize).toSP + typeface = when (PrefManager.getVal(PrefName.Font)) { + 0 -> ResourcesCompat.getFont(this.context, R.font.poppins_semi_bold) + 1 -> ResourcesCompat.getFont(this.context, R.font.poppins_bold) + 2 -> ResourcesCompat.getFont(this.context, R.font.poppins) + 3 -> ResourcesCompat.getFont(this.context, R.font.poppins_thin) + 4 -> ResourcesCompat.getFont(this.context, R.font.century_gothic_regular) + 5 -> ResourcesCompat.getFont(this.context, R.font.levenim_mt_bold) + 6 -> ResourcesCompat.getFont(this.context, R.font.blocky) + else -> ResourcesCompat.getFont(this.context, R.font.poppins_semi_bold) + } + setTextColor(when (PrefManager.getVal(PrefName.PrimaryColor)) { + 0 -> Color.BLACK + 1 -> Color.DKGRAY + 2 -> Color.GRAY + 3 -> Color.LTGRAY + 4 -> Color.WHITE + 5 -> Color.RED + 6 -> Color.YELLOW + 7 -> Color.GREEN + 8 -> Color.CYAN + 9 -> Color.BLUE + 10 -> Color.MAGENTA + 11 -> Color.TRANSPARENT + else -> Color.WHITE + }) + setBackgroundColor(when (PrefManager.getVal(PrefName.SubBackground)) { + 0 -> Color.TRANSPARENT + 1 -> Color.BLACK + 2 -> Color.DKGRAY + 3 -> Color.GRAY + 4 -> Color.LTGRAY + 5 -> Color.WHITE + 6 -> Color.RED + 7 -> Color.YELLOW + 8 -> Color.GREEN + 9 -> Color.CYAN + 10 -> Color.BLUE + 11 -> Color.MAGENTA + else -> Color.TRANSPARENT + }) + } } } diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt index 12b0701d..a5b9a984 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt @@ -1,6 +1,5 @@ package ani.dantotsu.settings -import android.annotation.SuppressLint import android.app.AlarmManager import android.app.AlertDialog import android.content.Context @@ -33,7 +32,6 @@ import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.offline.DownloadService import ani.dantotsu.BuildConfig import ani.dantotsu.R -import ani.dantotsu.Refresh import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.api.NotificationType import ani.dantotsu.connections.discord.Discord @@ -66,6 +64,8 @@ import ani.dantotsu.openSettings import ani.dantotsu.others.AppUpdater import ani.dantotsu.others.CustomBottomDialog import ani.dantotsu.pop +import ani.dantotsu.reloadActivity +import ani.dantotsu.restartApp import ani.dantotsu.savePrefsToDownloads import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.settings.saving.PrefManager @@ -79,7 +79,6 @@ import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import ani.dantotsu.toast import ani.dantotsu.util.Logger -import com.google.android.material.snackbar.Snackbar import com.google.android.material.textfield.TextInputEditText import eltos.simpledialogfragment.SimpleDialog import eltos.simpledialogfragment.SimpleDialog.OnDialogResultListener.BUTTON_POSITIVE @@ -144,7 +143,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene return@passwordAlertDialog } if (PreferencePackager.unpack(decryptedJson)) - restartApp() + restartApp(binding.root) } else { toast(getString(R.string.password_cannot_be_empty)) } @@ -152,7 +151,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene } else if (name.endsWith(".ani")) { val decryptedJson = jsonString.toString(Charsets.UTF_8) if (PreferencePackager.unpack(decryptedJson)) - restartApp() + restartApp(binding.root) } else { toast(getString(R.string.unknown_file_type)) } @@ -316,7 +315,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene settingsUseMaterialYou.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.UseMaterialYou, isChecked) if (isChecked) settingsUseCustomTheme.isChecked = false - restartApp() + restartApp(binding.root) } settingsUseCustomTheme.isChecked = @@ -327,20 +326,20 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene settingsUseMaterialYou.isChecked = false } - restartApp() + restartApp(binding.root) } settingsUseSourceTheme.isChecked = PrefManager.getVal(PrefName.UseSourceTheme) settingsUseSourceTheme.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.UseSourceTheme, isChecked) - restartApp() + restartApp(binding.root) } settingsUseOLED.isChecked = PrefManager.getVal(PrefName.UseOLED) settingsUseOLED.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.UseOLED, isChecked) - restartApp() + restartApp(binding.root) } val themeString: String = PrefManager.getVal(PrefName.Theme) @@ -359,17 +358,15 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene PrefManager.setVal(PrefName.Theme, ThemeManager.Companion.Theme.entries[i].theme) //ActivityHelper.shouldRefreshMainActivity = true themeSwitcher.clearFocus() - restartApp() - + restartApp(binding.root) } - customTheme.setOnClickListener { val originalColor: Int = PrefManager.getVal(PrefName.CustomThemeInt) class CustomColorDialog : SimpleColorDialog() { //idk where to put it override fun onPositiveButtonClick() { - restartApp() + restartApp(binding.root) super.onPositiveButtonClick() } } @@ -398,10 +395,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene previous = current current.alpha = 1f PrefManager.setVal(PrefName.DarkMode, mode) - Refresh.all() - finish() - startActivity(Intent(this@SettingsActivity, SettingsActivity::class.java)) - initActivity(this@SettingsActivity) + reloadActivity() } settingsUiAuto.setOnClickListener { @@ -688,7 +682,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene settingsExtensionDns.setOnItemClickListener { _, _, i, _ -> PrefManager.setVal(PrefName.DohProvider, i) settingsExtensionDns.clearFocus() - restartApp() + restartApp(binding.root) } settingsDownloadInSd.isChecked = PrefManager.getVal(PrefName.SdDl) @@ -710,6 +704,11 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene PrefManager.setVal(PrefName.ContinueMedia, isChecked) } + settingsSearchSources.isChecked = PrefManager.getVal(PrefName.SearchSources) + settingsSearchSources.setOnCheckedChangeListener { _, isChecked -> + PrefManager.setVal(PrefName.SearchSources, isChecked) + } + settingsRecentlyListOnly.isChecked = PrefManager.getVal(PrefName.RecentlyListOnly) settingsRecentlyListOnly.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.RecentlyListOnly, isChecked) @@ -968,7 +967,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene settingsLogToFile.isChecked = PrefManager.getVal(PrefName.LogToFile) settingsLogToFile.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.LogToFile, isChecked) - restartApp() + restartApp(binding.root) } settingsShareLog.setOnClickListener { @@ -1050,25 +1049,6 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene return true } - private fun restartApp() { - Snackbar.make( - binding.root, - R.string.restart_app, Snackbar.LENGTH_SHORT - ).apply { - val mainIntent = - Intent.makeRestartActivityTask( - context.packageManager.getLaunchIntentForPackage( - context.packageName - )!!.component - ) - setAction(getString(R.string.do_it)) { - context.startActivity(mainIntent) - Runtime.getRuntime().exit(0) - } - show() - } - } - private fun passwordAlertDialog(isExporting: Boolean, callback: (CharArray?) -> Unit) { val password = CharArray(16).apply { fill('0') } diff --git a/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt index 3dedb3c2..f2a96778 100644 --- a/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/UserInterfaceSettingsActivity.kt @@ -10,6 +10,7 @@ import ani.dantotsu.R import ani.dantotsu.databinding.ActivityUserInterfaceSettingsBinding import ani.dantotsu.initActivity import ani.dantotsu.navBarHeight +import ani.dantotsu.restartApp import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.statusBarHeight @@ -49,7 +50,7 @@ class UserInterfaceSettingsActivity : AppCompatActivity() { } setPositiveButton("Done") { _, _ -> PrefManager.setVal(PrefName.HomeLayoutShow, set) - restartApp() + restartApp(binding.root) } }.show() dialog.window?.setDimAmount(0.8f) @@ -58,24 +59,24 @@ class UserInterfaceSettingsActivity : AppCompatActivity() { binding.uiSettingsSmallView.isChecked = PrefManager.getVal(PrefName.SmallView) binding.uiSettingsSmallView.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.SmallView, isChecked) - restartApp() + restartApp(binding.root) } binding.uiSettingsImmersive.isChecked = PrefManager.getVal(PrefName.ImmersiveMode) binding.uiSettingsImmersive.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.ImmersiveMode, isChecked) - restartApp() + restartApp(binding.root) } binding.uiSettingsBannerAnimation.isChecked = PrefManager.getVal(PrefName.BannerAnimations) binding.uiSettingsBannerAnimation.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.BannerAnimations, isChecked) - restartApp() + restartApp(binding.root) } binding.uiSettingsLayoutAnimation.isChecked = PrefManager.getVal(PrefName.LayoutAnimations) binding.uiSettingsLayoutAnimation.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.LayoutAnimations, isChecked) - restartApp() + restartApp(binding.root) } val map = mapOf( @@ -94,41 +95,22 @@ class UserInterfaceSettingsActivity : AppCompatActivity() { mapReverse[PrefManager.getVal(PrefName.AnimationSpeed)] ?: 1f binding.uiSettingsAnimationSpeed.addOnChangeListener { _, value, _ -> PrefManager.setVal(PrefName.AnimationSpeed, map[value] ?: 1f) - restartApp() + restartApp(binding.root) } binding.uiSettingsBlurBanners.isChecked = PrefManager.getVal(PrefName.BlurBanners) binding.uiSettingsBlurBanners.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.BlurBanners, isChecked) - restartApp() + restartApp(binding.root) } binding.uiSettingsBlurRadius.value = (PrefManager.getVal(PrefName.BlurRadius) as Float) binding.uiSettingsBlurRadius.addOnChangeListener { _, value, _ -> PrefManager.setVal(PrefName.BlurRadius, value) - restartApp() + restartApp(binding.root) } binding.uiSettingsBlurSampling.value = (PrefManager.getVal(PrefName.BlurSampling) as Float) binding.uiSettingsBlurSampling.addOnChangeListener { _, value, _ -> PrefManager.setVal(PrefName.BlurSampling, value) - restartApp() - } - } - - private fun restartApp() { - Snackbar.make( - binding.root, - R.string.restart_app, Snackbar.LENGTH_SHORT - ).apply { - val mainIntent = - Intent.makeRestartActivityTask( - context.packageManager.getLaunchIntentForPackage( - context.packageName - )!!.component - ) - setAction("Do it!") { - context.startActivity(mainIntent) - Runtime.getRuntime().exit(0) - } - show() + restartApp(binding.root) } } } diff --git a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt index 5149c031..28fb7a9a 100644 --- a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt +++ b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt @@ -15,6 +15,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files NSFWExtension(Pref(Location.General, Boolean::class, true)), SdDl(Pref(Location.General, Boolean::class, false)), ContinueMedia(Pref(Location.General, Boolean::class, true)), + SearchSources(Pref(Location.General, Boolean::class, true)), RecentlyListOnly(Pref(Location.General, Boolean::class, false)), SettingsPreferDub(Pref(Location.General, Boolean::class, false)), SubscriptionCheckingNotifications(Pref(Location.General, Boolean::class, true)), @@ -86,6 +87,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files Outline(Pref(Location.Player, Int::class, 0)), SubBackground(Pref(Location.Player, Int::class, 0)), SubWindow(Pref(Location.Player, Int::class, 0)), + SubAlpha(Pref(Location.Player, Float::class, 1f)), Font(Pref(Location.Player, Int::class, 0)), FontSize(Pref(Location.Player, Int::class, 20)), Locale(Pref(Location.Player, Int::class, 2)), diff --git a/app/src/main/res/drawable/ic_round_search_sources_24.xml b/app/src/main/res/drawable/ic_round_search_sources_24.xml new file mode 100644 index 00000000..48e31b13 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_search_sources_24.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_player_settings.xml b/app/src/main/res/layout/activity_player_settings.xml index 6ae585a4..729a4788 100644 --- a/app/src/main/res/layout/activity_player_settings.xml +++ b/app/src/main/res/layout/activity_player_settings.xml @@ -166,6 +166,44 @@ app:drawableEndCompat="@drawable/ic_round_arrow_drop_down_24" tools:ignore="TextContrastCheck" /> + + + + + + + + + + + + +