11916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block/* 21916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Copyright (C) 2010 The Android Open Source Project 31916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * 41916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Licensed under the Apache License, Version 2.0 (the "License"); 51916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * you may not use this file except in compliance with the License. 61916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * You may obtain a copy of the License at 71916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * 81916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * http://www.apache.org/licenses/LICENSE-2.0 91916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * 101916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Unless required by applicable law or agreed to in writing, software 111916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * distributed under the License is distributed on an "AS IS" BASIS, 121916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * See the License for the specific language governing permissions and 141916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * limitations under the License. 151916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 161916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 171916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockpackage android.webkit; 181916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 191916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.app.Fragment; 201916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.os.Bundle; 211916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.view.LayoutInflater; 221916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.view.View; 231916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.view.ViewGroup; 241916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockimport android.webkit.WebView; 251916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 261916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block/** 271916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * A fragment that displays a WebView. 281916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * <p> 291916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * The WebView is automically paused or resumed when the Fragment is paused or resumed. 301916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 311916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Blockpublic class WebViewFragment extends Fragment { 321916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block private WebView mWebView; 33071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block private boolean mIsWebViewAvailable; 341916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 351916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public WebViewFragment() { 361916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 371916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 381916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block /** 391916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Called to instantiate the view. Creates and returns the WebView. 401916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 411916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block @Override 421916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public View onCreateView(LayoutInflater inflater, ViewGroup container, 431916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block Bundle savedInstanceState) { 44071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block if (mWebView != null) { 45071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block mWebView.destroy(); 46071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block } 4731479e33e6692444604219534d06009cdb7e7c33Adam Powell mWebView = new WebView(getContext()); 48071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block mIsWebViewAvailable = true; 491916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block return mWebView; 501916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 511916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 521916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block /** 531916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Called when the fragment is visible to the user and actively running. Resumes the WebView. 541916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 551916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block @Override 561916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public void onPause() { 571916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block super.onPause(); 581916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block mWebView.onPause(); 591916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 601916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 611916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block /** 621916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Called when the fragment is no longer resumed. Pauses the WebView. 631916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 641916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block @Override 651916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public void onResume() { 661916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block mWebView.onResume(); 671916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block super.onResume(); 681916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 691916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 701916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block /** 71071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block * Called when the WebView has been detached from the fragment. 72071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block * The WebView is no longer available after this time. 731916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 741916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block @Override 751916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public void onDestroyView() { 76071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block mIsWebViewAvailable = false; 771916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block super.onDestroyView(); 781916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 791916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block 801916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block /** 81071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block * Called when the fragment is no longer in use. Destroys the internal state of the WebView. 82071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block */ 83071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block @Override 84071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block public void onDestroy() { 85071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block if (mWebView != null) { 86071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block mWebView.destroy(); 87071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block mWebView = null; 88071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block } 89071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block super.onDestroy(); 90071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block } 91071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block 92071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block /** 931916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block * Gets the WebView. 941916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block */ 951916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block public WebView getWebView() { 96071970d9d64ddbeb77f9c7a986a98c59f0f32f0cSteve Block return mIsWebViewAvailable ? mWebView : null; 971916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block } 981916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block} 99