Skip to content

Commit b4c3367

Browse files
Jeff BrownAndroid (Google) Code Review
authored andcommitted
Merge "Disentangle input manager service startup." into jb-mr1-dev
2 parents ddfaa3f + a9d131c commit b4c3367

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
@@ -302,16 +302,22 @@ public void run() {
302302
Watchdog.getInstance().init(context, battery, power, alarm,
303303
ActivityManagerService.self());
304304

305+
Slog.i(TAG, "Input Manager");
306+
inputManager = new InputManagerService(context, wmHandler);
307+
305308
Slog.i(TAG, "Window Manager");
306-
wm = WindowManagerService.main(context, power, display,
309+
wm = WindowManagerService.main(context, power, display, inputManager,
307310
uiHandler, wmHandler,
308311
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
309312
!firstBoot, onlyCore);
310313
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
311-
inputManager = wm.getInputManagerService();
312314
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
313315

314316
ActivityManagerService.self().setWindowManager(wm);
317+
318+
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
319+
inputManager.start();
320+
315321
display.setWindowManager(wm);
316322
display.setInputManager(inputManager);
317323

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)