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

Commit 701214b2 authored by Andrii Kulian's avatar Andrii Kulian
Browse files

Fix multiple configuration changes in multiwindow

When in split-screen mode and activity handles configuration changes
it gets 2 onConfigurationChanged calls which originate from
ActivityManagerService#updateConfigurationLocked:
1. app.thread.scheduleConfigurationChanged calls to all process records
   send configuration of the whole screen for corresponding orientation,
   which leads to CONFIGURATION_CHANGED message in ActivityThread.
2. mStackSupervisor.resizeStackLocked call resizes both visible stacks and
   eventually ActivityThread receives ACTIVITY_CONFIGURATION_CHANGED
   message with correct configuration corresponding to space occupied in
   split-screen.

In this CL if component callback is an instance of Activity and it had
override config set - onConfigurationChanged will not be triggered unless
override config has changed.

Bug: 27948331
Change-Id: Ia73b045570b44eb5b351811bf6c4f63d78c3f909
parent b4e39f5b
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -4727,8 +4727,16 @@ public final class ActivityThread {
        if (callbacks != null) {
            final int N = callbacks.size();
            for (int i=0; i<N; i++) {
                performConfigurationChanged(callbacks.get(i), null, config, null,
                        REPORT_TO_ACTIVITY);
                ComponentCallbacks2 cb = callbacks.get(i);
                if (cb instanceof Activity) {
                    // If callback is an Activity - call corresponding method to consider override
                    // config and avoid onConfigurationChanged if it hasn't changed.
                    Activity a = (Activity) cb;
                    performConfigurationChangedForActivity(mActivities.get(a.getActivityToken()),
                            config, REPORT_TO_ACTIVITY);
                } else {
                    performConfigurationChanged(cb, null, config, null, REPORT_TO_ACTIVITY);
                }
            }
        }
    }