package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.res.TypedArray; import android.os.Handler; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import com.iwedia.comm.ISubtitleControl; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVTextView; import com.iwedia.gui.components.A4TVToast; import java.util.ArrayList; /** * Dialog for subtitle languages * * @author Branimir Pavlovic */ public class SubtitleLanguageDialog extends A4TVDialog implements A4TVDialogInterface, OnItemClickListener { private final String TAG = "SubtitleLanguageDialog"; private ListView listViewLanguages; private AdapterLanguages adapter; // ////////////////////////////////////////// // Veljko Ilkic // ////////////////////////////////////////// /** String contants */ public static final String QAA = "qaa"; public static final String ORIGINAL = "Original"; // ////////////////////////////////////////// // Veljko Ilkic // ////////////////////////////////////////// private ArrayList<String> languagesAvailable = new ArrayList<String>(); private Context ctx; private A4TVTextView textViewOnTop; private ImageView imageLine; public SubtitleLanguageDialog(Context context) { super(context, checkTheme(context), 0); ctx = context; fillDialog(); setDialogAttributes(); init(); } @Override public void fillDialog() { setContentView(R.layout.audio_language_dialog); } /** * Function that load theme * * @param ctx * @return */ private static int checkTheme(Context ctx) { TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.A4TVDialog }); int i = atts.getResourceId(0, 0); atts.recycle(); return i; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_S: case KeyEvent.KEYCODE_F1: case KeyEvent.KEYCODE_CAPTIONS: { cancel(); return true; } default: break; } return super.onKeyDown(keyCode, event); } // not needed here, attributes are passed by style @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } @Override public void show() { ISubtitleControl subControl = null; try { subControl = MainActivity.service.getSubtitleControl(); } catch (Exception e1) { e1.printStackTrace(); } if (subControl != null) { int numberOfLanguages = 0; try { numberOfLanguages = subControl.getSubtitleTrackCount(); } catch (Exception e) { e.printStackTrace(); } Log.d(TAG, "Number of subtitle languages " + numberOfLanguages); languagesAvailable.clear(); for (int i = 0; i < numberOfLanguages; i++) { String track = null; try { track = subControl.getSubtitleTrack(i); // ////////////////////////////////// // Veljko Ilkic // ////////////////////////////////// // if (track.equals(QAA)) { // track = ORIGINAL; // } // // // Capitalize first letter // track = track.toLowerCase(); // track = track.substring(0, 1).toUpperCase() // + track.substring(1); // /////////////////////////////////// // Veljko Ilkic // /////////////////////////////////// } catch (Exception e) { e.printStackTrace(); } if (track != null) { languagesAvailable.add(track); } } // Add NONE element languagesAvailable.add(ctx.getResources().getString( R.string.subtitle_language_none)); Log.d(TAG, "Subtitle languages " + languagesAvailable.toString()); adapter.notifyDataSetChanged(); if (languagesAvailable.size() == 1) { A4TVToast toast = new A4TVToast(ctx); toast.showToast(R.string.no_subtitle_language); } else { super.show(); new Handler().postDelayed(new Runnable() { @Override public void run() { int currentSubIndex = -1; try { currentSubIndex = MainActivity.service .getSubtitleControl() .getCurrentSubtitleTrackIndex(); } catch (Exception e) { e.printStackTrace(); } if (currentSubIndex >= 0 && currentSubIndex < languagesAvailable.size() - 1) { // request focus to active subtitle listViewLanguages.requestFocusFromTouch(); listViewLanguages.setSelection(currentSubIndex); } else if (currentSubIndex == -1) { listViewLanguages.requestFocusFromTouch(); listViewLanguages.setSelection(languagesAvailable .size() - 1); } } }, 100); } } // } } /** Take reference of list view and bind it with adapter */ private void init() { listViewLanguages = (ListView) findViewById(R.id.listViewAudioLanguage); adapter = new AdapterLanguages(); listViewLanguages.setAdapter(adapter); listViewLanguages.setOnItemClickListener(this); listViewLanguages.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); listViewLanguages.setScrollbarFadingEnabled(false); findViewById(R.id.linearLayoutDialogContent).setLayoutParams( new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 3.8f)); textViewOnTop = (A4TVTextView) findViewById(R.id.aTVTextViewMessage); textViewOnTop.setText(R.string.choose_subtitle_language); textViewOnTop .setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, MainActivity.dialogListElementHeight)); textViewOnTop.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); textViewOnTop.setPadding( (int) ctx.getResources().getDimension(R.dimen.padding_medium), 0, 0, 0); imageLine = (ImageView) findViewById(R.id.imageViewHorizLine); // get drawable from theme for image source TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogSmallUpperDividerLine }); int backgroundID = atts.getResourceId(0, 0); imageLine.setBackgroundResource(backgroundID); atts.recycle(); } // this is not needed here @Override public void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { } private class AdapterLanguages extends BaseAdapter { @Override public int getCount() { return languagesAvailable.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = new A4TVTextView(ctx); } ((A4TVTextView) convertView).setText(languagesAvailable .get(position)); (convertView).setLayoutParams(new AbsListView.LayoutParams( LayoutParams.MATCH_PARENT, MainActivity.dialogListElementHeight)); ((A4TVTextView) convertView).setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); (convertView).setPadding( (int) ctx.getResources() .getDimension(R.dimen.padding_large), 0, 0, 0); (convertView).setBackgroundResource(R.drawable.list_view_selector); return convertView; } } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.i(TAG, "\n\nonItemClick--------------arg2= " + arg2 + " languagesAvailable.size()=" + languagesAvailable.size()); // Check for NONE element if (arg2 == languagesAvailable.size() - 1) { // No language cancel(); Log.i(TAG, "\n\nonItemClick NONE------------------"); // hide subtitle try { MainActivity.activity.getSubtitleDialogView().hide(); // MainActivity.service.getSubtitleControl().hide(); } catch (Exception e) { e.printStackTrace(); } // MainActivity.subtitleON = false; } else { MainActivity.activity.getSubtitleDialogView().show(arg2); // MainActivity.showSubtitleDialog(arg2); // MainActivity.subtitleON = true; } SubtitleLanguageDialog.this.cancel(); } }