Loading services/core/java/com/android/server/TelephonyRegistry.java +14 −0 Original line number Diff line number Diff line Loading @@ -2873,6 +2873,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { // If we're enforcing fine starting in Q, we also want to enforce coarse even for // older SDK versions. locationQueryBuilder.setMinSdkVersionForCoarse(0); locationQueryBuilder.setMinSdkVersionForCoarse(0); locationQueryBuilder.setMinSdkVersionForEnforcement(0); shouldCheckLocationPermissions = true; } Loading Loading @@ -3001,6 +3003,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } } private boolean checkFineLocationAccess(Record r) { return checkFineLocationAccess(r, Build.VERSION_CODES.BASE); } private boolean checkCoarseLocationAccess(Record r) { return checkCoarseLocationAccess(r, Build.VERSION_CODES.BASE); } /** * Note -- this method should only be used at the site of a permission check if you need to * explicitly allow apps below a certain SDK level access regardless of location permissions. Loading @@ -3016,6 +3026,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .setMethod("TelephonyRegistry push") .setLogAsInfo(true) // we don't need to log an error every time we push .setMinSdkVersionForFine(minSdk) .setMinSdkVersionForCoarse(minSdk) .setMinSdkVersionForEnforcement(minSdk) .build(); return Binder.withCleanCallingIdentity(() -> { Loading @@ -3040,6 +3052,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .setMethod("TelephonyRegistry push") .setLogAsInfo(true) // we don't need to log an error every time we push .setMinSdkVersionForCoarse(minSdk) .setMinSdkVersionForFine(Integer.MAX_VALUE) .setMinSdkVersionForEnforcement(minSdk) .build(); return Binder.withCleanCallingIdentity(() -> { Loading telephony/common/android/telephony/LocationAccessPolicy.java +50 −4 Original line number Diff line number Diff line Loading @@ -86,8 +86,9 @@ public final class LocationAccessPolicy { private String mCallingFeatureId; private int mCallingUid; private int mCallingPid; private int mMinSdkVersionForCoarse = Integer.MAX_VALUE; private int mMinSdkVersionForFine = Integer.MAX_VALUE; private int mMinSdkVersionForCoarse = -1; private int mMinSdkVersionForFine = -1; private int mMinSdkVersionForEnforcement = -1; private boolean mLogAsInfo = false; private String mMethod; Loading Loading @@ -125,7 +126,14 @@ public final class LocationAccessPolicy { /** * Apps that target at least this sdk version will be checked for coarse location * permission. Defaults to INT_MAX (which means don't check) * permission. This method MUST be called before calling {@link #build()}. Otherwise, an * {@link IllegalArgumentException} will be thrown. * * Additionally, if both the argument to this method and * {@link #setMinSdkVersionForFine} are greater than {@link Build.VERSION_CODES#BASE}, * you must call {@link #setMinSdkVersionForEnforcement} with the min of the two to * affirm that you do not want any location checks below a certain SDK version. * Otherwise, {@link #build} will throw an {@link IllegalArgumentException}. */ public Builder setMinSdkVersionForCoarse( int minSdkVersionForCoarse) { Loading @@ -135,7 +143,14 @@ public final class LocationAccessPolicy { /** * Apps that target at least this sdk version will be checked for fine location * permission. Defaults to INT_MAX (which means don't check) * permission. This method MUST be called before calling {@link #build()}. * Otherwise, an {@link IllegalArgumentException} will be thrown. * * Additionally, if both the argument to this method and * {@link #setMinSdkVersionForCoarse} are greater than {@link Build.VERSION_CODES#BASE}, * you must call {@link #setMinSdkVersionForEnforcement} with the min of the two to * affirm that you do not want any location checks below a certain SDK version. * Otherwise, {@link #build} will throw an {@link IllegalArgumentException}. */ public Builder setMinSdkVersionForFine( int minSdkVersionForFine) { Loading @@ -143,6 +158,17 @@ public final class LocationAccessPolicy { return this; } /** * If both the argument to {@link #setMinSdkVersionForFine} and * {@link #setMinSdkVersionForCoarse} are greater than {@link Build.VERSION_CODES#BASE}, * this method must be called with the min of the two to * affirm that you do not want any location checks below a certain SDK version. */ public Builder setMinSdkVersionForEnforcement(int minSdkVersionForEnforcement) { mMinSdkVersionForEnforcement = minSdkVersionForEnforcement; return this; } /** * Optional, for logging purposes only. */ Loading @@ -161,6 +187,26 @@ public final class LocationAccessPolicy { /** build LocationPermissionQuery */ public LocationPermissionQuery build() { if (mMinSdkVersionForCoarse < 0 || mMinSdkVersionForFine < 0) { throw new IllegalArgumentException("Must specify min sdk versions for" + " enforcement for both coarse and fine permissions"); } if (mMinSdkVersionForFine > Build.VERSION_CODES.BASE && mMinSdkVersionForCoarse > Build.VERSION_CODES.BASE) { if (mMinSdkVersionForEnforcement != Math.min( mMinSdkVersionForCoarse, mMinSdkVersionForFine)) { throw new IllegalArgumentException("setMinSdkVersionForEnforcement must be" + " called."); } } if (mMinSdkVersionForFine < mMinSdkVersionForCoarse) { throw new IllegalArgumentException("Since fine location permission includes" + " access to coarse location, the min sdk level for enforcement of" + " the fine location permission must not be less than the min sdk" + " level for enforcement of the coarse location permission."); } return new LocationPermissionQuery(mCallingPackage, mCallingFeatureId, mCallingUid, mCallingPid, mMinSdkVersionForCoarse, mMinSdkVersionForFine, mLogAsInfo, mMethod); Loading Loading
services/core/java/com/android/server/TelephonyRegistry.java +14 −0 Original line number Diff line number Diff line Loading @@ -2873,6 +2873,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { // If we're enforcing fine starting in Q, we also want to enforce coarse even for // older SDK versions. locationQueryBuilder.setMinSdkVersionForCoarse(0); locationQueryBuilder.setMinSdkVersionForCoarse(0); locationQueryBuilder.setMinSdkVersionForEnforcement(0); shouldCheckLocationPermissions = true; } Loading Loading @@ -3001,6 +3003,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } } private boolean checkFineLocationAccess(Record r) { return checkFineLocationAccess(r, Build.VERSION_CODES.BASE); } private boolean checkCoarseLocationAccess(Record r) { return checkCoarseLocationAccess(r, Build.VERSION_CODES.BASE); } /** * Note -- this method should only be used at the site of a permission check if you need to * explicitly allow apps below a certain SDK level access regardless of location permissions. Loading @@ -3016,6 +3026,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .setMethod("TelephonyRegistry push") .setLogAsInfo(true) // we don't need to log an error every time we push .setMinSdkVersionForFine(minSdk) .setMinSdkVersionForCoarse(minSdk) .setMinSdkVersionForEnforcement(minSdk) .build(); return Binder.withCleanCallingIdentity(() -> { Loading @@ -3040,6 +3052,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .setMethod("TelephonyRegistry push") .setLogAsInfo(true) // we don't need to log an error every time we push .setMinSdkVersionForCoarse(minSdk) .setMinSdkVersionForFine(Integer.MAX_VALUE) .setMinSdkVersionForEnforcement(minSdk) .build(); return Binder.withCleanCallingIdentity(() -> { Loading
telephony/common/android/telephony/LocationAccessPolicy.java +50 −4 Original line number Diff line number Diff line Loading @@ -86,8 +86,9 @@ public final class LocationAccessPolicy { private String mCallingFeatureId; private int mCallingUid; private int mCallingPid; private int mMinSdkVersionForCoarse = Integer.MAX_VALUE; private int mMinSdkVersionForFine = Integer.MAX_VALUE; private int mMinSdkVersionForCoarse = -1; private int mMinSdkVersionForFine = -1; private int mMinSdkVersionForEnforcement = -1; private boolean mLogAsInfo = false; private String mMethod; Loading Loading @@ -125,7 +126,14 @@ public final class LocationAccessPolicy { /** * Apps that target at least this sdk version will be checked for coarse location * permission. Defaults to INT_MAX (which means don't check) * permission. This method MUST be called before calling {@link #build()}. Otherwise, an * {@link IllegalArgumentException} will be thrown. * * Additionally, if both the argument to this method and * {@link #setMinSdkVersionForFine} are greater than {@link Build.VERSION_CODES#BASE}, * you must call {@link #setMinSdkVersionForEnforcement} with the min of the two to * affirm that you do not want any location checks below a certain SDK version. * Otherwise, {@link #build} will throw an {@link IllegalArgumentException}. */ public Builder setMinSdkVersionForCoarse( int minSdkVersionForCoarse) { Loading @@ -135,7 +143,14 @@ public final class LocationAccessPolicy { /** * Apps that target at least this sdk version will be checked for fine location * permission. Defaults to INT_MAX (which means don't check) * permission. This method MUST be called before calling {@link #build()}. * Otherwise, an {@link IllegalArgumentException} will be thrown. * * Additionally, if both the argument to this method and * {@link #setMinSdkVersionForCoarse} are greater than {@link Build.VERSION_CODES#BASE}, * you must call {@link #setMinSdkVersionForEnforcement} with the min of the two to * affirm that you do not want any location checks below a certain SDK version. * Otherwise, {@link #build} will throw an {@link IllegalArgumentException}. */ public Builder setMinSdkVersionForFine( int minSdkVersionForFine) { Loading @@ -143,6 +158,17 @@ public final class LocationAccessPolicy { return this; } /** * If both the argument to {@link #setMinSdkVersionForFine} and * {@link #setMinSdkVersionForCoarse} are greater than {@link Build.VERSION_CODES#BASE}, * this method must be called with the min of the two to * affirm that you do not want any location checks below a certain SDK version. */ public Builder setMinSdkVersionForEnforcement(int minSdkVersionForEnforcement) { mMinSdkVersionForEnforcement = minSdkVersionForEnforcement; return this; } /** * Optional, for logging purposes only. */ Loading @@ -161,6 +187,26 @@ public final class LocationAccessPolicy { /** build LocationPermissionQuery */ public LocationPermissionQuery build() { if (mMinSdkVersionForCoarse < 0 || mMinSdkVersionForFine < 0) { throw new IllegalArgumentException("Must specify min sdk versions for" + " enforcement for both coarse and fine permissions"); } if (mMinSdkVersionForFine > Build.VERSION_CODES.BASE && mMinSdkVersionForCoarse > Build.VERSION_CODES.BASE) { if (mMinSdkVersionForEnforcement != Math.min( mMinSdkVersionForCoarse, mMinSdkVersionForFine)) { throw new IllegalArgumentException("setMinSdkVersionForEnforcement must be" + " called."); } } if (mMinSdkVersionForFine < mMinSdkVersionForCoarse) { throw new IllegalArgumentException("Since fine location permission includes" + " access to coarse location, the min sdk level for enforcement of" + " the fine location permission must not be less than the min sdk" + " level for enforcement of the coarse location permission."); } return new LocationPermissionQuery(mCallingPackage, mCallingFeatureId, mCallingUid, mCallingPid, mMinSdkVersionForCoarse, mMinSdkVersionForFine, mLogAsInfo, mMethod); Loading