diff --git a/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/Crop.kt b/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/Crop.kt new file mode 100644 index 000000000..a3ff9eedc --- /dev/null +++ b/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/Crop.kt @@ -0,0 +1,39 @@ +package com.hippo.ehviewer.icons.filled + +import androidx.compose.material.icons.materialIcon +import androidx.compose.material.icons.materialPath +import com.hippo.ehviewer.icons.EhIcons +import com.hippo.ehviewer.util.unsafeLazy + +val EhIcons.Filled.Crop by unsafeLazy { + materialIcon(name = "Crop") { + materialPath { + moveTo(17.0F, 15.0F) + horizontalLineToRelative(2.0F) + verticalLineTo(7.0F) + curveToRelative(0.0F, -1.1F, -0.9F, -2.0F, -2.0F, -2.0F) + horizontalLineTo(9.0F) + verticalLineToRelative(2.0F) + horizontalLineToRelative(8.0F) + verticalLineToRelative(8.0F) + close() + moveTo(7.0F, 17.0F) + verticalLineTo(1.0F) + horizontalLineTo(5.0F) + verticalLineToRelative(4.0F) + horizontalLineTo(1.0F) + verticalLineToRelative(2.0F) + horizontalLineToRelative(4.0F) + verticalLineToRelative(10.0F) + curveToRelative(0.0F, 1.1F, 0.9F, 2.0F, 2.0F, 2.0F) + horizontalLineToRelative(10.0F) + verticalLineToRelative(4.0F) + horizontalLineToRelative(2.0F) + verticalLineToRelative(-4.0F) + horizontalLineToRelative(4.0F) + verticalLineToRelative(-2.0F) + horizontalLineTo(7.0F) + close() + } + } +} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/CropOff.kt b/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/CropOff.kt new file mode 100644 index 000000000..c4fdc4893 --- /dev/null +++ b/app/src/main/kotlin/com/hippo/ehviewer/icons/filled/CropOff.kt @@ -0,0 +1,60 @@ +package com.hippo.ehviewer.icons.filled + +import androidx.compose.material.icons.materialIcon +import androidx.compose.material.icons.materialPath +import com.hippo.ehviewer.icons.EhIcons +import com.hippo.ehviewer.util.unsafeLazy + +val EhIcons.Filled.CropOff by unsafeLazy { + materialIcon(name = "CropOff") { + materialPath { + moveTo(7.0F, 1.0F) + lineToRelative(-2.0F, 0.0F) + lineToRelative(0.0F, 1.18F) + lineToRelative(2.0F, 2.0F) + lineToRelative(0.0F, -3.18F) + close() + moveTo(17.0F, 7.0F) + verticalLineToRelative(7.18F) + lineToRelative(0.82F, 0.82F) + horizontalLineTo(19.0F) + verticalLineTo(7.0F) + arcToRelative(2.0059F, 2.0059F, 0.0F, false, false, -2.0F, -2.0F) + horizontalLineTo(9.0F) + verticalLineTo(6.18F) + lineTo(9.82F, 7.0F) + close() + moveTo(19.0001F, 19.0F) + lineToRelative(-2.0F, -2.0F) + horizontalLineToRelative(0.0F) + lineTo(2.1F, 2.1F) + lineTo(0.68F, 3.51F) + lineTo(2.1707F, 5.0F) + horizontalLineTo(1.0F) + verticalLineTo(7.0F) + horizontalLineTo(4.1718F) + lineTo(5.0F, 7.8278F) + verticalLineTo(17.0F) + arcToRelative(2.0059F, 2.0059F, 0.0F, false, false, 2.0F, 2.0F) + horizontalLineToRelative(9.1778F) + lineTo(17.0F, 19.8218F) + verticalLineTo(23.0F) + horizontalLineToRelative(2.0F) + verticalLineTo(21.8207F) + lineTo(20.49F, 23.31F) + lineTo(21.9F, 21.9F) + lineToRelative(-2.9F, -2.9F) + close() + moveTo(7.0F, 17.0F) + verticalLineTo(9.8268F) + lineTo(14.1768F, 17.0F) + close() + moveTo(19.82F, 17.0F) + lineToRelative(2.0F, 2.0F) + lineToRelative(1.18F, 0.0F) + lineToRelative(0.0F, -2.0F) + lineToRelative(-3.18F, 0.0F) + close() + } + } +} diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt index ef12f3ec0..0397e6db5 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/BottomReaderBar.kt @@ -33,6 +33,9 @@ import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings import com.hippo.ehviewer.asMutableState import com.hippo.ehviewer.collectAsState +import com.hippo.ehviewer.icons.EhIcons +import com.hippo.ehviewer.icons.filled.Crop +import com.hippo.ehviewer.icons.filled.CropOff import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType @@ -110,11 +113,9 @@ fun BottomReaderBar(onClickSettings: () -> Unit) { ) } var cropBorder by Settings.cropBorder.asMutableState() - val crop = painterResource(R.drawable.ic_crop_24dp) - val cropOff = painterResource(R.drawable.ic_crop_off_24dp) IconButton(onClick = { cropBorder = !cropBorder }) { Icon( - painter = if (cropBorder) crop else cropOff, + imageVector = if (cropBorder) EhIcons.Default.Crop else EhIcons.Default.CropOff, contentDescription = stringResource(R.string.pref_crop_borders), ) } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index c1ed7e842..6bd20aa98 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -146,7 +146,7 @@ class ReaderActivity : EhActivity() { * Whether the menu is currently visible. */ var menuVisible by mutableStateOf(false) - var mGalleryProvider by lazyMut { vm::galleryProvider } + private var mGalleryProvider by lazyMut { vm::galleryProvider } private var mCurrentIndex: Int = 0 private val galleryDetailUrl: String? @@ -338,7 +338,18 @@ class ReaderActivity : EhActivity() { initializeMenu() } - fun setGallery() { + fun retryPage(index: Int, orgImg: Boolean = false) { + mGalleryProvider?.retryPage(index, orgImg) + } + + fun restartGalleryProvider() { + mGalleryProvider?.let { + it.restart() + viewer?.refreshAdapter() + } + } + + private fun setGallery() { if (mGalleryProvider?.isReady != true) return // Get start page diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt index 321b03f3c..af2b98972 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt @@ -43,10 +43,10 @@ fun ReaderPageSheet(page: ReaderPage, dismiss: () -> Unit) { Text(text = stringResource(id = text)) } Item(icon = Icons.Default.Refresh, text = R.string.refresh) { - activity.mGalleryProvider?.retryPage(page.index) + activity.retryPage(page.index) } Item(icon = Icons.Default.Refresh, text = R.string.refresh_original) { - activity.mGalleryProvider?.retryPage(page.index, true) + activity.retryPage(page.index, true) } Item(icon = Icons.Default.Share, text = R.string.action_share) { activity.shareImage(page.index) diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt index 2bc41bfa0..c3863aec4 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/loader/PageLoader.kt @@ -58,7 +58,7 @@ abstract class PageLoader { preloadPages(pagesAbsent, (index - 10).coerceAtLeast(0) to (mPreloads + index + 10).coerceAtMost(size)) } - fun retryPage(index: Int, orgImg: Boolean = false) { + fun retryPage(index: Int, orgImg: Boolean) { notifyPageWait(index) onForceRequest(index, orgImg) } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt index 700256e48..9bb5080f6 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/setting/ReaderColorFilterSettings.kt @@ -47,10 +47,7 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr val activity = context as ReaderActivity readerPreferences.cropBorders().asHotFlow { - with(activity) { - mGalleryProvider?.restart() - setGallery() - } + activity.restartGalleryProvider() }.launchIn(activity.lifecycleScope) readerPreferences.wideColorGamut().asHotFlow { @@ -59,8 +56,7 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr with(activity) { if (window.colorMode != colorMode) { window.colorMode = colorMode - mGalleryProvider?.restart() - setGallery() + restartGalleryProvider() } } }.launchIn(activity.lifecycleScope) diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/BaseViewer.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/BaseViewer.kt index ec40e3266..50ed5e6d1 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/BaseViewer.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/BaseViewer.kt @@ -42,4 +42,6 @@ interface BaseViewer { * return true if the event was handled, false otherwise. */ fun handleGenericMotionEvent(event: MotionEvent): Boolean + + fun refreshAdapter() } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt index 02758495b..8ef7befd3 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt @@ -202,7 +202,7 @@ class PagerPageHolder( errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), this, true) errorLayout?.actionRetry?.viewer = viewer errorLayout?.actionRetry?.setOnClickListener { - viewer.activity.mGalleryProvider?.retryPage(page.index) + viewer.activity.retryPage(page.index) } } page.errorMsg?.let { errorLayout!!.errorMessage.text = it } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt index 71fce9ade..599d4272c 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerViewer.kt @@ -276,11 +276,15 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer { moveToNext() } + override fun refreshAdapter() { + refreshAdapter(pager.currentItem) + } + /** * Resets the adapter in order to recreate all the views. Used when a image configuration is * changed. */ - private fun refreshAdapter(currentItem: Int = pager.currentItem) { + private fun refreshAdapter(currentItem: Int) { adapter.refresh() pager.adapter = adapter pager.setCurrentItem(currentItem, false) diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt index a53b9268d..724aee0b1 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt @@ -252,7 +252,7 @@ class WebtoonPageHolder( errorLayout = ReaderErrorBinding.inflate(LayoutInflater.from(context), frame, true) errorLayout?.root?.layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, defaultHeight) errorLayout?.actionRetry?.setOnClickListener { - viewer.activity.mGalleryProvider?.retryPage(page!!.index) + viewer.activity.retryPage(page!!.index) } } page?.errorMsg?.let { errorLayout!!.errorMessage.text = it } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt index 0a051418f..0bc9e1919 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt @@ -259,11 +259,15 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr return false } + override fun refreshAdapter() { + refreshAdapter(layoutManager.findLastEndVisibleItemPosition()) + } + /** * Notifies adapter of changes around the current page to trigger a relayout in the recycler. * Used when an image configuration is changed. */ - private fun refreshAdapter(position: Int = layoutManager.findLastEndVisibleItemPosition()) { + private fun refreshAdapter(position: Int) { val positionStart = maxOf(0, position - 3) val positionEnd = minOf(position + 3, adapter.itemCount - 1) adapter.refresh() diff --git a/app/src/main/res/drawable/ic_crop_24dp.xml b/app/src/main/res/drawable/ic_crop_24dp.xml deleted file mode 100644 index cc9409940..000000000 --- a/app/src/main/res/drawable/ic_crop_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_crop_off_24dp.xml b/app/src/main/res/drawable/ic_crop_off_24dp.xml deleted file mode 100644 index 50be29bff..000000000 --- a/app/src/main/res/drawable/ic_crop_off_24dp.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 53220c1f1..ffd63a0e1 100755 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -264,7 +264,6 @@ Download-Elemente wiederherstellen Alle Download-Elemente im Downloadpfad wiederherstellen Keine zu wiederhestellenden Elemente - Wiederherstellung gescheitert %d Element(e) wiederhergestellt Unnötige Dateien löschen Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadliste, löschen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 33a37cb6e..de37e3b55 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -295,7 +295,6 @@ Restaurar los elementos de descarga Restaurar todos los elementos de descarga en la ruta de descarga No se han encontrado elementos para restaurar - Restauración fallida Restauración de %d elementos completados Borrar imágenes sobrantes Elimina las imágenes almacenadas en la ruta de descarga que no se encuentran en la lista de descarga diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5b5f68ff3..92d39a77e 100755 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -330,7 +330,6 @@ Rétablir les galeries téléchargées Rétablir tous objets déjà téléchargés dans la destination de téléchargement Aucun objet trouvé à rétablir - Échec de rétablissement %d objets rétablis avec succès Effacer fiches inutiles de téléchargement Effacer les fiches des galeries qui ne sont pas dans la liste de téléchargement mais se trouvent dans la destination de téléchargement diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2d746ab23..8bfcf7af7 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -328,7 +328,6 @@ ダウンロードタスクを復元 ダウンロードディレクトリのダウンロードタスクを復元 復元可能なダウンロードが見つかりません - 復元できませんでした %d件のタスクが復元されました ダウンロードフォルダの不要なファイルを整理 ダウンロードディレクトリからダウンロードタスクにない画像ファイルを削除 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 357ad20db..ef68849ea 100755 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -303,7 +303,6 @@ 다운로드 항목 복구 다운로드 위치에 존재하는 모든 다운로드 항목 복구 복구할 다운로드 항목을 찾을 수 없습니다. - 복구하지 못했습니다. %d개 항목을 복구했습니다. 잉여 파일 삭제 다운로드 위치에 존재하지만 다운로드 목록에는 없는 갤러리 이미지 제거 diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index fd1e6da1c..c666ed9f7 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -318,7 +318,6 @@ คืนรายการดาวน์โหลด คืนรายการดาวน์โหลดทั้งหมดในแหล่งดาวน์โหลด ไม่พบรายการดาวน์โหลดที่จะคืนค่า - การคืนค่าล้มเหลว การคืนค่า %d รายการสำเร็จแล้ว ลบการดาวน์โหลดที่ไม่จำเป็น ลบรูปภาพแกลเลอรี่ที่ไม่ได้อยู่ในรายการดาวน์โหลด แต่อยู่ในแหล่งดาวน์โหลด diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b06a9b438..58ca6ff48 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -103,7 +103,6 @@ 已存在相同的快速搜索,名称为“%s”。 已存在相同名称 保存进度 - 删除快速搜索“%s”? 第 %1$d 页,共 %2$d 页 不限 @@ -263,7 +262,6 @@ “默认”是无效标签 标签已存在 重命名标签 - 删除标签“%s”? 这里是阅读历史 全部清除 @@ -348,7 +346,6 @@ 恢复下载项 恢复下载目录里的所有下载项 未找到可恢复下载项 - 恢复失败 成功恢复 %d 项 清理下载冗余 清理下载目录中不在下载列表里的图片文件 @@ -511,7 +508,6 @@ 详情模式下缩略图大小 账户 激进地预载缩略图 - 启用预见式返回导航动画 自动检查更新 从不 每天 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 710d76057..65805aca5 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -353,7 +353,6 @@ 恢復下載項 恢復下載目錄裏的所有下載項 未找到可恢復下載項 - 恢復失敗 成功恢復 %d 項 清理下載宂餘 清理下載目錄中不在下載列表裏的圖片文件 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f0366c948..920390696 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -103,7 +103,6 @@ 已存在相同的快速搜尋,名稱為“%s”。 已經由重複的名稱了 儲存進度 - 刪除快速搜尋“%s”? 第 %1$d 頁,共 %2$d 頁 不限 @@ -263,7 +262,6 @@ “預設”是無效的標籤 標籤已存在 重新命名標籤 - 刪除標籤“%s”? 歷史紀錄將會顯示在這裡 全部清除 @@ -346,7 +344,6 @@ 復原下載的檔案 復原下載路徑中的所有下載的檔案 未尋獲可復原的已下載檔案 - 復原失敗 成功復原 %d 項 清除冗餘的檔案 清除已下載但不在下載列表中的圖檔 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b725e8d5c..ed085a964 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -143,7 +143,6 @@ A duplicate quick search exists. The name is \"%s\". This name is already in use. Save progress - Delete quick search \"%s\"? Page %1$d, total %2$d pages Any @@ -305,7 +304,6 @@ \"Default\" is an invalid label Label exists Rename label - Delete label \"%s\"? Viewed galleries will be shown here Clear all @@ -392,7 +390,6 @@ Restore download items Restore all download items in download location Not found download items to restore - Restore failed Restore %d items successfully Clear download redundancy Remove gallery images which are not in download list but in download location @@ -574,7 +571,6 @@ Thumb size in thumb mode Account Preload thumbs aggressively - Enable predictive back navigation animation User Agent Automatically check for updates Never