Merge "Move TabletModeChangedListener to InputManagerGlobal"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ec734f88d5
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -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.
|
||||
*
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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")
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user