diff options
277 files changed, 1132 insertions, 133 deletions
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index b611acf79bc3..eb9feb95bf3d 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -50,6 +50,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.ravenwood.annotation.RavenwoodKeep; import android.ravenwood.annotation.RavenwoodKeepPartialClass; +import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.ravenwood.annotation.RavenwoodReplace; import android.util.AndroidRuntimeException; import android.util.Log; @@ -460,6 +461,7 @@ public class Instrumentation { * * @param runner The code to run on the main thread. */ + @RavenwoodReplace(blockedBy = ActivityThread.class) public void runOnMainSync(Runnable runner) { validateNotAppThread(); SyncRunnable sr = new SyncRunnable(runner); @@ -467,6 +469,13 @@ public class Instrumentation { sr.waitForComplete(); } + private void runOnMainSync$ravenwood(Runnable runner) { + validateNotAppThread(); + SyncRunnable sr = new SyncRunnable(runner); + mInstrContext.getMainExecutor().execute(sr); + sr.waitForComplete(); + } + boolean isSdkSandboxAllowedToStartActivities() { return Process.isSdkSandbox() && mThread != null @@ -2442,7 +2451,8 @@ public class Instrumentation { } } - private final void validateNotAppThread() { + @RavenwoodKeep + private void validateNotAppThread() { if (Looper.myLooper() == Looper.getMainLooper()) { throw new RuntimeException( "This method can not be called from the main application thread"); @@ -2586,6 +2596,7 @@ public class Instrumentation { } } + @RavenwoodKeepWholeClass private static final class SyncRunnable implements Runnable { private final Runnable mTarget; private boolean mComplete; diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 05596318aef5..2658efab0e44 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -482,7 +482,6 @@ public class Resources { * * @return Typeface The Typeface data associated with the resource. */ - @RavenwoodThrow(blockedBy = Typeface.class) @NonNull public Typeface getFont(@FontRes int id) throws NotFoundException { final TypedValue value = obtainTempTypedValue(); try { @@ -507,7 +506,6 @@ public class Resources { /** * @hide */ - @RavenwoodThrow(blockedBy = Typeface.class) public void preloadFonts(@ArrayRes int id) { final TypedArray array = obtainTypedArray(id); try { diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index 96c71765d102..ddad54d94cc6 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -1064,7 +1064,6 @@ public class ResourcesImpl { * Loads a font from XML or resources stream. */ @Nullable - @RavenwoodThrow(blockedBy = Typeface.class) public Typeface loadFont(Resources wrapper, TypedValue value, int id) { if (value.string == null) { throw new NotFoundException("Resource \"" + getResourceName(id) + "\" (" diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java index 79185a10e156..ee7d008cf314 100644 --- a/core/java/android/content/res/TypedArray.java +++ b/core/java/android/content/res/TypedArray.java @@ -1043,7 +1043,6 @@ public class TypedArray implements AutoCloseable { * not a font resource. */ @Nullable - @RavenwoodThrow(blockedBy = Typeface.class) public Typeface getFont(@StyleableRes int index) { if (mRecycled) { throw new RuntimeException("Cannot make calls to a recycled instance!"); diff --git a/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java b/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java index bfbcfd828114..1bf01f4beb1b 100644 --- a/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java +++ b/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java @@ -68,6 +68,7 @@ import java.util.Objects; * @hide */ @SystemApi +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontFamilyUpdateRequest { /** diff --git a/core/java/android/graphics/fonts/FontFileUpdateRequest.java b/core/java/android/graphics/fonts/FontFileUpdateRequest.java index cf1dca965216..1f2be6fa5050 100644 --- a/core/java/android/graphics/fonts/FontFileUpdateRequest.java +++ b/core/java/android/graphics/fonts/FontFileUpdateRequest.java @@ -28,6 +28,7 @@ import java.util.Objects; * @hide */ @SystemApi +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontFileUpdateRequest { private final ParcelFileDescriptor mParcelFileDescriptor; diff --git a/core/java/android/text/AlteredCharSequence.java b/core/java/android/text/AlteredCharSequence.java index 971a47dba6e8..a05c690a9e30 100644 --- a/core/java/android/text/AlteredCharSequence.java +++ b/core/java/android/text/AlteredCharSequence.java @@ -24,6 +24,7 @@ package android.text; * @deprecated The functionality this class offers is easily implemented outside the framework. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AlteredCharSequence implements CharSequence, GetChars { diff --git a/core/java/android/text/AndroidBidi.java b/core/java/android/text/AndroidBidi.java index 31da79995172..fcdd50abc02a 100644 --- a/core/java/android/text/AndroidBidi.java +++ b/core/java/android/text/AndroidBidi.java @@ -28,6 +28,7 @@ import com.android.internal.annotations.VisibleForTesting; * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AndroidBidi { /** diff --git a/core/java/android/text/AndroidCharacter.java b/core/java/android/text/AndroidCharacter.java index c5f1a01f5927..37c4fdbef915 100644 --- a/core/java/android/text/AndroidCharacter.java +++ b/core/java/android/text/AndroidCharacter.java @@ -22,6 +22,7 @@ package android.text; * @deprecated Use various methods from {@link android.icu.lang.UCharacter}, instead. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AndroidCharacter { public static final int EAST_ASIAN_WIDTH_NEUTRAL = 0; diff --git a/core/java/android/text/Annotation.java b/core/java/android/text/Annotation.java index bb5d3ea7da4b..ac3e5a964a33 100644 --- a/core/java/android/text/Annotation.java +++ b/core/java/android/text/Annotation.java @@ -23,6 +23,7 @@ import android.os.Parcel; * TextView save/restore cycles and can be used to keep application-specific * data that needs to be maintained for regions of text. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Annotation implements ParcelableSpan { private final String mKey; private final String mValue; diff --git a/core/java/android/text/AutoGrowArray.java b/core/java/android/text/AutoGrowArray.java index e428377a0a31..06c74c3370c1 100644 --- a/core/java/android/text/AutoGrowArray.java +++ b/core/java/android/text/AutoGrowArray.java @@ -30,6 +30,7 @@ import libcore.util.EmptyArray; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class AutoGrowArray { private static final int MIN_CAPACITY_INCREMENT = 12; private static final int MAX_CAPACITY_TO_BE_KEPT = 10000; diff --git a/core/java/android/text/AutoText.java b/core/java/android/text/AutoText.java index c5339a42cbd1..d7b0547e6c4c 100644 --- a/core/java/android/text/AutoText.java +++ b/core/java/android/text/AutoText.java @@ -31,6 +31,7 @@ import java.util.Locale; /** * This class accesses a dictionary of corrections to frequent misspellings. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AutoText { // struct trie { // char c; diff --git a/core/java/android/text/BidiFormatter.java b/core/java/android/text/BidiFormatter.java index dfa172df72ea..6d4103cee7a6 100644 --- a/core/java/android/text/BidiFormatter.java +++ b/core/java/android/text/BidiFormatter.java @@ -82,6 +82,7 @@ import java.util.Locale; * first-strong estimation algorithm. It can also be configured to use a custom directionality * estimation object. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class BidiFormatter { /** diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java index 4fdcecc4f782..2b410e6284bf 100644 --- a/core/java/android/text/BoringLayout.java +++ b/core/java/android/text/BoringLayout.java @@ -45,6 +45,7 @@ import com.android.text.flags.Flags; * {@link android.graphics.Canvas#drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint) * Canvas.drawText()} directly.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback { /** diff --git a/core/java/android/text/CharSequenceCharacterIterator.java b/core/java/android/text/CharSequenceCharacterIterator.java index 9b07d29bd9dd..1599be8237d4 100644 --- a/core/java/android/text/CharSequenceCharacterIterator.java +++ b/core/java/android/text/CharSequenceCharacterIterator.java @@ -24,6 +24,7 @@ import java.text.CharacterIterator; * An implementation of {@link java.text.CharacterIterator} that iterates over a given CharSequence. * {@hide} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class CharSequenceCharacterIterator implements CharacterIterator { private final int mBeginIndex, mEndIndex; private int mIndex; diff --git a/core/java/android/text/ClipboardManager.java b/core/java/android/text/ClipboardManager.java index d0309100b0f2..41990f0fc8dd 100644 --- a/core/java/android/text/ClipboardManager.java +++ b/core/java/android/text/ClipboardManager.java @@ -21,6 +21,7 @@ package android.text; * {@link android.content.ClipboardManager} for the modern API. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class ClipboardManager { /** * Returns the text on the clipboard. It will eventually be possible diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java index 6b1aef710e50..3b66ce0167c4 100644 --- a/core/java/android/text/DynamicLayout.java +++ b/core/java/android/text/DynamicLayout.java @@ -53,6 +53,7 @@ import java.lang.ref.WeakReference; * {@link android.graphics.Canvas#drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint) * Canvas.drawText()} directly.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DynamicLayout extends Layout { private static final int PRIORITY = 128; private static final int BLOCK_MINIMUM_CHARACTER_LENGTH = 400; diff --git a/core/java/android/text/Editable.java b/core/java/android/text/Editable.java index a942f6ce2879..53d819f52a5c 100644 --- a/core/java/android/text/Editable.java +++ b/core/java/android/text/Editable.java @@ -22,6 +22,7 @@ package android.text; * to immutable text like Strings). If you make a {@link DynamicLayout} * of an Editable, the layout will be reflowed as the text is changed. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface Editable extends CharSequence, GetChars, Spannable, Appendable { diff --git a/core/java/android/text/Emoji.java b/core/java/android/text/Emoji.java index cf0e3c26daac..28c37c00d66e 100644 --- a/core/java/android/text/Emoji.java +++ b/core/java/android/text/Emoji.java @@ -23,6 +23,7 @@ import android.icu.lang.UProperty; * An utility class for Emoji. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Emoji { public static int COMBINING_ENCLOSING_KEYCAP = 0x20E3; diff --git a/core/java/android/text/EmojiConsistency.java b/core/java/android/text/EmojiConsistency.java index dfaa217c0cca..9823305ec72a 100644 --- a/core/java/android/text/EmojiConsistency.java +++ b/core/java/android/text/EmojiConsistency.java @@ -48,6 +48,7 @@ import java.util.Set; * </ol> * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class EmojiConsistency { /* Cannot construct */ private EmojiConsistency() { } diff --git a/core/java/android/text/FontConfig.java b/core/java/android/text/FontConfig.java index 783f3b7aa64b..5a4d3a867032 100644 --- a/core/java/android/text/FontConfig.java +++ b/core/java/android/text/FontConfig.java @@ -55,6 +55,7 @@ import java.util.Objects; */ @SystemApi @TestApi +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontConfig implements Parcelable { private final @NonNull List<FontFamily> mFamilies; private final @NonNull List<Alias> mAliases; diff --git a/core/java/android/text/GetChars.java b/core/java/android/text/GetChars.java index 348a911a442f..229f5437e76b 100644 --- a/core/java/android/text/GetChars.java +++ b/core/java/android/text/GetChars.java @@ -21,6 +21,7 @@ package android.text; * getChars() method like the one in String that is faster than * calling charAt() multiple times. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface GetChars extends CharSequence { diff --git a/core/java/android/text/GraphemeClusterSegmentFinder.java b/core/java/android/text/GraphemeClusterSegmentFinder.java index 0f6fdaf23c65..996223dd1a84 100644 --- a/core/java/android/text/GraphemeClusterSegmentFinder.java +++ b/core/java/android/text/GraphemeClusterSegmentFinder.java @@ -31,6 +31,7 @@ import android.graphics.text.GraphemeBreak; * @see <a href="https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries">Unicode Text * Segmentation - Grapheme Cluster Boundaries</a> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class GraphemeClusterSegmentFinder extends SegmentFinder { private static AutoGrowArray.FloatArray sTempAdvances = null; private final boolean[] mIsGraphemeBreak; diff --git a/core/java/android/text/GraphicsOperations.java b/core/java/android/text/GraphicsOperations.java index 6c1544644eab..f7fe805e53a4 100644 --- a/core/java/android/text/GraphicsOperations.java +++ b/core/java/android/text/GraphicsOperations.java @@ -26,6 +26,7 @@ import android.graphics.Paint; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface GraphicsOperations extends CharSequence { /** * Just like {@link Canvas#drawText}. diff --git a/core/java/android/text/Highlights.java b/core/java/android/text/Highlights.java index 693dbcf84e84..217a38b6edd5 100644 --- a/core/java/android/text/Highlights.java +++ b/core/java/android/text/Highlights.java @@ -30,6 +30,7 @@ import java.util.Objects; /** * A class that represents of the highlight of the text. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Highlights { private final List<Pair<Paint, int[]>> mHighlights; diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java index a42eece57eec..d412071bf3b9 100644 --- a/core/java/android/text/Html.java +++ b/core/java/android/text/Html.java @@ -17,13 +17,13 @@ package android.text; import android.app.ActivityThread; -import android.app.Application; import android.compat.annotation.UnsupportedAppUsage; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; +import android.ravenwood.annotation.RavenwoodReplace; import android.text.style.AbsoluteSizeSpan; import android.text.style.AlignmentSpan; import android.text.style.BackgroundColorSpan; @@ -65,6 +65,7 @@ import java.util.regex.Pattern; * This class processes HTML strings into displayable styled text. * Not all HTML tags are supported. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Html { /** * Retrieves images for HTML <img> tags. @@ -506,6 +507,15 @@ public class Html { out.append("</p>\n"); } + @RavenwoodReplace(blockedBy = ActivityThread.class) + private static float getDisplayMetricsDensity() { + return ActivityThread.currentApplication().getResources().getDisplayMetrics().density; + } + + private static float getDisplayMetricsDensity$ravenwood() { + return Resources.getSystem().getDisplayMetrics().density; + } + private static void withinParagraph(StringBuilder out, Spanned text, int start, int end) { int next; for (int i = start; i < end; i = next) { @@ -559,8 +569,7 @@ public class Html { AbsoluteSizeSpan s = ((AbsoluteSizeSpan) style[j]); float sizeDip = s.getSize(); if (!s.getDip()) { - Application application = ActivityThread.currentApplication(); - sizeDip /= application.getResources().getDisplayMetrics().density; + sizeDip /= getDisplayMetricsDensity(); } // px in CSS is the equivalance of dip in Android @@ -669,6 +678,7 @@ public class Html { } } +@android.ravenwood.annotation.RavenwoodKeepWholeClass class HtmlToSpannedConverter implements ContentHandler { private static final float[] HEADING_SIZES = { @@ -843,6 +853,16 @@ class HtmlToSpannedConverter implements ContentHandler { } } + @RavenwoodReplace(blockedBy = ActivityThread.class) + private static int getFontWeightAdjustment() { + return ActivityThread.currentApplication().getResources() + .getConfiguration().fontWeightAdjustment; + } + + private static int getFontWeightAdjustment$ravenwood() { + return Resources.getSystem().getConfiguration().fontWeightAdjustment; + } + private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); @@ -858,17 +878,11 @@ class HtmlToSpannedConverter implements ContentHandler { } else if (tag.equalsIgnoreCase("span")) { endCssStyle(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { - Application application = ActivityThread.currentApplication(); - int fontWeightAdjustment = - application.getResources().getConfiguration().fontWeightAdjustment; end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD, - fontWeightAdjustment)); + getFontWeightAdjustment())); } else if (tag.equalsIgnoreCase("b")) { - Application application = ActivityThread.currentApplication(); - int fontWeightAdjustment = - application.getResources().getConfiguration().fontWeightAdjustment; end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD, - fontWeightAdjustment)); + getFontWeightAdjustment())); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { @@ -1036,11 +1050,8 @@ class HtmlToSpannedConverter implements ContentHandler { // Their ranges should not include the newlines at the end Heading h = getLast(text, Heading.class); if (h != null) { - Application application = ActivityThread.currentApplication(); - int fontWeightAdjustment = - application.getResources().getConfiguration().fontWeightAdjustment; setSpanFromMark(text, h, new RelativeSizeSpan(HEADING_SIZES[h.mLevel]), - new StyleSpan(Typeface.BOLD, fontWeightAdjustment)); + new StyleSpan(Typeface.BOLD, getFontWeightAdjustment())); } endBlockElement(text); diff --git a/core/java/android/text/Hyphenator.java b/core/java/android/text/Hyphenator.java index 6f0628ad38e6..7f9a8a1c0806 100644 --- a/core/java/android/text/Hyphenator.java +++ b/core/java/android/text/Hyphenator.java @@ -21,6 +21,7 @@ package android.text; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Hyphenator { private Hyphenator() {} diff --git a/core/java/android/text/InputFilter.java b/core/java/android/text/InputFilter.java index 96e7bd0fef4c..ed5de03e5528 100644 --- a/core/java/android/text/InputFilter.java +++ b/core/java/android/text/InputFilter.java @@ -27,6 +27,7 @@ import java.util.Locale; * InputFilters can be attached to {@link Editable}s to constrain the * changes that can be made to them. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface InputFilter { /** diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java index 4ebecb7494fa..03c9c023d9ce 100644 --- a/core/java/android/text/InputType.java +++ b/core/java/android/text/InputType.java @@ -44,6 +44,7 @@ import java.util.List; * TYPE_DATETIME_VARIATION_TIME * </dl> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface InputType { /** * Mask of bits that determine the overall class diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 2fa56137a8a0..08453d09a1ff 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -69,6 +69,7 @@ import java.util.Locale; * which will be updated as the text changes. * For text that will not change, use a {@link StaticLayout}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class Layout { // These should match the constants in framework/base/libs/hwui/hwui/DrawTextFunctor.h diff --git a/core/java/android/text/LoginFilter.java b/core/java/android/text/LoginFilter.java index 0e4eec4488ee..94f196f7ef6b 100644 --- a/core/java/android/text/LoginFilter.java +++ b/core/java/android/text/LoginFilter.java @@ -23,6 +23,7 @@ package android.text; * handle non-BMP characters. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class LoginFilter implements InputFilter { private boolean mAppendInvalid; // whether to append or ignore invalid characters /** diff --git a/core/java/android/text/MeasuredParagraph.java b/core/java/android/text/MeasuredParagraph.java index 31a226341907..b2e44598a548 100644 --- a/core/java/android/text/MeasuredParagraph.java +++ b/core/java/android/text/MeasuredParagraph.java @@ -68,6 +68,7 @@ import java.util.Arrays; * @hide */ @TestApi +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MeasuredParagraph { private static final char OBJECT_REPLACEMENT_CHARACTER = '\uFFFC'; diff --git a/core/java/android/text/NoCopySpan.java b/core/java/android/text/NoCopySpan.java index e754d765e14c..4cd3d04dc4e6 100644 --- a/core/java/android/text/NoCopySpan.java +++ b/core/java/android/text/NoCopySpan.java @@ -21,6 +21,7 @@ package android.text; * into a new Spanned when performing a slice or copy operation on the original * Spanned it was placed in. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface NoCopySpan { /** * Convenience equivalent for when you would just want a new Object() for diff --git a/core/java/android/text/PackedIntVector.java b/core/java/android/text/PackedIntVector.java index 3e5bf5677853..11dd0c38182b 100644 --- a/core/java/android/text/PackedIntVector.java +++ b/core/java/android/text/PackedIntVector.java @@ -29,6 +29,7 @@ import com.android.internal.util.GrowingArrayUtils; * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PackedIntVector { private final int mColumns; private int mRows; diff --git a/core/java/android/text/PackedObjectVector.java b/core/java/android/text/PackedObjectVector.java index b777e16a153d..beb5ea4ee28c 100644 --- a/core/java/android/text/PackedObjectVector.java +++ b/core/java/android/text/PackedObjectVector.java @@ -21,6 +21,7 @@ import com.android.internal.util.GrowingArrayUtils; import libcore.util.EmptyArray; +@android.ravenwood.annotation.RavenwoodKeepWholeClass class PackedObjectVector<E> { private int mColumns; diff --git a/core/java/android/text/ParcelableSpan.java b/core/java/android/text/ParcelableSpan.java index d7c1a4bc26e8..a9a4893d3692 100644 --- a/core/java/android/text/ParcelableSpan.java +++ b/core/java/android/text/ParcelableSpan.java @@ -24,6 +24,7 @@ import android.os.Parcelable; * This can only be used by code in the framework; it is not intended for * applications to implement their own Parcelable spans. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface ParcelableSpan extends Parcelable { /** * Return a special type identifier for this span class. diff --git a/core/java/android/text/PrecomputedText.java b/core/java/android/text/PrecomputedText.java index 5f6a9bd068c9..71cacd9b199a 100644 --- a/core/java/android/text/PrecomputedText.java +++ b/core/java/android/text/PrecomputedText.java @@ -75,6 +75,7 @@ import java.util.Objects; * Note that any {@link android.text.NoCopySpan} attached to the original text won't be passed to * PrecomputedText. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PrecomputedText implements Spannable { private static final char LINE_FEED = '\n'; diff --git a/core/java/android/text/SegmentFinder.java b/core/java/android/text/SegmentFinder.java index 047d07a2e3e0..b7ab0e62753a 100644 --- a/core/java/android/text/SegmentFinder.java +++ b/core/java/android/text/SegmentFinder.java @@ -39,6 +39,7 @@ import java.util.Objects; * * @see Layout#getRangeForRect(RectF, SegmentFinder, Layout.TextInclusionStrategy) */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class SegmentFinder { /** * Return value of previousStartBoundary(int), previousEndBoundary(int), nextStartBoundary(int), diff --git a/core/java/android/text/Selection.java b/core/java/android/text/Selection.java index 711578c1482f..674b47372482 100644 --- a/core/java/android/text/Selection.java +++ b/core/java/android/text/Selection.java @@ -27,6 +27,7 @@ import java.text.BreakIterator; * Utility class for manipulating cursors and selections in CharSequences. * A cursor is a selection where the start and end are at the same offset. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Selection { private Selection() { /* cannot be instantiated */ } diff --git a/core/java/android/text/SpanColors.java b/core/java/android/text/SpanColors.java index fcd242b62700..3b6a0418dcb0 100644 --- a/core/java/android/text/SpanColors.java +++ b/core/java/android/text/SpanColors.java @@ -27,6 +27,7 @@ import android.text.style.CharacterStyle; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpanColors { public static final @ColorInt int NO_COLOR_FOUND = Color.TRANSPARENT; diff --git a/core/java/android/text/SpanSet.java b/core/java/android/text/SpanSet.java index d464278c714c..4ad8106eb459 100644 --- a/core/java/android/text/SpanSet.java +++ b/core/java/android/text/SpanSet.java @@ -31,6 +31,7 @@ import java.util.Arrays; * Note that empty spans are ignored by this class. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpanSet<E> { private final Class<? extends E> classType; diff --git a/core/java/android/text/SpanWatcher.java b/core/java/android/text/SpanWatcher.java index 01e82c815ac8..31d63206a144 100644 --- a/core/java/android/text/SpanWatcher.java +++ b/core/java/android/text/SpanWatcher.java @@ -21,6 +21,7 @@ package android.text; * will be called to notify it that other markup objects have been * added, changed, or removed. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface SpanWatcher extends NoCopySpan { /** * This method is called to notify you that the specified object diff --git a/core/java/android/text/Spannable.java b/core/java/android/text/Spannable.java index 8315b2aa52c6..fac5131c035a 100644 --- a/core/java/android/text/Spannable.java +++ b/core/java/android/text/Spannable.java @@ -21,6 +21,7 @@ package android.text; * attached and detached. Not all Spannable classes have mutable text; * see {@link Editable} for that. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface Spannable extends Spanned { diff --git a/core/java/android/text/SpannableString.java b/core/java/android/text/SpannableString.java index afb5df809bc0..ee04a86a808f 100644 --- a/core/java/android/text/SpannableString.java +++ b/core/java/android/text/SpannableString.java @@ -21,6 +21,7 @@ package android.text; * markup objects can be attached and detached. * For mutable text, see {@link SpannableStringBuilder}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpannableString extends SpannableStringInternal implements CharSequence, GetChars, Spannable diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java index 0e61eff86c2b..f8d7283a94b3 100644 --- a/core/java/android/text/SpannableStringBuilder.java +++ b/core/java/android/text/SpannableStringBuilder.java @@ -35,6 +35,7 @@ import java.util.IdentityHashMap; /** * This is the class for text whose content and markup can both be changed. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable, Appendable, GraphicsOperations { private final static String TAG = "SpannableStringBuilder"; diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java index f2ab1bb31fbc..90d83d59eb65 100644 --- a/core/java/android/text/SpannableStringInternal.java +++ b/core/java/android/text/SpannableStringInternal.java @@ -27,6 +27,7 @@ import libcore.util.EmptyArray; import java.lang.reflect.Array; +@android.ravenwood.annotation.RavenwoodKeepWholeClass /* package */ abstract class SpannableStringInternal { /* package */ SpannableStringInternal(CharSequence source, diff --git a/core/java/android/text/Spanned.java b/core/java/android/text/Spanned.java index a0d54c26c6d9..6706ffd245c1 100644 --- a/core/java/android/text/Spanned.java +++ b/core/java/android/text/Spanned.java @@ -22,6 +22,7 @@ package android.text; * see {@link Spannable} for mutable markup and {@link Editable} for * mutable text. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface Spanned extends CharSequence { diff --git a/core/java/android/text/SpannedString.java b/core/java/android/text/SpannedString.java index acee3c5f1a41..a3f1ee2e3f20 100644 --- a/core/java/android/text/SpannedString.java +++ b/core/java/android/text/SpannedString.java @@ -22,6 +22,7 @@ package android.text; * For mutable markup, see {@link SpannableString}; for mutable text, * see {@link SpannableStringBuilder}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class SpannedString extends SpannableStringInternal implements CharSequence, GetChars, Spanned diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index a5d52957c40e..8193cd2beb80 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -55,6 +55,7 @@ import java.util.Arrays; * float, float, android.graphics.Paint) * Canvas.drawText()} directly.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class StaticLayout extends Layout { /* * The break iteration is done in native code. The protocol for using the native code is as diff --git a/core/java/android/text/TextDirectionHeuristic.java b/core/java/android/text/TextDirectionHeuristic.java index 8a4ba42bcc91..66cea853cda9 100644 --- a/core/java/android/text/TextDirectionHeuristic.java +++ b/core/java/android/text/TextDirectionHeuristic.java @@ -19,6 +19,7 @@ package android.text; /** * Interface for objects that use a heuristic for guessing at the paragraph direction by examining text. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface TextDirectionHeuristic { /** * Guess if a chars array is in the RTL direction or not. diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java index 85260f4af2c8..3af8fb7f489d 100644 --- a/core/java/android/text/TextDirectionHeuristics.java +++ b/core/java/android/text/TextDirectionHeuristics.java @@ -32,6 +32,7 @@ import java.nio.CharBuffer; * class. * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextDirectionHeuristics { /** diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java index 3015791ee0a9..091eb6027002 100644 --- a/core/java/android/text/TextLine.java +++ b/core/java/android/text/TextLine.java @@ -53,6 +53,7 @@ import java.util.ArrayList; * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextLine { private static final boolean DEBUG = false; diff --git a/core/java/android/text/TextPaint.java b/core/java/android/text/TextPaint.java index 73825b13cb6b..ff063f2ac2f4 100644 --- a/core/java/android/text/TextPaint.java +++ b/core/java/android/text/TextPaint.java @@ -25,6 +25,7 @@ import android.graphics.Paint; * TextPaint is an extension of Paint that leaves room for some extra * data used during text measuring and drawing. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextPaint extends Paint { // Special value 0 means no background paint diff --git a/core/java/android/text/TextShaper.java b/core/java/android/text/TextShaper.java index 6da0b63dbc1f..6d1740184763 100644 --- a/core/java/android/text/TextShaper.java +++ b/core/java/android/text/TextShaper.java @@ -169,6 +169,7 @@ import android.graphics.text.TextRunShaper; * @see TextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic, TextPaint, * GlyphsConsumer) */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextShaper { private TextShaper() {} diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 6dc82c40ddc5..042966b81b9a 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -34,6 +34,7 @@ import android.icu.text.Edits; import android.icu.util.ULocale; import android.os.Parcel; import android.os.Parcelable; +import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.sysprop.DisplayProperties; import android.text.style.AbsoluteSizeSpan; import android.text.style.AccessibilityClickableSpan; @@ -85,8 +86,7 @@ import java.util.List; import java.util.Locale; import java.util.regex.Pattern; -@android.ravenwood.annotation.RavenwoodKeepStaticInitializer -@android.ravenwood.annotation.RavenwoodKeepPartialClass +@RavenwoodKeepWholeClass public class TextUtils { private static final String TAG = "TextUtils"; @@ -147,7 +147,6 @@ public class TextUtils { private TextUtils() { /* cannot be instantiated */ } - @android.ravenwood.annotation.RavenwoodKeep public static void getChars(CharSequence s, int start, int end, char[] dest, int destoff) { Class<? extends CharSequence> c = s.getClass(); @@ -166,12 +165,10 @@ public class TextUtils { } } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, char ch) { return indexOf(s, ch, 0); } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, char ch, int start) { Class<? extends CharSequence> c = s.getClass(); @@ -181,7 +178,6 @@ public class TextUtils { return indexOf(s, ch, start, s.length()); } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, char ch, int start, int end) { Class<? extends CharSequence> c = s.getClass(); @@ -219,12 +215,10 @@ public class TextUtils { return -1; } - @android.ravenwood.annotation.RavenwoodKeep public static int lastIndexOf(CharSequence s, char ch) { return lastIndexOf(s, ch, s.length() - 1); } - @android.ravenwood.annotation.RavenwoodKeep public static int lastIndexOf(CharSequence s, char ch, int last) { Class<? extends CharSequence> c = s.getClass(); @@ -234,7 +228,6 @@ public class TextUtils { return lastIndexOf(s, ch, 0, last); } - @android.ravenwood.annotation.RavenwoodKeep public static int lastIndexOf(CharSequence s, char ch, int start, int last) { if (last < 0) @@ -280,17 +273,14 @@ public class TextUtils { return -1; } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, CharSequence needle) { return indexOf(s, needle, 0, s.length()); } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, CharSequence needle, int start) { return indexOf(s, needle, start, s.length()); } - @android.ravenwood.annotation.RavenwoodKeep public static int indexOf(CharSequence s, CharSequence needle, int start, int end) { int nlen = needle.length(); @@ -318,7 +308,6 @@ public class TextUtils { return -1; } - @android.ravenwood.annotation.RavenwoodKeep public static boolean regionMatches(CharSequence one, int toffset, CharSequence two, int ooffset, int len) { @@ -351,7 +340,6 @@ public class TextUtils { * in that it does not preserve any style runs in the source sequence, * allowing a more efficient implementation. */ - @android.ravenwood.annotation.RavenwoodKeep public static String substring(CharSequence source, int start, int end) { if (source instanceof String) return ((String) source).substring(start, end); @@ -424,7 +412,6 @@ public class TextUtils { * calling object.toString(). If tokens is null, a NullPointerException will be thrown. If * tokens is an empty array, an empty string will be returned. */ - @android.ravenwood.annotation.RavenwoodKeep public static String join(@NonNull CharSequence delimiter, @NonNull Object[] tokens) { final int length = tokens.length; if (length == 0) { @@ -448,7 +435,6 @@ public class TextUtils { * calling object.toString(). If tokens is null, a NullPointerException will be thrown. If * tokens is empty, an empty string will be returned. */ - @android.ravenwood.annotation.RavenwoodKeep public static String join(@NonNull CharSequence delimiter, @NonNull Iterable tokens) { final Iterator<?> it = tokens.iterator(); if (!it.hasNext()) { @@ -481,7 +467,6 @@ public class TextUtils { * * @throws NullPointerException if expression or text is null */ - @android.ravenwood.annotation.RavenwoodKeep public static String[] split(String text, String expression) { if (text.length() == 0) { return EmptyArray.STRING; @@ -507,7 +492,6 @@ public class TextUtils { * * @throws NullPointerException if expression or text is null */ - @android.ravenwood.annotation.RavenwoodKeep public static String[] split(String text, Pattern pattern) { if (text.length() == 0) { return EmptyArray.STRING; @@ -545,7 +529,6 @@ public class TextUtils { * be returned for the empty string after that delimeter. That is, splitting <tt>"a,b,"</tt> on * comma will return <tt>"a", "b"</tt>, not <tt>"a", "b", ""</tt>. */ - @android.ravenwood.annotation.RavenwoodKeepWholeClass public static class SimpleStringSplitter implements StringSplitter, Iterator<String> { private String mString; private char mDelimiter; @@ -609,31 +592,26 @@ public class TextUtils { * @param str the string to be examined * @return true if str is null or zero length */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isEmpty(@Nullable CharSequence str) { return str == null || str.length() == 0; } /** {@hide} */ - @android.ravenwood.annotation.RavenwoodKeep public static String nullIfEmpty(@Nullable String str) { return isEmpty(str) ? null : str; } /** {@hide} */ - @android.ravenwood.annotation.RavenwoodKeep public static String emptyIfNull(@Nullable String str) { return str == null ? "" : str; } /** {@hide} */ - @android.ravenwood.annotation.RavenwoodKeep public static String firstNotEmpty(@Nullable String a, @NonNull String b) { return !isEmpty(a) ? a : Preconditions.checkStringNotEmpty(b); } /** {@hide} */ - @android.ravenwood.annotation.RavenwoodKeep public static int length(@Nullable String s) { return s != null ? s.length() : 0; } @@ -642,7 +620,6 @@ public class TextUtils { * @return interned string if it's null. * @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static String safeIntern(String s) { return (s != null) ? s.intern() : null; } @@ -652,7 +629,6 @@ public class TextUtils { * spaces and ASCII control characters were trimmed from the start and end, * as by {@link String#trim}. */ - @android.ravenwood.annotation.RavenwoodKeep public static int getTrimmedLength(CharSequence s) { int len = s.length(); @@ -677,7 +653,6 @@ public class TextUtils { * @param b second CharSequence to check * @return true if a and b are equal */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean equals(@Nullable CharSequence a, @Nullable CharSequence b) { if (a == b) return true; int length; @@ -1713,7 +1688,6 @@ public class TextUtils { return true; } - @android.ravenwood.annotation.RavenwoodKeep /* package */ static char[] obtain(int len) { char[] buf; @@ -1728,7 +1702,6 @@ public class TextUtils { return buf; } - @android.ravenwood.annotation.RavenwoodKeep /* package */ static void recycle(char[] temp) { if (temp.length > 1000) return; @@ -1743,7 +1716,6 @@ public class TextUtils { * @param s the string to be encoded * @return the encoded string */ - @android.ravenwood.annotation.RavenwoodKeep public static String htmlEncode(String s) { StringBuilder sb = new StringBuilder(); char c; @@ -1830,7 +1802,6 @@ public class TextUtils { /** * Returns whether the given CharSequence contains any printable characters. */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isGraphic(CharSequence str) { final int len = str.length(); for (int cp, i=0; i<len; i+=Character.charCount(cp)) { @@ -1857,7 +1828,6 @@ public class TextUtils { * @deprecated Use {@link #isGraphic(CharSequence)} instead. */ @Deprecated - @android.ravenwood.annotation.RavenwoodKeep public static boolean isGraphic(char c) { int gc = Character.getType(c); return gc != Character.CONTROL @@ -1872,7 +1842,6 @@ public class TextUtils { /** * Returns whether the given CharSequence contains only digits. */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isDigitsOnly(CharSequence str) { final int len = str.length(); for (int cp, i = 0; i < len; i += Character.charCount(cp)) { @@ -1887,7 +1856,6 @@ public class TextUtils { /** * @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isPrintableAscii(final char c) { final int asciiFirst = 0x20; final int asciiLast = 0x7E; // included @@ -1898,7 +1866,6 @@ public class TextUtils { * @hide */ @UnsupportedAppUsage - @android.ravenwood.annotation.RavenwoodKeep public static boolean isPrintableAsciiOnly(final CharSequence str) { final int len = str.length(); for (int i = 0; i < len; i++) { @@ -1950,7 +1917,6 @@ public class TextUtils { * {@link #CAP_MODE_CHARACTERS}, {@link #CAP_MODE_WORDS}, and * {@link #CAP_MODE_SENTENCES}. */ - @android.ravenwood.annotation.RavenwoodKeep public static int getCapsMode(CharSequence cs, int off, int reqModes) { if (off < 0) { return 0; @@ -2162,7 +2128,6 @@ public class TextUtils { * * Be careful: this code will need to be updated when vertical scripts will be supported */ - @android.ravenwood.annotation.RavenwoodKeep public static int getLayoutDirectionFromLocale(Locale locale) { return ((locale != null && !locale.equals(Locale.ROOT) && ULocale.forLocale(locale).isRightToLeft()) @@ -2197,7 +2162,6 @@ public class TextUtils { * match the supported grammar described above. * @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static @NonNull String formatSimple(@NonNull String format, Object... args) { final StringBuilder sb = new StringBuilder(format); int j = 0; @@ -2387,7 +2351,6 @@ public class TextUtils { } /** @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isNewline(int codePoint) { int type = Character.getType(codePoint); return type == Character.PARAGRAPH_SEPARATOR || type == Character.LINE_SEPARATOR @@ -2395,19 +2358,16 @@ public class TextUtils { } /** @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isWhitespace(int codePoint) { return Character.isWhitespace(codePoint) || codePoint == NBSP_CODE_POINT; } /** @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isWhitespaceExceptNewline(int codePoint) { return isWhitespace(codePoint) && !isNewline(codePoint); } /** @hide */ - @android.ravenwood.annotation.RavenwoodKeep public static boolean isPunctuation(int codePoint) { int type = Character.getType(codePoint); return type == Character.CONNECTOR_PUNCTUATION diff --git a/core/java/android/text/TextWatcher.java b/core/java/android/text/TextWatcher.java index a0aef690a1b8..5963ca7d5083 100644 --- a/core/java/android/text/TextWatcher.java +++ b/core/java/android/text/TextWatcher.java @@ -20,6 +20,7 @@ package android.text; * When an object of this type is attached to an Editable, its methods will * be called when the text is changed. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface TextWatcher extends NoCopySpan { /** * This method is called to notify you that, within <code>s</code>, diff --git a/core/java/android/text/WordSegmentFinder.java b/core/java/android/text/WordSegmentFinder.java index b0a70eae902a..b8702d72f29c 100644 --- a/core/java/android/text/WordSegmentFinder.java +++ b/core/java/android/text/WordSegmentFinder.java @@ -33,6 +33,7 @@ import android.text.method.WordIterator; * @see <a href="https://unicode.org/reports/tr29/#Word_Boundaries">Unicode Text Segmentation - Word * Boundaries</a> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class WordSegmentFinder extends SegmentFinder { private final CharSequence mText; private final WordIterator mWordIterator; diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java index e6dad27d595b..ef60d3058c5c 100644 --- a/core/java/android/text/format/DateFormat.java +++ b/core/java/android/text/format/DateFormat.java @@ -63,6 +63,7 @@ import java.util.TimeZone; * Note that the non-{@code format} methods in this class are implemented by * {@code SimpleDateFormat}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DateFormat { /** * @deprecated Use a literal {@code '} instead. diff --git a/core/java/android/text/format/DateIntervalFormat.java b/core/java/android/text/format/DateIntervalFormat.java index 8dea3228eb0c..5ec9561b2315 100644 --- a/core/java/android/text/format/DateIntervalFormat.java +++ b/core/java/android/text/format/DateIntervalFormat.java @@ -37,6 +37,7 @@ import java.util.TimeZone; * @hide */ @VisibleForTesting(visibility = PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class DateIntervalFormat { private static final LruCache<String, android.icu.text.DateIntervalFormat> CACHED_FORMATTERS = diff --git a/core/java/android/text/format/DateTimeFormat.java b/core/java/android/text/format/DateTimeFormat.java index 064d7172c44f..c8dd61d0d75c 100644 --- a/core/java/android/text/format/DateTimeFormat.java +++ b/core/java/android/text/format/DateTimeFormat.java @@ -29,6 +29,7 @@ import android.util.LruCache; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass class DateTimeFormat { private static final FormatterCache CACHED_FORMATTERS = new FormatterCache(); diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index 518a5498d6ed..12ad76454870 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -44,6 +44,7 @@ import java.util.TimeZone; * This class contains various date-related utilities for creating text for things like * elapsed time and date ranges, strings for days of the week and months, and AM/PM text etc. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DateUtils { private static final Object sLock = new Object(); diff --git a/core/java/android/text/format/DateUtilsBridge.java b/core/java/android/text/format/DateUtilsBridge.java index 92ec9cf6d736..752a8c0ef40a 100644 --- a/core/java/android/text/format/DateUtilsBridge.java +++ b/core/java/android/text/format/DateUtilsBridge.java @@ -46,6 +46,7 @@ import com.android.internal.annotations.VisibleForTesting; * @hide */ @VisibleForTesting(visibility = PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class DateUtilsBridge { /** diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java index 7653bdb7b2d8..e7783dcb2630 100644 --- a/core/java/android/text/format/Formatter.java +++ b/core/java/android/text/format/Formatter.java @@ -41,6 +41,7 @@ import java.util.Locale; * Utility class to aid in formatting common values that are not covered * by the {@link java.util.Formatter} class in {@link java.util} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class Formatter { /** {@hide} */ diff --git a/core/java/android/text/format/RelativeDateTimeFormatter.java b/core/java/android/text/format/RelativeDateTimeFormatter.java index 9096469699c1..6b940f8cb380 100644 --- a/core/java/android/text/format/RelativeDateTimeFormatter.java +++ b/core/java/android/text/format/RelativeDateTimeFormatter.java @@ -42,6 +42,7 @@ import java.util.Locale; * @hide */ @VisibleForTesting(visibility = PACKAGE) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class RelativeDateTimeFormatter { public static final long SECOND_IN_MILLIS = 1000; diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java index bac7c6cf87d3..1beb57389ef5 100644 --- a/core/java/android/text/format/Time.java +++ b/core/java/android/text/format/Time.java @@ -53,6 +53,7 @@ import java.util.TimeZone; * @deprecated Use {@link java.util.GregorianCalendar} instead. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Time { private static final String Y_M_D_T_H_M_S_000 = "%Y-%m-%dT%H:%M:%S.000"; private static final String Y_M_D_T_H_M_S_000_Z = "%Y-%m-%dT%H:%M:%S.000Z"; diff --git a/core/java/android/text/format/TimeFormatter.java b/core/java/android/text/format/TimeFormatter.java index e42ad6334649..dd703d85624f 100644 --- a/core/java/android/text/format/TimeFormatter.java +++ b/core/java/android/text/format/TimeFormatter.java @@ -40,6 +40,7 @@ import java.util.TimeZone; * * <p>This class is not thread safe. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass class TimeFormatter { // An arbitrary value outside the range representable by a char. private static final int FORCE_LOWER_CASE = -1; diff --git a/core/java/android/text/format/TimeMigrationUtils.java b/core/java/android/text/format/TimeMigrationUtils.java index 17bac8d67b26..b2f5024c73b7 100644 --- a/core/java/android/text/format/TimeMigrationUtils.java +++ b/core/java/android/text/format/TimeMigrationUtils.java @@ -22,6 +22,7 @@ package android.text.format; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TimeMigrationUtils { private TimeMigrationUtils() {} diff --git a/core/java/android/text/method/AllCapsTransformationMethod.java b/core/java/android/text/method/AllCapsTransformationMethod.java index 305b056aee72..70dcc52691cd 100644 --- a/core/java/android/text/method/AllCapsTransformationMethod.java +++ b/core/java/android/text/method/AllCapsTransformationMethod.java @@ -33,6 +33,7 @@ import java.util.Locale; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AllCapsTransformationMethod implements TransformationMethod2 { private static final String TAG = "AllCapsTransformationMethod"; diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java index 37474e5645b0..609922073f53 100644 --- a/core/java/android/text/method/ArrowKeyMovementMethod.java +++ b/core/java/android/text/method/ArrowKeyMovementMethod.java @@ -30,6 +30,7 @@ import android.widget.TextView; * A movement method that provides cursor movement and selection. * Supports displaying the context menu on DPad Center. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ArrowKeyMovementMethod extends BaseMovementMethod implements MovementMethod { private static boolean isSelecting(Spannable buffer) { return ((MetaKeyKeyListener.getMetaState(buffer, MetaKeyKeyListener.META_SHIFT_ON) == 1) || diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java index e427908541e5..5ebfd99c6f6e 100644 --- a/core/java/android/text/method/BaseKeyListener.java +++ b/core/java/android/text/method/BaseKeyListener.java @@ -47,6 +47,7 @@ import java.text.BreakIterator; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class BaseKeyListener extends MetaKeyKeyListener implements KeyListener { /* package */ static final Object OLD_SEL_START = new NoCopySpan.Concrete(); diff --git a/core/java/android/text/method/BaseMovementMethod.java b/core/java/android/text/method/BaseMovementMethod.java index 7a4b3a095ae9..0c2e52e04c1f 100644 --- a/core/java/android/text/method/BaseMovementMethod.java +++ b/core/java/android/text/method/BaseMovementMethod.java @@ -27,6 +27,7 @@ import android.widget.TextView; /** * Base classes for movement methods. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BaseMovementMethod implements MovementMethod { @Override public boolean canSelectArbitrarily() { diff --git a/core/java/android/text/method/CharacterPickerDialog.java b/core/java/android/text/method/CharacterPickerDialog.java index 7d838e06cd68..f084d03cf6dd 100644 --- a/core/java/android/text/method/CharacterPickerDialog.java +++ b/core/java/android/text/method/CharacterPickerDialog.java @@ -38,6 +38,7 @@ import com.android.internal.R; /** * Dialog for choosing accented characters related to a base character. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class CharacterPickerDialog extends Dialog implements OnItemClickListener, OnClickListener { private View mView; diff --git a/core/java/android/text/method/DateKeyListener.java b/core/java/android/text/method/DateKeyListener.java index 0accbf6c74e5..acf182263272 100644 --- a/core/java/android/text/method/DateKeyListener.java +++ b/core/java/android/text/method/DateKeyListener.java @@ -35,6 +35,7 @@ import java.util.Locale; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DateKeyListener extends NumberKeyListener { public int getInputType() { diff --git a/core/java/android/text/method/DateTimeKeyListener.java b/core/java/android/text/method/DateTimeKeyListener.java index 1593db5de641..a46ae45433b9 100644 --- a/core/java/android/text/method/DateTimeKeyListener.java +++ b/core/java/android/text/method/DateTimeKeyListener.java @@ -35,6 +35,7 @@ import java.util.Locale; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DateTimeKeyListener extends NumberKeyListener { public int getInputType() { diff --git a/core/java/android/text/method/DialerKeyListener.java b/core/java/android/text/method/DialerKeyListener.java index 17abed6c363a..9eea51a07593 100644 --- a/core/java/android/text/method/DialerKeyListener.java +++ b/core/java/android/text/method/DialerKeyListener.java @@ -28,6 +28,7 @@ import android.view.KeyEvent; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DialerKeyListener extends NumberKeyListener { @Override diff --git a/core/java/android/text/method/DigitsKeyListener.java b/core/java/android/text/method/DigitsKeyListener.java index d9f2dcf2e896..c97d4afef4fa 100644 --- a/core/java/android/text/method/DigitsKeyListener.java +++ b/core/java/android/text/method/DigitsKeyListener.java @@ -40,6 +40,7 @@ import java.util.Locale; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DigitsKeyListener extends NumberKeyListener { private char[] mAccepted; diff --git a/core/java/android/text/method/HideReturnsTransformationMethod.java b/core/java/android/text/method/HideReturnsTransformationMethod.java index 40ce8714cf38..8b93b3558f86 100644 --- a/core/java/android/text/method/HideReturnsTransformationMethod.java +++ b/core/java/android/text/method/HideReturnsTransformationMethod.java @@ -24,6 +24,7 @@ import android.os.Build; * to be hidden by displaying them as zero-width non-breaking space * characters (\uFEFF). */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class HideReturnsTransformationMethod extends ReplacementTransformationMethod { private static char[] ORIGINAL = new char[] { '\r' }; diff --git a/core/java/android/text/method/InsertModeTransformationMethod.java b/core/java/android/text/method/InsertModeTransformationMethod.java index 6c6576f8888e..ace2d256f5b0 100644 --- a/core/java/android/text/method/InsertModeTransformationMethod.java +++ b/core/java/android/text/method/InsertModeTransformationMethod.java @@ -58,6 +58,7 @@ import java.lang.reflect.Array; * the new transformed text: "hello abc\n\n world", and the highlight range will be [5, 11). * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class InsertModeTransformationMethod implements TransformationMethod, TextWatcher { /** The start offset of the highlight range in the original text, inclusive. */ private int mStart; diff --git a/core/java/android/text/method/KeyListener.java b/core/java/android/text/method/KeyListener.java index ce7054c40d01..447c4d9432ed 100644 --- a/core/java/android/text/method/KeyListener.java +++ b/core/java/android/text/method/KeyListener.java @@ -34,6 +34,7 @@ import android.view.View; * targetting Jelly Bean or later, and will only deliver it for some * key presses to applications targetting Ice Cream Sandwich or earlier. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface KeyListener { /** * Return the type of text that this key listener is manipulating, diff --git a/core/java/android/text/method/LinkMovementMethod.java b/core/java/android/text/method/LinkMovementMethod.java index 9f4a0aea7207..484bc1ae1a85 100644 --- a/core/java/android/text/method/LinkMovementMethod.java +++ b/core/java/android/text/method/LinkMovementMethod.java @@ -33,6 +33,7 @@ import android.widget.TextView; * A movement method that traverses links in the text buffer and scrolls if necessary. * Supports clicking on links with DPad Center or Enter. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LinkMovementMethod extends ScrollingMovementMethod { private static final int CLICK = 1; private static final int UP = 2; diff --git a/core/java/android/text/method/MetaKeyKeyListener.java b/core/java/android/text/method/MetaKeyKeyListener.java index d1d7c968411f..7c9c2f132793 100644 --- a/core/java/android/text/method/MetaKeyKeyListener.java +++ b/core/java/android/text/method/MetaKeyKeyListener.java @@ -71,6 +71,7 @@ import android.view.View; * } * </code> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class MetaKeyKeyListener { /** * Flag that indicates that the SHIFT key is on. diff --git a/core/java/android/text/method/MovementMethod.java b/core/java/android/text/method/MovementMethod.java index f6fe575a9265..5ea439d50561 100644 --- a/core/java/android/text/method/MovementMethod.java +++ b/core/java/android/text/method/MovementMethod.java @@ -32,6 +32,7 @@ import android.widget.TextView; * directly by applications. * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface MovementMethod { public void initialize(TextView widget, Spannable text); public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event); diff --git a/core/java/android/text/method/MultiTapKeyListener.java b/core/java/android/text/method/MultiTapKeyListener.java index 5770482b3feb..022853abf450 100644 --- a/core/java/android/text/method/MultiTapKeyListener.java +++ b/core/java/android/text/method/MultiTapKeyListener.java @@ -36,6 +36,7 @@ import android.view.View; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MultiTapKeyListener extends BaseKeyListener implements SpanWatcher { private static MultiTapKeyListener[] sInstance = diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java index 2b038dd11348..e32ccd48c7e3 100644 --- a/core/java/android/text/method/NumberKeyListener.java +++ b/core/java/android/text/method/NumberKeyListener.java @@ -39,6 +39,7 @@ import java.util.Locale; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class NumberKeyListener extends BaseKeyListener implements InputFilter { diff --git a/core/java/android/text/method/OffsetMapping.java b/core/java/android/text/method/OffsetMapping.java index fcf3de6784fb..99613d3ae300 100644 --- a/core/java/android/text/method/OffsetMapping.java +++ b/core/java/android/text/method/OffsetMapping.java @@ -27,6 +27,7 @@ import java.lang.annotation.RetentionPolicy; * {@link TransformationMethod} that alters the text length. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface OffsetMapping { /** * The mapping strategy for a character offset. diff --git a/core/java/android/text/method/PasswordTransformationMethod.java b/core/java/android/text/method/PasswordTransformationMethod.java index 53553be6e5a8..4a61d9aa1bd0 100644 --- a/core/java/android/text/method/PasswordTransformationMethod.java +++ b/core/java/android/text/method/PasswordTransformationMethod.java @@ -33,6 +33,7 @@ import android.view.View; import java.lang.ref.WeakReference; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PasswordTransformationMethod implements TransformationMethod, TextWatcher { diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java index c43864d0f215..27c58ea3a56e 100644 --- a/core/java/android/text/method/QwertyKeyListener.java +++ b/core/java/android/text/method/QwertyKeyListener.java @@ -37,6 +37,7 @@ import android.view.View; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class QwertyKeyListener extends BaseKeyListener { private static QwertyKeyListener[] sInstance = new QwertyKeyListener[Capitalize.values().length * 2]; diff --git a/core/java/android/text/method/ReplacementTransformationMethod.java b/core/java/android/text/method/ReplacementTransformationMethod.java index d6f879aa4353..05899d79b02e 100644 --- a/core/java/android/text/method/ReplacementTransformationMethod.java +++ b/core/java/android/text/method/ReplacementTransformationMethod.java @@ -30,6 +30,7 @@ import android.view.View; * array to be replaced by the corresponding characters in the * {@link #getReplacement} array. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class ReplacementTransformationMethod implements TransformationMethod { diff --git a/core/java/android/text/method/ScrollingMovementMethod.java b/core/java/android/text/method/ScrollingMovementMethod.java index 4f422cbf51cb..2e0eda96b7f6 100644 --- a/core/java/android/text/method/ScrollingMovementMethod.java +++ b/core/java/android/text/method/ScrollingMovementMethod.java @@ -25,6 +25,7 @@ import android.widget.TextView; /** * A movement method that interprets movement keys by scrolling the text buffer. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ScrollingMovementMethod extends BaseMovementMethod implements MovementMethod { @Override protected boolean left(TextView widget, Spannable buffer) { diff --git a/core/java/android/text/method/SingleLineTransformationMethod.java b/core/java/android/text/method/SingleLineTransformationMethod.java index 818526a7d795..d6eff86920f8 100644 --- a/core/java/android/text/method/SingleLineTransformationMethod.java +++ b/core/java/android/text/method/SingleLineTransformationMethod.java @@ -21,6 +21,7 @@ package android.text.method; * displayed as spaces instead of causing line breaks, and causes * carriage return characters (\r) to have no appearance. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SingleLineTransformationMethod extends ReplacementTransformationMethod { private static char[] ORIGINAL = new char[] { '\n', '\r' }; diff --git a/core/java/android/text/method/TextKeyListener.java b/core/java/android/text/method/TextKeyListener.java index 2eb917b6fd57..1b0ae61c62a4 100644 --- a/core/java/android/text/method/TextKeyListener.java +++ b/core/java/android/text/method/TextKeyListener.java @@ -43,6 +43,7 @@ import java.lang.ref.WeakReference; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextKeyListener extends BaseKeyListener implements SpanWatcher { private static TextKeyListener[] sInstance = new TextKeyListener[Capitalize.values().length * 2]; diff --git a/core/java/android/text/method/TimeKeyListener.java b/core/java/android/text/method/TimeKeyListener.java index f11f40099d9c..337611c79e3e 100644 --- a/core/java/android/text/method/TimeKeyListener.java +++ b/core/java/android/text/method/TimeKeyListener.java @@ -35,6 +35,7 @@ import java.util.Locale; * with hardware keyboards. Software input methods have no obligation to trigger * the methods in this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TimeKeyListener extends NumberKeyListener { public int getInputType() { diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java index 44811cb3ef8b..85aadba5da2b 100644 --- a/core/java/android/text/method/Touch.java +++ b/core/java/android/text/method/Touch.java @@ -25,6 +25,7 @@ import android.view.MotionEvent; import android.view.ViewConfiguration; import android.widget.TextView; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Touch { private Touch() { } diff --git a/core/java/android/text/method/TransformationMethod.java b/core/java/android/text/method/TransformationMethod.java index 8f3b334abbbd..5246baa39d14 100644 --- a/core/java/android/text/method/TransformationMethod.java +++ b/core/java/android/text/method/TransformationMethod.java @@ -24,6 +24,7 @@ import android.view.View; * characters of passwords with dots, or keeping the newline characters * from causing line breaks in single-line text fields. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface TransformationMethod { /** diff --git a/core/java/android/text/method/TransformationMethod2.java b/core/java/android/text/method/TransformationMethod2.java index 8d5ec246640e..6e0feb419f00 100644 --- a/core/java/android/text/method/TransformationMethod2.java +++ b/core/java/android/text/method/TransformationMethod2.java @@ -23,6 +23,7 @@ import android.compat.annotation.UnsupportedAppUsage; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface TransformationMethod2 extends TransformationMethod { /** * Relax the contract of TransformationMethod to allow length changes, diff --git a/core/java/android/text/method/TranslationTransformationMethod.java b/core/java/android/text/method/TranslationTransformationMethod.java index 43d186ee9d21..8f43d3dd1f6f 100644 --- a/core/java/android/text/method/TranslationTransformationMethod.java +++ b/core/java/android/text/method/TranslationTransformationMethod.java @@ -33,6 +33,7 @@ import java.util.regex.Pattern; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TranslationTransformationMethod implements TransformationMethod2 { private static final String TAG = "TranslationTransformationMethod"; diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java index 2956f8461388..d57fa9b55312 100644 --- a/core/java/android/text/method/WordIterator.java +++ b/core/java/android/text/method/WordIterator.java @@ -37,6 +37,7 @@ import java.util.Locale; * Also provides methods to determine word boundaries. * {@hide} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class WordIterator implements Selection.PositionIterator { // Size of the window for the word iterator, should be greater than the longest word's length private static final int WINDOW_WIDTH = 50; diff --git a/core/java/android/text/style/AbsoluteSizeSpan.java b/core/java/android/text/style/AbsoluteSizeSpan.java index 6d4f05a84a03..1bc5d71fcd37 100644 --- a/core/java/android/text/style/AbsoluteSizeSpan.java +++ b/core/java/android/text/style/AbsoluteSizeSpan.java @@ -32,6 +32,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/absolutesizespan.png" /> * <figcaption>Text with text size updated.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AbsoluteSizeSpan extends MetricAffectingSpan implements ParcelableSpan { private final int mSize; diff --git a/core/java/android/text/style/AccessibilityClickableSpan.java b/core/java/android/text/style/AccessibilityClickableSpan.java index ee8d156f9aac..5741f2ae2864 100644 --- a/core/java/android/text/style/AccessibilityClickableSpan.java +++ b/core/java/android/text/style/AccessibilityClickableSpan.java @@ -43,6 +43,7 @@ import com.android.internal.R; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AccessibilityClickableSpan extends ClickableSpan implements ParcelableSpan { // The id of the span this one replaces diff --git a/core/java/android/text/style/AccessibilityReplacementSpan.java b/core/java/android/text/style/AccessibilityReplacementSpan.java index e4fc14790b53..af3a324668d0 100644 --- a/core/java/android/text/style/AccessibilityReplacementSpan.java +++ b/core/java/android/text/style/AccessibilityReplacementSpan.java @@ -31,6 +31,7 @@ import android.view.accessibility.AccessibilityNodeInfo; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AccessibilityReplacementSpan extends ReplacementSpan implements ParcelableSpan { diff --git a/core/java/android/text/style/AccessibilityURLSpan.java b/core/java/android/text/style/AccessibilityURLSpan.java index e280bdf8b339..1fb76e776b56 100644 --- a/core/java/android/text/style/AccessibilityURLSpan.java +++ b/core/java/android/text/style/AccessibilityURLSpan.java @@ -27,6 +27,7 @@ import android.view.accessibility.AccessibilityNodeInfo; * @hide */ @SuppressWarnings("ParcelableCreator") +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AccessibilityURLSpan extends URLSpan implements Parcelable { final AccessibilityClickableSpan mAccessibilityClickableSpan; diff --git a/core/java/android/text/style/AlignmentSpan.java b/core/java/android/text/style/AlignmentSpan.java index 31db78a51c75..53cbd63a32c7 100644 --- a/core/java/android/text/style/AlignmentSpan.java +++ b/core/java/android/text/style/AlignmentSpan.java @@ -25,6 +25,7 @@ import android.text.TextUtils; /** * Span that allows defining the alignment of text at the paragraph level. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface AlignmentSpan extends ParagraphStyle { /** diff --git a/core/java/android/text/style/BackgroundColorSpan.java b/core/java/android/text/style/BackgroundColorSpan.java index 13647d92a897..bb04d0ff6178 100644 --- a/core/java/android/text/style/BackgroundColorSpan.java +++ b/core/java/android/text/style/BackgroundColorSpan.java @@ -34,6 +34,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/backgroundcolorspan.png" /> * <figcaption>Set a background color for the text.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BackgroundColorSpan extends CharacterStyle implements UpdateAppearance, ParcelableSpan { diff --git a/core/java/android/text/style/BulletSpan.java b/core/java/android/text/style/BulletSpan.java index f70e6c56b5c9..24ae6e25fa59 100644 --- a/core/java/android/text/style/BulletSpan.java +++ b/core/java/android/text/style/BulletSpan.java @@ -63,6 +63,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/custombulletspan.png" /> * <figcaption>Customized BulletSpan.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BulletSpan implements LeadingMarginSpan, ParcelableSpan { // Bullet is slightly bigger to avoid aliasing artifacts on mdpi devices. private static final int STANDARD_BULLET_RADIUS = 4; diff --git a/core/java/android/text/style/CharacterStyle.java b/core/java/android/text/style/CharacterStyle.java index 5b95f1a7816a..2ea05e6ecde0 100644 --- a/core/java/android/text/style/CharacterStyle.java +++ b/core/java/android/text/style/CharacterStyle.java @@ -23,6 +23,7 @@ import android.text.TextPaint; * class. Most extend its subclass {@link MetricAffectingSpan}, but simple * ones may just implement {@link UpdateAppearance}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class CharacterStyle { public abstract void updateDrawState(TextPaint tp); diff --git a/core/java/android/text/style/ClickableSpan.java b/core/java/android/text/style/ClickableSpan.java index 238da55526b0..9e35d75c8833 100644 --- a/core/java/android/text/style/ClickableSpan.java +++ b/core/java/android/text/style/ClickableSpan.java @@ -36,6 +36,7 @@ import android.view.View; * <img src="{@docRoot}reference/android/images/text/style/clickablespan.png" /> * <figcaption>Text with <code>ClickableSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance { private static int sIdCounter = 0; diff --git a/core/java/android/text/style/ForegroundColorSpan.java b/core/java/android/text/style/ForegroundColorSpan.java index 5c9742622549..337c49fddf16 100644 --- a/core/java/android/text/style/ForegroundColorSpan.java +++ b/core/java/android/text/style/ForegroundColorSpan.java @@ -34,6 +34,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/foregroundcolorspan.png" /> * <figcaption>Set a text color.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ForegroundColorSpan extends CharacterStyle implements UpdateAppearance, ParcelableSpan { diff --git a/core/java/android/text/style/IconMarginSpan.java b/core/java/android/text/style/IconMarginSpan.java index a6c513971ffb..cc946e98ece9 100644 --- a/core/java/android/text/style/IconMarginSpan.java +++ b/core/java/android/text/style/IconMarginSpan.java @@ -44,6 +44,7 @@ import android.text.Spanned; * @see DrawableMarginSpan for working with a {@link android.graphics.drawable.Drawable} instead of * a {@link Bitmap}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class IconMarginSpan implements LeadingMarginSpan, LineHeightSpan { @NonNull diff --git a/core/java/android/text/style/LeadingMarginSpan.java b/core/java/android/text/style/LeadingMarginSpan.java index 5bd2d60bb34f..60c45784f680 100644 --- a/core/java/android/text/style/LeadingMarginSpan.java +++ b/core/java/android/text/style/LeadingMarginSpan.java @@ -32,6 +32,7 @@ import android.text.TextUtils; * LeadingMarginSpans should be attached from the first character to the last * character of a single paragraph. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface LeadingMarginSpan extends ParagraphStyle { diff --git a/core/java/android/text/style/LineBackgroundSpan.java b/core/java/android/text/style/LineBackgroundSpan.java index 7cb91477738e..c2d38ce92290 100644 --- a/core/java/android/text/style/LineBackgroundSpan.java +++ b/core/java/android/text/style/LineBackgroundSpan.java @@ -28,6 +28,7 @@ import android.text.TextUtils; /** * Used to change the background of lines where the span is attached to. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface LineBackgroundSpan extends ParagraphStyle { /** diff --git a/core/java/android/text/style/LineBreakConfigSpan.java b/core/java/android/text/style/LineBreakConfigSpan.java index eeb638389271..1af1eed86e1f 100644 --- a/core/java/android/text/style/LineBreakConfigSpan.java +++ b/core/java/android/text/style/LineBreakConfigSpan.java @@ -31,6 +31,7 @@ import java.util.Objects; * LineBreakSpan for changing line break style of the specific region of the text. */ @FlaggedApi(FLAG_NO_BREAK_NO_HYPHENATION_SPAN) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class LineBreakConfigSpan implements ParcelableSpan { private final LineBreakConfig mLineBreakConfig; diff --git a/core/java/android/text/style/LineHeightSpan.java b/core/java/android/text/style/LineHeightSpan.java index ae565d1c3317..71e8932c4aba 100644 --- a/core/java/android/text/style/LineHeightSpan.java +++ b/core/java/android/text/style/LineHeightSpan.java @@ -30,6 +30,7 @@ import com.android.internal.util.Preconditions; /** * The classes that affect the line height of paragraph should implement this interface. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface LineHeightSpan extends ParagraphStyle, WrapTogetherSpan { /** * Classes that implement this should define how the height is being calculated. diff --git a/core/java/android/text/style/LocaleSpan.java b/core/java/android/text/style/LocaleSpan.java index 489ceeaa5542..be5525a2f41a 100644 --- a/core/java/android/text/style/LocaleSpan.java +++ b/core/java/android/text/style/LocaleSpan.java @@ -32,6 +32,7 @@ import java.util.Locale; /** * Changes the {@link Locale} of the text to which the span is attached. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LocaleSpan extends MetricAffectingSpan implements ParcelableSpan { @NonNull private final LocaleList mLocales; diff --git a/core/java/android/text/style/MaskFilterSpan.java b/core/java/android/text/style/MaskFilterSpan.java index 587d1b4497dc..44db012953b3 100644 --- a/core/java/android/text/style/MaskFilterSpan.java +++ b/core/java/android/text/style/MaskFilterSpan.java @@ -30,6 +30,7 @@ import android.text.TextPaint; * <img src="{@docRoot}reference/android/images/text/style/maskfilterspan.png" /> * <figcaption>Text blurred with the <code>MaskFilterSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MaskFilterSpan extends CharacterStyle implements UpdateAppearance { private MaskFilter mFilter; diff --git a/core/java/android/text/style/MetricAffectingSpan.java b/core/java/android/text/style/MetricAffectingSpan.java index 61b7947af638..f30fdc15ae39 100644 --- a/core/java/android/text/style/MetricAffectingSpan.java +++ b/core/java/android/text/style/MetricAffectingSpan.java @@ -23,6 +23,7 @@ import android.text.TextPaint; * The classes that affect character-level text formatting in a way that * changes the width or height of characters extend this class. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class MetricAffectingSpan extends CharacterStyle implements UpdateLayout { diff --git a/core/java/android/text/style/NoWritingToolsSpan.java b/core/java/android/text/style/NoWritingToolsSpan.java index 90f85aa69faa..c7dfcfa6dc0b 100644 --- a/core/java/android/text/style/NoWritingToolsSpan.java +++ b/core/java/android/text/style/NoWritingToolsSpan.java @@ -32,6 +32,7 @@ import android.text.TextUtils; * tools should only rewrite the user input text, and not modify the quoted text. */ @FlaggedApi(FLAG_WRITING_TOOLS) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class NoWritingToolsSpan implements ParcelableSpan { /** diff --git a/core/java/android/text/style/ParagraphStyle.java b/core/java/android/text/style/ParagraphStyle.java index 423156eca3de..27c1e261b116 100644 --- a/core/java/android/text/style/ParagraphStyle.java +++ b/core/java/android/text/style/ParagraphStyle.java @@ -20,6 +20,7 @@ package android.text.style; * The classes that affect paragraph-level text formatting implement * this interface. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface ParagraphStyle { diff --git a/core/java/android/text/style/QuoteSpan.java b/core/java/android/text/style/QuoteSpan.java index 393ede653cb1..99c95749205a 100644 --- a/core/java/android/text/style/QuoteSpan.java +++ b/core/java/android/text/style/QuoteSpan.java @@ -57,6 +57,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/customquotespan.png" /> * <figcaption>Customized <code>QuoteSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class QuoteSpan implements LeadingMarginSpan, ParcelableSpan { /** * Default stripe width in pixels. diff --git a/core/java/android/text/style/RasterizerSpan.java b/core/java/android/text/style/RasterizerSpan.java index f0be50ab065c..cf8599c4f1b1 100644 --- a/core/java/android/text/style/RasterizerSpan.java +++ b/core/java/android/text/style/RasterizerSpan.java @@ -22,6 +22,7 @@ import android.text.TextPaint; /** * @removed Rasterizer is not supported for hw-accerlerated and PDF rendering */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RasterizerSpan extends CharacterStyle implements UpdateAppearance { private Rasterizer mRasterizer; diff --git a/core/java/android/text/style/RelativeSizeSpan.java b/core/java/android/text/style/RelativeSizeSpan.java index 5c91b201d28c..38d5d38ae704 100644 --- a/core/java/android/text/style/RelativeSizeSpan.java +++ b/core/java/android/text/style/RelativeSizeSpan.java @@ -34,6 +34,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/relativesizespan.png" /> * <figcaption>Text increased by 50% with <code>RelativeSizeSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RelativeSizeSpan extends MetricAffectingSpan implements ParcelableSpan { private final float mProportion; diff --git a/core/java/android/text/style/ReplacementSpan.java b/core/java/android/text/style/ReplacementSpan.java index 9430fd3a26c0..a6fe1fe72937 100644 --- a/core/java/android/text/style/ReplacementSpan.java +++ b/core/java/android/text/style/ReplacementSpan.java @@ -23,6 +23,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.text.TextPaint; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class ReplacementSpan extends MetricAffectingSpan { private CharSequence mContentDescription = null; diff --git a/core/java/android/text/style/ScaleXSpan.java b/core/java/android/text/style/ScaleXSpan.java index d022b071b4d7..009973ee5306 100644 --- a/core/java/android/text/style/ScaleXSpan.java +++ b/core/java/android/text/style/ScaleXSpan.java @@ -36,6 +36,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/scalexspan.png" /> * <figcaption>Text scaled by 100% with <code>ScaleXSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ScaleXSpan extends MetricAffectingSpan implements ParcelableSpan { private final float mProportion; diff --git a/core/java/android/text/style/SpanUtils.java b/core/java/android/text/style/SpanUtils.java index 6b4bd1a76358..21a96cdfe3b1 100644 --- a/core/java/android/text/style/SpanUtils.java +++ b/core/java/android/text/style/SpanUtils.java @@ -30,6 +30,7 @@ import java.util.List; /** * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpanUtils { private SpanUtils() {} // Do not instantiate diff --git a/core/java/android/text/style/SpellCheckSpan.java b/core/java/android/text/style/SpellCheckSpan.java index e8ec3c6fb55c..39cd279d3d18 100644 --- a/core/java/android/text/style/SpellCheckSpan.java +++ b/core/java/android/text/style/SpellCheckSpan.java @@ -28,6 +28,7 @@ import android.text.TextUtils; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SpellCheckSpan implements ParcelableSpan { private boolean mSpellCheckInProgress; diff --git a/core/java/android/text/style/StrikethroughSpan.java b/core/java/android/text/style/StrikethroughSpan.java index 65ee34717232..3654870ee088 100644 --- a/core/java/android/text/style/StrikethroughSpan.java +++ b/core/java/android/text/style/StrikethroughSpan.java @@ -32,6 +32,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/strikethroughspan.png" /> * <figcaption>Strikethrough text.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class StrikethroughSpan extends CharacterStyle implements UpdateAppearance, ParcelableSpan { diff --git a/core/java/android/text/style/StyleSpan.java b/core/java/android/text/style/StyleSpan.java index 378682b9c890..c01e13443ad1 100644 --- a/core/java/android/text/style/StyleSpan.java +++ b/core/java/android/text/style/StyleSpan.java @@ -44,6 +44,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/stylespan.png" /> * <figcaption>Text styled bold and italic with the <code>StyleSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class StyleSpan extends MetricAffectingSpan implements ParcelableSpan { private final int mStyle; diff --git a/core/java/android/text/style/SubscriptSpan.java b/core/java/android/text/style/SubscriptSpan.java index 729a9ad73e75..54c765d902a4 100644 --- a/core/java/android/text/style/SubscriptSpan.java +++ b/core/java/android/text/style/SubscriptSpan.java @@ -37,6 +37,7 @@ import android.text.TextUtils; * Note: Since the span affects the position of the text, if the text is on the last line of a * TextView, it may appear cut. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SubscriptSpan extends MetricAffectingSpan implements ParcelableSpan { /** diff --git a/core/java/android/text/style/SuggestionRangeSpan.java b/core/java/android/text/style/SuggestionRangeSpan.java index 1eee99aaac62..640fae4d1a3a 100644 --- a/core/java/android/text/style/SuggestionRangeSpan.java +++ b/core/java/android/text/style/SuggestionRangeSpan.java @@ -27,6 +27,7 @@ import android.text.TextUtils; * A SuggestionRangeSpan is used to show which part of an EditText is affected by a suggestion * popup window. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpan { private int mBackgroundColor; diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java index 0cf96f617f4a..d819062428f9 100644 --- a/core/java/android/text/style/SuggestionSpan.java +++ b/core/java/android/text/style/SuggestionSpan.java @@ -48,6 +48,7 @@ import java.util.Locale; * * @see TextView#isSuggestionsEnabled() */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SuggestionSpan extends CharacterStyle implements ParcelableSpan { private static final String TAG = "SuggestionSpan"; diff --git a/core/java/android/text/style/SuperscriptSpan.java b/core/java/android/text/style/SuperscriptSpan.java index 561022352ffd..d3b339c02e92 100644 --- a/core/java/android/text/style/SuperscriptSpan.java +++ b/core/java/android/text/style/SuperscriptSpan.java @@ -35,6 +35,7 @@ import android.text.TextUtils; * TextView, it may appear cut. This can be avoided by decreasing the text size with an {@link * AbsoluteSizeSpan} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SuperscriptSpan extends MetricAffectingSpan implements ParcelableSpan { /** * Creates a {@link SuperscriptSpan}. diff --git a/core/java/android/text/style/TabStopSpan.java b/core/java/android/text/style/TabStopSpan.java index 812847594ad8..e6733a2aac91 100644 --- a/core/java/android/text/style/TabStopSpan.java +++ b/core/java/android/text/style/TabStopSpan.java @@ -24,6 +24,7 @@ import android.annotation.Px; * the leading margin of the line. <code>TabStopSpan</code> will only affect the first tab * encountered on the first line of the text. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface TabStopSpan extends ParagraphStyle { /** diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java index 245a9dbc9f6c..7ede3499dc4d 100644 --- a/core/java/android/text/style/TextAppearanceSpan.java +++ b/core/java/android/text/style/TextAppearanceSpan.java @@ -58,6 +58,7 @@ import android.text.TextUtils; * @attr ref android.R.styleable#TextAppearance_fontVariationSettings * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextAppearanceSpan extends MetricAffectingSpan implements ParcelableSpan { private final String mFamilyName; private final int mStyle; diff --git a/core/java/android/text/style/TtsSpan.java b/core/java/android/text/style/TtsSpan.java index e0d4ec1ca826..6d776d14fb00 100644 --- a/core/java/android/text/style/TtsSpan.java +++ b/core/java/android/text/style/TtsSpan.java @@ -42,6 +42,7 @@ import java.util.Locale; * The inner classes are there for convenience and provide builders for each * TtsSpan type. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TtsSpan implements ParcelableSpan { private final String mType; private final PersistableBundle mArgs; diff --git a/core/java/android/text/style/TypefaceSpan.java b/core/java/android/text/style/TypefaceSpan.java index bdfc772c0328..86f7f7638629 100644 --- a/core/java/android/text/style/TypefaceSpan.java +++ b/core/java/android/text/style/TypefaceSpan.java @@ -50,6 +50,7 @@ import android.text.TextUtils; * <figcaption>Text with <code>TypefaceSpan</code>s constructed based on a font from resource and * from a font family.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TypefaceSpan extends MetricAffectingSpan implements ParcelableSpan { @Nullable diff --git a/core/java/android/text/style/URLSpan.java b/core/java/android/text/style/URLSpan.java index 9969d29a857d..f06627d0cbe1 100644 --- a/core/java/android/text/style/URLSpan.java +++ b/core/java/android/text/style/URLSpan.java @@ -41,6 +41,7 @@ import android.view.View; * <img src="{@docRoot}reference/android/images/text/style/urlspan.png" /> * <figcaption>Text with <code>URLSpan</code>.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class URLSpan extends ClickableSpan implements ParcelableSpan { private final String mURL; diff --git a/core/java/android/text/style/UnderlineSpan.java b/core/java/android/text/style/UnderlineSpan.java index 075e70b7fbf5..b3bb142d1dc8 100644 --- a/core/java/android/text/style/UnderlineSpan.java +++ b/core/java/android/text/style/UnderlineSpan.java @@ -32,6 +32,7 @@ import android.text.TextUtils; * <img src="{@docRoot}reference/android/images/text/style/underlinespan.png" /> * <figcaption>Underlined text.</figcaption> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class UnderlineSpan extends CharacterStyle implements UpdateAppearance, ParcelableSpan { diff --git a/core/java/android/text/style/UpdateAppearance.java b/core/java/android/text/style/UpdateAppearance.java index 7112347fcfbf..7b0a6d372122 100644 --- a/core/java/android/text/style/UpdateAppearance.java +++ b/core/java/android/text/style/UpdateAppearance.java @@ -22,5 +22,6 @@ package android.text.style; * that if the class also impacts size or other metrics, it should instead * implement {@link UpdateLayout}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface UpdateAppearance { } diff --git a/core/java/android/text/style/UpdateLayout.java b/core/java/android/text/style/UpdateLayout.java index 591075ecb972..5af4141cc8c2 100644 --- a/core/java/android/text/style/UpdateLayout.java +++ b/core/java/android/text/style/UpdateLayout.java @@ -22,4 +22,5 @@ package android.text.style; * this interface. This interface also includes {@link UpdateAppearance} * since such a change implicitly also impacts the appearance. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface UpdateLayout extends UpdateAppearance { } diff --git a/core/java/android/text/style/WrapTogetherSpan.java b/core/java/android/text/style/WrapTogetherSpan.java index 11721a8c3253..cf74c1bae3b7 100644 --- a/core/java/android/text/style/WrapTogetherSpan.java +++ b/core/java/android/text/style/WrapTogetherSpan.java @@ -16,6 +16,7 @@ package android.text.style; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface WrapTogetherSpan extends ParagraphStyle { diff --git a/core/java/android/text/util/Rfc822Token.java b/core/java/android/text/util/Rfc822Token.java index 2f207db9d494..d6e987b2952e 100644 --- a/core/java/android/text/util/Rfc822Token.java +++ b/core/java/android/text/util/Rfc822Token.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; * This class stores an RFC 822-like name, address, and comment, * and provides methods to convert them to quoted strings. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Rfc822Token { @Nullable private String mName, mAddress, mComment; diff --git a/core/java/android/text/util/Rfc822Tokenizer.java b/core/java/android/text/util/Rfc822Tokenizer.java index 68334e4d927c..8a9252ac9506 100644 --- a/core/java/android/text/util/Rfc822Tokenizer.java +++ b/core/java/android/text/util/Rfc822Tokenizer.java @@ -27,6 +27,7 @@ import java.util.Collection; * a string of addresses (such as might be typed into such a field) * into a series of Rfc822Tokens. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Rfc822Tokenizer implements MultiAutoCompleteTextView.Tokenizer { /** diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 06702e2fa4bf..0c18de92a391 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -489,6 +489,7 @@ cc_library_shared_for_libandroid_runtime { "libsqlite", "libgui_window_info_static", "libbinder", + "libbinder_ndk", "libhidlbase", // libhwbinder is in here ], version_script: "platform/linux/libandroid_runtime_export.txt", diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp index 4c49ff849d49..05fb5735972e 100644 --- a/core/tests/coretests/Android.bp +++ b/core/tests/coretests/Android.bp @@ -249,8 +249,14 @@ android_library { android_ravenwood_test { name: "FrameworksCoreTestsRavenwood", libs: [ - "android.test.base.stubs.system", - "android.test.runner.stubs.system", + "android.test.base.stubs", + "android.test.mock.stubs", + "android.test.runner.stubs", + "android.view.flags-aconfig-java", + "ext", + "framework", + "framework-res", + "org.apache.http.legacy.stubs", ], static_libs: [ "androidx.annotation_annotation", @@ -264,6 +270,7 @@ android_ravenwood_test { "flag-junit", "flag-junit", "perfetto_trace_java_protos", + "platform-compat-test-rules", "platform-test-annotations", "testng", ], @@ -278,8 +285,12 @@ android_ravenwood_test { "src/android/content/res/*.java", "src/android/content/res/*.kt", "src/android/database/CursorWindowTest.java", + "src/android/graphics/*.java", + "src/android/graphics/*.kt", "src/android/os/**/*.java", "src/android/telephony/PinResultTest.java", + "src/android/text/**/*.java", + "src/android/text/**/*.kt", "src/android/util/**/*.java", "src/android/view/DisplayAdjustmentsTests.java", "src/android/view/DisplayInfoTest.java", @@ -288,20 +299,21 @@ android_ravenwood_test { "src/com/android/internal/os/**/*.java", "src/com/android/internal/power/EnergyConsumerStatsTest.java", "src/com/android/internal/ravenwood/**/*.java", - - // Pull in R.java from FrameworksCoreTests-resonly, not from FrameworksCoreTests, - // to avoid having a dependency to FrameworksCoreTests. - // This way, when updating source files and running this test, we don't need to - // rebuild the entire FrameworksCoreTests, which would be slow. "src/com/android/internal/util/**/*.java", ":FrameworksCoreTestDoubles-sources", ":FrameworksCoreTests-aidl", ":FrameworksCoreTests-helpers", + + // Pull in R.java from FrameworksCoreTests-resonly, not from FrameworksCoreTests, + // to avoid having a dependency to FrameworksCoreTests. + // This way, when updating source files and running this test, we don't need to + // rebuild the entire FrameworksCoreTests, which would be slow. ":FrameworksCoreTests-resonly{.aapt.srcjar}", ], exclude_srcs: [ "src/android/content/res/FontScaleConverterActivityTest.java", + "src/android/graphics/GraphicsPerformanceTests.java", ], resource_apk: "FrameworksCoreTests-resonly", aidl: { @@ -313,6 +325,7 @@ android_ravenwood_test { "res/xml/power_profile_test_cpu_legacy.xml", "res/xml/power_profile_test_modem.xml", ], + sdk_version: "core_platform", auto_gen_config: true, team: "trendy_team_ravenwood", } diff --git a/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt b/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt index 0e5d92688123..2c614424a9a5 100644 --- a/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt +++ b/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt @@ -17,10 +17,8 @@ package android.content.res import android.platform.test.annotations.Presubmit -import android.platform.test.ravenwood.RavenwoodRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertWithMessage -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -28,9 +26,6 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class FontScaleConverterTest { - @get:Rule - val ravenwoodRule: RavenwoodRule = RavenwoodRule.Builder().build() - @Test fun straightInterpolation() { val table = createTable(8f to 8f, 10f to 10f, 20f to 20f) diff --git a/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java b/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java index 84bdbe03df13..263307ee3df7 100644 --- a/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java +++ b/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java @@ -20,7 +20,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import android.os.MemoryFile; import android.os.ParcelFileDescriptor; +import android.platform.test.annotations.DisabledOnRavenwood; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -37,6 +39,7 @@ public class BitmapFactoryTest { // tests that we can decode bitmaps from MemoryFiles @SmallTest @Test + @DisabledOnRavenwood(blockedBy = MemoryFile.class) public void testBitmapParcelFileDescriptor() throws Exception { Bitmap bitmap1 = Bitmap.createBitmap( new int[] { Color.BLUE }, 1, 1, Bitmap.Config.RGB_565); diff --git a/core/tests/coretests/src/android/graphics/BitmapTest.java b/core/tests/coretests/src/android/graphics/BitmapTest.java index 0126d367eb20..61c3d7813e88 100644 --- a/core/tests/coretests/src/android/graphics/BitmapTest.java +++ b/core/tests/coretests/src/android/graphics/BitmapTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.hardware.HardwareBuffer; +import android.platform.test.annotations.DisabledOnRavenwood; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -252,6 +253,7 @@ public class BitmapTest { | GraphicBuffer.USAGE_SW_WRITE_OFTEN; @Test + @DisabledOnRavenwood(blockedBy = HardwareBuffer.class) public void testWrapHardwareBufferWithSrgbColorSpace() { GraphicBuffer buffer = GraphicBuffer.create(10, 10, PixelFormat.RGBA_8888, GRAPHICS_USAGE); Canvas canvas = buffer.lockCanvas(); @@ -265,6 +267,7 @@ public class BitmapTest { } @Test + @DisabledOnRavenwood(blockedBy = HardwareBuffer.class) public void testWrapHardwareBufferWithDisplayP3ColorSpace() { GraphicBuffer buffer = GraphicBuffer.create(10, 10, PixelFormat.RGBA_8888, GRAPHICS_USAGE); Canvas canvas = buffer.lockCanvas(); diff --git a/core/tests/coretests/src/android/graphics/PaintTest.java b/core/tests/coretests/src/android/graphics/PaintTest.java index 56760d77e28b..deb5157bb339 100644 --- a/core/tests/coretests/src/android/graphics/PaintTest.java +++ b/core/tests/coretests/src/android/graphics/PaintTest.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; @@ -97,6 +98,7 @@ public class PaintTest { @SmallTest @Test + @DisabledOnRavenwood(bug = 391381043) public void testHintingWidth() { final Typeface fontTypeface = Typeface.createFromAsset( InstrumentationRegistry.getInstrumentation().getContext().getAssets(), FONT_PATH); @@ -143,6 +145,7 @@ public class PaintTest { } @Test + @DisabledOnRavenwood(bug = 391381043) public void testHasGlyph_variationSelectors() { final Typeface fontTypeface = Typeface.createFromAsset( InstrumentationRegistry.getInstrumentation().getContext().getAssets(), diff --git a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java index 2b6eda8f0988..dc3376e09b15 100644 --- a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java +++ b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java @@ -35,9 +35,9 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.text.FontConfig; import android.util.ArrayMap; -import androidx.test.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import androidx.test.platform.app.InstrumentationRegistry; import com.android.text.flags.Flags; @@ -63,9 +63,6 @@ import java.util.Map; @SmallTest @RunWith(AndroidJUnit4.class) public class TypefaceSystemFallbackTest { - private static final String SYSTEM_FONT_DIR = "/system/fonts/"; - private static final String SYSTEM_FONTS_XML = "/system/etc/fonts.xml"; - private static final String[] TEST_FONT_FILES = { "a3em.ttf", // Supports "a","b","c". The width of "a" is 3em, others are 1em. "b3em.ttf", // Supports "a","b","c". The width of "b" is 3em, others are 1em. @@ -118,8 +115,6 @@ public class TypefaceSystemFallbackTest { @Before public void setUp() { - final AssetManager am = - InstrumentationRegistry.getInstrumentation().getContext().getAssets(); for (final String fontFile : TEST_FONT_FILES) { final String sourceInAsset = "fonts/" + fontFile; copyAssetToFile(sourceInAsset, new File(TEST_FONT_DIR, fontFile)); @@ -216,7 +211,8 @@ public class TypefaceSystemFallbackTest { FontConfig fontConfig; try { fontConfig = FontListParser.parse( - SYSTEM_FONTS_XML, SYSTEM_FONT_DIR, null, TEST_OEM_DIR, null, 0, 0); + SystemFonts.LEGACY_FONTS_XML, SystemFonts.SYSTEM_FONT_DIR, + null, TEST_OEM_DIR, null, 0, 0); } catch (IOException | XmlPullParserException e) { throw new RuntimeException(e); } diff --git a/core/tests/coretests/src/android/graphics/TypefaceTest.java b/core/tests/coretests/src/android/graphics/TypefaceTest.java index 80efa511d163..0c8b5ab5f3f9 100644 --- a/core/tests/coretests/src/android/graphics/TypefaceTest.java +++ b/core/tests/coretests/src/android/graphics/TypefaceTest.java @@ -26,6 +26,7 @@ import android.content.res.Resources; import android.graphics.fonts.FontFamily; import android.graphics.fonts.SystemFonts; import android.os.SharedMemory; +import android.platform.test.annotations.DisabledOnRavenwood; import android.text.FontConfig; import android.util.ArrayMap; @@ -196,6 +197,7 @@ public class TypefaceTest { @SmallTest @Test + @DisabledOnRavenwood(blockedBy = SharedMemory.class) public void testSerialize() throws Exception { FontConfig fontConfig = SystemFonts.getSystemPreinstalledFontConfig(); Map<String, FontFamily[]> fallbackMap = SystemFonts.buildSystemFallback(fontConfig); diff --git a/core/tests/coretests/src/android/text/AndroidCharacterTest.java b/core/tests/coretests/src/android/text/AndroidCharacterTest.java index 1c5986a838fc..819a5fb8fd40 100644 --- a/core/tests/coretests/src/android/text/AndroidCharacterTest.java +++ b/core/tests/coretests/src/android/text/AndroidCharacterTest.java @@ -18,6 +18,7 @@ package android.text; import static org.junit.Assert.assertArrayEquals; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; @@ -26,6 +27,7 @@ import org.junit.Test; @Presubmit @SmallTest +@DisabledOnRavenwood(reason = "No need to make j.l.Character match behavior of AndroidCharacter") public class AndroidCharacterTest { @Test diff --git a/core/tests/coretests/src/android/text/SpanColorsTest.java b/core/tests/coretests/src/android/text/SpanColorsTest.java index d2cb8c160d21..4cdbd0886310 100644 --- a/core/tests/coretests/src/android/text/SpanColorsTest.java +++ b/core/tests/coretests/src/android/text/SpanColorsTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import android.graphics.Color; import android.graphics.drawable.ShapeDrawable; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; @@ -35,6 +36,7 @@ import org.junit.runner.RunWith; @Presubmit @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = ShapeDrawable.class) public class SpanColorsTest { private final TextPaint mWorkPaint = new TextPaint(); private SpanColors mSpanColors; diff --git a/core/tests/coretests/src/android/text/SpannableTest.java b/core/tests/coretests/src/android/text/SpannableTest.java index a3e6a7812324..710d1e2a3314 100644 --- a/core/tests/coretests/src/android/text/SpannableTest.java +++ b/core/tests/coretests/src/android/text/SpannableTest.java @@ -16,10 +16,10 @@ package android.text; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import android.platform.test.annotations.Presubmit; -import android.test.MoreAsserts; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; @@ -50,13 +50,13 @@ public abstract class SpannableTest { // but other spans are not, unless the query region is empty, in // in which case any abutting spans are returned. spans = spannable.getSpans(0, 1, Object.class); - MoreAsserts.assertEquals(new Object[]{emptySpan}, spans); + assertArrayEquals(new Object[]{emptySpan}, spans); spans = spannable.getSpans(0, 2, Object.class); - MoreAsserts.assertEquals(new Object[]{emptySpan, unemptySpan}, spans); + assertArrayEquals(new Object[]{emptySpan, unemptySpan}, spans); spans = spannable.getSpans(1, 2, Object.class); - MoreAsserts.assertEquals(new Object[]{emptySpan, unemptySpan}, spans); + assertArrayEquals(new Object[]{emptySpan, unemptySpan}, spans); spans = spannable.getSpans(2, 2, Object.class); - MoreAsserts.assertEquals(new Object[]{unemptySpan}, spans); + assertArrayEquals(new Object[]{unemptySpan}, spans); } @Test diff --git a/core/tests/coretests/src/android/text/StaticLayoutTest.java b/core/tests/coretests/src/android/text/StaticLayoutTest.java index 3541900dcacf..55f38b2fc2bd 100644 --- a/core/tests/coretests/src/android/text/StaticLayoutTest.java +++ b/core/tests/coretests/src/android/text/StaticLayoutTest.java @@ -25,6 +25,7 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.os.LocaleList; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.text.Layout.Alignment; import android.text.method.EditorState; @@ -726,6 +727,7 @@ public class StaticLayoutTest { } @Test + @DisabledOnRavenwood(bug = 391342883) public void testLocaleSpanAffectsHyphenation() { TextPaint paint = new TextPaint(); paint.setTextLocale(Locale.US); diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java index f552265cc507..e38c8800169a 100644 --- a/core/tests/coretests/src/android/text/TextUtilsTest.java +++ b/core/tests/coretests/src/android/text/TextUtilsTest.java @@ -18,6 +18,7 @@ package android.text; import static android.text.TextUtils.formatSimple; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -28,7 +29,6 @@ import static org.junit.Assert.fail; import android.os.Parcel; import android.platform.test.annotations.Presubmit; -import android.test.MoreAsserts; import android.text.style.StyleSpan; import android.text.util.Rfc822Token; import android.text.util.Rfc822Tokenizer; @@ -237,7 +237,7 @@ public class TextUtilsTest { for (String s : splitter) { strings.add(s); } - MoreAsserts.assertEquals(expectedStrings, strings.toArray(new String[]{})); + assertArrayEquals(expectedStrings, strings.toArray(new String[]{})); } @Test diff --git a/core/tests/coretests/src/android/text/format/DateFormatTest.java b/core/tests/coretests/src/android/text/format/DateFormatTest.java index 59af6dd20478..c16393c2643d 100644 --- a/core/tests/coretests/src/android/text/format/DateFormatTest.java +++ b/core/tests/coretests/src/android/text/format/DateFormatTest.java @@ -74,8 +74,9 @@ public class DateFormatTest { DateFormatSymbols dfs = DateFormat.getIcuDateFormatSymbols(Locale.US); assertEquals("AM", dfs.getAmPmStrings()[0]); assertEquals("PM", dfs.getAmPmStrings()[1]); - assertEquals("a", dfs.getAmpmNarrowStrings()[0]); - assertEquals("p", dfs.getAmpmNarrowStrings()[1]); + // getAmpmNarrowStrings() is a @CorePlatformApi that we should stop using in framework + // assertEquals("a", dfs.getAmpmNarrowStrings()[0]); + // assertEquals("p", dfs.getAmpmNarrowStrings()[1]); } @Test diff --git a/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java b/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java index a07d399218e3..e54273479b80 100644 --- a/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java +++ b/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java @@ -40,6 +40,7 @@ import static org.junit.Assert.assertTrue; import android.icu.util.Calendar; import android.icu.util.TimeZone; import android.icu.util.ULocale; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -686,6 +687,7 @@ public class DateIntervalFormatTest { } @Test + @DisabledOnRavenwood(bug = 391381043) public void testIsLibcoreVFlagEnabled() { // This flag has been fully ramped. It should never be false. assertTrue(DateIntervalFormat.isLibcoreVFlagEnabled()); diff --git a/core/tests/coretests/src/android/text/format/DateUtilsTest.java b/core/tests/coretests/src/android/text/format/DateUtilsTest.java index 47be893eb3e9..a853d4a0c051 100644 --- a/core/tests/coretests/src/android/text/format/DateUtilsTest.java +++ b/core/tests/coretests/src/android/text/format/DateUtilsTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals; import android.content.res.Configuration; import android.content.res.Resources; import android.os.LocaleList; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -116,6 +117,7 @@ public class DateUtilsTest { } @Test + @DisabledOnRavenwood(reason = "DateFormat.set24HourTimePref is not available on host JVM") public void testFormatSameDayTime() { // This test assumes a default DateFormat.is24Hour setting. DateFormat.set24HourTimePref(null); diff --git a/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java b/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java index c8cb5f38b185..49f3373d0659 100644 --- a/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java +++ b/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java @@ -18,6 +18,7 @@ package android.text.format; import static org.junit.Assert.assertEquals; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -72,6 +73,7 @@ public class TimeMigrationUtilsTest { * Compares TimeMigrationUtils.formatSimpleDateTime() with the code it is replacing. */ @Test + @DisabledOnRavenwood(blockedBy = Time.class) public void formatMillisAsDateTime_matchesOldBehavior() { // A selection of interesting locales. Locale[] locales = new Locale[] { diff --git a/core/tests/coretests/src/android/text/format/TimeTest.java b/core/tests/coretests/src/android/text/format/TimeTest.java index 6138ea1926dd..29c58998a635 100644 --- a/core/tests/coretests/src/android/text/format/TimeTest.java +++ b/core/tests/coretests/src/android/text/format/TimeTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.util.Log; import android.util.TimeFormatException; @@ -34,6 +35,7 @@ import org.junit.runner.RunWith; @Presubmit @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = Time.class) public class TimeTest { @Test diff --git a/core/tests/coretests/src/android/text/method/BackspaceTest.java b/core/tests/coretests/src/android/text/method/BackspaceTest.java index a7ff244507cb..646e8f92fbb3 100644 --- a/core/tests/coretests/src/android/text/method/BackspaceTest.java +++ b/core/tests/coretests/src/android/text/method/BackspaceTest.java @@ -16,6 +16,7 @@ package android.text.method; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.text.InputType; import android.util.KeyUtils; @@ -41,6 +42,7 @@ import org.junit.runner.RunWith; @Presubmit @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = EditText.class) public class BackspaceTest { private EditText mTextView; diff --git a/core/tests/coretests/src/android/text/method/EditorState.java b/core/tests/coretests/src/android/text/method/EditorState.java index 4eff7a49ac7b..633fa112c016 100644 --- a/core/tests/coretests/src/android/text/method/EditorState.java +++ b/core/tests/coretests/src/android/text/method/EditorState.java @@ -16,7 +16,7 @@ package android.text.method; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -181,4 +181,3 @@ public class EditorState { Assert.assertEquals(expected.mSelectionEnd, mSelectionEnd); } } - diff --git a/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java b/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java index 1e4024d92f97..8044fd7a3432 100644 --- a/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java +++ b/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java @@ -16,6 +16,7 @@ package android.text.method; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.text.InputType; import android.util.KeyUtils; @@ -40,6 +41,7 @@ import org.junit.runner.RunWith; @Presubmit @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = EditText.class) public class ForwardDeleteTest { private EditText mTextView; diff --git a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java index e2c19024a840..37ad204ad64c 100644 --- a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java +++ b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java @@ -19,6 +19,7 @@ package android.text.method; import static com.google.common.truth.Truth.assertThat; import android.content.Context; +import android.platform.test.annotations.DisabledOnRavenwood; import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; @@ -44,6 +45,7 @@ import org.junit.runner.RunWith; @Presubmit @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = View.class) public class InsertModeTransformationMethodTest { private static View sView; private static final String TEXT = "abc def"; diff --git a/core/tests/coretests/src/android/text/util/LinkifyTest.java b/core/tests/coretests/src/android/text/util/LinkifyTest.java index 52f3b2e0534f..98bdb0b53df6 100644 --- a/core/tests/coretests/src/android/text/util/LinkifyTest.java +++ b/core/tests/coretests/src/android/text/util/LinkifyTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue; import android.content.Context; import android.content.res.Configuration; import android.os.LocaleList; +import android.platform.test.annotations.DisabledOnRavenwood; import android.text.Spannable; import android.text.SpannableString; import android.text.method.LinkMovementMethod; @@ -46,6 +47,7 @@ import java.util.Locale; */ @SmallTest @RunWith(AndroidJUnit4.class) +@DisabledOnRavenwood(blockedBy = Linkify.class) public class LinkifyTest { private static final LocaleList LOCALE_LIST_US = new LocaleList(Locale.US); diff --git a/graphics/java/android/graphics/AvoidXfermode.java b/graphics/java/android/graphics/AvoidXfermode.java index 683c15702427..5296ee848872 100644 --- a/graphics/java/android/graphics/AvoidXfermode.java +++ b/graphics/java/android/graphics/AvoidXfermode.java @@ -23,6 +23,7 @@ package android.graphics; * @removed */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class AvoidXfermode extends Xfermode { // these need to match the enum in AvoidXfermode.h on the native side diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java index 9b9be244cf90..9f605342e378 100644 --- a/graphics/java/android/graphics/BLASTBufferQueue.java +++ b/graphics/java/android/graphics/BLASTBufferQueue.java @@ -26,6 +26,7 @@ import java.util.function.Consumer; /** * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class BLASTBufferQueue { // Note: This field is accessed by native code. public long mNativeObject; // BLASTBufferQueue* diff --git a/graphics/java/android/graphics/BaseCanvas.java b/graphics/java/android/graphics/BaseCanvas.java index a2a0f4936888..0ca58cc07213 100644 --- a/graphics/java/android/graphics/BaseCanvas.java +++ b/graphics/java/android/graphics/BaseCanvas.java @@ -48,6 +48,7 @@ import java.util.Objects; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public abstract class BaseCanvas { /** * Should only be assigned in constructors (or setBitmap if software canvas), diff --git a/graphics/java/android/graphics/BaseRecordingCanvas.java b/graphics/java/android/graphics/BaseRecordingCanvas.java index 5b1fa7b15e6d..0511bd15dd13 100644 --- a/graphics/java/android/graphics/BaseRecordingCanvas.java +++ b/graphics/java/android/graphics/BaseRecordingCanvas.java @@ -44,6 +44,7 @@ import java.util.Objects; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BaseRecordingCanvas extends Canvas { public BaseRecordingCanvas(long nativeCanvas) { diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 0c4ea79dd5be..cd5a54c2fd3f 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -51,6 +51,7 @@ import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.WeakHashMap; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class Bitmap implements Parcelable { private static final String TAG = "Bitmap"; diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java index 1c2014183bb7..a5535c8d8485 100644 --- a/graphics/java/android/graphics/BitmapFactory.java +++ b/graphics/java/android/graphics/BitmapFactory.java @@ -41,6 +41,7 @@ import java.io.InputStream; * Creates Bitmap objects from various sources, including files, streams, * and byte-arrays. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BitmapFactory { private static final int DECODE_BUFFER_SIZE = 16 * 1024; diff --git a/graphics/java/android/graphics/BitmapRegionDecoder.java b/graphics/java/android/graphics/BitmapRegionDecoder.java index 29112af9516b..9b3f7158a3e5 100644 --- a/graphics/java/android/graphics/BitmapRegionDecoder.java +++ b/graphics/java/android/graphics/BitmapRegionDecoder.java @@ -37,6 +37,7 @@ import java.io.InputStream; * to get a decoded Bitmap of the specified region. * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class BitmapRegionDecoder { private long mNativeBitmapRegionDecoder; private boolean mRecycled; diff --git a/graphics/java/android/graphics/BitmapShader.java b/graphics/java/android/graphics/BitmapShader.java index dcfff62459ab..ac3543a403cc 100644 --- a/graphics/java/android/graphics/BitmapShader.java +++ b/graphics/java/android/graphics/BitmapShader.java @@ -31,6 +31,7 @@ import java.lang.annotation.RetentionPolicy; * Shader used to draw a bitmap as a texture. The bitmap can be repeated or * mirrored by setting the tiling mode. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BitmapShader extends Shader { /** * Prevent garbage collection. diff --git a/graphics/java/android/graphics/BlendMode.java b/graphics/java/android/graphics/BlendMode.java index c6ae680d01bf..c07af4e23b6f 100644 --- a/graphics/java/android/graphics/BlendMode.java +++ b/graphics/java/android/graphics/BlendMode.java @@ -19,6 +19,7 @@ package android.graphics; import android.annotation.NonNull; import android.annotation.Nullable; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public enum BlendMode { /** diff --git a/graphics/java/android/graphics/BlendModeColorFilter.java b/graphics/java/android/graphics/BlendModeColorFilter.java index d4e23732bdc3..d5dd0d3c5330 100644 --- a/graphics/java/android/graphics/BlendModeColorFilter.java +++ b/graphics/java/android/graphics/BlendModeColorFilter.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; * A color filter that can be used to tint the source pixels using a single * color and a specific {@link BlendMode}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class BlendModeColorFilter extends ColorFilter { @ColorInt final int mColor; diff --git a/graphics/java/android/graphics/BlurMaskFilter.java b/graphics/java/android/graphics/BlurMaskFilter.java index f3064f872041..22ed524e8ec0 100644 --- a/graphics/java/android/graphics/BlurMaskFilter.java +++ b/graphics/java/android/graphics/BlurMaskFilter.java @@ -22,6 +22,7 @@ package android.graphics; * inside, or straddles, the original mask's border, is controlled by the * Blur enum. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class BlurMaskFilter extends MaskFilter { public enum Blur { diff --git a/graphics/java/android/graphics/Camera.java b/graphics/java/android/graphics/Camera.java index 46640d7222ca..27b695c8c77f 100644 --- a/graphics/java/android/graphics/Camera.java +++ b/graphics/java/android/graphics/Camera.java @@ -21,6 +21,7 @@ package android.graphics; * generate a matrix that can be applied, for instance, on a * {@link Canvas}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Camera { /** * Creates a new camera, with empty transformations. diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 28c2ca36fd2e..9137150b104c 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -54,6 +54,7 @@ import java.lang.annotation.RetentionPolicy; * <a href="{@docRoot}guide/topics/graphics/2d-graphics.html"> * Canvas and Drawables</a> developer guide.</p></div> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Canvas extends BaseCanvas { private static int sCompatibilityVersion = 0; private static boolean sCompatibilityRestore = false; diff --git a/graphics/java/android/graphics/CanvasProperty.java b/graphics/java/android/graphics/CanvasProperty.java index e949584b0659..755161d387cc 100644 --- a/graphics/java/android/graphics/CanvasProperty.java +++ b/graphics/java/android/graphics/CanvasProperty.java @@ -25,6 +25,7 @@ import com.android.internal.util.VirtualRefBasePtr; * TODO: Make public? * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class CanvasProperty<T> { private VirtualRefBasePtr mProperty; diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java index 7050325997b6..918f26dfe640 100644 --- a/graphics/java/android/graphics/ColorFilter.java +++ b/graphics/java/android/graphics/ColorFilter.java @@ -23,6 +23,7 @@ import libcore.util.NativeAllocationRegistry; * each pixel drawn with that paint. This is an abstract class that should * never be used directly. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ColorFilter { private static class NoImagePreloadHolder { diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java index bfdf3187c575..cb78a8384994 100644 --- a/graphics/java/android/graphics/ColorMatrixColorFilter.java +++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java @@ -27,6 +27,7 @@ import android.os.Build; * * @see ColorMatrix */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ColorMatrixColorFilter extends ColorFilter { @UnsupportedAppUsage private final ColorMatrix mMatrix = new ColorMatrix(); diff --git a/graphics/java/android/graphics/Compatibility.java b/graphics/java/android/graphics/Compatibility.java index 747fbf111b4b..f89a4f7810c1 100644 --- a/graphics/java/android/graphics/Compatibility.java +++ b/graphics/java/android/graphics/Compatibility.java @@ -21,6 +21,7 @@ package android.graphics; * specified by the app. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class Compatibility { private Compatibility() {} diff --git a/graphics/java/android/graphics/ComposePathEffect.java b/graphics/java/android/graphics/ComposePathEffect.java index 7d59ecea948e..b380d2e78d4c 100644 --- a/graphics/java/android/graphics/ComposePathEffect.java +++ b/graphics/java/android/graphics/ComposePathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ComposePathEffect extends PathEffect { /** diff --git a/graphics/java/android/graphics/ComposeShader.java b/graphics/java/android/graphics/ComposeShader.java index e7145686247e..57a11d232ac5 100644 --- a/graphics/java/android/graphics/ComposeShader.java +++ b/graphics/java/android/graphics/ComposeShader.java @@ -22,6 +22,7 @@ import android.annotation.NonNull; /** A subclass of shader that returns the composition of two other shaders, combined by an {@link android.graphics.Xfermode} subclass. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ComposeShader extends Shader { Shader mShaderA; diff --git a/graphics/java/android/graphics/CornerPathEffect.java b/graphics/java/android/graphics/CornerPathEffect.java index 8f4d7d9b1c49..37f0d2979e5e 100644 --- a/graphics/java/android/graphics/CornerPathEffect.java +++ b/graphics/java/android/graphics/CornerPathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class CornerPathEffect extends PathEffect { /** diff --git a/graphics/java/android/graphics/DashPathEffect.java b/graphics/java/android/graphics/DashPathEffect.java index ef3ebe8089ca..ff3c376be29d 100644 --- a/graphics/java/android/graphics/DashPathEffect.java +++ b/graphics/java/android/graphics/DashPathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DashPathEffect extends PathEffect { /** diff --git a/graphics/java/android/graphics/DiscretePathEffect.java b/graphics/java/android/graphics/DiscretePathEffect.java index 3b3c9c9be6c2..77f984589896 100644 --- a/graphics/java/android/graphics/DiscretePathEffect.java +++ b/graphics/java/android/graphics/DiscretePathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DiscretePathEffect extends PathEffect { /** diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java index c7fdcb22c71d..505a830d725b 100644 --- a/graphics/java/android/graphics/DrawFilter.java +++ b/graphics/java/android/graphics/DrawFilter.java @@ -22,6 +22,7 @@ package android.graphics; * can disable/enable antialiasing, or change the color for everything this is * drawn. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class DrawFilter { /** diff --git a/graphics/java/android/graphics/EmbossMaskFilter.java b/graphics/java/android/graphics/EmbossMaskFilter.java index 003678ae5a3c..f0a661f57291 100644 --- a/graphics/java/android/graphics/EmbossMaskFilter.java +++ b/graphics/java/android/graphics/EmbossMaskFilter.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class EmbossMaskFilter extends MaskFilter { /** * Create an emboss maskfilter diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java index 88f0e8ef8a94..09022ee35e64 100644 --- a/graphics/java/android/graphics/FontFamily.java +++ b/graphics/java/android/graphics/FontFamily.java @@ -41,6 +41,7 @@ import java.nio.channels.FileChannel; * @deprecated Use {@link android.graphics.fonts.FontFamily} instead. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class FontFamily { private static String TAG = "FontFamily"; diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java index 13c4a94cb9b6..8d0f12866bcf 100644 --- a/graphics/java/android/graphics/FontListParser.java +++ b/graphics/java/android/graphics/FontListParser.java @@ -48,6 +48,7 @@ import java.util.regex.Pattern; * Parser for font config files. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class FontListParser { private static final String TAG = "FontListParser"; diff --git a/graphics/java/android/graphics/ForceDarkType.java b/graphics/java/android/graphics/ForceDarkType.java index 396b03703bb9..d21aef30a45c 100644 --- a/graphics/java/android/graphics/ForceDarkType.java +++ b/graphics/java/android/graphics/ForceDarkType.java @@ -29,6 +29,7 @@ import java.lang.annotation.RetentionPolicy; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ForceDarkType { /** * Force dark disabled: normal, default operation. diff --git a/graphics/java/android/graphics/FrameInfo.java b/graphics/java/android/graphics/FrameInfo.java index 3b8f46630344..520213892d01 100644 --- a/graphics/java/android/graphics/FrameInfo.java +++ b/graphics/java/android/graphics/FrameInfo.java @@ -38,6 +38,7 @@ import java.lang.annotation.RetentionPolicy; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FrameInfo { public long[] frameInfo = new long[FRAME_INFO_SIZE]; diff --git a/graphics/java/android/graphics/Gainmap.java b/graphics/java/android/graphics/Gainmap.java index 63ca3b8313ce..7fc13db85659 100644 --- a/graphics/java/android/graphics/Gainmap.java +++ b/graphics/java/android/graphics/Gainmap.java @@ -86,6 +86,7 @@ import java.lang.annotation.RetentionPolicy; * for these functions cancels out and does not affect the result, so other bases may be used * if preferred. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class Gainmap implements Parcelable { /** @hide */ diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java index 6705b25ab0ec..4982851c65de 100644 --- a/graphics/java/android/graphics/GraphicBuffer.java +++ b/graphics/java/android/graphics/GraphicBuffer.java @@ -28,6 +28,7 @@ import android.os.Parcelable; * @hide */ @SuppressWarnings("UnusedDeclaration") +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class GraphicBuffer implements Parcelable { // Note: keep usage flags in sync with GraphicBuffer.h and gralloc.h public static final int USAGE_SW_READ_NEVER = 0x0; diff --git a/graphics/java/android/graphics/GraphicsProtos.java b/graphics/java/android/graphics/GraphicsProtos.java index 6bc41d39ff98..fa7eaf946845 100644 --- a/graphics/java/android/graphics/GraphicsProtos.java +++ b/graphics/java/android/graphics/GraphicsProtos.java @@ -24,6 +24,7 @@ import android.util.proto.ProtoOutputStream; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class GraphicsProtos { /** GraphicsProtos can never be an instance */ private GraphicsProtos() {} diff --git a/graphics/java/android/graphics/GraphicsStatsService.java b/graphics/java/android/graphics/GraphicsStatsService.java index 7a012bcde799..d0b9998e18c8 100644 --- a/graphics/java/android/graphics/GraphicsStatsService.java +++ b/graphics/java/android/graphics/GraphicsStatsService.java @@ -74,6 +74,7 @@ import java.util.TimeZone; * for the process to use. * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class GraphicsStatsService extends IGraphicsStats.Stub { public static final String GRAPHICS_STATS_SERVICE = "graphicsstats"; diff --git a/graphics/java/android/graphics/HardwareBufferRenderer.java b/graphics/java/android/graphics/HardwareBufferRenderer.java index e04f13c9b922..81798709b7c6 100644 --- a/graphics/java/android/graphics/HardwareBufferRenderer.java +++ b/graphics/java/android/graphics/HardwareBufferRenderer.java @@ -55,6 +55,7 @@ import java.util.function.Consumer; * HardwareBufferRenderer will never clear contents before each draw invocation so previous contents * in the {@link HardwareBuffer} target will be preserved across renders. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class HardwareBufferRenderer implements AutoCloseable { private static final ColorSpace DEFAULT_COLORSPACE = ColorSpace.get(Named.SRGB); diff --git a/graphics/java/android/graphics/HardwareRenderer.java b/graphics/java/android/graphics/HardwareRenderer.java index 65854dd51a91..79d559bf77b4 100644 --- a/graphics/java/android/graphics/HardwareRenderer.java +++ b/graphics/java/android/graphics/HardwareRenderer.java @@ -79,6 +79,7 @@ import sun.misc.Cleaner; * Failure to do so will cause the render thread to stall on that surface, blocking all * HardwareRenderer instances.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class HardwareRenderer { private static final String LOG_TAG = "HardwareRenderer"; diff --git a/graphics/java/android/graphics/HardwareRendererObserver.java b/graphics/java/android/graphics/HardwareRendererObserver.java index d5a6a2fe158a..99263780f407 100644 --- a/graphics/java/android/graphics/HardwareRendererObserver.java +++ b/graphics/java/android/graphics/HardwareRendererObserver.java @@ -28,6 +28,7 @@ import java.lang.ref.WeakReference; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class HardwareRendererObserver { private final long[] mFrameMetrics; private final Handler mHandler; diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java index 639517996724..419929a39007 100644 --- a/graphics/java/android/graphics/ImageDecoder.java +++ b/graphics/java/android/graphics/ImageDecoder.java @@ -44,6 +44,7 @@ import android.media.MediaFormat; import android.net.Uri; import android.os.Build; import android.os.Trace; +import android.ravenwood.annotation.RavenwoodIgnore; import android.system.ErrnoException; import android.system.Os; import android.util.DisplayMetrics; @@ -173,6 +174,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * }); * </pre> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class ImageDecoder implements AutoCloseable { /** * Source of encoded image data. @@ -1987,6 +1989,7 @@ public final class ImageDecoder implements AutoCloseable { * Check if HEVC decoder is supported by the device. */ @SuppressWarnings("AndroidFrameworkCompatChange") + @RavenwoodIgnore(blockedBy = MediaCodecList.class) private static boolean isHevcDecoderSupported() { synchronized (sIsHevcDecoderSupportedLock) { if (sIsHevcDecoderSupportedInitialized) { @@ -2010,6 +2013,7 @@ public final class ImageDecoder implements AutoCloseable { * Checks if the device supports decoding 10-bit AV1. */ @SuppressWarnings("AndroidFrameworkCompatChange") // This is not an app-visible API. + @RavenwoodIgnore(blockedBy = MediaCodecList.class) private static boolean isP010SupportedForAV1() { synchronized (sIsP010SupportedLock) { if (sIsP010SupportedFlagsInitialized) { @@ -2025,6 +2029,7 @@ public final class ImageDecoder implements AutoCloseable { * This method is called by JNI. */ @SuppressWarnings("unused") + @RavenwoodIgnore(blockedBy = MediaCodecList.class) private static boolean isP010SupportedForHEVC() { synchronized (sIsP010SupportedLock) { if (sIsP010SupportedFlagsInitialized) { diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java index b4899f975f43..4c9f5ac6ba92 100644 --- a/graphics/java/android/graphics/ImageFormat.java +++ b/graphics/java/android/graphics/ImageFormat.java @@ -24,6 +24,7 @@ import com.android.internal.camera.flags.Flags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class ImageFormat { /** @hide */ @Retention(RetentionPolicy.SOURCE) diff --git a/graphics/java/android/graphics/LayerRasterizer.java b/graphics/java/android/graphics/LayerRasterizer.java index 25155ab284fb..1a44248d01b0 100644 --- a/graphics/java/android/graphics/LayerRasterizer.java +++ b/graphics/java/android/graphics/LayerRasterizer.java @@ -20,6 +20,7 @@ package android.graphics; * @removed feature is not supported by hw-accerlerated or PDF backends */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LayerRasterizer extends Rasterizer { public LayerRasterizer() { } diff --git a/graphics/java/android/graphics/LeakyTypefaceStorage.java b/graphics/java/android/graphics/LeakyTypefaceStorage.java index 618e60d442d7..25a843696cc5 100644 --- a/graphics/java/android/graphics/LeakyTypefaceStorage.java +++ b/graphics/java/android/graphics/LeakyTypefaceStorage.java @@ -32,6 +32,7 @@ import java.util.ArrayList; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LeakyTypefaceStorage { private static final Object sLock = new Object(); diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java index fe73a1a70b9c..1afdc7706396 100644 --- a/graphics/java/android/graphics/LightingColorFilter.java +++ b/graphics/java/android/graphics/LightingColorFilter.java @@ -40,6 +40,7 @@ import android.os.Build; * </pre> * The result is pinned to the <code>[0..255]</code> range for each channel. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LightingColorFilter extends ColorFilter { @ColorInt private int mMul; diff --git a/graphics/java/android/graphics/LinearGradient.java b/graphics/java/android/graphics/LinearGradient.java index 087937144b97..c6566c9b27fe 100644 --- a/graphics/java/android/graphics/LinearGradient.java +++ b/graphics/java/android/graphics/LinearGradient.java @@ -24,6 +24,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LinearGradient extends Shader { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mX0; diff --git a/graphics/java/android/graphics/MaskFilter.java b/graphics/java/android/graphics/MaskFilter.java index d4743155729e..b490650e4d0c 100644 --- a/graphics/java/android/graphics/MaskFilter.java +++ b/graphics/java/android/graphics/MaskFilter.java @@ -21,6 +21,7 @@ package android.graphics; * an alpha-channel mask before drawing it. A subclass of MaskFilter may be * installed into a Paint. Blur and emboss are implemented as subclasses of MaskFilter. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MaskFilter { protected void finalize() throws Throwable { diff --git a/graphics/java/android/graphics/Mesh.java b/graphics/java/android/graphics/Mesh.java index 6be8332e784b..f4d841b161fa 100644 --- a/graphics/java/android/graphics/Mesh.java +++ b/graphics/java/android/graphics/Mesh.java @@ -37,6 +37,7 @@ import java.nio.ShortBuffer; * for the mesh. Once generated, a mesh object can be drawn through * {@link Canvas#drawMesh(Mesh, BlendMode, Paint)} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Mesh { private long mNativeMeshWrapper; private boolean mIsIndexed; diff --git a/graphics/java/android/graphics/MeshSpecification.java b/graphics/java/android/graphics/MeshSpecification.java index b1aae7f37c31..9c7e948dfc1b 100644 --- a/graphics/java/android/graphics/MeshSpecification.java +++ b/graphics/java/android/graphics/MeshSpecification.java @@ -72,6 +72,7 @@ import java.lang.annotation.RetentionPolicy; * These should be kept in mind when generating a mesh specification, as exceeding them will * lead to errors. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MeshSpecification { long mNativeMeshSpec; diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java index 9c9535d16aab..cefe391f2d2c 100644 --- a/graphics/java/android/graphics/Movie.java +++ b/graphics/java/android/graphics/Movie.java @@ -27,6 +27,7 @@ import java.io.InputStream; * @deprecated Prefer {@link android.graphics.drawable.AnimatedImageDrawable}. */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Movie { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeMovie; diff --git a/graphics/java/android/graphics/NinePatch.java b/graphics/java/android/graphics/NinePatch.java index 382269f74366..00df23fe76ba 100644 --- a/graphics/java/android/graphics/NinePatch.java +++ b/graphics/java/android/graphics/NinePatch.java @@ -32,6 +32,7 @@ import android.compat.annotation.UnsupportedAppUsage; * using a WYSIWYG graphics editor. * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class NinePatch { /** * Struct of inset information attached to a 9 patch bitmap. diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java index 3d4dccf095f5..a0ca0988e03c 100644 --- a/graphics/java/android/graphics/Paint.java +++ b/graphics/java/android/graphics/Paint.java @@ -66,6 +66,7 @@ import java.util.Objects; * The Paint class holds the style and color information about how to draw * geometries, text and bitmaps. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Paint { private static final String TAG = "Paint"; diff --git a/graphics/java/android/graphics/PaintFlagsDrawFilter.java b/graphics/java/android/graphics/PaintFlagsDrawFilter.java index 232661113b5a..f4c49b11ea96 100644 --- a/graphics/java/android/graphics/PaintFlagsDrawFilter.java +++ b/graphics/java/android/graphics/PaintFlagsDrawFilter.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PaintFlagsDrawFilter extends DrawFilter { /** * Subclass of DrawFilter that affects every paint by first clearing diff --git a/graphics/java/android/graphics/PathDashPathEffect.java b/graphics/java/android/graphics/PathDashPathEffect.java index 2b6a6edcc266..dc92e6caabcd 100644 --- a/graphics/java/android/graphics/PathDashPathEffect.java +++ b/graphics/java/android/graphics/PathDashPathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PathDashPathEffect extends PathEffect { public enum Style { diff --git a/graphics/java/android/graphics/PathEffect.java b/graphics/java/android/graphics/PathEffect.java index 3292501e6324..9bb71935cfd0 100644 --- a/graphics/java/android/graphics/PathEffect.java +++ b/graphics/java/android/graphics/PathEffect.java @@ -21,6 +21,7 @@ package android.graphics; * the geometry of a drawing primitive before it is transformed by the * canvas' matrix and drawn. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PathEffect { protected void finalize() throws Throwable { diff --git a/graphics/java/android/graphics/PathIterator.java b/graphics/java/android/graphics/PathIterator.java index d7caabf9f91b..1ed70d02d140 100644 --- a/graphics/java/android/graphics/PathIterator.java +++ b/graphics/java/android/graphics/PathIterator.java @@ -34,6 +34,7 @@ import java.util.Iterator; * <code>PathIterator</code> can be used to query a given {@link Path} object, to discover its * operations and point values. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PathIterator implements Iterator<PathIterator.Segment> { private final float[] mPointsArray; @@ -47,9 +48,11 @@ public class PathIterator implements Iterator<PathIterator.Segment> { private static final boolean IS_DALVIK = "dalvik".equalsIgnoreCase( System.getProperty("java.vm.name")); - private static final NativeAllocationRegistry sRegistry = - NativeAllocationRegistry.createMalloced( - PathIterator.class.getClassLoader(), nGetFinalizer()); + private static class NoImagePreloadHolder { + private static final NativeAllocationRegistry sRegistry = + NativeAllocationRegistry.createMalloced( + PathIterator.class.getClassLoader(), nGetFinalizer()); + } /** * The <code>Verb</code> indicates the operation for a given segment of a path. These @@ -69,6 +72,11 @@ public class PathIterator implements Iterator<PathIterator.Segment> { public static final int VERB_CLOSE = 5; public static final int VERB_DONE = 6; + + static { + // Keep <cinit> exist in bytecode + } + /** * Returns a {@link PathIterator} object for this path, which can be used to query the * data (operations and points) in the path. Iterators can only be used on Path objects @@ -90,7 +98,7 @@ public class PathIterator implements Iterator<PathIterator.Segment> { mPointsArray = new float[POINT_ARRAY_SIZE]; mPointsAddress = 0; } - sRegistry.registerNativeAllocation(this, mNativeIterator); + NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeIterator); } /** diff --git a/graphics/java/android/graphics/PathMeasure.java b/graphics/java/android/graphics/PathMeasure.java index 2c6cfa5c2e3d..4d123db41ee7 100644 --- a/graphics/java/android/graphics/PathMeasure.java +++ b/graphics/java/android/graphics/PathMeasure.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PathMeasure { private Path mPath; diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java index ee4165b8da05..54eb2bc659bc 100644 --- a/graphics/java/android/graphics/Picture.java +++ b/graphics/java/android/graphics/Picture.java @@ -33,6 +33,7 @@ import java.io.OutputStream; * <p class="note"><strong>Note:</strong> Prior to API level 23 a picture cannot * be replayed on a hardware accelerated canvas.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Picture { private PictureCanvas mRecordingCanvas; // TODO: Figure out if this was a false-positive diff --git a/graphics/java/android/graphics/PixelXorXfermode.java b/graphics/java/android/graphics/PixelXorXfermode.java index 27884e07ecfb..64278525bb1f 100644 --- a/graphics/java/android/graphics/PixelXorXfermode.java +++ b/graphics/java/android/graphics/PixelXorXfermode.java @@ -20,6 +20,7 @@ package android.graphics; * @removed */ @Deprecated +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PixelXorXfermode extends Xfermode { public PixelXorXfermode(int opColor) { diff --git a/graphics/java/android/graphics/PorterDuff.java b/graphics/java/android/graphics/PorterDuff.java index eb940e2f9017..730a804e17c3 100644 --- a/graphics/java/android/graphics/PorterDuff.java +++ b/graphics/java/android/graphics/PorterDuff.java @@ -26,6 +26,7 @@ import android.compat.annotation.UnsupportedAppUsage; * * Consider using {@link BlendMode} instead as it provides a wider variety of tinting options */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PorterDuff { /** * {@usesMathJax} diff --git a/graphics/java/android/graphics/PorterDuffColorFilter.java b/graphics/java/android/graphics/PorterDuffColorFilter.java index 0700f217ecf0..777ef6ce906b 100644 --- a/graphics/java/android/graphics/PorterDuffColorFilter.java +++ b/graphics/java/android/graphics/PorterDuffColorFilter.java @@ -25,6 +25,7 @@ import android.os.Build; * A color filter that can be used to tint the source pixels using a single * color and a specific {@link PorterDuff Porter-Duff composite mode}. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PorterDuffColorFilter extends ColorFilter { @ColorInt private int mColor; diff --git a/graphics/java/android/graphics/PorterDuffXfermode.java b/graphics/java/android/graphics/PorterDuffXfermode.java index 83d0507a5074..e10d7370d6f9 100644 --- a/graphics/java/android/graphics/PorterDuffXfermode.java +++ b/graphics/java/android/graphics/PorterDuffXfermode.java @@ -23,6 +23,7 @@ package android.graphics; * information on the available alpha compositing and blending modes.</p> * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class PorterDuffXfermode extends Xfermode { /** * Create an xfermode that uses the specified porter-duff mode. diff --git a/graphics/java/android/graphics/PostProcessor.java b/graphics/java/android/graphics/PostProcessor.java index 6fed39b9975d..066214ac6cd6 100644 --- a/graphics/java/android/graphics/PostProcessor.java +++ b/graphics/java/android/graphics/PostProcessor.java @@ -37,6 +37,7 @@ import android.graphics.drawable.Drawable; * * <p>Supplied to ImageDecoder via {@link ImageDecoder#setPostProcessor setPostProcessor}.</p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public interface PostProcessor { /** * Do any processing after (for example) decoding. diff --git a/graphics/java/android/graphics/RadialGradient.java b/graphics/java/android/graphics/RadialGradient.java index e582e66e1627..06e92eae9c82 100644 --- a/graphics/java/android/graphics/RadialGradient.java +++ b/graphics/java/android/graphics/RadialGradient.java @@ -24,6 +24,7 @@ import android.annotation.Nullable; import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RadialGradient extends Shader { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mX; diff --git a/graphics/java/android/graphics/Rasterizer.java b/graphics/java/android/graphics/Rasterizer.java index 575095426563..5e67da50a40d 100644 --- a/graphics/java/android/graphics/Rasterizer.java +++ b/graphics/java/android/graphics/Rasterizer.java @@ -24,6 +24,7 @@ package android.graphics; /** * @removed feature is not supported by hw-accerlerated or PDF backends */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Rasterizer { protected void finalize() throws Throwable { } diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java index cc5b3b94e0fa..a56f461e511a 100644 --- a/graphics/java/android/graphics/RecordingCanvas.java +++ b/graphics/java/android/graphics/RecordingCanvas.java @@ -33,6 +33,7 @@ import dalvik.annotation.optimization.CriticalNative; * {@link RenderNode#endRecording()} is called. It must not be retained beyond that as it is * internally reused. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class RecordingCanvas extends BaseRecordingCanvas { // The recording canvas pool should be large enough to handle a deeply nested // view hierarchy because display lists are generated recursively. diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java index 29708738d2db..e2215d4bf300 100644 --- a/graphics/java/android/graphics/Region.java +++ b/graphics/java/android/graphics/Region.java @@ -23,6 +23,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.util.Pools.SynchronizedPool; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Region implements Parcelable { private static final int MAX_POOL_SIZE = 10; diff --git a/graphics/java/android/graphics/RegionIterator.java b/graphics/java/android/graphics/RegionIterator.java index 443b23c1b5fc..5d74487e5a8e 100644 --- a/graphics/java/android/graphics/RegionIterator.java +++ b/graphics/java/android/graphics/RegionIterator.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RegionIterator { /** diff --git a/graphics/java/android/graphics/RenderEffect.java b/graphics/java/android/graphics/RenderEffect.java index b8a46856601e..06bfb82ef630 100644 --- a/graphics/java/android/graphics/RenderEffect.java +++ b/graphics/java/android/graphics/RenderEffect.java @@ -30,6 +30,7 @@ import libcore.util.NativeAllocationRegistry; * Additionally a {@link RenderEffect} can be applied to a View's backing RenderNode through * {@link android.view.View#setRenderEffect(RenderEffect)} */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class RenderEffect { private static class RenderEffectHolder { diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java index 03a8b306f99d..fa41876187cf 100644 --- a/graphics/java/android/graphics/RenderNode.java +++ b/graphics/java/android/graphics/RenderNode.java @@ -192,6 +192,7 @@ import java.lang.ref.WeakReference; * top-level content is desired, and finally calling {@link Surface#unlockCanvasAndPost(Canvas)}. * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class RenderNode { // Use a Holder to allow static initialization in the boot image. diff --git a/graphics/java/android/graphics/RuntimeColorFilter.java b/graphics/java/android/graphics/RuntimeColorFilter.java index a64acfe767a9..06aecc3f2c49 100644 --- a/graphics/java/android/graphics/RuntimeColorFilter.java +++ b/graphics/java/android/graphics/RuntimeColorFilter.java @@ -37,6 +37,7 @@ import com.android.graphics.hwui.flags.Flags; * </pre> */ @FlaggedApi(Flags.FLAG_RUNTIME_COLOR_FILTERS_BLENDERS) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RuntimeColorFilter extends ColorFilter { private String mAgsl; diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java index db2376e008f5..6464f72490c4 100644 --- a/graphics/java/android/graphics/RuntimeShader.java +++ b/graphics/java/android/graphics/RuntimeShader.java @@ -248,6 +248,7 @@ import libcore.util.NativeAllocationRegistry; * the bitmap), remember that the coordinates are local to the canvas.</p> * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RuntimeShader extends Shader { private static class NoImagePreloadHolder { diff --git a/graphics/java/android/graphics/RuntimeXfermode.java b/graphics/java/android/graphics/RuntimeXfermode.java index c8a0b1a11339..1e20bd352244 100644 --- a/graphics/java/android/graphics/RuntimeXfermode.java +++ b/graphics/java/android/graphics/RuntimeXfermode.java @@ -39,6 +39,7 @@ import libcore.util.NativeAllocationRegistry; * </pre> */ @FlaggedApi(Flags.FLAG_RUNTIME_COLOR_FILTERS_BLENDERS) +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class RuntimeXfermode extends Xfermode { private static class NoImagePreloadHolder { diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java index 4d6beadc0fdd..369fab45bf69 100644 --- a/graphics/java/android/graphics/Shader.java +++ b/graphics/java/android/graphics/Shader.java @@ -29,6 +29,7 @@ import libcore.util.NativeAllocationRegistry; * paint.setShader(shader). After that any object (other than a bitmap) that is * drawn with that paint will get its color(s) from the shader. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Shader { private static class NoImagePreloadHolder { diff --git a/graphics/java/android/graphics/SumPathEffect.java b/graphics/java/android/graphics/SumPathEffect.java index 8fedc317c428..3543e101fb38 100644 --- a/graphics/java/android/graphics/SumPathEffect.java +++ b/graphics/java/android/graphics/SumPathEffect.java @@ -16,6 +16,7 @@ package android.graphics; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SumPathEffect extends PathEffect { /** diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java index 5caedba364be..df384ead58fb 100644 --- a/graphics/java/android/graphics/SurfaceTexture.java +++ b/graphics/java/android/graphics/SurfaceTexture.java @@ -78,6 +78,7 @@ import java.lang.ref.WeakReference; * frame-available callback is called on an arbitrary thread, so unless special care is taken {@link * #updateTexImage} should not be called directly from the callback. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SurfaceTexture { private final Looper mCreatorLooper; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) diff --git a/graphics/java/android/graphics/SweepGradient.java b/graphics/java/android/graphics/SweepGradient.java index 3a29395b1717..94219259a69d 100644 --- a/graphics/java/android/graphics/SweepGradient.java +++ b/graphics/java/android/graphics/SweepGradient.java @@ -23,6 +23,7 @@ import android.annotation.Nullable; import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class SweepGradient extends Shader { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mCx; diff --git a/graphics/java/android/graphics/TableMaskFilter.java b/graphics/java/android/graphics/TableMaskFilter.java index 204f9705852a..ca7627c40031 100644 --- a/graphics/java/android/graphics/TableMaskFilter.java +++ b/graphics/java/android/graphics/TableMaskFilter.java @@ -21,6 +21,7 @@ import android.compat.annotation.UnsupportedAppUsage; /** * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TableMaskFilter extends MaskFilter { public TableMaskFilter(byte[] table) { diff --git a/graphics/java/android/graphics/TemporaryBuffer.java b/graphics/java/android/graphics/TemporaryBuffer.java index ef3f7f704e0d..681c48ea9f71 100644 --- a/graphics/java/android/graphics/TemporaryBuffer.java +++ b/graphics/java/android/graphics/TemporaryBuffer.java @@ -23,6 +23,7 @@ import com.android.internal.util.ArrayUtils; /** * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TemporaryBuffer { @UnsupportedAppUsage public static char[] obtain(int len) { diff --git a/graphics/java/android/graphics/TextureLayer.java b/graphics/java/android/graphics/TextureLayer.java index ac1bd6902062..981b78a7b5b8 100644 --- a/graphics/java/android/graphics/TextureLayer.java +++ b/graphics/java/android/graphics/TextureLayer.java @@ -29,6 +29,7 @@ import com.android.internal.util.VirtualRefBasePtr; * * @hide TODO: Make this a SystemApi for b/155905258 */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class TextureLayer implements AutoCloseable { private HardwareRenderer mRenderer; private VirtualRefBasePtr mFinalizer; diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 874b847c709c..d1aca34c7b8d 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -42,6 +42,7 @@ import android.os.SystemProperties; import android.os.Trace; import android.provider.FontRequest; import android.provider.FontsContract; +import android.ravenwood.annotation.RavenwoodReplace; import android.system.ErrnoException; import android.system.OsConstants; import android.text.FontConfig; @@ -86,6 +87,7 @@ import java.util.Objects; * textSize, textSkewX, textScaleX to specify * how text appears when drawn (and measured). */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Typeface { private static String TAG = "Typeface"; @@ -93,9 +95,11 @@ public class Typeface { /** @hide */ public static final boolean ENABLE_LAZY_TYPEFACE_INITIALIZATION = true; - private static final NativeAllocationRegistry sRegistry = - NativeAllocationRegistry.createMalloced( - Typeface.class.getClassLoader(), nativeGetReleaseFunc()); + private static class NoImagePreloadHolder { + static final NativeAllocationRegistry sRegistry = + NativeAllocationRegistry.createMalloced( + Typeface.class.getClassLoader(), nativeGetReleaseFunc()); + } /** The default NORMAL typeface object */ public static final Typeface DEFAULT = null; @@ -1284,7 +1288,7 @@ public class Typeface { } native_instance = ni; - mCleaner = sRegistry.registerNativeAllocation(this, native_instance); + mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, native_instance); mStyle = nativeGetStyle(ni); mWeight = nativeGetWeight(ni); mIsVariationInstance = nativeIsVariationInstance(ni); @@ -1560,9 +1564,23 @@ public class Typeface { } static { + staticInitializer(); + } + + @RavenwoodReplace(reason = "Prevent circular reference on host side JVM", bug = 337329128) + private static void staticInitializer() { + init(); + } + + private static void staticInitializer$ravenwood() { + /* no-op */ + } + + /** @hide */ + public static void init() { // Preload Roboto-Regular.ttf in Zygote for improving app launch performance. - preloadFontFile("/system/fonts/Roboto-Regular.ttf"); - preloadFontFile("/system/fonts/RobotoStatic-Regular.ttf"); + preloadFontFile(SystemFonts.SYSTEM_FONT_DIR + "Roboto-Regular.ttf"); + preloadFontFile(SystemFonts.SYSTEM_FONT_DIR + "RobotoStatic-Regular.ttf"); String locale = SystemProperties.get("persist.sys.locale", "en-US"); String script = ULocale.addLikelySubtags(ULocale.forLanguageTag(locale)).getScript(); @@ -1642,6 +1660,21 @@ public class Typeface { setSystemFontMap(typefaceMap); } + /** + * {@link #loadPreinstalledSystemFontMap()} does not actually initialize the native + * system font APIs. Add a new method to actually load the font files without going + * through SharedMemory. + * + * @hide + */ + public static void loadNativeSystemFonts() { + synchronized (SYSTEM_FONT_MAP_LOCK) { + for (var type : sSystemFontMap.values()) { + nativeAddFontCollections(type.native_instance); + } + } + } + static { if (!ENABLE_LAZY_TYPEFACE_INITIALIZATION) { loadPreinstalledSystemFontMap(); diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java index fb689e4cb9c2..eda9e3c1055d 100644 --- a/graphics/java/android/graphics/Xfermode.java +++ b/graphics/java/android/graphics/Xfermode.java @@ -28,4 +28,5 @@ package android.graphics; * specified in the Modes enum. When an Xfermode is assigned to a Paint, then * objects drawn with that paint have the xfermode applied. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class Xfermode {} diff --git a/graphics/java/android/graphics/YuvImage.java b/graphics/java/android/graphics/YuvImage.java index b0c7f202f23a..2b7f40493e8d 100644 --- a/graphics/java/android/graphics/YuvImage.java +++ b/graphics/java/android/graphics/YuvImage.java @@ -32,6 +32,7 @@ import java.io.OutputStream; * To compress a rectangle region in the YUV data, users have to specify the * region by left, top, width and height. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class YuvImage { /** diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java index 2893177aafc5..8be340005543 100644 --- a/graphics/java/android/graphics/fonts/Font.java +++ b/graphics/java/android/graphics/fonts/Font.java @@ -44,6 +44,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.util.Arrays; import java.util.Collections; @@ -54,6 +55,7 @@ import java.util.Set; /** * A font class can be used for creating FontFamily. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class Font { private static final String TAG = "Font"; @@ -293,7 +295,14 @@ public final class Font { int capacity = assetStream.available(); ByteBuffer buffer = ByteBuffer.allocateDirect(capacity); buffer.order(ByteOrder.nativeOrder()); - assetStream.read(buffer.array(), buffer.arrayOffset(), assetStream.available()); + if (buffer.hasArray()) { + assetStream.read(buffer.array(), buffer.arrayOffset(), assetStream.available()); + } else { + // Direct buffer does not have a backing array on Ravenwood, + // wrap it with a channel and read from it + var ch = Channels.newChannel(assetStream); + ch.read(buffer.duplicate()); + } if (assetStream.read() != -1) { throw new IOException("Unable to access full contents of " + path); diff --git a/graphics/java/android/graphics/fonts/FontCustomizationParser.java b/graphics/java/android/graphics/fonts/FontCustomizationParser.java index b7bf0553bcc6..732a5f3bfce4 100644 --- a/graphics/java/android/graphics/fonts/FontCustomizationParser.java +++ b/graphics/java/android/graphics/fonts/FontCustomizationParser.java @@ -43,6 +43,7 @@ import java.util.Map; * * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class FontCustomizationParser { private static final String TAG = "FontCustomizationParser"; diff --git a/graphics/java/android/graphics/fonts/FontFamily.java b/graphics/java/android/graphics/fonts/FontFamily.java index 5a7b0bbca399..0ab46398c924 100644 --- a/graphics/java/android/graphics/fonts/FontFamily.java +++ b/graphics/java/android/graphics/fonts/FontFamily.java @@ -66,6 +66,7 @@ import java.util.Set; * </p> * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontFamily { private static final String TAG = "FontFamily"; diff --git a/graphics/java/android/graphics/fonts/FontFileUtil.java b/graphics/java/android/graphics/fonts/FontFileUtil.java index abcafb666576..305ab3b39995 100644 --- a/graphics/java/android/graphics/fonts/FontFileUtil.java +++ b/graphics/java/android/graphics/fonts/FontFileUtil.java @@ -32,6 +32,7 @@ import java.util.Set; * Provides a utility for font file operations. * @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class FontFileUtil { private FontFileUtil() {} // Do not instantiate diff --git a/graphics/java/android/graphics/fonts/FontStyle.java b/graphics/java/android/graphics/fonts/FontStyle.java index 48969aa71059..b3ddbed645ff 100644 --- a/graphics/java/android/graphics/fonts/FontStyle.java +++ b/graphics/java/android/graphics/fonts/FontStyle.java @@ -44,6 +44,7 @@ import java.util.Objects; * </p> * */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontStyle { private static final String TAG = "FontStyle"; diff --git a/graphics/java/android/graphics/fonts/FontVariationAxis.java b/graphics/java/android/graphics/fonts/FontVariationAxis.java index 30a248bb3e0e..1d715940d628 100644 --- a/graphics/java/android/graphics/fonts/FontVariationAxis.java +++ b/graphics/java/android/graphics/fonts/FontVariationAxis.java @@ -31,6 +31,7 @@ import java.util.regex.Pattern; /** * Class that holds information about single font variation axis. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class FontVariationAxis { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final int mTag; diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java index 0e25c346064c..599c42659ece 100644 --- a/graphics/java/android/graphics/fonts/SystemFonts.java +++ b/graphics/java/android/graphics/fonts/SystemFonts.java @@ -25,6 +25,7 @@ import android.annotation.Nullable; import android.graphics.FontListParser; import android.graphics.Typeface; import android.os.LocaleList; +import android.ravenwood.annotation.RavenwoodReplace; import android.text.FontConfig; import android.util.ArrayMap; import android.util.Log; @@ -32,6 +33,7 @@ import android.util.SparseIntArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.ravenwood.RavenwoodEnvironment; import org.xmlpull.v1.XmlPullParserException; @@ -50,23 +52,46 @@ import java.util.Set; /** * Provides the system font configurations. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class SystemFonts { private static final String TAG = "SystemFonts"; - private static final String FONTS_XML = "/system/etc/font_fallback.xml"; - private static final String LEGACY_FONTS_XML = "/system/etc/fonts.xml"; + private static final String FONTS_XML = getFontsXmlDir() + "font_fallback.xml"; + /** @hide */ + public static final String LEGACY_FONTS_XML = getFontsXmlDir() + "fonts.xml"; /** @hide */ - public static final String SYSTEM_FONT_DIR = "/system/fonts/"; + public static final String SYSTEM_FONT_DIR = getSystemFontDir(); private static final String OEM_XML = "/product/etc/fonts_customization.xml"; /** @hide */ public static final String OEM_FONT_DIR = "/product/fonts/"; + private static final String DEVICE_FONTS_XML_DIR = "/system/etc/"; + private static final String DEVICE_FONT_DIR = "/system/fonts/"; + private SystemFonts() {} // Do not instansiate. private static final Object LOCK = new Object(); private static @GuardedBy("sLock") Set<Font> sAvailableFonts; + @RavenwoodReplace + private static String getFontsXmlDir() { + return DEVICE_FONTS_XML_DIR; + } + + private static String getFontsXmlDir$ravenwood() { + return RavenwoodEnvironment.getInstance().getRavenwoodRuntimePath() + "fonts/"; + } + + @RavenwoodReplace + private static String getSystemFontDir() { + return DEVICE_FONT_DIR; + } + + private static String getSystemFontDir$ravenwood() { + return RavenwoodEnvironment.getInstance().getRavenwoodRuntimePath() + "fonts/"; + } + /** * Returns all available font files in the system. * diff --git a/graphics/java/android/graphics/text/GraphemeBreak.java b/graphics/java/android/graphics/text/GraphemeBreak.java index f82b2fd659cc..0bc1e3b0cae3 100644 --- a/graphics/java/android/graphics/text/GraphemeBreak.java +++ b/graphics/java/android/graphics/text/GraphemeBreak.java @@ -17,6 +17,7 @@ package android.graphics.text; /** @hide */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class GraphemeBreak { private GraphemeBreak() { } diff --git a/graphics/java/android/graphics/text/LineBreakConfig.java b/graphics/java/android/graphics/text/LineBreakConfig.java index 5a1086cef407..fa3cfbdd4e97 100644 --- a/graphics/java/android/graphics/text/LineBreakConfig.java +++ b/graphics/java/android/graphics/text/LineBreakConfig.java @@ -24,12 +24,13 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; -import android.app.ActivityThread; import android.os.Build; import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; +import dalvik.system.VMRuntime; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; @@ -41,6 +42,7 @@ import java.util.Objects; * <a href="https://www.w3.org/TR/css-text-3/#line-break-property" class="external"> * line-break property</a> for more information. */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class LineBreakConfig implements Parcelable { /** * No hyphenation preference is specified. @@ -484,8 +486,7 @@ public final class LineBreakConfig implements Parcelable { * @hide */ public static @LineBreakStyle int getResolvedLineBreakStyle(@Nullable LineBreakConfig config) { - final int targetSdkVersion = ActivityThread.currentApplication().getApplicationInfo() - .targetSdkVersion; + final int targetSdkVersion = VMRuntime.getRuntime().getTargetSdkVersion(); final int defaultStyle; final int vicVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM; if (targetSdkVersion >= vicVersion) { @@ -519,8 +520,7 @@ public final class LineBreakConfig implements Parcelable { */ public static @LineBreakWordStyle int getResolvedLineBreakWordStyle( @Nullable LineBreakConfig config) { - final int targetSdkVersion = ActivityThread.currentApplication().getApplicationInfo() - .targetSdkVersion; + final int targetSdkVersion = VMRuntime.getRuntime().getTargetSdkVersion(); final int defaultWordStyle; final int vicVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM; if (targetSdkVersion >= vicVersion) { diff --git a/graphics/java/android/graphics/text/LineBreaker.java b/graphics/java/android/graphics/text/LineBreaker.java index 94de066c9182..29135b837352 100644 --- a/graphics/java/android/graphics/text/LineBreaker.java +++ b/graphics/java/android/graphics/text/LineBreaker.java @@ -91,6 +91,7 @@ import java.lang.annotation.RetentionPolicy; * </pre> * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class LineBreaker { /** @hide */ @IntDef(prefix = { "BREAK_STRATEGY_" }, value = { diff --git a/graphics/java/android/graphics/text/MeasuredText.java b/graphics/java/android/graphics/text/MeasuredText.java index 884268a4b85c..f58d5311fa30 100644 --- a/graphics/java/android/graphics/text/MeasuredText.java +++ b/graphics/java/android/graphics/text/MeasuredText.java @@ -56,6 +56,7 @@ import java.util.Objects; * </pre> * </p> */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class MeasuredText { private static final String TAG = "MeasuredText"; diff --git a/graphics/java/android/graphics/text/PositionedGlyphs.java b/graphics/java/android/graphics/text/PositionedGlyphs.java index 43216ba6e087..31125ffa7bd4 100644 --- a/graphics/java/android/graphics/text/PositionedGlyphs.java +++ b/graphics/java/android/graphics/text/PositionedGlyphs.java @@ -46,6 +46,7 @@ import java.util.Objects; * @see TextRunShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint) * @see TextRunShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint) */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public final class PositionedGlyphs { private static class NoImagePreloadHolder { private static final NativeAllocationRegistry REGISTRY = diff --git a/graphics/java/android/graphics/text/TextRunShaper.java b/graphics/java/android/graphics/text/TextRunShaper.java index 19ea04a48046..f1e3d67e9925 100644 --- a/graphics/java/android/graphics/text/TextRunShaper.java +++ b/graphics/java/android/graphics/text/TextRunShaper.java @@ -40,6 +40,7 @@ import com.android.internal.util.Preconditions; * @see android.text.TextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic, TextPaint, * TextShaper.GlyphsConsumer) */ +@android.ravenwood.annotation.RavenwoodKeepWholeClass public class TextRunShaper { private TextRunShaper() {} // Do not instantiate diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp index bb2a53bc04d6..38ac8ab7135e 100644 --- a/libs/hwui/Android.bp +++ b/libs/hwui/Android.bp @@ -233,6 +233,14 @@ java_sdk_library { } filegroup { + name: "framework-graphics-ravenwood-policies", + srcs: [ + "framework-graphics-ravenwood-policies.txt", + ], + visibility: ["//frameworks/base/ravenwood"], +} + +filegroup { name: "framework-graphics-srcs", srcs: [ "apex/java/**/*.java", @@ -461,6 +469,10 @@ cc_defaults { }, linux: { srcs: ["platform/linux/utils/SharedLib.cpp"], + shared_libs: [ + "libbinder", + "libbinder_ndk", + ], }, darwin: { srcs: ["platform/darwin/utils/SharedLib.cpp"], diff --git a/libs/hwui/framework-graphics-ravenwood-policies.txt b/libs/hwui/framework-graphics-ravenwood-policies.txt new file mode 100644 index 000000000000..7296225ccfe8 --- /dev/null +++ b/libs/hwui/framework-graphics-ravenwood-policies.txt @@ -0,0 +1 @@ +class android.graphics.ColorMatrix keepclass diff --git a/libs/hwui/jni/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp index cfde0b28c0d5..27d4ac7cef4b 100644 --- a/libs/hwui/jni/Bitmap.cpp +++ b/libs/hwui/jni/Bitmap.cpp @@ -613,7 +613,7 @@ static void Bitmap_setHasMipMap(JNIEnv* env, jobject, jlong bitmapHandle, /////////////////////////////////////////////////////////////////////////////// // TODO: Move somewhere else -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel #define ON_ERROR_RETURN(X) \ if ((error = (X)) != STATUS_OK) return error @@ -717,7 +717,7 @@ static binder_status_t writeBlob(AParcel* parcel, uint64_t bitmapId, const SkBit #undef ON_ERROR_RETURN -#endif // __ANDROID__ // Layoutlib does not support parcel +#endif // __linux__ // Only Linux support parcel // This is the maximum possible size because the SkColorSpace must be // representable (and therefore serializable) using a matrix and numerical @@ -733,7 +733,7 @@ static bool validateImageInfo(const SkImageInfo& info, int32_t rowBytes) { } static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel if (parcel == NULL) { jniThrowNullPointerException(env, "parcel cannot be null"); return NULL; @@ -836,14 +836,14 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable), nullptr, nullptr, density, sourceId); #else - jniThrowRuntimeException(env, "Cannot use parcels outside of Android"); + jniThrowRuntimeException(env, "Cannot use parcels outside of Linux"); return NULL; #endif } static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, jlong bitmapHandle, jint density, jobject parcel) { -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel if (parcel == NULL) { ALOGD("------- writeToParcel null parcel\n"); return JNI_FALSE; @@ -901,7 +901,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, jlong bitmapHandle, j } return JNI_TRUE; #else - doThrowRE(env, "Cannot use parcels outside of Android"); + doThrowRE(env, "Cannot use parcels outside of Linux"); return JNI_FALSE; #endif } diff --git a/libs/hwui/jni/Region.cpp b/libs/hwui/jni/Region.cpp index 1e064b820591..76986eeb079d 100644 --- a/libs/hwui/jni/Region.cpp +++ b/libs/hwui/jni/Region.cpp @@ -18,7 +18,7 @@ #include "SkPath.h" #include "GraphicsJNI.h" -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel #include <android/binder_parcel.h> #include <android/binder_parcel_jni.h> #include <android/binder_parcel_utils.h> @@ -202,7 +202,7 @@ static jstring Region_toString(JNIEnv* env, jobject clazz, jlong regionHandle) { static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel) { -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel if (parcel == nullptr) { return 0; } @@ -230,7 +230,7 @@ static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel) static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHandle, jobject parcel) { -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel const SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle); if (parcel == nullptr) { return JNI_FALSE; diff --git a/libs/hwui/jni/ScopedParcel.cpp b/libs/hwui/jni/ScopedParcel.cpp index 95e4e01d8df8..52cd988344b0 100644 --- a/libs/hwui/jni/ScopedParcel.cpp +++ b/libs/hwui/jni/ScopedParcel.cpp @@ -15,7 +15,7 @@ */ #include "ScopedParcel.h" -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel using namespace android; @@ -92,4 +92,4 @@ void ScopedParcel::writeData(const std::optional<sk_sp<SkData>>& optData) { AParcel_writeByteArray(mParcel, nullptr, -1); } } -#endif // __ANDROID__ // Layoutlib does not support parcel +#endif // __linux__ // Only Linux support parcel diff --git a/libs/hwui/jni/ScopedParcel.h b/libs/hwui/jni/ScopedParcel.h index f2f138fda43c..f2b793a354d7 100644 --- a/libs/hwui/jni/ScopedParcel.h +++ b/libs/hwui/jni/ScopedParcel.h @@ -15,7 +15,7 @@ */ #include "SkData.h" -#ifdef __ANDROID__ // Layoutlib does not support parcel +#ifdef __linux__ // Only Linux support parcel #include <android-base/unique_fd.h> #include <android/binder_parcel.h> #include <android/binder_parcel_jni.h> @@ -64,4 +64,4 @@ enum class BlobType : int32_t { ASHMEM, }; -#endif // __ANDROID__ // Layoutlib does not support parcel
\ No newline at end of file +#endif // __linux__ // Only Linux support parcel diff --git a/libs/hwui/jni/graphics_jni_helpers.h b/libs/hwui/jni/graphics_jni_helpers.h index 91db134af18f..ff26ec1771bd 100644 --- a/libs/hwui/jni/graphics_jni_helpers.h +++ b/libs/hwui/jni/graphics_jni_helpers.h @@ -21,6 +21,7 @@ #include <nativehelper/JNIPlatformHelp.h> #include <nativehelper/scoped_local_ref.h> #include <nativehelper/scoped_utf_chars.h> +#include <nativehelper/scoped_primitive_array.h> #include <string> // Host targets (layoutlib) do not differentiate between regular and critical native methods, diff --git a/ravenwood/Android.bp b/ravenwood/Android.bp index 65550f2b4273..ccbc46fdb03b 100644 --- a/ravenwood/Android.bp +++ b/ravenwood/Android.bp @@ -121,6 +121,7 @@ java_library { name: "ravenwood-helper-framework-runtime", srcs: [ "runtime-helper-src/framework/**/*.java", + ":framework-graphics-srcs", ], static_libs: [ "ravenwood-runtime-common", @@ -278,6 +279,7 @@ cc_library_host_shared { cc_library_host_shared { name: "libravenwood_runtime", defaults: ["ravenwood_jni_defaults"], + header_libs: ["libicuuc_headers"], srcs: [ "runtime-jni/ravenwood_runtime.cpp", "runtime-jni/ravenwood_os_constants.cpp", @@ -372,6 +374,13 @@ platform_compat_config { visibility: ["//visibility:private"], } +java_library { + name: "ext-ravenwood", + installable: false, + static_libs: ["ext"], + visibility: ["//visibility:private"], +} + filegroup { name: "ravenwood-data", device_common_srcs: [ @@ -637,6 +646,7 @@ android_ravenwood_libgroup { libs: [ "100-framework-minus-apex.ravenwood", "200-kxml2-android", + "ext-ravenwood", "ravenwood-runtime-common-ravenwood", diff --git a/ravenwood/Framework.bp b/ravenwood/Framework.bp index 71496b0d5766..e36677189e02 100644 --- a/ravenwood/Framework.bp +++ b/ravenwood/Framework.bp @@ -419,11 +419,13 @@ java_genrule { "--out-impl-jar $(location ravenwood.jar) " + "--in-jar $(location :framework-graphics.impl{.jar}) " + - "--policy-override-file $(location :ravenwood-common-policies) ", + "--policy-override-file $(location :ravenwood-common-policies) " + + "--policy-override-file $(location :framework-graphics-ravenwood-policies) ", srcs: [ ":framework-graphics.impl{.jar}", ":ravenwood-common-policies", + ":framework-graphics-ravenwood-policies", ":ravenwood-standard-options", ], out: [ diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java index a3326337d485..9e6b12f60add 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java @@ -230,6 +230,16 @@ public class RavenwoodContext extends RavenwoodBaseContext { return mAppContext; } + @Override + public boolean isRestricted() { + return false; + } + + @Override + public boolean canLoadUnsafeResources() { + return true; + } + /** * Wrap the given {@link Supplier} to become memoized. * diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java index a208d6dce2ce..7e935d0451ae 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java @@ -48,6 +48,7 @@ public final class RavenwoodNativeLoader { android.content.res.AssetManager.class, android.content.res.StringBlock.class, android.content.res.XmlBlock.class, + android.text.AndroidCharacter.class, }; /** @@ -61,15 +62,49 @@ public final class RavenwoodNativeLoader { android.graphics.Path.class, android.graphics.Color.class, android.graphics.ColorSpace.class, + android.graphics.Bitmap.class, + android.graphics.BitmapFactory.class, + android.graphics.BitmapRegionDecoder.class, + android.graphics.Camera.class, + android.graphics.Canvas.class, + android.graphics.CanvasProperty.class, + android.graphics.ColorFilter.class, + android.graphics.DrawFilter.class, + android.graphics.FontFamily.class, + android.graphics.Gainmap.class, + android.graphics.ImageDecoder.class, + android.graphics.MaskFilter.class, + android.graphics.NinePatch.class, + android.graphics.Paint.class, + android.graphics.PathEffect.class, + android.graphics.PathIterator.class, + android.graphics.PathMeasure.class, + android.graphics.Picture.class, + android.graphics.RecordingCanvas.class, + android.graphics.Region.class, + android.graphics.RenderNode.class, + android.graphics.Shader.class, + android.graphics.RenderEffect.class, + android.graphics.Typeface.class, + android.graphics.YuvImage.class, + android.graphics.fonts.Font.class, + android.graphics.fonts.FontFamily.class, + android.graphics.text.LineBreaker.class, + android.graphics.text.MeasuredText.class, + android.graphics.text.TextRunShaper.class, + android.graphics.text.GraphemeBreak.class, + android.util.PathParser.class, }; /** * Extra strings needed to pass to register_android_graphics_classes(). * - * `android.graphics.Graphics` is not actually a class, so we just hardcode it here. + * Several entries are not actually a class, so we just hardcode them here. */ public final static String[] GRAPHICS_EXTRA_INIT_PARAMS = new String[] { - "android.graphics.Graphics" + "android.graphics.Graphics", + "android.graphics.ByteBufferStreamAdaptor", + "android.graphics.CreateJavaOutputStreamAdaptor" }; private RavenwoodNativeLoader() { diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java index ae88bb234e9d..f205d238c693 100644 --- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java +++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java @@ -43,6 +43,7 @@ import android.app.UiAutomation; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.Resources; +import android.graphics.Typeface; import android.icu.util.ULocale; import android.os.Binder; import android.os.Build; @@ -246,6 +247,13 @@ public class RavenwoodRuntimeEnvironmentController { // Do the basic set up for the android sysprops. RavenwoodSystemProperties.initialize(); + // Set ICU data file + String icuData = RavenwoodCommonUtils.getRavenwoodRuntimePath() + + "ravenwood-data/" + + RavenwoodRuntimeNative.getIcuDataName() + + ".dat"; + RavenwoodRuntimeNative.setSystemProperty("ro.icu.data.path", icuData); + // Enable all log levels for native logging, until we'll have a way to change the native // side log level at runtime. // Do this after loading RAVENWOOD_NATIVE_RUNTIME_NAME (which backs Os.setenv()), @@ -268,6 +276,11 @@ public class RavenwoodRuntimeEnvironmentController { Objects.requireNonNull(Build.TYPE); Objects.requireNonNull(Build.VERSION.SDK); + // Fonts can only be initialized once + Typeface.init(); + Typeface.loadPreinstalledSystemFontMap(); + Typeface.loadNativeSystemFonts(); + System.setProperty(RAVENWOOD_VERSION_JAVA_SYSPROP, "1"); // This will let AndroidJUnit4 use the original runner. System.setProperty("android.junit.runner", diff --git a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java index 96aed4b3401d..d5a96ddc3a98 100644 --- a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java +++ b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java @@ -20,6 +20,7 @@ import com.android.ravenwood.common.JvmWorkaround; import java.io.FileDescriptor; import java.util.LinkedHashMap; import java.util.Map; +import java.util.regex.Pattern; /** * Class to host APIs that exist in libcore, but not in standard JRE. @@ -46,4 +47,22 @@ public class RavenwoodJdkPatch { final var it = map.entrySet().iterator(); return it.hasNext() ? it.next() : null; } + + /** + * Implements Pattern.compile(String) + * + * ART always assumes UNICODE_CHARACTER_CLASS is set. + */ + public static Pattern compilePattern(String regex) { + return Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS); + } + + /** + * Implements Pattern.compile(String, int) + * + * ART always assumes UNICODE_CHARACTER_CLASS is set. + */ + public static Pattern compilePattern(String regex, int flag) { + return Pattern.compile(regex, flag | Pattern.UNICODE_CHARACTER_CLASS); + } } diff --git a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java index acbcdf1926db..0d82a8691881 100644 --- a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java +++ b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java @@ -66,6 +66,8 @@ public class RavenwoodRuntimeNative { public static native int gettid(); + public static native String getIcuDataName(); + public static long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException { return nLseek(JvmWorkaround.getInstance().getFdInt(fd), offset, whence); } diff --git a/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java new file mode 100644 index 000000000000..82bab64f22f3 --- /dev/null +++ b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2010 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 dalvik.system; + +/** + * A no-op copy of libcore/dalvik/src/main/java/dalvik/system/CloseGuard.java + */ +public final class CloseGuard { + + /** + * Returns a CloseGuard instance. {@code #open(String)} can be used to set + * up the instance to warn on failure to close. + * + * @return {@link CloseGuard} instance. + * + * @hide + */ + public static CloseGuard get() { + return new CloseGuard(); + } + + /** + * Enables/disables stack capture and tracking. A call stack is captured + * during open(), and open/close events are reported to the Tracker, only + * if enabled is true. If a stack trace was captured, the {@link + * #getReporter() reporter} is informed of unclosed resources; otherwise a + * one-line warning is logged. + * + * @param enabled whether stack capture and tracking is enabled. + * + * @hide + */ + public static void setEnabled(boolean enabled) { + } + + /** + * True if CloseGuard stack capture and tracking are enabled. + * + * @hide + */ + public static boolean isEnabled() { + return false; + } + + /** + * Used to replace default Reporter used to warn of CloseGuard + * violations when stack tracking is enabled. Must be non-null. + * + * @param rep replacement for default Reporter. + * + * @hide + */ + public static void setReporter(Reporter rep) { + if (rep == null) { + throw new NullPointerException("reporter == null"); + } + } + + /** + * Returns non-null CloseGuard.Reporter. + * + * @return CloseGuard's Reporter. + * + * @hide + */ + public static Reporter getReporter() { + return null; + } + + /** + * Sets the {@link Tracker} that is notified when resources are allocated and released. + * The Tracker is invoked only if CloseGuard {@link #isEnabled()} held when {@link #open()} + * was called. A null argument disables tracking. + * + * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so + * MUST NOT be used for any other purposes. + * + * @hide + */ + public static void setTracker(Tracker tracker) { + } + + /** + * Returns {@link #setTracker(Tracker) last Tracker that was set}, or null to indicate + * there is none. + * + * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so + * MUST NOT be used for any other purposes. + * + * @hide + */ + public static Tracker getTracker() { + return null; + } + + private CloseGuard() {} + + /** + * {@code open} initializes the instance with a warning that the caller + * should have explicitly called the {@code closer} method instead of + * relying on finalization. + * + * @param closer non-null name of explicit termination method. Printed by warnIfOpen. + * @throws NullPointerException if closer is null. + * + * @hide + */ + public void open(String closer) { + openWithCallSite(closer, null /* callsite */); + } + + /** + * Like {@link #open(String)}, but with explicit callsite string being passed in for better + * performance. + * <p> + * This only has better performance than {@link #open(String)} if {@link #isEnabled()} returns {@code true}, which + * usually shouldn't happen on release builds. + * + * @param closer Non-null name of explicit termination method. Printed by warnIfOpen. + * @param callsite Non-null string uniquely identifying the callsite. + * + * @hide + */ + public void openWithCallSite(String closer, String callsite) { + } + + // We keep either an allocation stack containing the closer String or, when + // in disabled state, just the closer String. + // We keep them in a single field only to minimize overhead. + private Object /* String or Throwable */ closerNameOrAllocationInfo; + + /** + * Marks this CloseGuard instance as closed to avoid warnings on + * finalization. + * + * @hide + */ + public void close() { + } + + /** + * Logs a warning if the caller did not properly cleanup by calling an + * explicit close method before finalization. If CloseGuard was enabled + * when the CloseGuard was created, passes the stacktrace associated with + * the allocation to the current reporter. If it was not enabled, it just + * directly logs a brief message. + * + * @hide + */ + public void warnIfOpen() { + } + + + /** + * Interface to allow customization of tracking behaviour. + * + * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so + * MUST NOT be used for any other purposes. + * + * @hide + */ + public interface Tracker { + void open(Throwable allocationSite); + void close(Throwable allocationSite); + } + + /** + * Interface to allow customization of reporting behavior. + * @hide + */ + public interface Reporter { + /** + * + * @hide + */ + void report(String message, Throwable allocationSite); + + /** + * + * @hide + */ + default void report(String message) {} + } +} diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java new file mode 100644 index 000000000000..2a1ee2542982 --- /dev/null +++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2025 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 libcore.io; + +import android.system.ErrnoException; +import android.system.Os; +import android.system.OsConstants; + +import java.io.FileDescriptor; +import java.io.FileNotFoundException; +import java.io.IOException; + +public class IoBridge { + + public static void closeAndSignalBlockedThreads(FileDescriptor fd) throws IOException { + if (fd == null) { + return; + } + try { + Os.close(fd); + } catch (ErrnoException errnoException) { + throw errnoException.rethrowAsIOException(); + } + } + + public static FileDescriptor open(String path, int flags) throws FileNotFoundException { + FileDescriptor fd = null; + try { + fd = Os.open(path, flags, 0666); + // Posix open(2) fails with EISDIR only if you ask for write permission. + // Java disallows reading directories too.f + if (OsConstants.S_ISDIR(Os.fstat(fd).st_mode)) { + throw new ErrnoException("open", OsConstants.EISDIR); + } + return fd; + } catch (ErrnoException errnoException) { + try { + if (fd != null) { + closeAndSignalBlockedThreads(fd); + } + } catch (IOException ignored) { + } + FileNotFoundException ex = new FileNotFoundException(path + ": " + + errnoException.getMessage()); + ex.initCause(errnoException); + throw ex; + } + } +} diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java index ad86135de32e..cf1a5138cbc6 100644 --- a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java +++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java @@ -35,6 +35,11 @@ public class NativeAllocationRegistry { return new NativeAllocationRegistry(classLoader, freeFunction, size); } + public static NativeAllocationRegistry createNonmalloced( + Class clazz, long freeFunction, long size) { + return new NativeAllocationRegistry(clazz.getClassLoader(), freeFunction, size); + } + public static NativeAllocationRegistry createMalloced( ClassLoader classLoader, long freeFunction, long size) { return new NativeAllocationRegistry(classLoader, freeFunction, size); @@ -45,6 +50,11 @@ public class NativeAllocationRegistry { return new NativeAllocationRegistry(classLoader, freeFunction, 0); } + public static NativeAllocationRegistry createMalloced( + Class clazz, long freeFunction, long size) { + return new NativeAllocationRegistry(clazz.getClassLoader(), freeFunction, size); + } + public NativeAllocationRegistry(ClassLoader classLoader, long freeFunction, long size) { if (size < 0) { throw new IllegalArgumentException("Invalid native allocation size: " + size); @@ -52,6 +62,37 @@ public class NativeAllocationRegistry { mFreeFunction = freeFunction; } + private class CleanerThunk implements Runnable { + private long nativePtr; + + public CleanerThunk() { + nativePtr = 0; + } + + public void setNativePtr(long ptr) { + nativePtr = ptr; + } + + @Override + public void run() { + if (nativePtr != 0) { + applyFreeFunction(mFreeFunction, nativePtr); + } + } + } + + private static class CleanableRunner implements Runnable { + private final Cleaner.Cleanable mCleanable; + + public CleanableRunner(Cleaner.Cleanable cleanable) { + mCleanable = cleanable; + } + + public void run() { + mCleanable.clean(); + } + } + public Runnable registerNativeAllocation(Object referent, long nativePtr) { if (referent == null) { throw new IllegalArgumentException("referent is null"); @@ -60,13 +101,25 @@ public class NativeAllocationRegistry { throw new IllegalArgumentException("nativePtr is null"); } - final Runnable releaser = () -> { - RavenwoodRuntimeNative.applyFreeFunction(mFreeFunction, nativePtr); - }; - sCleaner.register(referent, releaser); + final CleanerThunk thunk; + final CleanableRunner result; + try { + thunk = new CleanerThunk(); + final var cleanable = sCleaner.register(referent, thunk); + result = new CleanableRunner(cleanable); + } catch (VirtualMachineError vme /* probably OutOfMemoryError */) { + applyFreeFunction(mFreeFunction, nativePtr); + throw vme; + } + // Enable the cleaner only after we can no longer throw anything, including OOME. + thunk.setNativePtr(nativePtr); // Ensure that cleaner doesn't get invoked before we enable it. Reference.reachabilityFence(referent); - return releaser; + return result; + } + + public static void applyFreeFunction(long freeFunction, long nativePtr) { + RavenwoodRuntimeNative.applyFreeFunction(freeFunction, nativePtr); } } diff --git a/ravenwood/runtime-jni/ravenwood_runtime.cpp b/ravenwood/runtime-jni/ravenwood_runtime.cpp index 8d8ed7119e84..01ebdc953539 100644 --- a/ravenwood/runtime-jni/ravenwood_runtime.cpp +++ b/ravenwood/runtime-jni/ravenwood_runtime.cpp @@ -20,6 +20,7 @@ #include <sys/syscall.h> #include <unistd.h> #include <utils/misc.h> +#include <unicode/utypes.h> #include <string> @@ -183,6 +184,10 @@ static jint Linux_gettid(JNIEnv* env, jobject) { return syscall(__NR_gettid); } +static jstring getIcuDataName(JNIEnv* env, jclass clazz) { + return env->NewStringUTF(U_ICUDATA_NAME); +} + // ---- Registration ---- extern void register_android_system_OsConstants(JNIEnv* env); @@ -201,6 +206,7 @@ static const JNINativeMethod sMethods[] = { "setenv", "(Ljava/lang/String;Ljava/lang/String;Z)V", (void*)Linux_setenv }, { "getpid", "()I", (void*)Linux_getpid }, { "gettid", "()I", (void*)Linux_gettid }, + { "getIcuDataName", "()Ljava/lang/String;", (void*)getIcuDataName }, }; extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { diff --git a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt index e202d0ecfa23..7462cc2f384a 100644 --- a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt +++ b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt @@ -259,6 +259,8 @@ android.database.sqlite.SQLiteClosable android.database.sqlite.SQLiteException android.text.TextUtils +android.text.Html +android.text.HtmlToSpannedConverter android.accounts.Account @@ -278,6 +280,10 @@ android.graphics.PointF android.graphics.Rect android.graphics.RectF +android.graphics.fonts.SystemFonts + +android.graphics.text.LineBreakConfig + android.content.ContentProvider android.app.ActivityManager @@ -383,3 +389,228 @@ android.app.compat.* com.android.server.compat.* com.android.internal.compat.* android.app.AppCompatCallbacks +android.graphics.AvoidXfermode +android.graphics.BLASTBufferQueue +android.graphics.BaseCanvas +android.graphics.BaseRecordingCanvas +android.graphics.Bitmap +android.graphics.BitmapFactory +android.graphics.BitmapRegionDecoder +android.graphics.BitmapShader +android.graphics.BlendMode +android.graphics.BlendModeColorFilter +android.graphics.BlurMaskFilter +android.graphics.Camera +android.graphics.Canvas +android.graphics.CanvasProperty +android.graphics.ColorFilter +android.graphics.ColorMatrix +android.graphics.ColorMatrixColorFilter +android.graphics.Compatibility +android.graphics.ComposePathEffect +android.graphics.ComposeShader +android.graphics.CornerPathEffect +android.graphics.DashPathEffect +android.graphics.DiscretePathEffect +android.graphics.DrawFilter +android.graphics.EmbossMaskFilter +android.graphics.FontFamily +android.graphics.FontListParser +android.graphics.ForceDarkType +android.graphics.FrameInfo +android.graphics.Gainmap +android.graphics.GraphicBuffer +android.graphics.GraphicsProtos +android.graphics.GraphicsStatsService +android.graphics.HardwareBufferRenderer +android.graphics.HardwareRenderer +android.graphics.HardwareRendererObserver +android.graphics.ImageDecoder +android.graphics.ImageFormat +android.graphics.LayerRasterizer +android.graphics.LeakyTypefaceStorage +android.graphics.LightingColorFilter +android.graphics.LinearGradient +android.graphics.MaskFilter +android.graphics.Mesh +android.graphics.MeshSpecification +android.graphics.Movie +android.graphics.NinePatch +android.graphics.Paint +android.graphics.PaintFlagsDrawFilter +android.graphics.PathDashPathEffect +android.graphics.PathEffect +android.graphics.PathIterator +android.graphics.PathMeasure +android.graphics.Picture +android.graphics.PixelXorXfermode +android.graphics.PorterDuff +android.graphics.PorterDuffColorFilter +android.graphics.PorterDuffXfermode +android.graphics.PostProcessor +android.graphics.RadialGradient +android.graphics.Rasterizer +android.graphics.RecordingCanvas +android.graphics.Region +android.graphics.RegionIterator +android.graphics.RenderEffect +android.graphics.RenderNode +android.graphics.RuntimeColorFilter +android.graphics.RuntimeShader +android.graphics.RuntimeXfermode +android.graphics.Shader +android.graphics.SumPathEffect +android.graphics.SurfaceTexture +android.graphics.SweepGradient +android.graphics.TableMaskFilter +android.graphics.TemporaryBuffer +android.graphics.TextureLayer +android.graphics.Typeface +android.graphics.Xfermode +android.graphics.YuvImage +android.graphics.fonts.Font +android.graphics.fonts.FontCustomizationParser +android.graphics.fonts.FontFamily +android.graphics.fonts.FontFamilyUpdateRequest +android.graphics.fonts.FontFileUpdateRequest +android.graphics.fonts.FontFileUtil +android.graphics.fonts.FontStyle +android.graphics.fonts.FontVariationAxis +android.graphics.text.GraphemeBreak +android.graphics.text.LineBreaker +android.graphics.text.MeasuredText +android.graphics.text.PositionedGlyphs +android.graphics.text.TextRunShaper +android.text.AlteredCharSequence +android.text.AndroidBidi +android.text.AndroidCharacter +android.text.Annotation +android.text.AutoGrowArray +android.text.AutoText +android.text.BidiFormatter +android.text.BoringLayout +android.text.CharSequenceCharacterIterator +android.text.ClipboardManager +android.text.DynamicLayout +android.text.Editable +android.text.Emoji +android.text.EmojiConsistency +android.text.FontConfig +android.text.GetChars +android.text.GraphemeClusterSegmentFinder +android.text.GraphicsOperations +android.text.Highlights +android.text.Hyphenator +android.text.InputFilter +android.text.InputType +android.text.Layout +android.text.LoginFilter +android.text.MeasuredParagraph +android.text.NoCopySpan +android.text.PackedIntVector +android.text.PackedObjectVector +android.text.ParcelableSpan +android.text.PrecomputedText +android.text.SegmentFinder +android.text.Selection +android.text.SpanColors +android.text.SpanSet +android.text.SpanWatcher +android.text.Spannable +android.text.SpannableString +android.text.SpannableStringBuilder +android.text.SpannableStringInternal +android.text.Spanned +android.text.SpannedString +android.text.StaticLayout +android.text.TextDirectionHeuristic +android.text.TextDirectionHeuristics +android.text.TextLine +android.text.TextPaint +android.text.TextShaper +android.text.TextWatcher +android.text.WordSegmentFinder +android.text.format.DateFormat +android.text.format.DateIntervalFormat +android.text.format.DateTimeFormat +android.text.format.DateUtils +android.text.format.DateUtilsBridge +android.text.format.Formatter +android.text.format.RelativeDateTimeFormatter +android.text.format.Time +android.text.format.TimeFormatter +android.text.format.TimeMigrationUtils +android.text.method.AllCapsTransformationMethod +android.text.method.ArrowKeyMovementMethod +android.text.method.BaseKeyListener +android.text.method.BaseMovementMethod +android.text.method.CharacterPickerDialog +android.text.method.DateKeyListener +android.text.method.DateTimeKeyListener +android.text.method.DialerKeyListener +android.text.method.DigitsKeyListener +android.text.method.HideReturnsTransformationMethod +android.text.method.InsertModeTransformationMethod +android.text.method.KeyListener +android.text.method.LinkMovementMethod +android.text.method.MetaKeyKeyListener +android.text.method.MovementMethod +android.text.method.MultiTapKeyListener +android.text.method.NumberKeyListener +android.text.method.OffsetMapping +android.text.method.PasswordTransformationMethod +android.text.method.QwertyKeyListener +android.text.method.ReplacementTransformationMethod +android.text.method.ScrollingMovementMethod +android.text.method.SingleLineTransformationMethod +android.text.method.TextKeyListener +android.text.method.TimeKeyListener +android.text.method.Touch +android.text.method.TransformationMethod +android.text.method.TransformationMethod2 +android.text.method.TranslationTransformationMethod +android.text.method.WordIterator +android.text.style.AbsoluteSizeSpan +android.text.style.AccessibilityClickableSpan +android.text.style.AccessibilityReplacementSpan +android.text.style.AccessibilityURLSpan +android.text.style.AlignmentSpan +android.text.style.BackgroundColorSpan +android.text.style.BulletSpan +android.text.style.CharacterStyle +android.text.style.ClickableSpan +android.text.style.ForegroundColorSpan +android.text.style.IconMarginSpan +android.text.style.LeadingMarginSpan +android.text.style.LineBackgroundSpan +android.text.style.LineBreakConfigSpan +android.text.style.LineHeightSpan +android.text.style.LocaleSpan +android.text.style.MaskFilterSpan +android.text.style.MetricAffectingSpan +android.text.style.NoWritingToolsSpan +android.text.style.ParagraphStyle +android.text.style.QuoteSpan +android.text.style.RasterizerSpan +android.text.style.RelativeSizeSpan +android.text.style.ReplacementSpan +android.text.style.ScaleXSpan +android.text.style.SpanUtils +android.text.style.SpellCheckSpan +android.text.style.StrikethroughSpan +android.text.style.StyleSpan +android.text.style.SubscriptSpan +android.text.style.SuggestionRangeSpan +android.text.style.SuggestionSpan +android.text.style.SuperscriptSpan +android.text.style.TabStopSpan +android.text.style.TextAppearanceSpan +android.text.style.TtsSpan +android.text.style.TypefaceSpan +android.text.style.URLSpan +android.text.style.UnderlineSpan +android.text.style.UpdateAppearance +android.text.style.UpdateLayout +android.text.style.WrapTogetherSpan +android.text.util.Rfc822Token +android.text.util.Rfc822Tokenizer diff --git a/ravenwood/texts/ravenwood-build.prop b/ravenwood/texts/ravenwood-build.prop index 7cc4454a6e56..37c50f11f73f 100644 --- a/ravenwood/texts/ravenwood-build.prop +++ b/ravenwood/texts/ravenwood-build.prop @@ -8,7 +8,11 @@ ro.soc.manufacturer=Android ro.soc.model=Ravenwood ro.debuggable=1 -# The ones starting with "ro.product" or "ro.bild" will be copied to all "partitions" too. +# For the graphics stack +ro.hwui.max_texture_allocation_size=104857600 +persist.sys.locale=en-US + +# The ones starting with "ro.product" or "ro.build" will be copied to all "partitions" too. # See RavenwoodSystemProperties. ro.product.brand=Android ro.product.device=Ravenwood diff --git a/ravenwood/texts/ravenwood-common-policies.txt b/ravenwood/texts/ravenwood-common-policies.txt index fd4ea6cf40c2..f0f4b8580f7d 100644 --- a/ravenwood/texts/ravenwood-common-policies.txt +++ b/ravenwood/texts/ravenwood-common-policies.txt @@ -21,3 +21,7 @@ class java.io.FileDescriptor # no-pta method setInt$ @com.android.ravenwood.RavenwoodJdkPatch.setInt$ class java.util.LinkedHashMap # no-pta method eldest @com.android.ravenwood.RavenwoodJdkPatch.eldest + +# Always set flag UNICODE_CHARACTER_CLASS when compiling regex +class java.util.regex.Pattern keep + method compile @com.android.ravenwood.RavenwoodJdkPatch.compilePattern diff --git a/ravenwood/texts/ravenwood-framework-policies.txt b/ravenwood/texts/ravenwood-framework-policies.txt index fff9e6ad41d5..0695316543ae 100644 --- a/ravenwood/texts/ravenwood-framework-policies.txt +++ b/ravenwood/texts/ravenwood-framework-policies.txt @@ -63,3 +63,22 @@ class android.text.ClipboardManager keep # no-pta # Just enough to allow ResourcesManager to run class android.hardware.display.DisplayManagerGlobal keep # no-pta method getInstance ()Landroid/hardware/display/DisplayManagerGlobal; ignore # no-pta + +# Bare minimum to support running ImageDecoderTest +class android.graphics.drawable.Drawable$ConstantState keepclass # no-pta +class android.graphics.drawable.BitmapDrawable$BitmapState keepclass # no-pta +class android.graphics.drawable.BitmapDrawable keep # no-pta + method <init> (Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V keep + method init * keep + method updateLocalState * keep + method computeBitmapSize * keep + method getIntrinsicWidth * keep + method getIntrinsicHeight * keep + method getBitmap * keep +class android.graphics.drawable.Drawable keep # no-pta + method <init> ()V keep + method resolveDensity * keep + method updateBlendModeFilter * ignore + +class android.os.StrictMode keep # no-pta + method noteSlowCall (Ljava/lang/String;)V ignore |