diff --git a/api/current.txt b/api/current.txt index 4149d03ffeac0..126e2c68cdb0f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -34523,6 +34523,7 @@ package android.provider { method public android.provider.FontsContract.FontInfo[] getFonts(); method public int getStatusCode(); field public static final int STATUS_OK = 0; // 0x0 + field public static final int STATUS_REJECTED = 3; // 0x3 field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2 field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1 } diff --git a/api/system-current.txt b/api/system-current.txt index 4fa96aef9eeca..72b78086604a2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -37512,6 +37512,7 @@ package android.provider { method public android.provider.FontsContract.FontInfo[] getFonts(); method public int getStatusCode(); field public static final int STATUS_OK = 0; // 0x0 + field public static final int STATUS_REJECTED = 3; // 0x3 field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2 field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1 } diff --git a/api/test-current.txt b/api/test-current.txt index 1fed007580575..3c9d755ec7187 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -34658,6 +34658,7 @@ package android.provider { method public android.provider.FontsContract.FontInfo[] getFonts(); method public int getStatusCode(); field public static final int STATUS_OK = 0; // 0x0 + field public static final int STATUS_REJECTED = 3; // 0x3 field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2 field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1 } diff --git a/core/java/android/provider/FontsContract.java b/core/java/android/provider/FontsContract.java index e9ef770212c87..b410cbdbc7f1d 100644 --- a/core/java/android/provider/FontsContract.java +++ b/core/java/android/provider/FontsContract.java @@ -283,6 +283,12 @@ public class FontsContract { */ public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; + /** + * Constant represents that the fetching font data was rejected by system. This happens if + * the passed context is restricted. + */ + public static final int STATUS_REJECTED = 3; + /** @hide */ @IntDef({STATUS_OK, STATUS_WRONG_CERTIFICATES, STATUS_UNEXPECTED_DATA_PROVIDED}) @Retention(RetentionPolicy.SOURCE) @@ -555,6 +561,10 @@ public class FontsContract { public static @NonNull FontFamilyResult fetchFonts( @NonNull Context context, @Nullable CancellationSignal cancellationSignal, @NonNull FontRequest request) throws NameNotFoundException { + if (context.isRestricted()) { + // TODO: Should we allow if the peer process is system or myself? + return new FontFamilyResult(FontFamilyResult.STATUS_REJECTED, null); + } ProviderInfo providerInfo = getProvider(context.getPackageManager(), request); if (providerInfo == null) { return new FontFamilyResult(FontFamilyResult.STATUS_WRONG_CERTIFICATES, null); @@ -590,6 +600,10 @@ public class FontsContract { public static Typeface buildTypeface(@NonNull Context context, @Nullable CancellationSignal cancellationSignal, @NonNull FontInfo[] fonts, int weight, boolean italic, @Nullable String fallbackFontName) { + if (context.isRestricted()) { + // TODO: Should we allow if the peer process is system or myself? + return null; + } final Map uriBuffer = prepareFontData(context, fonts, cancellationSignal); return new Typeface.Builder(fonts, uriBuffer) @@ -613,6 +627,10 @@ public class FontsContract { */ public static Typeface buildTypeface(@NonNull Context context, @Nullable CancellationSignal cancellationSignal, @NonNull FontInfo[] fonts) { + if (context.isRestricted()) { + // TODO: Should we allow if the peer process is system or myself? + return null; + } final Map uriBuffer = prepareFontData(context, fonts, cancellationSignal); return new Typeface.Builder(fonts, uriBuffer).build();