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

Commit 4951f9d6 authored by Chong Zhang's avatar Chong Zhang
Browse files

Do not send unhandled system config changes to app

If the config change is system-level and the app doesn't handle
it, it will definitely get relaunched and we don't need to call
onConfigurationChanged.

bug: 29367672
Change-Id: I3193d4b63d316295c9e73d42d000ab4eb5c1a6ad
parent 4504b0e4
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -236,6 +236,7 @@ public final class ActivityThread {
    boolean mSystemThread = false;
    boolean mJitEnabled = false;
    boolean mSomeActivitiesChanged = false;
    boolean mUpdatingSystemConfig = false;

    // These can be accessed by multiple threads; mPackages is the lock.
    // XXX For now we keep around information about all packages we have
@@ -1574,7 +1575,9 @@ public final class ActivityThread {
                case CONFIGURATION_CHANGED:
                    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "configChanged");
                    mCurDefaultDisplayDpi = ((Configuration)msg.obj).densityDpi;
                    mUpdatingSystemConfig = true;
                    handleConfigurationChanged((Configuration)msg.obj, null);
                    mUpdatingSystemConfig = false;
                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                    break;
                case CLEAN_UP_CONTEXT:
@@ -4629,9 +4632,16 @@ public final class ActivityThread {
            // onConfigurationChanged
            int diff = activity.mCurrentConfig.diff(newConfig);
            if (diff != 0) {
                // Always send the task-level config changes. For system-level configuration, if
                // this activity doesn't handle any of the config changes, then don't bother
                // calling onConfigurationChanged as we're going to destroy it.
                if (!mUpdatingSystemConfig
                        || (~activity.mActivityInfo.getRealConfigChanged() & diff) == 0
                        || !reportToActivity) {
                    shouldChangeConfig = true;
                }
            }
        }

        if (shouldChangeConfig) {
            // Propagate the configuration change to the Activity and ResourcesManager.