mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Side Nav Override
Taken from tachiyomiorg/tachiyomi@0df23ab878 This only overrides the side nav layout via changing the screen width, not smallest screen width, so other parts of tablet ui are unaffected, therefore it is not named the same as upstream, nor placed in the same settings section Co-Authored-By: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com>
This commit is contained in:
parent
cceb416c34
commit
4376a4685b
8 changed files with 67 additions and 3 deletions
|
@ -233,6 +233,8 @@ object PreferenceKeys {
|
|||
|
||||
const val incognitoMode = "incognito_mode"
|
||||
|
||||
const val sideNavMode = "side_nav_mode"
|
||||
|
||||
const val shouldAutoUpdate = "should_auto_update"
|
||||
|
||||
const val autoUpdateExtensions = "auto_update_extensions"
|
||||
|
|
|
@ -433,6 +433,8 @@ class PreferencesHelper(val context: Context) {
|
|||
|
||||
fun hasPromptedBeforeUpdateAll() = flowPrefs.getBoolean("has_prompted_update_all", false)
|
||||
|
||||
fun sideNavMode() = flowPrefs.getInt(Keys.sideNavMode, 0)
|
||||
|
||||
fun shouldAutoUpdate() = prefs.getInt(Keys.shouldAutoUpdate, AutoUpdaterJob.ONLY_ON_UNMETERED)
|
||||
|
||||
fun autoUpdateExtensions() = prefs.getInt(Keys.autoUpdateExtensions, AutoUpdaterJob.ONLY_ON_UNMETERED)
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.animation.AnimatorSet
|
|||
import android.animation.ValueAnimator
|
||||
import android.app.Dialog
|
||||
import android.app.assist.AssistContent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
|
@ -26,7 +27,6 @@ import android.webkit.WebView
|
|||
import androidx.annotation.IdRes
|
||||
import androidx.appcompat.graphics.drawable.DrawerArrowDrawable
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.animation.addListener
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.net.toUri
|
||||
|
@ -80,6 +80,7 @@ import eu.kanade.tachiyomi.util.system.getResourceColor
|
|||
import eu.kanade.tachiyomi.util.system.hasSideNavBar
|
||||
import eu.kanade.tachiyomi.util.system.isBottomTappable
|
||||
import eu.kanade.tachiyomi.util.system.launchUI
|
||||
import eu.kanade.tachiyomi.util.system.prepareSideNavContext
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.util.view.blurBehindWindow
|
||||
import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets
|
||||
|
@ -138,6 +139,10 @@ open class MainActivity : BaseActivity<MainActivityBinding>(), DownloadServiceLi
|
|||
extraViewForUndo = extraViewToCheck
|
||||
}
|
||||
|
||||
override fun attachBaseContext(newBase: Context?) {
|
||||
super.attachBaseContext(newBase?.prepareSideNavContext())
|
||||
}
|
||||
|
||||
val toolbarHeight: Int
|
||||
get() = max(binding.toolbar.height, binding.cardFrame.height)
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ import coil.request.ImageRequest
|
|||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import com.afollestad.materialdialogs.checkbox.checkBoxPrompt
|
||||
import com.afollestad.materialdialogs.checkbox.isCheckPromptChecked
|
||||
import com.afollestad.materialdialogs.utils.MDUtil.isLandscape
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.google.android.material.snackbar.BaseTransientBottomBar
|
||||
|
@ -205,8 +206,7 @@ class MangaDetailsController :
|
|||
|
||||
/** Check if device is tablet, and use a second recycler to hold the details header if so */
|
||||
private fun setTabletMode(view: View) {
|
||||
isTablet = view.context.isTablet() &&
|
||||
view.context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
isTablet = view.context.isTablet() && view.context.isLandscape()
|
||||
binding.tabletOverlay.isVisible = isTablet
|
||||
binding.tabletRecycler.isVisible = isTablet
|
||||
binding.tabletDivider.isVisible = isTablet
|
||||
|
|
|
@ -8,6 +8,7 @@ import androidx.preference.PreferenceScreen
|
|||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
|
||||
import eu.kanade.tachiyomi.util.system.SideNavMode
|
||||
import eu.kanade.tachiyomi.util.system.appDelegateNightMode
|
||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||
import eu.kanade.tachiyomi.util.system.getPrefTheme
|
||||
|
@ -106,6 +107,22 @@ class SettingsAppearanceController : SettingsController() {
|
|||
context.resources.displayMetrics.heightPixels
|
||||
) >= 720.dpToPx
|
||||
}
|
||||
|
||||
intListPreference(activity) {
|
||||
key = Keys.sideNavMode
|
||||
titleRes = R.string.use_side_navigation
|
||||
val values = SideNavMode.values()
|
||||
entriesRes = values.map { it.stringRes }.toTypedArray()
|
||||
entryValues = values.map { it.prefValue }
|
||||
defaultValue = SideNavMode.DEFAULT.prefValue
|
||||
|
||||
onChange {
|
||||
activity?.recreate()
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
infoPreference(R.string.by_default_side_nav_info)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package eu.kanade.tachiyomi.util.system
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import eu.kanade.tachiyomi.R
|
||||
|
||||
enum class SideNavMode(val prefValue: Int, @StringRes val stringRes: Int) {
|
||||
DEFAULT(0, R.string.default_behavior),
|
||||
NEVER(1, R.string.never),
|
||||
ALWAYS(2, R.string.always),
|
||||
}
|
|
@ -33,9 +33,14 @@ import androidx.core.content.ContextCompat
|
|||
import androidx.core.net.toUri
|
||||
import com.nononsenseapps.filepicker.FilePickerActivity
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.widget.CustomLayoutPickerActivity
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.io.File
|
||||
|
||||
private const val TABLET_UI_MIN_SCREEN_WIDTH_DP = 720
|
||||
|
||||
/**
|
||||
* Display a toast in this context.
|
||||
*
|
||||
|
@ -170,6 +175,26 @@ fun Context.notificationBuilder(
|
|||
return builder
|
||||
}
|
||||
|
||||
fun Context.prepareSideNavContext(): Context {
|
||||
val configuration = resources.configuration
|
||||
val expected = when (Injekt.get<PreferencesHelper>().sideNavMode().get()) {
|
||||
SideNavMode.ALWAYS.prefValue -> true
|
||||
SideNavMode.NEVER.prefValue -> false
|
||||
else -> null
|
||||
}
|
||||
if (expected != null) {
|
||||
val overrideConf = Configuration()
|
||||
overrideConf.setTo(configuration)
|
||||
overrideConf.screenWidthDp = if (expected) {
|
||||
overrideConf.screenWidthDp.coerceAtLeast(TABLET_UI_MIN_SCREEN_WIDTH_DP)
|
||||
} else {
|
||||
overrideConf.screenWidthDp.coerceAtMost(TABLET_UI_MIN_SCREEN_WIDTH_DP - 1)
|
||||
}
|
||||
return createConfigurationContext(overrideConf)
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to acquire a partial wake lock.
|
||||
*/
|
||||
|
|
|
@ -674,6 +674,9 @@
|
|||
<string name="secure_screen">Secure screen</string>
|
||||
<string name="hide_bottom_nav">Auto-hide bottom navigation</string>
|
||||
<string name="side_nav_icon_alignment">Side navigation icon alignment</string>
|
||||
<string name="use_side_navigation">Use side navigation</string>
|
||||
<string name="default_behavior">Default behavior</string>
|
||||
<string name="by_default_side_nav_info">By default, side navigation shows up on landscape on certain phones and small tablets, and always for larger tablets</string>
|
||||
<string name="follow_system_theme">Follow system theme</string>
|
||||
<string name="pure_black_dark_mode">Pure black dark mode</string>
|
||||
<string name="hides_on_scroll">Hides when scrolling</string>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue