Skip to content

Commit a9d131c

Browse files
author
Jeff Brown
committed
Disentangle input manager service startup.
We will be adding additional callbacks for other components. This change makes it clearer how the input manager is started and where the callbacks are initialized. Bug: 6548391 Change-Id: I4b2a61482126a12b7cf11fafe513f846c76c11e5
1 parent bbd28a2 commit a9d131c

File tree

4 files changed

+38
-27
lines changed

4 files changed

+38
-27
lines changed

services/java/com/android/server/SystemServer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,16 +300,22 @@ public void run() {
300300
Watchdog.getInstance().init(context, battery, power, alarm,
301301
ActivityManagerService.self());
302302

303+
Slog.i(TAG, "Input Manager");
304+
inputManager = new InputManagerService(context, wmHandler);
305+
303306
Slog.i(TAG, "Window Manager");
304-
wm = WindowManagerService.main(context, power, display,
307+
wm = WindowManagerService.main(context, power, display, inputManager,
305308
uiHandler, wmHandler,
306309
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
307310
!firstBoot, onlyCore);
308311
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
309-
inputManager = wm.getInputManagerService();
310312
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
311313

312314
ActivityManagerService.self().setWindowManager(wm);
315+
316+
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
317+
inputManager.start();
318+
313319
display.setWindowManager(wm);
314320
display.setInputManager(inputManager);
315321

services/java/com/android/server/input/InputManagerService.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import android.os.Environment;
5454
import android.os.Handler;
5555
import android.os.IBinder;
56+
import android.os.Looper;
5657
import android.os.Message;
5758
import android.os.MessageQueue;
5859
import android.os.Process;
@@ -70,7 +71,6 @@
7071
import android.view.InputEvent;
7172
import android.view.KeyEvent;
7273
import android.view.PointerIcon;
73-
import android.view.Surface;
7474
import android.view.ViewConfiguration;
7575
import android.view.WindowManagerPolicy;
7676
import android.widget.Toast;
@@ -109,8 +109,9 @@ public class InputManagerService extends IInputManager.Stub
109109
private final int mPtr;
110110

111111
private final Context mContext;
112-
private final Callbacks mCallbacks;
113112
private final InputManagerHandler mHandler;
113+
114+
private WindowManagerCallbacks mWindowManagerCallbacks;
114115
private boolean mSystemReady;
115116
private NotificationManager mNotificationManager;
116117

@@ -217,15 +218,18 @@ private static native void nativeVibrate(int ptr, int deviceId, long[] pattern,
217218
/** Switch code: Keypad slide. When set, keyboard is exposed. */
218219
public static final int SW_KEYPAD_SLIDE = 0x0a;
219220

220-
public InputManagerService(Context context, Callbacks callbacks) {
221+
public InputManagerService(Context context, Handler handler) {
221222
this.mContext = context;
222-
this.mCallbacks = callbacks;
223-
this.mHandler = new InputManagerHandler();
223+
this.mHandler = new InputManagerHandler(handler.getLooper());
224224

225225
Slog.i(TAG, "Initializing input manager");
226226
mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue());
227227
}
228228

229+
public void setWindowManagerCallbacks(WindowManagerCallbacks callbacks) {
230+
mWindowManagerCallbacks = callbacks;
231+
}
232+
229233
public void start() {
230234
Slog.i(TAG, "Starting input manager");
231235
nativeStart(mPtr);
@@ -1204,7 +1208,7 @@ public void monitor() {
12041208

12051209
// Native callback.
12061210
private void notifyConfigurationChanged(long whenNanos) {
1207-
mCallbacks.notifyConfigurationChanged();
1211+
mWindowManagerCallbacks.notifyConfigurationChanged();
12081212
}
12091213

12101214
// Native callback.
@@ -1224,20 +1228,20 @@ private void notifyInputDevicesChanged(InputDevice[] inputDevices) {
12241228
private void notifySwitch(long whenNanos, int switchCode, int switchValue) {
12251229
switch (switchCode) {
12261230
case SW_LID:
1227-
mCallbacks.notifyLidSwitchChanged(whenNanos, switchValue == 0);
1231+
mWindowManagerCallbacks.notifyLidSwitchChanged(whenNanos, switchValue == 0);
12281232
break;
12291233
}
12301234
}
12311235

12321236
// Native callback.
12331237
private void notifyInputChannelBroken(InputWindowHandle inputWindowHandle) {
1234-
mCallbacks.notifyInputChannelBroken(inputWindowHandle);
1238+
mWindowManagerCallbacks.notifyInputChannelBroken(inputWindowHandle);
12351239
}
12361240

12371241
// Native callback.
12381242
private long notifyANR(InputApplicationHandle inputApplicationHandle,
12391243
InputWindowHandle inputWindowHandle) {
1240-
return mCallbacks.notifyANR(inputApplicationHandle, inputWindowHandle);
1244+
return mWindowManagerCallbacks.notifyANR(inputApplicationHandle, inputWindowHandle);
12411245
}
12421246

12431247
// Native callback.
@@ -1258,25 +1262,25 @@ final boolean filterInputEvent(InputEvent event, int policyFlags) {
12581262

12591263
// Native callback.
12601264
private int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
1261-
return mCallbacks.interceptKeyBeforeQueueing(
1265+
return mWindowManagerCallbacks.interceptKeyBeforeQueueing(
12621266
event, policyFlags, isScreenOn);
12631267
}
12641268

12651269
// Native callback.
12661270
private int interceptMotionBeforeQueueingWhenScreenOff(int policyFlags) {
1267-
return mCallbacks.interceptMotionBeforeQueueingWhenScreenOff(policyFlags);
1271+
return mWindowManagerCallbacks.interceptMotionBeforeQueueingWhenScreenOff(policyFlags);
12681272
}
12691273

12701274
// Native callback.
12711275
private long interceptKeyBeforeDispatching(InputWindowHandle focus,
12721276
KeyEvent event, int policyFlags) {
1273-
return mCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
1277+
return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
12741278
}
12751279

12761280
// Native callback.
12771281
private KeyEvent dispatchUnhandledKey(InputWindowHandle focus,
12781282
KeyEvent event, int policyFlags) {
1279-
return mCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
1283+
return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
12801284
}
12811285

12821286
// Native callback.
@@ -1359,7 +1363,7 @@ private int getLongPressTimeout() {
13591363

13601364
// Native callback.
13611365
private int getPointerLayer() {
1362-
return mCallbacks.getPointerLayer();
1366+
return mWindowManagerCallbacks.getPointerLayer();
13631367
}
13641368

13651369
// Native callback.
@@ -1414,7 +1418,7 @@ private String getDeviceAlias(String uniqueId) {
14141418
/**
14151419
* Callback interface implemented by the Window Manager.
14161420
*/
1417-
public interface Callbacks {
1421+
public interface WindowManagerCallbacks {
14181422
public void notifyConfigurationChanged();
14191423

14201424
public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen);
@@ -1441,8 +1445,8 @@ public KeyEvent dispatchUnhandledKey(InputWindowHandle focus,
14411445
* Private handler for the input manager.
14421446
*/
14431447
private final class InputManagerHandler extends Handler {
1444-
public InputManagerHandler() {
1445-
super(true /*async*/);
1448+
public InputManagerHandler(Looper looper) {
1449+
super(looper, null, true /*async*/);
14461450
}
14471451

14481452
@Override

services/java/com/android/server/wm/InputMonitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import java.util.ArrayList;
3434
import java.util.Arrays;
3535

36-
final class InputMonitor implements InputManagerService.Callbacks {
36+
final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
3737
private final WindowManagerService mService;
3838

3939
// Current window with input focus for keys and other non-touch events. May be null.

services/java/com/android/server/wm/WindowManagerService.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import android.graphics.RectF;
7575
import android.graphics.Region;
7676
import android.hardware.display.DisplayManager;
77+
import android.hardware.input.InputManager;
7778
import android.os.Binder;
7879
import android.os.Bundle;
7980
import android.os.Debug;
@@ -738,14 +739,15 @@ public interface WindowChangeListener {
738739

739740
public static WindowManagerService main(final Context context,
740741
final PowerManagerService pm, final DisplayManagerService dm,
742+
final InputManagerService im,
741743
final Handler uiHandler, final Handler wmHandler,
742744
final boolean haveInputMethods, final boolean showBootMsgs,
743745
final boolean onlyCore) {
744746
final WindowManagerService[] holder = new WindowManagerService[1];
745747
wmHandler.runWithScissors(new Runnable() {
746748
@Override
747749
public void run() {
748-
holder[0] = new WindowManagerService(context, pm, dm,
750+
holder[0] = new WindowManagerService(context, pm, dm, im,
749751
uiHandler, haveInputMethods, showBootMsgs, onlyCore);
750752
}
751753
}, 0);
@@ -767,7 +769,8 @@ public void run() {
767769
}
768770

769771
private WindowManagerService(Context context, PowerManagerService pm,
770-
DisplayManagerService displayManager, Handler uiHandler,
772+
DisplayManagerService displayManager, InputManagerService inputManager,
773+
Handler uiHandler,
771774
boolean haveInputMethods, boolean showBootMsgs, boolean onlyCore) {
772775
mContext = context;
773776
mHaveInputMethods = haveInputMethods;
@@ -814,14 +817,12 @@ private WindowManagerService(Context context, PowerManagerService pm,
814817
| PowerManager.ON_AFTER_RELEASE, TAG);
815818
mHoldingScreenWakeLock.setReferenceCounted(false);
816819

817-
mInputManager = new InputManagerService(context, mInputMonitor);
820+
mInputManager = inputManager;
818821
mFxSession = new SurfaceSession();
819822
mAnimator = new WindowAnimator(this);
820823

821824
initPolicy(uiHandler);
822825

823-
mInputManager.start();
824-
825826
// Add ourself to the Watchdog monitors.
826827
Watchdog.getInstance().addMonitor(this);
827828

@@ -833,8 +834,8 @@ private WindowManagerService(Context context, PowerManagerService pm,
833834
}
834835
}
835836

836-
public InputManagerService getInputManagerService() {
837-
return mInputManager;
837+
public InputMonitor getInputMonitor() {
838+
return mInputMonitor;
838839
}
839840

840841
@Override

0 commit comments

Comments
 (0)