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);
}