Home | History | Annotate | Download | only in sidepanel
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.tv.ui.sidepanel;
     18 
     19 import android.media.tv.TvTrackInfo;
     20 import android.os.Bundle;
     21 import android.text.TextUtils;
     22 import android.view.KeyEvent;
     23 import android.view.LayoutInflater;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 
     27 import com.android.tv.R;
     28 import com.android.tv.util.CaptionSettings;
     29 
     30 import java.util.ArrayList;
     31 import java.util.List;
     32 import java.util.Locale;
     33 
     34 public class ClosedCaptionFragment extends SideFragment {
     35     private static final String TRACKER_LABEL ="closed caption" ;
     36     private boolean mResetClosedCaption;
     37     private int mClosedCaptionOption;
     38     private String mClosedCaptionLanguage;
     39     private String mClosedCaptionTrackId;
     40     private ClosedCaptionOptionItem mSelectedItem;
     41 
     42     public ClosedCaptionFragment() {
     43         super(KeyEvent.KEYCODE_CAPTIONS, KeyEvent.KEYCODE_S);
     44     }
     45 
     46     @Override
     47     protected String getTitle() {
     48         return getString(R.string.side_panel_title_closed_caption);
     49     }
     50 
     51     @Override
     52     public String getTrackerLabel() {
     53         return TRACKER_LABEL;
     54     }
     55 
     56     @Override
     57     protected List<Item> getItemList() {
     58         CaptionSettings captionSettings = getMainActivity().getCaptionSettings();
     59         mResetClosedCaption = true;
     60         mClosedCaptionOption = captionSettings.getEnableOption();
     61         mClosedCaptionLanguage = captionSettings.getLanguage();
     62         mClosedCaptionTrackId = captionSettings.getTrackId();
     63 
     64         List<Item> items = new ArrayList<>();
     65         mSelectedItem = null;
     66 
     67         List<TvTrackInfo> tracks = getMainActivity().getTracks(TvTrackInfo.TYPE_SUBTITLE);
     68         if (tracks != null && !tracks.isEmpty()) {
     69             String selectedTrackId = captionSettings.isEnabled() ?
     70                     getMainActivity().getSelectedTrack(TvTrackInfo.TYPE_SUBTITLE) : null;
     71             ClosedCaptionOptionItem item = new ClosedCaptionOptionItem(null, null);
     72             items.add(item);
     73             if (selectedTrackId == null) {
     74                 mSelectedItem = item;
     75                 item.setChecked(true);
     76                 setSelectedPosition(0);
     77             }
     78             for (int i = 0; i < tracks.size(); i++) {
     79                 item = new ClosedCaptionOptionItem(tracks.get(i), i);
     80                 if (TextUtils.equals(selectedTrackId, tracks.get(i).getId())) {
     81                     mSelectedItem = item;
     82                     item.setChecked(true);
     83                     setSelectedPosition(i + 1);
     84                 }
     85                 items.add(item);
     86             }
     87         }
     88         if (getMainActivity().hasCaptioningSettingsActivity()) {
     89             items.add(new ActionItem(getString(R.string.closed_caption_system_settings),
     90                     getString(R.string.closed_caption_system_settings_description)) {
     91                 @Override
     92                 protected void onSelected() {
     93                     getMainActivity().startSystemCaptioningSettingsActivity();
     94                 }
     95 
     96                 @Override
     97                 protected void onFocused() {
     98                     super.onFocused();
     99                     if (mSelectedItem != null) {
    100                         getMainActivity().selectSubtitleTrack(
    101                                 mSelectedItem.mOption, mSelectedItem.mTrackId);
    102                     }
    103                 }
    104             });
    105         }
    106         return items;
    107     }
    108 
    109     @Override
    110     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    111             Bundle savedInstanceState) {
    112         return super.onCreateView(inflater, container, savedInstanceState);
    113     }
    114 
    115     @Override
    116     public void onDestroyView() {
    117         if (mResetClosedCaption) {
    118             getMainActivity().selectSubtitleLanguage(mClosedCaptionOption, mClosedCaptionLanguage,
    119                     mClosedCaptionTrackId);
    120         }
    121         super.onDestroyView();
    122     }
    123 
    124     private String getLabel(TvTrackInfo track, Integer trackIndex) {
    125         if (track == null) {
    126             return getString(R.string.closed_caption_option_item_off);
    127         } else if (track.getLanguage() != null) {
    128             return new Locale(track.getLanguage()).getDisplayName();
    129         }
    130         return getString(R.string.closed_caption_unknown_language, trackIndex + 1);
    131     }
    132 
    133     private class ClosedCaptionOptionItem extends RadioButtonItem {
    134         private final int mOption;
    135         private final String mTrackId;
    136 
    137         private ClosedCaptionOptionItem(TvTrackInfo track, Integer trackIndex) {
    138             super(getLabel(track, trackIndex));
    139             if (track == null) {
    140                 mOption = CaptionSettings.OPTION_OFF;
    141                 mTrackId = null;
    142             } else {
    143                 mOption = CaptionSettings.OPTION_ON;
    144                 mTrackId = track.getId();
    145             }
    146         }
    147 
    148         @Override
    149         protected void onSelected() {
    150             super.onSelected();
    151             mSelectedItem = this;
    152             getMainActivity().selectSubtitleTrack(mOption, mTrackId);
    153             mResetClosedCaption = false;
    154             closeFragment();
    155         }
    156 
    157         @Override
    158         protected void onFocused() {
    159             super.onFocused();
    160             getMainActivity().selectSubtitleTrack(mOption, mTrackId);
    161         }
    162     }
    163 }
    164