package com.iwedia.gui.components.dialogs; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Handler; import android.text.TextUtils.TruncateAt; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; 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 android.widget.ScrollView; import com.iwedia.comm.IReminderControl; import com.iwedia.comm.content.IContentListControl; import com.iwedia.dtv.reminder.ReminderSmartInfo; import com.iwedia.dtv.reminder.ReminderTimerInfo; import com.iwedia.dtv.reminder.ReminderType; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVTextView; import com.iwedia.gui.util.DateTimeConversions; import java.text.SimpleDateFormat; import java.util.ArrayList; /** * Dialog for Reminders handling * * @author Branimir Pavlovic */ public class EpgReminderDialog extends A4TVDialog implements A4TVDialogInterface, OnClickListener, OnItemClickListener { public static final String TAG = "EpgReminderDialog"; private Context ctx; private ListView listViewReminders; // fields for creating dialogs private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>(), contentListIDs = new ArrayList<ArrayList<Integer>>(); private ArrayList<Integer> titleIDs = new ArrayList<Integer>(); // private ArrayList<String> reminders = new ArrayList<String>(); private ReminderAdapter adapter; /** Small context dialog that has drop down items */ private A4TVDialog dialogContext; private int selectedFromList = -1, reminderCount; private IReminderControl reminderControl; private IContentListControl contentListControl; public EpgReminderDialog(Context context) { super(context, checkTheme(context), 0); ctx = context; // fill lists // returnArrayListsWithDialogContents(contentList, contentListIDs, // titleIDs); fillDialog(); setDialogAttributes(); init(); setMenuButtonEnabled(false); } @Override public void fillDialog() { // adapter = new ReminderAdapter(); // View view = DialogManager.dialogCreator.fillDialogWithContents( // contentList, contentListIDs, titleIDs, null, this, adapter);// , // pictureBackgroundID); // setContentView(view); setContentView(R.layout.epg_reminder_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; } // 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() { reminderControl = null; try { reminderControl = MainActivity.service.getReminderControl(); } catch (Exception e1) { e1.printStackTrace(); } contentListControl = null; try { contentListControl = MainActivity.service.getContentListControl(); } catch (Exception e1) { e1.printStackTrace(); } if (reminderControl != null) { reminderCount = 0; try { reminderCount = reminderControl.updateList(); } catch (Exception e) { e.printStackTrace(); } Log.d(TAG, "Reminder count " + reminderCount); adapter.notifyDataSetChanged(); } else { reminderCount = 0; } super.show(); new Handler().postDelayed(new Runnable() { @Override public void run() { if (reminderCount > 0) { // listViewReminders.requestChildFocus( // listViewReminders.getChildAt(0), // listViewReminders.getChildAt(0)); listViewReminders.setSelection(0); } } }, 100); } /** Take reference of list view and bind it with adapter */ private void init() { // get reference of listview // listViewReminders = (ListView) // findViewById(DialogCreatorClass.LIST_VIEW_IN_DIALOG_ID); listViewReminders = (ListView) findViewById(R.id.listView1); listViewReminders.setOnItemClickListener(this); adapter = new ReminderAdapter(); listViewReminders.setAdapter(adapter); dialogContext = new ContextSmallDialog(ctx); // fill dialog with desired view dialogContext.setContentView(fillDialogWithElements()); // set dialog size dialogContext.getWindow().getAttributes().width = MainActivity.dialogWidth / 2; dialogContext.getWindow().getAttributes().height = MainActivity.dialogHeight / 2; // reminder text size A4TVTextView tv = (A4TVTextView) findViewById(R.id.aTVTextViewMessage); tv.setTextSize(ctx.getResources().getDimension( com.iwedia.gui.R.dimen.content_list_banner_text_size)); } @Override public void returnArrayListsWithDialogContents( ArrayList<ArrayList<Integer>> contentList, ArrayList<ArrayList<Integer>> contentListIDs, ArrayList<Integer> titleIDs) { // clear old data in lists contentList.clear(); contentListIDs.clear(); titleIDs.clear(); // title titleIDs.add(R.string.epg_reminder); } @Override public void onClick(View v) { } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { // close reminders case KeyEvent.KEYCODE_G: case KeyEvent.KEYCODE_PROG_GREEN: { cancel(); return true; } default: break; } return super.onKeyDown(keyCode, event); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { selectedFromList = arg2; // show drop down dialog dialogContext.show(); Log.d(TAG, "LIST ITEM CLICKED"); } private class ReminderAdapter extends BaseAdapter { @Override public int getCount() { return reminderCount; } @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) { // create views convertView = new LinearLayout(ctx); A4TVTextView textViewEventName = new A4TVTextView(ctx); A4TVTextView textViewEventInfo = new A4TVTextView(ctx); textViewEventName .setTextSize(MainActivity.dialogListElementHeight / 2 - 12); textViewEventInfo .setTextSize(MainActivity.dialogListElementHeight / 4); textViewEventName.setSingleLine(true); textViewEventName.setEllipsize(TruncateAt.MARQUEE); ((LinearLayout) convertView).addView(textViewEventName); ((LinearLayout) convertView).addView(textViewEventInfo); ((LinearLayout) convertView).setOrientation(LinearLayout.VERTICAL); // ((LinearLayout) convertView).setGravity(Gravity.CENTER_VERTICAL); (convertView).setPadding(20, 2, 15, 2); convertView.setLayoutParams(new ListView.LayoutParams( LayoutParams.MATCH_PARENT, (int) (MainActivity.dialogListElementHeight * 1.2))); convertView.setBackgroundResource(R.drawable.list_view_selector); ReminderType type; type = ReminderType.REMINDER_TIMER; try { type = reminderControl.getType(position); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if (type == ReminderType.REMINDER_TIMER) { try { ReminderTimerInfo info = reminderControl .getTimerInfo(position); if (info != null) { // set text to text views Log.d(TAG, "info is not null " + info.getServiceIndex()); if (contentListControl != null) { try { Log.d(TAG, "content list is not null name : " + contentListControl .getServiceByIndexInMasterList( info.getServiceIndex(), false) .getName()); Log.d(TAG, "info : " + info.toString()); textViewEventName.setText(contentListControl .getServiceByIndexInMasterList( info.getServiceIndex(), false) .getName() + " - " + info.getTitle()); } catch (Exception e1) { e1.printStackTrace(); } } else { Log.d(TAG, "content list is null "); textViewEventName.setText(info.getTitle()); } try { textViewEventInfo.setText(DateTimeConversions .getDateTimeSting(info.getTime() .getCalendar().getTime())); } catch (Exception e) { e.printStackTrace(); } } else { Log.d(TAG, "info is null "); textViewEventName.setText(""); textViewEventInfo.setText(""); } } catch (Exception e1) { e1.printStackTrace(); } } else { try { ReminderSmartInfo info = reminderControl .getSmartInfo(position); if (info != null) { // set text to text views Log.d(TAG, "info is not null " + info.getServiceIndex()); if (contentListControl != null) { try { Log.d(TAG, "content list is not null name : " + contentListControl .getServiceByIndexInMasterList( info.getServiceIndex(), false) .getName()); Log.d(TAG, "info : " + info.toString()); textViewEventName.setText(contentListControl .getServiceByIndexInMasterList( info.getServiceIndex(), false) .getName() + " - " + info.getTitle()); } catch (Exception e1) { e1.printStackTrace(); } } else { Log.d(TAG, "content list is null "); textViewEventName.setText(info.getTitle()); } try { textViewEventInfo.setText(DateTimeConversions .getDateTimeSting(info.getTime() .getCalendar().getTime())); } catch (Exception e) { e.printStackTrace(); } } else { Log.d(TAG, "info is null "); textViewEventName.setText(""); textViewEventInfo.setText(""); } } catch (Exception e1) { e1.printStackTrace(); } } return convertView; } } /** * Creates view for context dialog * * @param allList_favoriteList * add or remove from favourites * @return */ private View fillDialogWithElements() { LinearLayout mainLinLayout = new LinearLayout(ctx); mainLinLayout.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); mainLinLayout.setOrientation(LinearLayout.VERTICAL); // get drawable from theme for image source TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextBackground }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); mainLinLayout.setBackgroundResource(backgroundID); // layout of dialog title LinearLayout titleLinearLayout = new LinearLayout(ctx); titleLinearLayout.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); titleLinearLayout.setOrientation(LinearLayout.VERTICAL); titleLinearLayout.setPadding( (int) ctx.getResources().getDimension( R.dimen.a4tvdialog_padding_left), (int) ctx.getResources().getDimension( R.dimen.a4tvdialog_spinner_padding_top), 0, 0); A4TVTextView text = new A4TVTextView(ctx, null); text.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); text.setText(ctx.getResources() .getString(R.string.spinner_choose_title)); text.setTextSize(ctx.getResources().getDimension( R.dimen.a4tvdialog_textview_size)); // add title titleLinearLayout.addView(text); // add title layout to main layout mainLinLayout.addView(titleLinearLayout); // create horizontal line ImageView horizLine = new ImageView(ctx); horizLine.setLayoutParams(new LinearLayout.LayoutParams( android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT)); // get drawable from theme for image source atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogSmallUpperDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLine.setBackgroundResource(backgroundID); // add horiz line to main layout mainLinLayout.addView(horizLine); // create scroll view ScrollView mainScrollView = new ScrollView(ctx); mainScrollView.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); // set pading for scrollview // mainScrollView.setPadding( // (int) activity.getResources().getDimension( // R.dimen.a4tvdialog_padding_left), // (int) activity.getResources().getDimension( // R.dimen.a4tvdialog_padding_top), // (int) activity.getResources().getDimension( // R.dimen.a4tvdialog_padding_right), // (int) activity.getResources().getDimension( // R.dimen.a4tvdialog_padding_botom)); mainScrollView.setScrollbarFadingEnabled(false); mainScrollView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET); // add scrollview to main view mainLinLayout.addView(mainScrollView); LinearLayout contentLinearLayout = new LinearLayout(ctx); contentLinearLayout.setLayoutParams(new ScrollView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); contentLinearLayout.setOrientation(LinearLayout.VERTICAL); contentLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP); // add content layout to scroll view mainScrollView.addView(contentLinearLayout); /** GET FIELDS FOR CREATING DROP DOWN ITEMS */ String[] strings = null; strings = ctx.getResources().getStringArray(R.array.reminders_dropdown); for (int i = 0; i < strings.length; i++) { // create small layout final LinearLayout smallLayoutHorizontal = new LinearLayout(ctx); smallLayoutHorizontal.setOrientation(LinearLayout.HORIZONTAL); smallLayoutHorizontal .setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, MainActivity.dialogListElementHeight)); smallLayoutHorizontal.setPadding(15, 5, 15, 5); smallLayoutHorizontal.setGravity(Gravity.CENTER_VERTICAL); // create drop box item A4TVButton button = new A4TVButton(ctx, null); button.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); button.setText(strings[i]); button.setGravity(Gravity.CENTER); button.setId(i); // for creating difference between first buttons button.setTag(strings[i]); button.setOnClickListener(new android.view.View.OnClickListener() { @Override public void onClick(View vi) { if (vi.getTag().equals( ctx.getResources().getString( R.string.remove_from_reminders))) { if (selectedFromList > -1) { try { Log.d(TAG, "DELETE REMINDER: " + selectedFromList); reminderControl.destroy(selectedFromList); reminderCount--; Log.d(TAG, "DELETE REMINDER: " + selectedFromList); } catch (Exception e) { e.printStackTrace(); } adapter.notifyDataSetChanged(); } } // Close context dialog dialogContext.cancel(); } }); // set focus listener of button button.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // get drawable from theme for small layout // background TypedArray atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.LayoutFocusDrawable }); int backgroundID = atts.getResourceId(0, 0); atts.recycle(); if (hasFocus) { smallLayoutHorizontal.getChildAt(0).setSelected(true); smallLayoutHorizontal .setBackgroundResource(backgroundID); } else { smallLayoutHorizontal.getChildAt(0).setSelected(false); smallLayoutHorizontal .setBackgroundColor(Color.TRANSPARENT); } } }); button.setBackgroundColor(Color.TRANSPARENT); smallLayoutHorizontal.addView(button); // add view contentLinearLayout.addView(smallLayoutHorizontal); if (i < strings.length - 1) { // create horizontal line ImageView horizLineSmall = new ImageView(ctx); android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( dialogContext.getWindow().getAttributes().width - 10, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; horizLineSmall.setLayoutParams(params); // get drawable from theme for image source atts = ctx.getTheme().obtainStyledAttributes( new int[] { R.attr.DialogContextDividerLine }); backgroundID = atts.getResourceId(0, 0); horizLineSmall.setImageResource(backgroundID); // add view contentLinearLayout.addView(horizLineSmall); } } return mainLinLayout; } }