gitextract_864mlkx4/ ├── .editorconfig ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── android.yml │ └── baseline-profile.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── skydoves/ │ │ │ └── gemini/ │ │ │ ├── GeminiApp.kt │ │ │ ├── MainActivity.kt │ │ │ ├── di/ │ │ │ │ ├── ChatEntryPoint.kt │ │ │ │ └── ChatModule.kt │ │ │ ├── initializer/ │ │ │ │ ├── StreamChatInitializer.kt │ │ │ │ └── StreamLogInitializer.kt │ │ │ ├── navigation/ │ │ │ │ ├── GeminiNavHost.kt │ │ │ │ └── GeminiNavigation.kt │ │ │ └── ui/ │ │ │ └── GeminiMain.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ ├── ic_launcher_background.xml │ │ │ └── ic_launcher_foreground.xml │ │ ├── layout/ │ │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── values-night/ │ │ │ └── themes.xml │ │ └── xml/ │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── release/ │ └── generated/ │ └── baselineProfiles/ │ ├── baseline-prof.txt │ └── startup-prof.txt ├── baseline-profile/ │ ├── .gitignore │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── java/ │ └── com/ │ └── skydoves/ │ └── gemini/ │ └── baselineprofile/ │ └── BaselineProfileGenerator.kt ├── build-logic/ │ ├── convention/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ ├── AndroidApplicationComposeConventionPlugin.kt │ │ ├── AndroidApplicationConventionPlugin.kt │ │ ├── AndroidFeatureConventionPlugin.kt │ │ ├── AndroidHiltConventionPlugin.kt │ │ ├── AndroidLibraryComposeConventionPlugin.kt │ │ ├── AndroidLibraryConventionPlugin.kt │ │ ├── SpotlessConventionPlugin.kt │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ ├── AndroidCompose.kt │ │ └── KotlinAndroid.kt │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ └── settings.gradle.kts ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ └── Configurations.kt ├── core/ │ ├── data/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── core/ │ │ └── data/ │ │ ├── chat/ │ │ │ └── ChatModels.kt │ │ ├── coroutines/ │ │ │ ├── Flow.kt │ │ │ └── WhileSubscribedOrRetained.kt │ │ ├── di/ │ │ │ └── DataModule.kt │ │ ├── repository/ │ │ │ ├── ChannelRepository.kt │ │ │ ├── ChannelRepositoryImpl.kt │ │ │ ├── ChatRepository.kt │ │ │ └── ChatRepositoryImpl.kt │ │ └── utils/ │ │ └── Strings.kt │ ├── database/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── schemas/ │ │ │ └── com.skydoves.gemini.core.database.GeminiDatabase/ │ │ │ └── 1.json │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── core/ │ │ └── database/ │ │ ├── GeminiChannelEntity.kt │ │ ├── GeminiDao.kt │ │ ├── GeminiDatabase.kt │ │ ├── GeminiModelConverter.kt │ │ └── di/ │ │ └── DatabaseModule.kt │ ├── datastore/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── core/ │ │ └── datastore/ │ │ ├── DataStore.kt │ │ ├── PreferenceDataStore.kt │ │ └── di/ │ │ └── DataStoreModule.kt │ ├── designsystem/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── skydoves/ │ │ │ └── gemini/ │ │ │ └── core/ │ │ │ └── designsystem/ │ │ │ ├── chat/ │ │ │ │ └── GeminiReactionFactory.kt │ │ │ ├── component/ │ │ │ │ ├── Background.kt │ │ │ │ ├── GeminiSmallTopBar.kt │ │ │ │ └── LoadingIndicator.kt │ │ │ ├── composition/ │ │ │ │ └── LocalOnFinishDispatcher.kt │ │ │ └── theme/ │ │ │ ├── Background.kt │ │ │ ├── Color.kt │ │ │ └── Theme.kt │ │ └── res/ │ │ └── values/ │ │ └── strings.xml │ ├── model/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── core/ │ │ └── model/ │ │ ├── GeminiChannel.kt │ │ └── GeminiModel.kt │ ├── navigation/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── core/ │ │ └── navigation/ │ │ ├── GeminiComposeNavigator.kt │ │ ├── GeminiScreens.kt │ │ ├── NavigationCommand.kt │ │ ├── Navigator.kt │ │ └── di/ │ │ └── NavigationModule.kt │ └── network/ │ ├── .gitignore │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── kotlin/ │ └── com/ │ └── skydoves/ │ └── gemini/ │ └── core/ │ └── network/ │ ├── Dispatchers.kt │ ├── di/ │ │ ├── DispatchersModule.kt │ │ └── NetworkModule.kt │ └── service/ │ └── ChannelService.kt ├── feature/ │ ├── channels/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── com/ │ │ └── skydoves/ │ │ └── gemini/ │ │ └── feature/ │ │ └── channels/ │ │ ├── ChannelViewModel.kt │ │ ├── GeminiChannels.kt │ │ └── RememberFloatingBalloon.kt │ └── chat/ │ ├── .gitignore │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ └── kotlin/ │ └── com/ │ └── skydoves/ │ └── gemini/ │ └── feature/ │ └── chat/ │ ├── ChatViewModel.kt │ ├── GeminiChat.kt │ └── extension/ │ └── GeminiExtension.kt ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── secrets.defaults.properties ├── settings.gradle.kts └── spotless/ ├── copyright.kt ├── copyright.kts ├── copyright.xml └── spotless.gradle