├── .ci-local ├── check-libraries.txt ├── check-repositories.txt ├── check-versions.properties ├── credentials-fake.sh ├── credentials.sh ├── deploy-fastlane-apps.conf └── deploy-firebase-apps.conf ├── .editorconfig ├── .github └── workflows │ ├── android-daily-drm-free-jdk11.yml │ ├── android-daily-drm-free-jdk15.yml │ ├── android-main.yml │ ├── android-pr.yml │ ├── android-robo-tests.yml │ ├── open-ebooks.yml │ └── simplye.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README-CHANGES.txt ├── README.md ├── RELEASING.md ├── build.gradle ├── buildSrc ├── build.gradle.kts └── src │ └── main │ └── java │ └── org │ └── librarysimplified │ └── gradle │ └── RequiredAssetsTask.kt ├── build_aar.gradle ├── build_apk.gradle ├── build_jar.gradle ├── build_ktlint.gradle ├── build_publishing.gradle ├── build_test.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── pull_request_template.md ├── settings.gradle ├── simplified-accessibility ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── accessibility │ │ ├── AccessibilityEvents.kt │ │ ├── AccessibilityEventsType.kt │ │ ├── AccessibilityService.kt │ │ ├── AccessibilityServiceType.kt │ │ ├── AccessibilityStrings.kt │ │ └── AccessibilityStringsType.kt │ └── res │ └── values │ └── strings.xml ├── simplified-accounts-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── accounts │ └── api │ ├── AccountAuthenticationAdobeActivation.kt │ ├── AccountAuthenticationAdobeClientToken.kt │ ├── AccountAuthenticationAdobePostActivationCredentials.kt │ ├── AccountAuthenticationAdobePreActivationCredentials.kt │ ├── AccountAuthenticationCredentials.kt │ ├── AccountAuthenticationCredentialsStoreType.kt │ ├── AccountAuthenticationHelpers.kt │ ├── AccountBundledCredentialsType.kt │ ├── AccountCookie.kt │ ├── AccountDescription.java │ ├── AccountDistance.kt │ ├── AccountDistanceUnit.kt │ ├── AccountEvent.kt │ ├── AccountEventCreation.kt │ ├── AccountEventDeletion.kt │ ├── AccountEventLoginStateChanged.kt │ ├── AccountEventUpdated.kt │ ├── AccountGeoLocation.kt │ ├── AccountID.kt │ ├── AccountLibraryLocation.kt │ ├── AccountLoginState.kt │ ├── AccountLoginStringResourcesType.kt │ ├── AccountLogoutStringResourcesType.kt │ ├── AccountPassword.kt │ ├── AccountPreferences.kt │ ├── AccountProvider.kt │ ├── AccountProviderAuthenticationDescription.kt │ ├── AccountProviderBuilderType.kt │ ├── AccountProviderDescription.kt │ ├── AccountProviderDescriptionCollection.kt │ ├── AccountProviderDescriptionCollectionParserType.kt │ ├── AccountProviderDescriptionCollectionParsersType.kt │ ├── AccountProviderDescriptionCollectionSerializerType.kt │ ├── AccountProviderDescriptionCollectionSerializersType.kt │ ├── AccountProviderDescriptionParserType.kt │ ├── AccountProviderDescriptionParsersType.kt │ ├── AccountProviderDescriptionSerializerType.kt │ ├── AccountProviderDescriptionSerializersType.kt │ ├── AccountProviderFallbackType.kt │ ├── AccountProviderResolutionListenerType.kt │ ├── AccountProviderResolutionStringsType.kt │ ├── AccountProviderType.kt │ ├── AccountReadableType.kt │ ├── AccountSearchQuery.kt │ ├── AccountUnknownProviderException.kt │ ├── AccountUnresolvableProviderException.kt │ └── AccountUsername.kt ├── simplified-accounts-database-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── accounts │ └── database │ └── api │ ├── AccountType.kt │ ├── AccountsDatabaseBooksException.java │ ├── AccountsDatabaseDuplicateProviderException.java │ ├── AccountsDatabaseException.java │ ├── AccountsDatabaseFactoryType.kt │ ├── AccountsDatabaseIOException.java │ ├── AccountsDatabaseLastAccountException.java │ ├── AccountsDatabaseNonexistentException.java │ ├── AccountsDatabaseNonexistentProviderException.java │ ├── AccountsDatabaseOpenException.java │ ├── AccountsDatabaseType.java │ └── AccountsDatabaseWrongProviderException.java ├── simplified-accounts-database ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── accounts │ └── database │ ├── AccountAuthenticationCredentialsStore.kt │ ├── AccountBundledCredentialsEmpty.java │ ├── AccountsDatabase.kt │ └── AccountsDatabases.kt ├── simplified-accounts-json ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── accounts │ │ └── json │ │ ├── AccountAuthenticationCredentialsJSON.kt │ │ ├── AccountAuthenticationCredentialsStoreJSON.kt │ │ ├── AccountBundledCredentialsJSON.kt │ │ ├── AccountDescriptionJSON.kt │ │ ├── AccountPreferencesJSON.kt │ │ ├── AccountProviderDescriptionCollectionParser.kt │ │ ├── AccountProviderDescriptionCollectionParsers.kt │ │ ├── AccountProviderDescriptionCollectionSerializer.kt │ │ ├── AccountProviderDescriptionCollectionSerializers.kt │ │ ├── AccountProviderDescriptionSerializer.kt │ │ ├── AccountProviderDescriptionSerializers.kt │ │ ├── AccountProvidersJSON.kt │ │ └── internal │ │ ├── AccountAuthenticationCredentialsAdobeJSON.kt │ │ ├── AccountAuthenticationCredentialsJSON20190424.kt │ │ ├── AccountAuthenticationCredentialsJSON20200604.kt │ │ ├── AccountAuthenticationCredentialsJSON20200805.kt │ │ ├── AccountAuthenticationCredentialsJSON20210512.kt │ │ └── AccountAuthenticationCredentialsJSONVersionedType.kt │ └── resources │ └── META-INF │ └── services │ ├── org.nypl.simplified.accounts.api.AccountProviderDescriptionCollectionSerializersType │ └── org.nypl.simplified.accounts.api.AccountProviderDescriptionSerializersType ├── simplified-accounts-registry-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── accounts │ └── registry │ └── api │ ├── AccountProviderRegistryEvent.kt │ ├── AccountProviderRegistryStatus.kt │ └── AccountProviderRegistryType.kt ├── simplified-accounts-registry ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── accounts │ └── registry │ └── AccountProviderRegistry.kt ├── simplified-accounts-source-filebased ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── accounts │ │ └── source │ │ └── filebased │ │ ├── AccountProviderSourceFileBased.kt │ │ └── AccountProviderSourceFileBasedFactory.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.accounts.source.spi.AccountProviderSourceFactoryType ├── simplified-accounts-source-nyplregistry ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── accounts │ │ └── source │ │ └── nyplregistry │ │ ├── AccountProviderResolution.kt │ │ ├── AccountProviderResolutionErrorCodes.kt │ │ ├── AccountProviderSourceNYPLFactory.kt │ │ ├── AccountProviderSourceNYPLRegistry.kt │ │ └── AccountProviderSourceNYPLRegistryException.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.accounts.source.spi.AccountProviderSourceFactoryType ├── simplified-accounts-source-spi ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── accounts │ │ └── source │ │ └── spi │ │ ├── AccountProviderSourceFactoryType.kt │ │ ├── AccountProviderSourceResolutionStrings.kt │ │ └── AccountProviderSourceType.kt │ └── res │ └── values │ ├── public.xml │ └── strings.xml ├── simplified-adobe-extensions ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── adobe │ └── extensions │ ├── AdobeConfigurationServiceType.kt │ ├── AdobeDRMExtensions.kt │ └── AdobeDRMServices.java ├── simplified-analytics-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── analytics │ └── api │ ├── Analytics.kt │ ├── AnalyticsConfiguration.kt │ ├── AnalyticsEvent.kt │ ├── AnalyticsSystem.kt │ ├── AnalyticsSystemProvider.kt │ └── AnalyticsType.kt ├── simplified-analytics-circulation ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── analytics │ │ └── circulation │ │ ├── CirculationAnalyticsSystem.kt │ │ └── CirculationAnalyticsSystems.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.analytics.api.AnalyticsSystemProvider ├── simplified-android-ktx ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── android │ └── ktx │ ├── Configuration.kt │ ├── Fragment.kt │ ├── FragmentManager.kt │ └── ViewLifecycleAwareValue.kt ├── simplified-announcements ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── announcements │ ├── Announcement.kt │ └── AnnouncementJSON.kt ├── simplified-app-openebooks ├── Appfile ├── Gemfile ├── Gemfile.lock ├── build.gradle ├── fastlane-aab.conf ├── firebase-apk.conf ├── firebase-app-id.conf ├── firebase-groups.conf ├── google-services.json ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── eula.html │ └── software-licenses.html │ ├── java │ └── org │ │ └── nypl │ │ └── labs │ │ └── OpenEbooks │ │ └── app │ │ ├── OEIAccountFallback.kt │ │ ├── OEIBrandingSplashService.kt │ │ └── OEIBuildConfigurationService.kt │ ├── res │ ├── drawable │ │ ├── oei.png │ │ └── oei_splash.xml │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── values-night │ │ └── themes.xml │ ├── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── themes.xml │ └── xml │ │ └── network_security_config.xml │ └── resources │ └── META-INF │ └── services │ ├── org.nypl.simplified.accounts.api.AccountProviderFallbackType │ ├── org.nypl.simplified.buildconfig.api.BuildConfigurationServiceType │ └── org.nypl.simplified.ui.branding.BrandingSplashServiceType ├── simplified-app-simplye ├── Appfile ├── Gemfile ├── Gemfile.lock ├── build.gradle ├── fastlane-aab.conf ├── firebase-apk.conf ├── firebase-app-id.conf ├── firebase-groups.conf ├── google-services.json ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── eula.html │ └── software-licenses.html │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── simplye │ │ ├── BrandingSplashService.kt │ │ ├── SimplyEAccountFallback.kt │ │ ├── SimplyEBuildConfigurationService.kt │ │ └── SimplyEDocumentConfiguration.kt │ ├── res │ ├── drawable-hdpi │ │ └── simplified_splash.png │ ├── drawable-mdpi │ │ └── simplified_splash.png │ ├── drawable-night │ │ └── simplified_splash_title.png │ ├── drawable-xhdpi │ │ └── simplified_splash.png │ ├── drawable-xxhdpi │ │ └── simplified_splash.png │ ├── drawable-xxxhdpi │ │ └── simplified_splash.png │ ├── drawable │ │ ├── ic_launcher.png │ │ ├── simplified_splash.png │ │ └── simplified_splash_title.png │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ ├── values-night │ │ └── themes.xml │ └── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── themes.xml │ ├── resources │ └── META-INF │ │ └── services │ │ ├── org.librarysimplified.documents.DocumentConfigurationServiceType │ │ ├── org.nypl.simplified.accounts.api.AccountProviderFallbackType │ │ ├── org.nypl.simplified.buildconfig.api.BuildConfigurationServiceType │ │ └── org.nypl.simplified.ui.branding.BrandingSplashServiceType │ └── simplye_launcher-web.png ├── simplified-app-vanilla ├── README.md ├── build.gradle ├── gradle.properties ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── about.html │ │ ├── java │ │ │ └── org │ │ │ │ └── nypl │ │ │ │ └── simplified │ │ │ │ └── vanilla │ │ │ │ ├── BrandingSplashService.kt │ │ │ │ ├── VanillaAccountFallback.kt │ │ │ │ ├── VanillaBuildConfigurationService.kt │ │ │ │ └── VanillaDocumentStoreConfiguration.kt │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── main_icon.png │ │ │ │ ├── main_splash.png │ │ │ │ └── main_splash_title.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── features.xml │ │ │ │ ├── public.xml │ │ │ │ ├── strings.xml │ │ │ │ └── themes.xml │ │ │ └── xml │ │ │ │ └── network_security_config.xml │ │ ├── resources │ │ │ └── META-INF │ │ │ │ └── services │ │ │ │ ├── org.librarysimplified.documents.DocumentConfigurationServiceType │ │ │ │ ├── org.nypl.simplified.accounts.api.AccountProviderFallbackType │ │ │ │ ├── org.nypl.simplified.buildconfig.api.BuildConfigurationServiceType │ │ │ │ ├── org.nypl.simplified.ui.branding.BrandingSplashServiceType │ │ │ │ └── org.nypl.simplified.ui.catalog.CatalogConfigurationServiceType │ │ └── xcf │ │ │ ├── main_splash.xcf │ │ │ └── main_splash_title.xcf │ └── vanillaWithProfiles │ │ ├── assets │ │ ├── Accounts.json │ │ └── logos │ │ │ ├── btt.png │ │ │ ├── dpla.png │ │ │ ├── globe.png │ │ │ ├── laos.png │ │ │ └── papua_new_guinea.png │ │ ├── java │ │ └── org │ │ │ └── nypl │ │ │ └── simplified │ │ │ └── vanilla │ │ │ └── VanillaIdleTimerConfigurationService.kt │ │ ├── res │ │ ├── drawable │ │ │ ├── main_icon.png │ │ │ └── main_splash.png │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── features.xml │ │ │ ├── public.xml │ │ │ └── strings.xml │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── org.nypl.simplified.profiles.api.idle_timer.ProfileIdleTimerConfigurationServiceType └── version.properties ├── simplified-axe └── build.gradle ├── simplified-books-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── api │ ├── Book.kt │ ├── BookChapterProgress.kt │ ├── BookDRMInformation.kt │ ├── BookDRMKind.kt │ ├── BookEvent.java │ ├── BookFormat.kt │ ├── BookID.kt │ ├── BookLocation.kt │ ├── BookLocationJSON.kt │ ├── Bookmark.kt │ ├── BookmarkID.kt │ ├── BookmarkJSON.kt │ ├── BookmarkKind.kt │ └── Digest.kt ├── simplified-books-audio ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── audio │ ├── AudioBookCredentials.kt │ ├── AudioBookFeedbooksSecretServiceType.kt │ ├── AudioBookManifestData.kt │ ├── AudioBookManifestRequest.kt │ ├── AudioBookManifestStrategiesType.kt │ ├── AudioBookManifestStrategy.kt │ ├── AudioBookManifestStrategyType.kt │ ├── AudioBookManifests.kt │ ├── AudioBookOverdriveSecretServiceType.kt │ ├── AudioBookSecretServiceType.kt │ └── package-info.java ├── simplified-books-borrowing ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── borrowing │ ├── BorrowAcquisitions.kt │ ├── BorrowContextType.kt │ ├── BorrowRequest.kt │ ├── BorrowRequirements.kt │ ├── BorrowSubtasks.kt │ ├── BorrowTask.kt │ ├── BorrowTaskFactoryType.kt │ ├── BorrowTaskType.kt │ ├── BorrowTimeoutConfiguration.kt │ ├── internal │ ├── BorrowACSM.kt │ ├── BorrowAudioBook.kt │ ├── BorrowAxisNow.kt │ ├── BorrowBearerToken.kt │ ├── BorrowCopy.kt │ ├── BorrowDirectDownload.kt │ ├── BorrowErrorCodes.kt │ ├── BorrowHTTP.kt │ ├── BorrowLoanCreate.kt │ ├── BorrowSAMLDownload.kt │ ├── BorrowSubtaskDirectory.kt │ └── BorrowUnitsPerSecond.kt │ ├── package-info.java │ └── subtasks │ ├── BorrowSubtaskDirectoryType.kt │ ├── BorrowSubtaskException.kt │ ├── BorrowSubtaskFactoryType.kt │ └── BorrowSubtaskType.kt ├── simplified-books-bundled-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── bundled │ └── api │ ├── BundledContentResolverType.java │ └── BundledURIs.java ├── simplified-books-controller-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── controller │ └── api │ ├── BookException.java │ ├── BookRevokeException.java │ ├── BookRevokeExceptionBadFeed.kt │ ├── BookRevokeExceptionDeviceNotActivated.kt │ ├── BookRevokeExceptionNoCredentials.java │ ├── BookRevokeExceptionNotRevocable.kt │ ├── BookRevokeStringResourcesType.kt │ ├── BookUnexpectedTypeException.kt │ ├── BookUnsupportedTypeException.kt │ └── BooksControllerType.kt ├── simplified-books-controller ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── controller │ ├── AbstractBookTask.kt │ ├── BookBorrowFailedDismissTask.kt │ ├── BookDeleteTask.kt │ ├── BookRevokeFailedDismissTask.kt │ ├── BookRevokeTask.kt │ ├── BookSyncTask.kt │ ├── Controller.kt │ ├── ControllerCrashlytics.kt │ ├── PatronUserProfiles.kt │ ├── ProfileAccountCreateCustomOPDSTask.kt │ ├── ProfileAccountCreateOrReturnExistingTask.kt │ ├── ProfileAccountCreateTask.kt │ ├── ProfileAccountDeleteTask.kt │ ├── ProfileAccountLoginTask.kt │ ├── ProfileAccountLogoutTask.kt │ ├── ProfileAccountProviderUpdatedTask.kt │ ├── ProfileCreationTask.kt │ ├── ProfileDataLoadTask.kt │ ├── ProfileDeletionTask.kt │ ├── ProfileFeedTask.kt │ ├── ProfileSelectionTask.kt │ └── ProfileUpdateTask.kt ├── simplified-books-covers ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── books │ │ └── covers │ │ ├── BookCoverBadge.kt │ │ ├── BookCoverBadgeLookupType.kt │ │ ├── BookCoverBadgePainter.kt │ │ ├── BookCoverBundledRequestHandler.kt │ │ ├── BookCoverGenerator.java │ │ ├── BookCoverGeneratorRequestHandler.kt │ │ ├── BookCoverGeneratorType.kt │ │ ├── BookCoverProvider.kt │ │ ├── BookCoverProviderType.kt │ │ └── package-info.java │ └── res │ ├── drawable │ ├── cover_error.xml │ ├── cover_loading.xml │ ├── ic_bug.xml │ └── ic_local_library.xml │ └── values │ ├── dimens.xml │ └── public.xml ├── simplified-books-database-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── book_database │ └── api │ ├── BookAcquisitionSelection.kt │ ├── BookDRMInformationHandle.kt │ ├── BookDatabaseEntryType.kt │ ├── BookDatabaseException.java │ ├── BookDatabaseFactoryType.kt │ ├── BookDatabaseType.kt │ └── BookFormats.kt ├── simplified-books-database ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── book_database │ ├── BookDRMInformationHandleACS.kt │ ├── BookDRMInformationHandleAxis.kt │ ├── BookDRMInformationHandleBase.kt │ ├── BookDRMInformationHandleLCP.kt │ ├── BookDRMInformationHandleNone.kt │ ├── BookDRMInformationHandles.kt │ ├── BookDatabase.kt │ ├── BookDatabaseEntry.kt │ ├── BookDatabases.kt │ ├── DatabaseBookFormatHandleConstructor.kt │ ├── DatabaseFormatHandleAudioBook.kt │ ├── DatabaseFormatHandleEPUB.kt │ ├── DatabaseFormatHandlePDF.kt │ ├── DatabaseFormatHandleParameters.kt │ └── NullDownloadProvider.kt ├── simplified-books-formats-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── formats │ └── api │ ├── BookFormatSupportType.kt │ └── StandardFormatNames.kt ├── simplified-books-formats ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── formats │ ├── BookFormatAudioSupportParameters.kt │ ├── BookFormatSupport.kt │ └── BookFormatSupportParameters.kt ├── simplified-books-registry-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── book_registry │ ├── BookRegistry.kt │ ├── BookRegistryReadableType.kt │ ├── BookRegistryType.kt │ ├── BookStatus.kt │ ├── BookStatusEvent.kt │ ├── BookStatusPriorityOrdering.java │ └── BookWithStatus.kt ├── simplified-boot-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── boot │ └── api │ ├── BootEvent.kt │ ├── BootFailureTesting.kt │ ├── BootLoader.kt │ ├── BootLoaderType.kt │ ├── BootPreHookType.kt │ ├── BootProcessType.kt │ └── BootStringResourcesType.kt ├── simplified-buildconfig-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── buildconfig │ └── api │ ├── BuildConfigOAuthScheme.kt │ ├── BuildConfigurationAccountsRegistryURIs.kt │ ├── BuildConfigurationAccountsType.kt │ ├── BuildConfigurationCatalogType.kt │ ├── BuildConfigurationMetadataType.kt │ ├── BuildConfigurationOAuthType.kt │ ├── BuildConfigurationReaderType.kt │ ├── BuildConfigurationServiceType.kt │ └── BuildConfigurationSettingsType.kt ├── simplified-cardcreator ├── README.md ├── build.gradle ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── nypl │ │ │ └── simplified │ │ │ └── cardcreator │ │ │ ├── CardCreatorActivity.kt │ │ │ ├── CardCreatorContract.kt │ │ │ ├── CardCreatorDebugging.kt │ │ │ ├── CardCreatorService.kt │ │ │ ├── CardCreatorServiceType.kt │ │ │ ├── model │ │ │ ├── AccountInformation.kt │ │ │ ├── Address.kt │ │ │ ├── AddressType.kt │ │ │ ├── CreatePatronResponse.kt │ │ │ ├── Data.kt │ │ │ ├── Dependent.kt │ │ │ ├── DependentEligibilityResponse.kt │ │ │ ├── ISSOTokenData.kt │ │ │ ├── IdentifierParent.kt │ │ │ ├── JuvenilePatronResponse.kt │ │ │ ├── Location.kt │ │ │ ├── OriginalAddress.kt │ │ │ ├── Parent.kt │ │ │ ├── Patron.kt │ │ │ ├── PersonalInformation.kt │ │ │ ├── Username.kt │ │ │ ├── UsernameVerificationResponse.kt │ │ │ ├── ValidateAddressRequest.kt │ │ │ └── ValidateAddressResponse.kt │ │ │ ├── network │ │ │ ├── CardCreatorService.kt │ │ │ ├── NYPLISSOService.kt │ │ │ └── NYPLPlatformService.kt │ │ │ ├── ui │ │ │ ├── AccountInformationFragment.kt │ │ │ ├── AgeFragment.kt │ │ │ ├── AlternateAddressFragment.kt │ │ │ ├── ConfirmAlternateAddressFragment.kt │ │ │ ├── ConfirmHomeAddressFragment.kt │ │ │ ├── ConfirmationBindingAdapters.kt │ │ │ ├── ConfirmationFragment.kt │ │ │ ├── EULAFragment.kt │ │ │ ├── HomeAddressFragment.kt │ │ │ ├── JuvenileInformationFragment.kt │ │ │ ├── JuvenilePolicyFragment.kt │ │ │ ├── LocationFragment.kt │ │ │ ├── OutOfStateFragment.kt │ │ │ ├── PersonalInformationFragment.kt │ │ │ └── ReviewFragment.kt │ │ │ ├── utils │ │ │ ├── Cache.kt │ │ │ ├── Channel.kt │ │ │ ├── Checks.kt │ │ │ ├── Constants.kt │ │ │ ├── EditTextUtils.kt │ │ │ ├── FragmentUtils.kt │ │ │ ├── KeyboardUtils.kt │ │ │ └── TextViewUtils.kt │ │ │ └── viewmodel │ │ │ ├── AccountInformationViewModel.kt │ │ │ ├── AddressViewModel.kt │ │ │ ├── CardCreatorViewModel.kt │ │ │ ├── CardCreatorViewModelFactory.kt │ │ │ ├── ConfirmationViewModel.kt │ │ │ ├── DependentEligibilityViewModel.kt │ │ │ └── PatronViewModel.kt │ └── res │ │ ├── anim │ │ ├── enter_left.xml │ │ ├── enter_right.xml │ │ ├── exit_left.xml │ │ └── exit_right.xml │ │ ├── drawable │ │ └── nypl_logo.png │ │ ├── layout │ │ ├── activity_card_creator.xml │ │ ├── fragment_account_information.xml │ │ ├── fragment_age.xml │ │ ├── fragment_alternate_address.xml │ │ ├── fragment_confirm_alternate_address.xml │ │ ├── fragment_confirm_home_address.xml │ │ ├── fragment_confirmation.xml │ │ ├── fragment_eula.xml │ │ ├── fragment_home_address.xml │ │ ├── fragment_juvenile_information.xml │ │ ├── fragment_juvenile_policy.xml │ │ ├── fragment_location.xml │ │ ├── fragment_out_of_state.xml │ │ ├── fragment_personal_information.xml │ │ ├── fragment_review.xml │ │ └── loading.xml │ │ ├── navigation │ │ └── nav_graph.xml │ │ └── values │ │ ├── colors.xml │ │ ├── public.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── kotlin │ └── org │ └── nypl │ └── simplified │ └── cardcreator │ ├── TestCoroutineRule.kt │ ├── ui │ ├── AccountInformationFragmentTest.kt │ └── ConfirmationFragmentTest.kt │ └── viewmodel │ ├── AccountInformationViewModelTest.kt │ └── ConfirmationViewModelTest.kt ├── simplified-content-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── content │ └── api │ ├── ContentResolverSane.kt │ └── ContentResolverType.kt ├── simplified-crashlytics-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── crashlytics │ └── api │ ├── CrashlyticsLoggingAppender.kt │ └── CrashlyticsServiceType.kt ├── simplified-crashlytics ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── crashlytics │ │ └── CrashlyticsService.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.crashlytics.api.CrashlyticsServiceType ├── simplified-documents ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── librarysimplified │ └── documents │ ├── DocumentConfiguration.kt │ ├── DocumentConfigurationServiceType.kt │ ├── DocumentStoreType.kt │ ├── DocumentStores.kt │ ├── DocumentType.kt │ ├── EULAType.kt │ └── internal │ ├── AbstractDocument.kt │ ├── DocumentStore.kt │ ├── EULA.kt │ ├── EmptyDocumentStore.kt │ └── PlainDocument.kt ├── simplified-feeds-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── feeds │ └── api │ ├── Feed.kt │ ├── FeedBooksSelection.java │ ├── FeedEntry.kt │ ├── FeedFacet.kt │ ├── FeedFacetPseudoTitleProviderType.kt │ ├── FeedFacets.kt │ ├── FeedGroup.java │ ├── FeedHTTPTransport.kt │ ├── FeedHTTPTransportException.kt │ ├── FeedLoader.kt │ ├── FeedLoaderResult.kt │ ├── FeedLoaderType.kt │ ├── FeedLoading.kt │ └── FeedSearch.kt ├── simplified-files ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── files │ ├── DirectoryUtilities.java │ ├── FileLocking.java │ ├── FileUtilities.java │ └── package-info.java ├── simplified-futures ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── futures │ └── FluentFutureExtensions.kt ├── simplified-json-core ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── json │ └── core │ ├── JSONParseException.java │ ├── JSONParserUtilities.java │ ├── JSONSerializerUtilities.java │ └── package-info.java ├── simplified-links-json ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org.nypl.simplified.links.json │ ├── LinkParsing.kt │ └── LinkSerialization.kt ├── simplified-links ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── links │ └── Link.kt ├── simplified-main ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── main │ │ ├── MainActivity.kt │ │ ├── MainActivityDefaultViewModelFactory.kt │ │ ├── MainActivityListenedEvent.kt │ │ ├── MainApplication.kt │ │ ├── MainBookFormatSupport.kt │ │ ├── MainBundledContentResolver.java │ │ ├── MainCatalogBookRevokeStrings.kt │ │ ├── MainExt2IntHook.kt │ │ ├── MainFeedbooksSecretService.kt │ │ ├── MainFragment.kt │ │ ├── MainFragmentDefaultViewModelFactory.kt │ │ ├── MainFragmentEvent.kt │ │ ├── MainFragmentListenedEvent.kt │ │ ├── MainFragmentListenerDelegate.kt │ │ ├── MainFragmentState.kt │ │ ├── MainFragmentViewModel.kt │ │ ├── MainHTTP.kt │ │ ├── MainLogging.kt │ │ ├── MainLoginStringResources.kt │ │ ├── MainLogoutStringResources.kt │ │ ├── MainNotificationResources.kt │ │ ├── MainOverdriveSecretService.kt │ │ ├── MainProfileAccountCreationStringResources.kt │ │ ├── MainProfileAccountDeletionStringResources.kt │ │ ├── MainServices.kt │ │ ├── MainServicesStrings.kt │ │ ├── MainSplashDependencies.kt │ │ └── MainUIThreadService.kt │ ├── res │ ├── drawable │ │ ├── main_icon.png │ │ └── main_splash.png │ ├── layout │ │ ├── main_host.xml │ │ └── main_tabbed_host.xml │ ├── values │ │ ├── features.xml │ │ ├── public.xml │ │ ├── stringsBookRevoke.xml │ │ ├── stringsBoot.xml │ │ ├── stringsLogin.xml │ │ ├── stringsLogout.xml │ │ ├── stringsMisc.xml │ │ ├── stringsNotifications.xml │ │ └── stringsProfiles.xml │ └── xml │ │ └── provider_paths.xml │ └── resources │ └── META-INF │ └── services │ ├── org.nypl.simplified.boot.api.BootPreHookType │ └── org.nypl.simplified.ui.splash.SplashDependenciesType ├── simplified-metrics-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── metrics │ └── api │ ├── MetricEvent.kt │ ├── MetricServiceFactoryType.kt │ └── MetricServiceType.kt ├── simplified-metrics ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ ├── org │ └── nypl │ │ └── simplified │ │ └── metrics │ │ ├── MetricService.kt │ │ └── MetricServiceFactory.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.metrics.api.MetricServiceFactoryType ├── simplified-networkconnectivity-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── networkconnectivity │ └── api │ └── NetworkConnectivityType.kt ├── simplified-networkconnectivity ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── networkconnectivity │ └── NetworkConnectivity.kt ├── simplified-notifications ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ ├── NotificationResourcesType.kt │ ├── NotificationsService.kt │ └── NotificationsWrapper.kt ├── simplified-oauth ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── oauth │ ├── OAuthCallbackIntentParsing.kt │ └── OAuthParseResult.kt ├── simplified-opds-auth-document-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds │ └── auth_document │ └── api │ ├── AuthenticationDocument.kt │ ├── AuthenticationDocumentParserType.kt │ ├── AuthenticationDocumentParsersType.kt │ ├── AuthenticationDocumentSerializerType.kt │ ├── AuthenticationDocumentSerializersType.kt │ ├── AuthenticationObject.kt │ ├── AuthenticationObjectNYPLFeatures.kt │ └── AuthenticationObjectNYPLInput.kt ├── simplified-opds-auth-document ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── opds │ │ └── auth_document │ │ ├── AuthenticationDocumentParser.kt │ │ └── AuthenticationDocumentParsers.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.opds.auth_document.api.AuthenticationDocumentParsersType ├── simplified-opds-core ├── .gitignore ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds │ └── core │ ├── DRMLicensor.java │ ├── Extensions.kt │ ├── OPDSAcquisition.kt │ ├── OPDSAcquisitionFeed.java │ ├── OPDSAcquisitionFeedBuilderType.java │ ├── OPDSAcquisitionFeedEntry.java │ ├── OPDSAcquisitionFeedEntryBuilderType.java │ ├── OPDSAcquisitionFeedEntryParser.java │ ├── OPDSAcquisitionFeedEntryParserType.java │ ├── OPDSAcquisitionPath.kt │ ├── OPDSAcquisitionPathElement.kt │ ├── OPDSAcquisitionPaths.kt │ ├── OPDSAtom.java │ ├── OPDSAvailabilityHeld.kt │ ├── OPDSAvailabilityHeldReady.kt │ ├── OPDSAvailabilityHoldable.java │ ├── OPDSAvailabilityLoanable.java │ ├── OPDSAvailabilityLoaned.kt │ ├── OPDSAvailabilityMatcherType.java │ ├── OPDSAvailabilityOpenAccess.kt │ ├── OPDSAvailabilityRevoked.java │ ├── OPDSAvailabilityType.java │ ├── OPDSCategory.java │ ├── OPDSDateParsers.java │ ├── OPDSFacet.kt │ ├── OPDSFeedConstants.java │ ├── OPDSFeedParser.java │ ├── OPDSFeedParserType.java │ ├── OPDSFeedTransportException.kt │ ├── OPDSFeedTransportIOException.kt │ ├── OPDSFeedTransportType.java │ ├── OPDSGroup.java │ ├── OPDSIndirectAcquisition.kt │ ├── OPDSJSONParser.java │ ├── OPDSJSONParserType.java │ ├── OPDSJSONSerializer.java │ ├── OPDSJSONSerializerType.java │ ├── OPDSLink.java │ ├── OPDSOpenSearch1_1.java │ ├── OPDSParseException.java │ ├── OPDSSearchLink.java │ ├── OPDSSearchParser.java │ ├── OPDSSearchParserType.java │ ├── OPDSSerializationException.java │ ├── OPDSXML.java │ └── package-info.java ├── simplified-opds2-irradia ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds2 │ └── irradia │ ├── OPDS2ParsersIrradia.kt │ └── internal │ ├── OPDS2IrradiaFeedConverter.kt │ └── OPDS2ParserIrradia.kt ├── simplified-opds2-parser-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds2 │ └── parser │ └── api │ └── OPDS2ParsersType.kt ├── simplified-opds2-r2 ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds2 │ └── r2 │ ├── OPDS2ParsersR2.kt │ └── internal │ └── OPDS2ParserR2.kt ├── simplified-opds2 ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── opds2 │ ├── OPDS2Catalog.kt │ ├── OPDS2CatalogMetadata.kt │ ├── OPDS2Contributor.kt │ ├── OPDS2ElementType.kt │ ├── OPDS2Feed.kt │ ├── OPDS2Group.kt │ ├── OPDS2Metadata.kt │ ├── OPDS2MetadataType.kt │ ├── OPDS2Name.kt │ ├── OPDS2Navigation.kt │ ├── OPDS2Publication.kt │ └── OPDS2Title.kt ├── simplified-parser-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── parser │ └── api │ ├── ParseError.kt │ ├── ParseResult.kt │ ├── ParseWarning.kt │ ├── ParserProviderType.kt │ ├── ParserType.kt │ ├── SerializerType.kt │ └── SerializersType.kt ├── simplified-patron-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── patron │ └── api │ ├── PatronAuthorization.kt │ ├── PatronDRM.kt │ ├── PatronDRMAdobe.kt │ ├── PatronSettings.kt │ ├── PatronUserProfile.kt │ ├── PatronUserProfileParserType.kt │ ├── PatronUserProfileParsersType.kt │ ├── PatronUserProfileSerializerType.kt │ └── PatronUserProfileSerializersType.kt ├── simplified-patron ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── patron │ │ ├── PatronUserProfileParser.kt │ │ └── PatronUserProfileParsers.kt │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.patron.api.PatronUserProfileParsersType ├── simplified-presentableerror-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── presentableerror │ └── api │ ├── PresentableErrorType.kt │ ├── PresentableType.kt │ └── Presentables.kt ├── simplified-profiles-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── profiles │ └── api │ ├── ProfileAnonymousDisabledException.java │ ├── ProfileAnonymousEnabledException.java │ ├── ProfileAttributes.kt │ ├── ProfileCreateDuplicateException.java │ ├── ProfileCreateInvalidException.java │ ├── ProfileCreationEvent.java │ ├── ProfileDatabaseAccountsException.java │ ├── ProfileDatabaseDeleteAnonymousException.java │ ├── ProfileDatabaseException.java │ ├── ProfileDatabaseIOException.java │ ├── ProfileDatabaseOpenException.java │ ├── ProfileDateOfBirth.kt │ ├── ProfileDeletionEvent.kt │ ├── ProfileDescription.kt │ ├── ProfileEvent.java │ ├── ProfileID.kt │ ├── ProfileNoneCurrentException.java │ ├── ProfileNonexistentAccountProviderException.java │ ├── ProfileNonexistentException.java │ ├── ProfilePreferences.kt │ ├── ProfileReadableType.kt │ ├── ProfileSelection.kt │ ├── ProfileType.kt │ ├── ProfileUpdated.kt │ ├── ProfilesDatabaseType.kt │ └── idle_timer │ ├── ProfileIdleTimeOutSoon.java │ ├── ProfileIdleTimedOut.java │ ├── ProfileIdleTimer.java │ ├── ProfileIdleTimerConfigurationServiceType.kt │ └── ProfileIdleTimerType.java ├── simplified-profiles-controller-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── profiles │ └── controller │ └── api │ ├── ProfileAccountCreationStringResourcesType.kt │ ├── ProfileAccountDeletionStringResourcesType.kt │ ├── ProfileAccountLoginRequest.kt │ ├── ProfileFeedRequest.kt │ └── ProfilesControllerType.kt ├── simplified-profiles ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── profiles │ ├── Profile.kt │ ├── ProfileDescriptionJSON.kt │ ├── ProfilesDatabase.kt │ └── ProfilesDatabases.kt ├── simplified-reader-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── reader │ └── api │ ├── ReaderColorScheme.java │ ├── ReaderFontSelection.java │ ├── ReaderPreferences.java │ ├── ReaderPreferencesJSON.java │ └── ReaderPublisherCSS.kt ├── simplified-reader-bookmarks-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── reader │ └── bookmarks │ └── api │ ├── BookmarkAnnotations.kt │ ├── BookmarkAnnotationsJSON.kt │ ├── ReaderBookmarkEvent.kt │ ├── ReaderBookmarkHTTPCallsType.kt │ ├── ReaderBookmarkServiceProviderType.kt │ ├── ReaderBookmarkServiceType.kt │ ├── ReaderBookmarkServiceUsableType.kt │ ├── ReaderBookmarkSyncEnableResult.kt │ ├── ReaderBookmarkSyncEnableStatus.kt │ └── ReaderBookmarks.kt ├── simplified-reader-bookmarks ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── books │ └── reader │ └── bookmarks │ ├── ReaderBookmarkHTTPCalls.kt │ ├── ReaderBookmarkLocalState.kt │ ├── ReaderBookmarkPolicy.kt │ ├── ReaderBookmarkPolicyAccountState.kt │ ├── ReaderBookmarkPolicyInput.kt │ ├── ReaderBookmarkPolicyOutput.kt │ ├── ReaderBookmarkPolicyState.kt │ ├── ReaderBookmarkRemoteState.kt │ ├── ReaderBookmarkService.kt │ └── ReaderBookmarkState.kt ├── simplified-reports ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── reports │ └── Reports.kt ├── simplified-services-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── librarysimplified │ └── services │ └── api │ ├── ServiceConfigurationException.kt │ ├── ServiceDirectory.kt │ ├── ServiceDirectoryBuilder.kt │ ├── ServiceDirectoryBuilderType.kt │ ├── ServiceDirectoryProviderType.kt │ ├── ServiceDirectoryType.kt │ └── Services.kt ├── simplified-taskrecorder-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── org │ └── nypl │ └── simplified │ └── taskrecorder │ └── api │ ├── TaskRecorder.kt │ ├── TaskRecorderType.kt │ ├── TaskResult.kt │ ├── TaskStep.kt │ └── TaskStepResolution.kt ├── simplified-tenprint ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── tenprint │ ├── TenPrintGenerator.java │ ├── TenPrintGeneratorType.java │ ├── TenPrintInput.java │ ├── TenPrintInputBuilderType.java │ └── package-info.java ├── simplified-tests-sandbox ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── Accounts.json │ └── logback.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── tests │ │ └── sandbox │ │ └── package-info.java │ └── res │ ├── drawable │ └── sandbox.png │ ├── layout │ └── fragment_host.xml │ └── values │ └── strings.xml ├── simplified-tests ├── README.md ├── build.gradle ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ └── resources │ │ └── org │ │ └── nypl │ │ └── simplified │ │ └── tests │ │ ├── books │ │ └── accounts │ │ │ └── providers-saml.json │ │ └── opds │ │ └── auth_document │ │ └── saml_2_0.json │ └── test │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── tests │ │ ├── EventAssertions.java │ │ ├── EventLogging.kt │ │ ├── ExtraAssertions.kt │ │ ├── MutableServiceDirectory.kt │ │ ├── TestDirectories.kt │ │ ├── TransformProviders.kt │ │ ├── accessibility │ │ └── AccessibilityServiceTest.kt │ │ ├── bookmark_annotations │ │ └── BookmarkAnnotationsJSONTest.kt │ │ ├── bookmarks │ │ └── BookmarkJSONTest.kt │ │ ├── books │ │ ├── BookFormatsTesting.kt │ │ ├── FeedLoaderContract.kt │ │ ├── FeedLoaderTest.kt │ │ ├── accounts │ │ │ ├── AccountAuthenticationCredentialsJSONTest.kt │ │ │ ├── AccountAuthenticationCredentialsStoreTest.kt │ │ │ ├── AccountBundledCredentialsJSONTest.java │ │ │ ├── AccountComparatorTest.kt │ │ │ ├── AccountPreferencesJSONTest.kt │ │ │ ├── AccountProviderDescriptionCollectionParserTest.kt │ │ │ ├── AccountProviderDescriptionRegistryContract.kt │ │ │ ├── AccountProviderDescriptionRegistryTest.kt │ │ │ ├── AccountProviderNYPLRegistryTest.kt │ │ │ ├── AccountProviderSourceFileBasedContract.kt │ │ │ ├── AccountProviderSourceFileBasedTest.kt │ │ │ ├── AccountProviderSourceNYPLRegistryDescriptionTest.kt │ │ │ ├── AccountProvidersJSONTest.kt │ │ │ ├── AccountsDatabaseContract.kt │ │ │ ├── AccountsDatabaseTest.java │ │ │ └── package-info.java │ │ ├── audio │ │ │ ├── AudioBookFailingLicenseChecks.kt │ │ │ ├── AudioBookFailingParsers.kt │ │ │ ├── AudioBookManifestStrategyTest.kt │ │ │ └── AudioBookSucceedingParsers.kt │ │ ├── book_database │ │ │ ├── BookAcquisitionSelectionTest.kt │ │ │ ├── BookDRMInformationHandleACSTest.kt │ │ │ ├── BookDRMInformationHandleLCPTest.kt │ │ │ ├── BookDRMInformationHandleNoneTest.kt │ │ │ ├── BookDatabaseAudioBookContract.kt │ │ │ ├── BookDatabaseAudioBookTest.kt │ │ │ ├── BookDatabaseContract.kt │ │ │ ├── BookDatabaseEPUBContract.kt │ │ │ ├── BookDatabaseEPUBTest.java │ │ │ ├── BookDatabasePDFContract.kt │ │ │ ├── BookDatabasePDFTest.java │ │ │ ├── BookDatabaseTest.java │ │ │ ├── BookIDTest.java │ │ │ └── package-info.java │ │ ├── borrowing │ │ │ ├── BorrowACSMTest.kt │ │ │ ├── BorrowAcquisitionsTest.kt │ │ │ ├── BorrowAudioBookTest.kt │ │ │ ├── BorrowAxisNowTest.kt │ │ │ ├── BorrowCopyTest.kt │ │ │ ├── BorrowDirectDownloadTest.kt │ │ │ ├── BorrowLoanCreateTest.kt │ │ │ ├── BorrowSAMLDownloadTest.kt │ │ │ ├── BorrowTaskTest.kt │ │ │ ├── BorrowTestFeeds.kt │ │ │ └── BorrowTestFeedsTest.kt │ │ ├── controller │ │ │ ├── BookRevokeTaskAdobeDRMTest.kt │ │ │ ├── BookRevokeTaskTest.kt │ │ │ ├── BooksControllerContract.kt │ │ │ ├── BooksControllerTest.java │ │ │ ├── ProfileAccountCreateCustomOPDSTest.kt │ │ │ ├── ProfilesControllerContract.kt │ │ │ ├── ProfilesControllerTest.java │ │ │ └── TaskDumps.kt │ │ ├── formats │ │ │ └── BookFormatSupportTest.kt │ │ ├── idle_timer │ │ │ ├── InoperableIdleTimer.kt │ │ │ └── ProfileIdleTimerTest.java │ │ ├── package-info.java │ │ ├── profiles │ │ │ ├── ProfileAccountLoginTaskContract.kt │ │ │ ├── ProfileAccountLoginTaskTest.kt │ │ │ ├── ProfileAccountLogoutTaskContract.kt │ │ │ ├── ProfileAccountLogoutTaskTest.kt │ │ │ ├── ProfileDescriptionJSONTest.kt │ │ │ ├── ProfilesDatabaseContract.kt │ │ │ ├── ProfilesDatabaseTest.java │ │ │ └── package-info.java │ │ └── reader │ │ │ └── bookmarks │ │ │ ├── NullReaderBookmarkService.kt │ │ │ ├── ReaderBookmarkHTTPCallsTest.kt │ │ │ ├── ReaderBookmarkPolicyTest.kt │ │ │ ├── ReaderBookmarkServiceContract.kt │ │ │ └── ReaderBookmarkServiceTest.kt │ │ ├── bugs │ │ └── Simply3635Test.kt │ │ ├── bundled_content │ │ └── BundledURIsTest.java │ │ ├── errorpage │ │ └── ErrorPageParametersTest.kt │ │ ├── files │ │ ├── FileLockingContract.java │ │ ├── FileLockingTest.java │ │ ├── FilesTest.java │ │ └── package-info.java │ │ ├── mocking │ │ ├── FakeAccountCredentialStorage.kt │ │ ├── MockAccessibilityEvents.kt │ │ ├── MockAccessibilityStrings.kt │ │ ├── MockAccount.kt │ │ ├── MockAccountCreationStringResources.kt │ │ ├── MockAccountDeletionStringResources.kt │ │ ├── MockAccountLoginStringResources.kt │ │ ├── MockAccountLogoutStringResources.kt │ │ ├── MockAccountProviderRegistry.kt │ │ ├── MockAccountProviderResolutionStrings.kt │ │ ├── MockAccountProviders.kt │ │ ├── MockAdobeAdeptConnector.kt │ │ ├── MockAdobeAdeptExecutor.kt │ │ ├── MockAdobeAdeptNetProvider.kt │ │ ├── MockAdobeAdeptResourceProvider.kt │ │ ├── MockAdobeAdeptStream.kt │ │ ├── MockAnalytics.kt │ │ ├── MockAudioBookManifestStrategies.kt │ │ ├── MockAudioBookManifestStrategy.kt │ │ ├── MockAxisNowService.kt │ │ ├── MockBookDatabase.kt │ │ ├── MockBookDatabaseEntry.kt │ │ ├── MockBookDatabaseEntryFormatHandleAudioBook.kt │ │ ├── MockBookDatabaseEntryFormatHandleEPUB.kt │ │ ├── MockBookDatabaseEntryFormatHandlePDF.kt │ │ ├── MockBookFormatSupport.kt │ │ ├── MockBorrowContext.kt │ │ ├── MockBorrowSubtaskDirectory.kt │ │ ├── MockBundledContentResolver.kt │ │ ├── MockContentResolver.kt │ │ ├── MockCrashingFeedLoader.kt │ │ ├── MockDRMInformationACSHandle.kt │ │ ├── MockDRMInformationAxisHandle.kt │ │ ├── MockLifecycle.kt │ │ ├── MockProfile.kt │ │ ├── MockProfilesController.kt │ │ ├── MockRevokeStringResources.kt │ │ ├── MockStrings.kt │ │ ├── MockUIThreadService.kt │ │ └── MockedAudioEngineProvider.kt │ │ ├── notifications │ │ └── NotificationsServiceTest.kt │ │ ├── oauth │ │ └── OAuthIntentParsingTest.kt │ │ ├── opds │ │ ├── AuthenticationDocumentContract.kt │ │ ├── AuthenticationDocumentTest.kt │ │ ├── OPDSAcquisitionPathsTest.kt │ │ ├── OPDSFeedEntryParserTest.java │ │ ├── OPDSFeedParserTest.java │ │ ├── OPDSJSONParserTest.java │ │ ├── OPDSJSONSerializerTest.java │ │ ├── OPDSXMLTest.java │ │ └── package-info.java │ │ ├── opds2 │ │ ├── OPDS2ParserContract.kt │ │ └── OPDS2ParserIrradiaTest.kt │ │ ├── package-info.java │ │ ├── patron │ │ ├── PatronUserProfileParserContract.kt │ │ └── PatronUserProfileParserTest.kt │ │ └── webview │ │ ├── CookiesContract.kt │ │ └── CookiesTest.kt │ └── resources │ ├── META-INF │ └── services │ │ └── org.nypl.audiobook.android.api.PlayerAudioEngineProviderType │ ├── logback.xml │ ├── mockito-extensions │ └── org.mockito.plugins.MockMaker │ └── org │ └── nypl │ └── simplified │ └── tests │ ├── bookmarks │ ├── bookmark-20210317-r1-0.json │ ├── bookmark-20210317-r2-0.json │ ├── bookmark-legacy-r1-0.json │ ├── bookmark-legacy-r1-1.json │ └── bookmark-legacy-r2-0.json │ ├── books │ ├── 4096.bin │ ├── accounts │ │ ├── bundled-creds-empty.json │ │ ├── bundled-creds-simple.json │ │ ├── descriptions │ │ │ ├── libraryregistry-qa.json │ │ │ └── libraryregistry.json │ │ ├── providers-all.json │ │ ├── providers-array-empty.json │ │ ├── providers-duplicate.json │ │ ├── providers-empty.json │ │ ├── providers-multi-auth-0.json │ │ ├── providers-multi-auth-1.json │ │ ├── providers-nypl.json │ │ └── providers-simplye.json │ ├── adobe-token-pdf.xml │ ├── adobe-token.xml │ ├── basic-manifest.json │ ├── bearer-token-0.json │ ├── bearer-token-bad.json │ ├── borrow-acsm-epub-0.xml │ ├── borrow-audiobook-0.xml │ ├── borrow-audiobook-1.xml │ ├── borrow-epub-0.xml │ ├── borrow-multiple-drm.xml │ ├── controller │ │ ├── testBook0.xml │ │ ├── testBook1.xml │ │ ├── testBook2.xml │ │ ├── testBooksDelete.xml │ │ ├── testBooksRevokeCorrectURI.xml │ │ ├── testBooksRevokeCorrectURI_Response.xml │ │ ├── testBooksRevokeEmptyFeed.xml │ │ ├── testBooksRevokeWithoutURI.xml │ │ ├── testBooksSyncNewEntries.xml │ │ └── testBooksSyncRemoveEntries.xml │ ├── empty.epub │ ├── empty.jpg │ ├── empty.json │ ├── empty.pdf │ ├── feed-no-usable-acquisitions.xml │ ├── feed-only-buy-acquisitions.xml │ ├── groups.xml │ ├── loans.xml │ ├── profile-lfa-0.json │ ├── profile-lfa-1.json │ ├── profile-nypl-0.json │ ├── profile-sma-92.json │ ├── revoke-audiobook-0.xml │ ├── revoke-epub-0.xml │ ├── revoke-error-bad-feed-type.xml │ ├── revoke-error-empty-feed-borrow.xml │ └── revoke-error-empty-feed-revoke.xml │ ├── opds │ ├── acquisition-categories-0.xml │ ├── acquisition-facets-0.xml │ ├── acquisition-facets-1.xml │ ├── acquisition-fiction-0.xml │ ├── acquisition-groups-0.xml │ ├── acquisition-paginated-0.xml │ ├── analytics-20190509.xml │ ├── auth-specific-0.json │ ├── auth_document │ │ ├── empty.json │ │ ├── example.json │ │ ├── example_bad_authentication.json │ │ ├── example_bad_authentications.json │ │ ├── example_bad_labels.json │ │ ├── example_bad_link.json │ │ ├── example_bad_links.json │ │ ├── example_missing_id.json │ │ ├── minimal.json │ │ ├── nypl-20190603.json │ │ ├── nypl_qa_20201203.json │ │ └── openebooks_20200514.json │ ├── bad-not-xml.xml │ ├── bad-uri-syntax.xml │ ├── compatibility-20180921-test-new-0.json │ ├── compatibility-20180921-test-new-1.json │ ├── compatibility-20180921-test-old.json │ ├── dpla-test-feed.xml │ ├── empty-0.xml │ ├── entry-0.xml │ ├── entry-SMA-83.xml │ ├── entry-availability-held-indefinite-queued.xml │ ├── entry-availability-held-indefinite.xml │ ├── entry-availability-held-timed-queued.xml │ ├── entry-availability-held-timed.xml │ ├── entry-availability-heldready-specific0.xml │ ├── entry-availability-heldready-timed.xml │ ├── entry-availability-heldready.xml │ ├── entry-availability-holdable.xml │ ├── entry-availability-loanable.xml │ ├── entry-availability-loaned-indefinite.xml │ ├── entry-availability-loaned-timed.xml │ ├── entry-availability-open-access.xml │ ├── entry-classics-0.xml │ ├── entry-no-supported-format.xml │ ├── entry-no-supported-relations.xml │ ├── entry-with-drm.xml │ ├── entry-with-formats-0.xml │ ├── entry-with-formats-1.xml │ ├── feedbooks-20190808.xml │ ├── loans.xml │ ├── namespaces-0.xml │ ├── navigation-0.xml │ ├── navigation-bad-entry-featured-link-without-href.xml │ ├── navigation-bad-entry-link-without-href.xml │ ├── navigation-bad-entry-no-links.xml │ └── navigation-bad-entry-subsection-link-without-href.xml │ ├── patron │ ├── empty.json │ ├── empty2.json │ ├── example-drm-malformed.json │ ├── example-drm-unknown.json │ ├── example-with-device-20210512.json │ ├── example-with-device.json │ ├── example.json │ └── simply-2126.json │ └── webview │ ├── app_webview_v10 │ └── Cookies │ ├── app_webview_v11 │ └── Cookies │ ├── app_webview_v12 │ └── Default │ │ └── Cookies │ └── app_webview_v9 │ └── Cookies ├── simplified-threads ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── threads │ └── NamedThreadPools.kt ├── simplified-ui-accounts ├── README.md ├── build.gradle ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── oe-eula.html │ ├── java │ │ └── org │ │ │ └── nypl │ │ │ └── simplified │ │ │ └── ui │ │ │ └── accounts │ │ │ ├── AccountAuthenticationViewBindings.kt │ │ │ ├── AccountAuthenticationViews.kt │ │ │ ├── AccountBindingAdapters.kt │ │ │ ├── AccountComparator.kt │ │ │ ├── AccountDetailEvent.kt │ │ │ ├── AccountDetailFragment.kt │ │ │ ├── AccountDetailViewModel.kt │ │ │ ├── AccountDetailViewModelFactory.kt │ │ │ ├── AccountFragmentParameters.kt │ │ │ ├── AccountListAdapter.kt │ │ │ ├── AccountListEvent.kt │ │ │ ├── AccountListFragment.kt │ │ │ ├── AccountListFragmentParameters.kt │ │ │ ├── AccountListRegistryEvent.kt │ │ │ ├── AccountListRegistryFragment.kt │ │ │ ├── AccountListRegistryViewModel.kt │ │ │ ├── AccountListViewModel.kt │ │ │ ├── AccountLoginButtonStatus.kt │ │ │ ├── AccountPickerDialogFragment.kt │ │ │ ├── AccountPickerEvent.kt │ │ │ ├── AssistedViewModelFactory.kt │ │ │ ├── FilterableAccountListAdapter.kt │ │ │ ├── OEAccountDetailFragment.kt │ │ │ ├── OnTextChangeListener.kt │ │ │ ├── SpaceItemDecoration.kt │ │ │ ├── WebViewActivity.kt │ │ │ ├── saml20 │ │ │ ├── AccountSAML20.kt │ │ │ ├── AccountSAML20ChromeClient.kt │ │ │ ├── AccountSAML20Event.kt │ │ │ ├── AccountSAML20Fragment.kt │ │ │ ├── AccountSAML20FragmentParameters.kt │ │ │ ├── AccountSAML20InternalEvent.kt │ │ │ ├── AccountSAML20ViewModel.kt │ │ │ └── AccountSAML20ViewModelFactory.kt │ │ │ └── utils │ │ │ ├── SoftInputUtils.kt │ │ │ └── TextViewUtils.kt │ └── res │ │ ├── anim │ │ ├── enter_left.xml │ │ ├── enter_right.xml │ │ ├── exit_left.xml │ │ └── exit_right.xml │ │ ├── drawable-night │ │ ├── account_default.png │ │ ├── clever_launch_button.xml │ │ ├── firstbook_launch_button.xml │ │ ├── firstbook_sign_in_button.xml │ │ ├── ic_arrow_back.xml │ │ └── ic_oe_top_bar.xml │ │ ├── drawable │ │ ├── account_add.xml │ │ ├── account_default.png │ │ ├── bg_account_badge.xml │ │ ├── bg_account_list_item.xml │ │ ├── clever_launch_button.xml │ │ ├── firstbook_launch_button.xml │ │ ├── firstbook_sign_in_button.xml │ │ ├── ic_add.xml │ │ ├── ic_age_verification.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_clever.xml │ │ ├── ic_first_book_sign_in_disabled.xml │ │ ├── ic_first_book_sign_in_focused.xml │ │ ├── ic_first_book_sign_in_pressed.xml │ │ ├── ic_firstbook.xml │ │ ├── ic_firstbook_alt.xml │ │ ├── ic_oe_top_bar.xml │ │ ├── ic_oeb_logo.xml │ │ └── ic_openebooks.xml │ │ ├── layout │ │ ├── account.xml │ │ ├── account_cell.xml │ │ ├── account_list.xml │ │ ├── account_list_item.xml │ │ ├── account_list_registry.xml │ │ ├── account_list_registry_item.xml │ │ ├── account_picker.xml │ │ ├── account_picker_item.xml │ │ ├── account_saml20.xml │ │ ├── activity_webview.xml │ │ ├── auth.xml │ │ ├── auth_anon.xml │ │ ├── auth_basic.xml │ │ ├── auth_coppa.xml │ │ ├── auth_oauth.xml │ │ ├── auth_saml.xml │ │ ├── first_book_login.xml │ │ ├── oe_account.xml │ │ └── oe_login_landing.xml │ │ ├── menu │ │ ├── account_list.xml │ │ ├── account_list_menu_item.xml │ │ └── account_list_registry.xml │ │ ├── values-hdpi │ │ └── dimens.xml │ │ ├── values-ldpi │ │ └── dimens.xml │ │ ├── values-mdpi │ │ └── dimens.xml │ │ ├── values-night │ │ └── colors.xml │ │ ├── values-xxhdpi │ │ └── dimens.xml │ │ ├── values-xxxhdpi │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── public.xml │ │ └── strings.xml │ └── test │ ├── kotlin │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── accounts │ │ ├── AccountDetailFragmentTest.kt │ │ └── AccountListAdapterTest.kt │ └── resources │ └── mockito-extensions │ └── org.mockito.plugins.MockMaker ├── simplified-ui-announcements ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── announcements │ │ ├── AnnouncementsDialog.kt │ │ ├── AnnouncementsViewModel.kt │ │ └── AnnouncementsViewModelFactory.kt │ └── res │ ├── layout │ └── announcements_dialog.xml │ └── values │ └── strings.xml ├── simplified-ui-branding ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── ui │ └── branding │ └── BrandingSplashServiceType.kt ├── simplified-ui-catalog ├── README.md ├── build.gradle ├── gradle.properties └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── nypl │ │ │ └── simplified │ │ │ └── ui │ │ │ └── catalog │ │ │ ├── AgeGateDialog.kt │ │ │ ├── CatalogBookAccessibilityStrings.kt │ │ │ ├── CatalogBookAvailabilityStrings.kt │ │ │ ├── CatalogBookDetailEvent.kt │ │ │ ├── CatalogBookDetailFragment.kt │ │ │ ├── CatalogBookDetailFragmentParameters.kt │ │ │ ├── CatalogBookDetailViewModel.kt │ │ │ ├── CatalogBookDetailViewModelFactory.kt │ │ │ ├── CatalogBorrowViewModel.kt │ │ │ ├── CatalogBorrowViewModelFactory.kt │ │ │ ├── CatalogButtons.kt │ │ │ ├── CatalogCoverBadgeImages.kt │ │ │ ├── CatalogFeedArguments.kt │ │ │ ├── CatalogFeedBindingAdapters.kt │ │ │ ├── CatalogFeedEvent.kt │ │ │ ├── CatalogFeedFragment.kt │ │ │ ├── CatalogFeedOwnership.kt │ │ │ ├── CatalogFeedState.kt │ │ │ ├── CatalogFeedViewModel.kt │ │ │ ├── CatalogFeedViewModelFactory.kt │ │ │ ├── CatalogFeedWithGroupsAdapter.kt │ │ │ ├── CatalogFeedWithGroupsDecorator.kt │ │ │ ├── CatalogFeedWithGroupsLaneViewHolder.kt │ │ │ ├── CatalogLaneAdapter.kt │ │ │ ├── CatalogLaneItemViewHolder.kt │ │ │ ├── CatalogPagedDataSource.kt │ │ │ ├── CatalogPagedDataSourceFactory.kt │ │ │ ├── CatalogPagedViewListener.kt │ │ │ ├── CatalogScrollListener.kt │ │ │ ├── OnTextChangeListener.kt │ │ │ ├── SpaceItemDecoration.kt │ │ │ ├── saml20 │ │ │ ├── CatalogSAML20ChromeClient.kt │ │ │ ├── CatalogSAML20Event.kt │ │ │ ├── CatalogSAML20Fragment.kt │ │ │ ├── CatalogSAML20FragmentParameters.kt │ │ │ ├── CatalogSAML20ViewModel.kt │ │ │ └── CatalogSAML20ViewModelFactory.kt │ │ │ └── withoutGroups │ │ │ ├── BookItem.kt │ │ │ ├── CatalogPagedAdapter.kt │ │ │ ├── CatalogPagedBindingAdapters.kt │ │ │ └── CatalogViewHolders.kt │ └── res │ │ ├── anim │ │ ├── slide_in_right.xml │ │ └── slide_out_left.xml │ │ ├── drawable │ │ ├── account_default.png │ │ ├── accounts.xml │ │ ├── audiobook_icon.png │ │ ├── catalog_facet_tab_button_background_left.xml │ │ ├── catalog_facet_tab_button_background_middle.xml │ │ ├── catalog_facet_tab_button_background_right.xml │ │ ├── catalog_feed_cancel_download_icon.xml │ │ ├── catalog_feed_expiry_info_clock_icon.xml │ │ ├── corrupted.png │ │ ├── cover.png │ │ ├── ic_catalog_download_complete.xml │ │ ├── refresh.xml │ │ └── search.xml │ │ ├── layout │ │ ├── age_gate_dialog.xml │ │ ├── book_cell_corrupt.xml │ │ ├── book_cell_error.xml │ │ ├── book_cell_idle.xml │ │ ├── book_detail.xml │ │ ├── book_detail_metadata_item.xml │ │ ├── book_detail_status.xml │ │ ├── book_detail_status_failed.xml │ │ ├── book_detail_status_idle.xml │ │ ├── book_detail_status_in_progress.xml │ │ ├── book_saml20.xml │ │ ├── feed.xml │ │ ├── feed_empty.xml │ │ ├── feed_error.xml │ │ ├── feed_header.xml │ │ ├── feed_lane.xml │ │ ├── feed_lane_item.xml │ │ ├── feed_loading.xml │ │ ├── feed_navigation.xml │ │ ├── feed_with_groups.xml │ │ ├── feed_without_groups.xml │ │ └── search_dialog.xml │ │ ├── menu │ │ └── catalog.xml │ │ └── values │ │ ├── dimensions.xml │ │ ├── public.xml │ │ ├── stringsCatalog.xml │ │ ├── stringsFeed.xml │ │ └── stringsLogin.xml │ └── test │ └── kotlin │ └── org │ └── nypl │ └── simplified │ ├── testUtils │ ├── LiveDataTestUtils.kt │ ├── RxSchedulerJUnit5Extension.kt │ ├── SwipeToRefresh.kt │ └── TestCoroutineRule.kt │ └── ui │ └── catalog │ ├── CatalogBookDetailFragmentTest.kt │ ├── CatalogFeedFragmentTest.kt │ ├── CatalogFeedViewModelTest.kt │ ├── CatalogPagedViewHoldersTest.kt │ └── CatalogTestUtils.kt ├── simplified-ui-errorpage ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── errorpage │ │ ├── ErrorPageBaseActivity.kt │ │ ├── ErrorPageFragment.kt │ │ ├── ErrorPageParameters.kt │ │ └── ErrorPageStepsListAdapter.kt │ └── res │ ├── drawable │ ├── border.xml │ ├── error_small.png │ └── ok_small.png │ ├── layout │ ├── error_attribute_row.xml │ ├── error_host.xml │ ├── error_page.xml │ └── error_step.xml │ └── values │ ├── public.xml │ └── strings.xml ├── simplified-ui-images ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── ui │ └── images │ ├── ImageAccountIconRequestHandler.kt │ ├── ImageAccountIcons.kt │ ├── ImageIconViews.kt │ ├── ImageLoader.kt │ └── ImageLoaderType.kt ├── simplified-ui-listeners-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── listeners │ └── api │ ├── FragmentListenerFinder.kt │ ├── FragmentListenerLazy.kt │ ├── FragmentListenerType.kt │ ├── ListenerRepository.kt │ ├── ListenerRepositoryFactory.kt │ └── ListenerRepositoryLazy.kt ├── simplified-ui-navigation-tabs ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── navigation │ │ └── tabs │ │ ├── BottomNavigators.kt │ │ └── TabbedNavigator.kt │ └── res │ ├── drawable │ ├── tab_books.xml │ ├── tab_catalog.xml │ ├── tab_holds.xml │ ├── tab_profile.xml │ └── tab_settings.xml │ ├── menu │ └── navigation_items.xml │ └── values │ ├── public.xml │ └── strings.xml ├── simplified-ui-onboarding ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── onboarding │ │ ├── OnboardingDefaultViewModelFactory.kt │ │ ├── OnboardingEvent.kt │ │ ├── OnboardingFragment.kt │ │ ├── OnboardingListenedEvent.kt │ │ ├── OnboardingStartScreenEvent.kt │ │ ├── OnboardingStartScreenFragment.kt │ │ └── OnboardingStartScreenViewModel.kt │ └── res │ ├── layout │ ├── onboarding_fragment.xml │ └── onboarding_start_screen.xml │ └── values │ ├── public.xml │ └── strings.xml ├── simplified-ui-profiles ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── profiles │ │ ├── OnTextChangeListener.kt │ │ ├── ProfileAdapter.kt │ │ ├── ProfileDialogs.kt │ │ ├── ProfileModificationAbstractFragment.kt │ │ ├── ProfileModificationDefaultFragment.kt │ │ ├── ProfileModificationDefaultViewModel.kt │ │ ├── ProfileModificationEvent.kt │ │ ├── ProfileModificationFragmentParameters.kt │ │ ├── ProfileModificationFragmentServiceType.kt │ │ ├── ProfileSelectionEvent.kt │ │ ├── ProfileSelectionFragment.kt │ │ ├── ProfileSelectionViewModel.kt │ │ ├── ProfileTabEvent.kt │ │ ├── ProfileTabFragment.kt │ │ └── ProfileViewHolder.kt │ └── res │ ├── drawable │ ├── profile_delete.xml │ ├── profile_edit.xml │ ├── profile_failure.xml │ ├── profile_icon.xml │ ├── profile_time.xml │ └── profiles_border.xml │ ├── layout │ ├── profile_cell.xml │ ├── profile_modification.xml │ ├── profile_selection.xml │ └── profile_tab.xml │ └── values │ ├── dimensions.xml │ ├── public.xml │ └── stringsProfiles.xml ├── simplified-ui-screen ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── ui │ └── screen │ ├── ScreenSizeInformation.kt │ └── ScreenSizeInformationType.kt ├── simplified-ui-settings ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── settings │ │ ├── SettingsCustomOPDSFragment.kt │ │ ├── SettingsCustomOPDSViewModel.kt │ │ ├── SettingsDebugEvent.kt │ │ ├── SettingsDebugFragment.kt │ │ ├── SettingsDebugViewModel.kt │ │ ├── SettingsMainEvent.kt │ │ ├── SettingsMainFragment.kt │ │ └── SettingsMainViewModel.kt │ └── res │ ├── drawable │ ├── ic_settings_account.xml │ ├── ic_settings_build.xml │ ├── ic_settings_code.xml │ └── ic_settings_info.xml │ ├── layout │ ├── settings_custom_opds.xml │ ├── settings_debug.xml │ ├── settings_drm_activation_table_item.xml │ └── settings_version_table_item.xml │ ├── values │ ├── public.xml │ └── strings.xml │ └── xml │ └── settings.xml ├── simplified-ui-splash ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── ui │ │ └── splash │ │ ├── BootFragment.kt │ │ ├── BootViewModel.kt │ │ ├── EulaFragment.kt │ │ ├── MailtoWebViewClient.kt │ │ ├── SplashColorMatrix.java │ │ ├── SplashDependenciesType.kt │ │ ├── SplashEvent.kt │ │ └── SplashFragment.kt │ └── res │ ├── anim │ └── zoom_fade.xml │ ├── drawable │ ├── border.xml │ ├── migration_account.png │ ├── migration_book.png │ ├── migration_bookmark.png │ ├── migration_icon.png │ └── startup_error.png │ ├── layout │ ├── splash_boot.xml │ ├── splash_eula.xml │ ├── splash_fragment.xml │ └── splash_selection.xml │ ├── values-de │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-it │ └── strings.xml │ └── values │ ├── public.xml │ └── strings.xml ├── simplified-ui-thread-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── ui │ └── thread │ └── api │ ├── UIExecutor.kt │ └── UIThreadServiceType.kt ├── simplified-viewer-api ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── viewer │ └── api │ └── Viewers.kt ├── simplified-viewer-audiobook ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── viewer │ │ └── audiobook │ │ ├── AudioBookHelpers.kt │ │ ├── AudioBookLoadingFragment.kt │ │ ├── AudioBookLoadingFragmentListenerType.kt │ │ ├── AudioBookLoadingFragmentParameters.kt │ │ ├── AudioBookPlayerActivity.kt │ │ ├── AudioBookPlayerParameters.kt │ │ ├── AudioBookViewer.kt │ │ └── AudiobookFragmentFactory.kt │ ├── res │ ├── layout │ │ ├── audio_book_player_base.xml │ │ └── audio_book_player_loading.xml │ └── values │ │ ├── public.xml │ │ └── strings.xml │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.viewer.spi.ViewerProviderType ├── simplified-viewer-epub-readium2 ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── viewer │ │ └── epub │ │ └── readium2 │ │ ├── Reader2Activity.kt │ │ ├── Reader2ActivityParameters.kt │ │ ├── Reader2Bookmarks.kt │ │ ├── Reader2Devices.kt │ │ ├── Reader2ParametersAdapter.kt │ │ ├── Reader2Themes.kt │ │ ├── Reader2ViewModel.kt │ │ ├── Reader2ViewModelFactory.kt │ │ └── ReaderViewerR2.kt │ ├── res │ ├── layout │ │ └── reader2.xml │ └── values │ │ ├── public.xml │ │ └── strings.xml │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.viewer.spi.ViewerProviderType ├── simplified-viewer-pdf ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── nypl │ │ └── simplified │ │ └── viewer │ │ └── pdf │ │ ├── PdfReaderActivity.kt │ │ ├── PdfReaderParameters.kt │ │ └── PdfViewerProvider.kt │ ├── res │ ├── layout │ │ └── pdf_reader.xml │ └── values │ │ ├── public.xml │ │ └── strings.xml │ └── resources │ └── META-INF │ └── services │ └── org.nypl.simplified.viewer.spi.ViewerProviderType ├── simplified-viewer-spi ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── viewer │ └── spi │ ├── ViewerPreferences.kt │ └── ViewerProviderType.kt ├── simplified-webview ├── README.md ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── org │ └── nypl │ └── simplified │ └── webview │ ├── WebViewCookieDatabase.kt │ ├── WebViewCookieDatabaseType.kt │ ├── WebViewCookieDatabaseV10.kt │ ├── WebViewCookieDatabaseV11.kt │ ├── WebViewCookieDatabaseV12.kt │ ├── WebViewCookieDatabaseV9.kt │ ├── WebViewCookieDatabaseVUnknown.kt │ ├── WebViewCookieType.kt │ └── WebViewUtilities.kt └── src ├── misc └── ReadMe.java └── site └── resources ├── commits.dia ├── commits.png ├── commitsBad.dia ├── commitsBad.png ├── outline.png ├── simplified.jpg └── stages.png /.ci-local/check-repositories.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Non-empty lines that do not start with '#' are treated as the base URIs of 3 | # repositories holding Maven packages. 4 | # 5 | 6 | https://repo1.maven.org/maven2/ 7 | http://maven.findawayworld.com/artifactory/libs-release/ 8 | https://jcenter.bintray.com/ 9 | https://jitpack.io/ 10 | -------------------------------------------------------------------------------- /.ci-local/check-versions.properties: -------------------------------------------------------------------------------- 1 | # 2 | # The configuration file for the check-versions CI tool. 3 | # 4 | 5 | versionCatalogFile: ../org.librarysimplified.android.platform/build_libraries.toml 6 | libraryListFile: check-libraries.txt 7 | libraryRepositoryFile: check-repositories.txt 8 | -------------------------------------------------------------------------------- /.ci-local/deploy-fastlane-apps.conf: -------------------------------------------------------------------------------- 1 | simplified-app-simplye 2 | simplified-app-openebooks 3 | # 4 | # The non-empty lines of this file that do not begin with '#' are interpreted as the names 5 | # of submodules that will have release build deployed with Fastlane. 6 | # 7 | -------------------------------------------------------------------------------- /.ci-local/deploy-firebase-apps.conf: -------------------------------------------------------------------------------- 1 | simplified-app-simplye 2 | simplified-app-openebooks 3 | # 4 | # The non-empty lines of this file that do not begin with '#' are interpreted as the names 5 | # of submodules that will have builds deployed with Firebase. 6 | # 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.kt] 2 | indent_size=2 3 | insert_final_newline=true 4 | disabled_rules=import-ordering,experimental:package-name,experimental:argument-list-wrapping 5 | 6 | [*.gradle] 7 | indent_size=2 8 | insert_final_newline=true 9 | 10 | [*.java] 11 | indent_size=2 12 | insert_final_newline=true 13 | 14 | [*.xml] 15 | indent_size=2 16 | insert_final_newline=true 17 | -------------------------------------------------------------------------------- /README-CHANGES.txt: -------------------------------------------------------------------------------- 1 | [OE-515] - [Android] Terms of Use screen 2 | [OE-516] - [Android] Privacy policy page 3 | [OE-517] - [Android] Redesign the login screen 4 | [OE-552] - [UX] Create sign in designs in dark mode for iOS and Android -------------------------------------------------------------------------------- /buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | //kotlinDslPluginOptions { 6 | // experimentalWarning.set(false) 7 | //} 8 | 9 | repositories { 10 | jcenter() 11 | } 12 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Nov 17 02:26:33 PST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip 7 | -------------------------------------------------------------------------------- /simplified-accessibility/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | api libs.androidx.lifecycle.ext 3 | 4 | api project(":simplified-books-registry-api") 5 | api project(":simplified-ui-thread-api") 6 | 7 | implementation libs.kotlin.stdlib 8 | implementation libs.kotlin.reflect 9 | implementation libs.rxjava2 10 | } 11 | -------------------------------------------------------------------------------- /simplified-accessibility/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accessibility 2 | POM_DESCRIPTION=Library Simplified (Accessibility APIs and functionality) 3 | POM_NAME=org.librarysimplified.accessibility 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accessibility/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-api/README.md: -------------------------------------------------------------------------------- 1 | org.librarysimplified.accounts.api 2 | === 3 | 4 | The `org.librarysimplified.accounts.api` module specifies the types 5 | and interfaces related to _accounts_. 6 | -------------------------------------------------------------------------------- /simplified-accounts-api/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.api 2 | POM_DESCRIPTION=Library Simplified (Accounts API) 3 | POM_NAME=org.librarysimplified.accounts.api 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountAuthenticationAdobeActivation.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * A token used by Adobe DRM to activate and deactivate devices. 5 | */ 6 | 7 | data class AccountAuthenticationAdobeActivation(val token: String) 8 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountEvent.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | import org.nypl.simplified.presentableerror.api.PresentableType 4 | 5 | /** 6 | * The type of account events. 7 | */ 8 | 9 | abstract class AccountEvent : PresentableType 10 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountEventUpdated.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * An account was updated. 5 | */ 6 | 7 | data class AccountEventUpdated( 8 | override val message: String, 9 | val accountID: AccountID 10 | ) : AccountEvent() 11 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountLibraryLocation.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * The location of a library. 5 | */ 6 | 7 | data class AccountLibraryLocation( 8 | val location: AccountGeoLocation, 9 | val distance: AccountDistance? 10 | ) 11 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountPassword.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * An account password. 5 | */ 6 | 7 | data class AccountPassword(val value: String) { 8 | override fun toString(): String { 9 | return "[REDACTED]" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountProviderDescriptionParserType.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | import org.nypl.simplified.parser.api.ParserType 4 | 5 | /** 6 | * A parser of account provider descriptions. 7 | */ 8 | 9 | interface AccountProviderDescriptionParserType : ParserType 10 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountProviderResolutionListenerType.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | import java.net.URI 4 | 5 | /** 6 | * The type of receivers of account resolution status messages. 7 | */ 8 | 9 | typealias AccountProviderResolutionListenerType = 10 | (accountProvider: URI, message: String) -> Unit 11 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountSearchQuery.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * A search query made to the library registry. 5 | */ 6 | 7 | data class AccountSearchQuery( 8 | val location: AccountGeoLocation?, 9 | val searchQuery: String, 10 | val includeTestingLibraries: Boolean 11 | ) 12 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountUnknownProviderException.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | import java.lang.Exception 4 | 5 | /** 6 | * An unrecognized provider was specified when trying to create an account. 7 | */ 8 | 9 | class AccountUnknownProviderException : Exception() 10 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountUnresolvableProviderException.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | import java.lang.Exception 4 | 5 | /** 6 | * An unresolvable provider was specified when trying to create an account. 7 | */ 8 | 9 | class AccountUnresolvableProviderException(message: String?) : Exception(message) 10 | -------------------------------------------------------------------------------- /simplified-accounts-api/src/main/java/org/nypl/simplified/accounts/api/AccountUsername.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.accounts.api 2 | 3 | /** 4 | * An account username. 5 | */ 6 | 7 | data class AccountUsername(val value: String) 8 | -------------------------------------------------------------------------------- /simplified-accounts-database-api/README.md: -------------------------------------------------------------------------------- 1 | org.librarysimplified.accounts.database.api 2 | === 3 | 4 | The `org.librarysimplified.accounts.database.api` module... 5 | -------------------------------------------------------------------------------- /simplified-accounts-database-api/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.database.api 2 | POM_DESCRIPTION=Library Simplified (Accounts database API) 3 | POM_NAME=org.librarysimplified.accounts.database.api 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-database-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-database/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.database 2 | POM_DESCRIPTION=Library Simplified (Accounts database implementation) 3 | POM_NAME=org.librarysimplified.accounts.database 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-database/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-json/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.json 2 | POM_DESCRIPTION=Library Simplified (Shared JSON classes) 3 | POM_NAME=org.librarysimplified.accounts.json 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-json/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-json/src/main/resources/META-INF/services/org.nypl.simplified.accounts.api.AccountProviderDescriptionCollectionSerializersType: -------------------------------------------------------------------------------- 1 | org.nypl.simplified.accounts.json.AccountProviderDescriptionCollectionSerializers -------------------------------------------------------------------------------- /simplified-accounts-json/src/main/resources/META-INF/services/org.nypl.simplified.accounts.api.AccountProviderDescriptionSerializersType: -------------------------------------------------------------------------------- 1 | org.nypl.simplified.accounts.json.AccountProviderDescriptionSerializers -------------------------------------------------------------------------------- /simplified-accounts-registry-api/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.registry.api 2 | POM_DESCRIPTION=Library Simplified (Account provider registry API) 3 | POM_NAME=org.librarysimplified.accounts.registry.api 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-registry-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-registry/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.registry 2 | POM_DESCRIPTION=Library Simplified (Account provider registry implementation) 3 | POM_NAME=org.librarysimplified.accounts.registry 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-registry/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-source-filebased/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.source.filebased 2 | POM_DESCRIPTION=Library Simplified (File/asset based registry source implementation) 3 | POM_NAME=org.librarysimplified.accounts.source.filebased 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-source-filebased/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-source-filebased/src/main/resources/META-INF/services/org.nypl.simplified.accounts.source.spi.AccountProviderSourceFactoryType: -------------------------------------------------------------------------------- 1 | org.nypl.simplified.accounts.source.filebased.AccountProviderSourceFileBasedFactory -------------------------------------------------------------------------------- /simplified-accounts-source-nyplregistry/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.source.nyplregistry 2 | POM_DESCRIPTION=Library Simplified (NYPL registry client implementation) 3 | POM_NAME=org.librarysimplified.accounts.source.nyplregistry 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-source-nyplregistry/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-source-nyplregistry/src/main/resources/META-INF/services/org.nypl.simplified.accounts.source.spi.AccountProviderSourceFactoryType: -------------------------------------------------------------------------------- 1 | org.nypl.simplified.accounts.source.nyplregistry.AccountProviderSourceNYPLFactory -------------------------------------------------------------------------------- /simplified-accounts-source-spi/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.accounts.source.spi 2 | POM_DESCRIPTION=Library Simplified (Account provider source SPI) 3 | POM_NAME=org.librarysimplified.accounts.source.spi 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-accounts-source-spi/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-accounts-source-spi/src/main/res/values/public.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /simplified-adobe-extensions/README.md: -------------------------------------------------------------------------------- 1 | org.librarysimplified.adobe.extensions 2 | === 3 | 4 | The `org.librarysimplified.adobe.extensions` module provides classes 5 | for working with Adobe DRM. 6 | -------------------------------------------------------------------------------- /simplified-adobe-extensions/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | api project(":simplified-accounts-api") 3 | api project(":simplified-files") 4 | 5 | api libs.nypl.drm.core 6 | 7 | implementation project(":simplified-json-core") 8 | 9 | implementation libs.kotlin.stdlib 10 | implementation libs.kotlin.reflect 11 | implementation libs.slf4j 12 | } 13 | -------------------------------------------------------------------------------- /simplified-adobe-extensions/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.adobe.extensions 2 | POM_AUTOMATIC_MODULE_NAME=org.librarysimplified.adobe.extensions 3 | POM_DESCRIPTION=Library Simplified (Adobe DRM convenience functions) 4 | POM_NAME=org.librarysimplified.adobe.extensions 5 | POM_PACKAGING=aar 6 | -------------------------------------------------------------------------------- /simplified-adobe-extensions/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /simplified-analytics-api/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | api project(":simplified-accounts-api") 3 | api project(":simplified-opds-core") 4 | 5 | api libs.joda.time 6 | api libs.nypl.http.api 7 | 8 | implementation libs.kotlin.stdlib 9 | implementation libs.kotlin.reflect 10 | implementation libs.slf4j 11 | } 12 | -------------------------------------------------------------------------------- /simplified-analytics-api/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.analytics.api 2 | POM_DESCRIPTION=Library Simplified (Analytics API) 3 | POM_NAME=org.librarysimplified.analytics.api 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-analytics-api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-analytics-circulation/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | implementation project(":simplified-analytics-api") 3 | implementation project(":simplified-threads") 4 | 5 | implementation libs.kotlin.stdlib 6 | implementation libs.kotlin.reflect 7 | implementation libs.slf4j 8 | } 9 | -------------------------------------------------------------------------------- /simplified-analytics-circulation/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.analytics.circulation 2 | POM_DESCRIPTION=Library Simplified (Circulation manager analytics implementation) 3 | POM_NAME=org.librarysimplified.analytics.circulation 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-analytics-circulation/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-analytics-circulation/src/main/resources/META-INF/services/org.nypl.simplified.analytics.api.AnalyticsSystemProvider: -------------------------------------------------------------------------------- 1 | org.nypl.simplified.analytics.circulation.CirculationAnalyticsSystems -------------------------------------------------------------------------------- /simplified-android-ktx/README.md: -------------------------------------------------------------------------------- 1 | org.librarysimplified.android.ktx 2 | === 3 | 4 | Kotlin Android Extensions for the Library Simplified project. 5 | -------------------------------------------------------------------------------- /simplified-android-ktx/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | implementation libs.kotlin.stdlib 3 | implementation libs.kotlin.reflect 4 | implementation libs.androidx.lifecycle.java8 5 | 6 | api libs.androidx.app.compat 7 | } 8 | -------------------------------------------------------------------------------- /simplified-android-ktx/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.android.ktx 2 | POM_DESCRIPTION=Library Simplified (Kotlin Android Extensions) 3 | POM_NAME=org.librarysimplified.android.ktx 4 | POM_PACKAGING=aar 5 | -------------------------------------------------------------------------------- /simplified-android-ktx/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-android-ktx/src/main/java/org/nypl/simplified/android/ktx/Configuration.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.android.ktx 2 | 3 | import android.content.res.Configuration 4 | 5 | val Configuration.isNightModeYes: Boolean 6 | get() = this.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES 7 | -------------------------------------------------------------------------------- /simplified-announcements/README.md: -------------------------------------------------------------------------------- 1 | org.librarysimplified.announcements 2 | === 3 | 4 | The `org.librarysimplified.announcements` module specifies the types relating to announcements. 5 | -------------------------------------------------------------------------------- /simplified-announcements/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | api libs.joda.time 3 | 4 | implementation project(':simplified-json-core') 5 | 6 | implementation libs.jackson.databind 7 | implementation libs.kotlin.stdlib 8 | implementation libs.kotlin.reflect 9 | implementation libs.slf4j 10 | } 11 | -------------------------------------------------------------------------------- /simplified-announcements/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_ARTIFACT_ID=org.librarysimplified.announcements 2 | POM_AUTOMATIC_MODULE_NAME=org.librarysimplified.announcements 3 | POM_DESCRIPTION=Library Simplified (Announcements API) 4 | POM_NAME=org.librarysimplified.announcements 5 | POM_PACKAGING=jar 6 | -------------------------------------------------------------------------------- /simplified-announcements/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /simplified-announcements/src/main/java/org/nypl/simplified/announcements/Announcement.kt: -------------------------------------------------------------------------------- 1 | package org.nypl.simplified.announcements 2 | 3 | import org.joda.time.LocalDateTime 4 | import java.util.UUID 5 | 6 | /** 7 | * A single announcement. 8 | */ 9 | 10 | data class Announcement( 11 | val id: UUID, 12 | val content: String, 13 | val expires: LocalDateTime? 14 | ) 15 | -------------------------------------------------------------------------------- /simplified-app-openebooks/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("play_store_api_key.json") 2 | package_name("org.nypl.labs.OpenEbooks.app") 3 | -------------------------------------------------------------------------------- /simplified-app-openebooks/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | 5 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 6 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 7 | -------------------------------------------------------------------------------- /simplified-app-openebooks/fastlane-aab.conf: -------------------------------------------------------------------------------- 1 | build/outputs/bundle/release/openebooks-release.aab 2 | # 3 | # The first line of this file is the AAB that will be deployed to Fastlane. 4 | # 5 | -------------------------------------------------------------------------------- /simplified-app-openebooks/firebase-apk.conf: -------------------------------------------------------------------------------- 1 | build/outputs/apk/release/openebooks-release.apk 2 | # 3 | # The first line of this file is the APK that will be deployed to Firebase. 4 | # 5 | -------------------------------------------------------------------------------- /simplified-app-openebooks/firebase-app-id.conf: -------------------------------------------------------------------------------- 1 | 1:83753990150:android:770193bd9ffeb14e83eb87 2 | 3 | # 4 | # The first line of this file is the ID of the application to deploy to Firebase. 5 | # 6 | -------------------------------------------------------------------------------- /simplified-app-openebooks/firebase-groups.conf: -------------------------------------------------------------------------------- 1 | openebooks-qa 2 | 3 | # 4 | # The first line of this file is the comma-separated names of the testing groups to notify of builds. 5 | # 6 | -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/drawable/oei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/drawable/oei.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NYPL-Simplified/Simplified-Android-Core/265ffd1a551dd70f796f63b52fdf97d1a4888cf8/simplified-app-openebooks/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /simplified-app-openebooks/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |