diff options
| author | Android (Google) Code Review <android-gerrit@google.com> | 2009-08-30 12:02:07 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-08-30 12:02:07 -0700 |
| commit | 2d93a11663d1d872bc7e9d6512a445fa84148583 (patch) | |
| tree | 761954e7c20897ed8693c95317d1fa919aab22ea | |
| parent | f810d1a88b2d3166064c4a36d8cc9314f02094e0 (diff) | |
| parent | d0e82cec71442485d9cc952e5e16165d9d98b16e (diff) | |
| download | frameworks_base-2d93a11663d1d872bc7e9d6512a445fa84148583.zip frameworks_base-2d93a11663d1d872bc7e9d6512a445fa84148583.tar.gz frameworks_base-2d93a11663d1d872bc7e9d6512a445fa84148583.tar.bz2 | |
Merge change 23187 into eclair
* changes:
Do not send dock state changed broadcasts until the system has finished booting.
| -rw-r--r-- | services/java/com/android/server/DockObserver.java | 62 | ||||
| -rw-r--r-- | services/java/com/android/server/SystemServer.java | 1 |
2 files changed, 33 insertions, 30 deletions
diff --git a/services/java/com/android/server/DockObserver.java b/services/java/com/android/server/DockObserver.java index 2bd039f..7385359 100644 --- a/services/java/com/android/server/DockObserver.java +++ b/services/java/com/android/server/DockObserver.java @@ -36,17 +36,15 @@ class DockObserver extends UEventObserver { private static final String DOCK_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/dock"; private static final String DOCK_STATE_PATH = "/sys/class/switch/dock/state"; - private int mDockState; - private boolean mPendingIntent; + private int mDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; + private boolean mSystemReady; private final Context mContext; public DockObserver(Context context) { mContext = context; - - startObserving(DOCK_UEVENT_MATCH); - init(); // set initial status + startObserving(DOCK_UEVENT_MATCH); } @Override @@ -55,55 +53,59 @@ class DockObserver extends UEventObserver { Log.v(TAG, "Dock UEVENT: " + event.toString()); } - try { - update(Integer.parseInt(event.get("SWITCH_STATE"))); - } catch (NumberFormatException e) { - Log.e(TAG, "Could not parse switch state from event " + event); + synchronized (this) { + try { + int newState = Integer.parseInt(event.get("SWITCH_STATE")); + if (newState != mDockState) { + mDockState = newState; + if (mSystemReady) { + update(); + } + } + } catch (NumberFormatException e) { + Log.e(TAG, "Could not parse switch state from event " + event); + } } } - private synchronized final void init() { + private final void init() { char[] buffer = new char[1024]; - int newState = mDockState; try { FileReader file = new FileReader(DOCK_STATE_PATH); int len = file.read(buffer, 0, 1024); - newState = Integer.valueOf((new String(buffer, 0, len)).trim()); + mDockState = Integer.valueOf((new String(buffer, 0, len)).trim()); } catch (FileNotFoundException e) { Log.w(TAG, "This kernel does not have dock station support"); } catch (Exception e) { Log.e(TAG, "" , e); } - - update(newState); } - private synchronized final void update(int newState) { - if (newState != mDockState) { - mDockState = newState; - - mPendingIntent = true; - mHandler.sendEmptyMessage(0); + void systemReady() { + synchronized (this) { + // don't bother broadcasting undocked here + if (mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { + update(); + } + mSystemReady = true; } } - private synchronized final void sendIntent() { - Log.d(TAG, "Broadcasting dock state " + mDockState); - - // Pack up the values and broadcast them to everyone - Intent intent = new Intent(Intent.ACTION_DOCK_EVENT); - intent.putExtra(Intent.EXTRA_DOCK_STATE, mDockState); - mContext.sendStickyBroadcast(intent); + private final void update() { + mHandler.sendEmptyMessage(0); } private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { - if (mPendingIntent) { - sendIntent(); - mPendingIntent = false; + synchronized (this) { + Log.d(TAG, "Broadcasting dock state " + mDockState); + // Pack up the values and broadcast them to everyone + Intent intent = new Intent(Intent.ACTION_DOCK_EVENT); + intent.putExtra(Intent.EXTRA_DOCK_STATE, mDockState); + mContext.sendStickyBroadcast(intent); } } }; diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 95edbeb..df01c61 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -392,6 +392,7 @@ class ServerThread extends Thread { if (wallpaper != null) wallpaper.systemReady(); if (battery != null) battery.systemReady(); if (connectivity != null) connectivity.systemReady(); + if (dock != null) dock.systemReady(); Watchdog.getInstance().start(); Looper.loop(); |
