diff --git a/integration_tests/compat-target29/build.gradle b/integration_tests/compat-target29/build.gradle index 414cebd09b5..f452c2d6060 100644 --- a/integration_tests/compat-target29/build.gradle +++ b/integration_tests/compat-target29/build.gradle @@ -13,7 +13,7 @@ dependencies { testCompileOnly AndroidSdk.Q.coordinates testRuntime AndroidSdk.Q.coordinates - testImplementation("androidx.test:core:$axtVersion") + testImplementation "androidx.test:core:$axtVersion" testImplementation "junit:junit:$junitVersion" testImplementation "com.google.truth:truth:$truthVersion" } \ No newline at end of file diff --git a/integration_tests/compat-target29/src/test/java/org/robolectric/integration/compat/target29/Target29CompatibilityTest.kt b/integration_tests/compat-target29/src/test/java/org/robolectric/integration/compat/target29/Target29CompatibilityTest.kt index a44accf2be2..2bea90de386 100644 --- a/integration_tests/compat-target29/src/test/java/org/robolectric/integration/compat/target29/Target29CompatibilityTest.kt +++ b/integration_tests/compat-target29/src/test/java/org/robolectric/integration/compat/target29/Target29CompatibilityTest.kt @@ -5,14 +5,22 @@ import androidx.test.core.app.ApplicationProvider import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith +import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class Target29CompatibilityTest { + private val application = ApplicationProvider.getApplicationContext(); + @Test fun `Initialize LocationManager succeed`() { - val application = ApplicationProvider.getApplicationContext() val locationManager = application.getSystemService(Context.LOCATION_SERVICE) assertThat(locationManager).isNotNull() } + + @Test + fun `Initialize AppOpsManager succeed`() { + val appOpsManager = application.getSystemService(Context.APP_OPS_SERVICE); + assertThat(appOpsManager).isNotNull(); + } } diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowAppOpsManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowAppOpsManager.java index 0891a016300..9e44aefc266 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowAppOpsManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowAppOpsManager.java @@ -30,8 +30,10 @@ import android.util.ArrayMap; import android.util.LongSparseArray; import android.util.LongSparseLongArray; +import androidx.annotation.RequiresApi; import com.android.internal.app.IAppOpsService; import com.google.auto.value.AutoValue; +import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; @@ -394,17 +396,17 @@ protected int noteProxyOpNoThrow( return checkOpNoThrow(op, proxiedUid, proxiedPackageName); } + @RequiresApi(api = Build.VERSION_CODES.S) @Implementation(minSdk = Build.VERSION_CODES.S) protected int noteProxyOpNoThrow( - int op, - AttributionSource attributionSource, - String message, - boolean ignoredSkipProxyOperation) { + int op, Object attributionSource, String message, boolean ignoredSkipProxyOperation) { + Preconditions.checkArgument(attributionSource instanceof AttributionSource); + AttributionSource castedAttributionSource = (AttributionSource) attributionSource; return noteProxyOpNoThrow( op, - attributionSource.getNextPackageName(), - attributionSource.getNextUid(), - attributionSource.getNextAttributionTag(), + castedAttributionSource.getNextPackageName(), + castedAttributionSource.getNextUid(), + castedAttributionSource.getNextAttributionTag(), message); }