Skip to content

Commit

Permalink
Merge pull request #6884 from utzcoz/only-using-AttributionSource-for…
Browse files Browse the repository at this point in the history
…-compile-SDK-31-and-above

Only using AttributionSource for compile sdk 31 and above
  • Loading branch information
hoisie committed Nov 27, 2021
2 parents bda68fd + e54a4cc commit 2ca5469
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 15 deletions.
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(
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

0 comments on commit 2ca5469

Please sign in to comment.