package com.iwedia.gui.components.dialogs; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.os.RemoteException; 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.IDTVManagerProxy; import com.iwedia.dtv.types.AspectRatioMode; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVTextView; import java.util.ArrayList; /** * CI info dialog * * @author Branimir Pavlovic */ public class CIInfoDialog extends A4TVDialog implements A4TVDialogInterface, android.view.View.OnClickListener, OnItemClickListener { private A4TVTextView textViewOnTop, textViewMenuTop, textViewMenuBottom; private ImageView imageLine; private Context ctx; private Activity mActivity = null; private IDTVManagerProxy mService = null; private boolean mActivityKeyEvents = false; /** Fields for list view */ private ListView listView; private static CIAdapter adapter; private ArrayList<String> listMenuItems = new ArrayList<String>(); private int ssnb; public CIInfoDialog(Context context) { super(context, checkTheme(context), 0); ctx = context; mActivity = MainActivity.activity; mService = MainActivity.service; // set content to dialog fillDialog(); // set attributes setDialogAttributes(); init(); } public void setActivity(Activity activity) { mActivity = activity; mActivityKeyEvents = true; } public void setProxyService(IDTVManagerProxy service) { mService = service; } @Override public void show() { // Fix for late service creation in MainActivity if (MainActivity.service != null) { mService = MainActivity.service; } loadMenuItems(); listView = (ListView) findViewById(R.id.listViewAudioLanguage); adapter = new CIAdapter(); listView.setAdapter(adapter); listView.setOnItemClickListener(this); listView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); listView.setScrollbarFadingEnabled(false); super.show(); listView.requestFocus(); listView.requestFocusFromTouch(); } private void loadMenuItems() { listMenuItems.clear(); try { textViewOnTop.setText(mService.getCIControl().getTitle(ssnb)); textViewMenuTop.setText(mService.getCIControl().getTopText(ssnb)); int numberOfItems = mService.getCIControl().getNumberOfItems(ssnb); Log.d(TAG, "loadMenuItems - numberOfItems: " + numberOfItems); for (int i = 0; i < numberOfItems; i++) { String itemText = mService.getCIControl().getMenuItemText(ssnb, i); Log.d(TAG, "loadMenuItems - itemText: " + itemText); addItem(itemText); } refresh(); textViewMenuBottom.setText(mService.getCIControl().getBottomText( ssnb)); } catch (RemoteException e) { e.printStackTrace(); } Log.d(TAG, "loadMenuItems executed"); } private void addItem(String itemName) { if (listMenuItems.size() == 0) { listMenuItems.add(".."); } listMenuItems.add(itemName); adapter.notifyDataSetChanged(); listView.invalidateViews(); listView.requestFocus(); listView.requestFocusFromTouch(); } /** Show dialog from callback */ public void showDialog(int ssnb) { this.ssnb = ssnb; if (isShowing()) { // just refresh adapter loadMenuItems(); } else { show(); } } /** Close dialog from callback */ public void cancelDialog() { if (mActivityKeyEvents) { mActivity.onBackPressed(); } else { CIInfoDialog.this.cancel(); listMenuItems.clear(); listMenuItems.add(".."); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.e(TAG, "KeyHandling Ci Info dialog : " + keyCode); // BACK and ESC key fix for CIDialogActivity if (mActivityKeyEvents && (keyCode == KeyEvent.KEYCODE_BACK || keyCode == 111)) { mActivity.onBackPressed(); return true; } switch (keyCode) { case KeyEvent.KEYCODE_BACK: case 111: // ESC super.onBackPressed(); try { Log.d(TAG, "OnItemClicked chosen back"); cancelDialog(); } catch (Exception e) { e.printStackTrace(); } Log.d(TAG, "SEND MENU ANSWER TO CI: 0"); // super.onBackPressed(); break; case KeyEvent.KEYCODE_DPAD_LEFT: try { Log.d(TAG, "OnItemClicked chosen back"); MainActivity.service.getCIControl().selectMenuItem( this.ssnb, 0); } catch (Exception e) { e.printStackTrace(); } Log.d(TAG, "SEND MENU ANSWER TO CI: 0"); // super.onBackPressed(); break; case KeyEvent.KEYCODE_WINDOW: { AspectRatioMode aspectRatio = AspectRatioMode.AUTO; try { aspectRatio = mService.getSystemControl() .getPictureControl().getAspectRatioMode(); } catch (Exception e) { e.printStackTrace(); } if (aspectRatio == AspectRatioMode.AUTO) { try { mService.getSystemControl().getPictureControl() .setAspectRatioMode(AspectRatioMode.NORMAL_4_3); // aspectRatio = 1; } catch (Exception e) { e.printStackTrace(); } } else { try { mService.getSystemControl().getPictureControl() .setAspectRatioMode(AspectRatioMode.AUTO); // aspectRatio = 0; } catch (Exception e) { e.printStackTrace(); } } break; } } return true; } /** Initialization function */ private void init() { textViewOnTop = (A4TVTextView) findViewById(R.id.aTVTextViewMessage); 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_small), 0, 0, 0); textViewOnTop.setText(""); // menu top text view textViewMenuTop = (A4TVTextView) findViewById(R.id.aTVTextViewMenuTop); textViewMenuTop.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); textViewMenuTop.setVisibility(View.VISIBLE); textViewMenuTop.setText(""); // menu bottom text view textViewMenuBottom = (A4TVTextView) findViewById(R.id.aTVTextViewMenuBottom); textViewMenuBottom.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); textViewMenuBottom.setVisibility(View.VISIBLE); textViewMenuBottom.setText(""); 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(); listView = (ListView) findViewById(R.id.listViewAudioLanguage); adapter = new CIAdapter(); listView.setAdapter(adapter); listView.setOnItemClickListener(this); listView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); listView.setScrollbarFadingEnabled(false); } @Override public void fillDialog() { setContentView(R.layout.audio_language_dialog); } @Override public void setDialogAttributes() { getWindow().getAttributes().width = MainActivity.dialogWidth; getWindow().getAttributes().height = MainActivity.dialogHeight; } @Override public void onClick(View v) { } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { try { Log.d(TAG, "OnItemClicked chosen " + arg2); mService.getCIControl().selectMenuItem(ssnb, arg2); } catch (Exception e) { e.printStackTrace(); } // listMenuItems.clear(); // listMenuItems.add(".."); Log.d(TAG, "SEND MENU ANSWER TO CI: " + (arg2)); } /** Adapter for list view */ private class CIAdapter extends BaseAdapter { @Override public int getCount() { return listMenuItems.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) { convertView = new A4TVTextView(ctx); ((A4TVTextView) convertView).setText(listMenuItems.get(position)); ((A4TVTextView) convertView).setTextColor(Color.WHITE); (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; } } public static void refresh() { Log.d(TAG, "refresh"); adapter.notifyDataSetChanged(); } /** * 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 void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { } }