├── .firebaserc ├── .gitattributes ├── .github └── workflows │ └── build-release.yml ├── .gitignore ├── LICENSE ├── Privacy Policy.md ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro ├── release │ ├── baselineProfiles │ │ ├── 0 │ │ │ └── app-release.dm │ │ └── 1 │ │ │ └── app-release.dm │ └── output-metadata.json └── src │ ├── debug │ ├── google-services.json │ ├── ic_launcher-playstore.png │ └── res │ │ ├── drawable │ │ └── ic_launcher_foreground.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_background.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_background.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_background.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── ic_launcher_background.xml │ │ └── strings.xml │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── kafka │ │ │ └── user │ │ │ ├── KafkaApplication.kt │ │ │ ├── MainActivity.kt │ │ │ ├── fcm │ │ │ ├── FcmTokenGenerator.kt │ │ │ └── FirebaseMessageService.kt │ │ │ ├── home │ │ │ ├── AppNavigation.kt │ │ │ ├── MainScreen.kt │ │ │ ├── MainViewModel.kt │ │ │ ├── bottombar │ │ │ │ ├── HomeNavigation.kt │ │ │ │ ├── HomeNavigationItems.kt │ │ │ │ └── NavigationDrawerItem.kt │ │ │ └── overlays │ │ │ │ ├── AppMessageDialog.kt │ │ │ │ ├── AppUpdateDialog.kt │ │ │ │ └── Overlays.kt │ │ │ └── injection │ │ │ ├── AndroidActivityComponent.kt │ │ │ ├── AndroidApplicationComponent.kt │ │ │ └── AppComponent.kt │ └── res │ │ ├── drawable │ │ ├── ic_kafka_logo.xml │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.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 │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ └── data_extraction_rules.xml │ ├── rc │ ├── generated │ │ └── baselineProfiles │ │ │ ├── baseline-prof.txt │ │ │ └── startup-prof.txt │ ├── ic_launcher-playstore.png │ └── res │ │ ├── drawable │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_foreground.webp │ │ └── ic_launcher_round.webp │ │ └── values │ │ ├── ic_launcher_background.xml │ │ └── strings.xml │ └── release │ └── generated │ └── baselineProfiles │ ├── baseline-prof.txt │ └── startup-prof.txt ├── base ├── annotations │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── kafka │ │ └── base │ │ └── Annotations.kt └── domain │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── commonMain │ └── kotlin │ └── com │ └── kafka │ └── base │ ├── AppInitializer.kt │ ├── Combine.kt │ ├── CoroutineDispatchers.kt │ ├── SecretsProvider.kt │ ├── TimberExt.kt │ ├── domain │ ├── Interactor.kt │ └── InvokeStatus.kt │ └── extensions │ └── CoroutineExtensions.kt ├── baselineprofile ├── .gitignore ├── build.gradle.kts └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── baseline │ └── profile │ ├── BaselineProfileGenerator.kt │ └── StartupBenchmarks.kt ├── build.gradle.kts ├── core ├── ads │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── org │ │ │ └── kafka │ │ │ └── ads │ │ │ └── admob │ │ │ ├── NativeAdInitializer.kt │ │ │ ├── NativeAdProvider.kt │ │ │ ├── NativeAdState.kt │ │ │ ├── NativeAdView.kt │ │ │ ├── RowAd.kt │ │ │ └── xml │ │ │ └── RowAd.kt │ │ └── res │ │ ├── drawable │ │ └── ad_attribution_selector.xml │ │ └── layout │ │ └── row_ad_container.xml ├── analytics │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── analytics │ │ │ ├── AnalyticsPlatformComponent.kt │ │ │ ├── EventRepository.kt │ │ │ └── logger │ │ │ └── Analytics.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── analytics │ │ │ └── AnalyticsPlatformComponent.kt │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── kafka │ │ └── analytics │ │ ├── AnalyticsPlatformComponent.kt │ │ └── logger │ │ └── AnalyticsImpl.kt ├── downloader │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── tm │ │ │ └── alashow │ │ │ └── datmusic │ │ │ └── downloader │ │ │ ├── DownloadItem.kt │ │ │ ├── DownloadMessage.kt │ │ │ ├── Downloader.kt │ │ │ ├── DownloaderEvent.kt │ │ │ ├── DownloaderMessages.kt │ │ │ ├── DownloaderModule.kt │ │ │ ├── interactors │ │ │ ├── ObserveDownloadByFileId.kt │ │ │ ├── ObserveDownloadByItemId.kt │ │ │ ├── ObserveDownloadedFiles.kt │ │ │ └── ObserveDownloadedItems.kt │ │ │ └── observers │ │ │ └── ObserveDownloads.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── tm │ │ │ └── alashow │ │ │ └── datmusic │ │ │ └── downloader │ │ │ ├── DownloaderModule.kt │ │ │ └── observers │ │ │ └── ObserveDownloads.kt │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── tm │ │ │ └── alashow │ │ │ └── datmusic │ │ │ └── downloader │ │ │ ├── AudioExtensions.kt │ │ │ ├── DownloadInitializer.kt │ │ │ ├── DownloadRetryManager.kt │ │ │ ├── DownloaderImpl.kt │ │ │ ├── DownloaderModule.kt │ │ │ ├── DownloaderNotificationManager.kt │ │ │ ├── manager │ │ │ ├── DownloadManager.kt │ │ │ └── FetchDownloadManager.kt │ │ │ ├── mapper │ │ │ └── DownloadInfoMapper.kt │ │ │ └── observers │ │ │ └── ObserveDownloads.kt │ │ └── res │ │ └── values │ │ └── strings.xml ├── image-loading │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── image │ │ │ ├── CoilAppInitializer.kt │ │ │ ├── ImageLoadingPlatformComponent.kt │ │ │ └── LoadImage.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── image │ │ │ └── ImageLoadingPlatformComponent.kt │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── kafka │ │ └── image │ │ └── ImageLoadingPlatformComponent.kt ├── networking │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── kafka │ │ └── networking │ │ ├── ErrorMessages.kt │ │ ├── NetworkingComponent.kt │ │ └── SerializationPolymorphicDefaultPair.kt ├── play │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── play │ │ │ ├── AppReviewManager.kt │ │ │ ├── AppUpdateManager.kt │ │ │ └── PlayStoreComponent.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── play │ │ │ └── PlayStoreComponent.kt │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── kafka │ │ └── play │ │ ├── AppReviewManager.kt │ │ └── PlayStoreComponent.kt └── remote-config │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── remote │ │ └── config │ │ ├── RemoteConfig.kt │ │ └── RemoteConfigExtensions.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── remote │ │ └── config │ │ └── RemoteConfig.kt │ └── main │ ├── java │ └── com │ │ └── kafka │ │ └── remote │ │ └── config │ │ └── RemoteConfig.kt │ └── res │ └── xml │ └── remote_config_defaults.xml ├── data ├── database │ ├── .gitignore │ ├── build.gradle.kts │ ├── schemas │ │ └── com.kafka.data.db.KafkaRoomDatabase │ │ │ ├── 3.json │ │ │ ├── 4.json │ │ │ ├── 5.json │ │ │ ├── 6.json │ │ │ ├── 7.json │ │ │ ├── 8.json │ │ │ └── 9.json │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ ├── dao │ │ │ ├── DownloadRequestsDao.kt │ │ │ ├── EntityDao.kt │ │ │ ├── FileDao.kt │ │ │ ├── ItemDao.kt │ │ │ ├── ItemDetailDao.kt │ │ │ ├── RecentSearchDao.kt │ │ │ └── RecentsDao.kt │ │ │ ├── db │ │ │ ├── AppTypeConverters.kt │ │ │ ├── DatabaseBuilderComponnet.kt │ │ │ └── KafkaDatabase.kt │ │ │ ├── entities │ │ │ ├── BaseEntity.kt │ │ │ ├── DownloadItem.kt │ │ │ ├── DownloadRequest.kt │ │ │ ├── FavoriteItem.kt │ │ │ ├── File.kt │ │ │ ├── Homepage.kt │ │ │ ├── Item.kt │ │ │ ├── ItemDetail.kt │ │ │ ├── QueueEntity.kt │ │ │ ├── RecentItem.kt │ │ │ ├── RecentSearch.kt │ │ │ ├── Summary.kt │ │ │ └── User.kt │ │ │ └── injection │ │ │ └── DatabaseModule.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ └── db │ │ │ └── DatabaseBuilder.kt │ │ └── main │ │ └── java │ │ └── com │ │ └── kafka │ │ └── data │ │ └── db │ │ └── DatabaseBuilder.kt ├── models │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── commonMain │ │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── data │ │ └── model │ │ ├── AppConfig.kt │ │ ├── AppMessage.kt │ │ ├── ArchiveQuery.kt │ │ ├── MediaType.kt │ │ ├── SearchFilter.kt │ │ ├── StringListSerializer.kt │ │ ├── UserCountryResponse.kt │ │ ├── homepage │ │ └── HomepageResponse.kt │ │ └── item │ │ ├── Doc.kt │ │ ├── File.kt │ │ ├── ItemDetailResponse.kt │ │ ├── Metadata.kt │ │ ├── Params.kt │ │ ├── Response.kt │ │ └── SearchResponse.kt ├── platform │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ └── platform │ │ │ ├── DataPlatformComponent.kt │ │ │ ├── app │ │ │ └── AppVersionComponent.kt │ │ │ └── device │ │ │ └── PlatformCountryComponent.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ └── platform │ │ │ ├── AppDirectory.kt │ │ │ ├── DataPlatformComponent.kt │ │ │ ├── UserDataRepository.kt │ │ │ ├── app │ │ │ └── AppVersion.kt │ │ │ └── device │ │ │ ├── PlatformCountryComponent.kt │ │ │ └── UserCountryRepository.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── data │ │ └── platform │ │ ├── DataPlatformComponent.kt │ │ ├── app │ │ └── AppVersionComponent.kt │ │ └── device │ │ └── PlatformCountryComponent.kt ├── prefs │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ └── prefs │ │ │ └── PreferenceStoreComponent.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── data │ │ │ └── prefs │ │ │ ├── ItemReadCounter.kt │ │ │ ├── PreferenceStoreComponent.kt │ │ │ ├── PreferenceStoreExtensions.kt │ │ │ └── PreferencesStore.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── data │ │ └── prefs │ │ └── PreferenceStoreComponent.kt └── repo │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── data │ │ ├── UrlUtils.kt │ │ ├── api │ │ └── ArchiveService.kt │ │ ├── feature │ │ ├── DownloadsRepository.kt │ │ ├── FavoritesRepository.kt │ │ ├── RecentItemRepository.kt │ │ ├── ai │ │ │ ├── OpenAiRepository.kt │ │ │ └── SummaryRepository.kt │ │ ├── auth │ │ │ └── AccountRepository.kt │ │ ├── firestore │ │ │ └── FirestoreGraph.kt │ │ ├── homepage │ │ │ ├── HomepageMapper.kt │ │ │ └── HomepageRepository.kt │ │ ├── item │ │ │ ├── FileMapper.kt │ │ │ ├── ItemDataSource.kt │ │ │ ├── ItemDetailDataSource.kt │ │ │ ├── ItemDetailMapper.kt │ │ │ ├── ItemMapper.kt │ │ │ ├── ItemRepository.kt │ │ │ └── ItemWithDownload.kt │ │ └── recommendation │ │ │ └── RecommendationRepository.kt │ │ └── injection │ │ └── SerializersModule.kt │ └── main │ └── AndroidManifest.xml ├── desktop-app ├── .gitignore ├── build.gradle.kts └── src │ └── jvmMain │ └── kotlin │ └── com │ └── kafka │ └── desktop │ ├── Main.kt │ ├── MainScreen.kt │ ├── WindowComponent.kt │ └── main │ ├── HomeNavigation.kt │ └── HomeNavigationItems.kt ├── domain ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── domain │ │ ├── interactors │ │ ├── AddRecentSearch.kt │ │ ├── GetReaderState.kt │ │ ├── ResumeAlbum.kt │ │ ├── SearchQueryItems.kt │ │ ├── UpdateCurrentPage.kt │ │ ├── UpdateFavorite.kt │ │ ├── UpdateFeedback.kt │ │ ├── UpdateHomepage.kt │ │ ├── UpdateItemDetail.kt │ │ ├── UpdateItems.kt │ │ ├── UpdateRecentItem.kt │ │ ├── UpdateRecommendations.kt │ │ ├── account │ │ │ ├── LogoutCredentialManager.kt │ │ │ ├── LogoutUser.kt │ │ │ ├── ResetPassword.kt │ │ │ ├── SignInAnonymously.kt │ │ │ ├── SignInUser.kt │ │ │ ├── SignInWithGoogle.kt │ │ │ └── SignUpUser.kt │ │ ├── query │ │ │ ├── BuildLocalQuery.kt │ │ │ ├── BuildRemoteQuery.kt │ │ │ └── BuildSearchQuery.kt │ │ └── recent │ │ │ ├── AddRecentItem.kt │ │ │ ├── IsResumableAudio.kt │ │ │ ├── RemoveAllRecentItems.kt │ │ │ └── RemoveRecentItem.kt │ │ └── observers │ │ ├── ObserveAppMessage.kt │ │ ├── ObserveAppUpdateConfig.kt │ │ ├── ObserveCreatorItems.kt │ │ ├── ObserveFiles.kt │ │ ├── ObserveHomepage.kt │ │ ├── ObserveItemDetail.kt │ │ ├── ObserveQueryItems.kt │ │ ├── ObserveRecentItems.kt │ │ ├── ObserveRecentSearch.kt │ │ ├── ObserveRecentTextItem.kt │ │ ├── ObserveShareAppIndex.kt │ │ ├── ObserveUser.kt │ │ ├── ShouldAutoDownload.kt │ │ ├── ShouldUseOnlineReader.kt │ │ ├── library │ │ ├── ObserveFavoriteStatus.kt │ │ └── ObserveFavorites.kt │ │ └── summary │ │ └── ObserveSummary.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── domain │ │ └── interactors │ │ └── account │ │ ├── LogoutCredentialManager.kt │ │ └── SignInWithGoogle.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── domain │ └── interactors │ └── account │ ├── LogoutCredentialManager.kt │ └── SignInWithGoogle.kt ├── firebase.json ├── firestore.indexes.json ├── firestore.rules ├── functions ├── .eslintrc.js ├── .gitignore ├── index.js ├── metadata.js ├── package-lock.json ├── package.json ├── recommendation │ ├── collaborative.js │ ├── content_filtering.js │ └── trending.js └── utils │ └── bigQueryUtils.js ├── gradle.properties ├── gradle ├── build-logic │ ├── convention │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── gradle │ │ │ ├── Android.kt │ │ │ ├── AndroidApplicationConventionPlugin.kt │ │ │ ├── AndroidApplicationLauncher.kt │ │ │ ├── AndroidLibraryConventionPlugin.kt │ │ │ ├── ComposeMultiplatformConventionPlugin.kt │ │ │ ├── Kotlin.kt │ │ │ ├── KotlinAndroidConventionPlugin.kt │ │ │ ├── KotlinMultiplatformConventionPlugin.kt │ │ │ ├── VersionCatalog.kt │ │ │ └── Versions.kt │ ├── gradle.properties │ └── settings.gradle.kts ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── maestro ├── homepage-scroll.yaml ├── item-detail.yaml ├── play-item.yaml └── search.yaml ├── navigation ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── navigation │ │ ├── NavigationModule.kt │ │ ├── Navigator.kt │ │ ├── deeplink │ │ ├── Config.kt │ │ └── DeepLinks.kt │ │ └── graph │ │ └── NavigationGraph.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── navigation │ ├── NavigationExtensions.kt │ └── RememberBottomSheetNavigator.kt ├── public ├── .well-known │ └── assetlinks.json ├── 404.html ├── favicon.ico ├── images │ ├── facebook.svg │ ├── instagram.svg │ └── whatsapp.svg ├── index.html └── style.css ├── release ├── clean-secrets.sh ├── decrypt-secrets.sh ├── encrypt-secrets.sh └── google-services.gpg ├── settings.gradle ├── spotless ├── copyright.txt └── spotless.gradle ├── storage.rules └── ui ├── auth ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ ├── drawable │ │ │ └── ic_kafka_logo.xml │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── auth │ │ ├── AuthViewModel.kt │ │ ├── LoginScreen.kt │ │ └── LoginWithEmail.kt │ └── main │ ├── AndroidManifest.xml │ └── res │ ├── drawable │ └── ic_kafka_logo.xml │ └── values │ └── strings.xml ├── common ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ ├── drawable │ │ │ ├── absurd_meditation.xml │ │ │ └── ic_kafka_logo.xml │ │ └── values │ │ │ └── string.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── common │ │ ├── Clickable.kt │ │ ├── ContextExtensions.kt │ │ ├── LazyList.kt │ │ ├── ObservableLoadingCounter.kt │ │ ├── PaddingValues.kt │ │ ├── UiMessage.kt │ │ ├── adaptive │ │ ├── LazyGrid.kt │ │ └── WindowSizeClass.kt │ │ ├── animation │ │ ├── SharedXAxisEnterTransition.kt │ │ └── TimedVisibility.kt │ │ ├── extensions │ │ └── ComposeExtensions.kt │ │ ├── image │ │ └── Icons.kt │ │ ├── platform │ │ └── CommonUiPlatformComponent.kt │ │ ├── snackbar │ │ ├── SnackbarManager.kt │ │ └── UiMessage.kt │ │ └── widgets │ │ ├── DeferredIcon.kt │ │ ├── IconButton.kt │ │ ├── LocalSnackbarHostState.kt │ │ ├── Shadow.kt │ │ └── UiMessage.kt │ ├── debug │ └── res │ │ └── values │ │ └── string.xml │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── common │ │ ├── ContextExtensions.kt │ │ └── platform │ │ └── CommonUiPlatformComponent.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── common │ ├── ContextExtensions.kt │ ├── platform │ └── CommonUiPlatformComponent.kt │ └── test │ └── TestTags.kt ├── components ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── ui │ │ └── components │ │ ├── Labels.kt │ │ ├── MessageBox.kt │ │ ├── PagerTab.kt │ │ ├── Scaffold.kt │ │ ├── item │ │ ├── CoverImage.kt │ │ ├── DownloadStatusIcons.kt │ │ ├── FeaturedItem.kt │ │ ├── Item.kt │ │ ├── LayoutType.kt │ │ ├── LibraryItem.kt │ │ ├── PersonItem.kt │ │ ├── RowItem.kt │ │ ├── SubjectItem.kt │ │ ├── SummaryAnimation.kt │ │ ├── SummaryFeedback.kt │ │ └── SummaryMessage.kt │ │ ├── material │ │ ├── AlertDialog.kt │ │ ├── Buttons.kt │ │ ├── Dismissable.kt │ │ ├── HazeScaffold.kt │ │ ├── NestedScaffold.kt │ │ ├── Pager.kt │ │ ├── Slider.kt │ │ ├── StaggeredFlowRow.kt │ │ ├── TextField.kt │ │ └── TopBar.kt │ │ ├── placeholder │ │ ├── Placeholder.kt │ │ └── PlaceholderHighlight.kt │ │ ├── progress │ │ ├── DownloadAnimation.kt │ │ ├── InfiniteProgressBar.kt │ │ └── ProgressIndicator.kt │ │ └── snackbar │ │ ├── DismissableSnackbar.kt │ │ └── SnackbarMessagesHost.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── ui │ │ └── components │ │ ├── item │ │ ├── DownloadStatusIcons.kt │ │ └── SummaryAnimation.kt │ │ └── progress │ │ └── DownloadAnimation.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── kafka │ │ └── ui │ │ └── components │ │ ├── animation │ │ └── colorFilterDynamicProperty.kt │ │ ├── item │ │ ├── DownloadStatusIcons.kt │ │ └── SummaryAnimation.kt │ │ └── progress │ │ └── DownloadAnimation.kt │ └── res │ ├── raw │ ├── book.json │ └── purple_elephant.json │ └── values │ └── strings.xml ├── downloader ├── build.gradle.kts └── src │ ├── commonMain │ └── kotlin │ │ └── tm │ │ └── alashow │ │ └── datmusic │ │ └── ui │ │ └── downloader │ │ ├── DownloaderHost.kt │ │ └── LocalDownloader.kt │ ├── jvmMain │ └── kotlin │ │ └── tm │ │ └── alashow │ │ └── datmusic │ │ └── ui │ │ └── downloader │ │ └── DownloaderHost.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── tm │ │ └── alashow │ │ └── datmusic │ │ └── ui │ │ └── downloader │ │ ├── DownloaderHost.kt │ │ └── WriteableOpenDocumentTree.kt │ └── res │ └── values │ └── strings.xml ├── homepage ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── homepage │ │ ├── Homepage.kt │ │ ├── HomepageTopBar.kt │ │ ├── HomepageViewModel.kt │ │ ├── HomepageViewState.kt │ │ ├── components │ │ ├── Carousels.kt │ │ └── RecentItems.kt │ │ └── recent │ │ ├── RecentItemsScreen.kt │ │ └── RecentViewModel.kt │ └── main │ └── AndroidManifest.xml ├── item └── detail │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── item │ │ ├── PreloadImages.kt │ │ ├── detail │ │ ├── ItemDetail.kt │ │ ├── ItemDetailActions.kt │ │ ├── ItemDetailScaffold.kt │ │ ├── ItemDetailTopBar.kt │ │ ├── ItemDetailViewModel.kt │ │ ├── ItemDetailViewState.kt │ │ └── description │ │ │ ├── DescriptionDialog.kt │ │ │ └── ItemDescriptionLayout.kt │ │ ├── fake │ │ └── FakeItemData.kt │ │ └── files │ │ ├── ExtensionFilter.kt │ │ ├── File.kt │ │ ├── Files.kt │ │ ├── FilesViewModel.kt │ │ └── FilesViewState.kt │ └── main │ ├── AndroidManifest.xml │ └── res │ └── values │ └── strings.xml ├── library ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── library │ │ ├── LibraryScreen.kt │ │ ├── Tabs.kt │ │ ├── downloads │ │ ├── DownloadItem.kt │ │ ├── Downloads.kt │ │ └── DownloadsViewModel.kt │ │ └── favorites │ │ ├── FavoriteViewModel.kt │ │ └── Favorites.kt │ └── main │ └── AndroidManifest.xml ├── profile ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── profile │ │ ├── NotificationMenuItem.kt │ │ ├── ProfileMenu.kt │ │ ├── ProfileScreen.kt │ │ ├── ProfileViewModel.kt │ │ └── feedback │ │ ├── FeedbackScreen.kt │ │ └── FeedbackViewModel.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── profile │ │ └── NotificationMenuItem.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── profile │ └── NotificationMenuItem.kt ├── reader ├── epub │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ ├── composeResources │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── reader │ │ │ └── epub │ │ │ ├── EpubReader.kt │ │ │ ├── EpubReaderViewModel.kt │ │ │ ├── domain │ │ │ └── ParseEbook.kt │ │ │ ├── models │ │ │ ├── EpubBook.kt │ │ │ ├── EpubChapter.kt │ │ │ └── EpubImage.kt │ │ │ ├── parser │ │ │ ├── BookTextMapper.kt │ │ │ ├── EpubParser.kt │ │ │ ├── EpubParserException.kt │ │ │ ├── EpubUtils.kt │ │ │ └── EpubXMLFileParser.kt │ │ │ ├── settings │ │ │ └── ReaderSettings.kt │ │ │ └── ui │ │ │ └── SettingsSheet.kt │ │ └── main │ │ └── AndroidManifest.xml ├── online │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── commonMain │ │ ├── composeResources │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── kafka │ │ │ └── reader │ │ │ └── online │ │ │ ├── OnlineReader.kt │ │ │ └── OnlineReaderViewModel.kt │ │ └── main │ │ └── AndroidManifest.xml └── pdf │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── reader │ │ ├── DownloadProgress.kt │ │ ├── ReaderScreen.kt │ │ ├── ReaderViewModel.kt │ │ └── pdf │ │ ├── PdfReader.kt │ │ ├── PdfReaderViewModel.kt │ │ └── PdfViewer.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── reader │ │ └── pdf │ │ └── PdfViewer.jvm.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── reader │ └── pdf │ └── PdfViewer.android.kt ├── search ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── search │ │ ├── RecentSearches.kt │ │ ├── SearchScreen.kt │ │ ├── SearchViewModel.kt │ │ ├── SearchViewState.kt │ │ └── widget │ │ ├── SearchFilter.kt │ │ ├── SearchWidget.kt │ │ └── SpeechIcon.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── search │ │ └── widget │ │ └── SpeechIcon.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── kafka │ │ └── search │ │ └── widget │ │ └── SpeechIcon.kt │ └── res │ └── values │ └── strings.xml ├── shared ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ ├── composeResources │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── shared │ │ ├── SharedApplicationComponent.kt │ │ ├── injection │ │ ├── InitializersComponent.kt │ │ └── PlayerComponent.kt │ │ ├── main │ │ └── initializer │ │ │ ├── AppInitializers.kt │ │ │ ├── AudioProgressInitializer.kt │ │ │ └── RemoteConfigLogger.kt │ │ └── playback │ │ ├── PlaybackViewModel.kt │ │ ├── PlayerAudioDataSource.kt │ │ └── PlayerLogger.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── shared │ │ ├── DesktopApplicationComponent.kt │ │ ├── SharedPlatformApplicationComponent.kt │ │ ├── injection │ │ └── InitializersPlatformComponent.kt │ │ └── main │ │ └── initializer │ │ └── Initializers.kt │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── kafka │ └── shared │ ├── SharedPlatformApplicationComponent.kt │ ├── injection │ └── InitializersPlatformComponent.kt │ └── main │ └── initializer │ └── Initializers.kt ├── summary ├── .gitignore ├── build.gradle.kts └── src │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── kafka │ │ └── summary │ │ ├── SummaryScreen.kt │ │ ├── SummaryViewModel.kt │ │ └── summaryMarkdownTypography.kt │ └── main │ └── AndroidManifest.xml ├── theme ├── .gitignore ├── build.gradle.kts └── src │ ├── androidMain │ └── kotlin │ │ └── ui │ │ └── common │ │ └── theme │ │ └── theme │ │ └── Platform.kt │ ├── commonMain │ ├── composeResources │ │ └── font │ │ │ ├── inter_black.ttf │ │ │ ├── inter_bold.ttf │ │ │ ├── inter_light.ttf │ │ │ ├── inter_medium.ttf │ │ │ ├── inter_regular.ttf │ │ │ └── inter_semibold.ttf │ └── kotlin │ │ └── ui │ │ └── common │ │ └── theme │ │ └── theme │ │ ├── Color.kt │ │ ├── Dimens.kt │ │ ├── Platform.kt │ │ ├── Theme.kt │ │ └── Type.kt │ └── jvmMain │ └── kotlin │ └── ui │ └── common │ └── theme │ └── theme │ └── Platform.kt └── webview ├── .gitignore ├── build.gradle.kts └── src ├── commonMain └── kotlin │ └── com │ └── kafka │ └── webview │ └── WebView.kt └── main └── AndroidManifest.xml /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "kafka-books" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | public/** linguist-vendored -------------------------------------------------------------------------------- /Privacy Policy.md: -------------------------------------------------------------------------------- 1 | We use READ_PHONE_STATE permission 2 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/release/baselineProfiles/0/app-release.dm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/release/baselineProfiles/0/app-release.dm -------------------------------------------------------------------------------- /app/release/baselineProfiles/1/app-release.dm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/release/baselineProfiles/1/app-release.dm -------------------------------------------------------------------------------- /app/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "com.kafka.user", 8 | "variantName": "release", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 72, 15 | "versionName": "0.32.0", 16 | "outputFile": "app-release.apk" 17 | } 18 | ], 19 | "elementType": "File", 20 | "baselineProfiles": [ 21 | { 22 | "minApi": 28, 23 | "maxApi": 30, 24 | "baselineProfiles": [ 25 | "baselineProfiles/1/app-release.dm" 26 | ] 27 | }, 28 | { 29 | "minApi": 31, 30 | "maxApi": 2147483647, 31 | "baselineProfiles": [ 32 | "baselineProfiles/0/app-release.dm" 33 | ] 34 | } 35 | ], 36 | "minSdkVersionForDexing": 24 37 | } -------------------------------------------------------------------------------- /app/src/debug/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "577294117898", 4 | "firebase_url": "https://kafka-books.firebaseio.com", 5 | "project_id": "kafka-books", 6 | "storage_bucket": "kafka-books.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:577294117898:android:1da10a3ca24c29a60d83f3", 12 | "android_client_info": { 13 | "package_name": "com.kafka.user.debug" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "577294117898-btog9i7alqueftl59cosgqaqha0bcsrl.apps.googleusercontent.com", 19 | "client_type": 1, 20 | "android_info": { 21 | "package_name": "com.kafka.user.debug", 22 | "certificate_hash": "95c9e896555e3fedb2fc7fd86c4966e5e732335f" 23 | } 24 | } 25 | ], 26 | "api_key": [ 27 | { 28 | "current_key": "AIzaSyD1lV11eH3UdewwBDfNX_AmGTCN2LU-9ko" 29 | } 30 | ] 31 | } 32 | ], 33 | "configuration_version": "1" 34 | } -------------------------------------------------------------------------------- /app/src/debug/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/debug/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 15 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #5A5A5A 4 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kafka Debug 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/kafka/user/fcm/FcmTokenGenerator.kt: -------------------------------------------------------------------------------- 1 | package com.kafka.user.fcm 2 | 3 | import com.google.android.gms.tasks.OnCompleteListener 4 | import com.google.firebase.messaging.FirebaseMessaging 5 | import com.kafka.base.debug 6 | 7 | object FcmTokenGenerator { 8 | fun logToken() { 9 | FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> 10 | if (!task.isSuccessful) { 11 | debug { "Fetching FCM registration token failed ${task.exception}" } 12 | return@OnCompleteListener 13 | } 14 | 15 | val token = task.result 16 | debug { "FCM registration token: $token" } 17 | }) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/kafka/user/injection/AndroidActivityComponent.kt: -------------------------------------------------------------------------------- 1 | package com.kafka.user.injection 2 | 3 | import android.app.Activity 4 | import com.kafka.remote.config.RemoteConfig 5 | import com.kafka.user.home.MainScreen 6 | import me.tatarka.inject.annotations.Component 7 | import me.tatarka.inject.annotations.Provides 8 | import com.kafka.base.ActivityScope 9 | 10 | @ActivityScope 11 | @Component 12 | abstract class AndroidActivityComponent( 13 | @get:Provides val activity: Activity, 14 | @Component val applicationComponent: AndroidApplicationComponent, 15 | ) { 16 | abstract val mainScreen: MainScreen 17 | abstract val remoteConfig: RemoteConfig 18 | 19 | companion object 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/kafka/user/injection/AppComponent.kt: -------------------------------------------------------------------------------- 1 | package com.kafka.user.injection 2 | 3 | import androidx.lifecycle.ProcessLifecycleOwner 4 | import androidx.lifecycle.lifecycleScope 5 | import com.kafka.base.ApplicationScope 6 | import com.kafka.base.ProcessLifetime 7 | import com.kafka.shared.SharedApplicationComponent 8 | import kotlinx.coroutines.CoroutineScope 9 | import me.tatarka.inject.annotations.Component 10 | import me.tatarka.inject.annotations.Provides 11 | 12 | @Component 13 | @ApplicationScope 14 | interface AppComponent : SharedApplicationComponent { 15 | 16 | @Provides 17 | @ProcessLifetime 18 | fun provideLongLifetimeScope(): CoroutineScope { 19 | return ProcessLifecycleOwner.get().lifecycleScope 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_kafka_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 19 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipulyaara/Kafka/ed77950cfc72e22498df7cb4c0a475bc778297d6/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Kafka 3 | Cancel 4 | 5 | Play 6 | Library 7 | Search 8 | Home 9 | 10 | Update Available 11 | This version is outdated. Please update the app to continue using it. 12 | Update 13 | App update is available 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 |