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.text.TextUtils;
21 import android.view.KeyEvent;
22 import com.android.tv.R;
23 import com.android.tv.util.TvTrackInfoUtils;
24 import java.util.ArrayList;
25 import java.util.List;
26 
27 public class MultiAudioFragment extends SideFragment {
28     private static final String TRACKER_LABEL = "multi-audio";
29     private int mInitialSelectedPosition = INVALID_POSITION;
30     private String mSelectedTrackId;
31     private String mFocusedTrackId;
32 
MultiAudioFragment()33     public MultiAudioFragment() {
34         super(KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK, KeyEvent.KEYCODE_A);
35     }
36 
37     @Override
getTitle()38     protected String getTitle() {
39         return getString(R.string.side_panel_title_multi_audio);
40     }
41 
42     @Override
getTrackerLabel()43     public String getTrackerLabel() {
44         return TRACKER_LABEL;
45     }
46 
47     @Override
getItemList()48     protected List<Item> getItemList() {
49         List<TvTrackInfo> tracks = getMainActivity().getTracks(TvTrackInfo.TYPE_AUDIO);
50         mSelectedTrackId = getMainActivity().getSelectedTrack(TvTrackInfo.TYPE_AUDIO);
51 
52         List<Item> items = new ArrayList<>();
53         if (tracks != null) {
54             boolean needToShowSampleRate = TvTrackInfoUtils
55                 .needToShowSampleRate(getActivity(), tracks);
56             int pos = 0;
57             for (final TvTrackInfo track : tracks) {
58                 RadioButtonItem item =
59                         new MultiAudioOptionItem(
60                                 TvTrackInfoUtils.getMultiAudioString(
61                                         getActivity(), track, needToShowSampleRate),
62                                 track.getId());
63                 if (track.getId().equals(mSelectedTrackId)) {
64                     item.setChecked(true);
65                     mInitialSelectedPosition = pos;
66                     mSelectedTrackId = mFocusedTrackId = track.getId();
67                 }
68                 items.add(item);
69                 ++pos;
70             }
71         }
72         return items;
73     }
74 
75     @Override
onResume()76     public void onResume() {
77         super.onResume();
78         if (mInitialSelectedPosition != INVALID_POSITION) {
79             setSelectedPosition(mInitialSelectedPosition);
80         }
81     }
82 
83     private class MultiAudioOptionItem extends RadioButtonItem {
84         private final String mTrackId;
85 
MultiAudioOptionItem(String title, String trackId)86         private MultiAudioOptionItem(String title, String trackId) {
87             super(title);
88             mTrackId = trackId;
89         }
90 
91         @Override
onSelected()92         protected void onSelected() {
93             super.onSelected();
94             mSelectedTrackId = mFocusedTrackId = mTrackId;
95             getMainActivity().selectAudioTrack(mTrackId);
96             closeFragment();
97         }
98 
99         @Override
onFocused()100         protected void onFocused() {
101             super.onFocused();
102             mFocusedTrackId = mTrackId;
103             getMainActivity().selectAudioTrack(mTrackId);
104         }
105     }
106 
107     @Override
onDetach()108     public void onDetach() {
109         if (!TextUtils.equals(mSelectedTrackId, mFocusedTrackId)) {
110             getMainActivity().selectAudioTrack(mSelectedTrackId);
111         }
112         super.onDetach();
113     }
114 }
115