Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e80d1dc authored by John Wu's avatar John Wu
Browse files

[Ravenwood] Support resources

Bug: 339614874
Flag: EXEMPT host side change only
Test: atest CtsResourcesTestCasesRavenwood
Test: $ANDROID_BUILD_TOP/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh
Change-Id: Id54cabb17fecb275edff6805bb403377f806fc32
parent 9a1fd932
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import android.content.res.XmlResourceParser;
import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodThrow;
import android.util.AttributeSet;
import android.util.Slog;
import android.util.Xml;
@@ -64,6 +66,7 @@ import java.util.Set;
// Add following to last Note: when guide is written:
// For more information about the LocaleConfig overridden by the application, see TODO(b/261528306):
// add link to guide
@RavenwoodKeepWholeClass
public class LocaleConfig implements Parcelable {
    private static final String TAG = "LocaleConfig";
    public static final String TAG_LOCALE_CONFIG = "locale-config";
@@ -104,6 +107,7 @@ public class LocaleConfig implements Parcelable {
     *
     * @see Context#createPackageContext(String, int).
     */
    @RavenwoodThrow(blockedBy = LocaleManager.class)
    public LocaleConfig(@NonNull Context context) {
        this(context, true);
    }
@@ -117,10 +121,12 @@ public class LocaleConfig implements Parcelable {
     * @see Context#createPackageContext(String, int).
     */
    @NonNull
    @RavenwoodThrow(blockedBy = LocaleManager.class)
    public static LocaleConfig fromContextIgnoringOverride(@NonNull Context context) {
        return new LocaleConfig(context, false);
    }

    @RavenwoodThrow(blockedBy = LocaleManager.class)
    private LocaleConfig(@NonNull Context context, boolean allowOverride) {
        if (allowOverride) {
            LocaleManager localeManager = context.getSystemService(LocaleManager.class);
+6 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ import android.os.IBinder;
import android.os.LocaleList;
import android.os.Process;
import android.os.Trace;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodThrow;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.DisplayMetrics;
@@ -70,6 +72,7 @@ import java.util.WeakHashMap;
import java.util.function.Function;

/** @hide */
@RavenwoodKeepWholeClass
public class ResourcesManager {
    static final String TAG = "ResourcesManager";
    private static final boolean DEBUG = false;
@@ -149,6 +152,7 @@ public class ResourcesManager {
     * This will collect the package resources' paths from its ApplicationInfo and add them to all
     * existing and future contexts while the application is running.
     */
    @RavenwoodThrow(reason = "FLAG_REGISTER_RESOURCE_PATHS is unsupported")
    public void registerResourcePaths(@NonNull String uniqueId, @NonNull ApplicationInfo appInfo) {
        if (!Flags.registerResourcePaths()) {
            return;
@@ -1877,6 +1881,7 @@ public class ResourcesManager {
         * instance uses.
         */
        @Override
        @RavenwoodThrow(blockedBy = ResourcesLoader.class)
        public void onLoadersChanged(@NonNull Resources resources,
                @NonNull List<ResourcesLoader> newLoader) {
            synchronized (mLock) {
@@ -1906,6 +1911,7 @@ public class ResourcesManager {
         * {@code loader} to apply any changes of the set of {@link ApkAssets}.
         **/
        @Override
        @RavenwoodThrow(blockedBy = ResourcesLoader.class)
        public void onLoaderUpdated(@NonNull ResourcesLoader loader) {
            synchronized (mLock) {
                final ArrayMap<ResourcesImpl, ResourcesKey> updatedResourceImplKeys =
+2 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;
import android.util.proto.WireTypeMismatchException;
@@ -55,6 +56,7 @@ import java.util.Objects;
 * @hide
 */
@TestApi
@RavenwoodKeepWholeClass
public class WindowConfiguration implements Parcelable, Comparable<WindowConfiguration> {
    /**
     * bounds that can differ from app bounds, which may include things such as insets.
+12 −0
Original line number Diff line number Diff line
@@ -87,6 +87,8 @@ import android.os.UserManager;
import android.os.storage.StorageManager;
import android.provider.E2eeContactKeysManager;
import android.provider.MediaStore;
import android.ravenwood.annotation.RavenwoodKeep;
import android.ravenwood.annotation.RavenwoodKeepPartialClass;
import android.telephony.TelephonyRegistryManager;
import android.util.AttributeSet;
import android.view.Display;
@@ -128,6 +130,7 @@ import java.util.function.IntConsumer;
 * up-calls for application-level operations such as launching activities,
 * broadcasting and receiving intents, etc.
 */
@RavenwoodKeepPartialClass
public abstract class Context {
    /**
     * After {@link Build.VERSION_CODES#TIRAMISU},
@@ -931,6 +934,7 @@ public abstract class Context {
     * @param resId Resource id for the CharSequence text
     */
    @NonNull
    @RavenwoodKeep
    public final CharSequence getText(@StringRes int resId) {
        return getResources().getText(resId);
    }
@@ -944,6 +948,7 @@ public abstract class Context {
     *         text information.
     */
    @NonNull
    @RavenwoodKeep
    public final String getString(@StringRes int resId) {
        return getResources().getString(resId);
    }
@@ -960,6 +965,7 @@ public abstract class Context {
     *         stripped of styled text information.
     */
    @NonNull
    @RavenwoodKeep
    public final String getString(@StringRes int resId, Object... formatArgs) {
        return getResources().getString(resId, formatArgs);
    }
@@ -976,6 +982,7 @@ public abstract class Context {
     *         does not exist.
     */
    @ColorInt
    @RavenwoodKeep
    public final int getColor(@ColorRes int id) {
        return getResources().getColor(id, getTheme());
    }
@@ -1043,6 +1050,7 @@ public abstract class Context {
     * @see android.content.res.Resources.Theme#obtainStyledAttributes(int[])
     */
    @NonNull
    @RavenwoodKeep
    public final TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[] attrs) {
        return getTheme().obtainStyledAttributes(attrs);
    }
@@ -1055,6 +1063,7 @@ public abstract class Context {
     * @see android.content.res.Resources.Theme#obtainStyledAttributes(int, int[])
     */
    @NonNull
    @RavenwoodKeep
    public final TypedArray obtainStyledAttributes(@StyleRes int resid,
            @NonNull @StyleableRes int[] attrs) throws Resources.NotFoundException {
        return getTheme().obtainStyledAttributes(resid, attrs);
@@ -1068,6 +1077,7 @@ public abstract class Context {
     * @see android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
     */
    @NonNull
    @RavenwoodKeep
    public final TypedArray obtainStyledAttributes(
            @Nullable AttributeSet set, @NonNull @StyleableRes int[] attrs) {
        return getTheme().obtainStyledAttributes(set, attrs, 0, 0);
@@ -1081,6 +1091,7 @@ public abstract class Context {
     * @see android.content.res.Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)
     */
    @NonNull
    @RavenwoodKeep
    public final TypedArray obtainStyledAttributes(@Nullable AttributeSet set,
            @NonNull @StyleableRes int[] attrs, @AttrRes int defStyleAttr,
            @StyleRes int defStyleRes) {
@@ -4530,6 +4541,7 @@ public abstract class Context {
     * <b>never</b> throw a {@link RuntimeException} if the name is not supported.
     */
    @SuppressWarnings("unchecked")
    @RavenwoodKeep
    // TODO(b/347269120): Re-add @Nullable
    public final <T> T getSystemService(@NonNull Class<T> serviceClass) {
        // Because subclasses may override getSystemService(String) we cannot
+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.om.OverlayableInfo;
import android.content.res.loader.AssetsProvider;
import android.content.res.loader.ResourcesProvider;
import android.ravenwood.annotation.RavenwoodClassLoadHook;
import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.text.TextUtils;

import com.android.internal.annotations.GuardedBy;
@@ -45,6 +47,8 @@ import java.util.Objects;
 * making the creation of AssetManagers very cheap.
 * @hide
 */
@RavenwoodKeepWholeClass
@RavenwoodClassLoadHook(RavenwoodClassLoadHook.LIBANDROID_LOADING_HOOK)
public final class ApkAssets {

    /**
Loading