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.Dialog;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.app.DialogFragment;
21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.os.Bundle;
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.KeyEvent;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.LayoutInflater;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.view.View;
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.MainActivity;
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R;
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/**
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Dialog fragment with full screen.
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class FullscreenDialogFragment extends SafeDismissDialogFragment {
34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final String DIALOG_TAG = FullscreenDialogFragment.class.getSimpleName();
35ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static final String VIEW_LAYOUT_ID = "viewLayoutId";
36ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static final String TRACKER_LABEL = "trackerLabel";
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    /**
39ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * Creates a FullscreenDialogFragment. View class of viewLayoutResId should
40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * implement {@link DialogView}.
41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     */
42ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static FullscreenDialogFragment newInstance(int viewLayoutResId, String trackerLabel) {
43ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        FullscreenDialogFragment f = new FullscreenDialogFragment();
44ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        Bundle args = new Bundle();
45ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        args.putInt(VIEW_LAYOUT_ID, viewLayoutResId);
46ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        args.putString(TRACKER_LABEL, trackerLabel);
47ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        f.setArguments(args);
48ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        return f;
49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
51ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    private String mTrackerLabel;
52ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    private DialogView mDialogView;
53ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
55816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public Dialog onCreateDialog(Bundle savedInstanceState) {
56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        FullscreenDialog dialog =
57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                new FullscreenDialog(getActivity(), R.style.Theme_TV_dialog_Fullscreen);
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        LayoutInflater inflater = LayoutInflater.from(getActivity());
59ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        Bundle args = getArguments();
60ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        mTrackerLabel = args.getString(TRACKER_LABEL);
6148dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        int viewLayoutResId = args.getInt(VIEW_LAYOUT_ID);
6248dadb49248271b01997862e1335912a4f2e189fYoungsang Cho        View v = inflater.inflate(viewLayoutResId, null);
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        dialog.setContentView(v);
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDialogView = (DialogView) v;
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDialogView.initialize((MainActivity) getActivity(), dialog);
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return dialog;
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void onDestroy() {
71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        super.onDestroy();
72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDialogView.onDestroy();
73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    @Override
76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getTrackerLabel() {
77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mTrackerLabel;
78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private class FullscreenDialog extends TvDialog {
81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public FullscreenDialog(Context context, int theme) {
82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super(context, theme);
83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void setContentView(View dialogView) {
87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            super.setContentView(dialogView);
88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mDialogView = (DialogView) dialogView;
89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public boolean dispatchKeyEvent(KeyEvent event) {
93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            boolean handled = super.dispatchKeyEvent(event);
94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return handled || ((View) mDialogView).dispatchKeyEvent(event);
95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        @Override
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        public void onBackPressed() {
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mDialogView.onBackPressed();
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    /**
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * Interface for the view of {@link FullscreenDialogFragment}.
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     */
106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public interface DialogView {
107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        /**
108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         * Called after the view is inflated and attached to the dialog.
109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         */
110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        void initialize(MainActivity activity, Dialog dialog);
111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        /**
112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         * Called when a back key is pressed.
113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         */
114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        void onBackPressed();
115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        /**
116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         * Called when {@link DialogFragment#onDestroy} is called.
117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko         */
118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        void onDestroy();
119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
121