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

Commit 360ec033 authored by Alex Chau's avatar Alex Chau
Browse files

Use WindowManagerProxy.getRotation to determine if rotation has changed

- Follow-up of http://ag/19559863 as Config diff on windowConfiguration does not work on 3P Launcher, so diff WindowManagerProxy.getRotation instead
- Also centralized Configuration diff logic into StatefulActivity

Bug: 240730723
Test: manual on 90/180 degree rotation in Launcher, RecentsActivity and 3P Launcher
Change-Id: Ib368ed5d749841a6873a03e2644608ff68885922
parent 92b4a88f
Loading
Loading
Loading
Loading
+0 −18
Original line number Diff line number Diff line
@@ -15,9 +15,6 @@
 */
package com.android.launcher3;

import static android.app.WindowConfiguration.WINDOW_CONFIG_ROTATION;
import static android.content.pm.ActivityInfo.CONFIG_WINDOW_CONFIGURATION;

import static com.android.launcher3.AbstractFloatingView.TYPE_ALL;
import static com.android.launcher3.AbstractFloatingView.TYPE_HIDE_BACK_BUTTON;
import static com.android.launcher3.LauncherState.FLAG_HIDE_BACK_BUTTON;
@@ -46,7 +43,6 @@ import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.res.Configuration;
import android.hardware.SensorManager;
import android.hardware.devicestate.DeviceStateManager;
import android.os.Bundle;
@@ -653,20 +649,6 @@ public abstract class BaseQuickstepLauncher extends Launcher {
        }
    }

    @Override
    protected boolean compareConfiguration(Configuration oldConfig, Configuration newConfig) {
        int diff = newConfig.diff(oldConfig);
        if ((diff & CONFIG_WINDOW_CONFIGURATION) != 0) {
            long windowDiff =
                    newConfig.windowConfiguration.diff(oldConfig.windowConfiguration, false);
            if ((windowDiff & WINDOW_CONFIG_ROTATION) != 0) {
                return true;
            }
        }

        return super.compareConfiguration(oldConfig, newConfig);
    }

    @Override
    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
        super.dump(prefix, fd, writer, args);
+3 −34
Original line number Diff line number Diff line
@@ -15,11 +15,6 @@
 */
package com.android.quickstep;

import static android.app.WindowConfiguration.WINDOW_CONFIG_ROTATION;
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
import static android.content.pm.ActivityInfo.CONFIG_WINDOW_CONFIGURATION;

import static com.android.launcher3.QuickstepTransitionManager.RECENTS_LAUNCH_DURATION;
import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_DURATION;
import static com.android.launcher3.QuickstepTransitionManager.STATUS_BAR_TRANSITION_PRE_DELAY;
@@ -112,8 +107,6 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
    private @Nullable TaskbarManager mTaskbarManager;
    private @Nullable FallbackTaskbarUIController mTaskbarUIController;

    private Configuration mOldConfig;

    private StateManager<RecentsState> mStateManager;

    // Strong refs to runners which are cleared when the activity is destroyed
@@ -165,7 +158,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {

    @Override
    public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) {
        onHandleConfigChanged();
        onHandleConfigurationChanged();
        super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig);
    }

@@ -175,11 +168,8 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
        ACTIVITY_TRACKER.handleNewIntent(this);
    }

    /**
         * Logic for when device configuration changes (rotation, screen size change, multi-window,
         * etc.)
         */
    protected void onHandleConfigChanged() {
    @Override
    protected void onHandleConfigurationChanged() {
        initDeviceProfile();

        AbstractFloatingView.closeOpenViews(this, true,
@@ -340,7 +330,6 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {

        mStateManager = new StateManager<>(this, RecentsState.BG_LAUNCHER);

        mOldConfig = new Configuration(getResources().getConfiguration());
        initDeviceProfile();
        setupViews();

@@ -349,26 +338,6 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
        ACTIVITY_TRACKER.handleCreate(this);
    }

    @Override
    public void handleConfigurationChanged(Configuration newConfig) {
        if (compareConfiguration(mOldConfig, newConfig)) {
            onHandleConfigChanged();
        }
        mOldConfig.setTo(newConfig);
        super.handleConfigurationChanged(newConfig);
    }

    private boolean compareConfiguration(Configuration oldConfig, Configuration newConfig) {
        int diff = newConfig.diff(oldConfig);
        if ((diff & CONFIG_WINDOW_CONFIGURATION) != 0) {
            long windowDiff =
                    newConfig.windowConfiguration.diff(oldConfig.windowConfiguration, false);
            return (windowDiff & WINDOW_CONFIG_ROTATION) != 0;
        }

        return (diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0;
    }

    @Override
    public void onStateSetEnd(RecentsState state) {
        super.onStateSetEnd(state);
+5 −20
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.launcher3;

import static android.app.PendingIntent.FLAG_IMMUTABLE;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
import static android.content.pm.ActivityInfo.CONFIG_UI_MODE;
import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO;
import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
@@ -310,8 +308,6 @@ public class Launcher extends StatefulActivity<LauncherState>
    private static final FloatProperty<Hotseat> HOTSEAT_WIDGET_SCALE =
            HOTSEAT_SCALE_PROPERTY_FACTORY.get(SCALE_INDEX_WIDGET_TRANSITION);

    private Configuration mOldConfig;

    @Thunk
    Workspace<?> mWorkspace;
    @Thunk
@@ -466,7 +462,6 @@ public class Launcher extends StatefulActivity<LauncherState>
        super.onCreate(savedInstanceState);

        LauncherAppState app = LauncherAppState.getInstance(this);
        mOldConfig = new Configuration(getResources().getConfiguration());
        mModel = app.getModel();

        mRotationHelper = new RotationHelper(this);
@@ -614,21 +609,6 @@ public class Launcher extends StatefulActivity<LauncherState>
        dispatchDeviceProfileChanged();
    }

    @Override
    public void handleConfigurationChanged(Configuration newConfig) {
        if (compareConfiguration(mOldConfig, newConfig)) {
            onIdpChanged(false);
        }

        mOldConfig.setTo(newConfig);
        super.handleConfigurationChanged(newConfig);
    }

    protected boolean compareConfiguration(Configuration oldConfig, Configuration newConfig) {
        int diff = newConfig.diff(oldConfig);
        return (diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0;
    }

    /**
     * Initializes the drag controller.
     */
@@ -638,6 +618,11 @@ public class Launcher extends StatefulActivity<LauncherState>

    @Override
    public void onIdpChanged(boolean modelPropertiesChanged) {
        onHandleConfigurationChanged();
    }

    @Override
    protected void onHandleConfigurationChanged() {
        if (!initDeviceProfile(mDeviceProfile.inv)) {
            return;
        }
+33 −1
Original line number Diff line number Diff line
@@ -15,10 +15,14 @@
 */
package com.android.launcher3.statemanager;

import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;

import static com.android.launcher3.LauncherState.FLAG_CLOSE_POPUPS;
import static com.android.launcher3.LauncherState.FLAG_NON_INTERACTIVE;

import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,6 +35,7 @@ import com.android.launcher3.LauncherRootView;
import com.android.launcher3.Utilities;
import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.statemanager.StateManager.StateHandler;
import com.android.launcher3.util.window.WindowManagerProxy;
import com.android.launcher3.views.BaseDragLayer;

import java.util.List;
@@ -48,6 +53,17 @@ public abstract class StatefulActivity<STATE_TYPE extends BaseState<STATE_TYPE>>

    private LauncherRootView mRootView;

    protected Configuration mOldConfig;
    private int mOldRotation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mOldConfig = new Configuration(getResources().getConfiguration());
        mOldRotation = WindowManagerProxy.INSTANCE.get(this).getRotation(this);
    }

    /**
     * Create handlers to control the property changes for this activity
     */
@@ -198,5 +214,21 @@ public abstract class StatefulActivity<STATE_TYPE extends BaseState<STATE_TYPE>>
     * Handles configuration change when system calls {@link #onConfigurationChanged}, or on other
     * situations that configuration might change.
     */
    public void handleConfigurationChanged(Configuration newConfig) {}
    public void handleConfigurationChanged(Configuration newConfig) {
        int diff = newConfig.diff(mOldConfig);
        int rotation = WindowManagerProxy.INSTANCE.get(this).getRotation(this);
        if ((diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0
                || rotation != mOldRotation) {
            onHandleConfigurationChanged();
        }

        mOldConfig.setTo(newConfig);
        mOldRotation = rotation;
    }

    /**
     * Logic for when device configuration changes (rotation, screen size change, multi-window,
     * etc.)
     */
    protected abstract void onHandleConfigurationChanged();
}