aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/ui/TvOverlayManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/ui/TvOverlayManager.java')
-rw-r--r--src/com/android/tv/ui/TvOverlayManager.java720
1 files changed, 369 insertions, 351 deletions
diff --git a/src/com/android/tv/ui/TvOverlayManager.java b/src/com/android/tv/ui/TvOverlayManager.java
index 9324742e..222fcb3a 100644
--- a/src/com/android/tv/ui/TvOverlayManager.java
+++ b/src/com/android/tv/ui/TvOverlayManager.java
@@ -32,15 +32,14 @@ import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.ViewGroup;
-
-import com.android.tv.ApplicationSingletons;
+import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
import com.android.tv.ChannelTuner;
import com.android.tv.MainActivity;
import com.android.tv.MainActivity.KeyHandlerResultType;
import com.android.tv.R;
import com.android.tv.TimeShiftManager;
-import com.android.tv.TvApplication;
import com.android.tv.TvOptionsManager;
+import com.android.tv.TvSingletons;
import com.android.tv.analytics.Tracker;
import com.android.tv.common.WeakHandler;
import com.android.tv.common.feature.CommonFeatures;
@@ -69,7 +68,6 @@ import com.android.tv.ui.TvTransitionManager.SceneType;
import com.android.tv.ui.sidepanel.SideFragmentManager;
import com.android.tv.ui.sidepanel.parentalcontrols.RatingsFragment;
import com.android.tv.util.TvInputManagerHelper;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -79,122 +77,111 @@ import java.util.List;
import java.util.Queue;
import java.util.Set;
-/**
- * A class responsible for the life cycle and event handling of the pop-ups over TV view.
- */
+/** A class responsible for the life cycle and event handling of the pop-ups over TV view. */
@UiThread
-public class TvOverlayManager {
+public class TvOverlayManager implements AccessibilityStateChangeListener {
private static final String TAG = "TvOverlayManager";
private static final boolean DEBUG = false;
private static final String INTRO_TRACKER_LABEL = "Intro dialog";
@Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {FLAG_HIDE_OVERLAYS_DEFAULT, FLAG_HIDE_OVERLAYS_WITHOUT_ANIMATION,
- FLAG_HIDE_OVERLAYS_KEEP_SCENE, FLAG_HIDE_OVERLAYS_KEEP_DIALOG,
- FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS, FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANEL_HISTORY,
- FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE, FLAG_HIDE_OVERLAYS_KEEP_MENU,
- FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT})
+ @IntDef(
+ flag = true,
+ value = {
+ FLAG_HIDE_OVERLAYS_DEFAULT,
+ FLAG_HIDE_OVERLAYS_WITHOUT_ANIMATION,
+ FLAG_HIDE_OVERLAYS_KEEP_SCENE,
+ FLAG_HIDE_OVERLAYS_KEEP_DIALOG,
+ FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS,
+ FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANEL_HISTORY,
+ FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE,
+ FLAG_HIDE_OVERLAYS_KEEP_MENU,
+ FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT
+ }
+ )
private @interface HideOverlayFlag {}
// FLAG_HIDE_OVERLAYs must be bitwise exclusive.
- public static final int FLAG_HIDE_OVERLAYS_DEFAULT = 0b000000000;
- public static final int FLAG_HIDE_OVERLAYS_WITHOUT_ANIMATION = 0b000000010;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_SCENE = 0b000000100;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_DIALOG = 0b000001000;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS = 0b000010000;
+ public static final int FLAG_HIDE_OVERLAYS_DEFAULT = 0b000000000;
+ public static final int FLAG_HIDE_OVERLAYS_WITHOUT_ANIMATION = 0b000000010;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_SCENE = 0b000000100;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_DIALOG = 0b000001000;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS = 0b000010000;
public static final int FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANEL_HISTORY = 0b000100000;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE = 0b001000000;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_MENU = 0b010000000;
- public static final int FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT = 0b100000000;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE = 0b001000000;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_MENU = 0b010000000;
+ public static final int FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT = 0b100000000;
private static final int MSG_OVERLAY_CLOSED = 1000;
@Retention(RetentionPolicy.SOURCE)
- @IntDef(flag = true,
- value = {OVERLAY_TYPE_NONE, OVERLAY_TYPE_MENU, OVERLAY_TYPE_SIDE_FRAGMENT,
- OVERLAY_TYPE_DIALOG, OVERLAY_TYPE_GUIDE, OVERLAY_TYPE_SCENE_CHANNEL_BANNER,
- OVERLAY_TYPE_SCENE_INPUT_BANNER, OVERLAY_TYPE_SCENE_KEYPAD_CHANNEL_SWITCH,
- OVERLAY_TYPE_SCENE_SELECT_INPUT, OVERLAY_TYPE_FRAGMENT})
+ @IntDef(
+ flag = true,
+ value = {
+ OVERLAY_TYPE_NONE,
+ OVERLAY_TYPE_MENU,
+ OVERLAY_TYPE_SIDE_FRAGMENT,
+ OVERLAY_TYPE_DIALOG,
+ OVERLAY_TYPE_GUIDE,
+ OVERLAY_TYPE_SCENE_CHANNEL_BANNER,
+ OVERLAY_TYPE_SCENE_INPUT_BANNER,
+ OVERLAY_TYPE_SCENE_KEYPAD_CHANNEL_SWITCH,
+ OVERLAY_TYPE_SCENE_SELECT_INPUT,
+ OVERLAY_TYPE_FRAGMENT
+ }
+ )
private @interface TvOverlayType {}
// OVERLAY_TYPEs must be bitwise exclusive.
- /**
- * The overlay type which indicates that there are no overlays.
- */
- private static final int OVERLAY_TYPE_NONE = 0b000000000;
- /**
- * The overlay type for menu.
- */
- private static final int OVERLAY_TYPE_MENU = 0b000000001;
- /**
- * The overlay type for the side fragment.
- */
- private static final int OVERLAY_TYPE_SIDE_FRAGMENT = 0b000000010;
- /**
- * The overlay type for dialog fragment.
- */
- private static final int OVERLAY_TYPE_DIALOG = 0b000000100;
- /**
- * The overlay type for program guide.
- */
- private static final int OVERLAY_TYPE_GUIDE = 0b000001000;
- /**
- * The overlay type for channel banner.
- */
- private static final int OVERLAY_TYPE_SCENE_CHANNEL_BANNER = 0b000010000;
- /**
- * The overlay type for input banner.
- */
- private static final int OVERLAY_TYPE_SCENE_INPUT_BANNER = 0b000100000;
- /**
- * The overlay type for keypad channel switch view.
- */
+ /** The overlay type which indicates that there are no overlays. */
+ private static final int OVERLAY_TYPE_NONE = 0b000000000;
+ /** The overlay type for menu. */
+ private static final int OVERLAY_TYPE_MENU = 0b000000001;
+ /** The overlay type for the side fragment. */
+ private static final int OVERLAY_TYPE_SIDE_FRAGMENT = 0b000000010;
+ /** The overlay type for dialog fragment. */
+ private static final int OVERLAY_TYPE_DIALOG = 0b000000100;
+ /** The overlay type for program guide. */
+ private static final int OVERLAY_TYPE_GUIDE = 0b000001000;
+ /** The overlay type for channel banner. */
+ private static final int OVERLAY_TYPE_SCENE_CHANNEL_BANNER = 0b000010000;
+ /** The overlay type for input banner. */
+ private static final int OVERLAY_TYPE_SCENE_INPUT_BANNER = 0b000100000;
+ /** The overlay type for keypad channel switch view. */
private static final int OVERLAY_TYPE_SCENE_KEYPAD_CHANNEL_SWITCH = 0b001000000;
- /**
- * The overlay type for select input view.
- */
- private static final int OVERLAY_TYPE_SCENE_SELECT_INPUT = 0b010000000;
- /**
- * The overlay type for fragment other than the side fragment and dialog fragment.
- */
- private static final int OVERLAY_TYPE_FRAGMENT = 0b100000000;
+ /** The overlay type for select input view. */
+ private static final int OVERLAY_TYPE_SCENE_SELECT_INPUT = 0b010000000;
+ /** The overlay type for fragment other than the side fragment and dialog fragment. */
+ private static final int OVERLAY_TYPE_FRAGMENT = 0b100000000;
// Used for the padded print of the overlay type.
private static final int NUM_OVERLAY_TYPES = 9;
@Retention(RetentionPolicy.SOURCE)
- @IntDef({UPDATE_CHANNEL_BANNER_REASON_FORCE_SHOW, UPDATE_CHANNEL_BANNER_REASON_TUNE,
- UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST, UPDATE_CHANNEL_BANNER_REASON_UPDATE_INFO,
- UPDATE_CHANNEL_BANNER_REASON_LOCK_OR_UNLOCK,
- UPDATE_CHANNEL_BANNER_REASON_UPDATE_STREAM_INFO})
+ @IntDef({
+ UPDATE_CHANNEL_BANNER_REASON_FORCE_SHOW,
+ UPDATE_CHANNEL_BANNER_REASON_TUNE,
+ UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST,
+ UPDATE_CHANNEL_BANNER_REASON_UPDATE_INFO,
+ UPDATE_CHANNEL_BANNER_REASON_LOCK_OR_UNLOCK,
+ UPDATE_CHANNEL_BANNER_REASON_UPDATE_STREAM_INFO
+ })
private @interface ChannelBannerUpdateReason {}
- /**
- * Updates channel banner because the channel banner is forced to show.
- */
+ /** Updates channel banner because the channel banner is forced to show. */
public static final int UPDATE_CHANNEL_BANNER_REASON_FORCE_SHOW = 1;
- /**
- * Updates channel banner because of tuning.
- */
+ /** Updates channel banner because of tuning. */
public static final int UPDATE_CHANNEL_BANNER_REASON_TUNE = 2;
- /**
- * Updates channel banner because of fast tuning.
- */
+ /** Updates channel banner because of fast tuning. */
public static final int UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST = 3;
- /**
- * Updates channel banner because of info updating.
- */
+ /** Updates channel banner because of info updating. */
public static final int UPDATE_CHANNEL_BANNER_REASON_UPDATE_INFO = 4;
- /**
- * Updates channel banner because the current watched channel is locked or unlocked.
- */
+ /** Updates channel banner because the current watched channel is locked or unlocked. */
public static final int UPDATE_CHANNEL_BANNER_REASON_LOCK_OR_UNLOCK = 5;
- /**
- * Updates channel banner because of stream info updating.
- */
+ /** Updates channel banner because of stream info updating. */
public static final int UPDATE_CHANNEL_BANNER_REASON_UPDATE_STREAM_INFO = 6;
private static final String FRAGMENT_TAG_SETUP_SOURCES = "tag_setup_sources";
private static final String FRAGMENT_TAG_NEW_SOURCES = "tag_new_sources";
private static final Set<String> AVAILABLE_DIALOG_TAGS = new HashSet<>();
+
static {
AVAILABLE_DIALOG_TAGS.add(RecentlyWatchedDialogFragment.DIALOG_TAG);
AVAILABLE_DIALOG_TAGS.add(DvrHistoryDialogFragment.DIALOG_TAG);
@@ -232,14 +219,20 @@ public class TvOverlayManager {
private OnBackStackChangedListener mOnBackStackChangedListener;
- public TvOverlayManager(MainActivity mainActivity, ChannelTuner channelTuner,
- TunableTvView tvView, TvOptionsManager optionsManager,
- KeypadChannelSwitchView keypadChannelSwitchView, ChannelBannerView channelBannerView,
- InputBannerView inputBannerView, SelectInputView selectInputView,
- ViewGroup sceneContainer, ProgramGuideSearchFragment searchFragment) {
+ public TvOverlayManager(
+ MainActivity mainActivity,
+ ChannelTuner channelTuner,
+ TunableTvView tvView,
+ TvOptionsManager optionsManager,
+ KeypadChannelSwitchView keypadChannelSwitchView,
+ ChannelBannerView channelBannerView,
+ InputBannerView inputBannerView,
+ SelectInputView selectInputView,
+ ViewGroup sceneContainer,
+ ProgramGuideSearchFragment searchFragment) {
mMainActivity = mainActivity;
mChannelTuner = channelTuner;
- ApplicationSingletons singletons = TvApplication.getSingletons(mainActivity);
+ TvSingletons singletons = TvSingletons.getSingletons(mainActivity);
mChannelDataManager = singletons.getChannelDataManager();
mInputManager = singletons.getTvInputManagerHelper();
mTvView = tvView;
@@ -248,115 +241,144 @@ public class TvOverlayManager {
mSelectInputView = selectInputView;
mSearchFragment = searchFragment;
mTracker = singletons.getTracker();
- mTransitionManager = new TvTransitionManager(mainActivity, sceneContainer,
- channelBannerView, inputBannerView, mKeypadChannelSwitchView, selectInputView);
- mTransitionManager.setListener(new TvTransitionManager.Listener() {
- @Override
- public void onSceneChanged(int fromScene, int toScene) {
- // Call onOverlayOpened first so that the listener can know that a new scene
- // will be opened when the onOverlayClosed is called.
- if (toScene != TvTransitionManager.SCENE_TYPE_EMPTY) {
- onOverlayOpened(convertSceneToOverlayType(toScene));
- }
- if (fromScene != TvTransitionManager.SCENE_TYPE_EMPTY) {
- onOverlayClosed(convertSceneToOverlayType(fromScene));
- }
- }
- });
- // Menu
- MenuView menuView = (MenuView) mainActivity.findViewById(R.id.menu);
- mMenu = new Menu(mainActivity, tvView, optionsManager, menuView,
- new MenuRowFactory(mainActivity, tvView),
- new Menu.OnMenuVisibilityChangeListener() {
+ mTransitionManager =
+ new TvTransitionManager(
+ mainActivity,
+ sceneContainer,
+ channelBannerView,
+ inputBannerView,
+ mKeypadChannelSwitchView,
+ selectInputView);
+ mTransitionManager.setListener(
+ new TvTransitionManager.Listener() {
@Override
- public void onMenuVisibilityChange(boolean visible) {
- if (visible) {
- onOverlayOpened(OVERLAY_TYPE_MENU);
- } else {
- onOverlayClosed(OVERLAY_TYPE_MENU);
+ public void onSceneChanged(int fromScene, int toScene) {
+ // Call onOverlayOpened first so that the listener can know that a new scene
+ // will be opened when the onOverlayClosed is called.
+ if (toScene != TvTransitionManager.SCENE_TYPE_EMPTY) {
+ onOverlayOpened(convertSceneToOverlayType(toScene));
+ }
+ if (fromScene != TvTransitionManager.SCENE_TYPE_EMPTY) {
+ onOverlayClosed(convertSceneToOverlayType(fromScene));
}
}
});
+ // Menu
+ MenuView menuView = (MenuView) mainActivity.findViewById(R.id.menu);
+ mMenu =
+ new Menu(
+ mainActivity,
+ tvView,
+ optionsManager,
+ menuView,
+ new MenuRowFactory(mainActivity, tvView),
+ new Menu.OnMenuVisibilityChangeListener() {
+ @Override
+ public void onMenuVisibilityChange(boolean visible) {
+ if (visible) {
+ onOverlayOpened(OVERLAY_TYPE_MENU);
+ } else {
+ onOverlayClosed(OVERLAY_TYPE_MENU);
+ }
+ }
+ });
mMenu.setChannelTuner(mChannelTuner);
// Side Fragment
- mSideFragmentManager = new SideFragmentManager(mainActivity,
+ mSideFragmentManager =
+ new SideFragmentManager(
+ mainActivity,
+ new Runnable() {
+ @Override
+ public void run() {
+ onOverlayOpened(OVERLAY_TYPE_SIDE_FRAGMENT);
+ hideOverlays(FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS);
+ }
+ },
+ new Runnable() {
+ @Override
+ public void run() {
+ showChannelBannerIfHiddenBySideFragment();
+ onOverlayClosed(OVERLAY_TYPE_SIDE_FRAGMENT);
+ }
+ });
+ // Program Guide
+ Runnable preShowRunnable =
new Runnable() {
@Override
public void run() {
- onOverlayOpened(OVERLAY_TYPE_SIDE_FRAGMENT);
- hideOverlays(FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS);
+ onOverlayOpened(OVERLAY_TYPE_GUIDE);
}
- },
+ };
+ Runnable postHideRunnable =
new Runnable() {
@Override
public void run() {
- showChannelBannerIfHiddenBySideFragment();
- onOverlayClosed(OVERLAY_TYPE_SIDE_FRAGMENT);
+ onOverlayClosed(OVERLAY_TYPE_GUIDE);
}
- });
- // Program Guide
- Runnable preShowRunnable = new Runnable() {
- @Override
- public void run() {
- onOverlayOpened(OVERLAY_TYPE_GUIDE);
- }
- };
- Runnable postHideRunnable = new Runnable() {
- @Override
- public void run() {
- onOverlayClosed(OVERLAY_TYPE_GUIDE);
- }
- };
- DvrDataManager dvrDataManager = CommonFeatures.DVR.isEnabled(mainActivity)
- ? singletons.getDvrDataManager() : null;
- mProgramGuide = new ProgramGuide(mainActivity, channelTuner,
- singletons.getTvInputManagerHelper(), mChannelDataManager,
- singletons.getProgramDataManager(), dvrDataManager,
- singletons.getDvrScheduleManager(), singletons.getTracker(), preShowRunnable,
- postHideRunnable);
- mMainActivity.addOnActionClickListener(new OnActionClickListener() {
- @Override
- public boolean onActionClick(String category, int id, Bundle params) {
- switch (category) {
- case SetupSourcesFragment.ACTION_CATEGORY:
- switch (id) {
- case SetupMultiPaneFragment.ACTION_DONE:
- closeSetupFragment(true);
- return true;
- case SetupSourcesFragment.ACTION_ONLINE_STORE:
- mMainActivity.showMerchantCollection();
- return true;
- case SetupSourcesFragment.ACTION_SETUP_INPUT: {
- String inputId = params.getString(
- SetupSourcesFragment.ACTION_PARAM_KEY_INPUT_ID);
- TvInputInfo input = mInputManager.getTvInputInfo(inputId);
- mMainActivity.startSetupActivity(input, true);
- return true;
- }
- }
- break;
- case NewSourcesFragment.ACTION_CATEOGRY:
- switch (id) {
- case NewSourcesFragment.ACTION_SETUP:
- closeNewSourcesFragment(false);
- showSetupFragment();
- return true;
- case NewSourcesFragment.ACTION_SKIP:
- // Don't remove the fragment because new fragment will be replaced
- // with this fragment.
- closeNewSourcesFragment(true);
- return true;
+ };
+ DvrDataManager dvrDataManager =
+ CommonFeatures.DVR.isEnabled(mainActivity) ? singletons.getDvrDataManager() : null;
+ mProgramGuide =
+ new ProgramGuide(
+ mainActivity,
+ channelTuner,
+ singletons.getTvInputManagerHelper(),
+ mChannelDataManager,
+ singletons.getProgramDataManager(),
+ dvrDataManager,
+ singletons.getDvrScheduleManager(),
+ singletons.getTracker(),
+ preShowRunnable,
+ postHideRunnable);
+ mMainActivity.addOnActionClickListener(
+ new OnActionClickListener() {
+ @Override
+ public boolean onActionClick(String category, int id, Bundle params) {
+ switch (category) {
+ case SetupSourcesFragment.ACTION_CATEGORY:
+ switch (id) {
+ case SetupMultiPaneFragment.ACTION_DONE:
+ closeSetupFragment(true);
+ return true;
+ case SetupSourcesFragment.ACTION_ONLINE_STORE:
+ mMainActivity.showMerchantCollection();
+ return true;
+ case SetupSourcesFragment.ACTION_SETUP_INPUT:
+ {
+ String inputId =
+ params.getString(
+ SetupSourcesFragment
+ .ACTION_PARAM_KEY_INPUT_ID);
+ TvInputInfo input =
+ mInputManager.getTvInputInfo(inputId);
+ mMainActivity.startSetupActivity(input, true);
+ return true;
+ }
+ }
+ break;
+ case NewSourcesFragment.ACTION_CATEOGRY:
+ switch (id) {
+ case NewSourcesFragment.ACTION_SETUP:
+ closeNewSourcesFragment(false);
+ showSetupFragment();
+ return true;
+ case NewSourcesFragment.ACTION_SKIP:
+ // Don't remove the fragment because new fragment will be
+ // replaced
+ // with this fragment.
+ closeNewSourcesFragment(true);
+ return true;
+ }
+ break;
}
- break;
- }
- return false;
- }
- });
+ return false;
+ }
+ });
}
/**
- * A method to release all the allocated resources or unregister listeners.
- * This is called from {@link MainActivity#onDestroy}.
+ * A method to release all the allocated resources or unregister listeners. This is called from
+ * {@link MainActivity#onDestroy}.
*/
public void release() {
mMenu.release();
@@ -366,30 +388,22 @@ public class TvOverlayManager {
}
}
- /**
- * Returns the instance of {@link Menu}.
- */
+ /** Returns the instance of {@link Menu}. */
public Menu getMenu() {
return mMenu;
}
- /**
- * Returns the instance of {@link SideFragmentManager}.
- */
+ /** Returns the instance of {@link SideFragmentManager}. */
public SideFragmentManager getSideFragmentManager() {
return mSideFragmentManager;
}
- /**
- * Returns the currently opened dialog.
- */
+ /** Returns the currently opened dialog. */
public SafeDismissDialogFragment getCurrentDialog() {
return mCurrentDialog;
}
- /**
- * Checks whether the setup fragment is active or not.
- */
+ /** Checks whether the setup fragment is active or not. */
public boolean isSetupFragmentActive() {
// "getSetupSourcesFragment() != null" doesn't return the correct state. That's because,
// when we call showSetupFragment(), we need to put off showing the fragment until the side
@@ -402,9 +416,7 @@ public class TvOverlayManager {
return mMainActivity.getFragmentManager().findFragmentByTag(FRAGMENT_TAG_SETUP_SOURCES);
}
- /**
- * Checks whether the new sources fragment is active or not.
- */
+ /** Checks whether the new sources fragment is active or not. */
public boolean isNewSourcesFragmentActive() {
// See the comment in "isSetupFragmentActive".
return mNewSourcesFragmentActive;
@@ -414,25 +426,19 @@ public class TvOverlayManager {
return mMainActivity.getFragmentManager().findFragmentByTag(FRAGMENT_TAG_NEW_SOURCES);
}
- /**
- * Returns the instance of {@link ProgramGuide}.
- */
+ /** Returns the instance of {@link ProgramGuide}. */
public ProgramGuide getProgramGuide() {
return mProgramGuide;
}
- /**
- * Shows the main menu.
- */
+ /** Shows the main menu. */
public void showMenu(@MenuShowReason int reason) {
if (mChannelTuner != null && mChannelTuner.areAllChannelsLoaded()) {
mMenu.show(reason);
}
}
- /**
- * Shows the play controller of the menu if the playback is paused.
- */
+ /** Shows the play controller of the menu if the playback is paused. */
public boolean showMenuWithTimeShiftPauseIfNeeded() {
if (mMainActivity.getTimeShiftManager().isPaused()) {
showMenu(Menu.REASON_PLAY_CONTROLS_PAUSE);
@@ -441,16 +447,17 @@ public class TvOverlayManager {
return false;
}
- /**
- * Shows the given dialog.
- */
- public void showDialogFragment(String tag, SafeDismissDialogFragment dialog,
- boolean keepSidePanelHistory) {
+ /** Shows the given dialog. */
+ public void showDialogFragment(
+ String tag, SafeDismissDialogFragment dialog, boolean keepSidePanelHistory) {
showDialogFragment(tag, dialog, keepSidePanelHistory, false);
}
- public void showDialogFragment(String tag, SafeDismissDialogFragment dialog,
- boolean keepSidePanelHistory, boolean keepProgramGuide) {
+ public void showDialogFragment(
+ String tag,
+ SafeDismissDialogFragment dialog,
+ boolean keepSidePanelHistory,
+ boolean keepProgramGuide) {
int flags = FLAG_HIDE_OVERLAYS_KEEP_DIALOG;
if (keepSidePanelHistory) {
flags |= FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANEL_HISTORY;
@@ -466,8 +473,8 @@ public class TvOverlayManager {
// Do not open two dialogs at the same time.
if (mCurrentDialog != null) {
- mPendingDialogActionQueue.offer(new PendingDialogAction(tag, dialog,
- keepSidePanelHistory, keepProgramGuide));
+ mPendingDialogActionQueue.offer(
+ new PendingDialogAction(tag, dialog, keepSidePanelHistory, keepProgramGuide));
return;
}
@@ -492,16 +499,17 @@ public class TvOverlayManager {
// When the side panel is closing, it closes all the fragments, so the new fragment
// should be opened after the side fragment becomes invisible.
final FragmentManager manager = mMainActivity.getFragmentManager();
- mOnBackStackChangedListener = new OnBackStackChangedListener() {
- @Override
- public void onBackStackChanged() {
- if (manager.getBackStackEntryCount() == 0) {
- manager.removeOnBackStackChangedListener(this);
- mOnBackStackChangedListener = null;
- runnable.run();
- }
- }
- };
+ mOnBackStackChangedListener =
+ new OnBackStackChangedListener() {
+ @Override
+ public void onBackStackChanged() {
+ if (manager.getBackStackEntryCount() == 0) {
+ manager.removeOnBackStackChangedListener(this);
+ mOnBackStackChangedListener = null;
+ runnable.run();
+ }
+ }
+ };
manager.addOnBackStackChangedListener(mOnBackStackChangedListener);
} else {
runnable.run();
@@ -511,46 +519,54 @@ public class TvOverlayManager {
private void showFragment(final Fragment fragment, final String tag) {
hideOverlays(FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT);
onOverlayOpened(OVERLAY_TYPE_FRAGMENT);
- runAfterSideFragmentsAreClosed(new Runnable() {
- @Override
- public void run() {
- if (DEBUG) Log.d(TAG, "showFragment(" + fragment + ")");
- mMainActivity.getFragmentManager().beginTransaction()
- .replace(R.id.fragment_container, fragment, tag).commit();
- }
- });
+ runAfterSideFragmentsAreClosed(
+ new Runnable() {
+ @Override
+ public void run() {
+ if (DEBUG) Log.d(TAG, "showFragment(" + fragment + ")");
+ mMainActivity
+ .getFragmentManager()
+ .beginTransaction()
+ .replace(R.id.fragment_container, fragment, tag)
+ .commit();
+ }
+ });
}
private void closeFragment(String fragmentTagToRemove) {
if (DEBUG) Log.d(TAG, "closeFragment(" + fragmentTagToRemove + ")");
onOverlayClosed(OVERLAY_TYPE_FRAGMENT);
if (fragmentTagToRemove != null) {
- Fragment fragmentToRemove = mMainActivity.getFragmentManager()
- .findFragmentByTag(fragmentTagToRemove);
+ Fragment fragmentToRemove =
+ mMainActivity.getFragmentManager().findFragmentByTag(fragmentTagToRemove);
if (fragmentToRemove == null) {
// If the fragment has not been added to the fragment manager yet, just remove the
// listener not to add the fragment. This is needed because the side fragment is
// closed asynchronously.
- mMainActivity.getFragmentManager().removeOnBackStackChangedListener(
- mOnBackStackChangedListener);
+ mMainActivity
+ .getFragmentManager()
+ .removeOnBackStackChangedListener(mOnBackStackChangedListener);
mOnBackStackChangedListener = null;
} else {
- mMainActivity.getFragmentManager().beginTransaction().remove(fragmentToRemove)
+ mMainActivity
+ .getFragmentManager()
+ .beginTransaction()
+ .remove(fragmentToRemove)
.commit();
}
}
}
- /**
- * Shows setup dialog.
- */
+ /** Shows setup dialog. */
public void showSetupFragment() {
if (DEBUG) Log.d(TAG, "showSetupFragment");
mSetupFragmentActive = true;
SetupSourcesFragment setupFragment = new SetupSourcesFragment();
- setupFragment.enableFragmentTransition(SetupFragment.FRAGMENT_ENTER_TRANSITION
- | SetupFragment.FRAGMENT_EXIT_TRANSITION | SetupFragment.FRAGMENT_RETURN_TRANSITION
- | SetupFragment.FRAGMENT_REENTER_TRANSITION);
+ setupFragment.enableFragmentTransition(
+ SetupFragment.FRAGMENT_ENTER_TRANSITION
+ | SetupFragment.FRAGMENT_EXIT_TRANSITION
+ | SetupFragment.FRAGMENT_RETURN_TRANSITION
+ | SetupFragment.FRAGMENT_REENTER_TRANSITION);
setupFragment.setFragmentTransition(SetupFragment.FRAGMENT_EXIT_TRANSITION, Gravity.END);
showFragment(setupFragment, FRAGMENT_TAG_SETUP_SOURCES);
}
@@ -569,9 +585,7 @@ public class TvOverlayManager {
}
}
- /**
- * Shows new sources dialog.
- */
+ /** Shows new sources dialog. */
public void showNewSourcesFragment() {
if (DEBUG) Log.d(TAG, "showNewSourcesFragment");
mNewSourcesFragmentActive = true;
@@ -588,43 +602,36 @@ public class TvOverlayManager {
closeFragment(removeFragment ? FRAGMENT_TAG_NEW_SOURCES : null);
}
- /**
- * Shows DVR manager.
- */
+ /** Shows DVR manager. */
public void showDvrManager() {
Intent intent = new Intent(mMainActivity, DvrBrowseActivity.class);
mMainActivity.startActivity(intent);
}
- /**
- * Shows intro dialog.
- */
+ /** Shows intro dialog. */
public void showIntroDialog() {
- if (DEBUG) Log.d(TAG,"showIntroDialog");
- showDialogFragment(FullscreenDialogFragment.DIALOG_TAG,
+ if (DEBUG) Log.d(TAG, "showIntroDialog");
+ showDialogFragment(
+ FullscreenDialogFragment.DIALOG_TAG,
FullscreenDialogFragment.newInstance(R.layout.intro_dialog, INTRO_TRACKER_LABEL),
false);
}
- /**
- * Shows recently watched dialog.
- */
+ /** Shows recently watched dialog. */
public void showRecentlyWatchedDialog() {
- showDialogFragment(RecentlyWatchedDialogFragment.DIALOG_TAG,
- new RecentlyWatchedDialogFragment(), false);
+ showDialogFragment(
+ RecentlyWatchedDialogFragment.DIALOG_TAG,
+ new RecentlyWatchedDialogFragment(),
+ false);
}
- /**
- * Shows DVR history dialog.
- */
+ /** Shows DVR history dialog. */
public void showDvrHistoryDialog() {
- showDialogFragment(DvrHistoryDialogFragment.DIALOG_TAG,
- new DvrHistoryDialogFragment(), false);
+ showDialogFragment(
+ DvrHistoryDialogFragment.DIALOG_TAG, new DvrHistoryDialogFragment(), false);
}
- /**
- * Shows banner view.
- */
+ /** Shows banner view. */
public void showBanner() {
mTransitionManager.goToChannelBannerScene();
}
@@ -636,33 +643,28 @@ public class TvOverlayManager {
*/
public void showKeypadChannelSwitch(int keyCode) {
if (mChannelTuner.areAllChannelsLoaded()) {
- hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SCENE
- | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS
- | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_DIALOG
- | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT);
+ hideOverlays(
+ TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SCENE
+ | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS
+ | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_DIALOG
+ | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT);
mTransitionManager.goToKeypadChannelSwitchScene();
mKeypadChannelSwitchView.onNumberKeyUp(keyCode - KeyEvent.KEYCODE_0);
}
}
- /**
- * Shows select input view.
- */
+ /** Shows select input view. */
public void showSelectInputView() {
hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SCENE);
mTransitionManager.goToSelectInputScene();
}
- /**
- * Initializes animators if animators are not initialized yet.
- */
+ /** Initializes animators if animators are not initialized yet. */
public void initAnimatorIfNeeded() {
mTransitionManager.initIfNeeded();
}
- /**
- * It is called when a SafeDismissDialogFragment is destroyed.
- */
+ /** It is called when a SafeDismissDialogFragment is destroyed. */
public void onDialogDestroyed() {
mCurrentDialog = null;
PendingDialogAction action = mPendingDialogActionQueue.poll();
@@ -673,16 +675,15 @@ public class TvOverlayManager {
}
}
- /**
- * Shows the program guide.
- */
+ /** Shows the program guide. */
public void showProgramGuide() {
- mProgramGuide.show(new Runnable() {
- @Override
- public void run() {
- hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE);
- }
- });
+ mProgramGuide.show(
+ new Runnable() {
+ @Override
+ public void run() {
+ hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_PROGRAM_GUIDE);
+ }
+ });
}
/**
@@ -700,9 +701,7 @@ public class TvOverlayManager {
}
}
- /**
- * Sets blocking content rating of the currently playing TV channel.
- */
+ /** Sets blocking content rating of the currently playing TV channel. */
public void setBlockingContentRating(TvContentRating rating) {
if (!mMainActivity.isChannelChangeKeyDownReceived()) {
mChannelBannerView.setBlockingContentRating(rating);
@@ -710,9 +709,11 @@ public class TvOverlayManager {
}
}
- /**
- * Hides all the opened overlays according to the flags.
- */
+ public boolean isOverlayOpened() {
+ return mOpenedOverlays != OVERLAY_TYPE_NONE;
+ }
+
+ /** Hides all the opened overlays according to the flags. */
// TODO: Add test for this method.
public void hideOverlays(@HideOverlayFlag int flags) {
if (mMainActivity.needToKeepSetupScreenWhenHidingOverlay()) {
@@ -780,9 +781,17 @@ public class TvOverlayManager {
}
}
+ @Override
+ public void onAccessibilityStateChanged(boolean enabled) {
+ // Propagate this to all elements that need it
+ mChannelBannerView.onAccessibilityStateChanged(enabled);
+ mProgramGuide.onAccessibilityStateChanged(enabled);
+ mSideFragmentManager.onAccessibilityStateChanged(enabled);
+ }
+
/**
- * Returns true, if a main view needs to hide informational text. Specifically, when overlay
- * UIs except banner is shown, the informational text needs to be hidden for clean UI.
+ * Returns true, if a main view needs to hide informational text. Specifically, when overlay UIs
+ * except banner is shown, the informational text needs to be hidden for clean UI.
*/
public boolean needHideTextOnMainView() {
return mSideFragmentManager.isActive()
@@ -793,11 +802,9 @@ public class TvOverlayManager {
|| mNewSourcesFragmentActive;
}
- /**
- * Updates and shows channel banner if it's needed.
- */
+ /** Updates and shows channel banner if it's needed. */
public void updateChannelBannerAndShowIfNeeded(@ChannelBannerUpdateReason int reason) {
- if(DEBUG) Log.d(TAG, "updateChannelBannerAndShowIfNeeded(reason=" + reason + ")");
+ if (DEBUG) Log.d(TAG, "updateChannelBannerAndShowIfNeeded(reason=" + reason + ")");
if (mMainActivity.isChannelChangeKeyDownReceived()
&& reason != UPDATE_CHANNEL_BANNER_REASON_TUNE
&& reason != UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST) {
@@ -826,8 +833,9 @@ public class TvOverlayManager {
}
} else if (mTvView.isScreenBlocked()) {
lockType = ChannelBannerView.LOCK_CHANNEL_INFO;
- } else if (mTvView.isContentBlocked() || (mMainActivity.getParentalControlSettings()
- .isParentalControlsEnabled() && !mTvView.isVideoOrAudioAvailable())) {
+ } else if (mTvView.isContentBlocked()
+ || (mMainActivity.getParentalControlSettings().isParentalControlsEnabled()
+ && !mTvView.isVideoOrAudioAvailable())) {
// If the parental control is enabled, do not show the program detail until the
// video becomes available.
lockType = ChannelBannerView.LOCK_PROGRAM_DETAIL;
@@ -843,19 +851,22 @@ public class TvOverlayManager {
// If parental control is enabled, we shows program description when the video is
// available, instead of tuning. Therefore we need to check it here if the program
// description is previously hidden by parental control.
- if (previousLockType == ChannelBannerView.LOCK_PROGRAM_DETAIL &&
- lockType != ChannelBannerView.LOCK_PROGRAM_DETAIL) {
+ if (previousLockType == ChannelBannerView.LOCK_PROGRAM_DETAIL
+ && lockType != ChannelBannerView.LOCK_PROGRAM_DETAIL) {
mChannelBannerView.updateViews(false);
}
} else {
- mChannelBannerView.updateViews(reason == UPDATE_CHANNEL_BANNER_REASON_TUNE
- || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST);
+ mChannelBannerView.updateViews(
+ reason == UPDATE_CHANNEL_BANNER_REASON_TUNE
+ || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST);
}
}
- boolean needToShowBanner = (reason == UPDATE_CHANNEL_BANNER_REASON_FORCE_SHOW
- || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE
- || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST);
- if (needToShowBanner && !mMainActivity.willShowOverlayUiWhenResume()
+ boolean needToShowBanner =
+ (reason == UPDATE_CHANNEL_BANNER_REASON_FORCE_SHOW
+ || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE
+ || reason == UPDATE_CHANNEL_BANNER_REASON_TUNE_FAST);
+ if (needToShowBanner
+ && !mMainActivity.willShowOverlayUiWhenResume()
&& getCurrentDialog() == null
&& !isSetupFragmentActive()
&& !isNewSourcesFragmentActive()) {
@@ -870,7 +881,8 @@ public class TvOverlayManager {
}
}
- @TvOverlayType private int convertSceneToOverlayType(@SceneType int sceneType) {
+ @TvOverlayType
+ private int convertSceneToOverlayType(@SceneType int sceneType) {
switch (sceneType) {
case TvTransitionManager.SCENE_TYPE_CHANNEL_BANNER:
return OVERLAY_TYPE_SCENE_CHANNEL_BANNER;
@@ -940,13 +952,13 @@ public class TvOverlayManager {
}
private boolean isOnlyBannerOrNoneOpened() {
- return (mOpenedOverlays & ~OVERLAY_TYPE_SCENE_CHANNEL_BANNER
- & ~OVERLAY_TYPE_SCENE_INPUT_BANNER) == 0;
+ return (mOpenedOverlays
+ & ~OVERLAY_TYPE_SCENE_CHANNEL_BANNER
+ & ~OVERLAY_TYPE_SCENE_INPUT_BANNER)
+ == 0;
}
- /**
- * Runs a given {@code action} after all the overlays are closed.
- */
+ /** Runs a given {@code action} after all the overlays are closed. */
public void runAfterOverlaysAreClosed(Runnable action) {
if (canExecuteCloseAction()) {
action.run();
@@ -955,9 +967,7 @@ public class TvOverlayManager {
}
}
- /**
- * Handles the onUserInteraction event of the {@link MainActivity}.
- */
+ /** Handles the onUserInteraction event of the {@link MainActivity}. */
public void onUserInteraction() {
if (mSideFragmentManager.isActive()) {
mSideFragmentManager.scheduleHideAll();
@@ -968,10 +978,9 @@ public class TvOverlayManager {
}
}
- /**
- * Handles the onKeyDown event of the {@link MainActivity}.
- */
- @KeyHandlerResultType public int onKeyDown(int keyCode, KeyEvent event) {
+ /** Handles the onKeyDown event of the {@link MainActivity}. */
+ @KeyHandlerResultType
+ public int onKeyDown(int keyCode, KeyEvent event) {
if (mCurrentDialog != null) {
// Consumes the keys while a Dialog is creating.
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
@@ -981,31 +990,34 @@ public class TvOverlayManager {
// Consumes the keys which may trigger system's default music player.
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
}
- if (mMenu.isActive() || mSideFragmentManager.isActive() || mProgramGuide.isActive()
- || mSetupFragmentActive || mNewSourcesFragmentActive) {
+ if (mMenu.isActive()
+ || mSideFragmentManager.isActive()
+ || mProgramGuide.isActive()
+ || mSetupFragmentActive
+ || mNewSourcesFragmentActive) {
return MainActivity.KEY_EVENT_HANDLER_RESULT_DISPATCH_TO_OVERLAY;
}
if (mTransitionManager.isKeypadChannelSwitchActive()) {
- return mKeypadChannelSwitchView.onKeyDown(keyCode, event) ?
- MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
+ return mKeypadChannelSwitchView.onKeyDown(keyCode, event)
+ ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
: MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED;
}
if (mTransitionManager.isSelectInputActive()) {
- return mSelectInputView.onKeyDown(keyCode, event) ?
- MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
+ return mSelectInputView.onKeyDown(keyCode, event)
+ ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
: MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED;
}
return MainActivity.KEY_EVENT_HANDLER_RESULT_PASSTHROUGH;
}
- /**
- * Handles the onKeyUp event of the {@link MainActivity}.
- */
- @KeyHandlerResultType public int onKeyUp(int keyCode, KeyEvent event) {
+ /** Handles the onKeyUp event of the {@link MainActivity}. */
+ @KeyHandlerResultType
+ public int onKeyUp(int keyCode, KeyEvent event) {
// Handle media key here because it is related to the menu.
if (isMediaStartKey(keyCode)) {
// The media key should not be passed up to the system in any cases.
- if (mCurrentDialog != null || mProgramGuide.isActive()
+ if (mCurrentDialog != null
+ || mProgramGuide.isActive()
|| mSideFragmentManager.isActive()
|| mSearchFragment.isVisible()
|| mTransitionManager.isKeypadChannelSwitchActive()
@@ -1015,6 +1027,10 @@ public class TvOverlayManager {
// Do not handle media key when any pop-ups which can handle keys are active.
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
}
+ if (mTvView.isScreenBlocked()) {
+ // Do not handle media key when screen is blocked.
+ return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
+ }
TimeShiftManager timeShiftManager = mMainActivity.getTimeShiftManager();
if (!timeShiftManager.isAvailable()) {
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
@@ -1091,9 +1107,10 @@ public class TvOverlayManager {
if (timeShiftManager.isPaused()) {
timeShiftManager.play();
}
- hideOverlays(TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS
- | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_DIALOG
- | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT);
+ hideOverlays(
+ TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_SIDE_PANELS
+ | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_DIALOG
+ | TvOverlayManager.FLAG_HIDE_OVERLAYS_KEEP_FRAGMENT);
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
}
if (mMenu.isActive()) {
@@ -1109,8 +1126,8 @@ public class TvOverlayManager {
mTransitionManager.goToEmptyScene(true);
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
}
- return mKeypadChannelSwitchView.onKeyUp(keyCode, event) ?
- MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
+ return mKeypadChannelSwitchView.onKeyUp(keyCode, event)
+ ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
: MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED;
}
if (mTransitionManager.isSelectInputActive()) {
@@ -1118,8 +1135,8 @@ public class TvOverlayManager {
mTransitionManager.goToEmptyScene(true);
return MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED;
}
- return mSelectInputView.onKeyUp(keyCode, event) ?
- MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
+ return mSelectInputView.onKeyUp(keyCode, event)
+ ? MainActivity.KEY_EVENT_HANDLER_RESULT_HANDLED
: MainActivity.KEY_EVENT_HANDLER_RESULT_NOT_HANDLED;
}
if (mSetupFragmentActive) {
@@ -1139,9 +1156,7 @@ public class TvOverlayManager {
return MainActivity.KEY_EVENT_HANDLER_RESULT_PASSTHROUGH;
}
- /**
- * Checks whether the given {@code keyCode} can start the system's music app or not.
- */
+ /** Checks whether the given {@code keyCode} can start the system's music app or not. */
private static boolean isMediaStartKey(int keyCode) {
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
@@ -1190,8 +1205,11 @@ public class TvOverlayManager {
private final boolean mKeepSidePanelHistory;
private final boolean mKeepProgramGuide;
- PendingDialogAction(String tag, SafeDismissDialogFragment dialog,
- boolean keepSidePanelHistory, boolean keepProgramGuide) {
+ PendingDialogAction(
+ String tag,
+ SafeDismissDialogFragment dialog,
+ boolean keepSidePanelHistory,
+ boolean keepProgramGuide) {
mTag = tag;
mDialog = dialog;
mKeepSidePanelHistory = keepSidePanelHistory;