Loading services/core/java/com/android/server/input/InputManagerService.java +32 −15 Original line number Diff line number Diff line Loading @@ -249,7 +249,12 @@ public class InputManagerService extends IInputManager.Stub new ArrayMap<IBinder, LightSession>(); // 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. Loading Loading @@ -403,9 +408,6 @@ 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; Loading Loading @@ -441,14 +443,19 @@ public class InputManagerService extends IInputManager.Stub } void registerLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { boolean lidOpen; synchronized (mLidSwitchLock) { mLidSwitchCallbacks.add(callback); lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID) == SW_STATE_LID_OPEN; } // 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); } } } void unregisterLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { synchronized (mLidSwitchLock) { Loading Loading @@ -495,8 +502,19 @@ 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); Loading Loading @@ -2540,16 +2558,15 @@ 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) { callbacksCopy = new ArrayList<>(mLidSwitchCallbacks); } for (int i = 0; i < callbacksCopy.size(); i++) { LidSwitchCallback callbacks = callbacksCopy.get(i); if (mSystemReady) { for (int i = 0; i < mLidSwitchCallbacks.size(); i++) { LidSwitchCallback callbacks = mLidSwitchCallbacks.get(i); callbacks.notifyLidSwitchChanged(whenNanos, lidOpen); } } } } if ((switchMask & SW_CAMERA_LENS_COVER_BIT) != 0) { final boolean lensCovered = ((switchValues & SW_CAMERA_LENS_COVER_BIT) != 0); Loading Loading
services/core/java/com/android/server/input/InputManagerService.java +32 −15 Original line number Diff line number Diff line Loading @@ -249,7 +249,12 @@ public class InputManagerService extends IInputManager.Stub new ArrayMap<IBinder, LightSession>(); // 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. Loading Loading @@ -403,9 +408,6 @@ 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; Loading Loading @@ -441,14 +443,19 @@ public class InputManagerService extends IInputManager.Stub } void registerLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { boolean lidOpen; synchronized (mLidSwitchLock) { mLidSwitchCallbacks.add(callback); lidOpen = getSwitchState(-1 /* deviceId */, InputDevice.SOURCE_ANY, SW_LID) == SW_STATE_LID_OPEN; } // 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); } } } void unregisterLidSwitchCallbackInternal(@NonNull LidSwitchCallback callback) { synchronized (mLidSwitchLock) { Loading Loading @@ -495,8 +502,19 @@ 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); Loading Loading @@ -2540,16 +2558,15 @@ 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) { callbacksCopy = new ArrayList<>(mLidSwitchCallbacks); } for (int i = 0; i < callbacksCopy.size(); i++) { LidSwitchCallback callbacks = callbacksCopy.get(i); if (mSystemReady) { for (int i = 0; i < mLidSwitchCallbacks.size(); i++) { LidSwitchCallback callbacks = mLidSwitchCallbacks.get(i); callbacks.notifyLidSwitchChanged(whenNanos, lidOpen); } } } } if ((switchMask & SW_CAMERA_LENS_COVER_BIT) != 0) { final boolean lensCovered = ((switchValues & SW_CAMERA_LENS_COVER_BIT) != 0); Loading