diff options
| author | Russell Brenner <russellbrenner@google.com> | 2013-02-12 10:03:14 -0800 |
|---|---|---|
| committer | Russell Brenner <russellbrenner@google.com> | 2013-02-14 11:02:10 -0800 |
| commit | 108da0cfa4a2f59cc953a4ec61314e69b61d6777 (patch) | |
| tree | 4eed1f321a839d97f4418f94a39f8e9af384e3bd /core/java/android | |
| parent | fd869887c3477bb2699b72ea752a8466602ea637 (diff) | |
| download | frameworks_base-108da0cfa4a2f59cc953a4ec61314e69b61d6777.zip frameworks_base-108da0cfa4a2f59cc953a4ec61314e69b61d6777.tar.gz frameworks_base-108da0cfa4a2f59cc953a4ec61314e69b61d6777.tar.bz2 | |
Adjust captive portal test for setup wizard
During setup wizard, perform captive portal test without the typical
delays.
Change-Id: If596948e732966817aae6201440e87e19be0c2f8
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/net/CaptivePortalTracker.java | 60 | ||||
| -rw-r--r-- | core/java/android/net/ConnectivityManager.java | 15 |
2 files changed, 67 insertions, 8 deletions
diff --git a/core/java/android/net/CaptivePortalTracker.java b/core/java/android/net/CaptivePortalTracker.java index 354a8c4..21995c0 100644 --- a/core/java/android/net/CaptivePortalTracker.java +++ b/core/java/android/net/CaptivePortalTracker.java @@ -25,14 +25,15 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; +import android.database.ContentObserver; import android.net.ConnectivityManager; import android.net.IConnectivityManager; +import android.os.Handler; import android.os.UserHandle; import android.os.Message; import android.os.RemoteException; import android.provider.Settings; import android.telephony.TelephonyManager; -import android.util.Log; import com.android.internal.util.State; import com.android.internal.util.StateMachine; @@ -81,15 +82,21 @@ public class CaptivePortalTracker extends StateMachine { private State mActiveNetworkState = new ActiveNetworkState(); private State mDelayedCaptiveCheckState = new DelayedCaptiveCheckState(); + private static final String SETUP_WIZARD_PACKAGE = "com.google.android.setupwizard"; + private boolean mDeviceProvisioned = false; + private ProvisioningObserver mProvisioningObserver; + private CaptivePortalTracker(Context context, IConnectivityManager cs) { super(TAG); mContext = context; mConnService = cs; mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + mProvisioningObserver = new ProvisioningObserver(); IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE); mContext.registerReceiver(mReceiver, filter); mServer = Settings.Global.getString(mContext.getContentResolver(), @@ -106,11 +113,31 @@ public class CaptivePortalTracker extends StateMachine { setInitialState(mNoActiveNetworkState); } + private class ProvisioningObserver extends ContentObserver { + ProvisioningObserver() { + super(new Handler()); + mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor( + Settings.Global.DEVICE_PROVISIONED), false, this); + onChange(false); // load initial value + } + + @Override + public void onChange(boolean selfChange) { + mDeviceProvisioned = Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 0) != 0; + } + } + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { + // Normally, we respond to CONNECTIVITY_ACTION, allowing time for the change in + // connectivity to stabilize, but if the device is not yet provisioned, respond + // immediately to speed up transit through the setup wizard. + if ((mDeviceProvisioned && action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) + || (!mDeviceProvisioned + && action.equals(ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE))) { NetworkInfo info = intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO); sendMessage(obtainMessage(CMD_CONNECTIVITY_CHANGE, info)); @@ -222,8 +249,12 @@ public class CaptivePortalTracker extends StateMachine { @Override public void enter() { if (DBG) log(getName() + "\n"); - sendMessageDelayed(obtainMessage(CMD_DELAYED_CAPTIVE_CHECK, - ++mDelayedCheckToken, 0), DELAYED_CHECK_INTERVAL_MS); + Message message = obtainMessage(CMD_DELAYED_CAPTIVE_CHECK, ++mDelayedCheckToken, 0); + if (mDeviceProvisioned) { + sendMessageDelayed(message, DELAYED_CHECK_INTERVAL_MS); + } else { + sendMessage(message); + } } @Override @@ -233,13 +264,26 @@ public class CaptivePortalTracker extends StateMachine { case CMD_DELAYED_CAPTIVE_CHECK: if (message.arg1 == mDelayedCheckToken) { InetAddress server = lookupHost(mServer); - if (server != null) { - if (isCaptivePortal(server)) { - if (DBG) log("Captive network " + mNetworkInfo); + boolean captive = server != null && isCaptivePortal(server); + if (captive) { + if (DBG) log("Captive network " + mNetworkInfo); + } else { + if (DBG) log("Not captive network " + mNetworkInfo); + } + if (mDeviceProvisioned) { + if (captive) { + // Setup Wizard will assist the user in connecting to a captive + // portal, so make the notification visible unless during setup setNotificationVisible(true); } + } else { + Intent intent = new Intent( + ConnectivityManager.ACTION_CAPTIVE_PORTAL_TEST_COMPLETED); + intent.putExtra(ConnectivityManager.EXTRA_IS_CAPTIVE_PORTAL, captive); + intent.setPackage(SETUP_WIZARD_PACKAGE); + mContext.sendBroadcast(intent); } - if (DBG) log("Not captive network " + mNetworkInfo); + transitionTo(mActiveNetworkState); } break; diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index a8a68d0..000c56c 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -228,6 +228,21 @@ public class ConnectivityManager { public static final String EXTRA_ERRORED_TETHER = "erroredArray"; /** + * Broadcast Action: The captive portal tracker has finished its test. + * Sent only while running Setup Wizard, in lieu of showing a user + * notification. + * @hide + */ + public static final String ACTION_CAPTIVE_PORTAL_TEST_COMPLETED = + "android.net.conn.CAPTIVE_PORTAL_TEST_COMPLETED"; + /** + * The lookup key for a boolean that indicates whether a captive portal was detected. + * Retrieve it with {@link android.content.Intent#getBooleanExtra(String,boolean)}. + * @hide + */ + public static final String EXTRA_IS_CAPTIVE_PORTAL = "captivePortal"; + + /** * The absence of APN.. * @hide */ |
