diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt index 06ffceff4..33855e322 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt @@ -6,10 +6,15 @@ import android.net.Uri import android.os.Bundle import android.view.Menu import android.view.MenuItem +import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.net.toFile +import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.activity_details.* +import kotlinx.coroutines.launch +import moxy.MvpDelegate import moxy.ktx.moxyPresenter +import org.koitharu.kotatsu.BuildConfig import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga @@ -18,6 +23,7 @@ import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.ui.common.BaseActivity import org.koitharu.kotatsu.ui.download.DownloadService import org.koitharu.kotatsu.utils.ShareHelper +import org.koitharu.kotatsu.utils.ShortcutUtils import org.koitharu.kotatsu.utils.ext.getDisplayMessage class MangaDetailsActivity : BaseActivity(), MangaDetailsView { @@ -33,7 +39,10 @@ class MangaDetailsActivity : BaseActivity(), MangaDetailsView { pager.adapter = MangaDetailsAdapter(resources, supportFragmentManager) tabs.setupWithViewPager(pager) intent?.getParcelableExtra(EXTRA_MANGA)?.let { - presenter.loadDetails(it) + presenter.loadDetails( + manga = it, + force = savedInstanceState?.containsKey(MvpDelegate.MOXY_DELEGATE_TAGS_KEY) != true + ) } ?: finish() } @@ -61,6 +70,8 @@ class MangaDetailsActivity : BaseActivity(), MangaDetailsView { override fun onPrepareOptionsMenu(menu: Menu): Boolean { menu.findItem(R.id.action_save).isEnabled = manga?.source != null && manga?.source != MangaSource.LOCAL + menu.findItem(R.id.action_shortcut).isVisible = BuildConfig.DEBUG || + ShortcutManagerCompat.isRequestPinShortcutSupported(this) return super.onPrepareOptionsMenu(menu) } @@ -81,6 +92,25 @@ class MangaDetailsActivity : BaseActivity(), MangaDetailsView { } true } + R.id.action_shortcut -> { + manga?.let { + lifecycleScope.launch { + if (!ShortcutManagerCompat.requestPinShortcut( + this@MangaDetailsActivity, + ShortcutUtils.createShortcutInfo(this@MangaDetailsActivity, it), + null + ) + ) { + Snackbar.make( + pager, + R.string.operation_not_supported, + Snackbar.LENGTH_SHORT + ).show() + } + } + } + true + } else -> super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt index 14310e418..3965dcb41 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.ui.details +import android.text.Spanned import androidx.core.text.parseAsHtml import androidx.core.view.isVisible import coil.api.load @@ -25,10 +26,14 @@ class MangaDetailsFragment : BaseFragment(R.layout.fragment_details), MangaDetai override fun onMangaUpdated(manga: Manga) { this.manga = manga - imageView_cover.load(manga.largeCoverUrl ?: manga.coverUrl) + imageView_cover.load(manga.largeCoverUrl ?: manga.coverUrl) { + fallback(R.drawable.ic_placeholder) + crossfade(true) + } textView_title.text = manga.title textView_subtitle.text = manga.altTitle - textView_description.text = manga.description?.parseAsHtml() + textView_description.text = manga.description?.parseAsHtml()?.takeUnless(Spanned::isBlank) + ?: getString(R.string.no_description) if (manga.rating == Manga.NO_RATING) { ratingBar.isVisible = false } else { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt index 0a3a8f740..2f6bb7ba0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaGridHolder.kt @@ -17,6 +17,9 @@ class MangaGridHolder(parent: ViewGroup) : BaseViewHolder( coverRequest?.dispose() textView_title.text = data.title coverRequest = imageView_cover.load(data.coverUrl) { + placeholder(R.drawable.ic_placeholder) + fallback(R.drawable.ic_placeholder) + error(R.drawable.ic_placeholder) crossfade(true) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt index 5540efbe1..7e52d594c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListDetailsHolder.kt @@ -23,6 +23,9 @@ class MangaListDetailsHolder(parent: ViewGroup) : BaseViewHolder : BaseFragment(R.layout.fragment_list), MangaListView, @@ -70,7 +72,7 @@ abstract class MangaListFragment : BaseFragment(R.layout.fragment_list), Mang override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - if (savedInstanceState?.containsKey("MoxyDelegateBundle") != true) { + if (savedInstanceState?.containsKey(MvpDelegate.MOXY_DELEGATE_TAGS_KEY) != true) { onRequestMoreItems(0) } } @@ -210,7 +212,7 @@ abstract class MangaListFragment : BaseFragment(R.layout.fragment_list), Mang recyclerView.clearItemDecorations() adapter?.listMode = mode recyclerView.layoutManager = when (mode) { - ListMode.GRID -> GridLayoutManager(ctx, 3) + ListMode.GRID -> GridLayoutManager(ctx, UiUtils.resolveGridSpanCount(ctx)) else -> LinearLayoutManager(ctx) } recyclerView.adapter = adapter diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListHolder.kt index 7c5f91d13..e08045a34 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListHolder.kt @@ -20,6 +20,9 @@ class MangaListHolder(parent: ViewGroup) : textView_title.text = data.title textView_subtitle.textAndVisible = data.tags.joinToString(", ") { it.title } coverRequest = imageView_cover.load(data.coverUrl) { + placeholder(R.drawable.ic_placeholder) + fallback(R.drawable.ic_placeholder) + error(R.drawable.ic_placeholder) crossfade(true) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt index 957f99cf8..10b371f4d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/ReaderActivity.kt @@ -14,6 +14,7 @@ import androidx.core.view.isVisible import androidx.core.view.updatePadding import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.activity_reader.* +import moxy.MvpDelegate import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga @@ -69,7 +70,10 @@ class ReaderActivity : BaseFullscreenActivity(), ReaderView, ChaptersDialog.OnCh loader = PageLoader() adapter = PagesAdapter(loader) pager.adapter = adapter - presenter.loadChapter(state) + pager.offscreenPageLimit = 2 + if (savedInstanceState?.containsKey(MvpDelegate.MOXY_DELEGATE_TAGS_KEY) != true) { + presenter.loadChapter(state) + } } override fun onDestroy() { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt index 2e3e1da73..aaed480f7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt @@ -3,23 +3,30 @@ package org.koitharu.kotatsu.ui.reader.thumbnails import android.view.ViewGroup import coil.Coil import coil.api.get +import coil.size.PixelSize +import coil.size.Size import kotlinx.android.synthetic.main.item_page_thumb.* import kotlinx.coroutines.* import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.MangaPage import org.koitharu.kotatsu.domain.MangaProviderFactory import org.koitharu.kotatsu.ui.common.list.BaseViewHolder -import org.koitharu.kotatsu.utils.DrawUtils -import org.koitharu.kotatsu.utils.ext.resolveDp class PageThumbnailHolder(parent: ViewGroup, private val scope: CoroutineScope) : BaseViewHolder(parent, R.layout.item_page_thumb) { private var job: Job? = null + private val thumbSize: Size init { - val color = DrawUtils.invertColor(textView_number.currentTextColor) - textView_number.setShadowLayer(parent.resources.resolveDp(26f), 0f, 0f, color) +// FIXME +// val color = DrawUtils.invertColor(textView_number.currentTextColor) +// textView_number.setShadowLayer(parent.resources.resolveDp(26f), 0f, 0f, color) + val width = itemView.context.resources.getDimensionPixelSize(R.dimen.preferred_grid_width) + thumbSize = PixelSize( + width = width, + height = (width * 13f / 18f).toInt() + ) } override fun onBind(data: MangaPage, extra: Unit) { @@ -32,7 +39,7 @@ class PageThumbnailHolder(parent: ViewGroup, private val scope: CoroutineScope) MangaProviderFactory.create(data.source).getPageFullUrl(data) } val drawable = Coil.get(url) { - + size(thumbSize) } withContext(Dispatchers.Main) { imageView_thumb.setImageDrawable(drawable) diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PagesThumbnailsSheet.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PagesThumbnailsSheet.kt index 42016540b..093f5aa79 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PagesThumbnailsSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PagesThumbnailsSheet.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.core.view.isVisible import androidx.fragment.app.FragmentManager +import androidx.recyclerview.widget.GridLayoutManager import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import kotlinx.android.synthetic.main.sheet_pages.* @@ -13,6 +14,7 @@ import org.koitharu.kotatsu.core.model.MangaPage import org.koitharu.kotatsu.ui.common.BaseBottomSheet import org.koitharu.kotatsu.ui.common.list.OnRecyclerItemClickListener import org.koitharu.kotatsu.ui.common.list.decor.SpacingItemDecoration +import org.koitharu.kotatsu.utils.UiUtils import org.koitharu.kotatsu.utils.ext.resolveDp import org.koitharu.kotatsu.utils.ext.withArgs @@ -31,6 +33,7 @@ class PagesThumbnailsSheet : BaseBottomSheet(R.layout.sheet_pages), dismissAllowingStateLoss() return } + (recyclerView.layoutManager as? GridLayoutManager)?.spanCount = UiUtils.resolveGridSpanCount(view.context) val title = arguments?.getString(ARG_TITLE) toolbar.title = title toolbar.setNavigationOnClickListener { dismiss() } @@ -56,8 +59,8 @@ class PagesThumbnailsSheet : BaseBottomSheet(R.layout.sheet_pages), } } }) - behavior.peekHeight = BottomSheetBehavior.PEEK_HEIGHT_AUTO - behavior.isFitToContents = false +// behavior.peekHeight = BottomSheetBehavior.PEEK_HEIGHT_AUTO +// behavior.isFitToContents = false } override fun onDestroyView() { diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/DrawUtils.kt b/app/src/main/java/org/koitharu/kotatsu/utils/DrawUtils.kt deleted file mode 100644 index 2837d9630..000000000 --- a/app/src/main/java/org/koitharu/kotatsu/utils/DrawUtils.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.koitharu.kotatsu.utils - -import android.graphics.Color -import androidx.annotation.ColorInt - -object DrawUtils { - - @JvmStatic - @ColorInt - fun invertColor(@ColorInt color: Int): Int { - val red = Color.red(color) - val green = Color.green(color) - val blue = Color.blue(color) - val alpha = Color.alpha(color) - return Color.argb(alpha, 255 - red, 255 - green, 255 - blue) - } -} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ShortcutUtils.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ShortcutUtils.kt new file mode 100644 index 000000000..daa5ff295 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ShortcutUtils.kt @@ -0,0 +1,33 @@ +package org.koitharu.kotatsu.utils + +import android.content.Context +import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.graphics.drawable.IconCompat +import androidx.core.graphics.drawable.toBitmap +import coil.Coil +import coil.api.get +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.core.model.Manga +import org.koitharu.kotatsu.ui.details.MangaDetailsActivity + +object ShortcutUtils { + + @JvmStatic + suspend fun createShortcutInfo(context: Context, manga: Manga): ShortcutInfoCompat { +// val icon = withContext(Dispatchers.IO) { +// Coil.loader().get(manga.coverUrl) { +// context.getSystemService()?.let { +// size(it.launcherLargeIconSize) +// } +// }.toBitmap() +// } + return ShortcutInfoCompat.Builder(context, manga.id.toString()) + .setShortLabel(manga.title) + .setLongLabel(manga.title) + .setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher_foreground)) + .setIntent(MangaDetailsActivity.newIntent(context, manga)) + .build() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt b/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt new file mode 100644 index 000000000..16aeb0c8c --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt @@ -0,0 +1,28 @@ +package org.koitharu.kotatsu.utils + +import android.content.Context +import android.graphics.Color +import androidx.annotation.ColorInt +import org.koitharu.kotatsu.R +import kotlin.math.roundToInt + +object UiUtils { + + @JvmStatic + @ColorInt + fun invertColor(@ColorInt color: Int): Int { + val red = Color.red(color) + val green = Color.green(color) + val blue = Color.blue(color) + val alpha = Color.alpha(color) + return Color.argb(alpha, 255 - red, 255 - green, 255 - blue) + } + + @JvmStatic + fun resolveGridSpanCount(context: Context): Int { + val cellWidth = context.resources.getDimensionPixelSize(R.dimen.preferred_grid_width) + val screenWidth = context.resources.displayMetrics.widthPixels.toDouble() + val estimatedCount = (screenWidth / cellWidth).roundToInt() + return estimatedCount.coerceAtLeast(2) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/CommonExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CommonExt.kt index a801bdcc4..e325b972d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/CommonExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CommonExt.kt @@ -33,6 +33,7 @@ suspend inline fun T.retryUntilSuccess(maxAttempts: Int, action: T.() -> } fun Throwable.getDisplayMessage(resources: Resources) = when (this) { + is UnsupportedOperationException -> resources.getString(R.string.operation_not_supported) is UnsupportedFileException -> resources.getString(R.string.text_file_not_supported) is IOException -> resources.getString(R.string.network_error) else -> if (BuildConfig.DEBUG) { diff --git a/app/src/main/res/drawable/ic_placeholder.xml b/app/src/main/res/drawable/ic_placeholder.xml new file mode 100644 index 000000000..b6c98c64a --- /dev/null +++ b/app/src/main/res/drawable/ic_placeholder.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_placeholder_raw.xml b/app/src/main/res/drawable/ic_placeholder_raw.xml new file mode 100644 index 000000000..c3652f8c0 --- /dev/null +++ b/app/src/main/res/drawable/ic_placeholder_raw.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml index d58e21c11..84d24e7bb 100644 --- a/app/src/main/res/drawable/ic_settings.xml +++ b/app/src/main/res/drawable/ic_settings.xml @@ -1,4 +1,5 @@ - + android:pathData="M12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12A4,4 0 0,1 12,8M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml index 2127e5beb..c76924fe0 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -9,6 +9,7 @@ + app:popupTheme="@style/AppPopupTheme" /> + app:popupTheme="@style/AppPopupTheme" /> diff --git a/app/src/main/res/layout/activity_reader.xml b/app/src/main/res/layout/activity_reader.xml index a9532b57c..8fa48533b 100644 --- a/app/src/main/res/layout/activity_reader.xml +++ b/app/src/main/res/layout/activity_reader.xml @@ -26,7 +26,7 @@ android:id="@id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" - app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light" /> + app:popupTheme="@style/AppPopupTheme" /> @@ -46,7 +46,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" - app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light" /> + app:popupTheme="@style/AppPopupTheme" /> diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index bf6953216..ec7136443 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -10,6 +10,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" + android:background="?colorPrimary" android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"> + app:popupTheme="@style/AppPopupTheme" /> diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index a2edb3abb..82dd72532 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -9,6 +9,7 @@ + app:popupTheme="@style/AppPopupTheme" /> diff --git a/app/src/main/res/layout/fragment_details.xml b/app/src/main/res/layout/fragment_details.xml index 0b022eaed..b03d021e3 100644 --- a/app/src/main/res/layout/fragment_details.xml +++ b/app/src/main/res/layout/fragment_details.xml @@ -85,11 +85,11 @@ android:contentDescription="@string/add_to_favourites" android:scaleType="center" android:src="@drawable/ic_tag_heart_outline" - app:tint="?colorAccent" app:layout_constraintBottom_toBottomOf="@id/button_read" app:layout_constraintDimensionRatio="1:1" app:layout_constraintEnd_toStartOf="@id/button_read" - app:layout_constraintTop_toTopOf="@id/button_read" /> + app:layout_constraintTop_toTopOf="@id/button_read" + app:tint="?colorAccent" /> + + + app:layout_constraintTop_toBottomOf="@id/divider_top" /> diff --git a/app/src/main/res/layout/item_page_thumb.xml b/app/src/main/res/layout/item_page_thumb.xml index fc9202cbb..e99c00813 100644 --- a/app/src/main/res/layout/item_page_thumb.xml +++ b/app/src/main/res/layout/item_page_thumb.xml @@ -9,6 +9,7 @@ diff --git a/app/src/main/res/layout/sheet_pages.xml b/app/src/main/res/layout/sheet_pages.xml index 89cdc0745..6838598da 100644 --- a/app/src/main/res/layout/sheet_pages.xml +++ b/app/src/main/res/layout/sheet_pages.xml @@ -1,10 +1,11 @@ - + android:layout_height="wrap_content" + android:orientation="vertical"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..90847003f --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,8 @@ + + + #1565C0 + #283593 + #FF8A65 + #99000000 + #E57373 + \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..050fe5805 --- /dev/null +++ b/app/src/main/res/values-night/styles.xml @@ -0,0 +1,4 @@ + + + +