From 48fd211c8485ffe1a318349b90d161abb302a2b0 Mon Sep 17 00:00:00 2001 From: jolandaverhoef Date: Mon, 20 Jul 2026 12:27:37 +0100 Subject: [PATCH 1/4] Reorganize repository: Move AI Sample Catalog into ai-sample-catalog/ subdirectory --- .github/workflows/build-and-test.yml | 9 +- .gitignore | 13 ++- README.md | 91 ++++-------------- ai-sample-catalog/.gitignore | 7 ++ .../.google}/packaging.yaml | 0 ai-sample-catalog/README.md | 84 ++++++++++++++++ .../android_architecture.md | 0 {app => ai-sample-catalog/app}/.gitignore | 0 .../app}/build.gradle.kts | 0 .../app}/google-services.json | 0 .../app}/proguard-rules.pro | 0 .../app}/src/main/AndroidManifest.xml | 0 .../android/ai/catalog/CatalogApplication.kt | 0 .../com/android/ai/catalog/MainActivity.kt | 0 .../ai/catalog/domain/SampleCatalog.kt | 4 +- .../com/android/ai/catalog/ui/CatalogApp.kt | 0 .../android/ai/catalog/ui/CatalogRowCard.kt | 0 .../android/ai/catalog/ui/CatalogWideCard.kt | 0 .../main/res/drawable-hdpi/img_bg_landing.png | Bin .../res/drawable-hdpi/img_keyart_chatbot.png | Bin .../res/drawable-hdpi/img_keyart_imagen.png | Bin .../res/drawable-hdpi/img_keyart_img_desc.png | Bin .../drawable-hdpi/img_keyart_magic_selfie.png | Bin .../res/drawable-hdpi/img_keyart_metadata.png | Bin .../drawable-hdpi/img_keyart_multimodal.png | Bin .../res/drawable-hdpi/img_keyart_summary.png | Bin .../res/drawable-hdpi/img_keyart_text.png | Bin .../res/drawable-hdpi/img_keyart_todo.png | Bin .../img_keyart_video_summary.png | Bin .../main/res/drawable-mdpi/img_bg_landing.png | Bin .../res/drawable-mdpi/img_keyart_chatbot.png | Bin .../res/drawable-mdpi/img_keyart_imagen.png | Bin .../res/drawable-mdpi/img_keyart_img_desc.png | Bin .../drawable-mdpi/img_keyart_magic_selfie.png | Bin .../res/drawable-mdpi/img_keyart_metadata.png | Bin .../drawable-mdpi/img_keyart_multimodal.png | Bin .../res/drawable-mdpi/img_keyart_summary.png | Bin .../res/drawable-mdpi/img_keyart_text.png | Bin .../res/drawable-mdpi/img_keyart_todo.png | Bin .../img_keyart_video_summary.png | Bin .../res/drawable-xhdpi/img_bg_landing.png | Bin .../res/drawable-xhdpi/img_keyart_chatbot.png | 0 .../res/drawable-xhdpi/img_keyart_imagen.png | 0 .../drawable-xhdpi/img_keyart_img_desc.png | 0 .../img_keyart_magic_selfie.png | 0 .../drawable-xhdpi/img_keyart_metadata.png | 0 .../drawable-xhdpi/img_keyart_multimodal.png | 0 .../res/drawable-xhdpi/img_keyart_summary.png | 0 .../res/drawable-xhdpi/img_keyart_text.png | 0 .../res/drawable-xhdpi/img_keyart_todo.png | 0 .../img_keyart_video_summary.png | 0 .../res/drawable-xxhdpi/img_bg_landing.png | Bin .../drawable-xxhdpi/img_keyart_chatbot.png | Bin .../res/drawable-xxhdpi/img_keyart_imagen.png | Bin .../drawable-xxhdpi/img_keyart_img_desc.png | Bin .../img_keyart_magic_selfie.png | Bin .../drawable-xxhdpi/img_keyart_metadata.png | Bin .../drawable-xxhdpi/img_keyart_multimodal.png | Bin .../drawable-xxhdpi/img_keyart_summary.png | Bin .../res/drawable-xxhdpi/img_keyart_text.png | Bin .../res/drawable-xxhdpi/img_keyart_todo.png | Bin .../img_keyart_video_summary.png | Bin .../res/drawable-xxxhdpi/img_bg_landing.png | Bin .../drawable-xxxhdpi/img_keyart_chatbot.png | Bin .../drawable-xxxhdpi/img_keyart_imagen.png | Bin .../drawable-xxxhdpi/img_keyart_img_desc.png | Bin .../img_keyart_magic_selfie.png | Bin .../drawable-xxxhdpi/img_keyart_metadata.png | Bin .../img_keyart_multimodal.png | Bin .../drawable-xxxhdpi/img_keyart_summary.png | Bin .../res/drawable-xxxhdpi/img_keyart_text.png | Bin .../res/drawable-xxxhdpi/img_keyart_todo.png | Bin .../img_keyart_video_summary.png | Bin .../app}/src/main/res/drawable/bg.png | Bin .../src/main/res/drawable/spark_android.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app}/src/main/res/values/strings.xml | 0 .../app}/src/main/res/values/themes.xml | 0 .../app}/src/main/res/xml/backup_rules.xml | 0 .../main/res/xml/data_extraction_rules.xml | 0 .../app}/src/main/res/xml/provider_paths.xml | 0 .../build.gradle.kts | 0 .../gradle.properties | 0 .../gradle}/libs.versions.toml | 0 .../gradle}/wrapper/gradle-wrapper.jar | Bin .../gradle}/wrapper/gradle-wrapper.properties | 0 gradlew => ai-sample-catalog/gradlew | 0 gradlew.bat => ai-sample-catalog/gradlew.bat | 0 .../samples}/gemini-chatbot/.gitignore | 0 .../samples}/gemini-chatbot/README.md | 0 .../samples}/gemini-chatbot/build.gradle.kts | 0 .../gemini-chatbot/consumer-rules.pro | 0 .../gemini-chatbot/gemini_chatbot.png | Bin .../gemini-chatbot/proguard-rules.pro | 0 .../geminichatbot/GeminiChatbotScreen.kt | 0 .../geminichatbot/GeminiChatbotViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../samples}/gemini-hybrid/.gitignore | 0 .../samples}/gemini-hybrid/README.md | 0 .../samples}/gemini-hybrid/build.gradle.kts | 0 .../samples}/gemini-hybrid/consumer-rules.pro | 0 .../samples}/gemini-hybrid/gemini_hybrid.png | Bin .../samples}/gemini-hybrid/proguard-rules.pro | 0 .../geminihybrid/GeminiHybridScreen.kt | 8 +- .../geminihybrid/GeminiHybridViewModel.kt | 46 ++++----- .../src/main/res/values/strings.xml | 0 .../samples}/gemini-image-chat/.gitignore | 0 .../samples}/gemini-image-chat/README.md | 0 .../gemini-image-chat/android_nano_banana.png | Bin .../gemini-image-chat/build.gradle.kts | 0 .../gemini-image-chat/consumer-rules.pro | 0 .../gemini-image-chat/proguard-rules.pro | 0 .../geminiimagechat/GeminiImageChatScreen.kt | 0 .../GeminiImageChatViewModel.kt | 0 .../android/ai/samples/util/BitmapUtils.kt | 0 .../src/main/res/values/strings.xml | 0 .../samples}/gemini-live-todo/.gitignore | 0 .../samples}/gemini-live-todo/README.md | 0 .../gemini-live-todo/build.gradle.kts | 0 .../gemini-live-todo/consumer-rules.pro | 0 .../gemini-live-todo/gemini_live_todo.png | Bin .../gemini-live-todo/proguard-rules.pro | 0 .../ai/samples/geminilivetodo/data/Todo.kt | 1 - .../geminilivetodo/data/TodoRepository.kt | 2 +- .../samples/geminilivetodo/ui/TodoScreen.kt | 0 .../geminilivetodo/ui/TodoScreenUiState.kt | 0 .../geminilivetodo/ui/TodoScreenViewModel.kt | 5 +- .../src/main/res/values/strings.xml | 0 .../samples}/gemini-multimodal/.gitignore | 0 .../samples}/gemini-multimodal/README.md | 0 .../gemini-multimodal/build.gradle.kts | 0 .../gemini-multimodal/consumer-rules.pro | 0 .../gemini-multimodal/gemini_multimodal.png | Bin .../gemini-multimodal/proguard-rules.pro | 0 .../geminimultimodal/data/GeminiDataSource.kt | 0 .../ui/GeminiMultimodalScreen.kt | 0 .../ui/GeminiMultimodalUiState.kt | 0 .../ui/GeminiMultimodalViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../gemini-video-metadata-creation/README.md | 0 .../build.gradle.kts | 0 .../gemini_video_metadata.png | Bin .../proguard-rules.pro | 0 .../GenerateAccountTags.kt | 0 .../GenerateChapters.kt | 0 .../GenerateDescription.kt | 0 .../GenerateHashtags.kt | 0 .../GenerateLinks.kt | 0 .../GenerateThumbnails.kt | 0 .../player/ExtractHDRThumbnails.kt | 0 .../player/VideoPlayer.kt | 0 .../player/VideoSelectionDropdown.kt | 0 .../ui/MetadataButtonRow.kt | 0 .../ui/MetadataComponents.kt | 0 .../ui/VideoMetadataCreationScreen.kt | 0 .../util/VideoList.kt | 0 .../VideoMetadataCreationViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../gemini-video-summarization/.gitignore | 0 .../gemini-video-summarization/README.md | 0 .../build.gradle.kts | 0 .../gemini_video_summarization.png | Bin .../proguard-rules.pro | 0 .../ui/OutputTextDisplay.kt | 0 .../ui/SummarizationSheet.kt | 0 .../ui/TextToSpeechControls.kt | 0 .../ui/VideoSummarizationScreen.kt | 0 .../geminivideosummary/util/VideoList.kt | 0 .../viewmodel/VideoSummarizationViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../genai-image-description/.gitignore | 0 .../genai-image-description/README.md | 0 .../genai-image-description/build.gradle.kts | 0 .../consumer-rules.pro | 0 .../nano_image_description.png | Bin .../proguard-rules.pro | 0 .../GenAIImageDescriptionScreen.kt | 0 .../GenAIImageDescriptionViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../samples}/genai-summarization/.gitignore | 0 .../samples}/genai-summarization/README.md | 0 .../genai-summarization/build.gradle.kts | 0 .../genai-summarization/consumer-rules.pro | 0 .../nano_summarization.png | Bin .../genai-summarization/proguard-rules.pro | 0 .../GenAISummarizationScreen.kt | 0 .../GenAISummarizationViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../genai-writing-assistance/.gitignore | 0 .../genai-writing-assistance/README.md | 0 .../genai-writing-assistance/build.gradle.kts | 0 .../consumer-rules.pro | 0 .../genai-writing-assistance/nano_rewrite.png | Bin .../proguard-rules.pro | 0 .../GenAIWritingAssistanceScreen.kt | 0 .../GenAIWritingAssistanceViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../samples}/magic-selfie/.gitignore | 0 .../samples}/magic-selfie/README.md | 0 .../samples}/magic-selfie/build.gradle.kts | 0 .../samples}/magic-selfie/magic_selfie.png | Bin .../magicselfie/data/MagicSelfieRepository.kt | 2 +- .../ai/samples/magicselfie/ui/ImageUtils.kt | 0 .../magicselfie/ui/MagicSelfieScreen.kt | 0 .../magicselfie/ui/MagicSelfieUiState.kt | 0 .../magicselfie/ui/MagicSelfieViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../samples}/nanobanana/.gitignore | 0 .../samples}/nanobanana/README.md | 0 .../samples}/nanobanana/build.gradle.kts | 0 .../samples}/nanobanana/consumer-rules.pro | 0 .../samples}/nanobanana/proguard-rules.pro | 0 .../nanobanana/data/NanobananaDataSource.kt | 2 +- .../samples/nanobanana/ui/NanobananaScreen.kt | 0 .../nanobanana/ui/NanobananaUIState.kt | 0 .../nanobanana/ui/NanobananaViewModel.kt | 0 .../src/main/res/values/strings.xml | 0 .../settings.gradle.kts | 0 .../spotless}/copyright.kt | 0 .../ui-component}/.gitignore | 0 .../ui-component}/build.gradle.kts | 0 .../main/java/com/android/ai/theme/Color.kt | 0 .../main/java/com/android/ai/theme/Theme.kt | 0 .../main/java/com/android/ai/theme/Type.kt | 0 .../com/android/ai/uicomponent/Buttons.kt | 0 .../com/android/ai/uicomponent/ImageInput.kt | 0 .../android/ai/uicomponent/MarkdownText.kt | 0 .../com/android/ai/uicomponent/Message.kt | 0 .../ai/uicomponent/SampleDetailTopAppBar.kt | 0 .../android/ai/uicomponent/SeeCodeButton.kt | 0 .../ai/uicomponent/SelectionDropdown.kt | 0 .../java/com/android/ai/uicomponent/Tag.kt | 0 .../com/android/ai/uicomponent/TextInput.kt | 0 .../com/android/ai/uicomponent/VideoPlayer.kt | 0 .../src/main/res/drawable-hdpi/ic_add.png | Bin .../main/res/drawable-hdpi/ic_add_text.png | Bin .../src/main/res/drawable-hdpi/ic_ai_bg.png | Bin .../main/res/drawable-hdpi/ic_ai_chapters.png | Bin .../src/main/res/drawable-hdpi/ic_ai_edit.png | Bin .../main/res/drawable-hdpi/ic_ai_hashtags.png | Bin .../src/main/res/drawable-hdpi/ic_ai_img.png | Bin .../src/main/res/drawable-hdpi/ic_ai_mic.png | Bin .../src/main/res/drawable-hdpi/ic_ai_send.png | Bin .../main/res/drawable-hdpi/ic_ai_summary.png | Bin .../src/main/res/drawable-hdpi/ic_ai_tags.png | Bin .../src/main/res/drawable-hdpi/ic_ai_text.png | Bin .../src/main/res/drawable-hdpi/ic_code.png | Bin .../src/main/res/drawable-hdpi/ic_delete.png | Bin .../main/res/drawable-hdpi/ic_dev_guide.png | Bin .../src/main/res/drawable-hdpi/ic_redo.png | Bin .../res/drawable-hdpi/ic_video_forward_10.png | Bin .../main/res/drawable-hdpi/ic_video_pause.png | Bin .../main/res/drawable-hdpi/ic_video_play.png | Bin .../res/drawable-hdpi/ic_video_rewind_10.png | Bin .../main/res/drawable-hdpi/img_bg_general.png | Bin .../src/main/res/drawable-hdpi/img_fill.png | Bin .../src/main/res/drawable-mdpi/ic_add.png | Bin .../main/res/drawable-mdpi/ic_add_text.png | Bin .../src/main/res/drawable-mdpi/ic_ai_bg.png | Bin .../main/res/drawable-mdpi/ic_ai_chapters.png | Bin .../src/main/res/drawable-mdpi/ic_ai_edit.png | Bin .../main/res/drawable-mdpi/ic_ai_hashtags.png | Bin .../src/main/res/drawable-mdpi/ic_ai_img.png | Bin .../src/main/res/drawable-mdpi/ic_ai_mic.png | Bin .../src/main/res/drawable-mdpi/ic_ai_send.png | Bin .../main/res/drawable-mdpi/ic_ai_summary.png | Bin .../src/main/res/drawable-mdpi/ic_ai_tags.png | Bin .../src/main/res/drawable-mdpi/ic_ai_text.png | Bin .../src/main/res/drawable-mdpi/ic_code.png | Bin .../src/main/res/drawable-mdpi/ic_delete.png | Bin .../main/res/drawable-mdpi/ic_dev_guide.png | Bin .../src/main/res/drawable-mdpi/ic_redo.png | Bin .../res/drawable-mdpi/ic_video_forward_10.png | Bin .../main/res/drawable-mdpi/ic_video_pause.png | Bin .../main/res/drawable-mdpi/ic_video_play.png | Bin .../res/drawable-mdpi/ic_video_rewind_10.png | Bin .../main/res/drawable-mdpi/img_bg_general.png | Bin .../src/main/res/drawable-mdpi/img_fill.png | Bin .../src/main/res/drawable-xhdpi/ic_add.png | Bin .../main/res/drawable-xhdpi/ic_add_text.png | Bin .../src/main/res/drawable-xhdpi/ic_ai_bg.png | Bin .../res/drawable-xhdpi/ic_ai_chapters.png | Bin .../main/res/drawable-xhdpi/ic_ai_edit.png | Bin .../res/drawable-xhdpi/ic_ai_hashtags.png | Bin .../src/main/res/drawable-xhdpi/ic_ai_img.png | Bin .../src/main/res/drawable-xhdpi/ic_ai_mic.png | Bin .../main/res/drawable-xhdpi/ic_ai_send.png | Bin .../main/res/drawable-xhdpi/ic_ai_summary.png | Bin .../main/res/drawable-xhdpi/ic_ai_tags.png | Bin .../main/res/drawable-xhdpi/ic_ai_text.png | Bin .../src/main/res/drawable-xhdpi/ic_code.png | Bin .../src/main/res/drawable-xhdpi/ic_delete.png | Bin .../main/res/drawable-xhdpi/ic_dev_guide.png | Bin .../src/main/res/drawable-xhdpi/ic_redo.png | Bin .../drawable-xhdpi/ic_video_forward_10.png | Bin .../res/drawable-xhdpi/ic_video_pause.png | Bin .../main/res/drawable-xhdpi/ic_video_play.png | Bin .../res/drawable-xhdpi/ic_video_rewind_10.png | Bin .../res/drawable-xhdpi/img_bg_general.png | Bin .../src/main/res/drawable-xhdpi/img_fill.png | Bin .../src/main/res/drawable-xxhdpi/ic_add.png | Bin .../main/res/drawable-xxhdpi/ic_add_text.png | Bin .../src/main/res/drawable-xxhdpi/ic_ai_bg.png | Bin .../res/drawable-xxhdpi/ic_ai_chapters.png | Bin .../main/res/drawable-xxhdpi/ic_ai_edit.png | Bin .../res/drawable-xxhdpi/ic_ai_hashtags.png | Bin .../main/res/drawable-xxhdpi/ic_ai_img.png | Bin .../main/res/drawable-xxhdpi/ic_ai_mic.png | Bin .../main/res/drawable-xxhdpi/ic_ai_send.png | Bin .../res/drawable-xxhdpi/ic_ai_summary.png | Bin .../main/res/drawable-xxhdpi/ic_ai_tags.png | Bin .../main/res/drawable-xxhdpi/ic_ai_text.png | Bin .../src/main/res/drawable-xxhdpi/ic_code.png | Bin .../main/res/drawable-xxhdpi/ic_delete.png | Bin .../main/res/drawable-xxhdpi/ic_dev_guide.png | Bin .../src/main/res/drawable-xxhdpi/ic_redo.png | Bin .../drawable-xxhdpi/ic_video_forward_10.png | Bin .../res/drawable-xxhdpi/ic_video_pause.png | Bin .../res/drawable-xxhdpi/ic_video_play.png | Bin .../drawable-xxhdpi/ic_video_rewind_10.png | Bin .../res/drawable-xxhdpi/img_bg_general.png | Bin .../src/main/res/drawable-xxhdpi/img_fill.png | Bin .../src/main/res/drawable-xxxhdpi/ic_add.png | Bin .../main/res/drawable-xxxhdpi/ic_add_text.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_bg.png | Bin .../res/drawable-xxxhdpi/ic_ai_chapters.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_edit.png | Bin .../res/drawable-xxxhdpi/ic_ai_hashtags.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_img.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_mic.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_send.png | Bin .../res/drawable-xxxhdpi/ic_ai_summary.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_tags.png | Bin .../main/res/drawable-xxxhdpi/ic_ai_text.png | Bin .../src/main/res/drawable-xxxhdpi/ic_code.png | Bin .../main/res/drawable-xxxhdpi/ic_delete.png | Bin .../res/drawable-xxxhdpi/ic_dev_guide.png | Bin .../src/main/res/drawable-xxxhdpi/ic_redo.png | Bin .../drawable-xxxhdpi/ic_video_forward_10.png | Bin .../res/drawable-xxxhdpi/ic_video_pause.png | Bin .../res/drawable-xxxhdpi/ic_video_play.png | Bin .../drawable-xxxhdpi/ic_video_rewind_10.png | Bin .../res/drawable-xxxhdpi/img_bg_general.png | Bin .../main/res/drawable-xxxhdpi/img_fill.png | Bin .../src/main/res/drawable/bg.png | Bin .../src/main/res/drawable/ic_spark.xml | 0 .../src/main/res/values-v23/font_certs.xml | 0 .../src/main/res/values/strings.xml | 0 352 files changed, 156 insertions(+), 118 deletions(-) create mode 100644 ai-sample-catalog/.gitignore rename {.google => ai-sample-catalog/.google}/packaging.yaml (100%) create mode 100644 ai-sample-catalog/README.md rename android_architecture.md => ai-sample-catalog/android_architecture.md (100%) rename {app => ai-sample-catalog/app}/.gitignore (100%) rename {app => ai-sample-catalog/app}/build.gradle.kts (100%) rename {app => ai-sample-catalog/app}/google-services.json (100%) rename {app => ai-sample-catalog/app}/proguard-rules.pro (100%) rename {app => ai-sample-catalog/app}/src/main/AndroidManifest.xml (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/CatalogApplication.kt (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/MainActivity.kt (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/ui/CatalogApp.kt (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/ui/CatalogRowCard.kt (100%) rename {app => ai-sample-catalog/app}/src/main/java/com/android/ai/catalog/ui/CatalogWideCard.kt (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_bg_landing.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_chatbot.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_imagen.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_img_desc.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_magic_selfie.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_metadata.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_multimodal.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_text.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_todo.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-hdpi/img_keyart_video_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_bg_landing.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_chatbot.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_imagen.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_img_desc.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_magic_selfie.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_metadata.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_multimodal.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_text.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_todo.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-mdpi/img_keyart_video_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_bg_landing.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_chatbot.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_imagen.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_img_desc.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_magic_selfie.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_metadata.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_multimodal.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_text.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_todo.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xhdpi/img_keyart_video_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_bg_landing.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_chatbot.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_imagen.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_img_desc.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_magic_selfie.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_metadata.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_multimodal.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_text.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_todo.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxhdpi/img_keyart_video_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_bg_landing.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_chatbot.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_imagen.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_img_desc.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_magic_selfie.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_metadata.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_multimodal.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_text.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_todo.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable-xxxhdpi/img_keyart_video_summary.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable/bg.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/drawable/spark_android.xml (100%) rename {app => ai-sample-catalog/app}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app => ai-sample-catalog/app}/src/main/res/values/strings.xml (100%) rename {app => ai-sample-catalog/app}/src/main/res/values/themes.xml (100%) rename {app => ai-sample-catalog/app}/src/main/res/xml/backup_rules.xml (100%) rename {app => ai-sample-catalog/app}/src/main/res/xml/data_extraction_rules.xml (100%) rename {app => ai-sample-catalog/app}/src/main/res/xml/provider_paths.xml (100%) rename build.gradle.kts => ai-sample-catalog/build.gradle.kts (100%) rename gradle.properties => ai-sample-catalog/gradle.properties (100%) rename {gradle => ai-sample-catalog/gradle}/libs.versions.toml (100%) rename {gradle => ai-sample-catalog/gradle}/wrapper/gradle-wrapper.jar (100%) rename {gradle => ai-sample-catalog/gradle}/wrapper/gradle-wrapper.properties (100%) rename gradlew => ai-sample-catalog/gradlew (100%) rename gradlew.bat => ai-sample-catalog/gradlew.bat (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/gemini_chatbot.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-chatbot/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/gemini_hybrid.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt (99%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt (93%) rename {samples => ai-sample-catalog/samples}/gemini-hybrid/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/android_nano_banana.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/src/main/java/com/android/ai/samples/util/BitmapUtils.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-image-chat/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/gemini_live_todo.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt (99%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt (97%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenUiState.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt (99%) rename {samples => ai-sample-catalog/samples}/gemini-live-todo/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/gemini_multimodal.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/data/GeminiDataSource.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalUiState.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-multimodal/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/gemini_video_metadata.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateAccountTags.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateChapters.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateDescription.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateHashtags.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateLinks.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateThumbnails.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/ExtractHDRThumbnails.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoPlayer.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoSelectionDropdown.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataButtonRow.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataComponents.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/VideoMetadataCreationScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/util/VideoList.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/viewmodel/VideoMetadataCreationViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-metadata-creation/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/README.md (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/gemini_video_summarization.png (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/OutputTextDisplay.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/SummarizationSheet.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/TextToSpeechControls.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/VideoSummarizationScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/util/VideoList.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/viewmodel/VideoSummarizationViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/gemini-video-summarization/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/README.md (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/nano_image_description.png (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-image-description/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/README.md (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/nano_summarization.png (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-summarization/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/README.md (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/nano_rewrite.png (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/genai-writing-assistance/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/README.md (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/magic_selfie.png (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt (99%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/ImageUtils.kt (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieUiState.kt (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/magic-selfie/src/main/res/values/strings.xml (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/.gitignore (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/README.md (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/build.gradle.kts (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/consumer-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/proguard-rules.pro (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt (99%) rename {samples => ai-sample-catalog/samples}/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaScreen.kt (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaUIState.kt (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaViewModel.kt (100%) rename {samples => ai-sample-catalog/samples}/nanobanana/src/main/res/values/strings.xml (100%) rename settings.gradle.kts => ai-sample-catalog/settings.gradle.kts (100%) rename {spotless => ai-sample-catalog/spotless}/copyright.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/.gitignore (100%) rename {ui-component => ai-sample-catalog/ui-component}/build.gradle.kts (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/theme/Color.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/theme/Theme.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/theme/Type.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/Buttons.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/ImageInput.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/MarkdownText.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/Message.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/SampleDetailTopAppBar.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/SeeCodeButton.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/SelectionDropdown.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/Tag.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/TextInput.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/java/com/android/ai/uicomponent/VideoPlayer.kt (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_add.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_add_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_chapters.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_edit.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_hashtags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_img.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_mic.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_send.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_summary.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_tags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_ai_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_code.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_delete.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_dev_guide.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_redo.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_video_forward_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_video_pause.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_video_play.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/ic_video_rewind_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/img_bg_general.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-hdpi/img_fill.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_add.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_add_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_chapters.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_edit.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_hashtags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_img.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_mic.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_send.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_summary.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_tags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_ai_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_code.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_delete.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_dev_guide.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_redo.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_video_forward_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_video_pause.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_video_play.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/ic_video_rewind_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/img_bg_general.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-mdpi/img_fill.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_add.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_add_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_chapters.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_edit.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_hashtags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_img.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_mic.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_send.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_summary.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_tags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_ai_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_code.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_delete.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_dev_guide.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_redo.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_video_forward_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_video_pause.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_video_play.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/ic_video_rewind_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/img_bg_general.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xhdpi/img_fill.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_add.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_add_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_chapters.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_edit.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_hashtags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_img.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_mic.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_send.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_summary.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_tags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_ai_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_code.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_delete.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_dev_guide.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_redo.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_video_forward_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_video_pause.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_video_play.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/ic_video_rewind_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/img_bg_general.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxhdpi/img_fill.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_add.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_add_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_chapters.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_edit.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_hashtags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_img.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_mic.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_send.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_summary.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_tags.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_ai_text.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_code.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_delete.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_dev_guide.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_redo.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_video_forward_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_video_pause.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_video_play.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/ic_video_rewind_10.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/img_bg_general.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable-xxxhdpi/img_fill.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable/bg.png (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/drawable/ic_spark.xml (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/values-v23/font_certs.xml (100%) rename {ui-component => ai-sample-catalog/ui-component}/src/main/res/values/strings.xml (100%) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 7374a015..8727678a 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -19,9 +19,13 @@ jobs: timeout-minutes: 60 permissions: contents: write # Needed for git-auto-commit-action + defaults: + run: + working-directory: ai-sample-catalog strategy: fail-fast: false + steps: - name: Checkout code uses: actions/checkout@v4 @@ -48,7 +52,7 @@ jobs: uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: 🤖 Apply Spotless formatting - file_pattern: '**/*.kt **/*.kts **/*.java **/*.xml' + file_pattern: '**/*.kt **/*.kts **/*.xml' - name: Build debug APK run: ./gradlew assembleDebug --no-configuration-cache @@ -119,6 +123,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew + working-directory: ai-sample-catalog - name: Build projects and run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 @@ -128,7 +133,7 @@ jobs: disable-animations: true disk-size: 6000M heap-size: 600M - script: ./gradlew connectedDebugAndroidTest + script: cd ai-sample-catalog && ./gradlew connectedDebugAndroidTest - name: Upload test reports diff --git a/.gitignore b/.gitignore index 02b5fd3d..c2a2915a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -/build -/.gradle -/.idea -/.kotlin -app/google-services.json -build -/local.properties +build/ +.gradle/ +.idea/ +.kotlin/ +**/local.properties +**/google-services.json .DS_Store diff --git a/README.md b/README.md index e0c035f2..55b5b9b3 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,31 @@ -# Android AI Sample Catalog +# Android AI Samples Repository -![Android AI Sample Catalog screenshots](https://developer.android.com/static/ai/assets/images/ai_catalog_screenshot_1440.png) +Welcome to the official repository for Android Artificial Intelligence (AI) sample applications and developer tools. This repository contains various self-contained samples and modules illustrating how to leverage Generative AI capabilities on Android, utilizing both on-device and cloud-based models. -This folder contains the Android AI Sample catalog, a stand alone application giving you access to -individual self-contained samples illustrating some of the Generative AI capabilities unlocked by -some of Google's models. +--- -> **Note:** These samples are intended to showcase specific AI capabilities in isolation, and they may use -> simplified code. They are demo not intended to be used as production-ready code. -> For best practices follow our documentation and check -> [Now In Android](https://github.com/android/nowinandroid) +## 📱 Repository Samples -> **Requires Firebase setup** the samples relying on Google Cloud models (Gemini Pro, Gemini Flash, etc...) -> require setting up a Firebase project and connecting the app to Firebase (read more [here](https://firebase.google.com/docs/ai-logic/get-started?platform=android&api=dev#set-up-firebase)). +The table below catalogs the samples and applications available in this repository: -> 🚧 **Work-in-Progress:** we are working on bringing more samples into the application. +| Sample App | Description | Directory | +| :--- | :--- | :--- | +| **Android AI Sample Catalog**

![Android AI Sample Catalog](https://developer.android.com/static/ai/assets/images/ai_catalog_screenshot_1440.png) | A standalone showcase application containing multiple standalone, self-contained samples demonstrating various Gemini integration capabilities (hybrid inference, chat, multimodal, summarization, writing assistance, etc.) on Android. | [ai-sample-catalog/](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog) | +| **Jetpacker (Coming Soon)** | A sample showing Jetpacker integration and AI-guided capabilities for Android development. | *To be added soon* | -## How to run +--- -1. Clone the repository -2. Open the whole project in Android Studio. -3. Set up a Firebase project and connect your app to Firebase by adding your Firebase configuration -file (`google-services.json`) to the `/app` directory. Read more in the [Firebase documentation](https://firebase.google.com/docs/ai-logic/get-started?platform=android&api=dev#set-up-firebase) and the [Android-specific setup guide](https://firebase.google.com/docs/android/learn-more?authuser=0#google-services-plugin-and-file). -4. Sync & Run `app` configuration +## 🛠️ Getting Started -The app will open with the samples list screen that allows you to navigate throughout the different -available samples. +To explore or run a specific sample, navigate to its respective directory and follow the setup instructions inside its local `README.md`. -## Samples -Here is the list of samples you can find in the `/samples` folder: +For example, to run the Android AI Sample Catalog: +1. Open the [ai-sample-catalog/](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog) directory in Android Studio. +2. Follow the Firebase project configuration instructions detailed in the [ai-sample-catalog/README.md](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog/README.md). +3. Build and run the `app` configuration. -| Samples | | -|:----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Gemini Hybrid sample | ✨📱☁️ **Hybrid Inference**:
A sample demonstrating a hybrid approach to generative AI, utilizing both on-device (Gemini Nano via ML Kit) and cloud-based (Gemini via Firebase AI SDK) models. It showcases how to fallback to the cloud when on-device capabilities are unavailable.



**[> Browse code](samples/gemini-hybrid)**

| -| | | -| Gemini Image Chat sample | ✨🖼️🍌 **Gemini Image Chat**:
A chatbot app using the new [Gemini 3 Pro Image model](https://deepmind.google/models/gemini-image/pro/) (a.k.a. "Nano Banana Pro") enabling image generation and iterations via conversation with the Gemini model. Ask the model to generate an image and ask for tweaks in the chat.



**[> Browse code](samples/gemini-image-chat)**

| -| | | -| Gemini Chatbot sample | ✨🗣️ **Gemini Chatbot**:
A chatbot app using the Gemini Flash model. You can tweak the [system instructions](https://firebase.google.com/docs/ai-logic/system-instructions) in the model configuration to change the tone or the persona of the model.



**[> Browse code](samples/gemini-chatbot)**

| -| | | -| Gemini Multimodal sample | ✨📸 **Gemini Multimodal**:
A sample leveraging the [multimodal capabilities](https://developer.android.com/ai/gemini/developer-api#generate-text-from-media) of the Gemini Flash model (in this case text and image-to-text) to let you prompt the model with an image.



**[> Browse code](samples/gemini-multimodal)**

| -| | | -| Gemini Nano summarization sample | ✨📱📰 **On-device Summarization**:
A sample letting you summarize text on-device using Gemini Nano via the [GenAI Summarization API](https://developers.google.com/ml-kit/genai/summarization/android).



**[> Browse code](samples/genai-summarization)**

| -| | | -| Gemini Nano Image description | ✨📱🔍 **On-device Image Description**:
A sample letting you generate image descriptions using Gemini Nano via the [GenAI Image Description API](https://developers.google.com/ml-kit/genai/image-description/android).



**[> Browse code](samples/genai-image-description)**

| -| | | -| Gemini Nano Rewrite | ✨📱🖋️ **On-device Writing Assistance**:
A sample letting you proofread and rewrite text using Gemini Nano via the [GenAI Rewriting API](https://developers.google.com/ml-kit/genai/rewriting/android).



**[> Browse code](samples/genai-writing-assistance)**

| -| | | -| Nanobanana sample | 🖼️🍌 **Nanobanana**:
A sample using [Gemini 3.1 Flash Image model](https://developer.android.com/ai/gemini) (a.k.a. \"Nano Banana\") to generate images of landscapes, objects and people in various artistic style.



**[> Browse code](samples/nanobanana)**

| -| | | -| Magic Selfie sample | 🖼️📸 **Magic Selfie**:
A sample using [ML Kit subject Segmentation SDK](https://developers.google.com/ml-kit/vision/subject-segmentation/android) to remove the background behind a person, and Nano Banana to generate new background.



**[> Browse code](samples/magic-selfie)**

| -| | | -| Gemini Video Summarization sample | ✨🎥 **Gemini Video Summarization**:
A sample using Gemini Flash to [summarize videos](https://firebase.google.com/docs/ai-logic/analyze-video?api=dev) leveraging the [large file support](https://firebase.google.com/docs/ai-logic/solutions/cloud-storage).



**[> Browse code](samples/gemini-video-summarization)**

| -| | | -| Gemini Video Metadata sample | ✨🎥 **Gemini Video Metadata Creation**:
A sample using Gemini Flash to generate thumbnails, descriptions, hashtags, account tags, chapters and links from a video. This sample leverages the ability to provide a [Youtube video link](https://firebase.google.com/docs/ai-logic/input-file-requirements?api=dev#provide-file-using-url) to the model context for inference.



**[> Browse code](samples/gemini-video-metadata-creation)**

| -| | | -| Gemini Live API to-do sample | ✨🗣️ **Gemini Live API To-do App**:
A to-do list app using the [Gemini Live API](https://developer.android.com/ai/gemini/live) to let the user interact with Gemini via voice to update the todo list.



**[> Browse code](samples/gemini-live-todo)**

| +--- -## Reporting issues +## 🤝 Contributions and Feedback -You can report [issues with the samples](https://github.com/android/ai-samples/issues) using -this repository. When doing so, make sure to specify which sample you are referring to. - -## Contributions - -We aren't open to contribution to this project at the moment. - -## License - -``` -Copyright 2023 The Android Open Source Project - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` +Please check the individual sample directories for guidelines on contribution, reporting issues, or licenses specific to those projects. diff --git a/ai-sample-catalog/.gitignore b/ai-sample-catalog/.gitignore new file mode 100644 index 00000000..943c290d --- /dev/null +++ b/ai-sample-catalog/.gitignore @@ -0,0 +1,7 @@ +build/ +.gradle/ +.idea/ +.kotlin/ +app/google-services.json +local.properties +.DS_Store diff --git a/.google/packaging.yaml b/ai-sample-catalog/.google/packaging.yaml similarity index 100% rename from .google/packaging.yaml rename to ai-sample-catalog/.google/packaging.yaml diff --git a/ai-sample-catalog/README.md b/ai-sample-catalog/README.md new file mode 100644 index 00000000..e0c035f2 --- /dev/null +++ b/ai-sample-catalog/README.md @@ -0,0 +1,84 @@ +# Android AI Sample Catalog + +![Android AI Sample Catalog screenshots](https://developer.android.com/static/ai/assets/images/ai_catalog_screenshot_1440.png) + +This folder contains the Android AI Sample catalog, a stand alone application giving you access to +individual self-contained samples illustrating some of the Generative AI capabilities unlocked by +some of Google's models. + +> **Note:** These samples are intended to showcase specific AI capabilities in isolation, and they may use +> simplified code. They are demo not intended to be used as production-ready code. +> For best practices follow our documentation and check +> [Now In Android](https://github.com/android/nowinandroid) + +> **Requires Firebase setup** the samples relying on Google Cloud models (Gemini Pro, Gemini Flash, etc...) +> require setting up a Firebase project and connecting the app to Firebase (read more [here](https://firebase.google.com/docs/ai-logic/get-started?platform=android&api=dev#set-up-firebase)). + +> 🚧 **Work-in-Progress:** we are working on bringing more samples into the application. + +## How to run + +1. Clone the repository +2. Open the whole project in Android Studio. +3. Set up a Firebase project and connect your app to Firebase by adding your Firebase configuration +file (`google-services.json`) to the `/app` directory. Read more in the [Firebase documentation](https://firebase.google.com/docs/ai-logic/get-started?platform=android&api=dev#set-up-firebase) and the [Android-specific setup guide](https://firebase.google.com/docs/android/learn-more?authuser=0#google-services-plugin-and-file). +4. Sync & Run `app` configuration + +The app will open with the samples list screen that allows you to navigate throughout the different +available samples. + +## Samples +Here is the list of samples you can find in the `/samples` folder: + +| Samples | | +|:----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Gemini Hybrid sample | ✨📱☁️ **Hybrid Inference**:
A sample demonstrating a hybrid approach to generative AI, utilizing both on-device (Gemini Nano via ML Kit) and cloud-based (Gemini via Firebase AI SDK) models. It showcases how to fallback to the cloud when on-device capabilities are unavailable.



**[> Browse code](samples/gemini-hybrid)**

| +| | | +| Gemini Image Chat sample | ✨🖼️🍌 **Gemini Image Chat**:
A chatbot app using the new [Gemini 3 Pro Image model](https://deepmind.google/models/gemini-image/pro/) (a.k.a. "Nano Banana Pro") enabling image generation and iterations via conversation with the Gemini model. Ask the model to generate an image and ask for tweaks in the chat.



**[> Browse code](samples/gemini-image-chat)**

| +| | | +| Gemini Chatbot sample | ✨🗣️ **Gemini Chatbot**:
A chatbot app using the Gemini Flash model. You can tweak the [system instructions](https://firebase.google.com/docs/ai-logic/system-instructions) in the model configuration to change the tone or the persona of the model.



**[> Browse code](samples/gemini-chatbot)**

| +| | | +| Gemini Multimodal sample | ✨📸 **Gemini Multimodal**:
A sample leveraging the [multimodal capabilities](https://developer.android.com/ai/gemini/developer-api#generate-text-from-media) of the Gemini Flash model (in this case text and image-to-text) to let you prompt the model with an image.



**[> Browse code](samples/gemini-multimodal)**

| +| | | +| Gemini Nano summarization sample | ✨📱📰 **On-device Summarization**:
A sample letting you summarize text on-device using Gemini Nano via the [GenAI Summarization API](https://developers.google.com/ml-kit/genai/summarization/android).



**[> Browse code](samples/genai-summarization)**

| +| | | +| Gemini Nano Image description | ✨📱🔍 **On-device Image Description**:
A sample letting you generate image descriptions using Gemini Nano via the [GenAI Image Description API](https://developers.google.com/ml-kit/genai/image-description/android).



**[> Browse code](samples/genai-image-description)**

| +| | | +| Gemini Nano Rewrite | ✨📱🖋️ **On-device Writing Assistance**:
A sample letting you proofread and rewrite text using Gemini Nano via the [GenAI Rewriting API](https://developers.google.com/ml-kit/genai/rewriting/android).



**[> Browse code](samples/genai-writing-assistance)**

| +| | | +| Nanobanana sample | 🖼️🍌 **Nanobanana**:
A sample using [Gemini 3.1 Flash Image model](https://developer.android.com/ai/gemini) (a.k.a. \"Nano Banana\") to generate images of landscapes, objects and people in various artistic style.



**[> Browse code](samples/nanobanana)**

| +| | | +| Magic Selfie sample | 🖼️📸 **Magic Selfie**:
A sample using [ML Kit subject Segmentation SDK](https://developers.google.com/ml-kit/vision/subject-segmentation/android) to remove the background behind a person, and Nano Banana to generate new background.



**[> Browse code](samples/magic-selfie)**

| +| | | +| Gemini Video Summarization sample | ✨🎥 **Gemini Video Summarization**:
A sample using Gemini Flash to [summarize videos](https://firebase.google.com/docs/ai-logic/analyze-video?api=dev) leveraging the [large file support](https://firebase.google.com/docs/ai-logic/solutions/cloud-storage).



**[> Browse code](samples/gemini-video-summarization)**

| +| | | +| Gemini Video Metadata sample | ✨🎥 **Gemini Video Metadata Creation**:
A sample using Gemini Flash to generate thumbnails, descriptions, hashtags, account tags, chapters and links from a video. This sample leverages the ability to provide a [Youtube video link](https://firebase.google.com/docs/ai-logic/input-file-requirements?api=dev#provide-file-using-url) to the model context for inference.



**[> Browse code](samples/gemini-video-metadata-creation)**

| +| | | +| Gemini Live API to-do sample | ✨🗣️ **Gemini Live API To-do App**:
A to-do list app using the [Gemini Live API](https://developer.android.com/ai/gemini/live) to let the user interact with Gemini via voice to update the todo list.



**[> Browse code](samples/gemini-live-todo)**

| + +## Reporting issues + +You can report [issues with the samples](https://github.com/android/ai-samples/issues) using +this repository. When doing so, make sure to specify which sample you are referring to. + +## Contributions + +We aren't open to contribution to this project at the moment. + +## License + +``` +Copyright 2023 The Android Open Source Project + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` diff --git a/android_architecture.md b/ai-sample-catalog/android_architecture.md similarity index 100% rename from android_architecture.md rename to ai-sample-catalog/android_architecture.md diff --git a/app/.gitignore b/ai-sample-catalog/app/.gitignore similarity index 100% rename from app/.gitignore rename to ai-sample-catalog/app/.gitignore diff --git a/app/build.gradle.kts b/ai-sample-catalog/app/build.gradle.kts similarity index 100% rename from app/build.gradle.kts rename to ai-sample-catalog/app/build.gradle.kts diff --git a/app/google-services.json b/ai-sample-catalog/app/google-services.json similarity index 100% rename from app/google-services.json rename to ai-sample-catalog/app/google-services.json diff --git a/app/proguard-rules.pro b/ai-sample-catalog/app/proguard-rules.pro similarity index 100% rename from app/proguard-rules.pro rename to ai-sample-catalog/app/proguard-rules.pro diff --git a/app/src/main/AndroidManifest.xml b/ai-sample-catalog/app/src/main/AndroidManifest.xml similarity index 100% rename from app/src/main/AndroidManifest.xml rename to ai-sample-catalog/app/src/main/AndroidManifest.xml diff --git a/app/src/main/java/com/android/ai/catalog/CatalogApplication.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/CatalogApplication.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/CatalogApplication.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/CatalogApplication.kt diff --git a/app/src/main/java/com/android/ai/catalog/MainActivity.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/MainActivity.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/MainActivity.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/MainActivity.kt diff --git a/app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt index 51b15282..ad0e9b4e 100644 --- a/app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt +++ b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/domain/SampleCatalog.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import com.android.ai.catalog.R import com.android.ai.samples.geminichatbot.GeminiChatbotScreen +import com.android.ai.samples.geminihybrid.GeminiHybridScreen import com.android.ai.samples.geminiimagechat.GeminiImageChatScreen import com.android.ai.samples.geminilivetodo.ui.TodoScreen import com.android.ai.samples.geminimultimodal.ui.GeminiMultimodalScreen @@ -31,9 +32,8 @@ import com.android.ai.samples.geminivideosummary.ui.VideoSummarizationScreen import com.android.ai.samples.genai_image_description.GenAIImageDescriptionScreen import com.android.ai.samples.genai_summarization.GenAISummarizationScreen import com.android.ai.samples.genai_writing_assistance.GenAIWritingAssistanceScreen -import com.android.ai.samples.geminihybrid.GeminiHybridScreen -import com.android.ai.samples.nanobanana.ui.NanobananaScreen import com.android.ai.samples.magicselfie.ui.MagicSelfieScreen +import com.android.ai.samples.nanobanana.ui.NanobananaScreen import com.android.ai.theme.extendedColorScheme import com.google.firebase.ai.type.PublicPreviewAPI diff --git a/app/src/main/java/com/android/ai/catalog/ui/CatalogApp.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogApp.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/ui/CatalogApp.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogApp.kt diff --git a/app/src/main/java/com/android/ai/catalog/ui/CatalogRowCard.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogRowCard.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/ui/CatalogRowCard.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogRowCard.kt diff --git a/app/src/main/java/com/android/ai/catalog/ui/CatalogWideCard.kt b/ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogWideCard.kt similarity index 100% rename from app/src/main/java/com/android/ai/catalog/ui/CatalogWideCard.kt rename to ai-sample-catalog/app/src/main/java/com/android/ai/catalog/ui/CatalogWideCard.kt diff --git a/app/src/main/res/drawable-hdpi/img_bg_landing.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_bg_landing.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_bg_landing.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_bg_landing.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_chatbot.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_chatbot.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_chatbot.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_chatbot.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_imagen.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_imagen.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_imagen.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_imagen.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_img_desc.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_img_desc.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_img_desc.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_img_desc.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_magic_selfie.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_magic_selfie.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_magic_selfie.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_magic_selfie.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_metadata.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_metadata.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_metadata.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_metadata.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_multimodal.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_multimodal.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_multimodal.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_multimodal.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_summary.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_summary.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_summary.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_text.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_text.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_text.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_text.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_todo.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_todo.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_todo.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_todo.png diff --git a/app/src/main/res/drawable-hdpi/img_keyart_video_summary.png b/ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_video_summary.png similarity index 100% rename from app/src/main/res/drawable-hdpi/img_keyart_video_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-hdpi/img_keyart_video_summary.png diff --git a/app/src/main/res/drawable-mdpi/img_bg_landing.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_bg_landing.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_bg_landing.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_bg_landing.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_chatbot.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_chatbot.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_chatbot.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_chatbot.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_imagen.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_imagen.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_imagen.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_imagen.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_img_desc.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_img_desc.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_img_desc.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_img_desc.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_magic_selfie.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_magic_selfie.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_magic_selfie.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_magic_selfie.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_metadata.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_metadata.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_metadata.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_metadata.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_multimodal.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_multimodal.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_multimodal.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_multimodal.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_summary.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_summary.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_summary.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_text.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_text.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_text.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_text.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_todo.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_todo.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_todo.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_todo.png diff --git a/app/src/main/res/drawable-mdpi/img_keyart_video_summary.png b/ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_video_summary.png similarity index 100% rename from app/src/main/res/drawable-mdpi/img_keyart_video_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-mdpi/img_keyart_video_summary.png diff --git a/app/src/main/res/drawable-xhdpi/img_bg_landing.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_bg_landing.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_bg_landing.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_bg_landing.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_chatbot.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_chatbot.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_chatbot.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_chatbot.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_imagen.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_imagen.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_imagen.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_imagen.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_img_desc.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_img_desc.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_img_desc.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_img_desc.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_magic_selfie.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_magic_selfie.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_magic_selfie.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_magic_selfie.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_metadata.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_metadata.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_metadata.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_metadata.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_multimodal.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_multimodal.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_multimodal.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_multimodal.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_summary.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_summary.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_text.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_text.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_text.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_text.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_todo.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_todo.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_todo.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_todo.png diff --git a/app/src/main/res/drawable-xhdpi/img_keyart_video_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_video_summary.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/img_keyart_video_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xhdpi/img_keyart_video_summary.png diff --git a/app/src/main/res/drawable-xxhdpi/img_bg_landing.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_bg_landing.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_bg_landing.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_bg_landing.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_chatbot.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_chatbot.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_chatbot.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_chatbot.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_imagen.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_imagen.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_imagen.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_imagen.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_img_desc.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_img_desc.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_img_desc.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_img_desc.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_magic_selfie.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_magic_selfie.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_magic_selfie.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_magic_selfie.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_metadata.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_metadata.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_metadata.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_metadata.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_multimodal.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_multimodal.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_multimodal.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_multimodal.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_summary.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_summary.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_text.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_text.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_text.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_text.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_todo.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_todo.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_todo.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_todo.png diff --git a/app/src/main/res/drawable-xxhdpi/img_keyart_video_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_video_summary.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/img_keyart_video_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xxhdpi/img_keyart_video_summary.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_bg_landing.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_bg_landing.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_bg_landing.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_bg_landing.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_chatbot.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_chatbot.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_chatbot.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_chatbot.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_imagen.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_imagen.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_imagen.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_imagen.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_img_desc.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_img_desc.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_img_desc.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_img_desc.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_magic_selfie.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_magic_selfie.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_magic_selfie.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_magic_selfie.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_metadata.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_metadata.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_metadata.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_metadata.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_multimodal.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_multimodal.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_multimodal.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_multimodal.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_summary.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_summary.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_text.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_text.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_text.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_text.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_todo.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_todo.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_todo.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_todo.png diff --git a/app/src/main/res/drawable-xxxhdpi/img_keyart_video_summary.png b/ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_video_summary.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/img_keyart_video_summary.png rename to ai-sample-catalog/app/src/main/res/drawable-xxxhdpi/img_keyart_video_summary.png diff --git a/app/src/main/res/drawable/bg.png b/ai-sample-catalog/app/src/main/res/drawable/bg.png similarity index 100% rename from app/src/main/res/drawable/bg.png rename to ai-sample-catalog/app/src/main/res/drawable/bg.png diff --git a/app/src/main/res/drawable/spark_android.xml b/ai-sample-catalog/app/src/main/res/drawable/spark_android.xml similarity index 100% rename from app/src/main/res/drawable/spark_android.xml rename to ai-sample-catalog/app/src/main/res/drawable/spark_android.xml diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/ai-sample-catalog/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-hdpi/ic_launcher.png rename to ai-sample-catalog/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/ai-sample-catalog/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher.png rename to ai-sample-catalog/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/ai-sample-catalog/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to ai-sample-catalog/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ai-sample-catalog/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to ai-sample-catalog/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ai-sample-catalog/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to ai-sample-catalog/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src/main/res/values/strings.xml b/ai-sample-catalog/app/src/main/res/values/strings.xml similarity index 100% rename from app/src/main/res/values/strings.xml rename to ai-sample-catalog/app/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/themes.xml b/ai-sample-catalog/app/src/main/res/values/themes.xml similarity index 100% rename from app/src/main/res/values/themes.xml rename to ai-sample-catalog/app/src/main/res/values/themes.xml diff --git a/app/src/main/res/xml/backup_rules.xml b/ai-sample-catalog/app/src/main/res/xml/backup_rules.xml similarity index 100% rename from app/src/main/res/xml/backup_rules.xml rename to ai-sample-catalog/app/src/main/res/xml/backup_rules.xml diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/ai-sample-catalog/app/src/main/res/xml/data_extraction_rules.xml similarity index 100% rename from app/src/main/res/xml/data_extraction_rules.xml rename to ai-sample-catalog/app/src/main/res/xml/data_extraction_rules.xml diff --git a/app/src/main/res/xml/provider_paths.xml b/ai-sample-catalog/app/src/main/res/xml/provider_paths.xml similarity index 100% rename from app/src/main/res/xml/provider_paths.xml rename to ai-sample-catalog/app/src/main/res/xml/provider_paths.xml diff --git a/build.gradle.kts b/ai-sample-catalog/build.gradle.kts similarity index 100% rename from build.gradle.kts rename to ai-sample-catalog/build.gradle.kts diff --git a/gradle.properties b/ai-sample-catalog/gradle.properties similarity index 100% rename from gradle.properties rename to ai-sample-catalog/gradle.properties diff --git a/gradle/libs.versions.toml b/ai-sample-catalog/gradle/libs.versions.toml similarity index 100% rename from gradle/libs.versions.toml rename to ai-sample-catalog/gradle/libs.versions.toml diff --git a/gradle/wrapper/gradle-wrapper.jar b/ai-sample-catalog/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from gradle/wrapper/gradle-wrapper.jar rename to ai-sample-catalog/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/ai-sample-catalog/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from gradle/wrapper/gradle-wrapper.properties rename to ai-sample-catalog/gradle/wrapper/gradle-wrapper.properties diff --git a/gradlew b/ai-sample-catalog/gradlew similarity index 100% rename from gradlew rename to ai-sample-catalog/gradlew diff --git a/gradlew.bat b/ai-sample-catalog/gradlew.bat similarity index 100% rename from gradlew.bat rename to ai-sample-catalog/gradlew.bat diff --git a/samples/gemini-chatbot/.gitignore b/ai-sample-catalog/samples/gemini-chatbot/.gitignore similarity index 100% rename from samples/gemini-chatbot/.gitignore rename to ai-sample-catalog/samples/gemini-chatbot/.gitignore diff --git a/samples/gemini-chatbot/README.md b/ai-sample-catalog/samples/gemini-chatbot/README.md similarity index 100% rename from samples/gemini-chatbot/README.md rename to ai-sample-catalog/samples/gemini-chatbot/README.md diff --git a/samples/gemini-chatbot/build.gradle.kts b/ai-sample-catalog/samples/gemini-chatbot/build.gradle.kts similarity index 100% rename from samples/gemini-chatbot/build.gradle.kts rename to ai-sample-catalog/samples/gemini-chatbot/build.gradle.kts diff --git a/samples/gemini-chatbot/consumer-rules.pro b/ai-sample-catalog/samples/gemini-chatbot/consumer-rules.pro similarity index 100% rename from samples/gemini-chatbot/consumer-rules.pro rename to ai-sample-catalog/samples/gemini-chatbot/consumer-rules.pro diff --git a/samples/gemini-chatbot/gemini_chatbot.png b/ai-sample-catalog/samples/gemini-chatbot/gemini_chatbot.png similarity index 100% rename from samples/gemini-chatbot/gemini_chatbot.png rename to ai-sample-catalog/samples/gemini-chatbot/gemini_chatbot.png diff --git a/samples/gemini-chatbot/proguard-rules.pro b/ai-sample-catalog/samples/gemini-chatbot/proguard-rules.pro similarity index 100% rename from samples/gemini-chatbot/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-chatbot/proguard-rules.pro diff --git a/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotScreen.kt b/ai-sample-catalog/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotScreen.kt similarity index 100% rename from samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotScreen.kt rename to ai-sample-catalog/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotScreen.kt diff --git a/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt b/ai-sample-catalog/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt similarity index 100% rename from samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt rename to ai-sample-catalog/samples/gemini-chatbot/src/main/java/com/android/ai/samples/geminichatbot/GeminiChatbotViewModel.kt diff --git a/samples/gemini-chatbot/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-chatbot/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-chatbot/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-chatbot/src/main/res/values/strings.xml diff --git a/samples/gemini-hybrid/.gitignore b/ai-sample-catalog/samples/gemini-hybrid/.gitignore similarity index 100% rename from samples/gemini-hybrid/.gitignore rename to ai-sample-catalog/samples/gemini-hybrid/.gitignore diff --git a/samples/gemini-hybrid/README.md b/ai-sample-catalog/samples/gemini-hybrid/README.md similarity index 100% rename from samples/gemini-hybrid/README.md rename to ai-sample-catalog/samples/gemini-hybrid/README.md diff --git a/samples/gemini-hybrid/build.gradle.kts b/ai-sample-catalog/samples/gemini-hybrid/build.gradle.kts similarity index 100% rename from samples/gemini-hybrid/build.gradle.kts rename to ai-sample-catalog/samples/gemini-hybrid/build.gradle.kts diff --git a/samples/gemini-hybrid/consumer-rules.pro b/ai-sample-catalog/samples/gemini-hybrid/consumer-rules.pro similarity index 100% rename from samples/gemini-hybrid/consumer-rules.pro rename to ai-sample-catalog/samples/gemini-hybrid/consumer-rules.pro diff --git a/samples/gemini-hybrid/gemini_hybrid.png b/ai-sample-catalog/samples/gemini-hybrid/gemini_hybrid.png similarity index 100% rename from samples/gemini-hybrid/gemini_hybrid.png rename to ai-sample-catalog/samples/gemini-hybrid/gemini_hybrid.png diff --git a/samples/gemini-hybrid/proguard-rules.pro b/ai-sample-catalog/samples/gemini-hybrid/proguard-rules.pro similarity index 100% rename from samples/gemini-hybrid/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-hybrid/proguard-rules.pro diff --git a/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt similarity index 99% rename from samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt rename to ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt index f465ca4f..d4ce57e4 100644 --- a/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt +++ b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt @@ -80,13 +80,12 @@ import com.google.firebase.ai.InferenceMode import com.google.firebase.ai.OnDeviceModelOption import com.google.firebase.ai.type.PublicPreviewAPI - @OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) @Composable fun GeminiHybridScreen(viewModel: GeminiHybridViewModel = hiltViewModel()) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - + val context = LocalContext.current val backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher @@ -167,7 +166,7 @@ fun GeminiHybridScreen(viewModel: GeminiHybridViewModel = hiltViewModel()) { onTranslate = { viewModel.translate( uiState.reviewText, - uiState.selectedLanguage + uiState.selectedLanguage, ) }, onReset = viewModel::reset, @@ -415,6 +414,7 @@ fun LanguageDropdown( fun InferenceModeDropdown( selectedMode: InferenceMode, onModeSelected: (InferenceMode) -> Unit, + modifier: Modifier = Modifier, ) { var expanded by remember { mutableStateOf(false) } val modes = listOf( @@ -425,7 +425,7 @@ fun InferenceModeDropdown( ) val selectedText = modes.find { it.first == selectedMode }?.second ?: "" - Box(modifier = Modifier.padding(start = 8.dp, top = 12.dp)) { + Box(modifier = modifier.padding(start = 8.dp, top = 12.dp)) { SplitButtonLayout( leadingButton = { SplitButtonDefaults.LeadingButton( diff --git a/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt similarity index 93% rename from samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt rename to ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt index 691f9eec..0498a669 100644 --- a/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt +++ b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridViewModel.kt @@ -22,9 +22,9 @@ import com.google.firebase.Firebase import com.google.firebase.ai.InferenceMode import com.google.firebase.ai.InferenceSource import com.google.firebase.ai.OnDeviceConfig -import com.google.firebase.ai.ai import com.google.firebase.ai.OnDeviceModelOption import com.google.firebase.ai.OnDeviceModelStatus +import com.google.firebase.ai.ai import com.google.firebase.ai.type.GenerativeBackend import com.google.firebase.ai.type.PublicPreviewAPI import dagger.hilt.android.lifecycle.HiltViewModel @@ -40,13 +40,13 @@ sealed interface GeminiStatus { data class Generating( val isCloud: Boolean, val partialOutput: String = "", - val isTranslation: Boolean = false + val isTranslation: Boolean = false, ) : GeminiStatus data class Success( val output: String, val isCloud: Boolean, - val isTranslation: Boolean = false + val isTranslation: Boolean = false, ) : GeminiStatus data class Error(val message: String) : GeminiStatus @@ -61,7 +61,7 @@ data class GeminiHybridUiState( val reviewText: String = "", val reviewInferenceStatus: Int? = null, val selectedLanguage: String = "Korean", - val status: GeminiStatus = GeminiStatus.Initial + val status: GeminiStatus = GeminiStatus.Initial, ) @PublicPreviewAPI @@ -82,8 +82,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { "gemini-2.5-flash-lite", onDeviceConfig = OnDeviceConfig( mode = InferenceMode.ONLY_ON_DEVICE, - modelOption = OnDeviceModelOption.PREVIEW - ) + modelOption = OnDeviceModelOption.PREVIEW, + ), ) val status = model.onDeviceExtension?.checkStatus() val isAvailable = status == OnDeviceModelStatus.AVAILABLE @@ -109,7 +109,7 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { "Korean" to R.string.gemini_hybrid_lang_korean, "Spanish" to R.string.gemini_hybrid_lang_spanish, "French" to R.string.gemini_hybrid_lang_french, - "German" to R.string.gemini_hybrid_lang_german + "German" to R.string.gemini_hybrid_lang_german, ) fun setInferenceMode(mode: InferenceMode) { @@ -150,8 +150,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { it.copy( status = GeminiStatus.Generating( isCloud = it.selectedMode == InferenceMode.ONLY_IN_CLOUD, - isTranslation = false - ) + isTranslation = false, + ), ) } try { @@ -165,8 +165,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { "gemini-2.5-flash-lite", onDeviceConfig = OnDeviceConfig( mode = _uiState.value.selectedMode, - modelOption = _uiState.value.selectedModelOption - ) + modelOption = _uiState.value.selectedModelOption, + ), ) model.generateContentStream(prompt).collect { chunk -> val isCloud = chunk.inferenceSource == InferenceSource.IN_CLOUD @@ -175,13 +175,13 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { val newStatus = if (currentStatus is GeminiStatus.Generating) { currentStatus.copy( isCloud = isCloud, - partialOutput = currentStatus.partialOutput + (chunk.text ?: "") + partialOutput = currentStatus.partialOutput + (chunk.text ?: ""), ) } else { GeminiStatus.Generating( isCloud = isCloud, partialOutput = chunk.text ?: "", - isTranslation = false + isTranslation = false, ) } state.copy(status = newStatus) @@ -201,7 +201,7 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { it.copy( reviewText = output, reviewInferenceStatus = inferenceStatusResId, - status = GeminiStatus.Success(output, finalStatus.isCloud, isTranslation = false) + status = GeminiStatus.Success(output, finalStatus.isCloud, isTranslation = false), ) } } @@ -225,8 +225,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { it.copy( status = GeminiStatus.Generating( isCloud = it.selectedMode == InferenceMode.ONLY_IN_CLOUD, - isTranslation = true - ) + isTranslation = true, + ), ) } try { @@ -238,8 +238,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { "gemini-2.5-flash-lite", onDeviceConfig = OnDeviceConfig( mode = _uiState.value.selectedMode, - modelOption = _uiState.value.selectedModelOption - ) + modelOption = _uiState.value.selectedModelOption, + ), ) model.generateContentStream(prompt).collect { chunk -> @@ -249,13 +249,13 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { val newStatus = if (currentStatus is GeminiStatus.Generating) { currentStatus.copy( isCloud = isCloud, - partialOutput = currentStatus.partialOutput + (chunk.text ?: "") + partialOutput = currentStatus.partialOutput + (chunk.text ?: ""), ) } else { GeminiStatus.Generating( isCloud = isCloud, partialOutput = chunk.text ?: "", - isTranslation = true + isTranslation = true, ) } state.copy(status = newStatus) @@ -270,8 +270,8 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { status = GeminiStatus.Success( finalStatus.partialOutput, finalStatus.isCloud, - isTranslation = true - ) + isTranslation = true, + ), ) } } @@ -286,7 +286,7 @@ class GeminiHybridViewModel @Inject constructor() : ViewModel() { fun reset() { _uiState.value = GeminiHybridUiState( - isPreviewModelAvailable = _uiState.value.isPreviewModelAvailable + isPreviewModelAvailable = _uiState.value.isPreviewModelAvailable, ) } } diff --git a/samples/gemini-hybrid/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-hybrid/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-hybrid/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-hybrid/src/main/res/values/strings.xml diff --git a/samples/gemini-image-chat/.gitignore b/ai-sample-catalog/samples/gemini-image-chat/.gitignore similarity index 100% rename from samples/gemini-image-chat/.gitignore rename to ai-sample-catalog/samples/gemini-image-chat/.gitignore diff --git a/samples/gemini-image-chat/README.md b/ai-sample-catalog/samples/gemini-image-chat/README.md similarity index 100% rename from samples/gemini-image-chat/README.md rename to ai-sample-catalog/samples/gemini-image-chat/README.md diff --git a/samples/gemini-image-chat/android_nano_banana.png b/ai-sample-catalog/samples/gemini-image-chat/android_nano_banana.png similarity index 100% rename from samples/gemini-image-chat/android_nano_banana.png rename to ai-sample-catalog/samples/gemini-image-chat/android_nano_banana.png diff --git a/samples/gemini-image-chat/build.gradle.kts b/ai-sample-catalog/samples/gemini-image-chat/build.gradle.kts similarity index 100% rename from samples/gemini-image-chat/build.gradle.kts rename to ai-sample-catalog/samples/gemini-image-chat/build.gradle.kts diff --git a/samples/gemini-image-chat/consumer-rules.pro b/ai-sample-catalog/samples/gemini-image-chat/consumer-rules.pro similarity index 100% rename from samples/gemini-image-chat/consumer-rules.pro rename to ai-sample-catalog/samples/gemini-image-chat/consumer-rules.pro diff --git a/samples/gemini-image-chat/proguard-rules.pro b/ai-sample-catalog/samples/gemini-image-chat/proguard-rules.pro similarity index 100% rename from samples/gemini-image-chat/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-image-chat/proguard-rules.pro diff --git a/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatScreen.kt b/ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatScreen.kt similarity index 100% rename from samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatScreen.kt rename to ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatScreen.kt diff --git a/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatViewModel.kt b/ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatViewModel.kt similarity index 100% rename from samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatViewModel.kt rename to ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/geminiimagechat/GeminiImageChatViewModel.kt diff --git a/samples/gemini-image-chat/src/main/java/com/android/ai/samples/util/BitmapUtils.kt b/ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/util/BitmapUtils.kt similarity index 100% rename from samples/gemini-image-chat/src/main/java/com/android/ai/samples/util/BitmapUtils.kt rename to ai-sample-catalog/samples/gemini-image-chat/src/main/java/com/android/ai/samples/util/BitmapUtils.kt diff --git a/samples/gemini-image-chat/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-image-chat/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-image-chat/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-image-chat/src/main/res/values/strings.xml diff --git a/samples/gemini-live-todo/.gitignore b/ai-sample-catalog/samples/gemini-live-todo/.gitignore similarity index 100% rename from samples/gemini-live-todo/.gitignore rename to ai-sample-catalog/samples/gemini-live-todo/.gitignore diff --git a/samples/gemini-live-todo/README.md b/ai-sample-catalog/samples/gemini-live-todo/README.md similarity index 100% rename from samples/gemini-live-todo/README.md rename to ai-sample-catalog/samples/gemini-live-todo/README.md diff --git a/samples/gemini-live-todo/build.gradle.kts b/ai-sample-catalog/samples/gemini-live-todo/build.gradle.kts similarity index 100% rename from samples/gemini-live-todo/build.gradle.kts rename to ai-sample-catalog/samples/gemini-live-todo/build.gradle.kts diff --git a/samples/gemini-live-todo/consumer-rules.pro b/ai-sample-catalog/samples/gemini-live-todo/consumer-rules.pro similarity index 100% rename from samples/gemini-live-todo/consumer-rules.pro rename to ai-sample-catalog/samples/gemini-live-todo/consumer-rules.pro diff --git a/samples/gemini-live-todo/gemini_live_todo.png b/ai-sample-catalog/samples/gemini-live-todo/gemini_live_todo.png similarity index 100% rename from samples/gemini-live-todo/gemini_live_todo.png rename to ai-sample-catalog/samples/gemini-live-todo/gemini_live_todo.png diff --git a/samples/gemini-live-todo/proguard-rules.pro b/ai-sample-catalog/samples/gemini-live-todo/proguard-rules.pro similarity index 100% rename from samples/gemini-live-todo/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-live-todo/proguard-rules.pro diff --git a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt similarity index 99% rename from samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt rename to ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt index 953ec7fc..755d72d5 100644 --- a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt +++ b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/Todo.kt @@ -17,7 +17,6 @@ package com.android.ai.samples.geminilivetodo.data import kotlin.random.Random - data class Todo( val id: Int = Random.nextInt(), val task: String, diff --git a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt similarity index 97% rename from samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt rename to ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt index 8729e1b6..160e9441 100644 --- a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt +++ b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/data/TodoRepository.kt @@ -41,7 +41,7 @@ class TodoRepository @Inject constructor() { fun getTodoList(): List = _todos.value - fun addTodo(taskDescription: String) : Int? { + fun addTodo(taskDescription: String): Int? { if (taskDescription.isNotBlank()) { val newTodo = Todo(task = taskDescription) _todos.update { currentList -> diff --git a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreen.kt b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreen.kt similarity index 100% rename from samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreen.kt rename to ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreen.kt diff --git a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenUiState.kt b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenUiState.kt similarity index 100% rename from samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenUiState.kt rename to ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenUiState.kt diff --git a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt similarity index 99% rename from samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt rename to ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt index 05dbd7ab..0fb1ddb1 100644 --- a/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt +++ b/ai-sample-catalog/samples/gemini-live-todo/src/main/java/com/android/ai/samples/geminilivetodo/ui/TodoScreenViewModel.kt @@ -52,7 +52,6 @@ import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.int import kotlinx.serialization.json.jsonPrimitive -import kotlinx.serialization.json.long @OptIn(PublicPreviewAPI::class) @HiltViewModel @@ -198,7 +197,7 @@ class TodoScreenViewModel @Inject constructor(private val todoRepository: TodoRe val taskDescription = functionCall.args["taskDescription"]!!.jsonPrimitive.content val id = todoRepository.addTodo(taskDescription) - if (id!=null) { + if (id != null) { val response = JsonObject( mapOf( "success" to JsonPrimitive(true), @@ -215,7 +214,6 @@ class TodoScreenViewModel @Inject constructor(private val todoRepository: TodoRe ) FunctionResponsePart(functionCall.name, response, functionCall.id) } - } "removeTodo" -> { try { @@ -237,7 +235,6 @@ class TodoScreenViewModel @Inject constructor(private val todoRepository: TodoRe ) FunctionResponsePart(functionCall.name, response, functionCall.id) } - } "toggleTodoStatus" -> { val taskId = functionCall.args["todoId"]!!.jsonPrimitive.int diff --git a/samples/gemini-live-todo/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-live-todo/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-live-todo/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-live-todo/src/main/res/values/strings.xml diff --git a/samples/gemini-multimodal/.gitignore b/ai-sample-catalog/samples/gemini-multimodal/.gitignore similarity index 100% rename from samples/gemini-multimodal/.gitignore rename to ai-sample-catalog/samples/gemini-multimodal/.gitignore diff --git a/samples/gemini-multimodal/README.md b/ai-sample-catalog/samples/gemini-multimodal/README.md similarity index 100% rename from samples/gemini-multimodal/README.md rename to ai-sample-catalog/samples/gemini-multimodal/README.md diff --git a/samples/gemini-multimodal/build.gradle.kts b/ai-sample-catalog/samples/gemini-multimodal/build.gradle.kts similarity index 100% rename from samples/gemini-multimodal/build.gradle.kts rename to ai-sample-catalog/samples/gemini-multimodal/build.gradle.kts diff --git a/samples/gemini-multimodal/consumer-rules.pro b/ai-sample-catalog/samples/gemini-multimodal/consumer-rules.pro similarity index 100% rename from samples/gemini-multimodal/consumer-rules.pro rename to ai-sample-catalog/samples/gemini-multimodal/consumer-rules.pro diff --git a/samples/gemini-multimodal/gemini_multimodal.png b/ai-sample-catalog/samples/gemini-multimodal/gemini_multimodal.png similarity index 100% rename from samples/gemini-multimodal/gemini_multimodal.png rename to ai-sample-catalog/samples/gemini-multimodal/gemini_multimodal.png diff --git a/samples/gemini-multimodal/proguard-rules.pro b/ai-sample-catalog/samples/gemini-multimodal/proguard-rules.pro similarity index 100% rename from samples/gemini-multimodal/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-multimodal/proguard-rules.pro diff --git a/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/data/GeminiDataSource.kt b/ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/data/GeminiDataSource.kt similarity index 100% rename from samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/data/GeminiDataSource.kt rename to ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/data/GeminiDataSource.kt diff --git a/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalScreen.kt b/ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalScreen.kt similarity index 100% rename from samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalScreen.kt rename to ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalScreen.kt diff --git a/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalUiState.kt b/ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalUiState.kt similarity index 100% rename from samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalUiState.kt rename to ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalUiState.kt diff --git a/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalViewModel.kt b/ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalViewModel.kt similarity index 100% rename from samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalViewModel.kt rename to ai-sample-catalog/samples/gemini-multimodal/src/main/java/com/android/ai/samples/geminimultimodal/ui/GeminiMultimodalViewModel.kt diff --git a/samples/gemini-multimodal/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-multimodal/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-multimodal/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-multimodal/src/main/res/values/strings.xml diff --git a/samples/gemini-video-metadata-creation/README.md b/ai-sample-catalog/samples/gemini-video-metadata-creation/README.md similarity index 100% rename from samples/gemini-video-metadata-creation/README.md rename to ai-sample-catalog/samples/gemini-video-metadata-creation/README.md diff --git a/samples/gemini-video-metadata-creation/build.gradle.kts b/ai-sample-catalog/samples/gemini-video-metadata-creation/build.gradle.kts similarity index 100% rename from samples/gemini-video-metadata-creation/build.gradle.kts rename to ai-sample-catalog/samples/gemini-video-metadata-creation/build.gradle.kts diff --git a/samples/gemini-video-metadata-creation/gemini_video_metadata.png b/ai-sample-catalog/samples/gemini-video-metadata-creation/gemini_video_metadata.png similarity index 100% rename from samples/gemini-video-metadata-creation/gemini_video_metadata.png rename to ai-sample-catalog/samples/gemini-video-metadata-creation/gemini_video_metadata.png diff --git a/samples/gemini-video-metadata-creation/proguard-rules.pro b/ai-sample-catalog/samples/gemini-video-metadata-creation/proguard-rules.pro similarity index 100% rename from samples/gemini-video-metadata-creation/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-video-metadata-creation/proguard-rules.pro diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateAccountTags.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateAccountTags.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateAccountTags.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateAccountTags.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateChapters.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateChapters.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateChapters.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateChapters.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateDescription.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateDescription.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateDescription.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateDescription.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateHashtags.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateHashtags.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateHashtags.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateHashtags.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateLinks.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateLinks.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateLinks.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateLinks.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateThumbnails.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateThumbnails.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateThumbnails.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/GenerateThumbnails.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/ExtractHDRThumbnails.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/ExtractHDRThumbnails.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/ExtractHDRThumbnails.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/ExtractHDRThumbnails.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoPlayer.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoPlayer.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoPlayer.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoPlayer.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoSelectionDropdown.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoSelectionDropdown.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoSelectionDropdown.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/player/VideoSelectionDropdown.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataButtonRow.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataButtonRow.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataButtonRow.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataButtonRow.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataComponents.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataComponents.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataComponents.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/MetadataComponents.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/VideoMetadataCreationScreen.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/VideoMetadataCreationScreen.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/VideoMetadataCreationScreen.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/ui/VideoMetadataCreationScreen.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/util/VideoList.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/util/VideoList.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/util/VideoList.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/util/VideoList.kt diff --git a/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/viewmodel/VideoMetadataCreationViewModel.kt b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/viewmodel/VideoMetadataCreationViewModel.kt similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/viewmodel/VideoMetadataCreationViewModel.kt rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/java/com/android/ai/samples/geminivideometadatacreation/viewmodel/VideoMetadataCreationViewModel.kt diff --git a/samples/gemini-video-metadata-creation/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-video-metadata-creation/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-video-metadata-creation/src/main/res/values/strings.xml diff --git a/samples/gemini-video-summarization/.gitignore b/ai-sample-catalog/samples/gemini-video-summarization/.gitignore similarity index 100% rename from samples/gemini-video-summarization/.gitignore rename to ai-sample-catalog/samples/gemini-video-summarization/.gitignore diff --git a/samples/gemini-video-summarization/README.md b/ai-sample-catalog/samples/gemini-video-summarization/README.md similarity index 100% rename from samples/gemini-video-summarization/README.md rename to ai-sample-catalog/samples/gemini-video-summarization/README.md diff --git a/samples/gemini-video-summarization/build.gradle.kts b/ai-sample-catalog/samples/gemini-video-summarization/build.gradle.kts similarity index 100% rename from samples/gemini-video-summarization/build.gradle.kts rename to ai-sample-catalog/samples/gemini-video-summarization/build.gradle.kts diff --git a/samples/gemini-video-summarization/gemini_video_summarization.png b/ai-sample-catalog/samples/gemini-video-summarization/gemini_video_summarization.png similarity index 100% rename from samples/gemini-video-summarization/gemini_video_summarization.png rename to ai-sample-catalog/samples/gemini-video-summarization/gemini_video_summarization.png diff --git a/samples/gemini-video-summarization/proguard-rules.pro b/ai-sample-catalog/samples/gemini-video-summarization/proguard-rules.pro similarity index 100% rename from samples/gemini-video-summarization/proguard-rules.pro rename to ai-sample-catalog/samples/gemini-video-summarization/proguard-rules.pro diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/OutputTextDisplay.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/OutputTextDisplay.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/OutputTextDisplay.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/OutputTextDisplay.kt diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/SummarizationSheet.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/SummarizationSheet.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/SummarizationSheet.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/SummarizationSheet.kt diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/TextToSpeechControls.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/TextToSpeechControls.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/TextToSpeechControls.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/TextToSpeechControls.kt diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/VideoSummarizationScreen.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/VideoSummarizationScreen.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/VideoSummarizationScreen.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/ui/VideoSummarizationScreen.kt diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/util/VideoList.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/util/VideoList.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/util/VideoList.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/util/VideoList.kt diff --git a/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/viewmodel/VideoSummarizationViewModel.kt b/ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/viewmodel/VideoSummarizationViewModel.kt similarity index 100% rename from samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/viewmodel/VideoSummarizationViewModel.kt rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/java/com/android/ai/samples/geminivideosummary/viewmodel/VideoSummarizationViewModel.kt diff --git a/samples/gemini-video-summarization/src/main/res/values/strings.xml b/ai-sample-catalog/samples/gemini-video-summarization/src/main/res/values/strings.xml similarity index 100% rename from samples/gemini-video-summarization/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/gemini-video-summarization/src/main/res/values/strings.xml diff --git a/samples/genai-image-description/.gitignore b/ai-sample-catalog/samples/genai-image-description/.gitignore similarity index 100% rename from samples/genai-image-description/.gitignore rename to ai-sample-catalog/samples/genai-image-description/.gitignore diff --git a/samples/genai-image-description/README.md b/ai-sample-catalog/samples/genai-image-description/README.md similarity index 100% rename from samples/genai-image-description/README.md rename to ai-sample-catalog/samples/genai-image-description/README.md diff --git a/samples/genai-image-description/build.gradle.kts b/ai-sample-catalog/samples/genai-image-description/build.gradle.kts similarity index 100% rename from samples/genai-image-description/build.gradle.kts rename to ai-sample-catalog/samples/genai-image-description/build.gradle.kts diff --git a/samples/genai-image-description/consumer-rules.pro b/ai-sample-catalog/samples/genai-image-description/consumer-rules.pro similarity index 100% rename from samples/genai-image-description/consumer-rules.pro rename to ai-sample-catalog/samples/genai-image-description/consumer-rules.pro diff --git a/samples/genai-image-description/nano_image_description.png b/ai-sample-catalog/samples/genai-image-description/nano_image_description.png similarity index 100% rename from samples/genai-image-description/nano_image_description.png rename to ai-sample-catalog/samples/genai-image-description/nano_image_description.png diff --git a/samples/genai-image-description/proguard-rules.pro b/ai-sample-catalog/samples/genai-image-description/proguard-rules.pro similarity index 100% rename from samples/genai-image-description/proguard-rules.pro rename to ai-sample-catalog/samples/genai-image-description/proguard-rules.pro diff --git a/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionScreen.kt b/ai-sample-catalog/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionScreen.kt similarity index 100% rename from samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionScreen.kt rename to ai-sample-catalog/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionScreen.kt diff --git a/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionViewModel.kt b/ai-sample-catalog/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionViewModel.kt similarity index 100% rename from samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionViewModel.kt rename to ai-sample-catalog/samples/genai-image-description/src/main/java/com/android/ai/samples/genai_image_description/GenAIImageDescriptionViewModel.kt diff --git a/samples/genai-image-description/src/main/res/values/strings.xml b/ai-sample-catalog/samples/genai-image-description/src/main/res/values/strings.xml similarity index 100% rename from samples/genai-image-description/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/genai-image-description/src/main/res/values/strings.xml diff --git a/samples/genai-summarization/.gitignore b/ai-sample-catalog/samples/genai-summarization/.gitignore similarity index 100% rename from samples/genai-summarization/.gitignore rename to ai-sample-catalog/samples/genai-summarization/.gitignore diff --git a/samples/genai-summarization/README.md b/ai-sample-catalog/samples/genai-summarization/README.md similarity index 100% rename from samples/genai-summarization/README.md rename to ai-sample-catalog/samples/genai-summarization/README.md diff --git a/samples/genai-summarization/build.gradle.kts b/ai-sample-catalog/samples/genai-summarization/build.gradle.kts similarity index 100% rename from samples/genai-summarization/build.gradle.kts rename to ai-sample-catalog/samples/genai-summarization/build.gradle.kts diff --git a/samples/genai-summarization/consumer-rules.pro b/ai-sample-catalog/samples/genai-summarization/consumer-rules.pro similarity index 100% rename from samples/genai-summarization/consumer-rules.pro rename to ai-sample-catalog/samples/genai-summarization/consumer-rules.pro diff --git a/samples/genai-summarization/nano_summarization.png b/ai-sample-catalog/samples/genai-summarization/nano_summarization.png similarity index 100% rename from samples/genai-summarization/nano_summarization.png rename to ai-sample-catalog/samples/genai-summarization/nano_summarization.png diff --git a/samples/genai-summarization/proguard-rules.pro b/ai-sample-catalog/samples/genai-summarization/proguard-rules.pro similarity index 100% rename from samples/genai-summarization/proguard-rules.pro rename to ai-sample-catalog/samples/genai-summarization/proguard-rules.pro diff --git a/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationScreen.kt b/ai-sample-catalog/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationScreen.kt similarity index 100% rename from samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationScreen.kt rename to ai-sample-catalog/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationScreen.kt diff --git a/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationViewModel.kt b/ai-sample-catalog/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationViewModel.kt similarity index 100% rename from samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationViewModel.kt rename to ai-sample-catalog/samples/genai-summarization/src/main/java/com/android/ai/samples/genai_summarization/GenAISummarizationViewModel.kt diff --git a/samples/genai-summarization/src/main/res/values/strings.xml b/ai-sample-catalog/samples/genai-summarization/src/main/res/values/strings.xml similarity index 100% rename from samples/genai-summarization/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/genai-summarization/src/main/res/values/strings.xml diff --git a/samples/genai-writing-assistance/.gitignore b/ai-sample-catalog/samples/genai-writing-assistance/.gitignore similarity index 100% rename from samples/genai-writing-assistance/.gitignore rename to ai-sample-catalog/samples/genai-writing-assistance/.gitignore diff --git a/samples/genai-writing-assistance/README.md b/ai-sample-catalog/samples/genai-writing-assistance/README.md similarity index 100% rename from samples/genai-writing-assistance/README.md rename to ai-sample-catalog/samples/genai-writing-assistance/README.md diff --git a/samples/genai-writing-assistance/build.gradle.kts b/ai-sample-catalog/samples/genai-writing-assistance/build.gradle.kts similarity index 100% rename from samples/genai-writing-assistance/build.gradle.kts rename to ai-sample-catalog/samples/genai-writing-assistance/build.gradle.kts diff --git a/samples/genai-writing-assistance/consumer-rules.pro b/ai-sample-catalog/samples/genai-writing-assistance/consumer-rules.pro similarity index 100% rename from samples/genai-writing-assistance/consumer-rules.pro rename to ai-sample-catalog/samples/genai-writing-assistance/consumer-rules.pro diff --git a/samples/genai-writing-assistance/nano_rewrite.png b/ai-sample-catalog/samples/genai-writing-assistance/nano_rewrite.png similarity index 100% rename from samples/genai-writing-assistance/nano_rewrite.png rename to ai-sample-catalog/samples/genai-writing-assistance/nano_rewrite.png diff --git a/samples/genai-writing-assistance/proguard-rules.pro b/ai-sample-catalog/samples/genai-writing-assistance/proguard-rules.pro similarity index 100% rename from samples/genai-writing-assistance/proguard-rules.pro rename to ai-sample-catalog/samples/genai-writing-assistance/proguard-rules.pro diff --git a/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceScreen.kt b/ai-sample-catalog/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceScreen.kt similarity index 100% rename from samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceScreen.kt rename to ai-sample-catalog/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceScreen.kt diff --git a/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceViewModel.kt b/ai-sample-catalog/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceViewModel.kt similarity index 100% rename from samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceViewModel.kt rename to ai-sample-catalog/samples/genai-writing-assistance/src/main/java/com/android/ai/samples/genai_writing_assistance/GenAIWritingAssistanceViewModel.kt diff --git a/samples/genai-writing-assistance/src/main/res/values/strings.xml b/ai-sample-catalog/samples/genai-writing-assistance/src/main/res/values/strings.xml similarity index 100% rename from samples/genai-writing-assistance/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/genai-writing-assistance/src/main/res/values/strings.xml diff --git a/samples/magic-selfie/.gitignore b/ai-sample-catalog/samples/magic-selfie/.gitignore similarity index 100% rename from samples/magic-selfie/.gitignore rename to ai-sample-catalog/samples/magic-selfie/.gitignore diff --git a/samples/magic-selfie/README.md b/ai-sample-catalog/samples/magic-selfie/README.md similarity index 100% rename from samples/magic-selfie/README.md rename to ai-sample-catalog/samples/magic-selfie/README.md diff --git a/samples/magic-selfie/build.gradle.kts b/ai-sample-catalog/samples/magic-selfie/build.gradle.kts similarity index 100% rename from samples/magic-selfie/build.gradle.kts rename to ai-sample-catalog/samples/magic-selfie/build.gradle.kts diff --git a/samples/magic-selfie/magic_selfie.png b/ai-sample-catalog/samples/magic-selfie/magic_selfie.png similarity index 100% rename from samples/magic-selfie/magic_selfie.png rename to ai-sample-catalog/samples/magic-selfie/magic_selfie.png diff --git a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt similarity index 99% rename from samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt rename to ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt index 19952fef..842edbd9 100644 --- a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt +++ b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/data/MagicSelfieRepository.kt @@ -33,7 +33,7 @@ class MagicSelfieRepository @Inject constructor() { modelName = "gemini-3.1-flash-image-preview", generationConfig = generationConfig { responseModalities = listOf(ResponseModality.TEXT, ResponseModality.IMAGE) - } + }, ) } diff --git a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/ImageUtils.kt b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/ImageUtils.kt similarity index 100% rename from samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/ImageUtils.kt rename to ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/ImageUtils.kt diff --git a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieScreen.kt b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieScreen.kt similarity index 100% rename from samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieScreen.kt rename to ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieScreen.kt diff --git a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieUiState.kt b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieUiState.kt similarity index 100% rename from samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieUiState.kt rename to ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieUiState.kt diff --git a/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieViewModel.kt b/ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieViewModel.kt similarity index 100% rename from samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieViewModel.kt rename to ai-sample-catalog/samples/magic-selfie/src/main/java/com/android/ai/samples/magicselfie/ui/MagicSelfieViewModel.kt diff --git a/samples/magic-selfie/src/main/res/values/strings.xml b/ai-sample-catalog/samples/magic-selfie/src/main/res/values/strings.xml similarity index 100% rename from samples/magic-selfie/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/magic-selfie/src/main/res/values/strings.xml diff --git a/samples/nanobanana/.gitignore b/ai-sample-catalog/samples/nanobanana/.gitignore similarity index 100% rename from samples/nanobanana/.gitignore rename to ai-sample-catalog/samples/nanobanana/.gitignore diff --git a/samples/nanobanana/README.md b/ai-sample-catalog/samples/nanobanana/README.md similarity index 100% rename from samples/nanobanana/README.md rename to ai-sample-catalog/samples/nanobanana/README.md diff --git a/samples/nanobanana/build.gradle.kts b/ai-sample-catalog/samples/nanobanana/build.gradle.kts similarity index 100% rename from samples/nanobanana/build.gradle.kts rename to ai-sample-catalog/samples/nanobanana/build.gradle.kts diff --git a/samples/nanobanana/consumer-rules.pro b/ai-sample-catalog/samples/nanobanana/consumer-rules.pro similarity index 100% rename from samples/nanobanana/consumer-rules.pro rename to ai-sample-catalog/samples/nanobanana/consumer-rules.pro diff --git a/samples/nanobanana/proguard-rules.pro b/ai-sample-catalog/samples/nanobanana/proguard-rules.pro similarity index 100% rename from samples/nanobanana/proguard-rules.pro rename to ai-sample-catalog/samples/nanobanana/proguard-rules.pro diff --git a/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt b/ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt similarity index 99% rename from samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt rename to ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt index 1408c6d3..5a0fda69 100644 --- a/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt +++ b/ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/data/NanobananaDataSource.kt @@ -32,7 +32,7 @@ class NanobananaDataSource @Inject constructor() { modelName = "gemini-3.1-flash-image-preview", generationConfig = generationConfig { responseModalities = listOf(ResponseModality.IMAGE) - } + }, ) } diff --git a/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaScreen.kt b/ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaScreen.kt similarity index 100% rename from samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaScreen.kt rename to ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaScreen.kt diff --git a/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaUIState.kt b/ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaUIState.kt similarity index 100% rename from samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaUIState.kt rename to ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaUIState.kt diff --git a/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaViewModel.kt b/ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaViewModel.kt similarity index 100% rename from samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaViewModel.kt rename to ai-sample-catalog/samples/nanobanana/src/main/java/com/android/ai/samples/nanobanana/ui/NanobananaViewModel.kt diff --git a/samples/nanobanana/src/main/res/values/strings.xml b/ai-sample-catalog/samples/nanobanana/src/main/res/values/strings.xml similarity index 100% rename from samples/nanobanana/src/main/res/values/strings.xml rename to ai-sample-catalog/samples/nanobanana/src/main/res/values/strings.xml diff --git a/settings.gradle.kts b/ai-sample-catalog/settings.gradle.kts similarity index 100% rename from settings.gradle.kts rename to ai-sample-catalog/settings.gradle.kts diff --git a/spotless/copyright.kt b/ai-sample-catalog/spotless/copyright.kt similarity index 100% rename from spotless/copyright.kt rename to ai-sample-catalog/spotless/copyright.kt diff --git a/ui-component/.gitignore b/ai-sample-catalog/ui-component/.gitignore similarity index 100% rename from ui-component/.gitignore rename to ai-sample-catalog/ui-component/.gitignore diff --git a/ui-component/build.gradle.kts b/ai-sample-catalog/ui-component/build.gradle.kts similarity index 100% rename from ui-component/build.gradle.kts rename to ai-sample-catalog/ui-component/build.gradle.kts diff --git a/ui-component/src/main/java/com/android/ai/theme/Color.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Color.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/theme/Color.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Color.kt diff --git a/ui-component/src/main/java/com/android/ai/theme/Theme.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Theme.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/theme/Theme.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Theme.kt diff --git a/ui-component/src/main/java/com/android/ai/theme/Type.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Type.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/theme/Type.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/theme/Type.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/Buttons.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Buttons.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/Buttons.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Buttons.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/ImageInput.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/ImageInput.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/ImageInput.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/ImageInput.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/MarkdownText.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/MarkdownText.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/MarkdownText.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/MarkdownText.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/Message.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Message.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/Message.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Message.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/SampleDetailTopAppBar.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SampleDetailTopAppBar.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/SampleDetailTopAppBar.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SampleDetailTopAppBar.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/SeeCodeButton.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SeeCodeButton.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/SeeCodeButton.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SeeCodeButton.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/SelectionDropdown.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SelectionDropdown.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/SelectionDropdown.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/SelectionDropdown.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/Tag.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Tag.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/Tag.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/Tag.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/TextInput.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/TextInput.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/TextInput.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/TextInput.kt diff --git a/ui-component/src/main/java/com/android/ai/uicomponent/VideoPlayer.kt b/ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/VideoPlayer.kt similarity index 100% rename from ui-component/src/main/java/com/android/ai/uicomponent/VideoPlayer.kt rename to ai-sample-catalog/ui-component/src/main/java/com/android/ai/uicomponent/VideoPlayer.kt diff --git a/ui-component/src/main/res/drawable-hdpi/ic_add.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_add.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_add.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_add.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_add_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_add_text.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_add_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_add_text.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_bg.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_bg.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_chapters.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_chapters.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_chapters.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_chapters.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_edit.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_edit.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_edit.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_edit.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_hashtags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_hashtags.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_hashtags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_hashtags.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_img.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_img.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_img.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_img.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_mic.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_mic.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_mic.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_mic.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_send.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_send.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_send.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_send.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_summary.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_summary.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_summary.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_summary.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_tags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_tags.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_tags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_tags.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_ai_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_text.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_ai_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_ai_text.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_code.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_code.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_code.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_code.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_delete.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_delete.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_delete.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_delete.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_dev_guide.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_dev_guide.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_dev_guide.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_dev_guide.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_redo.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_redo.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_redo.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_redo.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_video_forward_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_forward_10.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_video_forward_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_forward_10.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_video_pause.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_pause.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_video_pause.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_pause.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_video_play.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_play.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_video_play.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_play.png diff --git a/ui-component/src/main/res/drawable-hdpi/ic_video_rewind_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_rewind_10.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/ic_video_rewind_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/ic_video_rewind_10.png diff --git a/ui-component/src/main/res/drawable-hdpi/img_bg_general.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/img_bg_general.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/img_bg_general.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/img_bg_general.png diff --git a/ui-component/src/main/res/drawable-hdpi/img_fill.png b/ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/img_fill.png similarity index 100% rename from ui-component/src/main/res/drawable-hdpi/img_fill.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-hdpi/img_fill.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_add.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_add.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_add.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_add.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_add_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_add_text.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_add_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_add_text.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_bg.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_bg.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_chapters.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_chapters.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_chapters.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_chapters.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_edit.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_edit.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_edit.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_edit.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_hashtags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_hashtags.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_hashtags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_hashtags.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_img.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_img.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_img.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_img.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_mic.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_mic.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_mic.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_mic.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_send.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_send.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_send.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_send.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_summary.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_summary.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_summary.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_summary.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_tags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_tags.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_tags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_tags.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_ai_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_text.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_ai_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_ai_text.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_code.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_code.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_code.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_code.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_delete.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_delete.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_delete.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_delete.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_dev_guide.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_dev_guide.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_dev_guide.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_dev_guide.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_redo.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_redo.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_redo.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_redo.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_video_forward_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_forward_10.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_video_forward_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_forward_10.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_video_pause.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_pause.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_video_pause.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_pause.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_video_play.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_play.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_video_play.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_play.png diff --git a/ui-component/src/main/res/drawable-mdpi/ic_video_rewind_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_rewind_10.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/ic_video_rewind_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/ic_video_rewind_10.png diff --git a/ui-component/src/main/res/drawable-mdpi/img_bg_general.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/img_bg_general.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/img_bg_general.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/img_bg_general.png diff --git a/ui-component/src/main/res/drawable-mdpi/img_fill.png b/ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/img_fill.png similarity index 100% rename from ui-component/src/main/res/drawable-mdpi/img_fill.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-mdpi/img_fill.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_add.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_add.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_add.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_add.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_add_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_add_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_add_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_add_text.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_bg.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_bg.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_chapters.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_chapters.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_chapters.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_chapters.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_edit.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_edit.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_edit.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_edit.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_hashtags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_hashtags.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_hashtags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_hashtags.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_img.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_img.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_img.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_img.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_mic.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_mic.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_mic.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_mic.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_send.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_send.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_send.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_send.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_summary.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_summary.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_summary.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_summary.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_tags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_tags.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_tags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_tags.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_ai_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_ai_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_ai_text.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_code.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_code.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_code.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_code.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_delete.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_delete.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_delete.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_delete.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_dev_guide.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_dev_guide.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_dev_guide.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_dev_guide.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_redo.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_redo.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_redo.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_redo.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_video_forward_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_forward_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_video_forward_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_forward_10.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_video_pause.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_pause.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_video_pause.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_pause.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_video_play.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_play.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_video_play.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_play.png diff --git a/ui-component/src/main/res/drawable-xhdpi/ic_video_rewind_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_rewind_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/ic_video_rewind_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/ic_video_rewind_10.png diff --git a/ui-component/src/main/res/drawable-xhdpi/img_bg_general.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/img_bg_general.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/img_bg_general.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/img_bg_general.png diff --git a/ui-component/src/main/res/drawable-xhdpi/img_fill.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/img_fill.png similarity index 100% rename from ui-component/src/main/res/drawable-xhdpi/img_fill.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xhdpi/img_fill.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_add.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_add.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_add.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_add.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_add_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_add_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_add_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_add_text.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_bg.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_bg.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_chapters.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_chapters.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_chapters.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_chapters.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_edit.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_edit.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_edit.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_edit.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_hashtags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_hashtags.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_hashtags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_hashtags.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_img.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_img.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_img.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_img.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_mic.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_mic.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_mic.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_mic.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_send.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_send.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_send.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_send.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_summary.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_summary.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_summary.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_summary.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_tags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_tags.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_tags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_tags.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_ai_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_ai_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_ai_text.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_code.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_code.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_code.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_code.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_delete.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_delete.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_delete.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_delete.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_dev_guide.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_dev_guide.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_dev_guide.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_dev_guide.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_redo.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_redo.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_redo.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_redo.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_video_forward_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_forward_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_video_forward_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_forward_10.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_video_pause.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_pause.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_video_pause.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_pause.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_video_play.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_play.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_video_play.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_play.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/ic_video_rewind_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_rewind_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/ic_video_rewind_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/ic_video_rewind_10.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/img_bg_general.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/img_bg_general.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/img_bg_general.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/img_bg_general.png diff --git a/ui-component/src/main/res/drawable-xxhdpi/img_fill.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/img_fill.png similarity index 100% rename from ui-component/src/main/res/drawable-xxhdpi/img_fill.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxhdpi/img_fill.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_add.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_add.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_add.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_add.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_add_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_add_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_add_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_add_text.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_bg.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_bg.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_chapters.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_chapters.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_chapters.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_chapters.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_edit.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_edit.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_edit.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_edit.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_hashtags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_hashtags.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_hashtags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_hashtags.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_img.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_img.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_img.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_img.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_mic.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_mic.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_mic.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_mic.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_send.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_send.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_send.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_send.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_summary.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_summary.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_summary.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_summary.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_tags.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_tags.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_tags.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_tags.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_text.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_text.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_ai_text.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_ai_text.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_code.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_code.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_code.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_code.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_delete.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_delete.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_delete.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_delete.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_dev_guide.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_dev_guide.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_dev_guide.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_dev_guide.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_redo.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_redo.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_redo.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_redo.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_video_forward_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_forward_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_video_forward_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_forward_10.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_video_pause.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_pause.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_video_pause.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_pause.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_video_play.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_play.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_video_play.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_play.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/ic_video_rewind_10.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_rewind_10.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/ic_video_rewind_10.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/ic_video_rewind_10.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/img_bg_general.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/img_bg_general.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/img_bg_general.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/img_bg_general.png diff --git a/ui-component/src/main/res/drawable-xxxhdpi/img_fill.png b/ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/img_fill.png similarity index 100% rename from ui-component/src/main/res/drawable-xxxhdpi/img_fill.png rename to ai-sample-catalog/ui-component/src/main/res/drawable-xxxhdpi/img_fill.png diff --git a/ui-component/src/main/res/drawable/bg.png b/ai-sample-catalog/ui-component/src/main/res/drawable/bg.png similarity index 100% rename from ui-component/src/main/res/drawable/bg.png rename to ai-sample-catalog/ui-component/src/main/res/drawable/bg.png diff --git a/ui-component/src/main/res/drawable/ic_spark.xml b/ai-sample-catalog/ui-component/src/main/res/drawable/ic_spark.xml similarity index 100% rename from ui-component/src/main/res/drawable/ic_spark.xml rename to ai-sample-catalog/ui-component/src/main/res/drawable/ic_spark.xml diff --git a/ui-component/src/main/res/values-v23/font_certs.xml b/ai-sample-catalog/ui-component/src/main/res/values-v23/font_certs.xml similarity index 100% rename from ui-component/src/main/res/values-v23/font_certs.xml rename to ai-sample-catalog/ui-component/src/main/res/values-v23/font_certs.xml diff --git a/ui-component/src/main/res/values/strings.xml b/ai-sample-catalog/ui-component/src/main/res/values/strings.xml similarity index 100% rename from ui-component/src/main/res/values/strings.xml rename to ai-sample-catalog/ui-component/src/main/res/values/strings.xml From b2b796ceb4674632a06baa8a6e9507f031d7ea6d Mon Sep 17 00:00:00 2001 From: Jolanda Verhoef Date: Mon, 20 Jul 2026 12:32:08 +0100 Subject: [PATCH 2/4] Update README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55b5b9b3..b4784edf 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The table below catalogs the samples and applications available in this reposito | Sample App | Description | Directory | | :--- | :--- | :--- | -| **Android AI Sample Catalog**

![Android AI Sample Catalog](https://developer.android.com/static/ai/assets/images/ai_catalog_screenshot_1440.png) | A standalone showcase application containing multiple standalone, self-contained samples demonstrating various Gemini integration capabilities (hybrid inference, chat, multimodal, summarization, writing assistance, etc.) on Android. | [ai-sample-catalog/](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog) | +| **Android AI Sample Catalog**

![Android AI Sample Catalog](https://developer.android.com/static/ai/assets/images/ai_catalog_screenshot_1440.png) | A standalone showcase application containing multiple standalone, self-contained samples demonstrating various Gemini integration capabilities (hybrid inference, chat, multimodal, summarization, writing assistance, etc.) on Android. | [ai-sample-catalog/](ai-sample-catalog/) | | **Jetpacker (Coming Soon)** | A sample showing Jetpacker integration and AI-guided capabilities for Android development. | *To be added soon* | --- From c1b08d7e4ec3f716fad38b1d2748298e6238f46b Mon Sep 17 00:00:00 2001 From: Jolanda Verhoef Date: Mon, 20 Jul 2026 12:32:18 +0100 Subject: [PATCH 3/4] Update README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index b4784edf..73909c74 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ The table below catalogs the samples and applications available in this reposito To explore or run a specific sample, navigate to its respective directory and follow the setup instructions inside its local `README.md`. For example, to run the Android AI Sample Catalog: -1. Open the [ai-sample-catalog/](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog) directory in Android Studio. -2. Follow the Firebase project configuration instructions detailed in the [ai-sample-catalog/README.md](file:///Users/jolandaverhoef/tmp/ai-samples/ai-sample-catalog/README.md). +1. Open the [ai-sample-catalog/](ai-sample-catalog/) directory in Android Studio.\n2. Follow the Firebase project configuration instructions detailed in the [ai-sample-catalog/README.md](ai-sample-catalog/README.md). 3. Build and run the `app` configuration. --- From 0616ac0fa0e1fa4374c92fe8d8c137b2a304d1b4 Mon Sep 17 00:00:00 2001 From: JolandaVerhoef <6952116+JolandaVerhoef@users.noreply.github.com> Date: Mon, 20 Jul 2026 12:33:14 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=A4=96=20Apply=20Spotless=20formattin?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/ai/samples/geminihybrid/GeminiHybridScreen.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt index d4ce57e4..771455b0 100644 --- a/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt +++ b/ai-sample-catalog/samples/gemini-hybrid/src/main/java/com/android/ai/samples/geminihybrid/GeminiHybridScreen.kt @@ -411,11 +411,7 @@ fun LanguageDropdown( @PublicPreviewAPI @Composable -fun InferenceModeDropdown( - selectedMode: InferenceMode, - onModeSelected: (InferenceMode) -> Unit, - modifier: Modifier = Modifier, -) { +fun InferenceModeDropdown(selectedMode: InferenceMode, onModeSelected: (InferenceMode) -> Unit, modifier: Modifier = Modifier) { var expanded by remember { mutableStateOf(false) } val modes = listOf( InferenceMode.ONLY_ON_DEVICE to stringResource(R.string.gemini_hybrid_mode_only_on_device),