/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tv.ui.sidepanel; import android.media.tv.TvTrackInfo; import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.android.tv.R; import com.android.tv.util.CaptionSettings; import java.util.ArrayList; import java.util.List; import java.util.Locale; public class ClosedCaptionFragment extends SideFragment { private static final String TRACKER_LABEL ="closed caption" ; private boolean mResetClosedCaption; private int mClosedCaptionOption; private String mClosedCaptionLanguage; private String mClosedCaptionTrackId; private ClosedCaptionOptionItem mSelectedItem; public ClosedCaptionFragment() { super(KeyEvent.KEYCODE_CAPTIONS, KeyEvent.KEYCODE_S); } @Override protected String getTitle() { return getString(R.string.side_panel_title_closed_caption); } @Override public String getTrackerLabel() { return TRACKER_LABEL; } @Override protected List getItemList() { CaptionSettings captionSettings = getMainActivity().getCaptionSettings(); mResetClosedCaption = true; mClosedCaptionOption = captionSettings.getEnableOption(); mClosedCaptionLanguage = captionSettings.getLanguage(); mClosedCaptionTrackId = captionSettings.getTrackId(); List items = new ArrayList<>(); mSelectedItem = null; List tracks = getMainActivity().getTracks(TvTrackInfo.TYPE_SUBTITLE); if (tracks != null && !tracks.isEmpty()) { String selectedTrackId = captionSettings.isEnabled() ? getMainActivity().getSelectedTrack(TvTrackInfo.TYPE_SUBTITLE) : null; ClosedCaptionOptionItem item = new ClosedCaptionOptionItem(null, null); items.add(item); if (selectedTrackId == null) { mSelectedItem = item; item.setChecked(true); setSelectedPosition(0); } for (int i = 0; i < tracks.size(); i++) { item = new ClosedCaptionOptionItem(tracks.get(i), i); if (TextUtils.equals(selectedTrackId, tracks.get(i).getId())) { mSelectedItem = item; item.setChecked(true); setSelectedPosition(i + 1); } items.add(item); } } if (getMainActivity().hasCaptioningSettingsActivity()) { items.add(new ActionItem(getString(R.string.closed_caption_system_settings), getString(R.string.closed_caption_system_settings_description)) { @Override protected void onSelected() { getMainActivity().startSystemCaptioningSettingsActivity(); } @Override protected void onFocused() { super.onFocused(); if (mSelectedItem != null) { getMainActivity().selectSubtitleTrack( mSelectedItem.mOption, mSelectedItem.mTrackId); } } }); } return items; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDestroyView() { if (mResetClosedCaption) { getMainActivity().selectSubtitleLanguage(mClosedCaptionOption, mClosedCaptionLanguage, mClosedCaptionTrackId); } super.onDestroyView(); } private String getLabel(TvTrackInfo track, Integer trackIndex) { if (track == null) { return getString(R.string.closed_caption_option_item_off); } else if (track.getLanguage() != null) { return new Locale(track.getLanguage()).getDisplayName(); } return getString(R.string.closed_caption_unknown_language, trackIndex + 1); } private class ClosedCaptionOptionItem extends RadioButtonItem { private final int mOption; private final String mTrackId; private ClosedCaptionOptionItem(TvTrackInfo track, Integer trackIndex) { super(getLabel(track, trackIndex)); if (track == null) { mOption = CaptionSettings.OPTION_OFF; mTrackId = null; } else { mOption = CaptionSettings.OPTION_ON; mTrackId = track.getId(); } } @Override protected void onSelected() { super.onSelected(); mSelectedItem = this; getMainActivity().selectSubtitleTrack(mOption, mTrackId); mResetClosedCaption = false; closeFragment(); } @Override protected void onFocused() { super.onFocused(); getMainActivity().selectSubtitleTrack(mOption, mTrackId); } } }