diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt index d4182e8f5..8fbaa7ad4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseActivity.kt @@ -64,7 +64,7 @@ abstract class BaseActivity : AppCompatActivity(), OnApplyWindo ?.layoutParams as? AppBarLayout.LayoutParams if (toolbarParams != null) { if (get().isToolbarHideWhenScrolling) { - toolbarParams.scrollFlags = SCROLL_FLAG_SCROLL or SCROLL_FLAG_ENTER_ALWAYS + toolbarParams.scrollFlags = SCROLL_FLAG_SCROLL or SCROLL_FLAG_ENTER_ALWAYS or SCROLL_FLAG_SNAP } else { toolbarParams.scrollFlags = SCROLL_FLAG_NO_SCROLL } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt index 06fe7459e..ee69048bb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt @@ -99,8 +99,8 @@ class MangareadRepository( val root2 = doc.body().selectFirst("div.content-area") ?.selectFirst("div.c-page") ?: throw ParseException("Root2 not found") - val mangaId = doc.getElementsByAttribute("data-postid").firstOrNull() - ?.attr("data-postid")?.toLongOrNull() + val mangaId = doc.getElementsByAttribute("data-post").firstOrNull() + ?.attr("data-post")?.toLongOrNull() ?: throw ParseException("Cannot obtain manga id") val doc2 = loaderContext.httpPost( "https://${getDomain()}/wp-admin/admin-ajax.php", @@ -169,4 +169,4 @@ class MangareadRepository( it.substring(0, pos) to it.substring(pos + 1) }.toMutableMap() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt index 43ac54837..399314311 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/FavouritesContainerFragment.kt @@ -3,6 +3,7 @@ package org.koitharu.kotatsu.favourites.ui import android.os.Bundle import android.view.* import androidx.core.graphics.Insets +import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.recyclerview.widget.RecyclerView import com.google.android.material.snackbar.Snackbar @@ -16,8 +17,10 @@ import org.koitharu.kotatsu.databinding.FragmentFavouritesBinding import org.koitharu.kotatsu.favourites.ui.categories.CategoriesActivity import org.koitharu.kotatsu.favourites.ui.categories.CategoriesEditDelegate import org.koitharu.kotatsu.favourites.ui.categories.FavouritesCategoriesViewModel +import org.koitharu.kotatsu.main.ui.AppBarOwner import org.koitharu.kotatsu.utils.RecycledViewPoolHolder import org.koitharu.kotatsu.utils.ext.getDisplayMessage +import org.koitharu.kotatsu.utils.ext.measureHeight import org.koitharu.kotatsu.utils.ext.showPopupMenu import java.util.* @@ -65,10 +68,22 @@ class FavouritesContainerFragment : BaseFragment(), } override fun onWindowInsetsChanged(insets: Insets) { - binding.tabs.updatePadding( - left = insets.left, - right = insets.right + val headerHeight = (activity as? AppBarOwner)?.appBar?.measureHeight() ?: insets.top + binding.root.updatePadding( + top = headerHeight - insets.top ) + binding.pager.updatePadding( + top = -headerHeight + ) + binding.tabs.apply { + updatePadding( + left = insets.left, + right = insets.right + ) + updateLayoutParams { + topMargin = insets.top + } + } } private fun onCategoriesChanged(categories: List) { diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt index d75a627df..066da26ec 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt @@ -36,11 +36,10 @@ import org.koitharu.kotatsu.list.ui.adapter.MangaListAdapter import org.koitharu.kotatsu.list.ui.filter.FilterAdapter import org.koitharu.kotatsu.list.ui.filter.OnFilterChangedListener import org.koitharu.kotatsu.list.ui.model.ListModel +import org.koitharu.kotatsu.main.ui.AppBarOwner +import org.koitharu.kotatsu.main.ui.MainActivity import org.koitharu.kotatsu.utils.RecycledViewPoolHolder -import org.koitharu.kotatsu.utils.ext.clearItemDecorations -import org.koitharu.kotatsu.utils.ext.getDisplayMessage -import org.koitharu.kotatsu.utils.ext.toggleDrawer -import org.koitharu.kotatsu.utils.ext.viewLifecycleScope +import org.koitharu.kotatsu.utils.ext.* abstract class MangaListFragment : BaseFragment(), PaginationScrollListener.Callback, OnListItemClickListener, OnFilterChangedListener, @@ -224,16 +223,26 @@ abstract class MangaListFragment : BaseFragment(), } override fun onWindowInsetsChanged(insets: Insets) { - binding.recyclerView.updatePadding( - bottom = insets.bottom - ) + val headerHeight = (activity as? AppBarOwner)?.appBar?.measureHeight() ?: insets.top binding.recyclerViewFilter.updatePadding( + top = headerHeight, bottom = insets.bottom ) binding.root.updatePadding( left = insets.left, right = insets.right ) + if (activity is MainActivity) { + binding.recyclerView.updatePadding( + top = headerHeight, + bottom = insets.bottom + ) + binding.swipeRefreshLayout.setProgressViewOffset( + true, + headerHeight + resources.resolveDp(-72), + headerHeight + resources.resolveDp(10) + ) + } } private fun onGridScaleChanged(scale: Float) { diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/AppBarOwner.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/AppBarOwner.kt new file mode 100644 index 000000000..d5a2de5bc --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/AppBarOwner.kt @@ -0,0 +1,8 @@ +package org.koitharu.kotatsu.main.ui + +import com.google.android.material.appbar.AppBarLayout + +interface AppBarOwner { + + val appBar: AppBarLayout +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index 95437d333..4272a2b5e 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -20,6 +20,7 @@ import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.commit import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.CircularProgressDrawable +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.navigation.NavigationView import com.google.android.material.snackbar.Snackbar import org.koin.android.ext.android.get @@ -47,13 +48,10 @@ import org.koitharu.kotatsu.settings.SettingsActivity import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment import org.koitharu.kotatsu.tracker.ui.FeedFragment import org.koitharu.kotatsu.tracker.work.TrackWorker -import org.koitharu.kotatsu.utils.ext.getDisplayMessage -import org.koitharu.kotatsu.utils.ext.hideKeyboard -import org.koitharu.kotatsu.utils.ext.navigationItemBackground -import org.koitharu.kotatsu.utils.ext.resolveDp +import org.koitharu.kotatsu.utils.ext.* class MainActivity : BaseActivity(), - NavigationView.OnNavigationItemSelectedListener, + NavigationView.OnNavigationItemSelectedListener, AppBarOwner, View.OnClickListener, View.OnFocusChangeListener, SearchSuggestionListener { private val viewModel by viewModel(mode = LazyThreadSafetyMode.NONE) @@ -65,6 +63,9 @@ class MainActivity : BaseActivity(), private lateinit var drawerToggle: ActionBarDrawerToggle private var searchViewElevation = 0f + override val appBar: AppBarLayout + get() = binding.appbar + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(ActivityMainBinding.inflate(layoutInflater)) @@ -91,7 +92,8 @@ class MainActivity : BaseActivity(), } with(binding.navigationView) { - val menuView = findViewById(com.google.android.material.R.id.design_navigation_view) + val menuView = + findViewById(com.google.android.material.R.id.design_navigation_view) ViewCompat.setOnApplyWindowInsetsListener(navHeaderBinding.root) { v, insets -> val systemWindowInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.updatePadding(top = systemWindowInsets.top) @@ -213,6 +215,9 @@ class MainActivity : BaseActivity(), leftMargin = insets.left + topMargin rightMargin = insets.right + topMargin } + binding.container.updateLayoutParams { + topMargin = -(binding.appbar.measureHeight()) + } } override fun onFocusChange(v: View?, hasFocus: Boolean) { @@ -332,6 +337,8 @@ class MainActivity : BaseActivity(), private fun onSearchOpened() { binding.drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) drawerToggle.isDrawerIndicatorEnabled = false + // Avoiding shadows on the sides if the color is transparent, so we make the AppBarLayout white/dark + binding.appbar.setBackgroundColor(ContextCompat.getColor(this, R.color.color_on_secondary)) binding.toolbarCard.cardElevation = 0f binding.appbar.elevation = searchViewElevation } @@ -339,6 +346,8 @@ class MainActivity : BaseActivity(), private fun onSearchClosed() { binding.drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) drawerToggle.isDrawerIndicatorEnabled = true + // Returning transparent color + binding.appbar.setBackgroundColor(Color.TRANSPARENT) binding.appbar.elevation = 0f binding.toolbarCard.cardElevation = searchViewElevation } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/PagesThumbnailsSheet.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/PagesThumbnailsSheet.kt index e8a194fe4..0a2f4f2cb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/PagesThumbnailsSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/PagesThumbnailsSheet.kt @@ -59,7 +59,13 @@ class PagesThumbnailsSheet : BaseBottomSheet(), binding.toolbar.title = title binding.toolbar.setNavigationOnClickListener { dismiss() } binding.toolbar.subtitle = null - binding.toolbar.navigationIcon = null + + if (!resources.getBoolean(R.bool.is_tablet)) { + binding.toolbar.navigationIcon = null + } else { + binding.toolbar.subtitle = + resources.getQuantityString(R.plurals.pages, thumbnails.size, thumbnails.size) + } val initialTopPosition = binding.recyclerView.top @@ -98,7 +104,9 @@ class PagesThumbnailsSheet : BaseBottomSheet(), if (newState == BottomSheetBehavior.STATE_EXPANDED) { binding.toolbar.setNavigationIcon(R.drawable.ic_cross) binding.toolbar.subtitle = - resources.getQuantityString(R.plurals.pages, thumbnails.size, thumbnails.size) + resources.getQuantityString(R.plurals.pages, + thumbnails.size, + thumbnails.size) } else { binding.toolbar.navigationIcon = null binding.toolbar.subtitle = null diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionFragment.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionFragment.kt index e053df0fc..f48e9b0da 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionFragment.kt @@ -11,7 +11,9 @@ import org.koin.android.ext.android.get import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koitharu.kotatsu.base.ui.BaseFragment import org.koitharu.kotatsu.databinding.FragmentSearchSuggestionBinding +import org.koitharu.kotatsu.main.ui.AppBarOwner import org.koitharu.kotatsu.search.ui.suggestion.adapter.SearchSuggestionAdapter +import org.koitharu.kotatsu.utils.ext.measureHeight class SearchSuggestionFragment : BaseFragment(), SearchSuggestionItemCallback.SuggestionItemListener { @@ -39,7 +41,9 @@ class SearchSuggestionFragment : BaseFragment() } override fun onWindowInsetsChanged(insets: Insets) { + val headerHeight = (activity as? AppBarOwner)?.appBar?.measureHeight() ?: insets.top binding.root.updatePadding( + top = headerHeight, left = insets.left, right = insets.right, bottom = insets.bottom, diff --git a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt index 99fd2bcd1..66413a5f5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt @@ -12,14 +12,15 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.BaseFragment import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.base.ui.list.PaginationScrollListener -import org.koitharu.kotatsu.base.ui.list.decor.SpacingItemDecoration import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.databinding.FragmentFeedBinding import org.koitharu.kotatsu.details.ui.DetailsActivity import org.koitharu.kotatsu.list.ui.model.ListModel +import org.koitharu.kotatsu.main.ui.AppBarOwner import org.koitharu.kotatsu.tracker.ui.adapter.FeedAdapter import org.koitharu.kotatsu.tracker.work.TrackWorker import org.koitharu.kotatsu.utils.ext.getDisplayMessage +import org.koitharu.kotatsu.utils.ext.measureHeight import org.koitharu.kotatsu.utils.progress.Progress class FeedFragment : BaseFragment(), PaginationScrollListener.Callback, @@ -97,7 +98,9 @@ class FeedFragment : BaseFragment(), PaginationScrollListen } override fun onWindowInsetsChanged(insets: Insets) { + val headerHeight = (activity as? AppBarOwner)?.appBar?.measureHeight() ?: insets.top binding.recyclerView.updatePadding( + top = headerHeight, left = insets.left, right = insets.right, bottom = insets.bottom diff --git a/app/src/main/res/layout-w600dp-land/fragment_details.xml b/app/src/main/res/layout-w600dp-land/fragment_details.xml index 30484f1a8..f1b1f770c 100644 --- a/app/src/main/res/layout-w600dp-land/fragment_details.xml +++ b/app/src/main/res/layout-w600dp-land/fragment_details.xml @@ -265,7 +265,6 @@ + + @@ -45,6 +52,7 @@ @@ -60,12 +69,6 @@ - - - - @@ -28,7 +27,6 @@ android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="?actionBarSize" android:clipToPadding="false" android:padding="@dimen/grid_spacing" android:scrollbars="vertical" @@ -36,4 +34,4 @@ app:spanCount="3" tools:listitem="@layout/item_page_thumb" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml deleted file mode 100644 index 0955e00db..000000000 --- a/app/src/main/res/values-v23/themes.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index b53cfab6e..285d771f8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,7 +6,7 @@