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

Commit 571c3f6e authored by Kurt Nelson's avatar Kurt Nelson
Browse files

Version guard Application.onCreate strict mode fix

In I30b3eafa4a833fc42d0a938da9446007ade80480 we fixed an outstanding bug
around clobbering strict mode in Application.onCreate and allowing disk
writes to go unreported.

This guards that fix to only take effect once an app targets > SDK 26
and applies a ThreadPolicy inside Application.onCreate.

Bug: 63436909
Test: Ran apps with violations
Change-Id: Ib0ac1626e2ef322c4e61bbdf493d1f724b08652d
parent e5ae77c6
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -5718,6 +5718,7 @@ public final class ActivityThread {
        // probably end up doing the same disk access.
        Application app;
        final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskWrites();
        final StrictMode.ThreadPolicy writesAllowedPolicy = StrictMode.getThreadPolicy();
        try {
            // If the app is being launched for full backup or restore, bring it up in
            // a restricted environment with the base application class.
@@ -5745,10 +5746,6 @@ public final class ActivityThread {
                    "Exception thrown in onCreate() of "
                    + data.instrumentationName + ": " + e.toString(), e);
            }
        } finally {
            StrictMode.setThreadPolicy(savedPolicy);
        }

            try {
                mInstrumentation.callApplicationOnCreate(app);
            } catch (Exception e) {
@@ -5758,6 +5755,14 @@ public final class ActivityThread {
                      + ": " + e.toString(), e);
                }
            }
        } finally {
            // If the app targets < O-MR1, or doesn't change the thread policy
            // during startup, clobber the policy to maintain behavior of b/36951662
            if (data.appInfo.targetSdkVersion <= Build.VERSION_CODES.O
                    || StrictMode.getThreadPolicy().equals(writesAllowedPolicy)) {
                StrictMode.setThreadPolicy(savedPolicy);
            }
        }

        // Preload fonts resources
        FontsContract.setApplicationContextForResources(appContext);