Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e895d35 authored by Mike Lockwood's avatar Mike Lockwood Committed by Android Git Automerger
Browse files

am 82726f04: Merge change 21298 into eclair

Merge commit '82726f04'

* commit '82726f04':
  ConnectivityService: Do not send broadcasts until the system is ready.
parents 64e0dbcb 82726f04
Loading
Loading
Loading
Loading
+32 −3
Original line number Diff line number Diff line
@@ -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);
        }
        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) {
+5 −3
Original line number Diff line number Diff line
@@ -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();