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