diff --git a/app/src/main/java/ani/dantotsu/MainActivity.kt b/app/src/main/java/ani/dantotsu/MainActivity.kt index e9de20dd..f534e577 100644 --- a/app/src/main/java/ani/dantotsu/MainActivity.kt +++ b/app/src/main/java/ani/dantotsu/MainActivity.kt @@ -24,7 +24,9 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.animation.doOnEnd import androidx.core.content.ContextCompat import androidx.core.view.doOnAttach +import androidx.core.view.marginTop import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle @@ -45,6 +47,7 @@ import ani.dantotsu.home.NoInternet import ani.dantotsu.media.MediaDetailsActivity import ani.dantotsu.others.CustomBottomDialog import ani.dantotsu.others.LangSet +import ani.dantotsu.others.SharedPreferenceBooleanLiveData import ani.dantotsu.settings.UserInterfaceSettings import ani.dantotsu.subcriptions.Subscription.Companion.startSubscription import ani.dantotsu.themes.ThemeManager @@ -61,6 +64,7 @@ import java.io.Serializable class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding + private lateinit var incognitoLiveData: SharedPreferenceBooleanLiveData private val scope = lifecycleScope private var load = false @@ -88,13 +92,48 @@ class MainActivity : AppCompatActivity() { backgroundDrawable.setColor(semiTransparentColor) _bottomBar.background = backgroundDrawable } - val colorOverflow = this.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) - .getBoolean("colorOverflow", false) + val sharedPreferences = getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) + val colorOverflow = sharedPreferences.getBoolean("colorOverflow", false) if (!colorOverflow) { _bottomBar.background = ContextCompat.getDrawable(this, R.drawable.bottom_nav_gray) } + val layoutParams = binding.incognitoTextView.layoutParams as ViewGroup.MarginLayoutParams + layoutParams.topMargin = 11 * statusBarHeight / 12 + binding.incognitoTextView.layoutParams = layoutParams + incognitoLiveData = SharedPreferenceBooleanLiveData( + sharedPreferences, + "incognito", + false + ) + incognitoLiveData.observe(this) { + if (it) { + val slideDownAnim = ObjectAnimator.ofFloat( + binding.incognitoTextView, + View.TRANSLATION_Y, + -(binding.incognitoTextView.height.toFloat() + statusBarHeight), + 0f + ) + slideDownAnim.duration = 200 + slideDownAnim.start() + binding.incognitoTextView.visibility = View.VISIBLE + } else { + val slideUpAnim = ObjectAnimator.ofFloat( + binding.incognitoTextView, + View.TRANSLATION_Y, + 0f, + -(binding.incognitoTextView.height.toFloat() + statusBarHeight) + ) + slideUpAnim.duration = 200 + slideUpAnim.start() + //wait for animation to finish + Handler(Looper.getMainLooper()).postDelayed( + { binding.incognitoTextView.visibility = View.GONE }, + 200 + ) + } + } incognitoNotification(this) var doubleBackToExitPressedOnce = false diff --git a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt index 78644a3b..8d0cd6ab 100644 --- a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt @@ -279,7 +279,6 @@ 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() } diff --git a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt index 34d26323..65b69860 100644 --- a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt @@ -93,7 +93,6 @@ class AnimePageAdapter : RecyclerView.Adapter("ui_settings") ?: UserInterfaceSettings() - setIncognito() fun load() { if (activity != null && _binding != null) lifecycleScope.launch(Dispatchers.Main) { binding.homeUserName.text = Anilist.username @@ -359,30 +358,8 @@ class HomeFragment : Fragment() { } } - private fun setIncognito() { - val incognito = currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) - ?.getBoolean("incognito", false) ?: false - if (incognito) { - val uiSettings = - loadData("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 - } - } - override fun onResume() { if (!model.loaded) Refresh.activity[1]!!.postValue(true) - setIncognito() 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 ff414767..d4b5095e 100644 --- a/app/src/main/java/ani/dantotsu/home/MangaFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/MangaFragment.kt @@ -254,7 +254,6 @@ class MangaFragment : Fragment() { 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() } diff --git a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt index 78f1dc33..6830ab9f 100644 --- a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt +++ b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt @@ -98,7 +98,6 @@ class MangaPageAdapter : RecyclerView.Adapter( + val sharedPrefs: SharedPreferences, + val key: String, + val defValue: T +) : LiveData() { + + private val preferenceChangeListener = + SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key -> + if (key == this.key) { + value = getValueFromPreferences(key, defValue) + } + } + + abstract fun getValueFromPreferences(key: String, defValue: T): T + + override fun onActive() { + super.onActive() + value = getValueFromPreferences(key, defValue) + sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener) + } + + override fun onInactive() { + sharedPrefs.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener) + super.onInactive() + } +} + +class SharedPreferenceIntLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Int) : + SharedPreferenceLiveData(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: Int): Int = + sharedPrefs.getInt(key, defValue) +} + +class SharedPreferenceStringLiveData( + sharedPrefs: SharedPreferences, + key: String, + defValue: String +) : + SharedPreferenceLiveData(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: String): String = + sharedPrefs.getString(key, defValue).toString() +} + +class SharedPreferenceBooleanLiveData( + sharedPrefs: SharedPreferences, + key: String, + defValue: Boolean +) : + SharedPreferenceLiveData(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: Boolean): Boolean = + sharedPrefs.getBoolean(key, defValue) +} + +class SharedPreferenceFloatLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Float) : + SharedPreferenceLiveData(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: Float): Float = + sharedPrefs.getFloat(key, defValue) +} + +class SharedPreferenceLongLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Long) : + SharedPreferenceLiveData(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: Long): Long = + sharedPrefs.getLong(key, defValue) +} + +class SharedPreferenceStringSetLiveData( + sharedPrefs: SharedPreferences, + key: String, + defValue: Set +) : + SharedPreferenceLiveData>(sharedPrefs, key, defValue) { + override fun getValueFromPreferences(key: String, defValue: Set): Set = + sharedPrefs.getStringSet(key, defValue)?.toSet() ?: defValue +} + +fun SharedPreferences.intLiveData(key: String, defValue: Int): SharedPreferenceLiveData { + return SharedPreferenceIntLiveData(this, key, defValue) +} + +fun SharedPreferences.stringLiveData( + key: String, + defValue: String +): SharedPreferenceLiveData { + return SharedPreferenceStringLiveData(this, key, defValue) +} + +fun SharedPreferences.booleanLiveData( + key: String, + defValue: Boolean +): SharedPreferenceLiveData { + return SharedPreferenceBooleanLiveData(this, key, defValue) +} + +fun SharedPreferences.floatLiveData(key: String, defValue: Float): SharedPreferenceLiveData { + return SharedPreferenceFloatLiveData(this, key, defValue) +} + +fun SharedPreferences.longLiveData(key: String, defValue: Long): SharedPreferenceLiveData { + return SharedPreferenceLongLiveData(this, key, defValue) +} + +fun SharedPreferences.stringSetLiveData( + key: String, + defValue: Set +): SharedPreferenceLiveData> { + return SharedPreferenceStringSetLiveData(this, key, defValue) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_top_incognito.xml b/app/src/main/res/drawable/rounded_top_incognito.xml new file mode 100644 index 00000000..eb08a05d --- /dev/null +++ b/app/src/main/res/drawable/rounded_top_incognito.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b73e562b..594c7584 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,6 +1,5 @@ - - + android:layout_height="match_parent" + android:orientation="vertical"> + + + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 12d03586..5d695368 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -17,17 +17,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> - + diff --git a/app/src/main/res/layout/item_anime_page.xml b/app/src/main/res/layout/item_anime_page.xml index 0657b349..77dd43f0 100644 --- a/app/src/main/res/layout/item_anime_page.xml +++ b/app/src/main/res/layout/item_anime_page.xml @@ -9,18 +9,6 @@ android:layout_marginEnd="-16dp" android:orientation="vertical"> - -