diff options
Diffstat (limited to 'src/com/android/tv/TvOptionsManager.java')
-rw-r--r-- | src/com/android/tv/TvOptionsManager.java | 133 |
1 files changed, 96 insertions, 37 deletions
diff --git a/src/com/android/tv/TvOptionsManager.java b/src/com/android/tv/TvOptionsManager.java index 493e039c..7871cbe7 100644 --- a/src/com/android/tv/TvOptionsManager.java +++ b/src/com/android/tv/TvOptionsManager.java @@ -18,13 +18,14 @@ package com.android.tv; import android.content.Context; import android.media.tv.TvTrackInfo; -import android.support.annotation.IntDef; import android.util.SparseArray; import com.android.tv.data.DisplayMode; +import com.android.tv.util.TvSettings; +import com.android.tv.util.TvSettings.PipLayout; +import com.android.tv.util.TvSettings.PipSize; +import com.android.tv.util.TvSettings.PipSound; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; import java.util.Locale; /** @@ -32,34 +33,39 @@ import java.util.Locale; * captions and display mode. Can be also used to create MenuAction items to control such options. */ public class TvOptionsManager { - @Retention(RetentionPolicy.SOURCE) - @IntDef({OPTION_CLOSED_CAPTIONS, OPTION_DISPLAY_MODE, OPTION_SYSTEMWIDE_PIP, OPTION_MULTI_AUDIO, - OPTION_MORE_CHANNELS, OPTION_DEVELOPER, OPTION_SETTINGS}) - public @interface OptionType {} public static final int OPTION_CLOSED_CAPTIONS = 0; public static final int OPTION_DISPLAY_MODE = 1; - public static final int OPTION_SYSTEMWIDE_PIP = 2; - public static final int OPTION_MULTI_AUDIO = 3; - public static final int OPTION_MORE_CHANNELS = 4; - public static final int OPTION_DEVELOPER = 5; - public static final int OPTION_SETTINGS = 6; + public static final int OPTION_IN_APP_PIP = 2; + public static final int OPTION_SYSTEMWIDE_PIP = 3; + public static final int OPTION_MULTI_AUDIO = 4; + public static final int OPTION_MORE_CHANNELS = 5; + public static final int OPTION_DEVELOPER = 6; + public static final int OPTION_SETTINGS = 7; + + public static final int OPTION_PIP_INPUT = 100; + public static final int OPTION_PIP_SWAP = 101; + public static final int OPTION_PIP_SOUND = 102; + public static final int OPTION_PIP_LAYOUT = 103 ; + public static final int OPTION_PIP_SIZE = 104; private final Context mContext; private final SparseArray<OptionChangedListener> mOptionChangedListeners = new SparseArray<>(); private String mClosedCaptionsLanguage; private int mDisplayMode; + private boolean mPip; private String mMultiAudio; + private String mPipInput; + private boolean mPipSwap; + @PipSound private int mPipSound; + @PipLayout private int mPipLayout; + @PipSize private int mPipSize; public TvOptionsManager(Context context) { mContext = context; } - /** - * Returns a suitable displayed string for the given option type under current settings. - * @param option the type of option, should be one of {@link OptionType}. - */ - public String getOptionString(@OptionType int option) { + public String getOptionString(int option) { switch (option) { case OPTION_CLOSED_CAPTIONS: if (mClosedCaptionsLanguage == null) { @@ -71,48 +77,101 @@ public class TvOptionsManager { .isDisplayModeAvailable(mDisplayMode) ? DisplayMode.getLabel(mDisplayMode, mContext) : DisplayMode.getLabel(DisplayMode.MODE_NORMAL, mContext); + case OPTION_IN_APP_PIP: + return mContext.getString( + mPip ? R.string.options_item_pip_on : R.string.options_item_pip_off); case OPTION_MULTI_AUDIO: return mMultiAudio; + case OPTION_PIP_INPUT: + return mPipInput; + case OPTION_PIP_SWAP: + return mContext.getString(mPipSwap ? R.string.pip_options_item_swap_on + : R.string.pip_options_item_swap_off); + case OPTION_PIP_SOUND: + if (mPipSound == TvSettings.PIP_SOUND_MAIN) { + return mContext.getString(R.string.pip_options_item_sound_main); + } else if (mPipSound == TvSettings.PIP_SOUND_PIP_WINDOW) { + return mContext.getString(R.string.pip_options_item_sound_pip_window); + } + break; + case OPTION_PIP_LAYOUT: + if (mPipLayout == TvSettings.PIP_LAYOUT_BOTTOM_RIGHT) { + return mContext.getString(R.string.pip_options_item_layout_bottom_right); + } else if (mPipLayout == TvSettings.PIP_LAYOUT_TOP_RIGHT) { + return mContext.getString(R.string.pip_options_item_layout_top_right); + } else if (mPipLayout == TvSettings.PIP_LAYOUT_TOP_LEFT) { + return mContext.getString(R.string.pip_options_item_layout_top_left); + } else if (mPipLayout == TvSettings.PIP_LAYOUT_BOTTOM_LEFT) { + return mContext.getString(R.string.pip_options_item_layout_bottom_left); + } else if (mPipLayout == TvSettings.PIP_LAYOUT_SIDE_BY_SIDE) { + return mContext.getString(R.string.pip_options_item_layout_side_by_side); + } + break; + case OPTION_PIP_SIZE: + if (mPipSize == TvSettings.PIP_SIZE_BIG) { + return mContext.getString(R.string.pip_options_item_size_big); + } else if (mPipSize == TvSettings.PIP_SIZE_SMALL) { + return mContext.getString(R.string.pip_options_item_size_small); + } + break; } return ""; } - /** - * Handles changing selection of closed caption. - */ - public void onClosedCaptionsChanged(TvTrackInfo track, int trackIndex) { - mClosedCaptionsLanguage = (track == null) ? - null : (track.getLanguage() != null) ? track.getLanguage() - : mContext.getString(R.string.closed_caption_unknown_language, trackIndex + 1); + public void onClosedCaptionsChanged(TvTrackInfo track) { + mClosedCaptionsLanguage = (track == null) ? null + : (track.getLanguage() != null) ? track.getLanguage() + : mContext.getString(R.string.default_language); notifyOptionChanged(OPTION_CLOSED_CAPTIONS); } - /** - * Handles changing selection of display mode. - */ public void onDisplayModeChanged(int displayMode) { mDisplayMode = displayMode; notifyOptionChanged(OPTION_DISPLAY_MODE); } - /** - * Handles changing selection of multi-audio. - */ + public void onPipChanged(boolean pip) { + mPip = pip; + notifyOptionChanged(OPTION_IN_APP_PIP); + } + public void onMultiAudioChanged(String multiAudio) { mMultiAudio = multiAudio; notifyOptionChanged(OPTION_MULTI_AUDIO); } - private void notifyOptionChanged(@OptionType int option) { + public void onPipInputChanged(String pipInput) { + mPipInput = pipInput; + notifyOptionChanged(OPTION_PIP_INPUT); + } + + public void onPipSwapChanged(boolean pipSwap) { + mPipSwap = pipSwap; + notifyOptionChanged(OPTION_PIP_SWAP); + } + + public void onPipSoundChanged(@PipSound int pipSound) { + mPipSound = pipSound; + notifyOptionChanged(OPTION_PIP_SOUND); + } + + public void onPipLayoutChanged(@PipLayout int pipLayout) { + mPipLayout = pipLayout; + notifyOptionChanged(OPTION_PIP_LAYOUT); + } + + public void onPipSizeChanged(@PipSize int pipSize) { + mPipSize = pipSize; + notifyOptionChanged(OPTION_PIP_SIZE); + } + + private void notifyOptionChanged(int option) { OptionChangedListener listener = mOptionChangedListeners.get(option); if (listener != null) { - listener.onOptionChanged(option, getOptionString(option)); + listener.onOptionChanged(getOptionString(option)); } } - /** - * Sets listeners to changes of the given option type. - */ public void setOptionChangedListener(int option, OptionChangedListener listener) { mOptionChangedListeners.put(option, listener); } @@ -121,6 +180,6 @@ public class TvOptionsManager { * An interface used to monitor option changes. */ public interface OptionChangedListener { - void onOptionChanged(@OptionType int optionType, String newString); + void onOptionChanged(String newOption); } -}
\ No newline at end of file +} |