diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 65c5708..1281a6f 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -78,11 +78,23 @@
     visibility: ["//visibility:private"],
 }
 
+filegroup {
+    name: "SystemUI-tests-broken-robofiles-run",
+    srcs: [
+        "tests/src/**/systemui/util/LifecycleFragmentTest.java",
+        "tests/src/**/systemui/util/TestableAlertDialogTest.kt",
+        "tests/src/**/systemui/util/kotlin/PairwiseFlowTest",
+        "tests/src/**/systemui/util/sensors/AsyncManagerTest.java",
+        "tests/src/**/systemui/util/sensors/ThresholdSensorImplTest.java",
+        "tests/src/**/systemui/util/wakelock/KeepAwakeAnimationListenerTest.java",
+    ],
+}
+
 // We are running robolectric tests in the tests directory as well as
 // multivalent tests.  If you add a test, and it doesn't run in robolectric,
 // it should be added to this exclusion list. go/multivalent-tests
 filegroup {
-    name: "SystemUI-tests-broken-robofiles",
+    name: "SystemUI-tests-broken-robofiles-compile",
     srcs: [
         "tests/src/**/*DeviceOnlyTest.java",
         "tests/src/**/*DeviceOnlyTest.kt",
@@ -700,7 +712,8 @@
         ":SystemUI-tests-robofiles",
     ],
     exclude_srcs: [
-        ":SystemUI-tests-broken-robofiles",
+        ":SystemUI-tests-broken-robofiles-compile",
+        ":SystemUI-tests-broken-robofiles-run",
     ],
     static_libs: [
         "RoboTestLibraries",
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/FloatingContentCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/FloatingContentCoordinatorTest.kt
index 31848a6..e1dcb14 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/FloatingContentCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/FloatingContentCoordinatorTest.kt
@@ -1,8 +1,8 @@
 package com.android.systemui.util
 
 import android.graphics.Rect
-import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.wm.shell.common.FloatingContentCoordinator
@@ -14,7 +14,7 @@
 import org.junit.runner.RunWith
 
 @TestableLooper.RunWithLooper
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 @SmallTest
 class FloatingContentCoordinatorTest : SysuiTestCase() {
 
@@ -198,12 +198,11 @@
     }
 
     /**
-     * Helper class that uses [floatingCoordinator.findAreaForContentVertically] to move a
-     * Rect when needed.
+     * Helper class that uses [floatingCoordinator.findAreaForContentVertically] to move a Rect when
+     * needed.
      */
-    inner class FloatingRect(
-        private val underlyingRect: Rect
-    ) : FloatingContentCoordinator.FloatingContent {
+    inner class FloatingRect(private val underlyingRect: Rect) :
+        FloatingContentCoordinator.FloatingContent {
         override fun moveToBounds(bounds: Rect) {
             underlyingRect.set(bounds)
         }
@@ -216,4 +215,4 @@
             return underlyingRect
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/RingerModeLiveDataTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/RingerModeLiveDataTest.kt
index 436f5b8..457f2bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/RingerModeLiveDataTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/RingerModeLiveDataTest.kt
@@ -19,12 +19,13 @@
 import android.content.BroadcastReceiver
 import android.content.IntentFilter
 import android.os.UserHandle
-import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
 import androidx.lifecycle.Observer
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.broadcast.BroadcastDispatcher
+import java.util.concurrent.Executor
 import org.junit.After
 import org.junit.Assert.assertTrue
 import org.junit.Before
@@ -38,10 +39,9 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
 import org.mockito.MockitoAnnotations
-import java.util.concurrent.Executor
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
 class RingerModeLiveDataTest : SysuiTestCase() {
 
@@ -52,16 +52,11 @@
         private val INTENT = "INTENT"
     }
 
-    @Mock
-    private lateinit var broadcastDispatcher: BroadcastDispatcher
-    @Mock
-    private lateinit var valueSupplier: () -> Int
-    @Mock
-    private lateinit var observer: Observer<Int>
-    @Captor
-    private lateinit var broadcastReceiverCaptor: ArgumentCaptor<BroadcastReceiver>
-    @Captor
-    private lateinit var intentFilterCaptor: ArgumentCaptor<IntentFilter>
+    @Mock private lateinit var broadcastDispatcher: BroadcastDispatcher
+    @Mock private lateinit var valueSupplier: () -> Int
+    @Mock private lateinit var observer: Observer<Int>
+    @Captor private lateinit var broadcastReceiverCaptor: ArgumentCaptor<BroadcastReceiver>
+    @Captor private lateinit var intentFilterCaptor: ArgumentCaptor<IntentFilter>
 
     // Run everything immediately
     private val executor = Executor { it.run() }
@@ -88,14 +83,14 @@
     fun testOnActive_broadcastRegistered() {
         liveData.observeForever(observer)
         verify(broadcastDispatcher)
-                .registerReceiver(any(), any(), eq(executor), eq(UserHandle.ALL), anyInt(), any())
+            .registerReceiver(any(), any(), eq(executor), eq(UserHandle.ALL), anyInt(), any())
     }
 
     @Test
     fun testOnActive_intentFilterHasIntent() {
         liveData.observeForever(observer)
-        verify(broadcastDispatcher).registerReceiver(any(), capture(intentFilterCaptor), any(),
-                any(), anyInt(), any())
+        verify(broadcastDispatcher)
+            .registerReceiver(any(), capture(intentFilterCaptor), any(), any(), anyInt(), any())
         assertTrue(intentFilterCaptor.value.hasAction(INTENT))
     }
 
@@ -111,4 +106,4 @@
         liveData.removeObserver(observer)
         verify(broadcastDispatcher).unregisterReceiver(any())
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/WallpaperControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/WallpaperControllerTest.kt
index b13cb72..6271904 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/WallpaperControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/WallpaperControllerTest.kt
@@ -19,10 +19,10 @@
 import android.app.WallpaperInfo
 import android.app.WallpaperManager
 import android.os.IBinder
-import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper.RunWithLooper
 import android.view.View
 import android.view.ViewRootImpl
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.util.mockito.eq
@@ -32,36 +32,30 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.any
 import org.mockito.Mockito.anyFloat
 import org.mockito.Mockito.clearInvocations
 import org.mockito.Mockito.doThrow
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
 import org.mockito.Mockito.mock
 import org.mockito.Mockito.never
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.Mockito.`when`
 import org.mockito.junit.MockitoJUnit
 
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 @RunWithLooper
 @SmallTest
 class WallpaperControllerTest : SysuiTestCase() {
 
-    @Mock
-    private lateinit var wallpaperManager: WallpaperManager
-    @Mock
-    private lateinit var root: View
-    @Mock
-    private lateinit var viewRootImpl: ViewRootImpl
-    @Mock
-    private lateinit var windowToken: IBinder
+    @Mock private lateinit var wallpaperManager: WallpaperManager
+    @Mock private lateinit var root: View
+    @Mock private lateinit var viewRootImpl: ViewRootImpl
+    @Mock private lateinit var windowToken: IBinder
     private val wallpaperRepository = FakeWallpaperRepository()
 
-    @JvmField
-    @Rule
-    val mockitoRule = MockitoJUnit.rule()
+    @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
 
     private lateinit var wallaperController: WallpaperController
 
@@ -92,9 +86,7 @@
 
     @Test
     fun setUnfoldTransitionZoom_defaultUnfoldTransitionIsDisabled_doesNotUpdateWallpaperZoom() {
-        wallpaperRepository.wallpaperInfo.value = createWallpaperInfo(
-            useDefaultTransition = false
-        )
+        wallpaperRepository.wallpaperInfo.value = createWallpaperInfo(useDefaultTransition = false)
 
         wallaperController.setUnfoldTransitionZoom(0.5f)
 
@@ -130,7 +122,8 @@
 
     @Test
     fun setNotificationZoom_exceptionWhenUpdatingZoom_doesNotFail() {
-        doThrow(IllegalArgumentException("test exception")).`when`(wallpaperManager)
+        doThrow(IllegalArgumentException("test exception"))
+            .`when`(wallpaperManager)
             .setWallpaperZoomOut(any(), anyFloat())
 
         wallaperController.setNotificationShadeZoom(0.5f)
@@ -140,8 +133,7 @@
 
     private fun createWallpaperInfo(useDefaultTransition: Boolean = true): WallpaperInfo {
         val info = mock(WallpaperInfo::class.java)
-        whenever(info.shouldUseDefaultUnfoldTransition())
-            .thenReturn(useDefaultTransition)
+        whenever(info.shouldUseDefaultUnfoldTransition()).thenReturn(useDefaultTransition)
         return info
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/animation/AnimationUtilTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/animation/AnimationUtilTest.kt
index 92afb03..b26598c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/animation/AnimationUtilTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/animation/AnimationUtilTest.kt
@@ -16,13 +16,16 @@
 
 package com.android.systemui.util.animation
 
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.google.common.truth.Truth.assertThat
-import org.junit.Test
 import java.lang.IllegalArgumentException
+import org.junit.runner.RunWith
+import org.junit.Test
 
 @SmallTest
+@RunWith(AndroidJUnit4::class)
 class AnimationUtilTest : SysuiTestCase() {
     @Test
     fun getMsForFrames_5frames_returns83() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutorTest.java
index 9dfa14d..7dfac0a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutorTest.java
@@ -22,8 +22,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import android.testing.AndroidTestingRunner;
-
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -39,7 +38,7 @@
 import java.util.List;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class FakeExecutorTest extends SysuiTestCase {
     @Before
     public void setUp() throws Exception {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MessageRouterImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MessageRouterImplTest.java
index 78fc680..48fb745 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MessageRouterImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MessageRouterImplTest.java
@@ -24,8 +24,7 @@
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 
-import android.testing.AndroidTestingRunner;
-
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -39,7 +38,7 @@
 import org.mockito.MockitoAnnotations;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class MessageRouterImplTest extends SysuiTestCase {
     private static final int MESSAGE_A = 0;
     private static final int MESSAGE_B = 1;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MockExecutorHandlerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MockExecutorHandlerTest.kt
index d1d2598..d0c8967 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MockExecutorHandlerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/MockExecutorHandlerTest.kt
@@ -15,7 +15,7 @@
  */
 package com.android.systemui.util.concurrency
 
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.util.time.FakeSystemClock
@@ -26,7 +26,7 @@
 import org.junit.runner.RunWith
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class MockExecutorHandlerTest : SysuiTestCase() {
     /** Test FakeExecutor that receives non-delayed items to execute. */
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/RepeatableExecutorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/RepeatableExecutorTest.java
index 00f37ae..13fff29d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/RepeatableExecutorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/RepeatableExecutorTest.java
@@ -18,8 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.testing.AndroidTestingRunner;
-
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -30,7 +29,7 @@
 import org.junit.runner.RunWith;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class RepeatableExecutorTest extends SysuiTestCase {
 
     private static final int DELAY = 100;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionalCoreStartableTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionalCoreStartableTest.java
index b367a60..37015e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionalCoreStartableTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionalCoreStartableTest.java
@@ -23,8 +23,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.testing.AndroidTestingRunner;
-
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.CoreStartable;
@@ -44,7 +43,7 @@
 import java.util.Set;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class ConditionalCoreStartableTest extends SysuiTestCase {
     public static class FakeConditionalCoreStartable extends ConditionalCoreStartable {
         interface Callback {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/drawable/DrawableSizeTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/drawable/DrawableSizeTest.kt
index ac357ea..b8f5815 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/drawable/DrawableSizeTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/drawable/DrawableSizeTest.kt
@@ -4,7 +4,7 @@
 import android.graphics.Bitmap
 import android.graphics.drawable.BitmapDrawable
 import android.graphics.drawable.ShapeDrawable
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.google.common.truth.Truth.assertThat
@@ -12,7 +12,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 @SmallTest
 class DrawableSizeTest : SysuiTestCase() {
 
@@ -32,14 +32,11 @@
 
     @Test
     fun testDownscaleToSize_drawableSmallerThanRequirement_unchanged() {
-        val drawable = BitmapDrawable(resources,
-                Bitmap.createBitmap(
-                        resources.displayMetrics,
-                        150,
-                        150,
-                        Bitmap.Config.ARGB_8888
-                )
-        )
+        val drawable =
+            BitmapDrawable(
+                resources,
+                Bitmap.createBitmap(resources.displayMetrics, 150, 150, Bitmap.Config.ARGB_8888)
+            )
         val result = DrawableSize.downscaleToSize(resources, drawable, 300, 300)
         assertThat(result).isSameInstanceAs(drawable)
     }
@@ -48,14 +45,11 @@
     fun testDownscaleToSize_drawableLargerThanRequirementWithDensity_resized() {
         // This bitmap would actually fail to resize if the method doesn't check for
         // bitmap dimensions inside drawable.
-        val drawable = BitmapDrawable(resources,
-                Bitmap.createBitmap(
-                        resources.displayMetrics,
-                        150,
-                        75,
-                        Bitmap.Config.ARGB_8888
-                )
-        )
+        val drawable =
+            BitmapDrawable(
+                resources,
+                Bitmap.createBitmap(resources.displayMetrics, 150, 75, Bitmap.Config.ARGB_8888)
+            )
 
         val result = DrawableSize.downscaleToSize(resources, drawable, 75, 75)
         assertThat(result).isNotSameInstanceAs(drawable)
@@ -65,9 +59,9 @@
 
     @Test
     fun testDownscaleToSize_drawableAnimated_unchanged() {
-        val drawable = resources.getDrawable(android.R.drawable.stat_sys_download,
-                resources.newTheme())
+        val drawable =
+            resources.getDrawable(android.R.drawable.stat_sys_download, resources.newTheme())
         val result = DrawableSize.downscaleToSize(resources, drawable, 1, 1)
         assertThat(result).isSameInstanceAs(drawable)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/FlowUtilTests.kt b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/FlowUtilTests.kt
index 7d0d57b..e2ce50c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/FlowUtilTests.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/FlowUtilTests.kt
@@ -16,7 +16,7 @@
 
 package com.android.systemui.util.kotlin
 
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.util.time.FakeSystemClock
@@ -47,7 +47,7 @@
 import org.junit.runner.RunWith
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class PairwiseFlowTest : SysuiTestCase() {
     @Test
     fun simple() = runBlocking {
@@ -89,7 +89,9 @@
                         initRun = true
                         "initial"
                     }
-                ) { prev: String, next: String -> "$prev|$next" }
+                ) { prev: String, next: String ->
+                    "$prev|$next"
+                }
             )
             .emitsExactly("initial|val1", "val1|val2")
         assertThat(initRun).isTrue()
@@ -104,7 +106,9 @@
                         initRun = true
                         "initial"
                     }
-                ) { prev: String, next: String -> "$prev|$next" }
+                ) { prev: String, next: String ->
+                    "$prev|$next"
+                }
             )
             .emitsNothing()
         // Even though the flow will not emit anything, the initial value function should still get
@@ -120,7 +124,9 @@
                 initRun = true
                 "initial"
             }
-        ) { prev: String, next: String -> "$prev|$next" }
+        ) { prev: String, next: String ->
+            "$prev|$next"
+        }
 
         // Since the flow isn't collected, ensure [initialValueFun] isn't run.
         assertThat(initRun).isFalse()
@@ -146,7 +152,7 @@
 }
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class SetChangesFlowTest : SysuiTestCase() {
     @Test
     fun simple() = runBlocking {
@@ -198,7 +204,7 @@
 }
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class SampleFlowTest : SysuiTestCase() {
     @Test
     fun simple() = runBlocking {
@@ -240,7 +246,7 @@
 
 @OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class ThrottleFlowTest : SysuiTestCase() {
 
     @Test
@@ -248,13 +254,16 @@
         // Arrange
         val choreographer = createChoreographer(this)
         val output = mutableListOf<Int>()
-        val collectJob = backgroundScope.launch {
-            flow {
-                emit(1)
-                delay(1000)
-                emit(2)
-            }.throttle(1000, choreographer.fakeClock).toList(output)
-        }
+        val collectJob =
+            backgroundScope.launch {
+                flow {
+                        emit(1)
+                        delay(1000)
+                        emit(2)
+                    }
+                    .throttle(1000, choreographer.fakeClock)
+                    .toList(output)
+            }
 
         // Act
         choreographer.advanceAndRun(0)
@@ -283,13 +292,16 @@
         // Arrange
         val choreographer = createChoreographer(this)
         val output = mutableListOf<Int>()
-        val collectJob = backgroundScope.launch {
-            flow {
-                emit(1)
-                delay(500)
-                emit(2)
-            }.throttle(1000, choreographer.fakeClock).toList(output)
-        }
+        val collectJob =
+            backgroundScope.launch {
+                flow {
+                        emit(1)
+                        delay(500)
+                        emit(2)
+                    }
+                    .throttle(1000, choreographer.fakeClock)
+                    .toList(output)
+            }
 
         // Act
         choreographer.advanceAndRun(0)
@@ -319,15 +331,18 @@
         // Arrange
         val choreographer = createChoreographer(this)
         val output = mutableListOf<Int>()
-        val collectJob = backgroundScope.launch {
-            flow {
-                emit(1)
-                delay(500)
-                emit(2)
-                delay(500)
-                emit(3)
-            }.throttle(1000, choreographer.fakeClock).toList(output)
-        }
+        val collectJob =
+            backgroundScope.launch {
+                flow {
+                        emit(1)
+                        delay(500)
+                        emit(2)
+                        delay(500)
+                        emit(3)
+                    }
+                    .throttle(1000, choreographer.fakeClock)
+                    .toList(output)
+            }
 
         // Act
         choreographer.advanceAndRun(0)
@@ -357,15 +372,18 @@
         // Arrange
         val choreographer = createChoreographer(this)
         val output = mutableListOf<Int>()
-        val collectJob = backgroundScope.launch {
-            flow {
-                emit(1)
-                delay(500)
-                emit(2)
-                delay(250)
-                emit(3)
-            }.throttle(1000, choreographer.fakeClock).toList(output)
-        }
+        val collectJob =
+            backgroundScope.launch {
+                flow {
+                        emit(1)
+                        delay(500)
+                        emit(2)
+                        delay(250)
+                        emit(3)
+                    }
+                    .throttle(1000, choreographer.fakeClock)
+                    .toList(output)
+            }
 
         // Act
         choreographer.advanceAndRun(0)
@@ -391,15 +409,16 @@
         collectJob.cancel()
     }
 
-    private fun createChoreographer(testScope: TestScope) = object {
-        val fakeClock = FakeSystemClock()
+    private fun createChoreographer(testScope: TestScope) =
+        object {
+            val fakeClock = FakeSystemClock()
 
-        fun advanceAndRun(millis: Long) {
-            fakeClock.advanceTime(millis)
-            testScope.advanceTimeBy(millis)
-            testScope.runCurrent()
+            fun advanceAndRun(millis: Long) {
+                fakeClock.advanceTime(millis)
+                testScope.advanceTimeBy(millis)
+                testScope.runCurrent()
+            }
         }
-    }
 }
 
 private fun <T> assertThatFlow(flow: Flow<T>) =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/IpcSerializerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/IpcSerializerTest.kt
index 4ca1fd3..c31b287 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/IpcSerializerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/IpcSerializerTest.kt
@@ -16,7 +16,7 @@
 
 package com.android.systemui.util.kotlin
 
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import java.util.concurrent.atomic.AtomicLong
@@ -31,43 +31,42 @@
 import org.junit.runner.RunWith
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class IpcSerializerTest : SysuiTestCase() {
 
     private val serializer = IpcSerializer()
 
     @Ignore("b/253046405")
     @Test
-    fun serializeManyIncomingIpcs(): Unit = runBlocking(Dispatchers.Main.immediate) {
-        val processor = launch(start = CoroutineStart.LAZY) { serializer.process() }
-        withContext(Dispatchers.IO) {
-            val lastEvaluatedTime = AtomicLong(System.currentTimeMillis())
-            // First, launch many serialization requests in parallel
-            repeat(100_000) {
-                launch(Dispatchers.Unconfined) {
-                    val enqueuedTime = System.currentTimeMillis()
-                    serializer.runSerialized {
-                        val last = lastEvaluatedTime.getAndSet(enqueuedTime)
-                        assertTrue(
-                            "expected $last less than or equal to $enqueuedTime ",
-                            last <= enqueuedTime,
-                        )
+    fun serializeManyIncomingIpcs(): Unit =
+        runBlocking(Dispatchers.Main.immediate) {
+            val processor = launch(start = CoroutineStart.LAZY) { serializer.process() }
+            withContext(Dispatchers.IO) {
+                val lastEvaluatedTime = AtomicLong(System.currentTimeMillis())
+                // First, launch many serialization requests in parallel
+                repeat(100_000) {
+                    launch(Dispatchers.Unconfined) {
+                        val enqueuedTime = System.currentTimeMillis()
+                        serializer.runSerialized {
+                            val last = lastEvaluatedTime.getAndSet(enqueuedTime)
+                            assertTrue(
+                                "expected $last less than or equal to $enqueuedTime ",
+                                last <= enqueuedTime,
+                            )
+                        }
                     }
                 }
+                // Then, process them all in the order they came in.
+                processor.start()
             }
-            // Then, process them all in the order they came in.
-            processor.start()
+            // All done, stop processing
+            processor.cancel()
         }
-        // All done, stop processing
-        processor.cancel()
-    }
 
     @Test(timeout = 5000)
     fun serializeOnOneThread_doesNotDeadlock() = runBlocking {
         val job = launch { serializer.process() }
-        repeat(100) {
-            serializer.runSerializedBlocking { }
-        }
+        repeat(100) { serializer.runSerializedBlocking {} }
         job.cancel()
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/PackageManagerExtComponentEnabledTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/PackageManagerExtComponentEnabledTest.kt
index 2013bb0..8bfff9c2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/PackageManagerExtComponentEnabledTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/PackageManagerExtComponentEnabledTest.kt
@@ -27,13 +27,13 @@
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-import org.junit.runners.Parameterized.Parameters
 import org.mockito.Mock
 import org.mockito.MockitoAnnotations
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
 
 @SmallTest
-@RunWith(Parameterized::class)
+@RunWith(ParameterizedAndroidJunit4::class)
 internal class PackageManagerExtComponentEnabledTest(private val testCase: TestCase) :
     SysuiTestCase() {
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/SuspendUtilTests.kt b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/SuspendUtilTests.kt
index 6848b83..b2f7c1a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/SuspendUtilTests.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/kotlin/SuspendUtilTests.kt
@@ -16,7 +16,7 @@
 
 package com.android.systemui.util.kotlin
 
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.google.common.truth.Truth.assertThat
@@ -28,7 +28,7 @@
 import org.junit.runner.RunWith
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class RaceSuspendTest : SysuiTestCase() {
     @Test
     fun raceSimple() = runBlocking {
@@ -46,10 +46,11 @@
     @Test
     fun raceImmediate() = runBlocking {
         assertThat(
-            race<Int>(
-                { 1 },
-                { 2 },
+                race<Int>(
+                    { 1 },
+                    { 2 },
+                )
             )
-        ).isEqualTo(1)
+            .isEqualTo(1)
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/PostureDependentProximitySensorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/PostureDependentProximitySensorTest.java
index 84129be..300c298 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/PostureDependentProximitySensorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/PostureDependentProximitySensorTest.java
@@ -26,9 +26,9 @@
 
 import android.content.res.Resources;
 import android.hardware.Sensor;
-import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -46,7 +46,7 @@
 import org.mockito.MockitoAnnotations;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 @TestableLooper.RunWithLooper
 public class PostureDependentProximitySensorTest extends SysuiTestCase {
     @Mock private Resources mResources;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java
index 19dbf9a..5dd008a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java
@@ -23,9 +23,9 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -40,7 +40,7 @@
 import java.util.function.Consumer;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 @TestableLooper.RunWithLooper
 public class ProximityCheckTest extends SysuiTestCase {
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplDualTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplDualTest.java
index 5e75578..0eab74e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplDualTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplDualTest.java
@@ -24,9 +24,9 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -40,7 +40,7 @@
 import org.mockito.MockitoAnnotations;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 @TestableLooper.RunWithLooper
 public class ProximitySensorImplDualTest extends SysuiTestCase {
     private ProximitySensor mProximitySensor;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplSingleTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplSingleTest.java
index 752cd32..f44c842 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplSingleTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorImplSingleTest.java
@@ -21,9 +21,9 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -40,7 +40,7 @@
  * Tests for ProximitySensor that rely on a single hardware sensor.
  */
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 @TestableLooper.RunWithLooper
 public class ProximitySensorImplSingleTest extends SysuiTestCase {
     private ProximitySensor mProximitySensor;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
index 8d26c87..a54afad 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
@@ -30,8 +30,8 @@
 import android.content.pm.UserInfo;
 import android.os.IBinder;
 import android.os.UserHandle;
-import android.testing.AndroidTestingRunner;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -49,7 +49,7 @@
 import java.util.Objects;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class ObservableServiceConnectionTest extends SysuiTestCase {
     static class Foo {
         int mValue;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/service/PackageObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/service/PackageObserverTest.java
index a2fd288..a70b00c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/service/PackageObserverTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/service/PackageObserverTest.java
@@ -24,8 +24,8 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.testing.AndroidTestingRunner;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -38,7 +38,7 @@
 import org.mockito.MockitoAnnotations;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class PackageObserverTest extends SysuiTestCase {
     @Mock
     Context mContext;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
index 55c49ee..ef10fdf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
@@ -19,8 +19,7 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
-import android.testing.AndroidTestingRunner;
-
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -37,7 +36,7 @@
 import org.mockito.MockitoAnnotations;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class PersistentConnectionManagerTest extends SysuiTestCase {
     private static final int MAX_RETRIES = 5;
     private static final int RETRY_DELAY_MS = 1000;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
index f65caee2..99f6303 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
@@ -28,8 +28,8 @@
 import android.database.ContentObserver;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.testing.AndroidTestingRunner;
 
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
@@ -44,7 +44,7 @@
 import java.util.Map;
 
 @SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
 public class FakeSettingsTest extends SysuiTestCase {
     @Mock
     ContentObserver mContentObserver;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/settings/repository/UserAwareSecureSettingsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/settings/repository/UserAwareSecureSettingsRepositoryTest.kt
index 913759f..88b2630 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/settings/repository/UserAwareSecureSettingsRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/settings/repository/UserAwareSecureSettingsRepositoryTest.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.util.settings.repository
 
 import android.content.pm.UserInfo
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.coroutines.collectLastValue
@@ -33,11 +34,10 @@
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
 
 @OptIn(ExperimentalCoroutinesApi::class)
 @SmallTest
-@RunWith(JUnit4::class)
+@RunWith(AndroidJUnit4::class)
 class UserAwareSecureSettingsRepositoryTest : SysuiTestCase() {
 
     private val dispatcher = StandardTestDispatcher()
@@ -48,11 +48,12 @@
 
     @Before
     fun setup() {
-        repository = UserAwareSecureSettingsRepositoryImpl(
-            secureSettings,
-            userRepository,
-            dispatcher,
-        )
+        repository =
+            UserAwareSecureSettingsRepositoryImpl(
+                secureSettings,
+                userRepository,
+                dispatcher,
+            )
         userRepository.setUserInfos(USER_INFOS)
         setSettingValueForUser(enabled = true, userInfo = SETTING_ENABLED_USER)
         setSettingValueForUser(enabled = false, userInfo = SETTING_DISABLED_USER)
@@ -105,4 +106,4 @@
         val SETTING_DISABLED_USER = UserInfo(/* id= */ 1, "user2", /* flags= */ 0)
         val USER_INFOS = listOf(SETTING_ENABLED_USER, SETTING_DISABLED_USER)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/ui/AnimatedValueTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/ui/AnimatedValueTest.kt
index 94100fe..6637d5f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/ui/AnimatedValueTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/ui/AnimatedValueTest.kt
@@ -17,7 +17,7 @@
 
 package com.android.systemui.util.ui
 
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.coroutines.collectLastValue
@@ -30,7 +30,7 @@
 import org.junit.runner.RunWith
 
 @SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
 class AnimatedValueTest : SysuiTestCase() {
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/view/ViewUtilTest.kt b/packages/SystemUI/tests/src/com/android/systemui/util/view/ViewUtilTest.kt
index e3cd9b2..3dcb828 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/view/ViewUtilTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/view/ViewUtilTest.kt
@@ -19,17 +19,20 @@
 import android.graphics.Rect
 import android.view.View
 import android.widget.TextView
+import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.util.mockito.any
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
+import org.junit.runner.RunWith
 import org.mockito.Mockito.doAnswer
 import org.mockito.Mockito.spy
 import org.mockito.Mockito.`when`
 
 @SmallTest
+@RunWith(AndroidJUnit4::class)
 class ViewUtilTest : SysuiTestCase() {
     private val viewUtil = ViewUtil()
     private lateinit var view: View
@@ -45,11 +48,13 @@
         location[1] = VIEW_TOP
         `when`(view.locationOnScreen).thenReturn(location)
         doAnswer { invocation ->
-            val pos = invocation.arguments[0] as IntArray
-            pos[0] = VIEW_LEFT
-            pos[1] = VIEW_TOP
-            null
-        }.`when`(view).getLocationInWindow(any())
+                val pos = invocation.arguments[0] as IntArray
+                pos[0] = VIEW_LEFT
+                pos[1] = VIEW_TOP
+                null
+            }
+            .`when`(view)
+            .getLocationInWindow(any())
     }
 
     @Test
@@ -59,9 +64,8 @@
 
     @Test
     fun touchIsWithinView_onTopLeftCorner_returnsTrue() {
-        assertThat(viewUtil.touchIsWithinView(
-            view, VIEW_LEFT.toFloat(), VIEW_TOP.toFloat())
-        ).isTrue()
+        assertThat(viewUtil.touchIsWithinView(view, VIEW_LEFT.toFloat(), VIEW_TOP.toFloat()))
+            .isTrue()
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
index ed07ad2..207c35d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
@@ -35,15 +35,18 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 
 import java.util.List;
 
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
+import platform.test.runner.parameterized.Parameters;
+
+
 @SmallTest
-@RunWith(Parameterized.class)
+@RunWith(ParameterizedAndroidJunit4.class)
 public class WakeLockTest extends SysuiTestCase {
 
-    @Parameterized.Parameters(name = "{0}")
+    @Parameters(name = "{0}")
     public static List<FlagsParameterization> getFlags() {
         return FlagsParameterization.allCombinationsOf(
                 Flags.FLAG_DELAYED_WAKELOCK_RELEASE_ON_BACKGROUND_THREAD);
@@ -114,4 +117,4 @@
         // shouldn't throw an exception on production builds
         mWakeLock.release(WHY);
     }
-}
\ No newline at end of file
+}
