am d2367b63: am 3500edaa: Delay cell broadcast config until modem is ready to handle.

* commit 'd2367b637b4cb7f91d4a192a4be7df370da13ffd':
  Delay cell broadcast config until modem is ready to handle.
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index 94d7179..63d0815 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -24,6 +24,8 @@
 import android.os.ServiceManager;
 import android.preference.PreferenceManager;
 import android.provider.Telephony;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.telephony.cdma.CdmaSmsCbProgramData;
 import android.util.Log;
@@ -46,7 +48,11 @@
         String action = intent.getAction();
 
         if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
-            startConfigService(context);
+            if (DBG) log("Registering for ServiceState updates");
+            TelephonyManager tm = (TelephonyManager) context.getSystemService(
+                    Context.TELEPHONY_SERVICE);
+            tm.listen(new ServiceStateListener(context.getApplicationContext()),
+                    PhoneStateListener.LISTEN_SERVICE_STATE);
         } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
             boolean airplaneModeOn = intent.getBooleanExtra("state", false);
             if (!airplaneModeOn) {
@@ -180,6 +186,28 @@
         return isCdma;
     }
 
+    private static class ServiceStateListener extends PhoneStateListener {
+        private final Context mContext;
+        private int mServiceState = -1;
+
+        ServiceStateListener(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public void onServiceStateChanged(ServiceState ss) {
+            int newState = ss.getState();
+            if (newState != mServiceState) {
+                Log.d(TAG, "Service state changed! " + newState + " Full: " + ss);
+                mServiceState = newState;
+                if (newState == ServiceState.STATE_IN_SERVICE ||
+                        newState == ServiceState.STATE_EMERGENCY_ONLY) {
+                    startConfigService(mContext);
+                }
+            }
+        }
+    }
+
     private static void log(String msg) {
         Log.d(TAG, msg);
     }