From 4ccd051cd5838b43c6da536af827ee97b88d65b7 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sun, 21 Mar 2021 22:28:16 -0400 Subject: [PATCH] Added Start/Completed Date for MAL Co-Authored-By: arkon <4098258+arkon@users.noreply.github.com> --- .../data/backup/full/models/BackupTracking.kt | 12 +-- .../tachiyomi/data/database/DbOpenCallback.kt | 6 +- .../data/database/mappers/TrackTypeMapping.kt | 6 ++ .../tachiyomi/data/database/models/Track.kt | 4 + .../data/database/models/TrackImpl.kt | 4 + .../data/database/tables/TrackTable.kt | 12 +++ .../data/preference/PreferencesHelper.kt | 5 +- .../data/track/myanimelist/MyAnimeListApi.kt | 12 +++ .../ui/manga/MangaDetailsPresenter.kt | 12 +++ .../manga/track/SetTrackReadingDatesDialog.kt | 86 +++++++++++++++++++ .../tachiyomi/ui/manga/track/TrackHolder.kt | 18 ++++ .../ui/manga/track/TrackingBottomSheet.kt | 25 +++++- .../ui/recently_read/RecentlyReadAdapter.kt | 4 +- .../tachiyomi/ui/setting/AboutController.kt | 4 +- app/src/main/res/layout/track_item.xml | 82 +++++++++++++++--- app/src/main/res/values/strings.xml | 2 + 16 files changed, 272 insertions(+), 22 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackReadingDatesDialog.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupTracking.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupTracking.kt index 734bebdb98..270adf2bfa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupTracking.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/full/models/BackupTracking.kt @@ -22,9 +22,9 @@ data class BackupTracking( @ProtoNumber(8) var score: Float = 0F, @ProtoNumber(9) var status: Int = 0, // startedReadingDate is called startReadTime in 1.x - // @ProtoNumber(10) var startedReadingDate: Long = 0, + @ProtoNumber(10) var startedReadingDate: Long = 0, // finishedReadingDate is called endReadTime in 1.x - // @ProtoNumber(11) var finishedReadingDate: Long = 0, + @ProtoNumber(11) var finishedReadingDate: Long = 0, ) { fun getTrackingImpl(): TrackImpl { return TrackImpl().apply { @@ -37,8 +37,8 @@ data class BackupTracking( total_chapters = this@BackupTracking.totalChapters score = this@BackupTracking.score status = this@BackupTracking.status - // started_reading_date = this@BackupTracking.startedReadingDate - // finished_reading_date = this@BackupTracking.finishedReadingDate + started_reading_date = this@BackupTracking.startedReadingDate + finished_reading_date = this@BackupTracking.finishedReadingDate tracking_url = this@BackupTracking.trackingUrl } } @@ -56,8 +56,8 @@ data class BackupTracking( totalChapters = track.total_chapters, score = track.score, status = track.status, - // startedReadingDate = track.started_reading_date, - // finishedReadingDate = track.finished_reading_date, + startedReadingDate = track.started_reading_date, + finishedReadingDate = track.finished_reading_date, trackingUrl = track.tracking_url ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/DbOpenCallback.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/DbOpenCallback.kt index e5f90313c1..5bbf4b7d2e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/DbOpenCallback.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/DbOpenCallback.kt @@ -20,7 +20,7 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) { /** * Version of the database. */ - const val DATABASE_VERSION = 12 + const val DATABASE_VERSION = 13 } override fun onCreate(db: SupportSQLiteDatabase) = with(db) { @@ -83,6 +83,10 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) { if (oldVersion < 12) { db.execSQL(MangaTable.addDateAddedCol) } + if (oldVersion < 13) { + db.execSQL(TrackTable.addStartDate) + db.execSQL(TrackTable.addFinishDate) + } } override fun onConfigure(db: SupportSQLiteDatabase) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/mappers/TrackTypeMapping.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/mappers/TrackTypeMapping.kt index 875059530e..94de567ad5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/mappers/TrackTypeMapping.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/mappers/TrackTypeMapping.kt @@ -11,12 +11,14 @@ import com.pushtorefresh.storio.sqlite.queries.InsertQuery import com.pushtorefresh.storio.sqlite.queries.UpdateQuery import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.TrackImpl +import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_FINISH_DATE import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_ID import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_LAST_CHAPTER_READ import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_LIBRARY_ID import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_MANGA_ID import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_MEDIA_ID import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_SCORE +import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_START_DATE import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_STATUS import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_SYNC_ID import eu.kanade.tachiyomi.data.database.tables.TrackTable.COL_TITLE @@ -54,6 +56,8 @@ class TrackPutResolver : DefaultPutResolver() { put(COL_STATUS, obj.status) put(COL_TRACKING_URL, obj.tracking_url) put(COL_SCORE, obj.score) + put(COL_START_DATE, obj.started_reading_date) + put(COL_FINISH_DATE, obj.finished_reading_date) } } @@ -71,6 +75,8 @@ class TrackGetResolver : DefaultGetResolver() { status = cursor.getInt(cursor.getColumnIndex(COL_STATUS)) score = cursor.getFloat(cursor.getColumnIndex(COL_SCORE)) tracking_url = cursor.getString(cursor.getColumnIndex(COL_TRACKING_URL)) + started_reading_date = cursor.getLong(cursor.getColumnIndex(COL_START_DATE)) + finished_reading_date = cursor.getLong(cursor.getColumnIndex(COL_FINISH_DATE)) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Track.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Track.kt index c64363efa0..986da74b9e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Track.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/Track.kt @@ -26,6 +26,10 @@ interface Track : Serializable { var tracking_url: String + var started_reading_date: Long + + var finished_reading_date: Long + fun copyPersonalFrom(other: Track) { last_chapter_read = other.last_chapter_read score = other.score diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/TrackImpl.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/TrackImpl.kt index 03a878e146..72b31323a0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/models/TrackImpl.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/models/TrackImpl.kt @@ -24,6 +24,10 @@ class TrackImpl : Track { override var tracking_url: String = "" + override var started_reading_date: Long = 0 + + override var finished_reading_date: Long = 0 + override fun equals(other: Any?): Boolean { if (this === other) return true if (other == null || javaClass != other.javaClass) return false diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/tables/TrackTable.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/tables/TrackTable.kt index 0a3ccf3442..c8dff441a4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/tables/TrackTable.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/tables/TrackTable.kt @@ -26,6 +26,10 @@ object TrackTable { const val COL_TRACKING_URL = "remote_url" + const val COL_START_DATE = "start_date" + + const val COL_FINISH_DATE = "finish_date" + val createTableQuery: String get() = """CREATE TABLE $TABLE( @@ -40,6 +44,8 @@ object TrackTable { $COL_STATUS INTEGER NOT NULL, $COL_SCORE FLOAT NOT NULL, $COL_TRACKING_URL TEXT NOT NULL, + $COL_START_DATE LONG NOT NULL, + $COL_FINISH_DATE LONG NOT NULL, UNIQUE ($COL_MANGA_ID, $COL_SYNC_ID) ON CONFLICT REPLACE, FOREIGN KEY($COL_MANGA_ID) REFERENCES ${MangaTable.TABLE} (${MangaTable.COL_ID}) ON DELETE CASCADE @@ -50,4 +56,10 @@ object TrackTable { val addLibraryId: String get() = "ALTER TABLE $TABLE ADD COLUMN $COL_LIBRARY_ID INTEGER NULL" + + val addStartDate: String + get() = "ALTER TABLE $TABLE ADD COLUMN $COL_START_DATE LONG NOT NULL DEFAULT 0" + + val addFinishDate: String + get() = "ALTER TABLE $TABLE ADD COLUMN $COL_FINISH_DATE LONG NOT NULL DEFAULT 0" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index fdb77c9a99..2d9d454e1e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -156,7 +156,10 @@ class PreferencesHelper(val context: Context) { fun backupsDirectory() = flowPrefs.getString(Keys.backupDirectory, defaultBackupDir.toString()) - fun dateFormat() = rxPrefs.getObject(Keys.dateFormat, DateFormat.getDateInstance(DateFormat.SHORT), DateFormatConverter()) + fun dateFormat(format: String = flowPrefs.getString(Keys.dateFormat, "").get()): DateFormat = when (format) { + "" -> DateFormat.getDateInstance(DateFormat.SHORT) + else -> SimpleDateFormat(format, Locale.getDefault()) + } fun downloadsDirectory() = rxPrefs.getString(Keys.downloadsDirectory, defaultDownloadsDir.toString()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt index fe6d91338d..9567557f60 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListApi.kt @@ -133,6 +133,12 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI .add("is_rereading", (track.status == MyAnimeList.REREADING).toString()) .add("score", track.score.toString()) .add("num_chapters_read", track.last_chapter_read.toString()) + convertToIsoDate(track.started_reading_date)?.let { + formBodyBuilder.add("start_date", it) + } + convertToIsoDate(track.finished_reading_date)?.let { + formBodyBuilder.add("finish_date", it) + } val request = Request.Builder() .url(mangaUrl(track.media_id).toString()) @@ -217,6 +223,12 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI status = if (isRereading) MyAnimeList.REREADING else getStatus(obj["status"]!!.jsonPrimitive.content) last_chapter_read = obj["num_chapters_read"]!!.jsonPrimitive.int score = obj["score"]!!.jsonPrimitive.int.toFloat() + obj["start_date"]?.let { + started_reading_date = parseDate(it.jsonPrimitive.content) + } + obj["finish_date"]?.let { + finished_reading_date = parseDate(it.jsonPrimitive.content) + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt index b96cdfc48d..6d09aab45c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt @@ -883,6 +883,18 @@ class MangaDetailsPresenter( updateRemote(track, item.service) } + fun setTrackerStartDate(item: TrackItem, date: Long) { + val track = item.track!! + track.started_reading_date = date + updateRemote(track, item.service) + } + + fun setTrackerFinishDate(item: TrackItem, date: Long) { + val track = item.track!! + track.finished_reading_date = date + updateRemote(track, item.service) + } + companion object { const val MULTIPLE_VOLUMES = 1 const val TENS_OF_CHAPTERS = 2 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackReadingDatesDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackReadingDatesDialog.kt new file mode 100644 index 0000000000..21539ba5fc --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/SetTrackReadingDatesDialog.kt @@ -0,0 +1,86 @@ +package eu.kanade.tachiyomi.ui.manga.track + +import android.app.Dialog +import android.os.Bundle +import androidx.core.os.bundleOf +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.datetime.datePicker +import com.bluelinelabs.conductor.Controller +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.database.models.Track +import eu.kanade.tachiyomi.data.track.TrackManager +import eu.kanade.tachiyomi.ui.base.controller.DialogController +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.util.Calendar + +class SetTrackReadingDatesDialog : DialogController + where T : Controller { + + private val item: TrackItem + + private val dateToUpdate: ReadingDate + + private lateinit var listener: Listener + + constructor(target: T, listener: Listener, dateToUpdate: ReadingDate, item: TrackItem) : super( + bundleOf(KEY_ITEM_TRACK to item.track) + ) { + targetController = target + this.listener = listener + this.item = item + this.dateToUpdate = dateToUpdate + } + + @Suppress("unused") + constructor(bundle: Bundle) : super(bundle) { + val track = bundle.getSerializable(KEY_ITEM_TRACK) as Track + val service = Injekt.get().getService(track.sync_id)!! + item = TrackItem(track, service) + dateToUpdate = ReadingDate.Start + } + + override fun onCreateDialog(savedViewState: Bundle?): Dialog { + return MaterialDialog(activity!!) + .title( + when (dateToUpdate) { + ReadingDate.Start -> R.string.started_reading_date + ReadingDate.Finish -> R.string.finished_reading_date + } + ) + .datePicker(currentDate = getCurrentDate()) { _, date -> + listener.setReadingDate(item, dateToUpdate, date.timeInMillis) + } + .neutralButton(R.string.remove) { + listener.setReadingDate(item, dateToUpdate, 0L) + } + } + + private fun getCurrentDate(): Calendar { + // Today if no date is set, otherwise the already set date + return Calendar.getInstance().apply { + item.track?.let { + val date = when (dateToUpdate) { + ReadingDate.Start -> it.started_reading_date + ReadingDate.Finish -> it.finished_reading_date + } + if (date != 0L) { + timeInMillis = date + } + } + } + } + + interface Listener { + fun setReadingDate(item: TrackItem, type: ReadingDate, date: Long) + } + + enum class ReadingDate { + Start, + Finish + } + + companion object { + private const val KEY_ITEM_TRACK = "SetTrackReadingDatesDialog.item.track" + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackHolder.kt index f94f32f15e..d18e6b87c3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackHolder.kt @@ -5,13 +5,21 @@ import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Track +import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.ui.base.holder.BaseViewHolder import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.util.view.visibleIf import kotlinx.android.synthetic.main.track_item.* +import uy.kohesive.injekt.injectLazy +import java.text.DateFormat class TrackHolder(view: View, adapter: TrackAdapter) : BaseViewHolder(view) { + private val preferences: PreferencesHelper by injectLazy() + private val dateFormat: DateFormat by lazy { + preferences.dateFormat() + } + init { val listener = adapter.rowClickListener logo_container.setOnClickListener { listener.onLogoClick(adapterPosition) } @@ -21,6 +29,8 @@ class TrackHolder(view: View, adapter: TrackAdapter) : BaseViewHolder(view) { track_status.setOnClickListener { listener.onStatusClick(adapterPosition) } track_chapters.setOnClickListener { listener.onChaptersClick(adapterPosition) } score_container.setOnClickListener { listener.onScoreClick(adapterPosition) } + track_start_date.setOnClickListener { listener.onStartDateClick(adapterPosition) } + track_finish_date.setOnClickListener { listener.onFinishDateClick(adapterPosition) } } @SuppressLint("SetTextI18n") @@ -59,6 +69,14 @@ class TrackHolder(view: View, adapter: TrackAdapter) : BaseViewHolder(view) { else track_status.text = item.service.getStatus(track.status) track_score.text = if (track.score == 0f) "-" else item.service.displayScore(track) track_score.setCompoundDrawablesWithIntrinsicBounds(0, 0, starIcon(track), 0) + date_group.visibleIf(item.service.supportsReadingDates) + if (item.service.supportsReadingDates) { + track_start_date.text = + if (track.started_reading_date != 0L) dateFormat.format(track.started_reading_date) else "-" + track_finish_date.text = + if (track.finished_reading_date != 0L) dateFormat.format(track.finished_reading_date) else "-" + } else { + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt index ca1ca640bf..04ba0e3cbe 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt @@ -26,7 +26,8 @@ class TrackingBottomSheet(private val controller: MangaDetailsController) : SetTrackStatusDialog.Listener, SetTrackChaptersDialog.Listener, SetTrackScoreDialog.Listener, - TrackRemoveDialog.Listener { + TrackRemoveDialog.Listener, + SetTrackReadingDatesDialog.Listener { val activity = controller.activity!! @@ -182,6 +183,20 @@ class TrackingBottomSheet(private val controller: MangaDetailsController) : SetTrackScoreDialog(this, item).showDialog(controller.router) } + override fun onStartDateClick(position: Int) { + val item = adapter?.getItem(position) ?: return + if (item.track == null) return + + SetTrackReadingDatesDialog(controller, this, SetTrackReadingDatesDialog.ReadingDate.Start, item).showDialog(controller.router) + } + + override fun onFinishDateClick(position: Int) { + val item = adapter?.getItem(position) ?: return + if (item.track == null) return + + SetTrackReadingDatesDialog(controller, this, SetTrackReadingDatesDialog.ReadingDate.Finish, item).showDialog(controller.router) + } + override fun setStatus(item: TrackItem, selection: Int) { presenter.setStatus(item, selection) refreshItem(item) @@ -218,7 +233,15 @@ class TrackingBottomSheet(private val controller: MangaDetailsController) : presenter.removeTracker(item, fromServiceAlso) } + override fun setReadingDate(item: TrackItem, type: SetTrackReadingDatesDialog.ReadingDate, date: Long) { + when (type) { + SetTrackReadingDatesDialog.ReadingDate.Start -> controller.presenter.setTrackerStartDate(item, date) + SetTrackReadingDatesDialog.ReadingDate.Finish -> controller.presenter.setTrackerFinishDate(item, date) + } + } + private companion object { const val TAG_SEARCH_CONTROLLER = "track_search_controller" } + } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadAdapter.kt index 7fb36dd4f4..0b75f0d94e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadAdapter.kt @@ -39,7 +39,9 @@ class RecentlyReadAdapter(controller: RecentlyReadController) : private val preferences: PreferencesHelper by injectLazy() - val dateFormat: DateFormat = preferences.dateFormat().getOrDefault() + val dateFormat: DateFormat by lazy { + preferences.dateFormat() + } interface OnResumeClickListener { fun onResumeClick(position: Int) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/AboutController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/AboutController.kt index 992dfe91c3..6923078470 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/AboutController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/AboutController.kt @@ -41,7 +41,9 @@ class AboutController : SettingsController() { private val userPreferences: PreferencesHelper by injectLazy() - private val dateFormat: DateFormat = userPreferences.dateFormat().getOrDefault() + private val dateFormat: DateFormat by lazy { + preferences.dateFormat() + } /** * The subscribtion service of the obtained release object diff --git a/app/src/main/res/layout/track_item.xml b/app/src/main/res/layout/track_item.xml index 7a7f42cd2d..85d4397b7b 100644 --- a/app/src/main/res/layout/track_item.xml +++ b/app/src/main/res/layout/track_item.xml @@ -84,7 +84,7 @@ android:layout_marginEnd="4dp" android:contentDescription="@string/open_in_webview" android:src="@drawable/ic_close_circle_24dp" - android:tint="@color/text_color_secondary" + app:tint="@color/text_color_secondary" android:tooltipText="@string/remove_tracking" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -124,7 +124,6 @@ android:paddingTop="16dp" android:paddingEnd="6dp" android:paddingBottom="16dp" - app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/track_chapters" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -134,13 +133,14 @@ android:id="@+id/track_chapters" style="@style/TextAppearance.Regular.Body1.Secondary" android:layout_width="0dp" - android:layout_height="0dp" + android:layout_height="wrap_content" android:background="@drawable/card_item_selector" android:gravity="center" android:maxLines="2" + android:paddingTop="16dp" + android:paddingBottom="16dp" android:paddingStart="6dp" android:paddingEnd="6dp" - app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/score_container" app:layout_constraintStart_toEndOf="@id/track_status" app:layout_constraintTop_toTopOf="parent" @@ -149,9 +149,10 @@ @@ -162,9 +163,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:drawableEnd="@drawable/ic_star_12dp" - android:drawableTint="?android:attr/textColorPrimary" - tools:text="10" /> + app:drawableTint="?android:attr/textColorPrimary" + tools:text="10" + app:drawableEndCompat="@drawable/ic_star_12dp" /> @@ -186,10 +187,69 @@ android:layout_marginBottom="10dp" android:alpha="0.25" android:background="@color/strong_divider" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@+id/bottom_divider" app:layout_constraintEnd_toStartOf="@id/score_container" app:layout_constraintStart_toEndOf="@+id/track_chapters" app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + Kitsu Bangumi Shikimori + Started reading date + Finished reading date Please login to MAL again