18233facddcc51865d612a919d450db6954aa48e3Michael Kolb/* 28233facddcc51865d612a919d450db6954aa48e3Michael Kolb * Copyright (C) 2010 The Android Open Source Project 38233facddcc51865d612a919d450db6954aa48e3Michael Kolb * 48233facddcc51865d612a919d450db6954aa48e3Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); 58233facddcc51865d612a919d450db6954aa48e3Michael Kolb * you may not use this file except in compliance with the License. 68233facddcc51865d612a919d450db6954aa48e3Michael Kolb * You may obtain a copy of the License at 78233facddcc51865d612a919d450db6954aa48e3Michael Kolb * 88233facddcc51865d612a919d450db6954aa48e3Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 98233facddcc51865d612a919d450db6954aa48e3Michael Kolb * 108233facddcc51865d612a919d450db6954aa48e3Michael Kolb * Unless required by applicable law or agreed to in writing, software 118233facddcc51865d612a919d450db6954aa48e3Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, 128233facddcc51865d612a919d450db6954aa48e3Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138233facddcc51865d612a919d450db6954aa48e3Michael Kolb * See the License for the specific language governing permissions and 148233facddcc51865d612a919d450db6954aa48e3Michael Kolb * limitations under the License. 158233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 168233facddcc51865d612a919d450db6954aa48e3Michael Kolb 178233facddcc51865d612a919d450db6954aa48e3Michael Kolbpackage com.android.browser; 188233facddcc51865d612a919d450db6954aa48e3Michael Kolb 198233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.app.Activity; 208233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.content.BroadcastReceiver; 218233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.content.Context; 228233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.content.Intent; 238233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.content.IntentFilter; 248233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.net.ConnectivityManager; 258233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.net.NetworkInfo; 268233facddcc51865d612a919d450db6954aa48e3Michael Kolbimport android.webkit.WebView; 278233facddcc51865d612a919d450db6954aa48e3Michael Kolb 288233facddcc51865d612a919d450db6954aa48e3Michael Kolb/** 298233facddcc51865d612a919d450db6954aa48e3Michael Kolb * Handle network state changes 308233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 318233facddcc51865d612a919d450db6954aa48e3Michael Kolbpublic class NetworkStateHandler { 328233facddcc51865d612a919d450db6954aa48e3Michael Kolb 338233facddcc51865d612a919d450db6954aa48e3Michael Kolb Activity mActivity; 348233facddcc51865d612a919d450db6954aa48e3Michael Kolb Controller mController; 358233facddcc51865d612a919d450db6954aa48e3Michael Kolb 368233facddcc51865d612a919d450db6954aa48e3Michael Kolb // monitor platform changes 378233facddcc51865d612a919d450db6954aa48e3Michael Kolb private IntentFilter mNetworkStateChangedFilter; 388233facddcc51865d612a919d450db6954aa48e3Michael Kolb private BroadcastReceiver mNetworkStateIntentReceiver; 398233facddcc51865d612a919d450db6954aa48e3Michael Kolb private boolean mIsNetworkUp; 408233facddcc51865d612a919d450db6954aa48e3Michael Kolb 418233facddcc51865d612a919d450db6954aa48e3Michael Kolb public NetworkStateHandler(Activity activity, Controller controller) { 428233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity = activity; 438233facddcc51865d612a919d450db6954aa48e3Michael Kolb mController = controller; 448233facddcc51865d612a919d450db6954aa48e3Michael Kolb // Find out if the network is currently up. 458233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager cm = (ConnectivityManager) mActivity 468233facddcc51865d612a919d450db6954aa48e3Michael Kolb .getSystemService(Context.CONNECTIVITY_SERVICE); 478233facddcc51865d612a919d450db6954aa48e3Michael Kolb NetworkInfo info = cm.getActiveNetworkInfo(); 488233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (info != null) { 498233facddcc51865d612a919d450db6954aa48e3Michael Kolb mIsNetworkUp = info.isAvailable(); 508233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 518233facddcc51865d612a919d450db6954aa48e3Michael Kolb 528233facddcc51865d612a919d450db6954aa48e3Michael Kolb /* 538233facddcc51865d612a919d450db6954aa48e3Michael Kolb * enables registration for changes in network status from http stack 548233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 558233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter = new IntentFilter(); 568233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter.addAction( 578233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.CONNECTIVITY_ACTION); 588233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateIntentReceiver = new BroadcastReceiver() { 598233facddcc51865d612a919d450db6954aa48e3Michael Kolb @Override 608233facddcc51865d612a919d450db6954aa48e3Michael Kolb public void onReceive(Context context, Intent intent) { 618233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (intent.getAction().equals( 628233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.CONNECTIVITY_ACTION)) { 638233facddcc51865d612a919d450db6954aa48e3Michael Kolb 648233facddcc51865d612a919d450db6954aa48e3Michael Kolb NetworkInfo info = intent.getParcelableExtra( 658233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.EXTRA_NETWORK_INFO); 668233facddcc51865d612a919d450db6954aa48e3Michael Kolb String typeName = info.getTypeName(); 678233facddcc51865d612a919d450db6954aa48e3Michael Kolb String subtypeName = info.getSubtypeName(); 688233facddcc51865d612a919d450db6954aa48e3Michael Kolb sendNetworkType(typeName.toLowerCase(), 698233facddcc51865d612a919d450db6954aa48e3Michael Kolb (subtypeName != null ? subtypeName.toLowerCase() : "")); 708233facddcc51865d612a919d450db6954aa48e3Michael Kolb 71bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt boolean noConnection = intent.getBooleanExtra( 72bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 73bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt 74bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt onNetworkToggle(!noConnection); 758233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 768233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 778233facddcc51865d612a919d450db6954aa48e3Michael Kolb }; 788233facddcc51865d612a919d450db6954aa48e3Michael Kolb 798233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 808233facddcc51865d612a919d450db6954aa48e3Michael Kolb 818233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onPause() { 828233facddcc51865d612a919d450db6954aa48e3Michael Kolb // unregister network state listener 838233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity.unregisterReceiver(mNetworkStateIntentReceiver); 848233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 858233facddcc51865d612a919d450db6954aa48e3Michael Kolb 868233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onResume() { 878233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity.registerReceiver(mNetworkStateIntentReceiver, 888233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter); 898233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 908233facddcc51865d612a919d450db6954aa48e3Michael Kolb 918233facddcc51865d612a919d450db6954aa48e3Michael Kolb /** 928233facddcc51865d612a919d450db6954aa48e3Michael Kolb * connectivity manager says net has come or gone... inform the user 938233facddcc51865d612a919d450db6954aa48e3Michael Kolb * @param up true if net has come up, false if net has gone down 948233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 958233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onNetworkToggle(boolean up) { 968233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (up == mIsNetworkUp) { 978233facddcc51865d612a919d450db6954aa48e3Michael Kolb return; 988233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 998471e9f6aa91a7e97a307304483ec8bcb61b8fddJohn Reck mIsNetworkUp = up; 1008233facddcc51865d612a919d450db6954aa48e3Michael Kolb WebView w = mController.getCurrentWebView(); 1018233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (w != null) { 1028233facddcc51865d612a919d450db6954aa48e3Michael Kolb w.setNetworkAvailable(up); 1038233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1048233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1058233facddcc51865d612a919d450db6954aa48e3Michael Kolb 1068233facddcc51865d612a919d450db6954aa48e3Michael Kolb boolean isNetworkUp() { 1078233facddcc51865d612a919d450db6954aa48e3Michael Kolb return mIsNetworkUp; 1088233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1098233facddcc51865d612a919d450db6954aa48e3Michael Kolb 1108233facddcc51865d612a919d450db6954aa48e3Michael Kolb private void sendNetworkType(String type, String subtype) { 1118233facddcc51865d612a919d450db6954aa48e3Michael Kolb WebView w = mController.getCurrentWebView(); 1128233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (w != null) { 1138233facddcc51865d612a919d450db6954aa48e3Michael Kolb w.setNetworkType(type, subtype); 1148233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1158233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1168233facddcc51865d612a919d450db6954aa48e3Michael Kolb 1178233facddcc51865d612a919d450db6954aa48e3Michael Kolb} 118