diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-04 01:05:15 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-04 01:05:15 +0000 |
commit | 288ea372da26c9a1bf254fa85b8faf14aaa75a0a (patch) | |
tree | 379110a63dc18cab24c0f5f3f2f99401c60b8b5c | |
parent | 6494a96030b5a51cf6fe93c554cfacb0db808f99 (diff) | |
parent | b8cb19322f9886135f259d694812dfb8f6b430ab (diff) | |
download | robolectric-shadows-android12-release.tar.gz |
Snap for 7423841 from b8cb19322f9886135f259d694812dfb8f6b430ab to sc-releaseandroid-vts-12.0_r9android-vts-12.0_r8android-vts-12.0_r7android-vts-12.0_r6android-vts-12.0_r5android-vts-12.0_r4android-vts-12.0_r3android-vts-12.0_r2android-vts-12.0_r12android-vts-12.0_r11android-vts-12.0_r10android-vts-12.0_r1android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-platform-12.0.0_r1android-cts-12.0_r9android-cts-12.0_r8android-cts-12.0_r7android-cts-12.0_r6android-cts-12.0_r5android-cts-12.0_r4android-cts-12.0_r3android-cts-12.0_r2android-cts-12.0_r12android-cts-12.0_r11android-cts-12.0_r10android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-tests-releaseandroid12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-release
Change-Id: I9ce6d24063e0bf0d69ee2be94b2e8ea60669225b
-rw-r--r-- | shadows/framework/src/main/java/org/robolectric/shadows/ShadowPermissionChecker.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPermissionChecker.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPermissionChecker.java new file mode 100644 index 000000000..b7786510f --- /dev/null +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPermissionChecker.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2021 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. + */ + +package org.robolectric.shadows; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.AttributionSource; +import android.content.Context; +import android.content.PermissionChecker; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +import java.util.HashMap; +import java.util.Map; + +/** Shadow class of {@link PermissionChecker}. */ +@Implements(PermissionChecker.class) +public class ShadowPermissionChecker { + + private static final Map<String, Map<String, Integer>> RESULTS = new HashMap<>(); + + /** Set the result of permission check for a specific permission. */ + public static void setResult(String packageName, String permission, int result) { + if (!RESULTS.containsKey(packageName)) { + RESULTS.put(packageName, new HashMap<>()); + } + RESULTS.get(packageName).put(permission, result); + } + + /** Check the permission of calling package. */ + @Implementation + public static int checkCallingPermissionForDataDelivery( + Context context, + String permission, + String packageName, + String attributionTag, + String message) { + return RESULTS.containsKey(packageName) && RESULTS.get(packageName).containsKey(permission) + ? RESULTS.get(packageName).get(permission) + : PermissionChecker.checkCallingPermissionForDataDelivery( + context, permission, packageName, attributionTag, message); + } + + /** Check general permission. */ + @Implementation + public static int checkPermissionForDataDelivery( + Context context, + String permission, + int pid, + int uid, + String packageName, + String attributionTag, + String message) { + return RESULTS.containsKey(packageName) && RESULTS.get(packageName).containsKey(permission) + ? RESULTS.get(packageName).get(permission) + : PermissionChecker.checkPermissionForDataDelivery( + context, permission, pid, uid, packageName, attributionTag, message); + } + + /** Check general permission. */ + @Implementation + public static int checkPermissionForPreflight(@NonNull Context context, + @NonNull String permission, int pid, int uid, @Nullable String packageName) { + return checkPermissionForPreflight(context, permission, new AttributionSource( + uid, packageName, null /*attributionTag*/)); + } + + /** Check general permission. */ + @Implementation + public static int checkPermissionForPreflight(@NonNull Context context, + @NonNull String permission, @NonNull AttributionSource attributionSource) { + final String packageName = attributionSource.getPackageName(); + return RESULTS.containsKey(packageName) && RESULTS.get(packageName).containsKey(permission) + ? RESULTS.get(packageName).get(permission) + : PermissionChecker.checkPermissionForPreflight( + context, permission, attributionSource); + } +} |