Skip to content

Commit 21c4131

Browse files
[java-runtime, Mono.Android] Use ApplicationRegistration.Context (#9779)
Context: #9747 Calling `Android.App.Application.Context` currently reads the `mono.MonoPackageManager.Context` field, which is set on startup by a `ContentProvider`. `mono.MonoPackageManager` does not exist in NativeAOT (#9747), so let's move the field to the `ApplicationRegistration` type, which *does* exist.
1 parent aa0485f commit 21c4131

File tree

5 files changed

+13
-6
lines changed

5 files changed

+13
-6
lines changed

samples/NativeAOT/NativeAotRuntimeProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.dot.jni.nativeaot;
22

33
import android.util.Log;
4+
import net.dot.android.ApplicationRegistration;
45

56
public class NativeAotRuntimeProvider
67
extends android.content.ContentProvider
@@ -20,9 +21,12 @@ public boolean onCreate() {
2021
@Override
2122
public void attachInfo(android.content.Context context, android.content.pm.ProviderInfo info) {
2223
Log.d(TAG, "NativeAotRuntimeProvider.attachInfo(): calling JavaInteropRuntime.init()…");
24+
if (context instanceof android.app.Application) {
25+
ApplicationRegistration.Context = context;
26+
}
2327
JavaInteropRuntime.init();
2428
// NOTE: only required for custom applications
25-
net.dot.android.ApplicationRegistration.registerApplications();
29+
ApplicationRegistration.registerApplications();
2630
super.attachInfo (context, info);
2731
}
2832

src/Mono.Android/Android.App/Application.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public static Context Context {
1414
if (_context != null)
1515
return _context;
1616

17-
IntPtr klass = JNIEnv.FindClass ("mono/MonoPackageManager");
17+
IntPtr klass = JNIEnv.FindClass ("net/dot/android/ApplicationRegistration");
1818
try {
1919
IntPtr field = JNIEnv.GetStaticFieldID (klass, "Context", "Landroid/content/Context;");
2020
IntPtr lref = JNIEnv.GetStaticObjectField (klass, field);

src/Xamarin.Android.Build.Tasks/Resources/ApplicationRegistration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
public class ApplicationRegistration {
44

5+
public static android.content.Context Context;
6+
57
public static void registerApplications ()
68
{
79
// REGISTER_APPLICATION_AND_INSTRUMENTATION_CLASSES_HERE

src/java-runtime/java/mono/android/MonoPackageManager.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,13 @@
1818
import mono.android.Runtime;
1919
import mono.android.DebugRuntime;
2020
import mono.android.BuildConfig;
21+
import net.dot.android.ApplicationRegistration;
2122

2223
public class MonoPackageManager {
2324

2425
static Object lock = new Object ();
2526
static boolean initialized;
2627

27-
static android.content.Context Context;
28-
2928
public static void LoadApplication (Context context)
3029
{
3130
synchronized (lock) {
@@ -41,7 +40,7 @@ public static void LoadApplication (Context context)
4140
}
4241

4342
if (context instanceof android.app.Application) {
44-
Context = context;
43+
ApplicationRegistration.Context = context;
4544
}
4645
if (!initialized) {
4746
android.content.IntentFilter timezoneChangedFilter = new android.content.IntentFilter (
@@ -129,7 +128,7 @@ public static void LoadApplication (Context context)
129128
haveSplitApks
130129
);
131130

132-
net.dot.android.ApplicationRegistration.registerApplications ();
131+
ApplicationRegistration.registerApplications ();
133132

134133
initialized = true;
135134
}

src/java-runtime/java/net/dot/android/ApplicationRegistration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
public class ApplicationRegistration {
44

5+
public static android.content.Context Context;
6+
57
public static void registerApplications ()
68
{
79
// REGISTER_APPLICATION_AND_INSTRUMENTATION_CLASSES_HERE

0 commit comments

Comments
 (0)