Loading core/java/android/app/ActivityThread.java +63 −26 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package android.app; import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN; import static android.app.ConfigurationController.createNewConfigAndUpdateIfNotNull; import static android.app.Flags.skipBgMemTrimOnFgApp; import static android.app.Flags.earlyRenderThreadPriorityBoost; import static android.app.Flags.skipBgMemTrimOnFgApp; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.app.servertransaction.ActivityLifecycleItem.ON_CREATE; Loading @@ -45,8 +45,6 @@ import static com.android.internal.os.SafeZipPathValidatorCallback.VALIDATE_ZIP_ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions.SceneTransitionInfo; import android.app.HandoffActivityData; import android.app.HandoffActivityDataRequestInfo; import android.app.RemoteServiceException.BadForegroundServiceNotificationException; import android.app.RemoteServiceException.BadUserInitiatedJobNotificationException; import android.app.RemoteServiceException.CannotPostForegroundServiceNotificationException; Loading Loading @@ -183,7 +181,11 @@ import android.provider.Downloads; import android.provider.FontsContract; import android.provider.Settings; import android.ravenwood.annotation.RavenwoodIgnore; import android.ravenwood.annotation.RavenwoodRedirect; import android.ravenwood.annotation.RavenwoodKeep; import android.ravenwood.annotation.RavenwoodKeepPartialClass; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.ravenwood.annotation.RavenwoodReplace; import android.ravenwood.annotation.RavenwoodThrow; import android.renderscript.RenderScriptCacheDir; import android.se.omapi.SeFrameworkInitializer; import android.se.omapi.SeServiceManager; Loading Loading @@ -303,9 +305,10 @@ import java.util.function.Consumer; * * {@hide} */ @android.ravenwood.annotation.RavenwoodPartiallyAllowlisted @android.ravenwood.annotation.RavenwoodKeepPartialClass( comment = "We use Objenesis to instantiate it. No member fields are initialized." @android.ravenwood.annotation.RavenwoodKeepPartialClass(comment = "Initialization logic is in ActivityThread_ravenwood and RavenwoodAppDriver." + " Only very basic initialization is done." + " Most of its logic is not ported to Ravenwood yet." ) @android.ravenwood.annotation.RavenwoodRedirectionClass("ActivityThread_ravenwood") public final class ActivityThread extends ClientTransactionHandler Loading @@ -313,6 +316,11 @@ public final class ActivityThread extends ClientTransactionHandler private final DdmSyncStageUpdater mDdmSyncStageUpdater = newDdmSyncStageUpdater(); @RavenwoodIgnore private static DdmSyncStageUpdater newDdmSyncStageUpdater() { return new DdmSyncStageUpdater(); } /** @hide */ public static final String TAG = "ActivityThread"; static final boolean localLOGV = false; Loading Loading @@ -522,6 +530,11 @@ public final class ActivityThread extends ClientTransactionHandler // An executor that performs multi-step transactions. private final TransactionExecutor mTransactionExecutor = newTransactionExecutor(this); @RavenwoodIgnore private static TransactionExecutor newTransactionExecutor(ActivityThread at) { return new TransactionExecutor(at); } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final ResourcesManager mResourcesManager; Loading Loading @@ -1146,7 +1159,12 @@ public final class ActivityThread extends ClientTransactionHandler int index; } @RavenwoodKeepPartialClass private class ApplicationThread extends IApplicationThread.Stub { @RavenwoodKeep ApplicationThread() { } private static final String DB_CONNECTION_INFO_HEADER = " %8s %8s %14s %5s %5s %5s %s"; private static final String DB_CONNECTION_INFO_FORMAT = " %8s %8s %14s %5d %5d %5d %s"; private static final String DB_POOL_INFO_HEADER = " %13s %13s %13s %s"; Loading Loading @@ -1324,6 +1342,7 @@ public final class ActivityThread extends ClientTransactionHandler } @Override @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") public final void bindApplication( String processName, ApplicationInfo appInfo, Loading Loading @@ -2471,7 +2490,12 @@ public final class ActivityThread extends ClientTransactionHandler throw new ForegroundServiceDidNotStopInTimeException(message, inner); } @RavenwoodKeepPartialClass class H extends Handler { @RavenwoodKeep H() { } public static final int BIND_APPLICATION = 110; @UnsupportedAppUsage public static final int EXIT_APPLICATION = 111; Loading Loading @@ -2965,8 +2989,10 @@ public final class ActivityThread extends ClientTransactionHandler } } @RavenwoodKeepWholeClass(comment = "needed by ActivityThread constructor") final class GcIdler implements MessageQueue.IdleHandler { @Override @RavenwoodIgnore public final boolean queueIdle() { doGcIfNeeded(); purgePendingResources(); Loading @@ -2974,15 +3000,32 @@ public final class ActivityThread extends ClientTransactionHandler } } @RavenwoodKeepWholeClass(comment = "needed by ActivityThread constructor") final class PurgeIdler implements MessageQueue.IdleHandler { @Override @RavenwoodIgnore public boolean queueIdle() { purgePendingResources(); return false; } } /** Backdoor to set private static fields */ @RavenwoodReplace static void staticInitForRavenwood( ActivityThread instance ) { throw new IllegalStateException(); // shouldn't be called on a real device. } static void staticInitForRavenwood$ravenwood( ActivityThread instance ) { sCurrentActivityThread = instance; } @UnsupportedAppUsage @RavenwoodKeep public static ActivityThread currentActivityThread() { return sCurrentActivityThread; } Loading Loading @@ -3018,7 +3061,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @android.ravenwood.annotation.RavenwoodRedirect @RavenwoodKeep public static Application currentApplication() { ActivityThread am = currentActivityThread(); return am != null ? am.mInitialApplication : null; Loading @@ -3028,7 +3071,7 @@ public final class ActivityThread extends ClientTransactionHandler * Same as {@code ActivityThread.currentActivityThread().getSystemContext()}, but * it'll return a {@link Context} (not a {@link ContextImpl}) and is supported on Ravenwood. */ @android.ravenwood.annotation.RavenwoodRedirect @RavenwoodKeep public static Context currentSystemContext() { ActivityThread am = currentActivityThread(); return am != null ? am.getSystemContext() : null; Loading Loading @@ -3067,7 +3110,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodRedirect @RavenwoodKeep public Handler getHandler() { return mH; } Loading Loading @@ -3266,6 +3309,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodKeep ActivityThread() { mResourcesManager = ResourcesManager.getInstance(); } Loading @@ -3290,6 +3334,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodKeep public Instrumentation getInstrumentation() { return mInstrumentation; Loading @@ -3305,12 +3350,12 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodRedirect @RavenwoodKeep public Looper getLooper() { return mLooper; } @RavenwoodRedirect @RavenwoodKeep public Executor getExecutor() { return mExecutor; } Loading @@ -3328,17 +3373,7 @@ public final class ActivityThread extends ClientTransactionHandler @Override @UnsupportedAppUsage // It returns a ContextImpl, which is not supported on Ravenwood yet, and it might never be // supported. We want to change the return type to Context so support it on Ravenwood, // but the @UnsupportedAppUsage prevents us from doing it, so for now we just update // clients to use currentSystemContext() instead. // If any clients need to use getSystemContext() on a non-"current" ActivityThread, we'd need // add another getter with the return type of Context. // // (Class is only partially allow-listed, and this method can't have a ravenwood annotation.) // @android.ravenwood.annotation.RavenwoodThrow( // reason = "ContextImpl is not supported on Ravenwood. You may wan to use " // + " ActivityThread.currentSystemContext() instead") @RavenwoodKeep public ContextImpl getSystemContext() { synchronized (this) { if (mSystemContext == null) { Loading Loading @@ -7672,6 +7707,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") private void handleBindApplication(AppBindData data) { mDdmSyncStageUpdater.next(Stage.Bind); Loading Loading @@ -9095,6 +9131,7 @@ public final class ActivityThread extends ClientTransactionHandler return mCoreSettings; } @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") public static void main(String[] args) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain"); Loading Loading @@ -9236,7 +9273,7 @@ public final class ActivityThread extends ClientTransactionHandler return false; } @RavenwoodIgnore @RavenwoodIgnore(reason = "LoadedApk calls it, but we don't need to keep track of it yet") void addApplication(@NonNull Application app) { mAllApplications.add(app); VMDebug.addApplication(app.mLoadedApk.mPackageName); Loading core/java/android/app/ActivityThread_ravenwood.java +14 −35 Original line number Diff line number Diff line Loading @@ -15,52 +15,31 @@ */ package android.app; import android.content.Context; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; import android.platform.test.ravenwood.RavenwoodAppDriver; import static org.junit.Assert.assertEquals; import java.util.concurrent.Executor; import android.os.Looper; /** * Inject Ravenwood methods to {@link ActivityThread}. * * TODO: Stop using Objensis to instantiate ActivityThread and start using more of the * real code, rather than handling all methods here with @RavenwoodRedirect. * At that point, the initialization logic should be moved from RavenwoodAppDriver to this class. * TODO: Move the initialization logic from {@link RavenwoodAppDriver} to this class. * TODO: Port more initialization logic from {@link ActivityThread}. */ public final class ActivityThread_ravenwood { private ActivityThread_ravenwood() { } /** Backdoor to set ActivityThread's package-private member field. */ public static void setInstrumentation(ActivityThread at, Instrumentation inst) { at.mInstrumentation = inst; } private static final Handler sHandler = new Handler(Looper.getMainLooper()); private static final HandlerExecutor sHandlerExecutor = new HandlerExecutor(sHandler); /** Override the corresponding ActivityThread method. */ public static Context currentSystemContext() { return RavenwoodAppDriver.getInstance().getAndroidAppBridge().getSystemContext(); } /** Override the corresponding ActivityThread method. */ public static Application currentApplication() { return RavenwoodAppDriver.getInstance().getApplication(); } static Looper getLooper(ActivityThread at) { return Looper.getMainLooper(); } /** * Create a new instance, and also set it to sCurrentActivityThread. * @return */ public static ActivityThread createInstance() { // This must be called on the main thread. assertEquals(Looper.getMainLooper().getThread(), Thread.currentThread()); final var at = new ActivityThread(); static Handler getHandler(ActivityThread at) { return sHandler; } ActivityThread.staticInitForRavenwood(at); static Executor getExecutor(ActivityThread at) { return sHandlerExecutor; return at; } } core/java/android/app/ClientTransactionHandler.java +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.os.IBinder; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.util.MergedConfiguration; import android.view.SurfaceControl; import android.window.ActivityWindowInfo; Loading @@ -45,6 +46,7 @@ import java.util.Map; * * @hide */ @RavenwoodKeepWholeClass public abstract class ClientTransactionHandler { private boolean mIsExecutingLocalTransaction; Loading core/java/android/app/ConfigurationChangedListenerController.java +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.os.IBinder; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import com.android.internal.annotations.GuardedBy; Loading @@ -30,6 +31,7 @@ import java.util.function.Consumer; * Manages listeners for unfiltered configuration changes. * @hide */ @RavenwoodKeepWholeClass class ConfigurationChangedListenerController { private final Object mLock = new Object(); Loading core/java/android/app/ContextImpl_ravenwood.java +0 −24 Original line number Diff line number Diff line Loading @@ -15,39 +15,15 @@ */ package android.app; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import android.content.Context; import android.content.pm.PackageManager; import android.os.FileUtils; import android.platform.test.ravenwood.RavenwoodPackageManager; import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public class ContextImpl_ravenwood { private static final String TAG = "ContextImpl_ravenwood"; /** Indicates a {@link Context} is really a {@link ContextImpl}. */ @Target({FIELD, METHOD, PARAMETER}) @Retention(RetentionPolicy.SOURCE) public @interface ReallyContextImpl { } /** Backdoor to a package-private method. */ public static ContextImpl createSystemContext(ActivityThread at) { return ContextImpl.createSystemContext(at); } /** Backdoor to a package-private method. */ public static ContextImpl createAppContext(ActivityThread at, LoadedApk la) { return ContextImpl.createAppContext(at, la); } static PackageManager getPackageManagerInner(ContextImpl contextImpl) { return new RavenwoodPackageManager(contextImpl); } Loading Loading
core/java/android/app/ActivityThread.java +63 −26 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package android.app; import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN; import static android.app.ConfigurationController.createNewConfigAndUpdateIfNotNull; import static android.app.Flags.skipBgMemTrimOnFgApp; import static android.app.Flags.earlyRenderThreadPriorityBoost; import static android.app.Flags.skipBgMemTrimOnFgApp; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.app.servertransaction.ActivityLifecycleItem.ON_CREATE; Loading @@ -45,8 +45,6 @@ import static com.android.internal.os.SafeZipPathValidatorCallback.VALIDATE_ZIP_ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityOptions.SceneTransitionInfo; import android.app.HandoffActivityData; import android.app.HandoffActivityDataRequestInfo; import android.app.RemoteServiceException.BadForegroundServiceNotificationException; import android.app.RemoteServiceException.BadUserInitiatedJobNotificationException; import android.app.RemoteServiceException.CannotPostForegroundServiceNotificationException; Loading Loading @@ -183,7 +181,11 @@ import android.provider.Downloads; import android.provider.FontsContract; import android.provider.Settings; import android.ravenwood.annotation.RavenwoodIgnore; import android.ravenwood.annotation.RavenwoodRedirect; import android.ravenwood.annotation.RavenwoodKeep; import android.ravenwood.annotation.RavenwoodKeepPartialClass; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.ravenwood.annotation.RavenwoodReplace; import android.ravenwood.annotation.RavenwoodThrow; import android.renderscript.RenderScriptCacheDir; import android.se.omapi.SeFrameworkInitializer; import android.se.omapi.SeServiceManager; Loading Loading @@ -303,9 +305,10 @@ import java.util.function.Consumer; * * {@hide} */ @android.ravenwood.annotation.RavenwoodPartiallyAllowlisted @android.ravenwood.annotation.RavenwoodKeepPartialClass( comment = "We use Objenesis to instantiate it. No member fields are initialized." @android.ravenwood.annotation.RavenwoodKeepPartialClass(comment = "Initialization logic is in ActivityThread_ravenwood and RavenwoodAppDriver." + " Only very basic initialization is done." + " Most of its logic is not ported to Ravenwood yet." ) @android.ravenwood.annotation.RavenwoodRedirectionClass("ActivityThread_ravenwood") public final class ActivityThread extends ClientTransactionHandler Loading @@ -313,6 +316,11 @@ public final class ActivityThread extends ClientTransactionHandler private final DdmSyncStageUpdater mDdmSyncStageUpdater = newDdmSyncStageUpdater(); @RavenwoodIgnore private static DdmSyncStageUpdater newDdmSyncStageUpdater() { return new DdmSyncStageUpdater(); } /** @hide */ public static final String TAG = "ActivityThread"; static final boolean localLOGV = false; Loading Loading @@ -522,6 +530,11 @@ public final class ActivityThread extends ClientTransactionHandler // An executor that performs multi-step transactions. private final TransactionExecutor mTransactionExecutor = newTransactionExecutor(this); @RavenwoodIgnore private static TransactionExecutor newTransactionExecutor(ActivityThread at) { return new TransactionExecutor(at); } @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private final ResourcesManager mResourcesManager; Loading Loading @@ -1146,7 +1159,12 @@ public final class ActivityThread extends ClientTransactionHandler int index; } @RavenwoodKeepPartialClass private class ApplicationThread extends IApplicationThread.Stub { @RavenwoodKeep ApplicationThread() { } private static final String DB_CONNECTION_INFO_HEADER = " %8s %8s %14s %5s %5s %5s %s"; private static final String DB_CONNECTION_INFO_FORMAT = " %8s %8s %14s %5d %5d %5d %s"; private static final String DB_POOL_INFO_HEADER = " %13s %13s %13s %s"; Loading Loading @@ -1324,6 +1342,7 @@ public final class ActivityThread extends ClientTransactionHandler } @Override @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") public final void bindApplication( String processName, ApplicationInfo appInfo, Loading Loading @@ -2471,7 +2490,12 @@ public final class ActivityThread extends ClientTransactionHandler throw new ForegroundServiceDidNotStopInTimeException(message, inner); } @RavenwoodKeepPartialClass class H extends Handler { @RavenwoodKeep H() { } public static final int BIND_APPLICATION = 110; @UnsupportedAppUsage public static final int EXIT_APPLICATION = 111; Loading Loading @@ -2965,8 +2989,10 @@ public final class ActivityThread extends ClientTransactionHandler } } @RavenwoodKeepWholeClass(comment = "needed by ActivityThread constructor") final class GcIdler implements MessageQueue.IdleHandler { @Override @RavenwoodIgnore public final boolean queueIdle() { doGcIfNeeded(); purgePendingResources(); Loading @@ -2974,15 +3000,32 @@ public final class ActivityThread extends ClientTransactionHandler } } @RavenwoodKeepWholeClass(comment = "needed by ActivityThread constructor") final class PurgeIdler implements MessageQueue.IdleHandler { @Override @RavenwoodIgnore public boolean queueIdle() { purgePendingResources(); return false; } } /** Backdoor to set private static fields */ @RavenwoodReplace static void staticInitForRavenwood( ActivityThread instance ) { throw new IllegalStateException(); // shouldn't be called on a real device. } static void staticInitForRavenwood$ravenwood( ActivityThread instance ) { sCurrentActivityThread = instance; } @UnsupportedAppUsage @RavenwoodKeep public static ActivityThread currentActivityThread() { return sCurrentActivityThread; } Loading Loading @@ -3018,7 +3061,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @android.ravenwood.annotation.RavenwoodRedirect @RavenwoodKeep public static Application currentApplication() { ActivityThread am = currentActivityThread(); return am != null ? am.mInitialApplication : null; Loading @@ -3028,7 +3071,7 @@ public final class ActivityThread extends ClientTransactionHandler * Same as {@code ActivityThread.currentActivityThread().getSystemContext()}, but * it'll return a {@link Context} (not a {@link ContextImpl}) and is supported on Ravenwood. */ @android.ravenwood.annotation.RavenwoodRedirect @RavenwoodKeep public static Context currentSystemContext() { ActivityThread am = currentActivityThread(); return am != null ? am.getSystemContext() : null; Loading Loading @@ -3067,7 +3110,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodRedirect @RavenwoodKeep public Handler getHandler() { return mH; } Loading Loading @@ -3266,6 +3309,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodKeep ActivityThread() { mResourcesManager = ResourcesManager.getInstance(); } Loading @@ -3290,6 +3334,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodKeep public Instrumentation getInstrumentation() { return mInstrumentation; Loading @@ -3305,12 +3350,12 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodRedirect @RavenwoodKeep public Looper getLooper() { return mLooper; } @RavenwoodRedirect @RavenwoodKeep public Executor getExecutor() { return mExecutor; } Loading @@ -3328,17 +3373,7 @@ public final class ActivityThread extends ClientTransactionHandler @Override @UnsupportedAppUsage // It returns a ContextImpl, which is not supported on Ravenwood yet, and it might never be // supported. We want to change the return type to Context so support it on Ravenwood, // but the @UnsupportedAppUsage prevents us from doing it, so for now we just update // clients to use currentSystemContext() instead. // If any clients need to use getSystemContext() on a non-"current" ActivityThread, we'd need // add another getter with the return type of Context. // // (Class is only partially allow-listed, and this method can't have a ravenwood annotation.) // @android.ravenwood.annotation.RavenwoodThrow( // reason = "ContextImpl is not supported on Ravenwood. You may wan to use " // + " ActivityThread.currentSystemContext() instead") @RavenwoodKeep public ContextImpl getSystemContext() { synchronized (this) { if (mSystemContext == null) { Loading Loading @@ -7672,6 +7707,7 @@ public final class ActivityThread extends ClientTransactionHandler } @UnsupportedAppUsage @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") private void handleBindApplication(AppBindData data) { mDdmSyncStageUpdater.next(Stage.Bind); Loading Loading @@ -9095,6 +9131,7 @@ public final class ActivityThread extends ClientTransactionHandler return mCoreSettings; } @RavenwoodThrow(comment = "See ActivityThread_ravenwood for initialization on Ravenwood") public static void main(String[] args) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain"); Loading Loading @@ -9236,7 +9273,7 @@ public final class ActivityThread extends ClientTransactionHandler return false; } @RavenwoodIgnore @RavenwoodIgnore(reason = "LoadedApk calls it, but we don't need to keep track of it yet") void addApplication(@NonNull Application app) { mAllApplications.add(app); VMDebug.addApplication(app.mLoadedApk.mPackageName); Loading
core/java/android/app/ActivityThread_ravenwood.java +14 −35 Original line number Diff line number Diff line Loading @@ -15,52 +15,31 @@ */ package android.app; import android.content.Context; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; import android.platform.test.ravenwood.RavenwoodAppDriver; import static org.junit.Assert.assertEquals; import java.util.concurrent.Executor; import android.os.Looper; /** * Inject Ravenwood methods to {@link ActivityThread}. * * TODO: Stop using Objensis to instantiate ActivityThread and start using more of the * real code, rather than handling all methods here with @RavenwoodRedirect. * At that point, the initialization logic should be moved from RavenwoodAppDriver to this class. * TODO: Move the initialization logic from {@link RavenwoodAppDriver} to this class. * TODO: Port more initialization logic from {@link ActivityThread}. */ public final class ActivityThread_ravenwood { private ActivityThread_ravenwood() { } /** Backdoor to set ActivityThread's package-private member field. */ public static void setInstrumentation(ActivityThread at, Instrumentation inst) { at.mInstrumentation = inst; } private static final Handler sHandler = new Handler(Looper.getMainLooper()); private static final HandlerExecutor sHandlerExecutor = new HandlerExecutor(sHandler); /** Override the corresponding ActivityThread method. */ public static Context currentSystemContext() { return RavenwoodAppDriver.getInstance().getAndroidAppBridge().getSystemContext(); } /** Override the corresponding ActivityThread method. */ public static Application currentApplication() { return RavenwoodAppDriver.getInstance().getApplication(); } static Looper getLooper(ActivityThread at) { return Looper.getMainLooper(); } /** * Create a new instance, and also set it to sCurrentActivityThread. * @return */ public static ActivityThread createInstance() { // This must be called on the main thread. assertEquals(Looper.getMainLooper().getThread(), Thread.currentThread()); final var at = new ActivityThread(); static Handler getHandler(ActivityThread at) { return sHandler; } ActivityThread.staticInitForRavenwood(at); static Executor getExecutor(ActivityThread at) { return sHandlerExecutor; return at; } }
core/java/android/app/ClientTransactionHandler.java +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.os.IBinder; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.util.MergedConfiguration; import android.view.SurfaceControl; import android.window.ActivityWindowInfo; Loading @@ -45,6 +46,7 @@ import java.util.Map; * * @hide */ @RavenwoodKeepWholeClass public abstract class ClientTransactionHandler { private boolean mIsExecutingLocalTransaction; Loading
core/java/android/app/ConfigurationChangedListenerController.java +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.annotation.NonNull; import android.os.IBinder; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import com.android.internal.annotations.GuardedBy; Loading @@ -30,6 +31,7 @@ import java.util.function.Consumer; * Manages listeners for unfiltered configuration changes. * @hide */ @RavenwoodKeepWholeClass class ConfigurationChangedListenerController { private final Object mLock = new Object(); Loading
core/java/android/app/ContextImpl_ravenwood.java +0 −24 Original line number Diff line number Diff line Loading @@ -15,39 +15,15 @@ */ package android.app; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import android.content.Context; import android.content.pm.PackageManager; import android.os.FileUtils; import android.platform.test.ravenwood.RavenwoodPackageManager; import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public class ContextImpl_ravenwood { private static final String TAG = "ContextImpl_ravenwood"; /** Indicates a {@link Context} is really a {@link ContextImpl}. */ @Target({FIELD, METHOD, PARAMETER}) @Retention(RetentionPolicy.SOURCE) public @interface ReallyContextImpl { } /** Backdoor to a package-private method. */ public static ContextImpl createSystemContext(ActivityThread at) { return ContextImpl.createSystemContext(at); } /** Backdoor to a package-private method. */ public static ContextImpl createAppContext(ActivityThread at, LoadedApk la) { return ContextImpl.createAppContext(at, la); } static PackageManager getPackageManagerInner(ContextImpl contextImpl) { return new RavenwoodPackageManager(contextImpl); } Loading