gitextract_9ap85jiu/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── 01-bugReport.yml │ │ ├── 02-featureRequest.yml │ │ └── config.yml │ ├── dependabot.yml │ ├── scripts/ │ │ ├── cronet.sh │ │ ├── lzy_web.py │ │ └── tg_bot.py │ └── workflows/ │ ├── autoupdatefork.yml │ ├── cronet.yml │ ├── legado.jks │ ├── release.yml │ ├── stale.yml │ ├── test.yml │ └── web.yml ├── .gitignore ├── CHANGELOG.md ├── English.md ├── LICENSE ├── README.md ├── api.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── cronet-proguard-rules.pro │ ├── cronetlib/ │ │ ├── cronet_api.jar │ │ ├── cronet_impl_common_java.jar │ │ ├── cronet_impl_native_java.jar │ │ ├── cronet_impl_platform_java.jar │ │ └── cronet_shared_java.jar │ ├── download.gradle │ ├── google-services.json │ ├── proguard-rules.pro │ ├── schemas/ │ │ └── io.legado.app.data.AppDatabase/ │ │ ├── 1.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 16.json │ │ ├── 17.json │ │ ├── 18.json │ │ ├── 19.json │ │ ├── 2.json │ │ ├── 20.json │ │ ├── 21.json │ │ ├── 22.json │ │ ├── 23.json │ │ ├── 24.json │ │ ├── 25.json │ │ ├── 26.json │ │ ├── 27.json │ │ ├── 28.json │ │ ├── 29.json │ │ ├── 3.json │ │ ├── 30.json │ │ ├── 31.json │ │ ├── 32.json │ │ ├── 33.json │ │ ├── 34.json │ │ ├── 35.json │ │ ├── 36.json │ │ ├── 37.json │ │ ├── 38.json │ │ ├── 39.json │ │ ├── 4.json │ │ ├── 40.json │ │ ├── 41.json │ │ ├── 42.json │ │ ├── 43.json │ │ ├── 44.json │ │ ├── 45.json │ │ ├── 46.json │ │ ├── 47.json │ │ ├── 48.json │ │ ├── 49.json │ │ ├── 5.json │ │ ├── 50.json │ │ ├── 51.json │ │ ├── 52.json │ │ ├── 53.json │ │ ├── 54.json │ │ ├── 55.json │ │ ├── 56.json │ │ ├── 57.json │ │ ├── 58.json │ │ ├── 59.json │ │ ├── 6.json │ │ ├── 60.json │ │ ├── 61.json │ │ ├── 62.json │ │ ├── 63.json │ │ ├── 64.json │ │ ├── 65.json │ │ ├── 66.json │ │ ├── 67.json │ │ ├── 68.json │ │ ├── 69.json │ │ ├── 7.json │ │ ├── 70.json │ │ ├── 71.json │ │ ├── 72.json │ │ ├── 73.json │ │ ├── 74.json │ │ ├── 75.json │ │ ├── 8.json │ │ └── 9.json │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── io/ │ │ └── legado/ │ │ └── app/ │ │ ├── AndroidJsTest.kt │ │ ├── ExampleInstrumentedTest.kt │ │ ├── HttpTest.kt │ │ ├── HttpTtsTest.kt │ │ ├── MigrationTest.kt │ │ └── UpdateTest.kt │ ├── debug/ │ │ └── res/ │ │ ├── values/ │ │ │ └── strings.xml │ │ └── values-zh/ │ │ └── strings.xml │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── assets/ │ │ │ ├── 18PlusList.txt │ │ │ ├── LICENSE.md │ │ │ ├── cronet.json │ │ │ ├── defaultData/ │ │ │ │ ├── bookSources.json │ │ │ │ ├── coverRule.json │ │ │ │ ├── dictRules.json │ │ │ │ ├── directLinkUpload.json │ │ │ │ ├── httpTTS.json │ │ │ │ ├── keyboardAssists.json │ │ │ │ ├── readConfig.json │ │ │ │ ├── rssSources.json │ │ │ │ ├── themeConfig.json │ │ │ │ └── txtTocRule.json │ │ │ ├── disclaimer.md │ │ │ ├── epub/ │ │ │ │ ├── chapter.html │ │ │ │ ├── cover.html │ │ │ │ ├── fonts.css │ │ │ │ ├── intro.html │ │ │ │ └── main.css │ │ │ ├── privacyPolicy.md │ │ │ ├── storageHelp.md │ │ │ ├── updateLog.md │ │ │ └── web/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── main.css │ │ │ │ └── js/ │ │ │ │ ├── dist.js │ │ │ │ └── md5.js │ │ │ ├── help/ │ │ │ │ ├── index.html │ │ │ │ ├── js/ │ │ │ │ │ ├── main.js │ │ │ │ │ ├── marked-highlight.umd.js │ │ │ │ │ └── require.js │ │ │ │ └── md/ │ │ │ │ ├── ExtensionContentType.md │ │ │ │ ├── SourceMBookHelp.md │ │ │ │ ├── SourceMRssHelp.md │ │ │ │ ├── appHelp.md │ │ │ │ ├── debugHelp.md │ │ │ │ ├── dictRuleHelp.md │ │ │ │ ├── httpTTSHelp.md │ │ │ │ ├── jsHelp.md │ │ │ │ ├── readMenuHelp.md │ │ │ │ ├── regexHelp.md │ │ │ │ ├── replaceRuleHelp.md │ │ │ │ ├── ruleHelp.md │ │ │ │ ├── txtTocRuleHelp.md │ │ │ │ ├── webDavBookHelp.md │ │ │ │ ├── webDavHelp.md │ │ │ │ └── xpathHelp.md │ │ │ ├── index.html │ │ │ ├── uploadBook/ │ │ │ │ ├── css/ │ │ │ │ │ └── wifi_send.css │ │ │ │ ├── index.html │ │ │ │ └── js/ │ │ │ │ ├── common.js │ │ │ │ └── html5_fun.js │ │ │ └── vue/ │ │ │ ├── assets/ │ │ │ │ ├── BookChapter-BsiFtdIw.css │ │ │ │ ├── BookChapter-Cs3stH93.js │ │ │ │ ├── BookShelf-00b2QCsd.css │ │ │ │ ├── BookShelf-DIQtBULC.js │ │ │ │ ├── index-CrxHVQK7.css │ │ │ │ ├── index-Wr40-hHf.js │ │ │ │ ├── loading-C4J6hIxs.js │ │ │ │ ├── loading-DkQYEuap.css │ │ │ │ ├── vendor-CXe1BRiH.css │ │ │ │ └── vendor-KSDcS24u.js │ │ │ └── index.html │ │ ├── java/ │ │ │ └── io/ │ │ │ └── legado/ │ │ │ └── app/ │ │ │ ├── App.kt │ │ │ ├── README.md │ │ │ ├── api/ │ │ │ │ ├── ReaderProvider.kt │ │ │ │ ├── ReturnData.kt │ │ │ │ ├── ShortCuts.kt │ │ │ │ └── controller/ │ │ │ │ ├── BookController.kt │ │ │ │ ├── BookSourceController.kt │ │ │ │ ├── ReplaceRuleController.kt │ │ │ │ └── RssSourceController.kt │ │ │ ├── base/ │ │ │ │ ├── AppContextWrapper.kt │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── BaseDialogFragment.kt │ │ │ │ ├── BaseFragment.kt │ │ │ │ ├── BasePrefDialogFragment.kt │ │ │ │ ├── BaseService.kt │ │ │ │ ├── BaseViewModel.kt │ │ │ │ ├── README.md │ │ │ │ ├── VMBaseActivity.kt │ │ │ │ ├── VMBaseFragment.kt │ │ │ │ └── adapter/ │ │ │ │ ├── DiffRecyclerAdapter.kt │ │ │ │ ├── ItemAnimation.kt │ │ │ │ ├── ItemViewHolder.kt │ │ │ │ ├── RecyclerAdapter.kt │ │ │ │ └── animations/ │ │ │ │ ├── AlphaInAnimation.kt │ │ │ │ ├── BaseAnimation.kt │ │ │ │ ├── ScaleInAnimation.kt │ │ │ │ ├── SlideInBottomAnimation.kt │ │ │ │ ├── SlideInLeftAnimation.kt │ │ │ │ └── SlideInRightAnimation.kt │ │ │ ├── constant/ │ │ │ │ ├── AppConst.kt │ │ │ │ ├── AppLog.kt │ │ │ │ ├── AppPattern.kt │ │ │ │ ├── BookSourceType.kt │ │ │ │ ├── BookType.kt │ │ │ │ ├── EventBus.kt │ │ │ │ ├── IntentAction.kt │ │ │ │ ├── NotificationId.kt │ │ │ │ ├── PageAnim.kt │ │ │ │ ├── PreferKey.kt │ │ │ │ ├── SourceType.kt │ │ │ │ ├── Status.kt │ │ │ │ └── Theme.kt │ │ │ ├── data/ │ │ │ │ ├── AppDatabase.kt │ │ │ │ ├── DatabaseMigrations.kt │ │ │ │ ├── README.md │ │ │ │ ├── dao/ │ │ │ │ │ ├── BookChapterDao.kt │ │ │ │ │ ├── BookDao.kt │ │ │ │ │ ├── BookGroupDao.kt │ │ │ │ │ ├── BookSourceDao.kt │ │ │ │ │ ├── BookmarkDao.kt │ │ │ │ │ ├── CacheDao.kt │ │ │ │ │ ├── CookieDao.kt │ │ │ │ │ ├── DictRuleDao.kt │ │ │ │ │ ├── HttpTTSDao.kt │ │ │ │ │ ├── KeyboardAssistsDao.kt │ │ │ │ │ ├── ReadRecordDao.kt │ │ │ │ │ ├── ReplaceRuleDao.kt │ │ │ │ │ ├── RssArticleDao.kt │ │ │ │ │ ├── RssReadRecordDao.kt │ │ │ │ │ ├── RssSourceDao.kt │ │ │ │ │ ├── RssStarDao.kt │ │ │ │ │ ├── RuleSubDao.kt │ │ │ │ │ ├── SearchBookDao.kt │ │ │ │ │ ├── SearchKeywordDao.kt │ │ │ │ │ ├── ServerDao.kt │ │ │ │ │ └── TxtTocRuleDao.kt │ │ │ │ └── entities/ │ │ │ │ ├── BaseBook.kt │ │ │ │ ├── BaseRssArticle.kt │ │ │ │ ├── BaseSource.kt │ │ │ │ ├── Book.kt │ │ │ │ ├── BookChapter.kt │ │ │ │ ├── BookChapterReview.kt │ │ │ │ ├── BookGroup.kt │ │ │ │ ├── BookProgress.kt │ │ │ │ ├── BookSource.kt │ │ │ │ ├── BookSourcePart.kt │ │ │ │ ├── Bookmark.kt │ │ │ │ ├── Cache.kt │ │ │ │ ├── Cookie.kt │ │ │ │ ├── DictRule.kt │ │ │ │ ├── HttpTTS.kt │ │ │ │ ├── KeyboardAssist.kt │ │ │ │ ├── ReadRecord.kt │ │ │ │ ├── ReadRecordShow.kt │ │ │ │ ├── ReplaceRule.kt │ │ │ │ ├── RssArticle.kt │ │ │ │ ├── RssReadRecord.kt │ │ │ │ ├── RssSource.kt │ │ │ │ ├── RssStar.kt │ │ │ │ ├── RuleSub.kt │ │ │ │ ├── SearchBook.kt │ │ │ │ ├── SearchKeyword.kt │ │ │ │ ├── Server.kt │ │ │ │ ├── TxtTocRule.kt │ │ │ │ └── rule/ │ │ │ │ ├── BookInfoRule.kt │ │ │ │ ├── BookListRule.kt │ │ │ │ ├── ContentRule.kt │ │ │ │ ├── ExploreKind.kt │ │ │ │ ├── ExploreRule.kt │ │ │ │ ├── FlexChildStyle.kt │ │ │ │ ├── ReviewRule.kt │ │ │ │ ├── RowUi.kt │ │ │ │ ├── SearchRule.kt │ │ │ │ └── TocRule.kt │ │ │ ├── exception/ │ │ │ │ ├── ConcurrentException.kt │ │ │ │ ├── ContentEmptyException.kt │ │ │ │ ├── EmptyFileException.kt │ │ │ │ ├── InvalidBooksDirException.kt │ │ │ │ ├── NoBooksDirException.kt │ │ │ │ ├── NoStackTraceException.kt │ │ │ │ ├── RegexTimeoutException.kt │ │ │ │ └── TocEmptyException.kt │ │ │ ├── help/ │ │ │ │ ├── AppFreezeMonitor.kt │ │ │ │ ├── AppWebDav.kt │ │ │ │ ├── CacheManager.kt │ │ │ │ ├── ConcurrentRateLimiter.kt │ │ │ │ ├── CrashHandler.kt │ │ │ │ ├── DefaultData.kt │ │ │ │ ├── DirectLinkUpload.kt │ │ │ │ ├── DispatchersMonitor.kt │ │ │ │ ├── EventMessage.kt │ │ │ │ ├── ExecutorService.kt │ │ │ │ ├── IntentData.kt │ │ │ │ ├── IntentHelp.kt │ │ │ │ ├── JsEncodeUtils.kt │ │ │ │ ├── JsExtensions.kt │ │ │ │ ├── LauncherIconHelp.kt │ │ │ │ ├── LayoutManager.kt │ │ │ │ ├── LifecycleHelp.kt │ │ │ │ ├── MediaHelp.kt │ │ │ │ ├── PaintPool.kt │ │ │ │ ├── README.md │ │ │ │ ├── ReplaceAnalyzer.kt │ │ │ │ ├── RuleBigDataHelp.kt │ │ │ │ ├── RuleComplete.kt │ │ │ │ ├── TTS.kt │ │ │ │ ├── book/ │ │ │ │ │ ├── BookContent.kt │ │ │ │ │ ├── BookExtensions.kt │ │ │ │ │ ├── BookHelp.kt │ │ │ │ │ ├── ContentHelp.kt │ │ │ │ │ └── ContentProcessor.kt │ │ │ │ ├── config/ │ │ │ │ │ ├── AppConfig.kt │ │ │ │ │ ├── LocalConfig.kt │ │ │ │ │ ├── ReadBookConfig.kt │ │ │ │ │ ├── ReadTipConfig.kt │ │ │ │ │ ├── SourceConfig.kt │ │ │ │ │ └── ThemeConfig.kt │ │ │ │ ├── coroutine/ │ │ │ │ │ ├── ActivelyCancelException.kt │ │ │ │ │ ├── CompositeCoroutine.kt │ │ │ │ │ ├── Coroutine.kt │ │ │ │ │ └── CoroutineContainer.kt │ │ │ │ ├── crypto/ │ │ │ │ │ ├── AsymmetricCrypto.kt │ │ │ │ │ ├── README.md │ │ │ │ │ ├── Sign.kt │ │ │ │ │ └── SymmetricCryptoAndroid.kt │ │ │ │ ├── exoplayer/ │ │ │ │ │ ├── ExoPlayerHelper.kt │ │ │ │ │ └── InputStreamDataSource.kt │ │ │ │ ├── glide/ │ │ │ │ │ ├── AsyncRecycleBitmapPool.kt │ │ │ │ │ ├── BlurTransformation.kt │ │ │ │ │ ├── FilePathLoader.kt │ │ │ │ │ ├── GlideHeaders.kt │ │ │ │ │ ├── ImageLoader.kt │ │ │ │ │ ├── LegadoDataUrlLoader.kt │ │ │ │ │ ├── LegadoGlideModule.kt │ │ │ │ │ ├── OkHttpModeLoaderFactory.kt │ │ │ │ │ ├── OkHttpModelLoader.kt │ │ │ │ │ ├── OkHttpStreamFetcher.kt │ │ │ │ │ └── progress/ │ │ │ │ │ ├── OnProgressListener.kt │ │ │ │ │ ├── ProgressManager.kt │ │ │ │ │ └── ProgressResponseBody.kt │ │ │ │ ├── http/ │ │ │ │ │ ├── BackstageWebView.kt │ │ │ │ │ ├── CookieManager.kt │ │ │ │ │ ├── CookieStore.kt │ │ │ │ │ ├── Cronet.kt │ │ │ │ │ ├── DecompressInterceptor.kt │ │ │ │ │ ├── HttpHelper.kt │ │ │ │ │ ├── ObsoleteUrlFactory.kt │ │ │ │ │ ├── OkHttpExceptionInterceptor.kt │ │ │ │ │ ├── OkHttpUtils.kt │ │ │ │ │ ├── OkhttpUncaughtExceptionHandler.kt │ │ │ │ │ ├── RequestMethod.kt │ │ │ │ │ ├── SSLHelper.kt │ │ │ │ │ ├── StrResponse.kt │ │ │ │ │ └── api/ │ │ │ │ │ └── CookieManagerInterface.kt │ │ │ │ ├── rhino/ │ │ │ │ │ └── NativeBaseSource.kt │ │ │ │ ├── source/ │ │ │ │ │ ├── BaseSourceExtensions.kt │ │ │ │ │ ├── BookSourceExtensions.kt │ │ │ │ │ ├── RssSourceExtensions.kt │ │ │ │ │ ├── SourceHelp.kt │ │ │ │ │ └── SourceVerificationHelp.kt │ │ │ │ ├── storage/ │ │ │ │ │ ├── Backup.kt │ │ │ │ │ ├── BackupAES.kt │ │ │ │ │ ├── BackupConfig.kt │ │ │ │ │ ├── ImportOldData.kt │ │ │ │ │ └── Restore.kt │ │ │ │ └── update/ │ │ │ │ ├── AppReleaseInfo.kt │ │ │ │ ├── AppUpdate.kt │ │ │ │ └── AppUpdateGitHub.kt │ │ │ ├── lib/ │ │ │ │ ├── README.md │ │ │ │ ├── aliyun/ │ │ │ │ │ └── ALiYun.kt │ │ │ │ ├── cronet/ │ │ │ │ │ ├── AbsCallBack.kt │ │ │ │ │ ├── BodyUploadProvider.kt │ │ │ │ │ ├── CallbackResult.kt │ │ │ │ │ ├── CallbackStep.kt │ │ │ │ │ ├── CronetCoroutineInterceptor.kt │ │ │ │ │ ├── CronetHelper.kt │ │ │ │ │ ├── CronetInterceptor.kt │ │ │ │ │ ├── CronetLoader.kt │ │ │ │ │ ├── LargeBodyUploadProvider.kt │ │ │ │ │ ├── NewCallBack.kt │ │ │ │ │ └── OldCallback.kt │ │ │ │ ├── dialogs/ │ │ │ │ │ ├── AlertBuilder.kt │ │ │ │ │ ├── AndroidAlertBuilder.kt │ │ │ │ │ ├── AndroidDialogs.kt │ │ │ │ │ ├── AndroidSelectors.kt │ │ │ │ │ └── SelectItem.kt │ │ │ │ ├── icu4j/ │ │ │ │ │ ├── CharsetDetector.java │ │ │ │ │ ├── CharsetMatch.java │ │ │ │ │ ├── CharsetRecog_2022.java │ │ │ │ │ ├── CharsetRecog_UTF8.java │ │ │ │ │ ├── CharsetRecog_Unicode.java │ │ │ │ │ ├── CharsetRecog_mbcs.java │ │ │ │ │ ├── CharsetRecog_sbcs.java │ │ │ │ │ └── CharsetRecognizer.java │ │ │ │ ├── mobi/ │ │ │ │ │ ├── KF6Book.kt │ │ │ │ │ ├── KF8Book.kt │ │ │ │ │ ├── MobiBook.kt │ │ │ │ │ ├── MobiReader.kt │ │ │ │ │ ├── PDBFile.kt │ │ │ │ │ ├── decompress/ │ │ │ │ │ │ ├── CDICData.kt │ │ │ │ │ │ ├── Decompressor.kt │ │ │ │ │ │ ├── HuffcdicDecompressor.kt │ │ │ │ │ │ ├── Lz77Decompressor.kt │ │ │ │ │ │ └── PlainDecompressor.kt │ │ │ │ │ ├── entities/ │ │ │ │ │ │ ├── ExthRecordType.kt │ │ │ │ │ │ ├── FdstHeader.kt │ │ │ │ │ │ ├── Fragment.kt │ │ │ │ │ │ ├── IndexData.kt │ │ │ │ │ │ ├── IndexEntry.kt │ │ │ │ │ │ ├── IndexTag.kt │ │ │ │ │ │ ├── IndxHeader.kt │ │ │ │ │ │ ├── KF6Section.kt │ │ │ │ │ │ ├── KF8Header.kt │ │ │ │ │ │ ├── KF8Pos.kt │ │ │ │ │ │ ├── KF8Resource.kt │ │ │ │ │ │ ├── KF8Section.kt │ │ │ │ │ │ ├── MobiEntryHeaders.kt │ │ │ │ │ │ ├── MobiHeader.kt │ │ │ │ │ │ ├── MobiMetadata.kt │ │ │ │ │ │ ├── NCX.kt │ │ │ │ │ │ ├── PalmDocHeader.kt │ │ │ │ │ │ ├── Ptagx.kt │ │ │ │ │ │ ├── Skeleton.kt │ │ │ │ │ │ ├── TOC.kt │ │ │ │ │ │ ├── TagxHeader.kt │ │ │ │ │ │ └── TagxTag.kt │ │ │ │ │ └── utils/ │ │ │ │ │ ├── BitwiseExtensions.kt │ │ │ │ │ └── ByteBufferExtensions.kt │ │ │ │ ├── permission/ │ │ │ │ │ ├── OnErrorCallback.kt │ │ │ │ │ ├── OnPermissionsDeniedCallback.kt │ │ │ │ │ ├── OnPermissionsGrantedCallback.kt │ │ │ │ │ ├── OnPermissionsResultCallback.kt │ │ │ │ │ ├── OnRequestPermissionsResultCallback.kt │ │ │ │ │ ├── PermissionActivity.kt │ │ │ │ │ ├── Permissions.kt │ │ │ │ │ ├── PermissionsCompat.kt │ │ │ │ │ ├── Request.kt │ │ │ │ │ ├── RequestManager.kt │ │ │ │ │ └── RequestPlugins.kt │ │ │ │ ├── prefs/ │ │ │ │ │ ├── ColorPreference.kt │ │ │ │ │ ├── EditTextPreference.kt │ │ │ │ │ ├── EditTextPreferenceDialog.kt │ │ │ │ │ ├── IconListPreference.kt │ │ │ │ │ ├── ListPreferenceDialog.kt │ │ │ │ │ ├── MultiSelectListPreferenceDialog.kt │ │ │ │ │ ├── NameListPreference.kt │ │ │ │ │ ├── Preference.kt │ │ │ │ │ ├── PreferenceCategory.kt │ │ │ │ │ ├── SwitchPreference.kt │ │ │ │ │ └── fragment/ │ │ │ │ │ └── PreferenceFragment.kt │ │ │ │ ├── theme/ │ │ │ │ │ ├── MaterialValueHelper.kt │ │ │ │ │ ├── Selector.kt │ │ │ │ │ ├── ThemeStore.kt │ │ │ │ │ ├── ThemeStoreInterface.kt │ │ │ │ │ ├── ThemeStorePrefKeys.kt │ │ │ │ │ ├── ThemeUtils.kt │ │ │ │ │ ├── TintHelper.kt │ │ │ │ │ ├── ViewUtils.kt │ │ │ │ │ └── view/ │ │ │ │ │ ├── ThemeBottomNavigationVIew.kt │ │ │ │ │ ├── ThemeCheckBox.kt │ │ │ │ │ ├── ThemeEditText.kt │ │ │ │ │ ├── ThemeProgressBar.kt │ │ │ │ │ ├── ThemeRadioButton.kt │ │ │ │ │ ├── ThemeRadioNoButton.kt │ │ │ │ │ ├── ThemeSeekBar.kt │ │ │ │ │ └── ThemeSwitch.kt │ │ │ │ └── webdav/ │ │ │ │ ├── Authorization.kt │ │ │ │ ├── WebDav.kt │ │ │ │ ├── WebDavException.kt │ │ │ │ └── WebDavFile.kt │ │ │ ├── model/ │ │ │ │ ├── AudioPlay.kt │ │ │ │ ├── BookCover.kt │ │ │ │ ├── CacheBook.kt │ │ │ │ ├── CheckSource.kt │ │ │ │ ├── Debug.kt │ │ │ │ ├── Download.kt │ │ │ │ ├── ImageProvider.kt │ │ │ │ ├── README.md │ │ │ │ ├── ReadAloud.kt │ │ │ │ ├── ReadBook.kt │ │ │ │ ├── ReadManga.kt │ │ │ │ ├── SharedJsScope.kt │ │ │ │ ├── analyzeRule/ │ │ │ │ │ ├── AnalyzeByJSonPath.kt │ │ │ │ │ ├── AnalyzeByJSoup.kt │ │ │ │ │ ├── AnalyzeByRegex.kt │ │ │ │ │ ├── AnalyzeByXPath.kt │ │ │ │ │ ├── AnalyzeRule.kt │ │ │ │ │ ├── AnalyzeUrl.kt │ │ │ │ │ ├── CustomUrl.kt │ │ │ │ │ ├── QueryTTF.java │ │ │ │ │ ├── RuleAnalyzer.kt │ │ │ │ │ ├── RuleData.kt │ │ │ │ │ └── RuleDataInterface.kt │ │ │ │ ├── localBook/ │ │ │ │ │ ├── BaseLocalBookParse.kt │ │ │ │ │ ├── EpubFile.kt │ │ │ │ │ ├── LocalBook.kt │ │ │ │ │ ├── MobiFile.kt │ │ │ │ │ ├── PdfFile.kt │ │ │ │ │ ├── README.md │ │ │ │ │ ├── TextFile.kt │ │ │ │ │ └── UmdFile.kt │ │ │ │ ├── remote/ │ │ │ │ │ ├── RemoteBook.kt │ │ │ │ │ ├── RemoteBookManager.kt │ │ │ │ │ └── RemoteBookWebDav.kt │ │ │ │ ├── rss/ │ │ │ │ │ ├── Rss.kt │ │ │ │ │ ├── RssParserByRule.kt │ │ │ │ │ └── RssParserDefault.kt │ │ │ │ └── webBook/ │ │ │ │ ├── BookChapterList.kt │ │ │ │ ├── BookContent.kt │ │ │ │ ├── BookInfo.kt │ │ │ │ ├── BookList.kt │ │ │ │ ├── SearchModel.kt │ │ │ │ └── WebBook.kt │ │ │ ├── receiver/ │ │ │ │ ├── MediaButtonReceiver.kt │ │ │ │ ├── NetworkChangedListener.kt │ │ │ │ ├── SharedReceiverActivity.kt │ │ │ │ └── TimeBatteryReceiver.kt │ │ │ ├── service/ │ │ │ │ ├── AudioPlayService.kt │ │ │ │ ├── BaseReadAloudService.kt │ │ │ │ ├── CacheBookService.kt │ │ │ │ ├── CheckSourceService.kt │ │ │ │ ├── DownloadService.kt │ │ │ │ ├── ExportBookService.kt │ │ │ │ ├── HttpReadAloudService.kt │ │ │ │ ├── README.md │ │ │ │ ├── TTSReadAloudService.kt │ │ │ │ ├── WebService.kt │ │ │ │ └── WebTileService.kt │ │ │ ├── ui/ │ │ │ │ ├── README.md │ │ │ │ ├── about/ │ │ │ │ │ ├── AboutActivity.kt │ │ │ │ │ ├── AboutFragment.kt │ │ │ │ │ ├── AppLogDialog.kt │ │ │ │ │ ├── CrashLogsDialog.kt │ │ │ │ │ ├── ReadRecordActivity.kt │ │ │ │ │ └── UpdateDialog.kt │ │ │ │ ├── association/ │ │ │ │ │ ├── AddToBookshelfDialog.kt │ │ │ │ │ ├── BaseAssociationViewModel.kt │ │ │ │ │ ├── FileAssociationActivity.kt │ │ │ │ │ ├── FileAssociationViewModel.kt │ │ │ │ │ ├── ImportBookSourceDialog.kt │ │ │ │ │ ├── ImportBookSourceViewModel.kt │ │ │ │ │ ├── ImportDictRuleDialog.kt │ │ │ │ │ ├── ImportDictRuleViewModel.kt │ │ │ │ │ ├── ImportHttpTtsDialog.kt │ │ │ │ │ ├── ImportHttpTtsViewModel.kt │ │ │ │ │ ├── ImportReplaceRuleDialog.kt │ │ │ │ │ ├── ImportReplaceRuleViewModel.kt │ │ │ │ │ ├── ImportRssSourceDialog.kt │ │ │ │ │ ├── ImportRssSourceViewModel.kt │ │ │ │ │ ├── ImportThemeDialog.kt │ │ │ │ │ ├── ImportThemeViewModel.kt │ │ │ │ │ ├── ImportTxtTocRuleDialog.kt │ │ │ │ │ ├── ImportTxtTocRuleViewModel.kt │ │ │ │ │ ├── OnLineImportActivity.kt │ │ │ │ │ ├── OnLineImportViewModel.kt │ │ │ │ │ ├── OpenUrlConfirmActivity.kt │ │ │ │ │ ├── OpenUrlConfirmDialog.kt │ │ │ │ │ ├── OpenUrlConfirmViewModel.kt │ │ │ │ │ ├── VerificationCodeActivity.kt │ │ │ │ │ ├── VerificationCodeDialog.kt │ │ │ │ │ └── VerificationCodeViewModel.kt │ │ │ │ ├── book/ │ │ │ │ │ ├── audio/ │ │ │ │ │ │ ├── AudioPlayActivity.kt │ │ │ │ │ │ ├── AudioPlayViewModel.kt │ │ │ │ │ │ └── TimerSliderPopup.kt │ │ │ │ │ ├── bookmark/ │ │ │ │ │ │ ├── AllBookmarkActivity.kt │ │ │ │ │ │ ├── AllBookmarkViewModel.kt │ │ │ │ │ │ ├── BookmarkAdapter.kt │ │ │ │ │ │ ├── BookmarkDecoration.kt │ │ │ │ │ │ └── BookmarkDialog.kt │ │ │ │ │ ├── cache/ │ │ │ │ │ │ ├── CacheActivity.kt │ │ │ │ │ │ ├── CacheAdapter.kt │ │ │ │ │ │ └── CacheViewModel.kt │ │ │ │ │ ├── changecover/ │ │ │ │ │ │ ├── ChangeCoverDialog.kt │ │ │ │ │ │ ├── ChangeCoverViewModel.kt │ │ │ │ │ │ └── CoverAdapter.kt │ │ │ │ │ ├── changesource/ │ │ │ │ │ │ ├── ChangeBookSourceAdapter.kt │ │ │ │ │ │ ├── ChangeBookSourceDialog.kt │ │ │ │ │ │ ├── ChangeBookSourceViewModel.kt │ │ │ │ │ │ ├── ChangeChapterSourceAdapter.kt │ │ │ │ │ │ ├── ChangeChapterSourceDialog.kt │ │ │ │ │ │ ├── ChangeChapterSourceViewModel.kt │ │ │ │ │ │ └── ChangeChapterTocAdapter.kt │ │ │ │ │ ├── explore/ │ │ │ │ │ │ ├── ExploreShowActivity.kt │ │ │ │ │ │ ├── ExploreShowAdapter.kt │ │ │ │ │ │ └── ExploreShowViewModel.kt │ │ │ │ │ ├── group/ │ │ │ │ │ │ ├── GroupEditDialog.kt │ │ │ │ │ │ ├── GroupManageDialog.kt │ │ │ │ │ │ ├── GroupSelectDialog.kt │ │ │ │ │ │ └── GroupViewModel.kt │ │ │ │ │ ├── import/ │ │ │ │ │ │ ├── BaseImportBookActivity.kt │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ ├── ImportBook.kt │ │ │ │ │ │ │ ├── ImportBookActivity.kt │ │ │ │ │ │ │ ├── ImportBookAdapter.kt │ │ │ │ │ │ │ └── ImportBookViewModel.kt │ │ │ │ │ │ └── remote/ │ │ │ │ │ │ ├── RemoteBookActivity.kt │ │ │ │ │ │ ├── RemoteBookAdapter.kt │ │ │ │ │ │ ├── RemoteBookSort.kt │ │ │ │ │ │ ├── RemoteBookViewModel.kt │ │ │ │ │ │ ├── ServerConfigDialog.kt │ │ │ │ │ │ ├── ServerConfigViewModel.kt │ │ │ │ │ │ ├── ServersDialog.kt │ │ │ │ │ │ └── ServersViewModel.kt │ │ │ │ │ ├── info/ │ │ │ │ │ │ ├── BookInfoActivity.kt │ │ │ │ │ │ ├── BookInfoViewModel.kt │ │ │ │ │ │ └── edit/ │ │ │ │ │ │ ├── BookInfoEditActivity.kt │ │ │ │ │ │ └── BookInfoEditViewModel.kt │ │ │ │ │ ├── manage/ │ │ │ │ │ │ ├── BookAdapter.kt │ │ │ │ │ │ ├── BookshelfManageActivity.kt │ │ │ │ │ │ ├── BookshelfManageViewModel.kt │ │ │ │ │ │ └── SourcePickerDialog.kt │ │ │ │ │ ├── manga/ │ │ │ │ │ │ ├── ReadMangaActivity.kt │ │ │ │ │ │ ├── ReadMangaViewModel.kt │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── MangaColorFilterConfig.kt │ │ │ │ │ │ │ ├── MangaColorFilterDialog.kt │ │ │ │ │ │ │ ├── MangaEpaperDialog.kt │ │ │ │ │ │ │ ├── MangaFooterConfig.kt │ │ │ │ │ │ │ └── MangaFooterSettingDialog.kt │ │ │ │ │ │ ├── entities/ │ │ │ │ │ │ │ ├── BaseMangaPage.kt │ │ │ │ │ │ │ ├── EpaperTransformation.kt │ │ │ │ │ │ │ ├── GrayscaleTransformation.kt │ │ │ │ │ │ │ ├── MangaChapter.kt │ │ │ │ │ │ │ ├── MangaContent.kt │ │ │ │ │ │ │ ├── MangaPage.kt │ │ │ │ │ │ │ └── ReaderLoading.kt │ │ │ │ │ │ └── recyclerview/ │ │ │ │ │ │ ├── GestureDetectorWithLongTap.kt │ │ │ │ │ │ ├── MangaAdapter.kt │ │ │ │ │ │ ├── MangaLayoutManager.kt │ │ │ │ │ │ ├── MangaVH.kt │ │ │ │ │ │ ├── ScrollTimer.kt │ │ │ │ │ │ ├── WebtoonFrame.kt │ │ │ │ │ │ └── WebtoonRecyclerView.kt │ │ │ │ │ ├── read/ │ │ │ │ │ │ ├── BaseReadBookActivity.kt │ │ │ │ │ │ ├── ContentEditDialog.kt │ │ │ │ │ │ ├── EffectiveReplacesDialog.kt │ │ │ │ │ │ ├── MangaMenu.kt │ │ │ │ │ │ ├── ReadBookActivity.kt │ │ │ │ │ │ ├── ReadBookViewModel.kt │ │ │ │ │ │ ├── ReadMenu.kt │ │ │ │ │ │ ├── SearchMenu.kt │ │ │ │ │ │ ├── TextActionMenu.kt │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── AutoReadDialog.kt │ │ │ │ │ │ │ ├── BgAdapter.kt │ │ │ │ │ │ │ ├── BgTextConfigDialog.kt │ │ │ │ │ │ │ ├── ChineseConverter.kt │ │ │ │ │ │ │ ├── ClickActionConfigDialog.kt │ │ │ │ │ │ │ ├── HttpTtsEditDialog.kt │ │ │ │ │ │ │ ├── HttpTtsEditViewModel.kt │ │ │ │ │ │ │ ├── MoreConfigDialog.kt │ │ │ │ │ │ │ ├── PaddingConfigDialog.kt │ │ │ │ │ │ │ ├── PageKeyDialog.kt │ │ │ │ │ │ │ ├── ReadAloudConfigDialog.kt │ │ │ │ │ │ │ ├── ReadAloudDialog.kt │ │ │ │ │ │ │ ├── ReadStyleDialog.kt │ │ │ │ │ │ │ ├── SpeakEngineDialog.kt │ │ │ │ │ │ │ ├── SpeakEngineViewModel.kt │ │ │ │ │ │ │ ├── TextFontWeightConverter.kt │ │ │ │ │ │ │ └── TipConfigDialog.kt │ │ │ │ │ │ └── page/ │ │ │ │ │ │ ├── AutoPager.kt │ │ │ │ │ │ ├── ContentTextView.kt │ │ │ │ │ │ ├── PageView.kt │ │ │ │ │ │ ├── ReadView.kt │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ ├── DataSource.kt │ │ │ │ │ │ │ └── PageFactory.kt │ │ │ │ │ │ ├── delegate/ │ │ │ │ │ │ │ ├── CoverPageDelegate.kt │ │ │ │ │ │ │ ├── HorizontalPageDelegate.kt │ │ │ │ │ │ │ ├── NoAnimPageDelegate.kt │ │ │ │ │ │ │ ├── PageDelegate.kt │ │ │ │ │ │ │ ├── ScrollPageDelegate.kt │ │ │ │ │ │ │ ├── SimulationPageDelegate.kt │ │ │ │ │ │ │ └── SlidePageDelegate.kt │ │ │ │ │ │ ├── entities/ │ │ │ │ │ │ │ ├── PageDirection.kt │ │ │ │ │ │ │ ├── TextChapter.kt │ │ │ │ │ │ │ ├── TextLine.kt │ │ │ │ │ │ │ ├── TextPage.kt │ │ │ │ │ │ │ ├── TextParagraph.kt │ │ │ │ │ │ │ ├── TextPos.kt │ │ │ │ │ │ │ └── column/ │ │ │ │ │ │ │ ├── BaseColumn.kt │ │ │ │ │ │ │ ├── ButtonColumn.kt │ │ │ │ │ │ │ ├── ImageColumn.kt │ │ │ │ │ │ │ ├── ReviewColumn.kt │ │ │ │ │ │ │ └── TextColumn.kt │ │ │ │ │ │ └── provider/ │ │ │ │ │ │ ├── ChapterProvider.kt │ │ │ │ │ │ ├── LayoutProgressListener.kt │ │ │ │ │ │ ├── TextChapterLayout.kt │ │ │ │ │ │ ├── TextMeasure.kt │ │ │ │ │ │ ├── TextPageFactory.kt │ │ │ │ │ │ └── ZhLayout.kt │ │ │ │ │ ├── search/ │ │ │ │ │ │ ├── BookAdapter.kt │ │ │ │ │ │ ├── HistoryKeyAdapter.kt │ │ │ │ │ │ ├── SearchActivity.kt │ │ │ │ │ │ ├── SearchAdapter.kt │ │ │ │ │ │ ├── SearchScope.kt │ │ │ │ │ │ ├── SearchScopeDialog.kt │ │ │ │ │ │ └── SearchViewModel.kt │ │ │ │ │ ├── searchContent/ │ │ │ │ │ │ ├── SearchContentActivity.kt │ │ │ │ │ │ ├── SearchContentAdapter.kt │ │ │ │ │ │ ├── SearchContentViewModel.kt │ │ │ │ │ │ └── SearchResult.kt │ │ │ │ │ ├── source/ │ │ │ │ │ │ ├── debug/ │ │ │ │ │ │ │ ├── BookSourceDebugActivity.kt │ │ │ │ │ │ │ ├── BookSourceDebugAdapter.kt │ │ │ │ │ │ │ └── BookSourceDebugModel.kt │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── BookSourceEditActivity.kt │ │ │ │ │ │ │ ├── BookSourceEditAdapter.kt │ │ │ │ │ │ │ └── BookSourceEditViewModel.kt │ │ │ │ │ │ └── manage/ │ │ │ │ │ │ ├── BookSourceActivity.kt │ │ │ │ │ │ ├── BookSourceAdapter.kt │ │ │ │ │ │ ├── BookSourceSort.kt │ │ │ │ │ │ ├── BookSourceViewModel.kt │ │ │ │ │ │ └── GroupManageDialog.kt │ │ │ │ │ └── toc/ │ │ │ │ │ ├── BookmarkAdapter.kt │ │ │ │ │ ├── BookmarkFragment.kt │ │ │ │ │ ├── ChapterListAdapter.kt │ │ │ │ │ ├── ChapterListFragment.kt │ │ │ │ │ ├── TocActivity.kt │ │ │ │ │ ├── TocActivityResult.kt │ │ │ │ │ ├── TocViewModel.kt │ │ │ │ │ └── rule/ │ │ │ │ │ ├── TxtTocRuleActivity.kt │ │ │ │ │ ├── TxtTocRuleAdapter.kt │ │ │ │ │ ├── TxtTocRuleDialog.kt │ │ │ │ │ ├── TxtTocRuleEditDialog.kt │ │ │ │ │ └── TxtTocRuleViewModel.kt │ │ │ │ ├── browser/ │ │ │ │ │ ├── WebViewActivity.kt │ │ │ │ │ └── WebViewModel.kt │ │ │ │ ├── config/ │ │ │ │ │ ├── BackupConfigFragment.kt │ │ │ │ │ ├── CheckSourceConfig.kt │ │ │ │ │ ├── ConfigActivity.kt │ │ │ │ │ ├── ConfigTag.kt │ │ │ │ │ ├── ConfigViewModel.kt │ │ │ │ │ ├── CoverConfigFragment.kt │ │ │ │ │ ├── CoverRuleConfigDialog.kt │ │ │ │ │ ├── DirectLinkUploadConfig.kt │ │ │ │ │ ├── OtherConfigFragment.kt │ │ │ │ │ ├── ThemeConfigFragment.kt │ │ │ │ │ ├── ThemeListDialog.kt │ │ │ │ │ └── WelcomeConfigFragment.kt │ │ │ │ ├── dict/ │ │ │ │ │ ├── DictDialog.kt │ │ │ │ │ ├── DictViewModel.kt │ │ │ │ │ └── rule/ │ │ │ │ │ ├── DictRuleActivity.kt │ │ │ │ │ ├── DictRuleAdapter.kt │ │ │ │ │ ├── DictRuleEditDialog.kt │ │ │ │ │ └── DictRuleViewModel.kt │ │ │ │ ├── file/ │ │ │ │ │ ├── FileManageActivity.kt │ │ │ │ │ ├── FileManageViewModel.kt │ │ │ │ │ ├── FilePickerDialog.kt │ │ │ │ │ ├── FilePickerViewModel.kt │ │ │ │ │ ├── HandleFileActivity.kt │ │ │ │ │ ├── HandleFileContract.kt │ │ │ │ │ ├── HandleFileViewModel.kt │ │ │ │ │ └── utils/ │ │ │ │ │ └── FilePickerIcon.java │ │ │ │ ├── font/ │ │ │ │ │ ├── FontAdapter.kt │ │ │ │ │ └── FontSelectDialog.kt │ │ │ │ ├── login/ │ │ │ │ │ ├── SourceLoginActivity.kt │ │ │ │ │ ├── SourceLoginDialog.kt │ │ │ │ │ ├── SourceLoginViewModel.kt │ │ │ │ │ └── WebViewLoginFragment.kt │ │ │ │ ├── main/ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── MainFragmentInterface.kt │ │ │ │ │ ├── MainViewModel.kt │ │ │ │ │ ├── bookshelf/ │ │ │ │ │ │ ├── BaseBookshelfFragment.kt │ │ │ │ │ │ ├── BookshelfViewModel.kt │ │ │ │ │ │ ├── style1/ │ │ │ │ │ │ │ ├── BookshelfFragment1.kt │ │ │ │ │ │ │ └── books/ │ │ │ │ │ │ │ ├── BaseBooksAdapter.kt │ │ │ │ │ │ │ ├── BooksAdapterGrid.kt │ │ │ │ │ │ │ ├── BooksAdapterList.kt │ │ │ │ │ │ │ └── BooksFragment.kt │ │ │ │ │ │ └── style2/ │ │ │ │ │ │ ├── BaseBooksAdapter.kt │ │ │ │ │ │ ├── BooksAdapterGrid.kt │ │ │ │ │ │ ├── BooksAdapterList.kt │ │ │ │ │ │ └── BookshelfFragment2.kt │ │ │ │ │ ├── explore/ │ │ │ │ │ │ ├── ExploreAdapter.kt │ │ │ │ │ │ ├── ExploreDiffItemCallBack.kt │ │ │ │ │ │ ├── ExploreFragment.kt │ │ │ │ │ │ └── ExploreViewModel.kt │ │ │ │ │ ├── my/ │ │ │ │ │ │ └── MyFragment.kt │ │ │ │ │ └── rss/ │ │ │ │ │ ├── RssAdapter.kt │ │ │ │ │ ├── RssFragment.kt │ │ │ │ │ └── RssViewModel.kt │ │ │ │ ├── qrcode/ │ │ │ │ │ ├── QrCodeActivity.kt │ │ │ │ │ ├── QrCodeFragment.kt │ │ │ │ │ ├── QrCodeResult.kt │ │ │ │ │ └── ScanResultCallback.kt │ │ │ │ ├── replace/ │ │ │ │ │ ├── GroupManageDialog.kt │ │ │ │ │ ├── ReplaceRuleActivity.kt │ │ │ │ │ ├── ReplaceRuleAdapter.kt │ │ │ │ │ ├── ReplaceRuleViewModel.kt │ │ │ │ │ └── edit/ │ │ │ │ │ ├── ReplaceEditActivity.kt │ │ │ │ │ └── ReplaceEditViewModel.kt │ │ │ │ ├── rss/ │ │ │ │ │ ├── article/ │ │ │ │ │ │ ├── BaseRssArticlesAdapter.kt │ │ │ │ │ │ ├── ReadRecordDialog.kt │ │ │ │ │ │ ├── RssArticlesAdapter.kt │ │ │ │ │ │ ├── RssArticlesAdapter1.kt │ │ │ │ │ │ ├── RssArticlesAdapter2.kt │ │ │ │ │ │ ├── RssArticlesFragment.kt │ │ │ │ │ │ ├── RssArticlesViewModel.kt │ │ │ │ │ │ ├── RssSortActivity.kt │ │ │ │ │ │ └── RssSortViewModel.kt │ │ │ │ │ ├── favorites/ │ │ │ │ │ │ ├── RssFavoritesActivity.kt │ │ │ │ │ │ ├── RssFavoritesAdapter.kt │ │ │ │ │ │ ├── RssFavoritesDialog.kt │ │ │ │ │ │ ├── RssFavoritesFragment.kt │ │ │ │ │ │ └── RssFavoritesViewModel.kt │ │ │ │ │ ├── read/ │ │ │ │ │ │ ├── ReadRssActivity.kt │ │ │ │ │ │ ├── ReadRssViewModel.kt │ │ │ │ │ │ ├── RssJsExtensions.kt │ │ │ │ │ │ └── VisibleWebView.kt │ │ │ │ │ ├── source/ │ │ │ │ │ │ ├── debug/ │ │ │ │ │ │ │ ├── RssSourceDebugActivity.kt │ │ │ │ │ │ │ ├── RssSourceDebugAdapter.kt │ │ │ │ │ │ │ └── RssSourceDebugModel.kt │ │ │ │ │ │ ├── edit/ │ │ │ │ │ │ │ ├── RssSourceEditActivity.kt │ │ │ │ │ │ │ ├── RssSourceEditAdapter.kt │ │ │ │ │ │ │ └── RssSourceEditViewModel.kt │ │ │ │ │ │ └── manage/ │ │ │ │ │ │ ├── GroupManageDialog.kt │ │ │ │ │ │ ├── RssSourceActivity.kt │ │ │ │ │ │ ├── RssSourceAdapter.kt │ │ │ │ │ │ └── RssSourceViewModel.kt │ │ │ │ │ └── subscription/ │ │ │ │ │ ├── RuleSubActivity.kt │ │ │ │ │ └── RuleSubAdapter.kt │ │ │ │ ├── welcome/ │ │ │ │ │ └── WelcomeActivity.kt │ │ │ │ └── widget/ │ │ │ │ ├── BatteryView.kt │ │ │ │ ├── DetailSeekBar.kt │ │ │ │ ├── LabelsBar.kt │ │ │ │ ├── NoChildScrollNestedScrollView.kt │ │ │ │ ├── PopupAction.kt │ │ │ │ ├── ReaderInfoBarView.kt │ │ │ │ ├── SearchView.kt │ │ │ │ ├── SelectActionBar.kt │ │ │ │ ├── ShadowLayout.kt │ │ │ │ ├── TitleBar.kt │ │ │ │ ├── anima/ │ │ │ │ │ ├── RefreshProgressBar.kt │ │ │ │ │ ├── RotateLoading.kt │ │ │ │ │ └── explosion_field/ │ │ │ │ │ ├── ExplosionAnimator.kt │ │ │ │ │ ├── ExplosionField.kt │ │ │ │ │ ├── ExplosionView.kt │ │ │ │ │ ├── OnAnimatorListener.kt │ │ │ │ │ └── Utils.kt │ │ │ │ ├── checkbox/ │ │ │ │ │ └── SmoothCheckBox.kt │ │ │ │ ├── code/ │ │ │ │ │ ├── CodeView.kt │ │ │ │ │ ├── CodeViewExtensions.kt │ │ │ │ │ └── KeywordTokenizer.kt │ │ │ │ ├── dialog/ │ │ │ │ │ ├── CodeDialog.kt │ │ │ │ │ ├── PhotoDialog.kt │ │ │ │ │ ├── TextDialog.kt │ │ │ │ │ ├── TextListDialog.kt │ │ │ │ │ ├── UrlOptionDialog.kt │ │ │ │ │ ├── VariableDialog.kt │ │ │ │ │ └── WaitDialog.kt │ │ │ │ ├── dynamiclayout/ │ │ │ │ │ ├── DynamicFrameLayout.kt │ │ │ │ │ └── ViewSwitcher.kt │ │ │ │ ├── image/ │ │ │ │ │ ├── ArcView.kt │ │ │ │ │ ├── CircleImageView.kt │ │ │ │ │ ├── CoverImageView.kt │ │ │ │ │ ├── FilletImageView.kt │ │ │ │ │ ├── ImageButton.kt │ │ │ │ │ ├── PhotoView.kt │ │ │ │ │ └── photo/ │ │ │ │ │ ├── Info.kt │ │ │ │ │ └── RotateGestureDetector.kt │ │ │ │ ├── keyboard/ │ │ │ │ │ ├── KeyboardAssistsConfig.kt │ │ │ │ │ └── KeyboardToolPop.kt │ │ │ │ ├── number/ │ │ │ │ │ └── NumberPickerDialog.kt │ │ │ │ ├── recycler/ │ │ │ │ │ ├── DividerNoLast.kt │ │ │ │ │ ├── DragSelectTouchHelper.kt │ │ │ │ │ ├── HeaderAdapterDataObserver.kt │ │ │ │ │ ├── ItemTouchCallback.kt │ │ │ │ │ ├── LoadMoreView.kt │ │ │ │ │ ├── NoChildScrollLinearLayoutManager.kt │ │ │ │ │ ├── RecyclerViewAtPager2.kt │ │ │ │ │ ├── UpLinearLayoutManager.kt │ │ │ │ │ ├── VerticalDivider.kt │ │ │ │ │ ├── ViewPager2Container.kt │ │ │ │ │ └── scroller/ │ │ │ │ │ ├── FastScrollRecyclerView.kt │ │ │ │ │ ├── FastScrollStateChangeListener.kt │ │ │ │ │ └── FastScroller.kt │ │ │ │ ├── seekbar/ │ │ │ │ │ ├── SeekBarChangeListener.kt │ │ │ │ │ ├── VerticalSeekBar.kt │ │ │ │ │ └── VerticalSeekBarWrapper.kt │ │ │ │ └── text/ │ │ │ │ ├── AccentBgTextView.kt │ │ │ │ ├── AccentStrokeTextView.kt │ │ │ │ ├── AccentTextView.kt │ │ │ │ ├── AutoCompleteTextView.kt │ │ │ │ ├── BadgeView.kt │ │ │ │ ├── BevelLabelView.kt │ │ │ │ ├── EditEntity.kt │ │ │ │ ├── MultilineTextView.kt │ │ │ │ ├── PrimaryTextView.kt │ │ │ │ ├── ScrollMultiAutoCompleteTextView.kt │ │ │ │ ├── ScrollTextView.kt │ │ │ │ ├── SecondaryTextView.kt │ │ │ │ ├── StrokeTextView.kt │ │ │ │ └── TextInputLayout.kt │ │ │ ├── utils/ │ │ │ │ ├── ACache.kt │ │ │ │ ├── ActivityExtensions.kt │ │ │ │ ├── ActivityResult.kt │ │ │ │ ├── ActivityResultContracts.kt │ │ │ │ ├── AlphanumComparator.kt │ │ │ │ ├── AnimationExtensions.kt │ │ │ │ ├── ArchiveUtils.kt │ │ │ │ ├── AsyncFileHandler.kt │ │ │ │ ├── BitmapUtils.kt │ │ │ │ ├── BookChapterExtensions.kt │ │ │ │ ├── ByteArrayExtensions.kt │ │ │ │ ├── ChineseUtils.kt │ │ │ │ ├── CollectionExtensions.kt │ │ │ │ ├── ColorUtils.kt │ │ │ │ ├── ConfigurationExtensions.kt │ │ │ │ ├── ConflateLiveData.kt │ │ │ │ ├── ConstraintModify.kt │ │ │ │ ├── ContextExtensions.kt │ │ │ │ ├── ConvertExtensions.kt │ │ │ │ ├── CookieManagerExtensions.kt │ │ │ │ ├── CoroutineExtensions.kt │ │ │ │ ├── CustomExportUtils.kt │ │ │ │ ├── Debounce.kt │ │ │ │ ├── DebugLog.kt │ │ │ │ ├── DialogExtensions.kt │ │ │ │ ├── DocumentUtils.kt │ │ │ │ ├── DrawableUtils.kt │ │ │ │ ├── EncoderUtils.kt │ │ │ │ ├── EncodingDetect.kt │ │ │ │ ├── EventBusExtensions.kt │ │ │ │ ├── FileDocExtensions.kt │ │ │ │ ├── FileExtensions.kt │ │ │ │ ├── FileUtils.kt │ │ │ │ ├── FlowExtensions.kt │ │ │ │ ├── FragmentExtensions.kt │ │ │ │ ├── GsonExtensions.kt │ │ │ │ ├── HandlerUtils.kt │ │ │ │ ├── HtmlFormatter.kt │ │ │ │ ├── ImageUtils.kt │ │ │ │ ├── InputStreamExtensions.kt │ │ │ │ ├── IntentExtensions.kt │ │ │ │ ├── IntentType.kt │ │ │ │ ├── JsURL.kt │ │ │ │ ├── JsonExtensions.kt │ │ │ │ ├── JsoupExtensions.kt │ │ │ │ ├── LogUtils.kt │ │ │ │ ├── MD5Utils.kt │ │ │ │ ├── MapExtensions.kt │ │ │ │ ├── MenuExtensions.kt │ │ │ │ ├── MenuItemExtensions.kt │ │ │ │ ├── MutableLiveDataExtensions.kt │ │ │ │ ├── NavigationViewUtils.kt │ │ │ │ ├── NetworkUtils.kt │ │ │ │ ├── PaintExtensions.kt │ │ │ │ ├── ParcelFileDescriptorChannel.kt │ │ │ │ ├── PreferencesExtensions.kt │ │ │ │ ├── QRCodeUtils.kt │ │ │ │ ├── RandomColor.kt │ │ │ │ ├── RealPathUtil.kt │ │ │ │ ├── RecyclerViewExtensions.kt │ │ │ │ ├── RegexExtensions.kt │ │ │ │ ├── RequestManagerExtensions.kt │ │ │ │ ├── Snackbars.kt │ │ │ │ ├── StringExtensions.kt │ │ │ │ ├── StringUtils.kt │ │ │ │ ├── SvgUtils.kt │ │ │ │ ├── SyncedRenderer.kt │ │ │ │ ├── SystemUtils.kt │ │ │ │ ├── Throttle.kt │ │ │ │ ├── ThrowableExtensions.kt │ │ │ │ ├── TimeUtils.kt │ │ │ │ ├── ToastUtils.kt │ │ │ │ ├── ToolBarExtensions.kt │ │ │ │ ├── UriExtensions.kt │ │ │ │ ├── UrlUtil.kt │ │ │ │ ├── Utf8BomUtils.kt │ │ │ │ ├── ViewExtensions.kt │ │ │ │ ├── WebSettingsExtensions.kt │ │ │ │ ├── WindowInsetsExtensions.kt │ │ │ │ ├── canvasrecorder/ │ │ │ │ │ ├── BaseCanvasRecorder.kt │ │ │ │ │ ├── CanvasRecorder.kt │ │ │ │ │ ├── CanvasRecorderApi23Impl.kt │ │ │ │ │ ├── CanvasRecorderApi29Impl.kt │ │ │ │ │ ├── CanvasRecorderExtensions.kt │ │ │ │ │ ├── CanvasRecorderFactory.kt │ │ │ │ │ ├── CanvasRecorderImpl.kt │ │ │ │ │ ├── CanvasRecorderLocked.kt │ │ │ │ │ └── pools/ │ │ │ │ │ ├── CanvasPool.kt │ │ │ │ │ ├── PicturePool.kt │ │ │ │ │ └── RenderNodePool.kt │ │ │ │ ├── compress/ │ │ │ │ │ ├── LibArchiveUtils.kt │ │ │ │ │ └── ZipUtils.kt │ │ │ │ ├── objectpool/ │ │ │ │ │ ├── BaseObjectPool.kt │ │ │ │ │ ├── BaseSafeObjectPool.kt │ │ │ │ │ ├── ObjectPool.kt │ │ │ │ │ ├── ObjectPoolExtensions.kt │ │ │ │ │ └── ObjectPoolLocked.kt │ │ │ │ └── viewbindingdelegate/ │ │ │ │ ├── ActivityViewBindings.kt │ │ │ │ ├── FragmentViewBindings.kt │ │ │ │ └── ViewBindingProperty.kt │ │ │ └── web/ │ │ │ ├── HttpServer.kt │ │ │ ├── ReadMe.md │ │ │ ├── WebSocketServer.kt │ │ │ ├── socket/ │ │ │ │ ├── BookSearchWebSocket.kt │ │ │ │ ├── BookSourceDebugWebSocket.kt │ │ │ │ └── RssSourceDebugWebSocket.kt │ │ │ └── utils/ │ │ │ └── AssetsWeb.kt │ │ └── res/ │ │ ├── anim/ │ │ │ ├── anim_none.xml │ │ │ ├── anim_readbook_bottom_in.xml │ │ │ ├── anim_readbook_bottom_out.xml │ │ │ ├── anim_readbook_top_in.xml │ │ │ └── anim_readbook_top_out.xml │ │ ├── color/ │ │ │ └── selector_image.xml │ │ ├── drawable/ │ │ │ ├── bg_chapter_item_divider.xml │ │ │ ├── bg_edit.xml │ │ │ ├── bg_eink_border_bottom.xml │ │ │ ├── bg_eink_border_dialog.xml │ │ │ ├── bg_eink_border_top.xml │ │ │ ├── bg_find_book_group.xml │ │ │ ├── bg_gradient.xml │ │ │ ├── bg_img_border.xml │ │ │ ├── bg_item_focused_on_tv.xml │ │ │ ├── bg_popup_menu.xml │ │ │ ├── bg_prefs_color.xml │ │ │ ├── bg_searchview.xml │ │ │ ├── bg_shadow_bottom.xml │ │ │ ├── bg_shadow_bottom_night.xml │ │ │ ├── bg_shadow_top.xml │ │ │ ├── bg_shadow_top_night.xml │ │ │ ├── bg_textfield_search.xml │ │ │ ├── fastscroll_bubble.xml │ │ │ ├── fastscroll_handle.xml │ │ │ ├── fastscroll_track.xml │ │ │ ├── ic_add.xml │ │ │ ├── ic_add_online.xml │ │ │ ├── ic_arrange.xml │ │ │ ├── ic_arrow_back.xml │ │ │ ├── ic_arrow_down.xml │ │ │ ├── ic_arrow_drop_down.xml │ │ │ ├── ic_arrow_drop_up.xml │ │ │ ├── ic_arrow_right.xml │ │ │ ├── ic_author.xml │ │ │ ├── ic_auto_page.xml │ │ │ ├── ic_auto_page_stop.xml │ │ │ ├── ic_backup.xml │ │ │ ├── ic_baseline_close.xml │ │ │ ├── ic_baseline_sort_24.xml │ │ │ ├── ic_book_has.xml │ │ │ ├── ic_book_last.xml │ │ │ ├── ic_bookmark.xml │ │ │ ├── ic_bottom_books.xml │ │ │ ├── ic_bottom_books_e.xml │ │ │ ├── ic_bottom_books_s.xml │ │ │ ├── ic_bottom_explore.xml │ │ │ ├── ic_bottom_explore_e.xml │ │ │ ├── ic_bottom_explore_s.xml │ │ │ ├── ic_bottom_person.xml │ │ │ ├── ic_bottom_person_e.xml │ │ │ ├── ic_bottom_person_s.xml │ │ │ ├── ic_bottom_rss_feed.xml │ │ │ ├── ic_bottom_rss_feed_e.xml │ │ │ ├── ic_bottom_rss_feed_s.xml │ │ │ ├── ic_brightness.xml │ │ │ ├── ic_brightness_auto.xml │ │ │ ├── ic_bubble_chart.xml │ │ │ ├── ic_bug_report.xml │ │ │ ├── ic_cfg_about.xml │ │ │ ├── ic_cfg_backup.xml │ │ │ ├── ic_cfg_donate.xml │ │ │ ├── ic_cfg_other.xml │ │ │ ├── ic_cfg_replace.xml │ │ │ ├── ic_cfg_source.xml │ │ │ ├── ic_cfg_theme.xml │ │ │ ├── ic_cfg_web.xml │ │ │ ├── ic_chapter_list.xml │ │ │ ├── ic_check.xml │ │ │ ├── ic_check_source.xml │ │ │ ├── ic_clear_all.xml │ │ │ ├── ic_copy.xml │ │ │ ├── ic_create_folder_outline.xml │ │ │ ├── ic_cursor_left.xml │ │ │ ├── ic_cursor_right.xml │ │ │ ├── ic_daytime.xml │ │ │ ├── ic_divider.xml │ │ │ ├── ic_download.xml │ │ │ ├── ic_download_line.xml │ │ │ ├── ic_edit.xml │ │ │ ├── ic_exchange.xml │ │ │ ├── ic_exchange_order.xml │ │ │ ├── ic_exit.xml │ │ │ ├── ic_expand_less.xml │ │ │ ├── ic_expand_more.xml │ │ │ ├── ic_export.xml │ │ │ ├── ic_fast_forward.xml │ │ │ ├── ic_fast_rewind.xml │ │ │ ├── ic_find_replace.xml │ │ │ ├── ic_folder.xml │ │ │ ├── ic_folder_open.xml │ │ │ ├── ic_folder_outline.xml │ │ │ ├── ic_groups.xml │ │ │ ├── ic_help.xml │ │ │ ├── ic_history.xml │ │ │ ├── ic_image.xml │ │ │ ├── ic_import.xml │ │ │ ├── ic_interface_setting.xml │ │ │ ├── ic_launcher1.xml │ │ │ ├── ic_launcher1_b.xml │ │ │ ├── ic_launcher2.xml │ │ │ ├── ic_launcher3.xml │ │ │ ├── ic_launcher4.xml │ │ │ ├── ic_launcher4_b.xml │ │ │ ├── ic_launcher5.xml │ │ │ ├── ic_launcher5_b.xml │ │ │ ├── ic_launcher6.xml │ │ │ ├── ic_launcher7.xml │ │ │ ├── ic_launcher7_b.xml │ │ │ ├── ic_lock_outline.xml │ │ │ ├── ic_menu.xml │ │ │ ├── ic_more.xml │ │ │ ├── ic_more_vert.xml │ │ │ ├── ic_network_check.xml │ │ │ ├── ic_outline_cloud_24.xml │ │ │ ├── ic_outline_delete.xml │ │ │ ├── ic_pause_24dp.xml │ │ │ ├── ic_pause_outline_24dp.xml │ │ │ ├── ic_play_24dp.xml │ │ │ ├── ic_play_mode_list_end_stop.xml │ │ │ ├── ic_play_mode_list_loop.xml │ │ │ ├── ic_play_mode_random.xml │ │ │ ├── ic_play_mode_single_loop.xml │ │ │ ├── ic_play_outline_24dp.xml │ │ │ ├── ic_praise.xml │ │ │ ├── ic_read_aloud.xml │ │ │ ├── ic_reduce.xml │ │ │ ├── ic_refresh_black_24dp.xml │ │ │ ├── ic_refresh_white_24dp.xml │ │ │ ├── ic_restore.xml │ │ │ ├── ic_save.xml │ │ │ ├── ic_scan.xml │ │ │ ├── ic_scoring.xml │ │ │ ├── ic_screen.xml │ │ │ ├── ic_search.xml │ │ │ ├── ic_search_hint.xml │ │ │ ├── ic_settings.xml │ │ │ ├── ic_share.xml │ │ │ ├── ic_skip_next.xml │ │ │ ├── ic_skip_previous.xml │ │ │ ├── ic_sort.xml │ │ │ ├── ic_star.xml │ │ │ ├── ic_star_border.xml │ │ │ ├── ic_stop_black_24dp.xml │ │ │ ├── ic_storage_black_24dp.xml │ │ │ ├── ic_swap_horiz.xml │ │ │ ├── ic_time_add_24dp.xml │ │ │ ├── ic_timer_black_24dp.xml │ │ │ ├── ic_toc.xml │ │ │ ├── ic_translate.xml │ │ │ ├── ic_update.xml │ │ │ ├── ic_view_quilt.xml │ │ │ ├── ic_visibility_off.xml │ │ │ ├── ic_volume_up.xml │ │ │ ├── ic_web_outline.xml │ │ │ ├── ic_web_service_noti.xml │ │ │ ├── recyclerview_divider_horizontal.xml │ │ │ ├── recyclerview_divider_vertical.xml │ │ │ ├── selector_btn_accent_bg.xml │ │ │ ├── selector_circle_btn_bg.xml │ │ │ ├── selector_common_bg.xml │ │ │ ├── selector_fillet_btn_bg.xml │ │ │ ├── selector_tv_black.xml │ │ │ ├── shape_card_view.xml │ │ │ ├── shape_circle.xml │ │ │ ├── shape_fillet_btn.xml │ │ │ ├── shape_fillet_btn_press.xml │ │ │ ├── shape_pop_checkaddshelf_bg.xml │ │ │ ├── shape_radius_10dp.xml │ │ │ ├── shape_radius_1dp.xml │ │ │ ├── shape_space_divider.xml │ │ │ ├── shape_text_cursor.xml │ │ │ └── shape_translucent_card.xml │ │ ├── layout/ │ │ │ ├── activity_about.xml │ │ │ ├── activity_all_bookmark.xml │ │ │ ├── activity_arrange_book.xml │ │ │ ├── activity_audio_play.xml │ │ │ ├── activity_book_info.xml │ │ │ ├── activity_book_info_edit.xml │ │ │ ├── activity_book_read.xml │ │ │ ├── activity_book_search.xml │ │ │ ├── activity_book_source.xml │ │ │ ├── activity_book_source_edit.xml │ │ │ ├── activity_cache_book.xml │ │ │ ├── activity_chapter_list.xml │ │ │ ├── activity_config.xml │ │ │ ├── activity_dict_rule.xml │ │ │ ├── activity_donate.xml │ │ │ ├── activity_explore_show.xml │ │ │ ├── activity_file_manage.xml │ │ │ ├── activity_import_book.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_manga.xml │ │ │ ├── activity_qrcode_capture.xml │ │ │ ├── activity_read_record.xml │ │ │ ├── activity_replace_edit.xml │ │ │ ├── activity_replace_rule.xml │ │ │ ├── activity_rss_artivles.xml │ │ │ ├── activity_rss_favorites.xml │ │ │ ├── activity_rss_read.xml │ │ │ ├── activity_rss_source.xml │ │ │ ├── activity_rss_source_edit.xml │ │ │ ├── activity_rule_sub.xml │ │ │ ├── activity_search_content.xml │ │ │ ├── activity_source_debug.xml │ │ │ ├── activity_source_login.xml │ │ │ ├── activity_translucence.xml │ │ │ ├── activity_txt_toc_rule.xml │ │ │ ├── activity_web_view.xml │ │ │ ├── activity_welcome.xml │ │ │ ├── dialog_add_to_bookshelf.xml │ │ │ ├── dialog_auto_read.xml │ │ │ ├── dialog_book_change_source.xml │ │ │ ├── dialog_book_group_edit.xml │ │ │ ├── dialog_book_group_picker.xml │ │ │ ├── dialog_bookmark.xml │ │ │ ├── dialog_bookshelf_config.xml │ │ │ ├── dialog_change_cover.xml │ │ │ ├── dialog_chapter_change_source.xml │ │ │ ├── dialog_check_source_config.xml │ │ │ ├── dialog_click_action_config.xml │ │ │ ├── dialog_code_view.xml │ │ │ ├── dialog_content_edit.xml │ │ │ ├── dialog_cover_rule_config.xml │ │ │ ├── dialog_custom_group.xml │ │ │ ├── dialog_dict.xml │ │ │ ├── dialog_dict_rule_edit.xml │ │ │ ├── dialog_direct_link_upload_config.xml │ │ │ ├── dialog_download_choice.xml │ │ │ ├── dialog_edit_text.xml │ │ │ ├── dialog_file_chooser.xml │ │ │ ├── dialog_font_select.xml │ │ │ ├── dialog_http_tts_edit.xml │ │ │ ├── dialog_image_blurring.xml │ │ │ ├── dialog_login.xml │ │ │ ├── dialog_manga_color_filter.xml │ │ │ ├── dialog_manga_epaper.xml │ │ │ ├── dialog_manga_footer_setting.xml │ │ │ ├── dialog_multiple_edit_text.xml │ │ │ ├── dialog_number_picker.xml │ │ │ ├── dialog_open_url_confirm.xml │ │ │ ├── dialog_page_key.xml │ │ │ ├── dialog_photo_view.xml │ │ │ ├── dialog_progressbar_view.xml │ │ │ ├── dialog_read_aloud.xml │ │ │ ├── dialog_read_bg_text.xml │ │ │ ├── dialog_read_book_style.xml │ │ │ ├── dialog_read_padding.xml │ │ │ ├── dialog_recycler_view.xml │ │ │ ├── dialog_rss_favorite_config.xml │ │ │ ├── dialog_rule_sub_edit.xml │ │ │ ├── dialog_search_scope.xml │ │ │ ├── dialog_select_section_export.xml │ │ │ ├── dialog_simulated_reading.xml │ │ │ ├── dialog_source_picker.xml │ │ │ ├── dialog_text_view.xml │ │ │ ├── dialog_tip_config.xml │ │ │ ├── dialog_toc_regex.xml │ │ │ ├── dialog_toc_regex_edit.xml │ │ │ ├── dialog_update.xml │ │ │ ├── dialog_url_option_edit.xml │ │ │ ├── dialog_variable.xml │ │ │ ├── dialog_verification_code_view.xml │ │ │ ├── dialog_wait.xml │ │ │ ├── dialog_webdav_server.xml │ │ │ ├── fragment_bookmark.xml │ │ │ ├── fragment_books.xml │ │ │ ├── fragment_bookshelf1.xml │ │ │ ├── fragment_bookshelf2.xml │ │ │ ├── fragment_chapter_list.xml │ │ │ ├── fragment_explore.xml │ │ │ ├── fragment_my_config.xml │ │ │ ├── fragment_rss.xml │ │ │ ├── fragment_rss_articles.xml │ │ │ ├── fragment_web_view_login.xml │ │ │ ├── item_1line_text.xml │ │ │ ├── item_1line_text_and_del.xml │ │ │ ├── item_app_log.xml │ │ │ ├── item_arrange_book.xml │ │ │ ├── item_bg_image.xml │ │ │ ├── item_book_file_import.xml │ │ │ ├── item_book_group_manage.xml │ │ │ ├── item_book_manga_edge.xml │ │ │ ├── item_book_manga_page.xml │ │ │ ├── item_book_source.xml │ │ │ ├── item_bookmark.xml │ │ │ ├── item_bookshelf_grid.xml │ │ │ ├── item_bookshelf_grid_group.xml │ │ │ ├── item_bookshelf_list.xml │ │ │ ├── item_bookshelf_list_group.xml │ │ │ ├── item_change_source.xml │ │ │ ├── item_chapter_list.xml │ │ │ ├── item_check_box.xml │ │ │ ├── item_cover.xml │ │ │ ├── item_dict_rule.xml │ │ │ ├── item_download.xml │ │ │ ├── item_file.xml │ │ │ ├── item_file_picker.xml │ │ │ ├── item_fillet_text.xml │ │ │ ├── item_find_book.xml │ │ │ ├── item_font.xml │ │ │ ├── item_group_manage.xml │ │ │ ├── item_group_select.xml │ │ │ ├── item_http_tts.xml │ │ │ ├── item_icon_preference.xml │ │ │ ├── item_import_book.xml │ │ │ ├── item_log.xml │ │ │ ├── item_path_picker.xml │ │ │ ├── item_radio_button.xml │ │ │ ├── item_read_record.xml │ │ │ ├── item_read_style.xml │ │ │ ├── item_replace_rule.xml │ │ │ ├── item_rss.xml │ │ │ ├── item_rss_article.xml │ │ │ ├── item_rss_article_1.xml │ │ │ ├── item_rss_article_2.xml │ │ │ ├── item_rss_read_record.xml │ │ │ ├── item_rss_source.xml │ │ │ ├── item_rule_sub.xml │ │ │ ├── item_search.xml │ │ │ ├── item_search_list.xml │ │ │ ├── item_server_select.xml │ │ │ ├── item_source_edit.xml │ │ │ ├── item_source_edit_check_box.xml │ │ │ ├── item_source_import.xml │ │ │ ├── item_text.xml │ │ │ ├── item_theme_config.xml │ │ │ ├── item_toc_regex.xml │ │ │ ├── item_txt_toc_rule.xml │ │ │ ├── popup_action.xml │ │ │ ├── popup_action_menu.xml │ │ │ ├── popup_keyboard_tool.xml │ │ │ ├── popup_seek_bar.xml │ │ │ ├── view_action_button.xml │ │ │ ├── view_book_page.xml │ │ │ ├── view_detail_seek_bar.xml │ │ │ ├── view_dynamic.xml │ │ │ ├── view_error.xml │ │ │ ├── view_fastscroller.xml │ │ │ ├── view_icon.xml │ │ │ ├── view_load_more.xml │ │ │ ├── view_loading.xml │ │ │ ├── view_manga_menu.xml │ │ │ ├── view_navigation_badge.xml │ │ │ ├── view_preference.xml │ │ │ ├── view_preference_category.xml │ │ │ ├── view_read_menu.xml │ │ │ ├── view_refresh_recycler.xml │ │ │ ├── view_search.xml │ │ │ ├── view_search_menu.xml │ │ │ ├── view_select_action_bar.xml │ │ │ ├── view_tab_layout.xml │ │ │ ├── view_tab_layout_min.xml │ │ │ ├── view_title_bar.xml │ │ │ ├── view_title_bar_dark.xml │ │ │ └── view_toast.xml │ │ ├── layout-land/ │ │ │ └── activity_book_info.xml │ │ ├── menu/ │ │ │ ├── about.xml │ │ │ ├── app_log.xml │ │ │ ├── app_update.xml │ │ │ ├── audio_play.xml │ │ │ ├── backup_restore.xml │ │ │ ├── book_cache.xml │ │ │ ├── book_cache_download.xml │ │ │ ├── book_group_manage.xml │ │ │ ├── book_info.xml │ │ │ ├── book_info_edit.xml │ │ │ ├── book_manga.xml │ │ │ ├── book_read.xml │ │ │ ├── book_read_change_source.xml │ │ │ ├── book_read_record.xml │ │ │ ├── book_read_refresh.xml │ │ │ ├── book_read_source.xml │ │ │ ├── book_remote.xml │ │ │ ├── book_search.xml │ │ │ ├── book_search_scope.xml │ │ │ ├── book_source.xml │ │ │ ├── book_source_debug.xml │ │ │ ├── book_source_item.xml │ │ │ ├── book_source_sel.xml │ │ │ ├── book_toc.xml │ │ │ ├── bookmark.xml │ │ │ ├── bookshelf_manage.xml │ │ │ ├── bookshelf_menage_sel.xml │ │ │ ├── change_cover.xml │ │ │ ├── change_source.xml │ │ │ ├── change_source_item.xml │ │ │ ├── code_edit.xml │ │ │ ├── content_edit.xml │ │ │ ├── content_search.xml │ │ │ ├── content_select_action.xml │ │ │ ├── crash_log.xml │ │ │ ├── dialog_text.xml │ │ │ ├── dict_rule.xml │ │ │ ├── dict_rule_edit.xml │ │ │ ├── dict_rule_sel.xml │ │ │ ├── direct_link_upload_config.xml │ │ │ ├── explore_item.xml │ │ │ ├── file_chooser.xml │ │ │ ├── file_long_click.xml │ │ │ ├── font_select.xml │ │ │ ├── group_manage.xml │ │ │ ├── import_book.xml │ │ │ ├── import_book_sel.xml │ │ │ ├── import_replace.xml │ │ │ ├── import_source.xml │ │ │ ├── keyboard_assists_config.xml │ │ │ ├── main_bnv.xml │ │ │ ├── main_bookshelf.xml │ │ │ ├── main_explore.xml │ │ │ ├── main_my.xml │ │ │ ├── main_rss.xml │ │ │ ├── open_url_confirm.xml │ │ │ ├── qr_code_scan.xml │ │ │ ├── replace_edit.xml │ │ │ ├── replace_rule.xml │ │ │ ├── replace_rule_item.xml │ │ │ ├── replace_rule_sel.xml │ │ │ ├── rss_articles.xml │ │ │ ├── rss_favorites.xml │ │ │ ├── rss_main_item.xml │ │ │ ├── rss_read.xml │ │ │ ├── rss_read_record.xml │ │ │ ├── rss_source.xml │ │ │ ├── rss_source_debug.xml │ │ │ ├── rss_source_item.xml │ │ │ ├── rss_source_sel.xml │ │ │ ├── save.xml │ │ │ ├── search_view.xml │ │ │ ├── server_config.xml │ │ │ ├── servers.xml │ │ │ ├── source_edit.xml │ │ │ ├── source_login.xml │ │ │ ├── source_picker.xml │ │ │ ├── source_sub_item.xml │ │ │ ├── source_subscription.xml │ │ │ ├── source_webview_login.xml │ │ │ ├── speak_engine.xml │ │ │ ├── speak_engine_edit.xml │ │ │ ├── theme_config.xml │ │ │ ├── theme_list.xml │ │ │ ├── txt_toc_rule.xml │ │ │ ├── txt_toc_rule_edit.xml │ │ │ ├── txt_toc_rule_item.xml │ │ │ ├── txt_toc_rule_sel.xml │ │ │ ├── verification_code.xml │ │ │ └── web_view.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ ├── launcher1.xml │ │ │ ├── launcher2.xml │ │ │ ├── launcher3.xml │ │ │ ├── launcher4.xml │ │ │ ├── launcher5.xml │ │ │ └── launcher6.xml │ │ ├── values/ │ │ │ ├── array_values.xml │ │ │ ├── arrays.xml │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── colors_material_design.xml │ │ │ ├── dimens.xml │ │ │ ├── ids.xml │ │ │ ├── non_translat.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── values-es-rES/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ ├── values-ja-rJP/ │ │ │ └── strings.xml │ │ ├── values-night/ │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── values-pt-rBR/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ ├── values-vi/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ ├── values-zh/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ ├── values-zh-rHK/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ ├── values-zh-rTW/ │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ └── xml/ │ │ ├── about.xml │ │ ├── file_paths.xml │ │ ├── network_security_config.xml │ │ ├── pref_config_aloud.xml │ │ ├── pref_config_backup.xml │ │ ├── pref_config_cover.xml │ │ ├── pref_config_other.xml │ │ ├── pref_config_read.xml │ │ ├── pref_config_theme.xml │ │ ├── pref_config_welcome.xml │ │ ├── pref_main.xml │ │ └── spen_remote_actions.xml │ └── test/ │ └── java/ │ └── io/ │ └── legado/ │ └── app/ │ ├── ExampleUnitTest.kt │ └── JsTest.kt ├── avd.bat ├── avd.sh ├── build.gradle ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── modules/ │ ├── book/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── consumer-rules.pro │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── me/ │ │ │ └── ag2s/ │ │ │ ├── base/ │ │ │ │ ├── PfdHelper.java │ │ │ │ └── ThrowableUtils.java │ │ │ ├── epublib/ │ │ │ │ ├── Constants.java │ │ │ │ ├── browsersupport/ │ │ │ │ │ ├── NavigationEvent.java │ │ │ │ │ ├── NavigationEventListener.java │ │ │ │ │ ├── NavigationHistory.java │ │ │ │ │ ├── Navigator.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── domain/ │ │ │ │ │ ├── Author.java │ │ │ │ │ ├── Date.java │ │ │ │ │ ├── EpubBook.java │ │ │ │ │ ├── EpubResourceProvider.java │ │ │ │ │ ├── FileResourceProvider.java │ │ │ │ │ ├── Guide.java │ │ │ │ │ ├── GuideReference.java │ │ │ │ │ ├── Identifier.java │ │ │ │ │ ├── LazyResource.java │ │ │ │ │ ├── LazyResourceProvider.java │ │ │ │ │ ├── ManifestItemProperties.java │ │ │ │ │ ├── ManifestItemRefProperties.java │ │ │ │ │ ├── ManifestProperties.java │ │ │ │ │ ├── MediaType.java │ │ │ │ │ ├── MediaTypes.java │ │ │ │ │ ├── Metadata.java │ │ │ │ │ ├── Relator.java │ │ │ │ │ ├── Resource.java │ │ │ │ │ ├── ResourceInputStream.java │ │ │ │ │ ├── ResourceReference.java │ │ │ │ │ ├── Resources.java │ │ │ │ │ ├── Spine.java │ │ │ │ │ ├── SpineReference.java │ │ │ │ │ ├── TOCReference.java │ │ │ │ │ ├── TableOfContents.java │ │ │ │ │ └── TitledResourceReference.java │ │ │ │ ├── epub/ │ │ │ │ │ ├── BookProcessor.java │ │ │ │ │ ├── BookProcessorPipeline.java │ │ │ │ │ ├── DOMUtil.java │ │ │ │ │ ├── EpubProcessorSupport.java │ │ │ │ │ ├── EpubReader.java │ │ │ │ │ ├── EpubWriter.java │ │ │ │ │ ├── EpubWriterProcessor.java │ │ │ │ │ ├── HtmlProcessor.java │ │ │ │ │ ├── NCXDocumentV2.java │ │ │ │ │ ├── NCXDocumentV3.java │ │ │ │ │ ├── PackageDocumentBase.java │ │ │ │ │ ├── PackageDocumentMetadataReader.java │ │ │ │ │ ├── PackageDocumentMetadataWriter.java │ │ │ │ │ ├── PackageDocumentReader.java │ │ │ │ │ ├── PackageDocumentWriter.java │ │ │ │ │ └── ResourcesLoader.java │ │ │ │ └── util/ │ │ │ │ ├── CollectionUtil.java │ │ │ │ ├── IOUtil.java │ │ │ │ ├── NoCloseOutputStream.java │ │ │ │ ├── NoCloseWriter.java │ │ │ │ ├── ResourceUtil.java │ │ │ │ ├── StringUtil.java │ │ │ │ ├── URLEncodeUtil.java │ │ │ │ ├── commons/ │ │ │ │ │ └── io/ │ │ │ │ │ ├── BOMInputStream.java │ │ │ │ │ ├── ByteOrderMark.java │ │ │ │ │ ├── IOConsumer.java │ │ │ │ │ ├── ProxyInputStream.java │ │ │ │ │ ├── XmlStreamReader.java │ │ │ │ │ └── XmlStreamReaderException.java │ │ │ │ └── zip/ │ │ │ │ ├── AndroidZipEntry.java │ │ │ │ ├── AndroidZipFile.java │ │ │ │ ├── ZipConstants.java │ │ │ │ ├── ZipEntryWrapper.java │ │ │ │ ├── ZipException.java │ │ │ │ └── ZipFileWrapper.java │ │ │ └── umdlib/ │ │ │ ├── domain/ │ │ │ │ ├── UmdBook.java │ │ │ │ ├── UmdChapters.java │ │ │ │ ├── UmdCover.java │ │ │ │ ├── UmdEnd.java │ │ │ │ └── UmdHeader.java │ │ │ ├── tool/ │ │ │ │ ├── StreamReader.java │ │ │ │ ├── UmdUtils.java │ │ │ │ └── WrapOutputStream.java │ │ │ └── umd/ │ │ │ └── UmdReader.java │ │ └── resources/ │ │ ├── dtd/ │ │ │ ├── openebook.org/ │ │ │ │ └── dtds/ │ │ │ │ └── oeb-1.2/ │ │ │ │ ├── oeb12.ent │ │ │ │ └── oebpkg12.dtd │ │ │ ├── www.daisy.org/ │ │ │ │ └── z3986/ │ │ │ │ └── 2005/ │ │ │ │ └── ncx-2005-1.dtd │ │ │ └── www.w3.org/ │ │ │ └── TR/ │ │ │ ├── ruby/ │ │ │ │ └── xhtml-ruby-1.mod │ │ │ ├── xhtml-modularization/ │ │ │ │ └── DTD/ │ │ │ │ ├── xhtml-arch-1.mod │ │ │ │ ├── xhtml-attribs-1.mod │ │ │ │ ├── xhtml-base-1.mod │ │ │ │ ├── xhtml-bdo-1.mod │ │ │ │ ├── xhtml-blkphras-1.mod │ │ │ │ ├── xhtml-blkpres-1.mod │ │ │ │ ├── xhtml-blkstruct-1.mod │ │ │ │ ├── xhtml-charent-1.mod │ │ │ │ ├── xhtml-csismap-1.mod │ │ │ │ ├── xhtml-datatypes-1.mod │ │ │ │ ├── xhtml-datatypes-1.mod.1 │ │ │ │ ├── xhtml-edit-1.mod │ │ │ │ ├── xhtml-events-1.mod │ │ │ │ ├── xhtml-form-1.mod │ │ │ │ ├── xhtml-framework-1.mod │ │ │ │ ├── xhtml-hypertext-1.mod │ │ │ │ ├── xhtml-image-1.mod │ │ │ │ ├── xhtml-inlphras-1.mod │ │ │ │ ├── xhtml-inlpres-1.mod │ │ │ │ ├── xhtml-inlstruct-1.mod │ │ │ │ ├── xhtml-inlstyle-1.mod │ │ │ │ ├── xhtml-lat1.ent │ │ │ │ ├── xhtml-link-1.mod │ │ │ │ ├── xhtml-list-1.mod │ │ │ │ ├── xhtml-meta-1.mod │ │ │ │ ├── xhtml-notations-1.mod │ │ │ │ ├── xhtml-object-1.mod │ │ │ │ ├── xhtml-param-1.mod │ │ │ │ ├── xhtml-pres-1.mod │ │ │ │ ├── xhtml-qname-1.mod │ │ │ │ ├── xhtml-script-1.mod │ │ │ │ ├── xhtml-special.ent │ │ │ │ ├── xhtml-ssismap-1.mod │ │ │ │ ├── xhtml-struct-1.mod │ │ │ │ ├── xhtml-style-1.mod │ │ │ │ ├── xhtml-symbol.ent │ │ │ │ ├── xhtml-symbol.ent.1 │ │ │ │ ├── xhtml-table-1.mod │ │ │ │ ├── xhtml-text-1.mod │ │ │ │ └── xhtml11-model-1.mod │ │ │ ├── xhtml1/ │ │ │ │ └── DTD/ │ │ │ │ ├── xhtml-lat1.ent │ │ │ │ ├── xhtml-special.ent │ │ │ │ ├── xhtml-symbol.ent │ │ │ │ ├── xhtml1-strict.dtd │ │ │ │ └── xhtml1-transitional.dtd │ │ │ └── xhtml11/ │ │ │ └── DTD/ │ │ │ └── xhtml11.dtd │ │ └── log4j.properties │ ├── rhino/ │ │ ├── build.gradle │ │ ├── consumer-rules.pro │ │ ├── lib/ │ │ │ └── rhino-1.7.14.jar │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── script/ │ │ ├── AbstractScriptEngine.kt │ │ ├── Bindings.kt │ │ ├── Compilable.kt │ │ ├── CompiledScript.kt │ │ ├── Invocable.kt │ │ ├── RhinoContextFactory.kt │ │ ├── ScriptBindings.kt │ │ ├── ScriptBindingsExtensions.kt │ │ ├── ScriptContext.kt │ │ ├── ScriptEngine.kt │ │ ├── ScriptException.kt │ │ ├── SimpleBindings.kt │ │ ├── SimpleScriptContext.kt │ │ └── rhino/ │ │ ├── ClassNameMatcher.kt │ │ ├── CollectionExtensions.kt │ │ ├── ExternalScriptable.kt │ │ ├── InterfaceImplementor.kt │ │ ├── JSAdapter.kt │ │ ├── JavaAdapter.kt │ │ ├── JavaObjectWrapFactory.kt │ │ ├── ProtectedNativeJavaClass.kt │ │ ├── ReadOnlyJavaObject.kt │ │ ├── RhinoClassShutter.kt │ │ ├── RhinoCompiledScript.kt │ │ ├── RhinoContext.kt │ │ ├── RhinoErrors.kt │ │ ├── RhinoExtensions.kt │ │ ├── RhinoScriptEngine.kt │ │ ├── RhinoTopLevel.kt │ │ ├── RhinoWrapFactory.kt │ │ └── VMBridgeReflect.kt │ └── web/ │ ├── .browserslistrc │ ├── .editorconfig │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.json │ ├── LICENSE │ ├── README.md │ ├── env.d.ts │ ├── eslint.config.mjs │ ├── index.html │ ├── package.json │ ├── scripts/ │ │ └── sync.js │ ├── src/ │ │ ├── App.vue │ │ ├── api/ │ │ │ ├── api.ts │ │ │ ├── axios.ts │ │ │ └── index.ts │ │ ├── assets/ │ │ │ ├── bookshelf.css │ │ │ ├── code.css │ │ │ ├── fonts/ │ │ │ │ ├── iconfont.css │ │ │ │ ├── popfont.css │ │ │ │ └── shelffont.css │ │ │ ├── kbd.css │ │ │ └── sourceeditor.css │ │ ├── auto-imports.d.ts │ │ ├── book.d.ts │ │ ├── components/ │ │ │ ├── BookItems.vue │ │ │ ├── CatalogItem.vue │ │ │ ├── ChapterContent.vue │ │ │ ├── PopCatalog.vue │ │ │ ├── ReadSettings.vue │ │ │ ├── SourceDebug.vue │ │ │ ├── SourceHelp.vue │ │ │ ├── SourceItem.vue │ │ │ ├── SourceJson.vue │ │ │ ├── SourceList.vue │ │ │ ├── SourceTabForm.vue │ │ │ ├── SourceTabTools.vue │ │ │ └── ToolBar.vue │ │ ├── components.d.ts │ │ ├── config/ │ │ │ ├── bookSourceEditConfig.ts │ │ │ ├── rssSourceEditConfig.ts │ │ │ ├── sourceConfig.d.ts │ │ │ └── themeConfig.ts │ │ ├── hooks/ │ │ │ ├── loading.css │ │ │ └── loading.ts │ │ ├── main.ts │ │ ├── pages/ │ │ │ ├── bookshelf/ │ │ │ │ ├── README.md │ │ │ │ ├── index.html │ │ │ │ └── main.js │ │ │ └── source/ │ │ │ ├── README.md │ │ │ ├── index.html │ │ │ └── main.js │ │ ├── plugins/ │ │ │ ├── jump.d.ts │ │ │ └── jump.js │ │ ├── router/ │ │ │ ├── bookRouter.ts │ │ │ ├── index.ts │ │ │ └── sourceRouter.ts │ │ ├── source.d.ts │ │ ├── store/ │ │ │ ├── bookStore.ts │ │ │ ├── connectionStore.ts │ │ │ ├── index.ts │ │ │ └── sourceStore.ts │ │ ├── utils/ │ │ │ ├── souce.ts │ │ │ └── utils.ts │ │ ├── views/ │ │ │ ├── BookChapter.vue │ │ │ ├── BookShelf.vue │ │ │ └── SourceEditor.vue │ │ └── web.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── package.json └── settings.gradle