/* * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com> * * 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.danxx.mdplayer.ui; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import com.danxx.mdplayer.R; import java.util.Locale; import tv.danmaku.ijk.media.player.misc.ITrackInfo; public class TracksFragment extends Fragment { private ListView mTrackListView; private TrackAdapter mAdapter; public static TracksFragment newInstance() { TracksFragment f = new TracksFragment(); return f; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.fragment_track_list, container, false); mTrackListView = (ListView) viewGroup.findViewById(R.id.track_list_view); return viewGroup; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final Activity activity = getActivity(); mAdapter = new TrackAdapter(activity); mTrackListView.setAdapter(mAdapter); if (activity instanceof ITrackHolder) { final ITrackHolder trackHolder = (ITrackHolder) activity; mAdapter.setTrackHolder(trackHolder); int selectedVideoTrack = trackHolder.getSelectedTrack(ITrackInfo.MEDIA_TRACK_TYPE_VIDEO); int selectedAudioTrack = trackHolder.getSelectedTrack(ITrackInfo.MEDIA_TRACK_TYPE_AUDIO); if (selectedVideoTrack >= 0) mTrackListView.setItemChecked(selectedVideoTrack, true); if (selectedAudioTrack >= 0) mTrackListView.setItemChecked(selectedAudioTrack, true); mTrackListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int position, final long id) { TrackItem trackItem = (TrackItem) mTrackListView.getItemAtPosition(position); for (int i = 0; i < mAdapter.getCount(); ++i) { TrackItem compareItem = mAdapter.getItem(i); if (compareItem.mIndex == trackItem.mIndex) continue; if (compareItem.mTrackInfo.getTrackType() != trackItem.mTrackInfo.getTrackType()) continue; if (mTrackListView.isItemChecked(i)) mTrackListView.setItemChecked(i, false); } if (mTrackListView.isItemChecked(position)) { trackHolder.selectTrack(trackItem.mIndex); } else { trackHolder.deselectTrack(trackItem.mIndex); } } }); } else { Log.e("TracksFragment", "activity is not an instance of ITrackHolder."); } } public interface ITrackHolder { ITrackInfo[] getTrackInfo(); int getSelectedTrack(int trackType); void selectTrack(int stream); void deselectTrack(int stream); } final class TrackItem { public int mIndex; public ITrackInfo mTrackInfo; public String mInfoInline; public TrackItem(int index, ITrackInfo trackInfo) { mIndex = index; mTrackInfo = trackInfo; mInfoInline = String.format(Locale.US, "# %d: %s", mIndex, mTrackInfo.getInfoInline()); } public String getInfoInline() { return mInfoInline; } } final class TrackAdapter extends ArrayAdapter<TrackItem> { private ITrackHolder mTrackHolder; private ITrackInfo[] mTrackInfos; public TrackAdapter(Context context) { super(context, android.R.layout.simple_list_item_checked); } public void setTrackHolder(ITrackHolder trackHolder) { clear(); mTrackHolder = trackHolder; mTrackInfos = mTrackHolder.getTrackInfo(); if (mTrackInfos != null) { for(ITrackInfo trackInfo: mTrackInfos) { int index = getCount(); TrackItem item = new TrackItem(index, trackInfo); add(item); } } } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); view = inflater.inflate(android.R.layout.simple_list_item_checked, parent, false); } ViewHolder viewHolder = (ViewHolder) view.getTag(); if (viewHolder == null) { viewHolder = new ViewHolder(); viewHolder.mNameTextView = (TextView) view.findViewById(android.R.id.text1); } TrackItem item = getItem(position); viewHolder.mNameTextView.setText(item.getInfoInline()); return view; } final class ViewHolder { public TextView mNameTextView; } } }