From 315aea8b5c36f9060b576a46da6a57233acd1e1c Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 12 Feb 2020 21:01:11 +0200 Subject: [PATCH] Some UI fixes --- .../core/parser/LocalMangaRepository.kt | 6 ++-- .../domain/favourites/FavouritesRepository.kt | 24 +++++++++++++ .../favourites/OnFavouritesChangeListener.kt | 6 ++++ .../ui/common/BaseFullscreenActivity.kt | 24 +++++-------- .../kotatsu/ui/common/TextInputDialog.kt | 14 ++++++-- .../kotatsu/ui/details/ChaptersFragment.kt | 3 ++ .../ui/details/MangaDetailsActivity.kt | 3 ++ .../ui/details/MangaDetailsFragment.kt | 11 ++++++ .../ui/details/MangaDetailsPresenter.kt | 31 +++++++++++++++- .../kotatsu/ui/details/MangaDetailsView.kt | 4 +++ .../kotatsu/ui/reader/ReaderActivity.kt | 25 +++++++------ .../koitharu/kotatsu/utils/GridTouchHelper.kt | 5 +++ .../org/koitharu/kotatsu/utils/ext/ViewExt.kt | 35 ++++++++++++++++--- app/src/main/res/drawable/ic_add.xml | 11 ++++++ app/src/main/res/drawable/ic_tag_heart.xml | 12 +++++++ .../res/drawable/ic_tag_heart_outline.xml | 12 +++++++ .../res/layout/dialog_favorite_categories.xml | 18 ++++++---- app/src/main/res/layout/fragment_details.xml | 4 +-- 18 files changed, 203 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/org/koitharu/kotatsu/domain/favourites/OnFavouritesChangeListener.kt create mode 100644 app/src/main/res/drawable/ic_add.xml create mode 100644 app/src/main/res/drawable/ic_tag_heart.xml create mode 100644 app/src/main/res/drawable/ic_tag_heart_outline.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/LocalMangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/LocalMangaRepository.kt index 28700e7cb..6ccd00955 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/LocalMangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/LocalMangaRepository.kt @@ -32,7 +32,9 @@ class LocalMangaRepository(loaderContext: MangaLoaderContext) : BaseMangaReposit return files.mapNotNull { x -> safe { getDetails(x) } } } - override suspend fun getDetails(manga: Manga) = manga + override suspend fun getDetails(manga: Manga) = if (manga.chapters == null) { + getDetails(Uri.parse(manga.url).toFile()) + } else manga override suspend fun getPages(chapter: MangaChapter): List { val file = Uri.parse(chapter.url).toFile() @@ -44,7 +46,7 @@ class LocalMangaRepository(loaderContext: MangaLoaderContext) : BaseMangaReposit .filter { x -> !x.isDirectory && x.name.substringBefore('.').matches(pattern) } } else { zip.entries().asSequence().filter { x -> !x.isDirectory } - }.toList().sortedWith(compareBy(AlphanumComparator()) { x -> x.name}) + }.toList().sortedWith(compareBy(AlphanumComparator()) { x -> x.name }) return entries.map { x -> val uri = zipUri(file, x.name) MangaPage( diff --git a/app/src/main/java/org/koitharu/kotatsu/domain/favourites/FavouritesRepository.kt b/app/src/main/java/org/koitharu/kotatsu/domain/favourites/FavouritesRepository.kt index 85bc0c7a7..b3e520875 100644 --- a/app/src/main/java/org/koitharu/kotatsu/domain/favourites/FavouritesRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/domain/favourites/FavouritesRepository.kt @@ -1,5 +1,7 @@ package org.koitharu.kotatsu.domain.favourites +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.koin.core.KoinComponent import org.koin.core.inject import org.koitharu.kotatsu.core.db.MangaDatabase @@ -9,6 +11,7 @@ import org.koitharu.kotatsu.core.db.entity.MangaEntity import org.koitharu.kotatsu.core.db.entity.TagEntity import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga +import java.util.* class FavouritesRepository : KoinComponent { @@ -49,9 +52,30 @@ class FavouritesRepository : KoinComponent { db.mangaDao().upsert(MangaEntity.from(manga), tags) val entity = FavouriteEntity(manga.id, categoryId, System.currentTimeMillis()) db.favouritesDao().add(entity) + notifyFavouritesChanged(manga.id) } suspend fun removeFromCategory(manga: Manga, categoryId: Long) { db.favouritesDao().delete(categoryId, manga.id) + notifyFavouritesChanged(manga.id) + } + + companion object { + + private val listeners = HashSet() + + fun subscribe(listener: OnFavouritesChangeListener) { + listeners += listener + } + + fun unsubscribe(listener: OnFavouritesChangeListener) { + listeners += listener + } + + private suspend fun notifyFavouritesChanged(mangaId: Long) { + withContext(Dispatchers.Main) { + listeners.forEach { x -> x.onFavouritesChanged(mangaId) } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/domain/favourites/OnFavouritesChangeListener.kt b/app/src/main/java/org/koitharu/kotatsu/domain/favourites/OnFavouritesChangeListener.kt new file mode 100644 index 000000000..6f15a662a --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/domain/favourites/OnFavouritesChangeListener.kt @@ -0,0 +1,6 @@ +package org.koitharu.kotatsu.domain.favourites + +interface OnFavouritesChangeListener { + + fun onFavouritesChanged(mangaId: Long) +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseFullscreenActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseFullscreenActivity.kt index 01d00ab73..7e3db04d9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseFullscreenActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseFullscreenActivity.kt @@ -1,24 +1,21 @@ package org.koitharu.kotatsu.ui.common +import android.graphics.Color import android.os.Bundle import android.view.View +import android.view.WindowManager + abstract class BaseFullscreenActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - window.decorView.setOnSystemUiVisibilityChangeListener { visibility -> - if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) { - onSystemUiShown() - } else { - onSystemUiHidden() - } + with(window) { + addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + statusBarColor = Color.TRANSPARENT + navigationBarColor = Color.TRANSPARENT } - } - - override fun onWindowFocusChanged(hasFocus: Boolean) { - super.onWindowFocusChanged(hasFocus) - if (hasFocus) hideSystemUI() + showSystemUI() } protected fun hideSystemUI() { @@ -28,6 +25,7 @@ abstract class BaseFullscreenActivity : BaseActivity() { or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + } protected fun showSystemUI() { @@ -35,8 +33,4 @@ abstract class BaseFullscreenActivity : BaseActivity() { or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) } - - protected open fun onSystemUiShown() = Unit - - protected open fun onSystemUiHidden() = Unit } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/TextInputDialog.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/TextInputDialog.kt index efbda40bd..d97fa1ffe 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/TextInputDialog.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/TextInputDialog.kt @@ -4,11 +4,12 @@ import android.annotation.SuppressLint import android.content.Context import android.content.DialogInterface import android.view.LayoutInflater +import android.view.inputmethod.InputMethodManager +import android.widget.TextView import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import kotlinx.android.synthetic.main.dialog_input.view.* import org.koitharu.kotatsu.R -import org.koitharu.kotatsu.utils.ext.hideKeyboard import org.koitharu.kotatsu.utils.ext.showKeyboard class TextInputDialog private constructor(private val delegate: AlertDialog) : @@ -16,7 +17,11 @@ class TextInputDialog private constructor(private val delegate: AlertDialog) : init { delegate.setOnShowListener { - delegate.currentFocus?.showKeyboard() + val view = delegate.findViewById(R.id.inputEdit)?:return@setOnShowListener + view.post { + view.requestFocus() + view.showKeyboard() + } } } @@ -29,6 +34,10 @@ class TextInputDialog private constructor(private val delegate: AlertDialog) : private val delegate = AlertDialog.Builder(context) .setView(view) + .setOnDismissListener { + val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0) + } fun setTitle(@StringRes titleResId: Int): Builder { delegate.setTitle(titleResId) @@ -52,7 +61,6 @@ class TextInputDialog private constructor(private val delegate: AlertDialog) : fun setPositiveButton(@StringRes textId: Int, listener: (DialogInterface, String) -> Unit): Builder { delegate.setPositiveButton(textId) { dialog, _ -> - view.hideKeyboard() listener(dialog, view.inputEdit.text?.toString().orEmpty()) } return this diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt index d9eacee0d..78f19ffc7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.fragment_chapters.* import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaChapter import org.koitharu.kotatsu.core.model.MangaHistory @@ -56,6 +57,8 @@ class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsV adapter.currentChapterId = history?.chapterId } + override fun onFavouriteChanged(categories: List) = Unit + override fun onItemClick(item: MangaChapter, position: Int, view: View) { startActivity( ReaderActivity.newIntent( 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 8872d10b2..06ffceff4 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 @@ -11,6 +11,7 @@ import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.activity_details.* import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaHistory import org.koitharu.kotatsu.core.model.MangaSource @@ -44,6 +45,8 @@ class MangaDetailsActivity : BaseActivity(), MangaDetailsView { override fun onHistoryChanged(history: MangaHistory?) = Unit + override fun onFavouriteChanged(categories: List) = Unit + override fun onLoadingStateChanged(isLoading: Boolean) = Unit override fun onError(e: Exception) { 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 c548235ee..14310e418 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 @@ -6,6 +6,7 @@ import coil.api.load import kotlinx.android.synthetic.main.fragment_details.* import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaHistory import org.koitharu.kotatsu.ui.common.BaseFragment @@ -52,6 +53,16 @@ class MangaDetailsFragment : BaseFragment(R.layout.fragment_details), MangaDetai updateReadButton() } + override fun onFavouriteChanged(categories: List) { + imageView_favourite.setImageResource( + if (categories.isEmpty()) { + R.drawable.ic_tag_heart_outline + } else { + R.drawable.ic_tag_heart + } + ) + } + override fun onLoadingStateChanged(isLoading: Boolean) { progressBar.isVisible = isLoading } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt index cbcbe9388..13b3d57fa 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt @@ -7,21 +7,27 @@ import moxy.InjectViewState import org.koitharu.kotatsu.BuildConfig import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.domain.MangaProviderFactory +import org.koitharu.kotatsu.domain.favourites.FavouritesRepository +import org.koitharu.kotatsu.domain.favourites.OnFavouritesChangeListener import org.koitharu.kotatsu.domain.history.HistoryRepository import org.koitharu.kotatsu.domain.history.OnHistoryChangeListener import org.koitharu.kotatsu.ui.common.BasePresenter @InjectViewState -class MangaDetailsPresenter : BasePresenter(), OnHistoryChangeListener { +class MangaDetailsPresenter : BasePresenter(), OnHistoryChangeListener, + OnFavouritesChangeListener { private lateinit var historyRepository: HistoryRepository + private lateinit var favouritesRepository: FavouritesRepository private var manga: Manga? = null override fun onFirstViewAttach() { historyRepository = HistoryRepository() + favouritesRepository = FavouritesRepository() super.onFirstViewAttach() HistoryRepository.subscribe(this) + FavouritesRepository.subscribe(this) } fun loadDetails(manga: Manga, force: Boolean = false) { @@ -30,6 +36,7 @@ class MangaDetailsPresenter : BasePresenter(), OnHistoryChange } loadHistory(manga) viewState.onMangaUpdated(manga) + loadFavourite(manga) launch { try { viewState.onLoadingStateChanged(true) @@ -64,12 +71,34 @@ class MangaDetailsPresenter : BasePresenter(), OnHistoryChange } } + private fun loadFavourite(manga: Manga) { + launch { + try { + val categories = withContext(Dispatchers.IO) { + favouritesRepository.getCategories(manga.id) + } + viewState.onFavouriteChanged(categories) + } catch (e: Exception) { + if (BuildConfig.DEBUG) { + e.printStackTrace() + } + } + } + } + override fun onHistoryChanged() { loadHistory(manga ?: return) } + override fun onFavouritesChanged(mangaId: Long) { + if (mangaId == manga?.id) { + loadFavourite(manga!!) + } + } + override fun onDestroy() { HistoryRepository.unsubscribe(this) + FavouritesRepository.unsubscribe(this) super.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt index 13a9b290a..ac659e654 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt @@ -4,6 +4,7 @@ import moxy.MvpView import moxy.viewstate.strategy.AddToEndSingleStrategy import moxy.viewstate.strategy.OneExecutionStateStrategy import moxy.viewstate.strategy.StateStrategyType +import org.koitharu.kotatsu.core.model.FavouriteCategory import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaHistory @@ -20,4 +21,7 @@ interface MangaDetailsView : MvpView { @StateStrategyType(AddToEndSingleStrategy::class) fun onHistoryChanged(history: MangaHistory?) + + @StateStrategyType(AddToEndSingleStrategy::class) + fun onFavouriteChanged(categories: List) } \ No newline at end of file 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 1c98a92d2..ba3de8a5c 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 @@ -6,8 +6,8 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.MotionEvent +import android.widget.Button import android.widget.Toast -import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updatePadding import kotlinx.android.synthetic.main.activity_reader.* @@ -18,6 +18,8 @@ import org.koitharu.kotatsu.core.model.MangaHistory import org.koitharu.kotatsu.core.model.MangaPage import org.koitharu.kotatsu.ui.common.BaseFullscreenActivity import org.koitharu.kotatsu.utils.GridTouchHelper +import org.koitharu.kotatsu.utils.ext.hasGlobalPoint +import org.koitharu.kotatsu.utils.ext.hitTest import org.koitharu.kotatsu.utils.ext.showDialog class ReaderActivity : BaseFullscreenActivity(), ReaderView, GridTouchHelper.OnGridTouchListener { @@ -107,25 +109,17 @@ class ReaderActivity : BaseFullscreenActivity(), ReaderView, GridTouchHelper.OnG } } - override fun onSystemUiShown() { - appbar_top.isGone = true - appbar_bottom.isGone = true - } - - override fun onSystemUiHidden() { - appbar_top.isGone = false - appbar_bottom.isGone = false - } - override fun onGridTouch(area: Int) { when (area) { GridTouchHelper.AREA_CENTER -> { if (appbar_top.isVisible) { appbar_top.isVisible = false appbar_bottom.isVisible = false + hideSystemUI() } else { appbar_top.isVisible = true appbar_bottom.isVisible = true + showSystemUI() } } GridTouchHelper.AREA_TOP, @@ -139,6 +133,15 @@ class ReaderActivity : BaseFullscreenActivity(), ReaderView, GridTouchHelper.OnG } } + override fun onProcessTouch(rawX: Int, rawY: Int): Boolean { + return if (appbar_top.hasGlobalPoint(rawX, rawY) || appbar_bottom.hasGlobalPoint(rawX, rawY)) { + false + } else { + val target = rootLayout.hitTest(rawX, rawY) + target !is Button + } + } + override fun dispatchTouchEvent(ev: MotionEvent): Boolean { touchHelper.dispatchTouchEvent(ev) return super.dispatchTouchEvent(ev) diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/GridTouchHelper.kt b/app/src/main/java/org/koitharu/kotatsu/utils/GridTouchHelper.kt index d4dd52dc4..28fcd789b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/GridTouchHelper.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/GridTouchHelper.kt @@ -22,6 +22,9 @@ class GridTouchHelper(context: Context, private val listener: OnGridTouchListene } override fun onSingleTapConfirmed(event: MotionEvent): Boolean { + if (!listener.onProcessTouch(event.rawX.toInt(), event.rawY.toInt())) { + return false + } val xIndex = (event.rawX * 2f / width).roundToInt() val yIndex = (event.rawY * 2f / height).roundToInt() listener.onGridTouch( @@ -54,5 +57,7 @@ class GridTouchHelper(context: Context, private val listener: OnGridTouchListene interface OnGridTouchListener { fun onGridTouch(area: Int) + + fun onProcessTouch(rawX: Int, rawY: Int): Boolean } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt index 0875d7d23..d7de3f258 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt @@ -1,17 +1,16 @@ package org.koitharu.kotatsu.utils.ext import android.app.Activity +import android.graphics.Rect import android.graphics.drawable.Drawable -import android.view.LayoutInflater -import android.view.MenuItem -import android.view.View -import android.view.ViewGroup +import android.view.* import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.TextView import androidx.annotation.LayoutRes import androidx.annotation.MenuRes import androidx.appcompat.widget.PopupMenu +import androidx.core.view.children import androidx.core.view.isGone import androidx.core.view.postDelayed import androidx.recyclerview.widget.GridLayoutManager @@ -101,9 +100,35 @@ fun View.disableFor(timeInMillis: Long) { } } -fun View.showPopupMenu(@MenuRes menuRes: Int, onItemClick: (MenuItem) -> Boolean) { +fun View.showPopupMenu(@MenuRes menuRes: Int, onPrepare:((Menu) -> Unit)? = null, onItemClick: (MenuItem) -> Boolean) { val menu = PopupMenu(context, this) menu.inflate(menuRes) menu.setOnMenuItemClickListener(onItemClick) + onPrepare?.invoke(menu.menu) menu.show() +} + +fun ViewGroup.hitTest(x: Int, y: Int): View? { + val rect = Rect() + for (child in children) { + if (child.getGlobalVisibleRect(rect)) { + if (rect.contains(x, y)) { + return if (child is ViewGroup) { + child.hitTest(x, y) + } else { + child + } + } + } + } + return null +} + +fun View.hasGlobalPoint(x: Int, y: Int): Boolean { + if (visibility != View.VISIBLE) { + return false + } + val rect = Rect() + getGlobalVisibleRect(rect) + return rect.contains(x, y) } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 000000000..d2515a7f3 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_tag_heart.xml b/app/src/main/res/drawable/ic_tag_heart.xml new file mode 100644 index 000000000..7605c53a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_tag_heart.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_tag_heart_outline.xml b/app/src/main/res/drawable/ic_tag_heart_outline.xml new file mode 100644 index 000000000..b14a8f283 --- /dev/null +++ b/app/src/main/res/drawable/ic_tag_heart_outline.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_favorite_categories.xml b/app/src/main/res/layout/dialog_favorite_categories.xml index cd00160af..96cfe5d1b 100644 --- a/app/src/main/res/layout/dialog_favorite_categories.xml +++ b/app/src/main/res/layout/dialog_favorite_categories.xml @@ -3,18 +3,23 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - android:orientation="vertical" - android:paddingTop="12dp" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingTop="12dp"> + + + android:textColor="?android:textColorPrimary" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_details.xml b/app/src/main/res/layout/fragment_details.xml index 442ccb26f..0b022eaed 100644 --- a/app/src/main/res/layout/fragment_details.xml +++ b/app/src/main/res/layout/fragment_details.xml @@ -84,8 +84,8 @@ android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/add_to_favourites" android:scaleType="center" - android:src="@drawable/ic_favourites" - android:tint="?colorAccent" + 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"