Refine crop border (#573)

* Refresh adapter instead of recreate viewer

* Convert crop broder icons to ImageVector

* Cleanup res
This commit is contained in:
FooIbar authored and GitHub committed 2023-12-31 07:42:01 +00:00
1 parent c817726ab3
commit df8ae8d11a
24 files changed
+135 -63

No files matched your search

@@ -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()
}
}
}
@@ -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()
}
}
}
@@ -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),
)
}
@@ -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
@@ -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)
@@ -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)
}
@@ -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)
@@ -42,4 +42,6 @@ interface BaseViewer {
* return true if the event was handled, false otherwise.
*/
fun handleGenericMotionEvent(event: MotionEvent): Boolean
fun refreshAdapter()
}
@@ -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 }
@@ -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)
@@ -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 }
@@ -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()
@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000"
android:pathData="M17,15h2V7c0,-1.1 -0.9,-2 -2,-2H9v2h8v8zM7,17V1H5v4H1v2h4v10c0,1.1 0.9,2 2,2h10v4h2v-4h4v-2H7z" />
</vector>
@@ -1,18 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000"
android:pathData="M7,1l-2,0l0,1.18l2,2l0,-3.18z" />
<path
android:fillColor="#000"
android:pathData="M17,7v7.18l0.82,0.82H19V7a2.0059,2.0059 0,0 0,-2 -2H9V6.18L9.82,7Z" />
<path
android:fillColor="#000"
android:pathData="M19.0001,19l-2,-2h0L2.1,2.1 0.68,3.51 2.1707,5H1V7H4.1718L5,7.8278V17a2.0059,2.0059 0,0 0,2 2h9.1778L17,19.8218V23h2V21.8207L20.49,23.31 21.9,21.9l-2.9,-2.9ZM7,17V9.8268L14.1768,17Z" />
<path
android:fillColor="#000"
android:pathData="M19.82,17l2,2l1.18,0l0,-2l-3.18,0z" />
</vector>
-1
View File
@@ -264,7 +264,6 @@
<string name="settings_download_restore_download_items">Download-Elemente wiederherstellen</string>
<string name="settings_download_restore_download_items_summary">Alle Download-Elemente im Downloadpfad wiederherstellen</string>
<string name="settings_download_restore_not_found">Keine zu wiederhestellenden Elemente</string>
<string name="settings_download_restore_failed">Wiederherstellung gescheitert</string>
<string name="settings_download_restore_successfully">%d Element(e) wiederhergestellt</string>
<string name="settings_download_clean_redundancy">Unnötige Dateien löschen</string>
<string name="settings_download_clean_redundancy_summary">Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadliste, löschen</string>
-1
View File
@@ -295,7 +295,6 @@
<string name="settings_download_restore_download_items">Restaurar los elementos de descarga</string>
<string name="settings_download_restore_download_items_summary">Restaurar todos los elementos de descarga en la ruta de descarga</string>
<string name="settings_download_restore_not_found">No se han encontrado elementos para restaurar</string>
<string name="settings_download_restore_failed">Restauración fallida</string>
<string name="settings_download_restore_successfully">Restauración de %d elementos completados</string>
<string name="settings_download_clean_redundancy">Borrar imágenes sobrantes</string>
<string name="settings_download_clean_redundancy_summary">Elimina las imágenes almacenadas en la ruta de descarga que no se encuentran en la lista de descarga</string>
-1
View File
@@ -330,7 +330,6 @@
<string name="settings_download_restore_download_items">Rétablir les galeries téléchargées</string>
<string name="settings_download_restore_download_items_summary">Rétablir tous objets déjà téléchargés dans la destination de téléchargement</string>
<string name="settings_download_restore_not_found">Aucun objet trouvé à rétablir</string>
<string name="settings_download_restore_failed">Échec de rétablissement</string>
<string name="settings_download_restore_successfully">%d objets rétablis avec succès</string>
<string name="settings_download_clean_redundancy">Effacer fiches inutiles de téléchargement</string>
<string name="settings_download_clean_redundancy_summary">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</string>
-1
View File
@@ -328,7 +328,6 @@
<string name="settings_download_restore_download_items">ダウンロードタスクを復元</string>
<string name="settings_download_restore_download_items_summary">ダウンロードディレクトリのダウンロードタスクを復元</string>
<string name="settings_download_restore_not_found">復元可能なダウンロードが見つかりません</string>
<string name="settings_download_restore_failed">復元できませんでした</string>
<string name="settings_download_restore_successfully">%d件のタスクが復元されました</string>
<string name="settings_download_clean_redundancy">ダウンロードフォルダの不要なファイルを整理</string>
<string name="settings_download_clean_redundancy_summary">ダウンロードディレクトリからダウンロードタスクにない画像ファイルを削除</string>
-1
View File
@@ -303,7 +303,6 @@
<string name="settings_download_restore_download_items">다운로드 항목 복구</string>
<string name="settings_download_restore_download_items_summary">다운로드 위치에 존재하는 모든 다운로드 항목 복구</string>
<string name="settings_download_restore_not_found">복구할 다운로드 항목을 찾을 수 없습니다.</string>
<string name="settings_download_restore_failed">복구하지 못했습니다.</string>
<string name="settings_download_restore_successfully">%d개 항목을 복구했습니다.</string>
<string name="settings_download_clean_redundancy">잉여 파일 삭제</string>
<string name="settings_download_clean_redundancy_summary">다운로드 위치에 존재하지만 다운로드 목록에는 없는 갤러리 이미지 제거</string>
-1
View File
@@ -318,7 +318,6 @@
<string name="settings_download_restore_download_items">คืนรายการดาวน์โหลด</string>
<string name="settings_download_restore_download_items_summary">คืนรายการดาวน์โหลดทั้งหมดในแหล่งดาวน์โหลด</string>
<string name="settings_download_restore_not_found">ไม่พบรายการดาวน์โหลดที่จะคืนค่า</string>
<string name="settings_download_restore_failed">การคืนค่าล้มเหลว</string>
<string name="settings_download_restore_successfully">การคืนค่า %d รายการสำเร็จแล้ว</string>
<string name="settings_download_clean_redundancy">ลบการดาวน์โหลดที่ไม่จำเป็น</string>
<string name="settings_download_clean_redundancy_summary">ลบรูปภาพแกลเลอรี่ที่ไม่ได้อยู่ในรายการดาวน์โหลด แต่อยู่ในแหล่งดาวน์โหลด</string>
@@ -103,7 +103,6 @@
<string name="duplicate_quick_search">已存在相同的快速搜索,名称为“%s”。</string>
<string name="duplicate_name">已存在相同名称</string>
<string name="save_progress">保存进度</string>
<string name="delete_quick_search">删除快速搜索“%s”?</string>
<string name="go_to_hint">第 %1$d 页,共 %2$d 页</string>
<!-- search_min_rating -->
<string name="any">不限</string>
@@ -263,7 +262,6 @@
<string name="label_text_is_invalid">“默认”是无效标签</string>
<string name="label_text_exist">标签已存在</string>
<string name="rename_label_title">重命名标签</string>
<string name="delete_label">删除标签“%s”?</string>
<!-- History -->
<string name="no_history">这里是阅读历史</string>
<string name="clear_all">全部清除</string>
@@ -348,7 +346,6 @@
<string name="settings_download_restore_download_items">恢复下载项</string>
<string name="settings_download_restore_download_items_summary">恢复下载目录里的所有下载项</string>
<string name="settings_download_restore_not_found">未找到可恢复下载项</string>
<string name="settings_download_restore_failed">恢复失败</string>
<string name="settings_download_restore_successfully">成功恢复 %d 项</string>
<string name="settings_download_clean_redundancy">清理下载冗余</string>
<string name="settings_download_clean_redundancy_summary">清理下载目录中不在下载列表里的图片文件</string>
@@ -511,7 +508,6 @@
<string name="list_tile_thumb_size">详情模式下缩略图大小</string>
<string name="account_name">账户</string>
<string name="preload_thumb_aggressively">激进地预载缩略图</string>
<string name="predictive_nav_anim">启用预见式返回导航动画</string>
<string name="auto_updates">自动检查更新</string>
<string name="update_frequency_never">从不</string>
<string name="update_frequency_daily">每天</string>
@@ -353,7 +353,6 @@
<string name="settings_download_restore_download_items">恢復下載項</string>
<string name="settings_download_restore_download_items_summary">恢復下載目錄裏的所有下載項</string>
<string name="settings_download_restore_not_found">未找到可恢復下載項</string>
<string name="settings_download_restore_failed">恢復失敗</string>
<string name="settings_download_restore_successfully">成功恢復 %d 項</string>
<string name="settings_download_clean_redundancy">清理下載宂餘</string>
<string name="settings_download_clean_redundancy_summary">清理下載目錄中不在下載列表裏的圖片文件</string>
@@ -103,7 +103,6 @@
<string name="duplicate_quick_search">已存在相同的快速搜尋,名稱為“%s”。</string>
<string name="duplicate_name">已經由重複的名稱了</string>
<string name="save_progress">儲存進度</string>
<string name="delete_quick_search">刪除快速搜尋“%s”?</string>
<string name="go_to_hint">第 %1$d 頁,共 %2$d 頁</string>
<!-- search_min_rating -->
<string name="any">不限</string>
@@ -263,7 +262,6 @@
<string name="label_text_is_invalid">“預設”是無效的標籤</string>
<string name="label_text_exist">標籤已存在</string>
<string name="rename_label_title">重新命名標籤</string>
<string name="delete_label">刪除標籤“%s”?</string>
<!-- History -->
<string name="no_history">歷史紀錄將會顯示在這裡</string>
<string name="clear_all">全部清除</string>
@@ -346,7 +344,6 @@
<string name="settings_download_restore_download_items">復原下載的檔案</string>
<string name="settings_download_restore_download_items_summary">復原下載路徑中的所有下載的檔案</string>
<string name="settings_download_restore_not_found">未尋獲可復原的已下載檔案</string>
<string name="settings_download_restore_failed">復原失敗</string>
<string name="settings_download_restore_successfully">成功復原 %d 項</string>
<string name="settings_download_clean_redundancy">清除冗餘的檔案</string>
<string name="settings_download_clean_redundancy_summary">清除已下載但不在下載列表中的圖檔</string>
-4
View File
@@ -143,7 +143,6 @@
<string name="duplicate_quick_search">A duplicate quick search exists. The name is \"%s\".</string>
<string name="duplicate_name">This name is already in use.</string>
<string name="save_progress">Save progress</string>
<string name="delete_quick_search">Delete quick search \"%s\"?</string>
<string name="go_to_hint">Page %1$d, total %2$d pages</string>
<!-- search_min_rating -->
<string name="any">Any</string>
@@ -305,7 +304,6 @@
<string name="label_text_is_invalid">\"Default\" is an invalid label</string>
<string name="label_text_exist">Label exists</string>
<string name="rename_label_title">Rename label</string>
<string name="delete_label">Delete label \"%s\"?</string>
<!-- History -->
<string name="no_history">Viewed galleries will be shown here</string>
<string name="clear_all">Clear all</string>
@@ -392,7 +390,6 @@
<string name="settings_download_restore_download_items">Restore download items</string>
<string name="settings_download_restore_download_items_summary">Restore all download items in download location</string>
<string name="settings_download_restore_not_found">Not found download items to restore</string>
<string name="settings_download_restore_failed">Restore failed</string>
<string name="settings_download_restore_successfully">Restore %d items successfully</string>
<string name="settings_download_clean_redundancy">Clear download redundancy</string>
<string name="settings_download_clean_redundancy_summary">Remove gallery images which are not in download list but in download location</string>
@@ -574,7 +571,6 @@
<string name="list_tile_thumb_size">Thumb size in thumb mode</string>
<string name="account_name">Account</string>
<string name="preload_thumb_aggressively">Preload thumbs aggressively</string>
<string name="predictive_nav_anim">Enable predictive back navigation animation</string>
<string name="user_agent">User Agent</string>
<string name="auto_updates">Automatically check for updates</string>
<string name="update_frequency_never">Never</string>