am 82726f04: Merge change 21298 into eclair

Merge commit '82726f045de91b899502a54ca76d234c43a1ba4b'

* commit '82726f045de91b899502a54ca76d234c43a1ba4b':
  ConnectivityService: Do not send broadcasts until the system is ready.
This commit is contained in:
Mike Lockwood
2009-08-14 18:45:40 -07:00
committed by Android Git Automerger
2 changed files with 37 additions and 6 deletions

View File

@@ -100,6 +100,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// a process dies
private List mFeatureUsers;
private boolean mSystemReady;
private ArrayList<Intent> mDeferredBroadcasts;
private class NetworkAttributes {
/**
* Class for holding settings read from resources.
@@ -820,7 +823,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
(newNet == null || !newNet.isAvailable() ? "" : " other=" +
newNet.getNetworkInfo().getTypeName()));
mContext.sendStickyBroadcast(intent);
sendStickyBroadcast(intent);
/*
* If the failover network is already connected, then immediately send
* out a followup broadcast indicating successful failover
@@ -843,7 +846,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
intent.putExtra(ConnectivityManager.EXTRA_EXTRA_INFO,
info.getExtraInfo());
}
mContext.sendStickyBroadcast(intent);
sendStickyBroadcast(intent);
}
/**
@@ -882,7 +885,33 @@ public class ConnectivityService extends IConnectivityManager.Stub {
intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
info.setFailover(false);
}
mContext.sendStickyBroadcast(intent);
sendStickyBroadcast(intent);
}
private void sendStickyBroadcast(Intent intent) {
synchronized(this) {
if (mSystemReady) {
mContext.sendStickyBroadcast(intent);
} else {
if (mDeferredBroadcasts == null) {
mDeferredBroadcasts = new ArrayList<Intent>();
}
mDeferredBroadcasts.add(intent);
}
}
}
void systemReady() {
synchronized(this) {
mSystemReady = true;
if (mDeferredBroadcasts != null) {
int count = mDeferredBroadcasts.size();
for (int i = 0; i < count; i++) {
mContext.sendStickyBroadcast(mDeferredBroadcasts.get(i));
}
mDeferredBroadcasts = null;
}
}
}
private void handleConnect(NetworkInfo info) {

View File

@@ -85,6 +85,7 @@ class ServerThread extends Thread {
HardwareService hardware = null;
PowerManagerService power = null;
BatteryService battery = null;
ConnectivityService connectivity = null;
IPackageManager pm = null;
Context context = null;
WindowManagerService wm = null;
@@ -231,8 +232,8 @@ class ServerThread extends Thread {
try {
Log.i(TAG, "Starting Connectivity Service.");
ServiceManager.addService(Context.CONNECTIVITY_SERVICE,
ConnectivityService.getInstance(context));
connectivity = ConnectivityService.getInstance(context);
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
} catch (Throwable e) {
Log.e(TAG, "Failure starting Connectivity Service", e);
}
@@ -384,7 +385,8 @@ class ServerThread extends Thread {
}
if (wallpaper != null) wallpaper.systemReady();
battery.systemReady();
if (battery != null) battery.systemReady();
if (connectivity != null) connectivity.systemReady();
Watchdog.getInstance().start();
Looper.loop();