am b4c33679: Merge "Disentangle input manager service startup." into jb-mr1-dev

* commit 'b4c33679cbdec9e12369fb49469ce33ed83ed25c':
  Disentangle input manager service startup.
This commit is contained in:
Jeff Brown
2012-09-20 20:23:29 -07:00
committed by Android Git Automerger
4 changed files with 38 additions and 27 deletions

View File

@@ -302,16 +302,22 @@ class ServerThread extends Thread {
Watchdog.getInstance().init(context, battery, power, alarm,
ActivityManagerService.self());
Slog.i(TAG, "Input Manager");
inputManager = new InputManagerService(context, wmHandler);
Slog.i(TAG, "Window Manager");
wm = WindowManagerService.main(context, power, display,
wm = WindowManagerService.main(context, power, display, inputManager,
uiHandler, wmHandler,
factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,
!firstBoot, onlyCore);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
inputManager = wm.getInputManagerService();
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
ActivityManagerService.self().setWindowManager(wm);
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
inputManager.start();
display.setWindowManager(wm);
display.setInputManager(inputManager);

View File

@@ -53,6 +53,7 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Process;
@@ -70,7 +71,6 @@ import android.view.InputDevice;
import android.view.InputEvent;
import android.view.KeyEvent;
import android.view.PointerIcon;
import android.view.Surface;
import android.view.ViewConfiguration;
import android.view.WindowManagerPolicy;
import android.widget.Toast;
@@ -109,8 +109,9 @@ public class InputManagerService extends IInputManager.Stub
private final int mPtr;
private final Context mContext;
private final Callbacks mCallbacks;
private final InputManagerHandler mHandler;
private WindowManagerCallbacks mWindowManagerCallbacks;
private boolean mSystemReady;
private NotificationManager mNotificationManager;
@@ -217,15 +218,18 @@ public class InputManagerService extends IInputManager.Stub
/** Switch code: Keypad slide. When set, keyboard is exposed. */
public static final int SW_KEYPAD_SLIDE = 0x0a;
public InputManagerService(Context context, Callbacks callbacks) {
public InputManagerService(Context context, Handler handler) {
this.mContext = context;
this.mCallbacks = callbacks;
this.mHandler = new InputManagerHandler();
this.mHandler = new InputManagerHandler(handler.getLooper());
Slog.i(TAG, "Initializing input manager");
mPtr = nativeInit(this, mContext, mHandler.getLooper().getQueue());
}
public void setWindowManagerCallbacks(WindowManagerCallbacks callbacks) {
mWindowManagerCallbacks = callbacks;
}
public void start() {
Slog.i(TAG, "Starting input manager");
nativeStart(mPtr);
@@ -1204,7 +1208,7 @@ public class InputManagerService extends IInputManager.Stub
// Native callback.
private void notifyConfigurationChanged(long whenNanos) {
mCallbacks.notifyConfigurationChanged();
mWindowManagerCallbacks.notifyConfigurationChanged();
}
// Native callback.
@@ -1224,20 +1228,20 @@ public class InputManagerService extends IInputManager.Stub
private void notifySwitch(long whenNanos, int switchCode, int switchValue) {
switch (switchCode) {
case SW_LID:
mCallbacks.notifyLidSwitchChanged(whenNanos, switchValue == 0);
mWindowManagerCallbacks.notifyLidSwitchChanged(whenNanos, switchValue == 0);
break;
}
}
// Native callback.
private void notifyInputChannelBroken(InputWindowHandle inputWindowHandle) {
mCallbacks.notifyInputChannelBroken(inputWindowHandle);
mWindowManagerCallbacks.notifyInputChannelBroken(inputWindowHandle);
}
// Native callback.
private long notifyANR(InputApplicationHandle inputApplicationHandle,
InputWindowHandle inputWindowHandle) {
return mCallbacks.notifyANR(inputApplicationHandle, inputWindowHandle);
return mWindowManagerCallbacks.notifyANR(inputApplicationHandle, inputWindowHandle);
}
// Native callback.
@@ -1258,25 +1262,25 @@ public class InputManagerService extends IInputManager.Stub
// Native callback.
private int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
return mCallbacks.interceptKeyBeforeQueueing(
return mWindowManagerCallbacks.interceptKeyBeforeQueueing(
event, policyFlags, isScreenOn);
}
// Native callback.
private int interceptMotionBeforeQueueingWhenScreenOff(int policyFlags) {
return mCallbacks.interceptMotionBeforeQueueingWhenScreenOff(policyFlags);
return mWindowManagerCallbacks.interceptMotionBeforeQueueingWhenScreenOff(policyFlags);
}
// Native callback.
private long interceptKeyBeforeDispatching(InputWindowHandle focus,
KeyEvent event, int policyFlags) {
return mCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
}
// Native callback.
private KeyEvent dispatchUnhandledKey(InputWindowHandle focus,
KeyEvent event, int policyFlags) {
return mCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
}
// Native callback.
@@ -1359,7 +1363,7 @@ public class InputManagerService extends IInputManager.Stub
// Native callback.
private int getPointerLayer() {
return mCallbacks.getPointerLayer();
return mWindowManagerCallbacks.getPointerLayer();
}
// Native callback.
@@ -1414,7 +1418,7 @@ public class InputManagerService extends IInputManager.Stub
/**
* Callback interface implemented by the Window Manager.
*/
public interface Callbacks {
public interface WindowManagerCallbacks {
public void notifyConfigurationChanged();
public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen);
@@ -1441,8 +1445,8 @@ public class InputManagerService extends IInputManager.Stub
* Private handler for the input manager.
*/
private final class InputManagerHandler extends Handler {
public InputManagerHandler() {
super(true /*async*/);
public InputManagerHandler(Looper looper) {
super(looper, null, true /*async*/);
}
@Override

View File

@@ -33,7 +33,7 @@ import android.view.WindowManager;
import java.util.ArrayList;
import java.util.Arrays;
final class InputMonitor implements InputManagerService.Callbacks {
final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
private final WindowManagerService mService;
// Current window with input focus for keys and other non-touch events. May be null.

View File

@@ -74,6 +74,7 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
import android.hardware.display.DisplayManager;
import android.hardware.input.InputManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Debug;
@@ -738,6 +739,7 @@ public class WindowManagerService extends IWindowManager.Stub
public static WindowManagerService main(final Context context,
final PowerManagerService pm, final DisplayManagerService dm,
final InputManagerService im,
final Handler uiHandler, final Handler wmHandler,
final boolean haveInputMethods, final boolean showBootMsgs,
final boolean onlyCore) {
@@ -745,7 +747,7 @@ public class WindowManagerService extends IWindowManager.Stub
wmHandler.runWithScissors(new Runnable() {
@Override
public void run() {
holder[0] = new WindowManagerService(context, pm, dm,
holder[0] = new WindowManagerService(context, pm, dm, im,
uiHandler, haveInputMethods, showBootMsgs, onlyCore);
}
}, 0);
@@ -767,7 +769,8 @@ public class WindowManagerService extends IWindowManager.Stub
}
private WindowManagerService(Context context, PowerManagerService pm,
DisplayManagerService displayManager, Handler uiHandler,
DisplayManagerService displayManager, InputManagerService inputManager,
Handler uiHandler,
boolean haveInputMethods, boolean showBootMsgs, boolean onlyCore) {
mContext = context;
mHaveInputMethods = haveInputMethods;
@@ -814,14 +817,12 @@ public class WindowManagerService extends IWindowManager.Stub
| PowerManager.ON_AFTER_RELEASE, TAG);
mHoldingScreenWakeLock.setReferenceCounted(false);
mInputManager = new InputManagerService(context, mInputMonitor);
mInputManager = inputManager;
mFxSession = new SurfaceSession();
mAnimator = new WindowAnimator(this);
initPolicy(uiHandler);
mInputManager.start();
// Add ourself to the Watchdog monitors.
Watchdog.getInstance().addMonitor(this);
@@ -833,8 +834,8 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
public InputManagerService getInputManagerService() {
return mInputManager;
public InputMonitor getInputMonitor() {
return mInputMonitor;
}
@Override