From 42c3b42c054eb27865333b837c5d90940dd2c0b6 Mon Sep 17 00:00:00 2001 From: Finnley Somdahl <87634197+rebelonion@users.noreply.github.com> Date: Wed, 27 Dec 2023 10:30:50 -0600 Subject: [PATCH] incognito does not require app restart --- .../java/ani/dantotsu/home/AnimeFragment.kt | 71 +++++++++++-------- .../ani/dantotsu/home/AnimePageAdapter.kt | 13 ++++ .../java/ani/dantotsu/home/HomeFragment.kt | 18 +++++ .../java/ani/dantotsu/home/MangaFragment.kt | 59 ++++++++------- .../ani/dantotsu/home/MangaPageAdapter.kt | 13 ++++ .../ani/dantotsu/settings/SettingsActivity.kt | 1 - app/src/main/res/layout/fragment_home.xml | 2 +- app/src/main/res/layout/item_anime_page.xml | 2 +- app/src/main/res/layout/item_manga_page.xml | 2 +- 9 files changed, 121 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt index 1a08934d..8ecbe0a1 100644 --- a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt @@ -2,6 +2,7 @@ package ani.dantotsu.home import android.animation.ObjectAnimator import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.os.Build import android.os.Bundle @@ -26,6 +27,7 @@ import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.AnilistAnimeViewModel import ani.dantotsu.connections.anilist.SearchResults import ani.dantotsu.connections.anilist.getUserId +import ani.dantotsu.currContext import ani.dantotsu.databinding.FragmentAnimeBinding import ani.dantotsu.loadData import ani.dantotsu.media.MediaAdaptor @@ -47,16 +49,17 @@ import kotlin.math.min class AnimeFragment : Fragment() { private var _binding: FragmentAnimeBinding? = null private val binding get() = _binding!! + private lateinit var animePageAdapter: AnimePageAdapter private var uiSettings: UserInterfaceSettings = - loadData("ui_settings") ?: UserInterfaceSettings() + loadData("ui_settings") ?: UserInterfaceSettings() val model: AnilistAnimeViewModel by activityViewModels() override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? ): View { _binding = FragmentAnimeBinding.inflate(inflater, container, false) return binding.root @@ -78,11 +81,11 @@ class AnimeFragment : Fragment() { if (displayCutout != null) { if (displayCutout.boundingRects.size > 0) { height = max( - statusBarHeight, - min( - displayCutout.boundingRects[0].width(), - displayCutout.boundingRects[0].height() - ) + statusBarHeight, + min( + displayCutout.boundingRects[0].width(), + displayCutout.boundingRects[0].height() + ) ) } } @@ -95,18 +98,18 @@ class AnimeFragment : Fragment() { binding.animePageRecyclerView.updatePaddingRelative(bottom = navBarHeight + 160f.px) - val animePageAdapter = AnimePageAdapter() + animePageAdapter = AnimePageAdapter() var loading = true if (model.notSet) { model.notSet = false model.searchResults = SearchResults( - "ANIME", - isAdult = false, - onList = false, - results = mutableListOf(), - hasNextPage = true, - sort = Anilist.sortBy[1] + "ANIME", + isAdult = false, + onList = false, + results = mutableListOf(), + hasNextPage = true, + sort = Anilist.sortBy[1] ) } val popularAdaptor = MediaAdaptor(1, model.searchResults.results, requireActivity()) @@ -174,7 +177,7 @@ class AnimeFragment : Fragment() { } binding.animePageRecyclerView.addOnScrollListener(object : - RecyclerView.OnScrollListener() { + RecyclerView.OnScrollListener() { override fun onScrolled(v: RecyclerView, dx: Int, dy: Int) { if (!v.canScrollVertically(1)) { if (model.searchResults.hasNextPage && model.searchResults.results.isNotEmpty() && !loading) { @@ -214,19 +217,19 @@ class AnimeFragment : Fragment() { model.getTrending().observe(viewLifecycleOwner) { if (it != null) { animePageAdapter.updateTrending( - MediaAdaptor( - if (uiSettings.smallView) 3 else 2, - it, - requireActivity(), - viewPager = animePageAdapter.trendingViewPager - ) + MediaAdaptor( + if (uiSettings.smallView) 3 else 2, + it, + requireActivity(), + viewPager = animePageAdapter.trendingViewPager + ) ) animePageAdapter.updateAvatar() } } } binding.animePageScrollTop.translationY = - -(navBarHeight + bottomBar.height + bottomBar.marginBottom).toFloat() + -(navBarHeight + bottomBar.height + bottomBar.marginBottom).toFloat() } } @@ -244,13 +247,13 @@ class AnimeFragment : Fragment() { animePageAdapter.onSeasonLongClick = { i -> val (season, year) = Anilist.currentSeasons[i] ContextCompat.startActivity( - requireContext(), - Intent(requireContext(), SearchActivity::class.java) - .putExtra("type", "ANIME") - .putExtra("season", season) - .putExtra("seasonYear", year.toString()) - .putExtra("search", true), - null + requireContext(), + Intent(requireContext(), SearchActivity::class.java) + .putExtra("type", "ANIME") + .putExtra("season", season) + .putExtra("seasonYear", year.toString()) + .putExtra("search", true), + null ) true } @@ -277,6 +280,12 @@ class AnimeFragment : Fragment() { override fun onResume() { if (!model.loaded) Refresh.activity[this.hashCode()]!!.postValue(true) + if (animePageAdapter.trendingViewPager != null) { + animePageAdapter.setIncognito() + binding.root.requestApplyInsets() + binding.root.requestLayout() + } + super.onResume() } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt index 19b1002d..43c1bc3e 100644 --- a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt @@ -157,6 +157,19 @@ class AnimePageAdapter : RecyclerView.Adapter("ui_settings") ?: UserInterfaceSettings() + binding.incognitoTextView.visibility = View.VISIBLE + if (!uiSettings.immersiveMode) { + binding.root.fitsSystemWindows = true + //holy deprecation + binding.root.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + binding.root.requestApplyInsets() + binding.root.requestLayout() + } + } else { + binding.incognitoTextView.visibility = View.GONE + } super.onResume() } } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/home/MangaFragment.kt b/app/src/main/java/ani/dantotsu/home/MangaFragment.kt index 14870b7f..55ac8b2f 100644 --- a/app/src/main/java/ani/dantotsu/home/MangaFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/MangaFragment.kt @@ -2,6 +2,7 @@ package ani.dantotsu.home import android.animation.ObjectAnimator import android.annotation.SuppressLint +import android.content.Context import android.os.Build import android.os.Bundle import android.view.LayoutInflater @@ -24,6 +25,7 @@ import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.AnilistMangaViewModel import ani.dantotsu.connections.anilist.SearchResults import ani.dantotsu.connections.anilist.getUserId +import ani.dantotsu.currContext import ani.dantotsu.databinding.FragmentMangaBinding import ani.dantotsu.loadData import ani.dantotsu.media.MediaAdaptor @@ -43,16 +45,17 @@ import kotlin.math.min class MangaFragment : Fragment() { private var _binding: FragmentMangaBinding? = null private val binding get() = _binding!! + private lateinit var mangaPageAdapter: MangaPageAdapter private var uiSettings: UserInterfaceSettings = - loadData("ui_settings") ?: UserInterfaceSettings() + loadData("ui_settings") ?: UserInterfaceSettings() val model: AnilistMangaViewModel by activityViewModels() override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? ): View { _binding = FragmentMangaBinding.inflate(inflater, container, false) return binding.root @@ -73,11 +76,11 @@ class MangaFragment : Fragment() { if (displayCutout != null) { if (displayCutout.boundingRects.size > 0) { height = max( - statusBarHeight, - min( - displayCutout.boundingRects[0].width(), - displayCutout.boundingRects[0].height() - ) + statusBarHeight, + min( + displayCutout.boundingRects[0].width(), + displayCutout.boundingRects[0].height() + ) ) } } @@ -90,23 +93,23 @@ class MangaFragment : Fragment() { binding.mangaPageRecyclerView.updatePaddingRelative(bottom = navBarHeight + 160f.px) - val mangaPageAdapter = MangaPageAdapter() + mangaPageAdapter = MangaPageAdapter() var loading = true if (model.notSet) { model.notSet = false model.searchResults = SearchResults( - "MANGA", - isAdult = false, - onList = false, - results = arrayListOf(), - hasNextPage = true, - sort = Anilist.sortBy[1] + "MANGA", + isAdult = false, + onList = false, + results = arrayListOf(), + hasNextPage = true, + sort = Anilist.sortBy[1] ) } val popularAdaptor = MediaAdaptor(1, model.searchResults.results, requireActivity()) val progressAdaptor = ProgressAdapter(searched = model.searched) binding.mangaPageRecyclerView.adapter = - ConcatAdapter(mangaPageAdapter, popularAdaptor, progressAdaptor) + ConcatAdapter(mangaPageAdapter, popularAdaptor, progressAdaptor) val layout = LinearLayoutManager(requireContext()) binding.mangaPageRecyclerView.layoutManager = layout @@ -132,7 +135,7 @@ class MangaFragment : Fragment() { } binding.mangaPageRecyclerView.addOnScrollListener(object : - RecyclerView.OnScrollListener() { + RecyclerView.OnScrollListener() { override fun onScrolled(v: RecyclerView, dx: Int, dy: Int) { if (!v.canScrollVertically(1)) { if (model.searchResults.hasNextPage && model.searchResults.results.isNotEmpty() && !loading) { @@ -172,19 +175,19 @@ class MangaFragment : Fragment() { model.getTrending().observe(viewLifecycleOwner) { if (it != null) { mangaPageAdapter.updateTrending( - MediaAdaptor( - if (uiSettings.smallView) 3 else 2, - it, - requireActivity(), - viewPager = mangaPageAdapter.trendingViewPager - ) + MediaAdaptor( + if (uiSettings.smallView) 3 else 2, + it, + requireActivity(), + viewPager = mangaPageAdapter.trendingViewPager + ) ) mangaPageAdapter.updateAvatar() } } } binding.mangaPageScrollTop.translationY = - -(navBarHeight + bottomBar.height + bottomBar.marginBottom).toFloat() + -(navBarHeight + bottomBar.height + bottomBar.marginBottom).toFloat() } } @@ -251,6 +254,12 @@ class MangaFragment : Fragment() { override fun onResume() { if (!model.loaded) Refresh.activity[this.hashCode()]!!.postValue(true) + //make sure mangaPageAdapter is initialized + if (mangaPageAdapter.trendingViewPager != null) { + mangaPageAdapter.setIncognito() + binding.root.requestApplyInsets() + binding.root.requestLayout() + } super.onResume() } diff --git a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt index dc597a50..058dd3ca 100644 --- a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt @@ -150,6 +150,19 @@ class MangaPageAdapter : RecyclerView.Adapter getSharedPreferences("Dantotsu", Context.MODE_PRIVATE).edit() .putBoolean("incognito", isChecked).apply() - restartApp() } var previousStart: View = when (uiSettings.defaultStartUpTab) { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 4b738d12..12d03586 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -24,7 +24,7 @@ android:text="Incognito Mode" android:fontFamily="@font/poppins_bold" android:textSize="15sp" - android:textColor="#4f2dbd" + android:textColor="?attr/colorPrimary" android:layout_gravity="bottom|center_horizontal" android:padding="8dp" android:visibility="gone"/> diff --git a/app/src/main/res/layout/item_anime_page.xml b/app/src/main/res/layout/item_anime_page.xml index ef29558a..0657b349 100644 --- a/app/src/main/res/layout/item_anime_page.xml +++ b/app/src/main/res/layout/item_anime_page.xml @@ -16,7 +16,7 @@ android:text="Incognito Mode" android:fontFamily="@font/poppins_bold" android:textSize="15sp" - android:textColor="#4f2dbd" + android:textColor="?attr/colorPrimary" android:layout_gravity="bottom|center_horizontal" android:background="#00FFFFFF" android:padding="8dp" diff --git a/app/src/main/res/layout/item_manga_page.xml b/app/src/main/res/layout/item_manga_page.xml index c88c38f5..cda24cc5 100644 --- a/app/src/main/res/layout/item_manga_page.xml +++ b/app/src/main/res/layout/item_manga_page.xml @@ -16,7 +16,7 @@ android:text="Incognito Mode" android:fontFamily="@font/poppins_bold" android:textSize="15sp" - android:textColor="#4f2dbd" + android:textColor="?attr/colorPrimary" android:layout_gravity="bottom|center_horizontal" android:background="#00FFFFFF" android:padding="8dp"