1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/*
2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project
3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License.
6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at
7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software
11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and
14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License.
15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.dialog;
18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.DialogFragment;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle;
21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.support.annotation.Nullable;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.text.TextUtils;
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.util.Log;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.LayoutInflater;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View;
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.ViewGroup;
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.ViewGroup.LayoutParams;
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.webkit.WebView;
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.webkit.WebViewClient;
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/**
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * A DialogFragment that shows a web view.
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class WebDialogFragment extends SafeDismissDialogFragment {
35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TAG = "WebDialogFragment";
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String URL = "URL";
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TITLE = "TITLE";
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private static final String TRACKER_LABEL = "TRACKER_LABEL";
39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private WebView mWebView;
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private String mTrackerLabel;
42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    /**
44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * Create a new WebDialogFragment to show a particular web page.
45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     *
46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * @param url   The URL of the content to show.
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * @param title Optional title for the dialog.
48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     */
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static WebDialogFragment newInstance(String url, @Nullable String title,
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            String trackerLabel) {
51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        WebDialogFragment f = new WebDialogFragment();
52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        Bundle args = new Bundle();
53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        args.putString(URL, url);
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        args.putString(TITLE, title);
55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        args.putString(TRACKER_LABEL, trackerLabel);
56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        f.setArguments(args);
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return f;
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void onCreate(Bundle savedInstanceState) {
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super.onCreate(savedInstanceState);
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        String title = getArguments().getString(TITLE);
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mTrackerLabel = getArguments().getString(TRACKER_LABEL);
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        int style = TextUtils.isEmpty(title) ? DialogFragment.STYLE_NO_TITLE
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                : DialogFragment.STYLE_NORMAL;
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        setStyle(style, 0);
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Nullable
71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public View onCreateView(LayoutInflater inflater, ViewGroup container,
73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            Bundle savedInstanceState) {
74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        String title = getArguments().getString(TITLE);
75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getDialog().setTitle(title);
76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mWebView = new WebView(getActivity());
786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mWebView.setWebViewClient(new WebViewClient());
79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        String url = getArguments().getString(URL);
806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mWebView.loadUrl(url);
81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        Log.d(TAG, "Loading web content from " + url);
82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mWebView;
846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    @Override
876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public void onDestroyView() {
886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        super.onDestroyView();
896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        if (mWebView != null) {
906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mWebView.destroy();
916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void onStart() {
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super.onStart();
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        // Ensure the dialog is fullscreen, even if the webview doesn't have its content yet.
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getTrackerLabel() {
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mTrackerLabel;
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
106