diff --git a/robolectric_tests/Android.mk b/robolectric_tests/Android.mk
deleted file mode 100644
index 9332ee2..0000000
--- a/robolectric_tests/Android.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (C) 2019 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
-#
-#      http://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.
-
-#############################################
-# ThenePicker Robolectric test target.      #
-#############################################
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := ThemePickerRoboTests
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_SDK_VERSION := system_current
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    androidx.test.runner \
-    androidx.test.rules \
-    mockito-robolectric-prebuilt \
-    truth-prebuilt \
-    kotlinx_coroutines_test
-
-LOCAL_JAVA_LIBRARIES := \
-    platform-robolectric-4.5.1-prebuilt
-
-LOCAL_JAVA_RESOURCE_DIRS := config
-
-LOCAL_INSTRUMENTATION_FOR := ThemePicker
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-############################################
-# Target to run the previous target.       #
-############################################
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := RunThemePickerRoboTests
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_SDK_VERSION := system_current
-LOCAL_JAVA_LIBRARIES := \
-    ThemePickerRoboTests
-
-LOCAL_TEST_PACKAGE := ThemePicker
-
-LOCAL_INSTRUMENT_SOURCE_DIRS := packages/apps/ThemePicker/src \
-
-LOCAL_ROBOTEST_TIMEOUT := 36000
-
-include prebuilts/misc/common/robolectric/3.6.2/run_robotests.mk
diff --git a/robolectric_tests/config/robolectric.properties b/robolectric_tests/config/robolectric.properties
deleted file mode 100644
index 6c518c0..0000000
--- a/robolectric_tests/config/robolectric.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-manifest=packages/apps/ThemePicker/AndroidManifest.xml
-sdk=31
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
new file mode 100644
index 0000000..e0a37c2
--- /dev/null
+++ b/tests/robotests/Android.bp
@@ -0,0 +1,17 @@
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+android_robolectric_test {
+    name: "ThemePickerRoboTests",
+    srcs: [
+        "src/**/*.java",
+        "src/**/*.kt",
+    ],
+    java_resource_dirs: ["config"],
+    libs: [
+        "androidx.test.core",
+        "androidx.test.runner",
+    ],
+    instrumentation_for: "ThemePicker",
+}
diff --git a/tests/robotests/AndroidManifest.xml b/tests/robotests/AndroidManifest.xml
new file mode 100644
index 0000000..753aa9e
--- /dev/null
+++ b/tests/robotests/AndroidManifest.xml
@@ -0,0 +1,20 @@
+<!--
+  ~ Copyright (C) 2022 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
+  ~
+  ~      http://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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.customization">
+    <application/>
+</manifest>
diff --git a/tests/robotests/config/robolectric.properties b/tests/robotests/config/robolectric.properties
new file mode 100644
index 0000000..fab7251
--- /dev/null
+++ b/tests/robotests/config/robolectric.properties
@@ -0,0 +1 @@
+sdk=NEWEST_SDK
diff --git a/robolectric_tests/res/values/overlayable_icons_test.xml b/tests/robotests/res/values/overlayable_icons_test.xml
similarity index 100%
rename from robolectric_tests/res/values/overlayable_icons_test.xml
rename to tests/robotests/res/values/overlayable_icons_test.xml
diff --git a/robolectric_tests/src/com/android/customization/model/clock/BaseClockManagerTest.java b/tests/robotests/src/com/android/customization/model/clock/BaseClockManagerTest.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/model/clock/BaseClockManagerTest.java
rename to tests/robotests/src/com/android/customization/model/clock/BaseClockManagerTest.java
diff --git a/robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java b/tests/robotests/src/com/android/customization/model/clock/ClockManagerTest.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/model/clock/ClockManagerTest.java
rename to tests/robotests/src/com/android/customization/model/clock/ClockManagerTest.java
diff --git a/robolectric_tests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt b/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt
similarity index 78%
rename from robolectric_tests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt
rename to tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt
index f6f4227..80d01c6 100644
--- a/robolectric_tests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt
+++ b/tests/robotests/src/com/android/customization/model/color/ColorCustomizationManagerTest.kt
@@ -18,8 +18,8 @@
 import android.app.WallpaperColors
 import android.graphics.Color
 import com.android.customization.model.CustomizationManager
-import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE
 import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_COLOR
+import com.android.customization.model.ResourceConstants.OVERLAY_CATEGORY_SYSTEM_PALETTE
 import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_HOME
 import com.android.customization.model.color.ColorOptionsProvider.COLOR_SOURCE_PRESET
 import com.android.customization.model.color.ColorOptionsProvider.OVERLAY_COLOR_BOTH
@@ -30,6 +30,7 @@
 import com.google.common.truth.Truth.assertThat
 import org.json.JSONObject
 import org.junit.Before
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -41,15 +42,12 @@
 import org.robolectric.RobolectricTestRunner
 import org.robolectric.RuntimeEnvironment
 
-/**
- * Tests of {@link ColorCustomizationManager}.
- */
+/** Tests of {@link ColorCustomizationManager}. */
 // TODO(b/222433744): most of these tests are failing due to the manager apk missing in the image
 @RunWith(RobolectricTestRunner::class)
 class ColorCustomizationManagerTest {
 
-    @get:Rule
-    val rule: MockitoRule = MockitoJUnit.rule()
+    @get:Rule val rule: MockitoRule = MockitoJUnit.rule()
 
     @Mock private lateinit var provider: ColorOptionsProvider
     @Mock private lateinit var mockOM: OverlayManagerCompat
@@ -64,15 +62,19 @@
     }
 
     @Test
+    @Ignore("b/260925899")
     fun testParseSettings() {
         val source = COLOR_SOURCE_HOME
         val style = Style.SPRITZ
         val someColor = "aabbcc"
         val someOtherColor = "bbccdd"
-        val settings = mapOf(OVERLAY_CATEGORY_SYSTEM_PALETTE to someColor,
+        val settings =
+            mapOf(
+                OVERLAY_CATEGORY_SYSTEM_PALETTE to someColor,
                 OVERLAY_CATEGORY_COLOR to someOtherColor,
                 OVERLAY_COLOR_SOURCE to source,
-                ColorOption.TIMESTAMP_FIELD to "12345")
+                ColorOption.TIMESTAMP_FIELD to "12345"
+            )
         val json = JSONObject(settings).toString()
 
         manager.parseSettings(json)
@@ -82,10 +84,11 @@
         assertThat(manager.currentOverlays.size).isEqualTo(2)
         assertThat(manager.currentOverlays.get(OVERLAY_CATEGORY_COLOR)).isEqualTo(someOtherColor)
         assertThat(manager.currentOverlays.get(OVERLAY_CATEGORY_SYSTEM_PALETTE))
-                .isEqualTo(someColor)
+            .isEqualTo(someColor)
     }
 
     @Test
+    @Ignore("b/260925899")
     fun apply_ColorBundle_index() {
         testApplyColorBundle(1, "1")
         testApplyColorBundle(2, "2")
@@ -94,10 +97,13 @@
     }
 
     private fun testApplyColorBundle(index: Int, value: String) {
-        manager.apply(getColorBundle(index), object : CustomizationManager.Callback {
-            override fun onSuccess() {}
-            override fun onError(throwable: Throwable?) {}
-        })
+        manager.apply(
+            getColorBundle(index),
+            object : CustomizationManager.Callback {
+                override fun onSuccess() {}
+                override fun onError(throwable: Throwable?) {}
+            }
+        )
 
         val overlaysJson = JSONObject(manager.storedOverlays)
 
@@ -106,7 +112,8 @@
 
     private fun getColorBundle(index: Int): ColorBundle {
         return ColorBundle(
-            "fake color", mapOf("fake_package" to "fake_color"),
+            "fake color",
+            mapOf("fake_package" to "fake_color"),
             /* isDefault= */ false,
             null,
             /* index= */ index,
@@ -115,6 +122,7 @@
     }
 
     @Test
+    @Ignore("b/260925899")
     fun apply_ColorSeed_index() {
         testApplyColorSeed(1, "1")
         testApplyColorSeed(2, "2")
@@ -123,10 +131,13 @@
     }
 
     private fun testApplyColorSeed(index: Int, value: String) {
-        manager.apply(getColorSeed(index), object : CustomizationManager.Callback {
-            override fun onSuccess() {}
-            override fun onError(throwable: Throwable?) {}
-        })
+        manager.apply(
+            getColorSeed(index),
+            object : CustomizationManager.Callback {
+                override fun onSuccess() {}
+                override fun onError(throwable: Throwable?) {}
+            }
+        )
 
         val overlaysJson = JSONObject(manager.storedOverlays)
         assertThat(overlaysJson.getString(OVERLAY_COLOR_INDEX)).isEqualTo(value)
@@ -145,29 +156,37 @@
     }
 
     @Test
+    @Ignore("b/260925899")
     fun testApply_colorSeedFromWallpaperBoth_shouldReturnBothValue() {
         val wallpaperColor = WallpaperColors(Color.valueOf(Color.RED), null, null)
         manager.setWallpaperColors(wallpaperColor, wallpaperColor)
 
-        manager.apply(getColorSeed(anyInt()), object : CustomizationManager.Callback {
-            override fun onSuccess() {}
-            override fun onError(throwable: Throwable?) {}
-        })
+        manager.apply(
+            getColorSeed(anyInt()),
+            object : CustomizationManager.Callback {
+                override fun onSuccess() {}
+                override fun onError(throwable: Throwable?) {}
+            }
+        )
 
         val overlaysJson = JSONObject(manager.storedOverlays)
         assertThat(overlaysJson.getString(OVERLAY_COLOR_BOTH)).isEqualTo("1")
     }
 
     @Test
+    @Ignore("b/260925899")
     fun testApply_colorSeedFromWallpaperDifferent_shouldReturnNonBothValue() {
         val wallpaperColor1 = WallpaperColors(Color.valueOf(Color.RED), null, null)
         val wallpaperColor2 = WallpaperColors(Color.valueOf(Color.BLUE), null, null)
         manager.setWallpaperColors(wallpaperColor1, wallpaperColor2)
 
-        manager.apply(getColorSeed(anyInt()), object : CustomizationManager.Callback {
-            override fun onSuccess() {}
-            override fun onError(throwable: Throwable?) {}
-        })
+        manager.apply(
+            getColorSeed(anyInt()),
+            object : CustomizationManager.Callback {
+                override fun onSuccess() {}
+                override fun onError(throwable: Throwable?) {}
+            }
+        )
 
         val overlaysJson = JSONObject(manager.storedOverlays)
         assertThat(overlaysJson.getString(OVERLAY_COLOR_BOTH)).isEqualTo("0")
diff --git a/robolectric_tests/src/com/android/customization/model/color/ColorOptionTest.kt b/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt
similarity index 70%
rename from robolectric_tests/src/com/android/customization/model/color/ColorOptionTest.kt
rename to tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt
index 271aa83..0431c19 100644
--- a/robolectric_tests/src/com/android/customization/model/color/ColorOptionTest.kt
+++ b/tests/robotests/src/com/android/customization/model/color/ColorOptionTest.kt
@@ -21,6 +21,7 @@
 import com.android.systemui.monet.Style
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert.assertEquals
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -30,22 +31,25 @@
 import org.mockito.junit.MockitoRule
 import org.robolectric.RobolectricTestRunner
 
-/**
- * Tests of {@link ColorOption}.
- */
+/** Tests of {@link ColorOption}. */
 @RunWith(RobolectricTestRunner::class)
 class ColorOptionTest {
 
-    @get:Rule
-    val rule: MockitoRule = MockitoJUnit.rule()
+    @get:Rule val rule: MockitoRule = MockitoJUnit.rule()
 
-    @Mock
-    private lateinit var manager: ColorCustomizationManager
+    @Mock private lateinit var manager: ColorCustomizationManager
 
     @Test
     fun colorOption_Source_Preset() {
-        val bundleOption: ColorOption = ColorBundle("fake color",
-                mapOf("fake_package" to "fake_color"), false, null, /* index= */ 0, null)
+        val bundleOption: ColorOption =
+            ColorBundle(
+                "fake color",
+                mapOf("fake_package" to "fake_color"),
+                false,
+                null,
+                /* index= */ 0,
+                null
+            )
         assertEquals(COLOR_SOURCE_PRESET, bundleOption.source)
     }
 
@@ -58,8 +62,15 @@
     }
 
     private fun testBundleOptionIndex(index: Int) {
-        val bundleOption: ColorBundle = ColorBundle("fake color",
-                mapOf("fake_package" to "fake_color"), false, null, /* index= */ index, null)
+        val bundleOption: ColorBundle =
+            ColorBundle(
+                "fake color",
+                mapOf("fake_package" to "fake_color"),
+                false,
+                null,
+                /* index= */ index,
+                null
+            )
         assertThat(bundleOption.index).isEqualTo(index)
     }
 
@@ -70,8 +81,16 @@
     }
 
     private fun testSeedOptionSource(source: String) {
-        val seedOption: ColorOption = ColorSeedOption("fake color",
-                mapOf("fake_package" to "fake_color"), false, source, null, /* index= */ 0, null)
+        val seedOption: ColorOption =
+            ColorSeedOption(
+                "fake color",
+                mapOf("fake_package" to "fake_color"),
+                false,
+                source,
+                null,
+                /* index= */ 0,
+                null
+            )
         assertThat(seedOption.source).isEqualTo(source)
     }
 
@@ -84,9 +103,16 @@
     }
 
     private fun testSeedOptionStyle(style: Style) {
-        val seedOption: ColorOption = ColorSeedOption("fake color",
-            mapOf("fake_package" to "fake_color"), /* isDefault= */ false, "fake_source", style,
-            0, null)
+        val seedOption: ColorOption =
+            ColorSeedOption(
+                "fake color",
+                mapOf("fake_package" to "fake_color"),
+                /* isDefault= */ false,
+                "fake_source",
+                style,
+                0,
+                null
+            )
         assertThat(seedOption.style).isEqualTo(style)
     }
 
@@ -99,31 +125,39 @@
     }
 
     private fun testSeedOptionIndex(index: Int) {
-        val seedOption: ColorOption = ColorSeedOption("fake color",
+        val seedOption: ColorOption =
+            ColorSeedOption(
+                "fake color",
                 mapOf("fake_package" to "fake_color"),
                 /* isDefault= */ false,
                 "fake_source",
                 Style.TONAL_SPOT,
                 index,
-                /* previewInfo= */ null)
+                /* previewInfo= */ null
+            )
         assertThat(seedOption.index).isEqualTo(index)
     }
 
-    private fun setUpSeedOption(isDefault: Boolean, source: String = "some_source")
-            : ColorSeedOption {
-        val overlays = if (isDefault) {
-            HashMap()
-        } else {
-            mapOf("package" to "value", "otherPackage" to "otherValue")
-        }
+    private fun setUpSeedOption(
+        isDefault: Boolean,
+        source: String = "some_source"
+    ): ColorSeedOption {
+        val overlays =
+            if (isDefault) {
+                HashMap()
+            } else {
+                mapOf("package" to "value", "otherPackage" to "otherValue")
+            }
         `when`(manager.currentOverlays).thenReturn(overlays)
-        return ColorSeedOption("seed",
-                overlays,
-                isDefault,
-                source,
-                Style.TONAL_SPOT,
-                /* index= */ 0,
-                /* previewInfo= */ null)
+        return ColorSeedOption(
+            "seed",
+            overlays,
+            isDefault,
+            source,
+            Style.TONAL_SPOT,
+            /* index= */ 0,
+            /* previewInfo= */ null
+        )
     }
 
     @Test
@@ -170,6 +204,7 @@
     }
 
     @Test
+    @Ignore("b/260925899")
     fun seedOption_isActive_default_nonEmptyOverlays() {
         val seedOption = setUpSeedOption(true)
 
diff --git a/robolectric_tests/src/com/android/customization/model/color/ColorSectionControllerTest.java b/tests/robotests/src/com/android/customization/model/color/ColorSectionControllerTest.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/model/color/ColorSectionControllerTest.java
rename to tests/robotests/src/com/android/customization/model/color/ColorSectionControllerTest.java
diff --git a/robolectric_tests/src/com/android/customization/model/grid/GridOptionsManagerTest.java b/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java
similarity index 97%
rename from robolectric_tests/src/com/android/customization/model/grid/GridOptionsManagerTest.java
rename to tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java
index 4268725..89ca676 100644
--- a/robolectric_tests/src/com/android/customization/model/grid/GridOptionsManagerTest.java
+++ b/tests/robotests/src/com/android/customization/model/grid/GridOptionsManagerTest.java
@@ -27,6 +27,7 @@
 import com.android.customization.module.ThemesUserEventLogger;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -66,6 +67,7 @@
     }
 
     @Test
+    @Ignore("b/260925899")
     public void testFetch_backgroundThread() {
         mManager.fetchOptions(null, false);
         verify(mProvider).fetch(anyBoolean());
diff --git a/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java b/tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
rename to tests/robotests/src/com/android/customization/model/theme/ThemeManagerTest.java
diff --git a/robolectric_tests/src/com/android/customization/testutils/Condition.java b/tests/robotests/src/com/android/customization/testutils/Condition.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/testutils/Condition.java
rename to tests/robotests/src/com/android/customization/testutils/Condition.java
diff --git a/robolectric_tests/src/com/android/customization/testutils/OverlayManagerMocks.java b/tests/robotests/src/com/android/customization/testutils/OverlayManagerMocks.java
similarity index 78%
rename from robolectric_tests/src/com/android/customization/testutils/OverlayManagerMocks.java
rename to tests/robotests/src/com/android/customization/testutils/OverlayManagerMocks.java
index ed77224..79b2e43 100644
--- a/robolectric_tests/src/com/android/customization/testutils/OverlayManagerMocks.java
+++ b/tests/robotests/src/com/android/customization/testutils/OverlayManagerMocks.java
@@ -42,22 +42,22 @@
  */
 public class OverlayManagerMocks {
     private static class MockOverlay {
-        final String packageName;
-        final String targetPackage;
-        final String category;
+        final String mPackageName;
+        final String mTargetPackage;
+        final String mCategory;
 
-        public MockOverlay(String packageName, String targetPackage, String category) {
-            this.packageName = packageName;
-            this.targetPackage = targetPackage;
-            this.category = category;
+        MockOverlay(String packageName, String targetPackage, String category) {
+            this.mPackageName = packageName;
+            this.mTargetPackage = targetPackage;
+            this.mCategory = category;
         }
 
         @Override
         public boolean equals(Object obj) {
             return obj instanceof MockOverlay
-                    && TextUtils.equals(((MockOverlay) obj).packageName, packageName)
-                    && TextUtils.equals(((MockOverlay) obj).targetPackage, targetPackage)
-                    && TextUtils.equals(((MockOverlay) obj).category, category);
+                    && TextUtils.equals(((MockOverlay) obj).mPackageName, mPackageName)
+                    && TextUtils.equals(((MockOverlay) obj).mTargetPackage, mTargetPackage)
+                    && TextUtils.equals(((MockOverlay) obj).mCategory, mCategory);
         }
     }
 
@@ -69,8 +69,8 @@
             return false;
         }
         Set<MockOverlay> packageOverlays = mAllOverlays.stream()
-                .filter(mockOverlay -> mockOverlay.packageName.equals(packageName)).collect(
-                Collectors.toSet());;
+                .filter(mockOverlay -> mockOverlay.mPackageName.equals(packageName)).collect(
+                Collectors.toSet());
         if (packageOverlays.isEmpty()) {
             return false;
         }
@@ -101,9 +101,9 @@
                 (Answer<String>) inv ->
                         mEnabledOverlays.stream().filter(
                                 mockOverlay ->
-                                        mockOverlay.targetPackage.equals(inv.getArgument(0))
-                                            && mockOverlay.category.equals(inv.getArgument(1)))
-                                .map(overlay -> overlay.packageName).findFirst().orElse(null));
+                                        mockOverlay.mTargetPackage.equals(inv.getArgument(0))
+                                            && mockOverlay.mCategory.equals(inv.getArgument(1)))
+                                .map(overlay -> overlay.mPackageName).findFirst().orElse(null));
 
 
         when(mockOverlayManager.disableOverlay(anyString(), anyInt())).then(
@@ -124,12 +124,12 @@
                         mEnabledOverlays.stream().filter(
                                 overlay ->
                                         Arrays.asList(inv.getArguments())
-                                                .contains(overlay.targetPackage))
+                                                .contains(overlay.mTargetPackage))
                                 .collect(Collectors.toMap(
                                         overlay ->
-                                                overlay.category,
+                                                overlay.mCategory,
                                         (Function<MockOverlay, String>) overlay ->
-                                                overlay.packageName))
+                                                overlay.mPackageName))
         );
     }
-}
\ No newline at end of file
+}
diff --git a/robolectric_tests/src/com/android/customization/testutils/Wait.java b/tests/robotests/src/com/android/customization/testutils/Wait.java
similarity index 100%
rename from robolectric_tests/src/com/android/customization/testutils/Wait.java
rename to tests/robotests/src/com/android/customization/testutils/Wait.java
