diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt index 29b9ed0d01..63e3125f48 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt @@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.SecondaryDrawerController import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.library.ChangeMangaCategoriesDialog +import eu.kanade.tachiyomi.ui.library.HeightTopWindowInsetsListener import eu.kanade.tachiyomi.ui.main.doOnApplyWindowInsets import eu.kanade.tachiyomi.ui.main.updatePaddingRelative import eu.kanade.tachiyomi.ui.manga.MangaController @@ -154,9 +155,10 @@ open class BrowseCatalogueController(bundle: Bundle) : presenter.sourceFilters = newFilters navView.setFilters(presenter.filterItems) } - + val statusScrim = navView.findViewById(R.id.status_bar_scrim) as View + statusScrim.setOnApplyWindowInsetsListener(HeightTopWindowInsetsListener) navView.doOnApplyWindowInsets { v, insets, padding -> - v.updatePaddingRelative( + navView.recycler.updatePaddingRelative( bottom = padding.bottom + insets.systemWindowInsetBottom, top = padding.top + insets.systemWindowInsetTop ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 61b544f428..5eadbacf0a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -191,10 +191,16 @@ class LibraryController( is LibraryNavigationView.BadgeGroup -> onDownloadBadgeChanged() } } + + drawer.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + val statusScrim = view.findViewById(R.id.status_bar_scrim) as View + statusScrim.setOnApplyWindowInsetsListener(HeightTopWindowInsetsListener) view.doOnApplyWindowInsets { v, insets, padding -> - v.updatePaddingRelative( - bottom = padding.bottom + insets.systemWindowInsetBottom, - top = padding.top + insets.systemWindowInsetTop + view.recycler.updatePaddingRelative( + bottom = view.recycler.bottom + insets.systemWindowInsetBottom, + top = view.recycler.top + insets.systemWindowInsetTop ) } return view @@ -530,3 +536,15 @@ class LibraryController( } } + +object HeightTopWindowInsetsListener : View.OnApplyWindowInsetsListener { + override fun onApplyWindowInsets(v: View, insets: WindowInsets): WindowInsets { + val topInset = insets.systemWindowInsetTop + v.setPadding(0,topInset,0,0) + if (v.layoutParams.height != topInset) { + v.layoutParams.height = topInset + v.requestLayout() + } + return insets + } +} \ No newline at end of file diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 5381d33eeb..5f345e1fc8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -5,7 +5,9 @@ import android.app.SearchManager import android.content.Intent import android.content.res.Configuration import android.graphics.Color +import android.os.Build import android.os.Bundle +import android.support.annotation.NonNull import android.support.annotation.Px import android.support.annotation.RequiresApi import android.support.v4.view.GravityCompat @@ -120,6 +122,12 @@ class MainActivity : BaseActivity() { true } + nav_view.doOnApplyWindowInsets { v, insets, padding -> + v.updatePaddingRelative( + start = padding.left + insets.systemWindowInsetLeft + ) + } + val container: ViewGroup = findViewById(R.id.controller_container) val content: LinearLayout = findViewById(R.id.main_content) @@ -130,6 +138,10 @@ class MainActivity : BaseActivity() { View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION content.setOnApplyWindowInsetsListener(NoopWindowInsetsListener) + val currentNightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK + if (Build.VERSION.SDK_INT >= 26 && currentNightMode == Configuration.UI_MODE_NIGHT_NO) { + content.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + } router = Conductor.attachRouter(this, container, savedInstanceState) if (!router.hasRootController()) { @@ -319,16 +331,17 @@ object NoopWindowInsetsListener : View.OnApplyWindowInsetsListener { object NoopWindowInsetsListener2 : View.OnApplyWindowInsetsListener { override fun onApplyWindowInsets(v: View, insets: WindowInsets): WindowInsets { - v.setPadding(0,0,0,insets.systemWindowInsetBottom) + v.setPadding(0,0,0,insets + .systemWindowInsetBottom) insets.consumeSystemWindowInsets() return insets } } -fun View.doOnApplyWindowInsets(f: (View, WindowInsetsCompat, ViewPaddingState) -> Unit) { +fun View.doOnApplyWindowInsets(f: (View, WindowInsets, ViewPaddingState) -> Unit) { // Create a snapshot of the view's padding state val paddingState = createStateForView(this) - ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets -> + setOnApplyWindowInsetsListener { v, insets -> f(v, insets, paddingState) insets } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt index 602fcaec9d..334988a550 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt @@ -98,7 +98,6 @@ class ChaptersController : NucleusController(), bottomMargin = insets.systemWindowInsetBottom } } - //fast_scroller.setOnApplyWindowInsetsListener(NoopWindowInsetsListener2) swipe_refresh.refreshes().subscribeUntilDestroy { fetchChaptersFromSource() } fab.clicks().subscribeUntilDestroy { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 82c7ffbe5a..1d5ef8f265 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -21,6 +21,9 @@ import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.ui.base.activity.BaseRxActivity +import eu.kanade.tachiyomi.ui.main.doOnApplyWindowInsets +import eu.kanade.tachiyomi.ui.main.updateLayoutParams +import eu.kanade.tachiyomi.ui.main.updatePaddingRelative import eu.kanade.tachiyomi.ui.reader.ReaderPresenter.SetAsCoverResult.AddToLibraryFirst import eu.kanade.tachiyomi.ui.reader.ReaderPresenter.SetAsCoverResult.Error import eu.kanade.tachiyomi.ui.reader.ReaderPresenter.SetAsCoverResult.Success @@ -136,6 +139,16 @@ class ReaderActivity : BaseRxActivity() { config = ReaderConfig() initializeMenu() + val container: ViewGroup = findViewById(R.id.reader_container) + val readerBHeight = reader_menu_bottom.layoutParams.height + container.doOnApplyWindowInsets { _, insets, padding -> + val bottomInset = insets.mandatorySystemGestureInsets.bottom - insets + .systemWindowInsetBottom + reader_menu_bottom.updateLayoutParams { + height = readerBHeight + bottomInset + } + reader_menu_bottom.updatePaddingRelative(bottom = padding.bottom + bottomInset) + } } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt index af9b041e29..5e3c94a57a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ViewExtensions.kt @@ -2,14 +2,26 @@ package eu.kanade.tachiyomi.util +import android.content.Context import android.graphics.Color import android.graphics.Point import android.graphics.Typeface +import android.os.Build import android.support.design.widget.Snackbar +import android.support.v4.view.ViewCompat +import android.support.v4.view.WindowInsetsCompat import android.view.View +import android.view.ViewGroup +import android.view.Window +import android.view.WindowInsets import android.widget.TextView import com.amulyakhare.textdrawable.TextDrawable import com.amulyakhare.textdrawable.util.ColorGenerator +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.ui.main.doOnApplyWindowInsets +import eu.kanade.tachiyomi.ui.main.marginBottom +import eu.kanade.tachiyomi.ui.main.updateLayoutParams +import eu.kanade.tachiyomi.ui.main.updatePaddingRelative /** * Returns coordinates of view. @@ -30,11 +42,25 @@ inline fun View.snack(message: String, length: Int = Snackbar.LENGTH_LONG, f: Sn val snack = Snackbar.make(this, message, length) val textView: TextView = snack.view.findViewById(android.support.design.R.id.snackbar_text) textView.setTextColor(Color.WHITE) + when { + Build.VERSION.SDK_INT >= 23 -> snack.config(context, rootWindowInsets.systemWindowInsetBottom) + else -> snack.config(context) + } snack.f() snack.show() return snack } +fun Snackbar.config(context: Context, bottomMargin: Int = 0) { + val params = this.view.layoutParams as ViewGroup.MarginLayoutParams + params.setMargins(12, 12, 12, 12 + bottomMargin) + this.view.layoutParams = params + + this.view.background = context.getDrawable(R.drawable.bg_snackbar) + + ViewCompat.setElevation(this.view, 6f) +} + inline fun View.visible() { visibility = View.VISIBLE } diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt index 31fcec901c..4c21e897cd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/SimpleNavigationView.kt @@ -32,7 +32,7 @@ open class SimpleNavigationView @JvmOverloads constructor( /** * Recycler view containing all the items. */ - protected val recycler = RecyclerView(context) + val recycler = RecyclerView(context) init { // Custom attributes @@ -57,6 +57,7 @@ open class SimpleNavigationView @JvmOverloads constructor( a.recycle() recycler.layoutManager = LinearLayoutManager(context) + recycler.clipToPadding = false } /** diff --git a/app/src/main/res/drawable/bg_snackbar.xml b/app/src/main/res/drawable/bg_snackbar.xml new file mode 100644 index 0000000000..63ea0348c8 --- /dev/null +++ b/app/src/main/res/drawable/bg_snackbar.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/catalogue_drawer.xml b/app/src/main/res/layout/catalogue_drawer.xml index 672161f6c8..cfcd725c1c 100644 --- a/app/src/main/res/layout/catalogue_drawer.xml +++ b/app/src/main/res/layout/catalogue_drawer.xml @@ -5,5 +5,10 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" - android:fitsSystemWindows="true"/> - + android:fitsSystemWindows="true"> + + diff --git a/app/src/main/res/layout/library_drawer.xml b/app/src/main/res/layout/library_drawer.xml index 914c329ddb..1289498950 100644 --- a/app/src/main/res/layout/library_drawer.xml +++ b/app/src/main/res/layout/library_drawer.xml @@ -5,4 +5,11 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" - android:fitsSystemWindows="true" /> + android:fitsSystemWindows="true" + android:clipToPadding="true"> + + \ No newline at end of file diff --git a/app/src/main/res/values-notnight-v29/themes.xml b/app/src/main/res/values-notnight-v29/themes.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-notnight-v29/themes.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file