Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ interface RemoteConfigDataSource {
fun isAppInactive(): Boolean
fun textModelName(): String
fun imageModelName(): String
fun isBackgroundVibesFeatureEnabled(): Boolean
fun promptTextVerify(): String
fun promptImageValidation(): String
fun promptImageDescription(): String
Expand Down Expand Up @@ -60,6 +61,10 @@ class RemoteConfigDataSourceImpl @Inject constructor() : RemoteConfigDataSource
return remoteConfig.getString("image_model_name")
}

override fun isBackgroundVibesFeatureEnabled(): Boolean {
return remoteConfig.getBoolean("background_vibes_feature_enabled")
}

override fun promptTextVerify(): String {
return remoteConfig.getString("prompt_text_verify")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ class FirebaseAppCheckInitializer : Initializer<FirebaseAppCheck> {
if (BuildConfig.DEBUG) {
Log.i("AndroidifyAppCheck", "Firebase debug")
installAppCheckProviderFactory(
DebugAppCheckProviderFactory.getInstance()
DebugAppCheckProviderFactory.getInstance(),
)
} else {
Log.i("AndroidifyAppCheck", "Play integrity")
installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance(),
)
)
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions core/network/src/main/res/xml/remote_config_defaults.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
limitations under the License.
-->
<defaults>
<entry>
<key>background_vibes_feature_enabled</key>
<value>false</value>
</entry>
<entry>
<key>bot_background_instruction_prompt</key>
<value>Add the input image android bot as the main subject to the result,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ class TestRemoteConfigDataSource(private val useGeminiNano: Boolean) : RemoteCon
override fun imageModelName(): String {
TODO("Not yet implemented")
}
var backgroundVibeEnabled: Boolean = true
override fun isBackgroundVibesFeatureEnabled(): Boolean {
return backgroundVibeEnabled
}

override fun promptTextVerify(): String {
TODO("Not yet implemented")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -493,8 +493,8 @@ private fun MainCreationPane(
// Workaround for https://issuetracker.google.com/432431393
val showTextPrompt by remember {
derivedStateOf {
pagerState.currentPage == PromptType.TEXT.ordinal
&& pagerState.targetPage == pagerState.currentPage
pagerState.currentPage == PromptType.TEXT.ordinal &&
pagerState.targetPage == pagerState.currentPage
}
}
if (showTextPrompt) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class CreationViewModelTest {
viewModel.uiState.value.screenState,
)
assertEquals(false, viewModel.uiState.value.promptGenerationInProgress)
assertEquals( fakeUri, viewModel.uiState.value.imageUri)
assertEquals(fakeUri, viewModel.uiState.value.imageUri)
}

@Test
Expand All @@ -91,7 +91,7 @@ class CreationViewModelTest {
viewModel.uiState.value.screenState,
)
assertEquals(false, viewModel.uiState.value.promptGenerationInProgress)
assertEquals( null, viewModel.uiState.value.imageUri)
assertEquals(null, viewModel.uiState.value.imageUri)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import android.content.Context.DISPLAY_SERVICE
import android.graphics.Bitmap
import android.graphics.SurfaceTexture
import android.hardware.display.DisplayManager
import android.hardware.display.VirtualDisplay
import android.view.Display
import android.view.Surface
import android.view.ViewGroup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.ui.Modifier
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.android.developers.androidify.RemoteConfigDataSource
import com.android.developers.androidify.data.ImageGenerationRepository
import com.android.developers.androidify.util.LocalFileProvider
import dagger.assisted.Assisted
Expand All @@ -43,6 +44,7 @@ class CustomizeExportViewModel @AssistedInject constructor(
val imageGenerationRepository: ImageGenerationRepository,
val composableBitmapRenderer: ComposableBitmapRenderer,
val localFileProvider: LocalFileProvider,
val remoteConfigDataSource: RemoteConfigDataSource,
application: Application,
) : AndroidViewModel(application) {

Expand All @@ -63,10 +65,39 @@ class CustomizeExportViewModel @AssistedInject constructor(
get() = _snackbarHostState

init {
val enableBackgroundVibes = remoteConfigDataSource.isBackgroundVibesFeatureEnabled()
var backgrounds = mutableListOf(
BackgroundOption.None,
BackgroundOption.Plain,
BackgroundOption.Lightspeed,
BackgroundOption.IO,
)
if (enableBackgroundVibes) {
val backgroundVibes = listOf(
BackgroundOption.MusicLover,
BackgroundOption.PoolMaven,
BackgroundOption.SoccerFanatic,
BackgroundOption.StarGazer,
BackgroundOption.FitnessBuff,
BackgroundOption.Fandroid,
BackgroundOption.GreenThumb,
BackgroundOption.Gamer,
BackgroundOption.Jetsetter,
BackgroundOption.Chef,
)
backgrounds.addAll(backgroundVibes)
}

_state.update {
it.copy(
originalImageUrl = originalImageUrl,
exportImageCanvas = it.exportImageCanvas.copy(imageUri = resultImageUrl),
toolState = mapOf(
CustomizeTool.Size to AspectRatioToolState(),
CustomizeTool.Background to BackgroundToolState(
options = backgrounds,
),
),
)
}
loadInitialBitmap(resultImageUrl)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,6 @@ data class BackgroundToolState(
BackgroundOption.Plain,
BackgroundOption.Lightspeed,
BackgroundOption.IO,
BackgroundOption.MusicLover,
BackgroundOption.PoolMaven,
BackgroundOption.SoccerFanatic,
BackgroundOption.StarGazer,
BackgroundOption.FitnessBuff,
BackgroundOption.Fandroid,
BackgroundOption.GreenThumb,
BackgroundOption.Gamer,
BackgroundOption.Jetsetter,
BackgroundOption.Chef,
),
) : ToolState

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,6 @@ class CustomizeStateTest {
BackgroundOption.Plain,
BackgroundOption.Lightspeed,
BackgroundOption.IO,
BackgroundOption.MusicLover,
BackgroundOption.PoolMaven,
BackgroundOption.SoccerFanatic,
BackgroundOption.StarGazer,
BackgroundOption.FitnessBuff,
BackgroundOption.Fandroid,
BackgroundOption.GreenThumb,
BackgroundOption.Gamer,
BackgroundOption.Jetsetter,
BackgroundOption.Chef,
),
state.options,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import android.net.Uri
import androidx.test.core.app.ApplicationProvider
import com.android.developers.testing.data.TestFileProvider
import com.android.developers.testing.data.bitmapSample
import com.android.developers.testing.network.TestRemoteConfigDataSource
import com.android.developers.testing.repository.FakeImageGenerationRepository
import com.android.developers.testing.util.FakeComposableBitmapRenderer
import com.android.developers.testing.util.MainDispatcherRule
Expand Down Expand Up @@ -52,13 +53,16 @@ class CustomizeViewModelTest {

@Before
fun setup() {
val remoteConfigDataSource = TestRemoteConfigDataSource(true)
remoteConfigDataSource.backgroundVibeEnabled = false
viewModel = CustomizeExportViewModel(
fakeUri,
originalFakeUri,
FakeImageGenerationRepository(),
composableBitmapRenderer = FakeComposableBitmapRenderer(),
application = ApplicationProvider.getApplicationContext(),
localFileProvider = TestFileProvider(),
remoteConfigDataSource = remoteConfigDataSource,
)
}

Expand All @@ -82,13 +86,16 @@ class CustomizeViewModelTest {

@Test
fun setArgumentsWithPrompt() = runTest {
val remoteConfigDataSource = TestRemoteConfigDataSource(true)
remoteConfigDataSource.backgroundVibeEnabled = false
val viewModel = CustomizeExportViewModel(
fakeUri,
null,
FakeImageGenerationRepository(),
composableBitmapRenderer = FakeComposableBitmapRenderer(),
application = ApplicationProvider.getApplicationContext(),
localFileProvider = TestFileProvider(),
remoteConfigDataSource = remoteConfigDataSource,
)
assertEquals(
CustomizeExportState(
Expand Down Expand Up @@ -141,6 +148,7 @@ class CustomizeViewModelTest {
composableBitmapRenderer = FakeComposableBitmapRenderer(),
application = ApplicationProvider.getApplicationContext(),
localFileProvider = TestFileProvider(),
remoteConfigDataSource = TestRemoteConfigDataSource(false),
)
val values = mutableListOf<CustomizeExportState>()
// Launch collector on the backgroundScope directly to use runTest's scheduler
Expand Down Expand Up @@ -190,4 +198,23 @@ class CustomizeViewModelTest {
assertTrue { !values[values.lastIndex].showImageEditProgress }
assertNull(values.last().exportImageCanvas.imageWithEdit)
}

@Test
fun remoteConfigDataSource_BackgroundVibesFeatureEnabled_ContainsVibeList() = runTest {
val remoteConfigDataSource = TestRemoteConfigDataSource(true)
remoteConfigDataSource.backgroundVibeEnabled = true
val viewModel = CustomizeExportViewModel(
fakeUri,
null,
FakeImageGenerationRepository(),
composableBitmapRenderer = FakeComposableBitmapRenderer(),
application = ApplicationProvider.getApplicationContext(),
localFileProvider = TestFileProvider(),
remoteConfigDataSource = remoteConfigDataSource,
)
val state = viewModel.state.value.toolState[CustomizeTool.Background] as BackgroundToolState

assertTrue(state.options.size > 5)
assertTrue(state.options.any { it.aiBackground })
}
}
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ hiltAndroid = "2.56.2"
hiltLifecycleViewmodel = "1.0.0-alpha03"
hiltNavigationCompose = "1.2.0"
junit = "4.13.2"
junitVersion = "1.2.1"
junitVersion = "1.3.0"
kotlin = "2.2.0"
ksp = "2.2.0-2.0.2"
kotlinxCoroutines = "1.10.2"
Expand Down