gitextract_o9exicg3/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows/ │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── common/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── common/ │ └── result/ │ ├── ErrorHandler.kt │ ├── NetworkLogEntry.kt │ └── Result.kt ├── data/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── desarrollodroide/ │ │ └── data/ │ │ └── local/ │ │ └── room/ │ │ ├── BookmarkHtmlDaoTest.kt │ │ ├── BookmarksDaoTest.kt │ │ └── TagsDaoTest.kt │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── desarrollodroide/ │ │ │ └── data/ │ │ │ ├── di/ │ │ │ │ ├── DataModule.kt │ │ │ │ └── PersistenceModule.kt │ │ │ ├── extensions/ │ │ │ │ ├── GSONS.kt │ │ │ │ ├── IntExtensions.kt │ │ │ │ ├── StringExtensions.kt │ │ │ │ └── TagExtensions.kt │ │ │ ├── helpers/ │ │ │ │ ├── Constants.kt │ │ │ │ ├── CrashHandler.kt │ │ │ │ ├── CrashHandlerImpl.kt │ │ │ │ ├── GSON.kt │ │ │ │ └── TagTypeAdapter.kt │ │ │ ├── local/ │ │ │ │ ├── datastore/ │ │ │ │ │ ├── ChangeListVersions.kt │ │ │ │ │ ├── HideTagSerializer.kt │ │ │ │ │ ├── RememberUserPreferencesSerializer.kt │ │ │ │ │ ├── SystemPreferencesSerializer.kt │ │ │ │ │ └── UserPreferencesSerializer.kt │ │ │ │ ├── preferences/ │ │ │ │ │ ├── SettingsPreferenceDataSource.kt │ │ │ │ │ └── SettingsPreferencesDataSourceImpl.kt │ │ │ │ └── room/ │ │ │ │ ├── converters/ │ │ │ │ │ └── TagsConverter.kt │ │ │ │ ├── dao/ │ │ │ │ │ ├── BookmarkHtmlDao.kt │ │ │ │ │ ├── BookmarksDao.kt │ │ │ │ │ └── TagDao.kt │ │ │ │ ├── database/ │ │ │ │ │ └── BookmarksDatabase.kt │ │ │ │ └── entity/ │ │ │ │ ├── BookmarkEntity.kt │ │ │ │ ├── BookmarkHtmlEntity.kt │ │ │ │ ├── BookmarkTagCrossRef.kt │ │ │ │ ├── BookmarkWithTags.kt │ │ │ │ └── TagEntity.kt │ │ │ ├── mapper/ │ │ │ │ └── Mapper.kt │ │ │ ├── repository/ │ │ │ │ ├── AuthRepository.kt │ │ │ │ ├── AuthRepositoryImpl.kt │ │ │ │ ├── BookmarksRepository.kt │ │ │ │ ├── BookmarksRepositoryImpl.kt │ │ │ │ ├── ErrorHandlerImpl.kt │ │ │ │ ├── FileRepository.kt │ │ │ │ ├── FileRepositoryImpl.kt │ │ │ │ ├── SettingsRepository.kt │ │ │ │ ├── SettingsRepositoryImpl.kt │ │ │ │ ├── SyncWorks.kt │ │ │ │ ├── SyncWorksImpl.kt │ │ │ │ ├── SystemRepository.kt │ │ │ │ ├── SystemRepositoryImpl.kt │ │ │ │ ├── TagsRepository.kt │ │ │ │ ├── TagsRepositoryImpl.kt │ │ │ │ ├── paging/ │ │ │ │ │ ├── BookmarkPagingSource.kt │ │ │ │ │ ├── BookmarksRemoteMediator.kt │ │ │ │ │ └── LocalBookmarkPagingSource.kt │ │ │ │ └── workers/ │ │ │ │ └── SyncWorker.kt │ │ │ └── util/ │ │ │ └── SyncUtilities.kt │ │ └── proto/ │ │ └── prefs.proto │ └── test/ │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── data/ │ ├── extensions/ │ │ ├── IntExtensionsTest.kt │ │ └── StringExtensionsKtTest.kt │ ├── helpers/ │ │ └── TagTypeAdapterTest.kt │ ├── local/ │ │ ├── datastore/ │ │ │ ├── HideTagSerializerTest.kt │ │ │ ├── RememberUserPreferencesSerializerTest.kt │ │ │ └── UserPreferencesSerializerTest.kt │ │ ├── preferences/ │ │ │ └── SettingsPreferencesDataSourceTest.kt │ │ └── room/ │ │ └── converters/ │ │ └── TagsConverterTest.kt │ ├── mapper/ │ │ └── MapperTest.kt │ └── repository/ │ ├── AuthRepositoryTest.kt │ └── BookmarksRepositoryTest.kt ├── domain/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── domain/ │ └── usecase/ │ ├── AddBookmarkUseCase.kt │ ├── DeleteBookmarkUseCase.kt │ ├── DeleteLocalBookmarkUseCase.kt │ ├── DownloadFileUseCase.kt │ ├── EditBookmarkUseCase.kt │ ├── GetAllRemoteBookmarksUseCase.kt │ ├── GetBookmarkReadableContentUseCase.kt │ ├── GetBookmarkUseCase.kt │ ├── GetBookmarksUseCase.kt │ ├── GetLocalPagingBookmarksUseCase.kt │ ├── GetTagsUseCase.kt │ ├── SendLoginUseCase.kt │ ├── SendLogoutUseCase.kt │ ├── SuspendUseCase.kt │ ├── SyncBookmarksUseCase.kt │ ├── SystemLivenessUseCase.kt │ └── UpdateBookmarkCacheUseCase.kt ├── fastlane/ │ └── metadata/ │ └── android/ │ ├── de/ │ │ ├── full_description.txt │ │ └── short_description.txt │ └── en-US/ │ ├── changelogs/ │ │ └── default.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── model/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── model/ │ ├── Account.kt │ ├── Bookmark.kt │ ├── Bookmarks.kt │ ├── LivenessResponse.kt │ ├── LoginResponseMessage.kt │ ├── ModifiedBookmarks.kt │ ├── PendingJob.kt │ ├── ReadableContent.kt │ ├── ReadableMessage.kt │ ├── ReleaseInfo.kt │ ├── SyncBookmarksRequestPayload.kt │ ├── SyncBookmarksResponse.kt │ ├── Tag.kt │ ├── UpdateCachePayload.kt │ └── User.kt ├── network/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ ├── lint.xml │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── network/ │ ├── di/ │ │ └── NetworkingModule.kt │ ├── model/ │ │ ├── AccountDTO.kt │ │ ├── ApiResponse.kt │ │ ├── BookmarkDTO.kt │ │ ├── BookmarkResponseDTO.kt │ │ ├── BookmarksDTO.kt │ │ ├── LivenessResponseDTO.kt │ │ ├── LoginRequestPayload.kt │ │ ├── LoginResponseDTO.kt │ │ ├── LoginResponseMessageDTO.kt │ │ ├── ModifiedBookmarksDTO.kt │ │ ├── ReadableContentResponseDTO.kt │ │ ├── ReadableMessageDto.kt │ │ ├── ReleaseInfoDTO.kt │ │ ├── SessionDTO.kt │ │ ├── SyncBookmarksMessageDTO.kt │ │ ├── SyncBookmarksResponseDTO.kt │ │ ├── TagDTO.kt │ │ ├── TagsDTO.kt │ │ ├── UpdateCachePayloadDTO.kt │ │ ├── UpdateCachePayloadV1DTO.kt │ │ └── util/ │ │ └── NetworkChangeList.kt │ └── retrofit/ │ ├── FileRemoteDataSource.kt │ ├── NetworkBoundResource.kt │ ├── NetworkLoggerInterceptor.kt │ └── RetrofitNetwork.kt ├── presentation/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── desarrollodroide/ │ │ │ └── pagekeeper/ │ │ │ ├── ComposeSetup.kt │ │ │ ├── MainActivity.kt │ │ │ ├── ShioriApp.kt │ │ │ ├── di/ │ │ │ │ ├── AppModule.kt │ │ │ │ └── PresenterModule.kt │ │ │ ├── extensions/ │ │ │ │ ├── ContextExtensions.kt │ │ │ │ ├── ImageLoaderExtensions.kt │ │ │ │ ├── LongExtensions.kt │ │ │ │ └── StringExtensions.kt │ │ │ ├── helpers/ │ │ │ │ ├── ThemeManager.kt │ │ │ │ └── ThemeManagerImpl.kt │ │ │ ├── navigation/ │ │ │ │ ├── NavItem.kt │ │ │ │ └── Navigation.kt │ │ │ └── ui/ │ │ │ ├── bookmarkeditor/ │ │ │ │ ├── BookmarkEditorActivity.kt │ │ │ │ ├── BookmarkEditorScreen.kt │ │ │ │ ├── BookmarkEditorView.kt │ │ │ │ ├── BookmarkViewModel.kt │ │ │ │ ├── NotSessionScreen.kt │ │ │ │ └── ProgressButton.kt │ │ │ ├── components/ │ │ │ │ ├── CategoriesView.kt │ │ │ │ ├── Dialogs.kt │ │ │ │ ├── LoadingButton.kt │ │ │ │ ├── UiState.kt │ │ │ │ └── pulltorefresh/ │ │ │ │ ├── PullRefresh.kt │ │ │ │ ├── PullRefreshIndicator.kt │ │ │ │ ├── PullRefreshIndicatorTransform.kt │ │ │ │ └── PullRefreshState.kt │ │ │ ├── feed/ │ │ │ │ ├── BookmarkViewer.kt │ │ │ │ ├── CategoriesView.kt │ │ │ │ ├── FeedContent.kt │ │ │ │ ├── FeedScreen.kt │ │ │ │ ├── FeedViewModel.kt │ │ │ │ ├── ItemLazyLoad.kt │ │ │ │ ├── NoContentView.kt │ │ │ │ ├── SearchBarView.kt │ │ │ │ ├── SearchViewModel.kt │ │ │ │ └── item/ │ │ │ │ ├── BookmarkImageView.kt │ │ │ │ ├── BookmarkItem.kt │ │ │ │ ├── ButtonsView.kt │ │ │ │ ├── ClickableCategoriesView.kt │ │ │ │ ├── FullBookmarkView.kt │ │ │ │ ├── PendingSyncBanner.kt │ │ │ │ └── SmallBookmarkView.kt │ │ │ ├── home/ │ │ │ │ ├── BottomNavItem.kt │ │ │ │ └── HomeScreen.kt │ │ │ ├── login/ │ │ │ │ ├── LoginButton.kt │ │ │ │ ├── LoginScreen.kt │ │ │ │ ├── LoginViewModel.kt │ │ │ │ ├── PasswordTextField.kt │ │ │ │ ├── RememberSessionSection.kt │ │ │ │ ├── ServerUrlTextField.kt │ │ │ │ └── UserTextField.kt │ │ │ ├── readablecontent/ │ │ │ │ ├── ErrorView.kt │ │ │ │ ├── ReadableContentScreen.kt │ │ │ │ ├── ReadableContentViewModel.kt │ │ │ │ └── TopSection.kt │ │ │ ├── settings/ │ │ │ │ ├── AccountSection.kt │ │ │ │ ├── ClickableOption.kt │ │ │ │ ├── DataSection.kt │ │ │ │ ├── DebugSection.kt │ │ │ │ ├── DefaultsSection.kt │ │ │ │ ├── FeedSection.kt │ │ │ │ ├── HideCategoryOptionView.kt │ │ │ │ ├── LinkableText.kt │ │ │ │ ├── PrivacyPolicyScreen.kt │ │ │ │ ├── SettingsScreen.kt │ │ │ │ ├── SettingsSectionState.kt │ │ │ │ ├── SettingsViewModel.kt │ │ │ │ ├── SwitchOption.kt │ │ │ │ ├── TermsOfUseScreen.kt │ │ │ │ ├── VisualSection.kt │ │ │ │ ├── crash/ │ │ │ │ │ ├── CrashLogScreen.kt │ │ │ │ │ └── CrashLogViewModel.kt │ │ │ │ └── logcat/ │ │ │ │ ├── NetworkLogScreen.kt │ │ │ │ └── NetworkLogViewModel.kt │ │ │ └── theme/ │ │ │ ├── Color.kt │ │ │ ├── Shape.kt │ │ │ ├── Theme.kt │ │ │ └── Type.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── curved_wave_bottom.xml │ │ │ ├── curved_wave_top.xml │ │ │ ├── ic_book.xml │ │ │ ├── ic_empty_list.xml │ │ │ └── img_authentication_failed.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── values/ │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── values-large/ │ │ │ └── dimens.xml │ │ └── xml/ │ │ ├── data_extraction_rules.xml │ │ └── file_paths.xml │ └── test/ │ └── java/ │ └── com/ │ └── desarrollodroide/ │ └── pagekeeper/ │ └── extensions/ │ └── StringExtensionsKtTest.kt └── settings.gradle