Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only using AttributionSource for compile sdk 31 and above #6884

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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -9,7 +9,7 @@ buildscript {

dependencies {
gradle
classpath 'com.android.tools.build:gradle:7.1.0-beta03'
classpath 'com.android.tools.build:gradle:7.1.0-beta04'
classpath 'net.ltgt.gradle:gradle-errorprone-plugin:1.3.0'
classpath 'com.netflix.nebula:gradle-aggregate-javadocs-plugin:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31"
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/build.gradle
Expand Up @@ -14,5 +14,5 @@ dependencies {
api "com.google.guava:guava:27.0.1-jre"
api 'org.jetbrains:annotations:16.0.2'
implementation "org.ow2.asm:asm-tree:9.2"
implementation 'com.android.tools.build:gradle:7.1.0-beta03'
implementation 'com.android.tools.build:gradle:7.1.0-beta04'
}
2 changes: 1 addition & 1 deletion integration_tests/compat-target29/build.gradle
Expand Up @@ -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"
}
Expand Up @@ -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<Context>();

@Test
fun `Initialize LocationManager succeed`() {
val application = ApplicationProvider.getApplicationContext<Context>()
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();
}
}
Expand Up @@ -156,7 +156,7 @@ public Void visitType(TypeElement shadowType, Element parent) {
AnnotationValue looseSignaturesAttr =
Helpers.getAnnotationTypeMirrorValue(am, "looseSignatures");
boolean looseSignatures =
looseSignaturesAttr == null ? false : (Boolean) looseSignaturesAttr.getValue();
looseSignaturesAttr != null && (Boolean) looseSignaturesAttr.getValue();
validateShadowMethods(actualType, shadowType, minSdk, maxSdk, looseSignatures);

modelBuilder.addShadowType(shadowType, actualType,
Expand Down
Expand Up @@ -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;
Expand All @@ -57,7 +59,7 @@
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;

@Implements(value = AppOpsManager.class)
@Implements(value = AppOpsManager.class, looseSignatures = true)
public class ShadowAppOpsManager {

// OpEntry fields that the shadow doesn't currently allow the test to configure.
Expand Down Expand Up @@ -394,18 +396,21 @@ protected int noteProxyOpNoThrow(
return checkOpNoThrow(op, proxiedUid, proxiedPackageName);
}

@RequiresApi(api = Build.VERSION_CODES.S)
@Implementation(minSdk = Build.VERSION_CODES.S)
protected int noteProxyOpNoThrow(
utzcoz marked this conversation as resolved.
Show resolved Hide resolved
int op,
AttributionSource attributionSource,
String message,
boolean ignoredSkipProxyOperation) {
Object op, Object attributionSource, Object message, Object ignoredSkipProxyOperation) {
Preconditions.checkArgument(op instanceof Integer);
Preconditions.checkArgument(attributionSource instanceof AttributionSource);
Preconditions.checkArgument(message == null || message instanceof String);
Preconditions.checkArgument(ignoredSkipProxyOperation instanceof Boolean);
AttributionSource castedAttributionSource = (AttributionSource) attributionSource;
return noteProxyOpNoThrow(
op,
attributionSource.getNextPackageName(),
attributionSource.getNextUid(),
attributionSource.getNextAttributionTag(),
message);
(int) op,
castedAttributionSource.getNextPackageName(),
castedAttributionSource.getNextUid(),
castedAttributionSource.getNextAttributionTag(),
(String) message);
}

@Implementation(minSdk = KITKAT)
Expand Down