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; 274d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixonimport android.webkit.WebViewClassic; 288233facddcc51865d612a919d450db6954aa48e3Michael Kolb 2996497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Leaseimport com.android.browser.BrowserSettings; 3096497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease 318233facddcc51865d612a919d450db6954aa48e3Michael Kolb/** 328233facddcc51865d612a919d450db6954aa48e3Michael Kolb * Handle network state changes 338233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 348233facddcc51865d612a919d450db6954aa48e3Michael Kolbpublic class NetworkStateHandler { 358233facddcc51865d612a919d450db6954aa48e3Michael Kolb 368233facddcc51865d612a919d450db6954aa48e3Michael Kolb Activity mActivity; 378233facddcc51865d612a919d450db6954aa48e3Michael Kolb Controller mController; 388233facddcc51865d612a919d450db6954aa48e3Michael Kolb 398233facddcc51865d612a919d450db6954aa48e3Michael Kolb // monitor platform changes 408233facddcc51865d612a919d450db6954aa48e3Michael Kolb private IntentFilter mNetworkStateChangedFilter; 418233facddcc51865d612a919d450db6954aa48e3Michael Kolb private BroadcastReceiver mNetworkStateIntentReceiver; 428233facddcc51865d612a919d450db6954aa48e3Michael Kolb private boolean mIsNetworkUp; 438233facddcc51865d612a919d450db6954aa48e3Michael Kolb 448233facddcc51865d612a919d450db6954aa48e3Michael Kolb public NetworkStateHandler(Activity activity, Controller controller) { 458233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity = activity; 468233facddcc51865d612a919d450db6954aa48e3Michael Kolb mController = controller; 478233facddcc51865d612a919d450db6954aa48e3Michael Kolb // Find out if the network is currently up. 488233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager cm = (ConnectivityManager) mActivity 498233facddcc51865d612a919d450db6954aa48e3Michael Kolb .getSystemService(Context.CONNECTIVITY_SERVICE); 508233facddcc51865d612a919d450db6954aa48e3Michael Kolb NetworkInfo info = cm.getActiveNetworkInfo(); 518233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (info != null) { 528233facddcc51865d612a919d450db6954aa48e3Michael Kolb mIsNetworkUp = info.isAvailable(); 538233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 548233facddcc51865d612a919d450db6954aa48e3Michael Kolb 558233facddcc51865d612a919d450db6954aa48e3Michael Kolb /* 568233facddcc51865d612a919d450db6954aa48e3Michael Kolb * enables registration for changes in network status from http stack 578233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 588233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter = new IntentFilter(); 598233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter.addAction( 608233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.CONNECTIVITY_ACTION); 618233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateIntentReceiver = new BroadcastReceiver() { 628233facddcc51865d612a919d450db6954aa48e3Michael Kolb @Override 638233facddcc51865d612a919d450db6954aa48e3Michael Kolb public void onReceive(Context context, Intent intent) { 648233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (intent.getAction().equals( 658233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.CONNECTIVITY_ACTION)) { 668233facddcc51865d612a919d450db6954aa48e3Michael Kolb 678233facddcc51865d612a919d450db6954aa48e3Michael Kolb NetworkInfo info = intent.getParcelableExtra( 688233facddcc51865d612a919d450db6954aa48e3Michael Kolb ConnectivityManager.EXTRA_NETWORK_INFO); 698233facddcc51865d612a919d450db6954aa48e3Michael Kolb String typeName = info.getTypeName(); 708233facddcc51865d612a919d450db6954aa48e3Michael Kolb String subtypeName = info.getSubtypeName(); 718233facddcc51865d612a919d450db6954aa48e3Michael Kolb sendNetworkType(typeName.toLowerCase(), 728233facddcc51865d612a919d450db6954aa48e3Michael Kolb (subtypeName != null ? subtypeName.toLowerCase() : "")); 7396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease BrowserSettings.getInstance().updateConnectionType(); 748233facddcc51865d612a919d450db6954aa48e3Michael Kolb 75bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt boolean noConnection = intent.getBooleanExtra( 76bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 77bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt 78bf57471e0220ca6db8cb81471dc2b3ddb2863f5bRobert Greenwalt onNetworkToggle(!noConnection); 798233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 808233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 818233facddcc51865d612a919d450db6954aa48e3Michael Kolb }; 828233facddcc51865d612a919d450db6954aa48e3Michael Kolb 838233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 848233facddcc51865d612a919d450db6954aa48e3Michael Kolb 858233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onPause() { 868233facddcc51865d612a919d450db6954aa48e3Michael Kolb // unregister network state listener 878233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity.unregisterReceiver(mNetworkStateIntentReceiver); 888233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 898233facddcc51865d612a919d450db6954aa48e3Michael Kolb 908233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onResume() { 918233facddcc51865d612a919d450db6954aa48e3Michael Kolb mActivity.registerReceiver(mNetworkStateIntentReceiver, 928233facddcc51865d612a919d450db6954aa48e3Michael Kolb mNetworkStateChangedFilter); 9396497838babbaeb143b0fbc7d0de9c695e56e9f7Victoria Lease BrowserSettings.getInstance().updateConnectionType(); 948233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 958233facddcc51865d612a919d450db6954aa48e3Michael Kolb 968233facddcc51865d612a919d450db6954aa48e3Michael Kolb /** 978233facddcc51865d612a919d450db6954aa48e3Michael Kolb * connectivity manager says net has come or gone... inform the user 988233facddcc51865d612a919d450db6954aa48e3Michael Kolb * @param up true if net has come up, false if net has gone down 998233facddcc51865d612a919d450db6954aa48e3Michael Kolb */ 1008233facddcc51865d612a919d450db6954aa48e3Michael Kolb void onNetworkToggle(boolean up) { 1018233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (up == mIsNetworkUp) { 1028233facddcc51865d612a919d450db6954aa48e3Michael Kolb return; 1038233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1048471e9f6aa91a7e97a307304483ec8bcb61b8fddJohn Reck mIsNetworkUp = up; 1058233facddcc51865d612a919d450db6954aa48e3Michael Kolb WebView w = mController.getCurrentWebView(); 1068233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (w != null) { 1078233facddcc51865d612a919d450db6954aa48e3Michael Kolb w.setNetworkAvailable(up); 1088233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1098233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1108233facddcc51865d612a919d450db6954aa48e3Michael Kolb 1118233facddcc51865d612a919d450db6954aa48e3Michael Kolb boolean isNetworkUp() { 1128233facddcc51865d612a919d450db6954aa48e3Michael Kolb return mIsNetworkUp; 1138233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1148233facddcc51865d612a919d450db6954aa48e3Michael Kolb 1158233facddcc51865d612a919d450db6954aa48e3Michael Kolb private void sendNetworkType(String type, String subtype) { 1168233facddcc51865d612a919d450db6954aa48e3Michael Kolb WebView w = mController.getCurrentWebView(); 1178233facddcc51865d612a919d450db6954aa48e3Michael Kolb if (w != null) { 1184d2fcaba7fb8eb1723943ac9a10e76d509330bd1Jonathan Dixon WebViewClassic.fromWebView(w).setNetworkType(type, subtype); 1198233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1208233facddcc51865d612a919d450db6954aa48e3Michael Kolb } 1218233facddcc51865d612a919d450db6954aa48e3Michael Kolb} 122