Loading core/java/android/hardware/input/InputManager.java +2 −106 Original line number Diff line number Diff line Loading @@ -44,8 +44,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.IVibratorStateListener; import android.os.InputEventInjectionSync; import android.os.Looper; import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; Loading @@ -68,7 +66,6 @@ import android.view.inputmethod.InputMethodSubtype; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -108,12 +105,6 @@ public final class InputManager { @Nullable private Boolean mIsStylusPointerIconEnabled = null; // Guarded by mTabletModeLock private final Object mTabletModeLock = new Object(); @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) private TabletModeChangedListener mTabletModeChangedListener; private ArrayList<OnTabletModeChangedListenerDelegate> mOnTabletModeChangedListeners; private final Object mBatteryListenersLock = new Object(); // Maps a deviceId whose battery is currently being monitored to an entry containing the // registered listeners for that device. Loading Loading @@ -521,20 +512,7 @@ public final class InputManager { */ public void registerOnTabletModeChangedListener( OnTabletModeChangedListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mTabletModeLock) { if (mOnTabletModeChangedListeners == null) { initializeTabletModeListenerLocked(); } int idx = findOnTabletModeChangedListenerLocked(listener); if (idx < 0) { OnTabletModeChangedListenerDelegate d = new OnTabletModeChangedListenerDelegate(listener, handler); mOnTabletModeChangedListeners.add(d); } } mGlobal.registerOnTabletModeChangedListener(listener, handler); } /** Loading @@ -544,37 +522,7 @@ public final class InputManager { * @hide */ public void unregisterOnTabletModeChangedListener(OnTabletModeChangedListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mTabletModeLock) { int idx = findOnTabletModeChangedListenerLocked(listener); if (idx >= 0) { OnTabletModeChangedListenerDelegate d = mOnTabletModeChangedListeners.remove(idx); d.removeCallbacksAndMessages(null); } } } private void initializeTabletModeListenerLocked() { final TabletModeChangedListener listener = new TabletModeChangedListener(); try { mIm.registerTabletModeChangedListener(listener); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } mTabletModeChangedListener = listener; mOnTabletModeChangedListeners = new ArrayList<>(); } private int findOnTabletModeChangedListenerLocked(OnTabletModeChangedListener listener) { final int N = mOnTabletModeChangedListeners.size(); for (int i = 0; i < N; i++) { if (mOnTabletModeChangedListeners.get(i).mListener == listener) { return i; } } return -1; mGlobal.unregisterOnTabletModeChangedListener(listener); } /** Loading Loading @@ -1449,21 +1397,6 @@ public final class InputManager { return mGlobal.getHostUsiVersion(display); } private void onTabletModeChanged(long whenNanos, boolean inTabletMode) { if (DEBUG) { Log.d(TAG, "Received tablet mode changed: " + "whenNanos=" + whenNanos + ", inTabletMode=" + inTabletMode); } synchronized (mTabletModeLock) { final int numListeners = mOnTabletModeChangedListeners.size(); for (int i = 0; i < numListeners; i++) { OnTabletModeChangedListenerDelegate listener = mOnTabletModeChangedListeners.get(i); listener.sendTabletModeChanged(whenNanos, inTabletMode); } } } /** * Returns the Bluetooth address of this input device, if known. * Loading Loading @@ -1997,43 +1930,6 @@ public final class InputManager { int deviceId, @NonNull KeyboardBacklightState state, boolean isTriggeredByKeyPress); } private final class TabletModeChangedListener extends ITabletModeChangedListener.Stub { @Override public void onTabletModeChanged(long whenNanos, boolean inTabletMode) { InputManager.this.onTabletModeChanged(whenNanos, inTabletMode); } } private static final class OnTabletModeChangedListenerDelegate extends Handler { private static final int MSG_TABLET_MODE_CHANGED = 0; public final OnTabletModeChangedListener mListener; public OnTabletModeChangedListenerDelegate( OnTabletModeChangedListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); mListener = listener; } public void sendTabletModeChanged(long whenNanos, boolean inTabletMode) { SomeArgs args = SomeArgs.obtain(); args.argi1 = (int) whenNanos; args.argi2 = (int) (whenNanos >> 32); args.arg1 = inTabletMode; obtainMessage(MSG_TABLET_MODE_CHANGED, args).sendToTarget(); } @Override public void handleMessage(Message msg) { if (msg.what == MSG_TABLET_MODE_CHANGED) { SomeArgs args = (SomeArgs) msg.obj; long whenNanos = (args.argi1 & 0xFFFFFFFFL) | ((long) args.argi2 << 32); boolean inTabletMode = (boolean) args.arg1; mListener.onTabletModeChanged(whenNanos, inTabletMode); } } } // Implementation of the android.hardware.BatteryState interface used to report the battery // state via the InputDevice#getBatteryState() and InputDeviceBatteryListener interfaces. private static final class LocalBatteryState extends BatteryState { Loading core/java/android/hardware/input/InputManagerGlobal.java +127 −9 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.input.InputManager.InputDeviceListener; import android.hardware.input.InputManager.OnTabletModeChangedListener; import android.os.Handler; import android.os.IBinder; import android.os.Looper; Loading @@ -32,6 +33,7 @@ import android.view.Display; import android.view.InputDevice; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.SomeArgs; import java.util.ArrayList; import java.util.Objects; Loading @@ -48,10 +50,6 @@ public final class InputManagerGlobal { // (requires restart) private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int MSG_DEVICE_ADDED = 1; private static final int MSG_DEVICE_REMOVED = 2; private static final int MSG_DEVICE_CHANGED = 3; @GuardedBy("mInputDeviceListeners") @Nullable private SparseArray<InputDevice> mInputDevices; @GuardedBy("mInputDeviceListeners") Loading @@ -59,6 +57,10 @@ public final class InputManagerGlobal { @GuardedBy("mInputDeviceListeners") private final ArrayList<InputDeviceListenerDelegate> mInputDeviceListeners = new ArrayList<>(); @GuardedBy("mOnTabletModeChangedListeners") private final ArrayList<OnTabletModeChangedListenerDelegate> mOnTabletModeChangedListeners = new ArrayList<>(); private static InputManagerGlobal sInstance; private final IInputManager mIm; Loading Loading @@ -186,7 +188,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device removed: " + deviceId); } mInputDevices.removeAt(i); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_REMOVED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_REMOVED, deviceId); } } Loading @@ -202,7 +205,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device changed: " + deviceId); } mInputDevices.setValueAt(index, null); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_CHANGED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_CHANGED, deviceId); } } } else { Loading @@ -210,7 +214,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device added: " + deviceId); } mInputDevices.put(deviceId, null); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_ADDED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_ADDED, deviceId); } } } Loading @@ -218,6 +223,9 @@ public final class InputManagerGlobal { private static final class InputDeviceListenerDelegate extends Handler { public final InputDeviceListener mListener; static final int MSG_DEVICE_ADDED = 1; static final int MSG_DEVICE_REMOVED = 2; static final int MSG_DEVICE_CHANGED = 3; InputDeviceListenerDelegate(InputDeviceListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); Loading Loading @@ -261,7 +269,7 @@ public final class InputManagerGlobal { /** * @see InputManager#registerInputDeviceListener */ public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } Loading @@ -278,7 +286,7 @@ public final class InputManagerGlobal { /** * @see InputManager#unregisterInputDeviceListener */ public void unregisterInputDeviceListener(InputDeviceListener listener) { void unregisterInputDeviceListener(InputDeviceListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } Loading Loading @@ -385,4 +393,114 @@ public final class InputManagerGlobal { throw e.rethrowFromSystemServer(); } } private void onTabletModeChanged(long whenNanos, boolean inTabletMode) { if (DEBUG) { Log.d(TAG, "Received tablet mode changed: " + "whenNanos=" + whenNanos + ", inTabletMode=" + inTabletMode); } synchronized (mOnTabletModeChangedListeners) { final int numListeners = mOnTabletModeChangedListeners.size(); for (int i = 0; i < numListeners; i++) { OnTabletModeChangedListenerDelegate listener = mOnTabletModeChangedListeners.get(i); listener.sendTabletModeChanged(whenNanos, inTabletMode); } } } private final class TabletModeChangedListener extends ITabletModeChangedListener.Stub { @Override public void onTabletModeChanged(long whenNanos, boolean inTabletMode) { InputManagerGlobal.this.onTabletModeChanged(whenNanos, inTabletMode); } } private static final class OnTabletModeChangedListenerDelegate extends Handler { private static final int MSG_TABLET_MODE_CHANGED = 0; public final OnTabletModeChangedListener mListener; OnTabletModeChangedListenerDelegate( OnTabletModeChangedListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); mListener = listener; } public void sendTabletModeChanged(long whenNanos, boolean inTabletMode) { SomeArgs args = SomeArgs.obtain(); args.argi1 = (int) whenNanos; args.argi2 = (int) (whenNanos >> 32); args.arg1 = inTabletMode; obtainMessage(MSG_TABLET_MODE_CHANGED, args).sendToTarget(); } @Override public void handleMessage(Message msg) { if (msg.what == MSG_TABLET_MODE_CHANGED) { SomeArgs args = (SomeArgs) msg.obj; long whenNanos = (args.argi1 & 0xFFFFFFFFL) | ((long) args.argi2 << 32); boolean inTabletMode = (boolean) args.arg1; mListener.onTabletModeChanged(whenNanos, inTabletMode); } } } /** * @see InputManager#registerInputDeviceListener(InputDeviceListener, Handler) */ void registerOnTabletModeChangedListener( OnTabletModeChangedListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mOnTabletModeChangedListeners) { if (mOnTabletModeChangedListeners == null) { initializeTabletModeListenerLocked(); } int idx = findOnTabletModeChangedListenerLocked(listener); if (idx < 0) { OnTabletModeChangedListenerDelegate d = new OnTabletModeChangedListenerDelegate(listener, handler); mOnTabletModeChangedListeners.add(d); } } } /** * @see InputManager#unregisterOnTabletModeChangedListener(OnTabletModeChangedListener) */ void unregisterOnTabletModeChangedListener(OnTabletModeChangedListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mOnTabletModeChangedListeners) { int idx = findOnTabletModeChangedListenerLocked(listener); if (idx >= 0) { OnTabletModeChangedListenerDelegate d = mOnTabletModeChangedListeners.remove(idx); d.removeCallbacksAndMessages(null); } } } @GuardedBy("mOnTabletModeChangedListeners") private void initializeTabletModeListenerLocked() { final TabletModeChangedListener listener = new TabletModeChangedListener(); try { mIm.registerTabletModeChangedListener(listener); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } } @GuardedBy("mOnTabletModeChangedListeners") private int findOnTabletModeChangedListenerLocked(OnTabletModeChangedListener listener) { final int n = mOnTabletModeChangedListeners.size(); for (int i = 0; i < n; i++) { if (mOnTabletModeChangedListeners.get(i).mListener == listener) { return i; } } return -1; } } Loading
core/java/android/hardware/input/InputManager.java +2 −106 Original line number Diff line number Diff line Loading @@ -44,8 +44,6 @@ import android.os.Handler; import android.os.IBinder; import android.os.IVibratorStateListener; import android.os.InputEventInjectionSync; import android.os.Looper; import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; Loading @@ -68,7 +66,6 @@ import android.view.inputmethod.InputMethodSubtype; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; Loading Loading @@ -108,12 +105,6 @@ public final class InputManager { @Nullable private Boolean mIsStylusPointerIconEnabled = null; // Guarded by mTabletModeLock private final Object mTabletModeLock = new Object(); @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) private TabletModeChangedListener mTabletModeChangedListener; private ArrayList<OnTabletModeChangedListenerDelegate> mOnTabletModeChangedListeners; private final Object mBatteryListenersLock = new Object(); // Maps a deviceId whose battery is currently being monitored to an entry containing the // registered listeners for that device. Loading Loading @@ -521,20 +512,7 @@ public final class InputManager { */ public void registerOnTabletModeChangedListener( OnTabletModeChangedListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mTabletModeLock) { if (mOnTabletModeChangedListeners == null) { initializeTabletModeListenerLocked(); } int idx = findOnTabletModeChangedListenerLocked(listener); if (idx < 0) { OnTabletModeChangedListenerDelegate d = new OnTabletModeChangedListenerDelegate(listener, handler); mOnTabletModeChangedListeners.add(d); } } mGlobal.registerOnTabletModeChangedListener(listener, handler); } /** Loading @@ -544,37 +522,7 @@ public final class InputManager { * @hide */ public void unregisterOnTabletModeChangedListener(OnTabletModeChangedListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mTabletModeLock) { int idx = findOnTabletModeChangedListenerLocked(listener); if (idx >= 0) { OnTabletModeChangedListenerDelegate d = mOnTabletModeChangedListeners.remove(idx); d.removeCallbacksAndMessages(null); } } } private void initializeTabletModeListenerLocked() { final TabletModeChangedListener listener = new TabletModeChangedListener(); try { mIm.registerTabletModeChangedListener(listener); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } mTabletModeChangedListener = listener; mOnTabletModeChangedListeners = new ArrayList<>(); } private int findOnTabletModeChangedListenerLocked(OnTabletModeChangedListener listener) { final int N = mOnTabletModeChangedListeners.size(); for (int i = 0; i < N; i++) { if (mOnTabletModeChangedListeners.get(i).mListener == listener) { return i; } } return -1; mGlobal.unregisterOnTabletModeChangedListener(listener); } /** Loading Loading @@ -1449,21 +1397,6 @@ public final class InputManager { return mGlobal.getHostUsiVersion(display); } private void onTabletModeChanged(long whenNanos, boolean inTabletMode) { if (DEBUG) { Log.d(TAG, "Received tablet mode changed: " + "whenNanos=" + whenNanos + ", inTabletMode=" + inTabletMode); } synchronized (mTabletModeLock) { final int numListeners = mOnTabletModeChangedListeners.size(); for (int i = 0; i < numListeners; i++) { OnTabletModeChangedListenerDelegate listener = mOnTabletModeChangedListeners.get(i); listener.sendTabletModeChanged(whenNanos, inTabletMode); } } } /** * Returns the Bluetooth address of this input device, if known. * Loading Loading @@ -1997,43 +1930,6 @@ public final class InputManager { int deviceId, @NonNull KeyboardBacklightState state, boolean isTriggeredByKeyPress); } private final class TabletModeChangedListener extends ITabletModeChangedListener.Stub { @Override public void onTabletModeChanged(long whenNanos, boolean inTabletMode) { InputManager.this.onTabletModeChanged(whenNanos, inTabletMode); } } private static final class OnTabletModeChangedListenerDelegate extends Handler { private static final int MSG_TABLET_MODE_CHANGED = 0; public final OnTabletModeChangedListener mListener; public OnTabletModeChangedListenerDelegate( OnTabletModeChangedListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); mListener = listener; } public void sendTabletModeChanged(long whenNanos, boolean inTabletMode) { SomeArgs args = SomeArgs.obtain(); args.argi1 = (int) whenNanos; args.argi2 = (int) (whenNanos >> 32); args.arg1 = inTabletMode; obtainMessage(MSG_TABLET_MODE_CHANGED, args).sendToTarget(); } @Override public void handleMessage(Message msg) { if (msg.what == MSG_TABLET_MODE_CHANGED) { SomeArgs args = (SomeArgs) msg.obj; long whenNanos = (args.argi1 & 0xFFFFFFFFL) | ((long) args.argi2 << 32); boolean inTabletMode = (boolean) args.arg1; mListener.onTabletModeChanged(whenNanos, inTabletMode); } } } // Implementation of the android.hardware.BatteryState interface used to report the battery // state via the InputDevice#getBatteryState() and InputDeviceBatteryListener interfaces. private static final class LocalBatteryState extends BatteryState { Loading
core/java/android/hardware/input/InputManagerGlobal.java +127 −9 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.input.InputManager.InputDeviceListener; import android.hardware.input.InputManager.OnTabletModeChangedListener; import android.os.Handler; import android.os.IBinder; import android.os.Looper; Loading @@ -32,6 +33,7 @@ import android.view.Display; import android.view.InputDevice; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.SomeArgs; import java.util.ArrayList; import java.util.Objects; Loading @@ -48,10 +50,6 @@ public final class InputManagerGlobal { // (requires restart) private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int MSG_DEVICE_ADDED = 1; private static final int MSG_DEVICE_REMOVED = 2; private static final int MSG_DEVICE_CHANGED = 3; @GuardedBy("mInputDeviceListeners") @Nullable private SparseArray<InputDevice> mInputDevices; @GuardedBy("mInputDeviceListeners") Loading @@ -59,6 +57,10 @@ public final class InputManagerGlobal { @GuardedBy("mInputDeviceListeners") private final ArrayList<InputDeviceListenerDelegate> mInputDeviceListeners = new ArrayList<>(); @GuardedBy("mOnTabletModeChangedListeners") private final ArrayList<OnTabletModeChangedListenerDelegate> mOnTabletModeChangedListeners = new ArrayList<>(); private static InputManagerGlobal sInstance; private final IInputManager mIm; Loading Loading @@ -186,7 +188,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device removed: " + deviceId); } mInputDevices.removeAt(i); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_REMOVED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_REMOVED, deviceId); } } Loading @@ -202,7 +205,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device changed: " + deviceId); } mInputDevices.setValueAt(index, null); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_CHANGED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_CHANGED, deviceId); } } } else { Loading @@ -210,7 +214,8 @@ public final class InputManagerGlobal { Log.d(TAG, "Device added: " + deviceId); } mInputDevices.put(deviceId, null); sendMessageToInputDeviceListenersLocked(MSG_DEVICE_ADDED, deviceId); sendMessageToInputDeviceListenersLocked( InputDeviceListenerDelegate.MSG_DEVICE_ADDED, deviceId); } } } Loading @@ -218,6 +223,9 @@ public final class InputManagerGlobal { private static final class InputDeviceListenerDelegate extends Handler { public final InputDeviceListener mListener; static final int MSG_DEVICE_ADDED = 1; static final int MSG_DEVICE_REMOVED = 2; static final int MSG_DEVICE_CHANGED = 3; InputDeviceListenerDelegate(InputDeviceListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); Loading Loading @@ -261,7 +269,7 @@ public final class InputManagerGlobal { /** * @see InputManager#registerInputDeviceListener */ public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } Loading @@ -278,7 +286,7 @@ public final class InputManagerGlobal { /** * @see InputManager#unregisterInputDeviceListener */ public void unregisterInputDeviceListener(InputDeviceListener listener) { void unregisterInputDeviceListener(InputDeviceListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } Loading Loading @@ -385,4 +393,114 @@ public final class InputManagerGlobal { throw e.rethrowFromSystemServer(); } } private void onTabletModeChanged(long whenNanos, boolean inTabletMode) { if (DEBUG) { Log.d(TAG, "Received tablet mode changed: " + "whenNanos=" + whenNanos + ", inTabletMode=" + inTabletMode); } synchronized (mOnTabletModeChangedListeners) { final int numListeners = mOnTabletModeChangedListeners.size(); for (int i = 0; i < numListeners; i++) { OnTabletModeChangedListenerDelegate listener = mOnTabletModeChangedListeners.get(i); listener.sendTabletModeChanged(whenNanos, inTabletMode); } } } private final class TabletModeChangedListener extends ITabletModeChangedListener.Stub { @Override public void onTabletModeChanged(long whenNanos, boolean inTabletMode) { InputManagerGlobal.this.onTabletModeChanged(whenNanos, inTabletMode); } } private static final class OnTabletModeChangedListenerDelegate extends Handler { private static final int MSG_TABLET_MODE_CHANGED = 0; public final OnTabletModeChangedListener mListener; OnTabletModeChangedListenerDelegate( OnTabletModeChangedListener listener, Handler handler) { super(handler != null ? handler.getLooper() : Looper.myLooper()); mListener = listener; } public void sendTabletModeChanged(long whenNanos, boolean inTabletMode) { SomeArgs args = SomeArgs.obtain(); args.argi1 = (int) whenNanos; args.argi2 = (int) (whenNanos >> 32); args.arg1 = inTabletMode; obtainMessage(MSG_TABLET_MODE_CHANGED, args).sendToTarget(); } @Override public void handleMessage(Message msg) { if (msg.what == MSG_TABLET_MODE_CHANGED) { SomeArgs args = (SomeArgs) msg.obj; long whenNanos = (args.argi1 & 0xFFFFFFFFL) | ((long) args.argi2 << 32); boolean inTabletMode = (boolean) args.arg1; mListener.onTabletModeChanged(whenNanos, inTabletMode); } } } /** * @see InputManager#registerInputDeviceListener(InputDeviceListener, Handler) */ void registerOnTabletModeChangedListener( OnTabletModeChangedListener listener, Handler handler) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mOnTabletModeChangedListeners) { if (mOnTabletModeChangedListeners == null) { initializeTabletModeListenerLocked(); } int idx = findOnTabletModeChangedListenerLocked(listener); if (idx < 0) { OnTabletModeChangedListenerDelegate d = new OnTabletModeChangedListenerDelegate(listener, handler); mOnTabletModeChangedListeners.add(d); } } } /** * @see InputManager#unregisterOnTabletModeChangedListener(OnTabletModeChangedListener) */ void unregisterOnTabletModeChangedListener(OnTabletModeChangedListener listener) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } synchronized (mOnTabletModeChangedListeners) { int idx = findOnTabletModeChangedListenerLocked(listener); if (idx >= 0) { OnTabletModeChangedListenerDelegate d = mOnTabletModeChangedListeners.remove(idx); d.removeCallbacksAndMessages(null); } } } @GuardedBy("mOnTabletModeChangedListeners") private void initializeTabletModeListenerLocked() { final TabletModeChangedListener listener = new TabletModeChangedListener(); try { mIm.registerTabletModeChangedListener(listener); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } } @GuardedBy("mOnTabletModeChangedListeners") private int findOnTabletModeChangedListenerLocked(OnTabletModeChangedListener listener) { final int n = mOnTabletModeChangedListeners.size(); for (int i = 0; i < n; i++) { if (mOnTabletModeChangedListeners.get(i).mListener == listener) { return i; } } return -1; } }