Merge branch 'devel' of github.com:nv95/Kotatsu into devel

This commit is contained in:
Koitharu
2022-05-20 12:16:22 +03:00
22 changed files with 114 additions and 26 deletions

View File

@@ -2,11 +2,11 @@ package org.koitharu.kotatsu.base.ui
import android.app.Dialog import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.util.DisplayMetrics
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams
import androidx.appcompat.app.AppCompatDialog
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
@@ -14,6 +14,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.ui.dialog.AppBottomSheetDialog import org.koitharu.kotatsu.base.ui.dialog.AppBottomSheetDialog
import org.koitharu.kotatsu.utils.ext.displayCompat
import com.google.android.material.R as materialR import com.google.android.material.R as materialR
abstract class BaseBottomSheet<B : ViewBinding> : BottomSheetDialogFragment() { abstract class BaseBottomSheet<B : ViewBinding> : BottomSheetDialogFragment() {
@@ -33,6 +34,20 @@ abstract class BaseBottomSheet<B : ViewBinding> : BottomSheetDialogFragment() {
): View { ): View {
val binding = onInflateView(inflater, container) val binding = onInflateView(inflater, container)
viewBinding = binding viewBinding = binding
// Enforce max width for tablets
val width = resources.getDimensionPixelSize(R.dimen.bottom_sheet_width)
if (width > 0) {
behavior?.maxWidth = width
}
// Set peek height to 50% display height
requireContext().displayCompat?.let {
val metrics = DisplayMetrics()
it.getRealMetrics(metrics)
behavior?.peekHeight = metrics.heightPixels / 2
}
return binding.root return binding.root
} }
@@ -42,11 +57,7 @@ abstract class BaseBottomSheet<B : ViewBinding> : BottomSheetDialogFragment() {
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return if (resources.getBoolean(R.bool.is_tablet)) { return AppBottomSheetDialog(requireContext(), theme)
AppCompatDialog(context, R.style.Theme_Kotatsu_Dialog)
} else {
AppBottomSheetDialog(requireContext(), theme)
}
} }
protected abstract fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): B protected abstract fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): B

View File

@@ -21,7 +21,7 @@ class AppBottomSheetDialog(context: Context, theme: Int) : BottomSheetDialog(con
if (drawEdgeToEdge) { if (drawEdgeToEdge) {
// Copied from super.onAttachedToWindow: // Copied from super.onAttachedToWindow:
val edgeToEdgeFlags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE val edgeToEdgeFlags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
// Fix super-class's window flag bug by respecting the intial system UI visibility: // Fix super-class's window flag bug by respecting the initial system UI visibility:
window.decorView.systemUiVisibility = edgeToEdgeFlags or initialSystemUiVisibility window.decorView.systemUiVisibility = edgeToEdgeFlags or initialSystemUiVisibility
} }
} }

View File

@@ -233,6 +233,8 @@ class MainActivity :
} }
binding.toolbarCard.updateLayoutParams<MarginLayoutParams> { binding.toolbarCard.updateLayoutParams<MarginLayoutParams> {
topMargin = insets.top + bottomMargin topMargin = insets.top + bottomMargin
leftMargin = insets.left
rightMargin = insets.right
} }
binding.root.updatePadding( binding.root.updatePadding(
left = insets.left, left = insets.left,

View File

@@ -0,0 +1,15 @@
package org.koitharu.kotatsu.utils.ext
import android.content.Context
import android.os.Build
import android.view.Display
import android.view.WindowManager
import androidx.core.content.getSystemService
val Context.displayCompat: Display?
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
display
} else {
@Suppress("DEPRECATION")
getSystemService<WindowManager>()?.defaultDisplay
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:interpolator/fast_out_slow_in">
<translate
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:interpolator/fast_out_slow_in">
<translate
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="?android:attr/divider" />
</shape>
</item>
</layer-list>

View File

@@ -11,6 +11,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:indeterminate="true" android:indeterminate="true"
app:indicatorSize="@dimen/list_footer_height_inner" /> app:indicatorSize="24dp"/>
</FrameLayout> </FrameLayout>

View File

@@ -10,7 +10,7 @@
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="?attr/actionBarSize" />
<ScrollView <ScrollView
android:id="@+id/scrollView" android:id="@+id/scrollView"

View File

@@ -9,6 +9,7 @@
android:layout_width="@dimen/list_footer_height_inner" android:layout_width="@dimen/list_footer_height_inner"
android:layout_height="@dimen/list_footer_height_inner" android:layout_height="@dimen/list_footer_height_inner"
android:layout_gravity="center" android:layout_gravity="center"
android:indeterminate="true" /> android:indeterminate="true"
android:padding="8dp"/>
</FrameLayout> </FrameLayout>

View File

@@ -10,7 +10,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"> android:layout_height="?attr/actionBarSize"
android:background="@drawable/sheet_toolbar_background">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"

View File

@@ -10,7 +10,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"> android:layout_height="?attr/actionBarSize"
android:background="@drawable/sheet_toolbar_background">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"

View File

@@ -10,7 +10,8 @@
<com.google.android.material.appbar.AppBarLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"> android:layout_height="?attr/actionBarSize"
android:background="@drawable/sheet_toolbar_background">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"

View File

@@ -7,5 +7,6 @@
<color name="onErrorContainer">#FFDAD4</color> <color name="onErrorContainer">#FFDAD4</color>
<color name="scrollbar">#66FFFFFF</color> <color name="scrollbar">#66FFFFFF</color>
<color name="selector_foreground">#29FFFFFF</color> <color name="selector_foreground">#29FFFFFF</color>
<color name="divider_default">#1FFFFFFF</color>
</resources> </resources>

View File

@@ -2,7 +2,7 @@
<resources> <resources>
<plurals name="new_chapters"> <plurals name="new_chapters">
<item quantity="one">%1$d новий розділ</item> <item quantity="one">%1$d новий розділ</item>
<item quantity="few">%1$d нових розділи</item> <item quantity="few">%1$d нові розділи</item>
<item quantity="many">%1$d нових розділів</item> <item quantity="many">%1$d нових розділів</item>
<item quantity="other">%1$d нових розділів</item> <item quantity="other">%1$d нових розділів</item>
</plurals> </plurals>

View File

@@ -64,7 +64,7 @@
<string name="cache">Кеш</string> <string name="cache">Кеш</string>
<string name="text_file_sizes">Б|кБ|МБ|ГБ|ТБ</string> <string name="text_file_sizes">Б|кБ|МБ|ГБ|ТБ</string>
<string name="standard">Стандартний</string> <string name="standard">Стандартний</string>
<string name="webtoon">Манхва</string> <string name="webtoon">Вебтун</string>
<string name="read_mode">Режим читання</string> <string name="read_mode">Режим читання</string>
<string name="grid_size">Розмір сітки</string> <string name="grid_size">Розмір сітки</string>
<string name="search_on_s">Пошук по %s</string> <string name="search_on_s">Пошук по %s</string>
@@ -290,4 +290,8 @@
<string name="bookmark_added">Додано закладку</string> <string name="bookmark_added">Додано закладку</string>
<string name="undo">Скасувати</string> <string name="undo">Скасувати</string>
<string name="removed_from_history">Видалено з історії</string> <string name="removed_from_history">Видалено з історії</string>
<string name="dns_over_https">DNS через HTTPS</string>
<string name="default_mode">Типовий режим</string>
<string name="detect_reader_mode_summary">Автоматично визначати, чи є манга вебтуном</string>
<string name="detect_reader_mode">Автовизначення режиму читання</string>
</resources> </resources>

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeOverlay.Kotatsu.BottomSheetDialog" parent="ThemeOverlay.Material3.DayNight.BottomSheetDialog">
<item name="android:navigationBarColor">@color/navigation_bar_scrim</item>
<item name="android:windowLightNavigationBar">@bool/light_navigation_bar</item>
<item name="colorControlHighlight">?colorSecondary</item>
</style>
</resources>

View File

@@ -3,4 +3,5 @@
<dimen name="grid_spacing">6dp</dimen> <dimen name="grid_spacing">6dp</dimen>
<dimen name="grid_spacing_outer">2dp</dimen> <dimen name="grid_spacing_outer">2dp</dimen>
<dimen name="preferred_grid_width">140dp</dimen> <dimen name="preferred_grid_width">140dp</dimen>
<dimen name="bottom_sheet_width">420dp</dimen>
</resources> </resources>

View File

@@ -20,5 +20,6 @@
<color name="dim">#99000000</color> <color name="dim">#99000000</color>
<color name="scrollbar">#66000000</color> <color name="scrollbar">#66000000</color>
<color name="selector_foreground">#29000000</color> <color name="selector_foreground">#29000000</color>
<color name="divider_default">#1F000000</color>
</resources> </resources>

View File

@@ -26,4 +26,7 @@
<dimen name="search_suggestions_manga_height">124dp</dimen> <dimen name="search_suggestions_manga_height">124dp</dimen>
<dimen name="search_suggestions_manga_spacing">4dp</dimen> <dimen name="search_suggestions_manga_spacing">4dp</dimen>
<dimen name="bottom_sheet_width">0dp</dimen>
<dimen name="dialog_radius">8dp</dimen>
</resources> </resources>

View File

@@ -22,9 +22,26 @@
<!-- Bottom sheet --> <!-- Bottom sheet -->
<style name="ThemeOverlay.Kotatsu.BottomSheetDialog" parent="ThemeOverlay.Material3.DayNight.BottomSheetDialog"> <style name="ThemeOverlay.Kotatsu.BottomSheetDialog" parent="ThemeOverlay.Material3.BottomSheetDialog">
<item name="android:statusBarColor">@color/dim</item> <item name="bottomSheetStyle">@style/Widget.Kotatsu.BottomSheet.Modal</item>
<item name="colorControlHighlight">?colorSecondary</item> <item name="android:windowAnimationStyle">@style/Animation.Kotatsu.BottomSheetDialog</item>
</style>
<style name="Widget.Kotatsu.BottomSheet.Modal" parent="Widget.Material3.BottomSheet.Modal">
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.Kotatsu.BottomSheet</item>
</style>
<style name="ShapeAppearanceOverlay.Kotatsu.BottomSheet" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">@dimen/dialog_radius</item>
<item name="cornerSizeTopLeft">@dimen/dialog_radius</item>
<item name="cornerSizeBottomRight">0dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
</style>
<style name="Animation.Kotatsu.BottomSheetDialog" parent="Animation.AppCompat.Dialog">
<item name="android:windowEnterAnimation">@anim/bottom_sheet_slide_in</item>
<item name="android:windowExitAnimation">@anim/bottom_sheet_slide_out</item>
</style> </style>
<!-- Widget styles --> <!-- Widget styles -->

View File

@@ -35,6 +35,8 @@
<item name="colorErrorContainer">@color/errorContainer</item> <item name="colorErrorContainer">@color/errorContainer</item>
<item name="colorOnErrorContainer">@color/onErrorContainer</item> <item name="colorOnErrorContainer">@color/onErrorContainer</item>
<item name="android:divider">@color/divider_default</item>
<!-- Ripples --> <!-- Ripples -->
<item name="colorControlHighlight">?attr/colorSurfaceVariant</item> <item name="colorControlHighlight">?attr/colorSurfaceVariant</item>