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        }
471916e7f3a341f9b25571ca4bde8ea1d8a22d815aSteve Block        mWebView = new WebView(getActivity());
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