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

Commit 921a411b authored by Darryl Johnson's avatar Darryl Johnson
Browse files

Revert "Defer triggering notifyLidSwitchChanged() until the system is ready."

This reverts commit 31c9c8d9.

Bug: 179498407
Bug: 175558819
Reason for revert: Possible cause of mem regression b/175558819

Change-Id: Ie72a06a56186e32d0db63bc44e7331d6bd912890
parent 2d16f0aa
Loading
Loading
Loading
Loading
+15 −32
Original line number Diff line number Diff line
@@ -222,12 +222,7 @@ public class InputManagerService extends IInputManager.Stub
    private int mNextVibratorTokenValue;

    // State for lid switch
    // Lock for the lid switch state. Held when triggering callbacks to guarantee lid switch events
    // are delivered in order. For ex, when a new lid switch callback is registered the lock is held
    // while the callback is processing the initial lid switch event which guarantees that any
    // events that occur at the same time are delivered after the callback has returned.
    private final Object mLidSwitchLock = new Object();
    @GuardedBy("mLidSwitchLock")
    private List<LidSwitchCallback> mLidSwitchCallbacks = new ArrayList<>();

    // State for the currently installed input filter.
@@ -375,6 +370,9 @@ public class InputManagerService extends IInputManager.Stub
    public static final int SW_CAMERA_LENS_COVER_BIT = 1 << SW_CAMERA_LENS_COVER;
    public static final int SW_MUTE_DEVICE_BIT = 1 << SW_MUTE_DEVICE;

    /** Indicates an open state for the lid switch. */
    public static final int SW_STATE_LID_OPEN = 0;

    /** Whether to use the dev/input/event or uevent subsystem for the audio jack. */
    final boolean mUseDevInputEventForAudioJack;

@@ -410,18 +408,13 @@ public class InputManagerService extends IInputManager.Stub
    }

    void registerLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) {
        boolean lidOpen;
        synchronized (mLidSwitchLock) {
            mLidSwitchCallbacks.add(callback);

            // Skip triggering the initial callback if the system is not yet ready as the switch
            // state will be reported as KEY_STATE_UNKNOWN. The callback will be triggered in
            // systemRunning().
            if (mSystemReady) {
                boolean lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID)
                        == KEY_STATE_UP;
                callback.notifyLidSwitchChanged(0 /* whenNanos */, lidOpen);
            }
            lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID)
                    == SW_STATE_LID_OPEN;
        }
        callback.notifyLidSwitchChanged(0 /* whenNanos */, lidOpen);
    }

    void unregisterLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) {
@@ -469,19 +462,8 @@ public class InputManagerService extends IInputManager.Stub
        }
        mNotificationManager = (NotificationManager)mContext.getSystemService(
                Context.NOTIFICATION_SERVICE);

        synchronized (mLidSwitchLock) {
        mSystemReady = true;

            // Send the initial lid switch state to any callback registered before the system was
            // ready.
            int switchState = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID);
            for (int i = 0; i < mLidSwitchCallbacks.size(); i++) {
                LidSwitchCallback callback = mLidSwitchCallbacks.get(i);
                callback.notifyLidSwitchChanged(0 /* whenNanos */, switchState == KEY_STATE_UP);
            }
        }

        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
@@ -2251,13 +2233,14 @@ public class InputManagerService extends IInputManager.Stub

        if ((switchMask & SW_LID_BIT) != 0) {
            final boolean lidOpen = ((switchValues & SW_LID_BIT) == 0);

            ArrayList<LidSwitchCallback> callbacksCopy;
            synchronized (mLidSwitchLock) {
                if (mSystemReady) {
                    for (int i = 0; i < mLidSwitchCallbacks.size(); i++) {
                        LidSwitchCallback callbacks = mLidSwitchCallbacks.get(i);
                        callbacks.notifyLidSwitchChanged(whenNanos, lidOpen);
                    }
                callbacksCopy = new ArrayList<>(mLidSwitchCallbacks);
            }
            for (int i = 0; i < callbacksCopy.size(); i++) {
                LidSwitchCallback callbacks = callbacksCopy.get(i);
                callbacks.notifyLidSwitchChanged(whenNanos, lidOpen);
            }
        }