Merge "Only try to fetch time from NTP if there is a network connection." into lmp-mr1-dev
diff --git a/core/java/android/util/NtpTrustedTime.java b/core/java/android/util/NtpTrustedTime.java
index 602a68c..8ebcacd 100644
--- a/core/java/android/util/NtpTrustedTime.java
+++ b/core/java/android/util/NtpTrustedTime.java
@@ -19,6 +19,8 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
 import android.net.SntpClient;
 import android.os.SystemClock;
 import android.provider.Settings;
@@ -34,10 +36,13 @@
     private static final boolean LOGD = false;
 
     private static NtpTrustedTime sSingleton;
+    private static Context sContext;
 
     private final String mServer;
     private final long mTimeout;
 
+    private ConnectivityManager mCM;
+
     private boolean mHasCache;
     private long mCachedNtpTime;
     private long mCachedNtpElapsedRealtime;
@@ -66,6 +71,7 @@
 
             final String server = secureServer != null ? secureServer : defaultServer;
             sSingleton = new NtpTrustedTime(server, timeout);
+            sContext = context;
         }
 
         return sSingleton;
@@ -78,6 +84,20 @@
             return false;
         }
 
+        // We can't do this at initialization time: ConnectivityService might not be running yet.
+        synchronized (this) {
+            if (mCM == null) {
+                mCM = (ConnectivityManager) sContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+            }
+        }
+
+        final NetworkInfo ni = mCM == null ? null : mCM.getActiveNetworkInfo();
+        if (ni == null || !ni.isConnected()) {
+            if (LOGD) Log.d(TAG, "forceRefresh: no connectivity");
+            return false;
+        }
+
+
         if (LOGD) Log.d(TAG, "forceRefresh() from cache miss");
         final SntpClient client = new SntpClient();
         if (client.requestTime(mServer, (int) mTimeout)) {
diff --git a/services/core/java/com/android/server/NetworkTimeUpdateService.java b/services/core/java/com/android/server/NetworkTimeUpdateService.java
index fddb54e..d6abce9 100644
--- a/services/core/java/com/android/server/NetworkTimeUpdateService.java
+++ b/services/core/java/com/android/server/NetworkTimeUpdateService.java
@@ -55,7 +55,7 @@
 
     private static final int EVENT_AUTO_TIME_CHANGED = 1;
     private static final int EVENT_POLL_NETWORK_TIME = 2;
-    private static final int EVENT_NETWORK_CONNECTED = 3;
+    private static final int EVENT_NETWORK_CHANGED = 3;
 
     private static final String ACTION_POLL =
             "com.android.server.NetworkTimeUpdateService.action.POLL";
@@ -248,18 +248,8 @@
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
             if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
-                // There is connectivity
-                final ConnectivityManager connManager = (ConnectivityManager) context
-                        .getSystemService(Context.CONNECTIVITY_SERVICE);
-                final NetworkInfo netInfo = connManager.getActiveNetworkInfo();
-                if (netInfo != null) {
-                    // Verify that it's a WIFI connection
-                    if (netInfo.getState() == NetworkInfo.State.CONNECTED &&
-                            (netInfo.getType() == ConnectivityManager.TYPE_WIFI ||
-                                netInfo.getType() == ConnectivityManager.TYPE_ETHERNET) ) {
-                        mHandler.obtainMessage(EVENT_NETWORK_CONNECTED).sendToTarget();
-                    }
-                }
+                // Don't bother checking if we have connectivity, NtpTrustedTime does that for us.
+                mHandler.obtainMessage(EVENT_NETWORK_CHANGED).sendToTarget();
             }
         }
     };
@@ -276,7 +266,7 @@
             switch (msg.what) {
                 case EVENT_AUTO_TIME_CHANGED:
                 case EVENT_POLL_NETWORK_TIME:
-                case EVENT_NETWORK_CONNECTED:
+                case EVENT_NETWORK_CHANGED:
                     onPollNetworkTime(msg.what);
                     break;
             }