Skip to content

Commit 534386c

Browse files
Imagen module refactor (#56)
Co-authored-by: lethargicpanda <[email protected]>
1 parent 2d8b977 commit 534386c

File tree

10 files changed

+411
-305
lines changed

10 files changed

+411
-305
lines changed

ai-catalog/app/src/main/java/com/android/ai/catalog/ui/domain/SampleCatalog.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import com.android.ai.samples.geminivideosummary.VideoSummarizationScreen
2525
import com.android.ai.samples.genai_image_description.GenAIImageDescriptionScreen
2626
import com.android.ai.samples.genai_summarization.GenAISummarizationScreen
2727
import com.android.ai.samples.genai_writing_assistance.GenAIWritingAssistanceScreen
28-
import com.android.ai.samples.imagen.ImagenScreen
28+
import com.android.ai.samples.imagen.ui.ImagenScreen
2929
import com.android.ai.samples.magicselfie.MagicSelfieScreen
3030

3131
val sampleCatalog = listOf<SampleCatalogItem>(

ai-catalog/samples/imagen/src/main/java/com/android/ai/samples/imagen/ImagenScreen.kt

Lines changed: 0 additions & 267 deletions
This file was deleted.

ai-catalog/samples/imagen/src/main/java/com/android/ai/samples/imagen/ImagenViewModel.kt renamed to ai-catalog/samples/imagen/src/main/java/com/android/ai/samples/imagen/data/ImagenDataSource.kt

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package com.android.ai.samples.imagen
16+
package com.android.ai.samples.imagen.data
1717

1818
import android.graphics.Bitmap
19-
import androidx.lifecycle.ViewModel
20-
import androidx.lifecycle.viewModelScope
2119
import com.google.firebase.Firebase
2220
import com.google.firebase.ai.ai
2321
import com.google.firebase.ai.type.GenerativeBackend
@@ -26,25 +24,10 @@ import com.google.firebase.ai.type.ImagenGenerationConfig
2624
import com.google.firebase.ai.type.ImagenImageFormat
2725
import com.google.firebase.ai.type.PublicPreviewAPI
2826
import javax.inject.Inject
29-
import kotlinx.coroutines.flow.MutableStateFlow
30-
import kotlinx.coroutines.flow.StateFlow
31-
import kotlinx.coroutines.launch
32-
33-
sealed interface ImagenUIState {
34-
data object Initial : ImagenUIState
35-
data object Loading : ImagenUIState
36-
data class ImageGenerated(
37-
val bitmap: Bitmap,
38-
val contentDescription: String,
39-
) : ImagenUIState
40-
data class Error(val message: String) : ImagenUIState
41-
}
42-
43-
class ImagenViewModel @Inject constructor() : ViewModel() {
44-
45-
private val _uiState: MutableStateFlow<ImagenUIState> = MutableStateFlow(ImagenUIState.Initial)
46-
val uiState: StateFlow<ImagenUIState> = _uiState
27+
import javax.inject.Singleton
4728

29+
@Singleton
30+
class ImagenDataSource @Inject constructor() {
4831
@OptIn(PublicPreviewAPI::class)
4932
private val imagenModel = Firebase.ai(backend = GenerativeBackend.vertexAI()).imagenModel(
5033
modelName = "imagen-4.0-generate-preview-06-06",
@@ -56,21 +39,11 @@ class ImagenViewModel @Inject constructor() : ViewModel() {
5639
)
5740

5841
@OptIn(PublicPreviewAPI::class)
59-
fun generateImage(prompt: String) {
60-
_uiState.value = ImagenUIState.Loading
61-
62-
viewModelScope.launch {
63-
try {
64-
val imageResponse = imagenModel.generateImages(
65-
prompt = prompt,
66-
)
67-
val image = imageResponse.images.first()
68-
69-
val bitmapImage = image.asBitmap()
70-
_uiState.value = ImagenUIState.ImageGenerated(bitmapImage, contentDescription = prompt)
71-
} catch (e: Exception) {
72-
_uiState.value = ImagenUIState.Error(e.message ?: "Unknown error")
73-
}
74-
}
42+
suspend fun generateImage(prompt: String): Bitmap {
43+
val imageResponse = imagenModel.generateImages(
44+
prompt = prompt,
45+
)
46+
val image = imageResponse.images.first()
47+
return image.asBitmap()
7548
}
7649
}

0 commit comments

Comments
 (0)