summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidjiagoogle <125502967+davidjiagoogle@users.noreply.github.com>2024-04-29 11:23:13 -0700
committerGitHub <noreply@github.com>2024-04-29 11:23:13 -0700
commit45dd3cc187363fefc9f4d3552dd980fd839fed73 (patch)
tree29dc39a68b1cfc4c1407976e5dc9169ac55fb69d
parent9f2019261c270be70e65b612f732235aef174155 (diff)
downloadjetpack-camera-app-45dd3cc187363fefc9f4d3552dd980fd839fed73.tar.gz
Remove PreviewViewModel in app module for testing (#196)
* Remove PreviewViewModel in app module for testing * Update UiTestUtil.kt * Update UiTestUtil.kt
-rw-r--r--app/build.gradle.kts3
-rw-r--r--app/src/androidTest/java/com/google/jetpackcamera/FlashDeviceTest.kt36
-rw-r--r--app/src/androidTest/java/com/google/jetpackcamera/UiTestUtil.kt27
-rw-r--r--app/src/main/java/com/google/jetpackcamera/MainActivity.kt5
-rw-r--r--app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt5
-rw-r--r--feature/preview/src/main/java/com/google/jetpackcamera/feature/preview/PreviewScreen.kt2
6 files changed, 11 insertions, 67 deletions
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 6f86f9b..fa31ee8 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -139,8 +139,9 @@ dependencies {
// Camera Preview
implementation(project(":feature:preview"))
- // Only needed as androidTestImplementation for now since we only need it for string resources
+ // Only needed as androidTestImplementation & testImplementation for now since we only need it for string resources
androidTestImplementation(project(":feature:quicksettings"))
+ testImplementation(project(":feature:quicksettings"))
// Settings Screen
implementation(project(":feature:settings"))
diff --git a/app/src/androidTest/java/com/google/jetpackcamera/FlashDeviceTest.kt b/app/src/androidTest/java/com/google/jetpackcamera/FlashDeviceTest.kt
index e2db0a1..d7bc34a 100644
--- a/app/src/androidTest/java/com/google/jetpackcamera/FlashDeviceTest.kt
+++ b/app/src/androidTest/java/com/google/jetpackcamera/FlashDeviceTest.kt
@@ -33,7 +33,6 @@ import com.google.jetpackcamera.feature.preview.ui.IMAGE_CAPTURE_SUCCESS_TAG
import com.google.jetpackcamera.feature.preview.ui.SCREEN_FLASH_OVERLAY
import com.google.jetpackcamera.feature.quicksettings.ui.QUICK_SETTINGS_DROP_DOWN
import com.google.jetpackcamera.feature.quicksettings.ui.QUICK_SETTINGS_FLASH_BUTTON
-import com.google.jetpackcamera.settings.model.FlashMode
import com.google.jetpackcamera.settings.model.LensFacing
import org.junit.Before
import org.junit.Rule
@@ -74,14 +73,10 @@ internal class FlashDeviceTest {
.assertExists()
.performClick()
- // Exit quick settings
- composeTestRule.onNodeWithTag(QUICK_SETTINGS_DROP_DOWN)
+ composeTestRule.onNodeWithTag(QUICK_SETTINGS_FLASH_BUTTON)
.assertExists()
- .performClick()
-
- assert(
- UiTestUtil.getPreviewCameraAppSettings(this@runScenarioTest).flashMode ==
- FlashMode.ON
+ composeTestRule.onNodeWithContentDescription(
+ com.google.jetpackcamera.quicksettings.R.string.quick_settings_flash_on_description
)
}
@@ -103,14 +98,8 @@ internal class FlashDeviceTest {
.performClick()
.performClick()
- // Exit quick settings
- composeTestRule.onNodeWithTag(QUICK_SETTINGS_DROP_DOWN)
- .assertExists()
- .performClick()
-
- assert(
- UiTestUtil.getPreviewCameraAppSettings(this@runScenarioTest).flashMode ==
- FlashMode.AUTO
+ composeTestRule.onNodeWithContentDescription(
+ com.google.jetpackcamera.quicksettings.R.string.quick_settings_flash_auto_description
)
}
@@ -121,9 +110,8 @@ internal class FlashDeviceTest {
composeTestRule.onNodeWithTag(CAPTURE_BUTTON).isDisplayed()
}
- assert(
- UiTestUtil.getPreviewCameraAppSettings(this@runScenarioTest).flashMode ==
- FlashMode.OFF
+ composeTestRule.onNodeWithContentDescription(
+ com.google.jetpackcamera.quicksettings.R.string.quick_settings_flash_off_description
)
// Navigate to quick settings
@@ -138,14 +126,8 @@ internal class FlashDeviceTest {
.performClick()
.performClick()
- // Exit quick settings
- composeTestRule.onNodeWithTag(QUICK_SETTINGS_DROP_DOWN)
- .assertExists()
- .performClick()
-
- assert(
- UiTestUtil.getPreviewCameraAppSettings(this@runScenarioTest).flashMode ==
- FlashMode.OFF
+ composeTestRule.onNodeWithContentDescription(
+ com.google.jetpackcamera.quicksettings.R.string.quick_settings_flash_off_description
)
}
diff --git a/app/src/androidTest/java/com/google/jetpackcamera/UiTestUtil.kt b/app/src/androidTest/java/com/google/jetpackcamera/UiTestUtil.kt
index cae4241..d41cc04 100644
--- a/app/src/androidTest/java/com/google/jetpackcamera/UiTestUtil.kt
+++ b/app/src/androidTest/java/com/google/jetpackcamera/UiTestUtil.kt
@@ -22,39 +22,12 @@ import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.test.core.app.ActivityScenario
-import com.google.jetpackcamera.feature.preview.PreviewUiState
import com.google.jetpackcamera.feature.quicksettings.ui.QUICK_SETTINGS_FLIP_CAMERA_BUTTON
import com.google.jetpackcamera.quicksettings.R
-import com.google.jetpackcamera.settings.model.CameraAppSettings
import com.google.jetpackcamera.settings.model.LensFacing
-import java.lang.IllegalStateException
-import java.util.concurrent.atomic.AtomicReference
const val APP_START_TIMEOUT_MILLIS = 10_000L
const val IMAGE_CAPTURE_TIMEOUT_MILLIS = 5_000L
-object UiTestUtil {
- private fun getActivity(activityScenario: ActivityScenario<MainActivity>): MainActivity {
- val activityRef: AtomicReference<MainActivity> = AtomicReference<MainActivity>()
- activityScenario.onActivity(activityRef::set)
- return activityRef.get()
- }
-
- fun getPreviewCameraAppSettings(
- activityScenario: ActivityScenario<MainActivity>
- ): CameraAppSettings {
- return getActivity(
- activityScenario
- ).previewViewModel!!.previewUiState.value.let {
- when (it) {
- is PreviewUiState.Ready -> it.currentCameraSettings
- else -> throw IllegalStateException(
- "Can only retrieve camera app settings from PreviewUiState.Ready," +
- " but state was ${it::class}"
- )
- }
- }
- }
-}
inline fun <reified T : Activity> runScenarioTest(
crossinline block: ActivityScenario<T>.() -> Unit
diff --git a/app/src/main/java/com/google/jetpackcamera/MainActivity.kt b/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
index 79ef994..a8de5e8 100644
--- a/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
+++ b/app/src/main/java/com/google/jetpackcamera/MainActivity.kt
@@ -27,7 +27,6 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
-import androidx.annotation.VisibleForTesting
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
@@ -74,9 +73,6 @@ private const val TAG = "MainActivity"
class MainActivity : ComponentActivity() {
private val viewModel: MainActivityViewModel by viewModels()
- @VisibleForTesting
- var previewViewModel: PreviewViewModel? = null
-
@OptIn(ExperimentalComposeUiApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -122,7 +118,6 @@ class MainActivity : ComponentActivity() {
) {
JcaApp(
previewMode = getPreviewMode(),
- onPreviewViewModel = { previewViewModel = it },
onRequestWindowColorMode = { colorMode ->
// Window color mode APIs require API level 26+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
diff --git a/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt b/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
index bdef4e3..14aec76 100644
--- a/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
+++ b/app/src/main/java/com/google/jetpackcamera/ui/JcaApp.kt
@@ -29,7 +29,6 @@ import com.google.accompanist.permissions.rememberPermissionState
import com.google.jetpackcamera.BuildConfig
import com.google.jetpackcamera.feature.preview.PreviewMode
import com.google.jetpackcamera.feature.preview.PreviewScreen
-import com.google.jetpackcamera.feature.preview.PreviewViewModel
import com.google.jetpackcamera.settings.SettingsScreen
import com.google.jetpackcamera.settings.VersionInfoHolder
import com.google.jetpackcamera.ui.Routes.PREVIEW_ROUTE
@@ -40,7 +39,6 @@ import com.google.jetpackcamera.ui.Routes.SETTINGS_ROUTE
fun JcaApp(
/*TODO(b/306236646): remove after still capture*/
previewMode: PreviewMode,
- onPreviewViewModel: (PreviewViewModel) -> Unit,
onRequestWindowColorMode: (Int) -> Unit,
modifier: Modifier = Modifier
) {
@@ -49,7 +47,6 @@ fun JcaApp(
if (permissionState.status.isGranted) {
JetpackCameraNavHost(
- onPreviewViewModel = onPreviewViewModel,
previewMode = previewMode,
onRequestWindowColorMode = onRequestWindowColorMode,
modifier = modifier
@@ -65,7 +62,6 @@ fun JcaApp(
@Composable
private fun JetpackCameraNavHost(
previewMode: PreviewMode,
- onPreviewViewModel: (PreviewViewModel) -> Unit,
onRequestWindowColorMode: (Int) -> Unit,
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController()
@@ -73,7 +69,6 @@ private fun JetpackCameraNavHost(
NavHost(navController = navController, startDestination = PREVIEW_ROUTE, modifier = modifier) {
composable(PREVIEW_ROUTE) {
PreviewScreen(
- onPreviewViewModel = onPreviewViewModel,
onNavigateToSettings = { navController.navigate(SETTINGS_ROUTE) },
onRequestWindowColorMode = onRequestWindowColorMode,
previewMode = previewMode
diff --git a/feature/preview/src/main/java/com/google/jetpackcamera/feature/preview/PreviewScreen.kt b/feature/preview/src/main/java/com/google/jetpackcamera/feature/preview/PreviewScreen.kt
index 0ad38f4..e0ff42c 100644
--- a/feature/preview/src/main/java/com/google/jetpackcamera/feature/preview/PreviewScreen.kt
+++ b/feature/preview/src/main/java/com/google/jetpackcamera/feature/preview/PreviewScreen.kt
@@ -70,7 +70,6 @@ private const val TAG = "PreviewScreen"
*/
@Composable
fun PreviewScreen(
- onPreviewViewModel: (PreviewViewModel) -> Unit,
onNavigateToSettings: () -> Unit,
previewMode: PreviewMode,
modifier: Modifier = Modifier,
@@ -78,7 +77,6 @@ fun PreviewScreen(
viewModel: PreviewViewModel = hiltViewModel()
) {
Log.d(TAG, "PreviewScreen")
- onPreviewViewModel(viewModel)
val previewUiState: PreviewUiState by viewModel.previewUiState.collectAsState()