From 21095973db377685363ff5c0efb945c0534d3070 Mon Sep 17 00:00:00 2001 From: lado Date: Thu, 20 Oct 2011 03:59:26 +0200 Subject: timer support, recording support + epg details for all of them --- .../vdrmanager/gui/BaseEpgListActivity.java | 350 -------------------- .../vdrmanager/gui/BaseEventListActivity.java | 355 +++++++++++++++++++++ .../vdrmanager/gui/EpgDetailsActivity.java | 26 +- .../vdrmanager/gui/EpgSearchListActivity.java | 29 +- .../de/bjusystems/vdrmanager/gui/EventAdapter.java | 190 ++++++----- .../vdrmanager/gui/EventEpgListActivity.java | 29 +- .../vdrmanager/gui/RecordingListActivity.java | 202 ++++-------- .../vdrmanager/gui/SimpleGestureFilter.java | 3 +- .../vdrmanager/gui/TimeEpgListActivity.java | 86 ++--- .../vdrmanager/gui/TimerDetailsActivity.java | 2 +- .../vdrmanager/gui/TimerListActivity.java | 259 +++------------ 11 files changed, 641 insertions(+), 890 deletions(-) delete mode 100644 vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEpgListActivity.java create mode 100644 vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEpgListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEpgListActivity.java deleted file mode 100644 index d298de1..0000000 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEpgListActivity.java +++ /dev/null @@ -1,350 +0,0 @@ -package de.bjusystems.vdrmanager.gui; - -import java.util.Date; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; -import android.widget.ListView; -import de.bjusystems.vdrmanager.R; -import de.bjusystems.vdrmanager.app.Intents; -import de.bjusystems.vdrmanager.data.Channel; -import de.bjusystems.vdrmanager.data.Epg; -import de.bjusystems.vdrmanager.data.EventFormatter; -import de.bjusystems.vdrmanager.data.EventListItem; -import de.bjusystems.vdrmanager.gui.SimpleGestureFilter.SimpleGestureListener; -import de.bjusystems.vdrmanager.tasks.DeleteTimerTask; -import de.bjusystems.vdrmanager.tasks.ToggleTimerTask; -import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent; - -/** - * @author lado - * - */ -public abstract class BaseEpgListActivity extends BaseActivity implements - SimpleGestureListener { - - private static final int REQUEST_CODE_TIMED_EDIT = 41; - - private SimpleGestureFilter detector; - - protected EpgClient epgClient; - - protected EventAdapter adapter; - - protected SvdrpProgressDialog progress; - - protected String highlight = null; - - protected static final Date FUTURE = new Date(Long.MAX_VALUE); - - // private static final Date BEGIN = new Date(0); - - protected Channel currentChannel = null; - - protected ListView listView; - - abstract protected int getWindowTitle(); - - @Override - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - // Attach view - setContentView(getMainLayout()); - detector = new SimpleGestureFilter(this, this); - setTitle(getWindowTitle()); - initChannel(); - } - - private void initChannel() { - currentChannel = getIntent() - .getParcelableExtra(Intents.CURRENT_CHANNEL); - } - - protected void deleteTimer(final EventListItem item) { - - final DeleteTimerTask task = new DeleteTimerTask(this, item.getEpg() - .getTimer()) { - @Override - public void finished() { - refresh(); - } - }; - task.start(); - } - - /* - * (non-Javadoc) - * - * @see - * de.bjusystems.vdrmanager.gui.BaseActivity#onCreateOptionsMenu(android - * .view.Menu) - */ - @Override - public boolean onCreateOptionsMenu(final Menu menu) { - super.onCreateOptionsMenu(menu); - - final MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.epg_list_menu, menu); - return true; - } - - protected void prepareTimer(EventListItem event) { - - } - - /* - * (non-Javadoc) - * - * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) - */ - @Override - public boolean onContextItemSelected(final MenuItem item) { - - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - final EventListItem event = adapter.getItem(info.position); - - switch (item.getItemId()) { - case R.id.epg_item_menu_timer_add: - case R.id.epg_item_menu_timer_modify: { - prepareTimer(event); - final Intent intent = new Intent(); - intent.setClass(this, TimerDetailsActivity.class); - startActivityForResult(intent, REQUEST_CODE_TIMED_EDIT); - break; - } - case R.id.epg_item_menu_timer_delete: { - deleteTimer(event); - break; - } - case R.id.epg_item_menu_timer_toggle: { - toggleTimer(event); - break; - } - case R.id.epg_item_menu_live_tv: { - Utils.stream(this, event.getEvent()); - break; - - } - } - - return true; - } - - /* - * (non-Javadoc) - * - * @see - * de.bjusystems.vdrmanager.gui.BaseActivity#onOptionsItemSelected(android - * .view.MenuItem) - */ - public boolean onOptionsItemSelected(final MenuItem item) { - - Intent intent; - - switch (item.getItemId()) { - case R.id.epg_menu_search: - //startSearchManager(); - super.onSearchRequested(); - break; - case R.id.epg_menu_times: - intent = new Intent(); - intent.setClass(this, EpgSearchTimesListActivity.class); - startActivity(intent); - break; - } - return super.onOptionsItemSelected(item); - } - - /* - * (non-Javadoc) - * - * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, - * android.view.View, android.view.ContextMenu.ContextMenuInfo) - */ - @Override - public void onCreateContextMenu(final ContextMenu menu, final View v, - final ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - - if (v.getId() == R.id.whatson_list) { - final MenuInflater inflater = getMenuInflater(); - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; - - // set menu title - final EventListItem item = adapter.getItem(info.position); - final EventFormatter formatter = new EventFormatter(item); - menu.setHeaderTitle(formatter.getTitle()); - - inflater.inflate(R.menu.epg_list_item_menu, menu); - - // remove unneeded menu items - if (item.getEpg().getTimer() != null) { - menu.findItem(R.id.epg_item_menu_timer_add).setVisible(false); - menu.findItem(R.id.epg_item_menu_timer_modify).setVisible(true); - menu.findItem(R.id.epg_item_menu_timer_delete).setVisible(true); - final MenuItem enableMenuItem = menu - .findItem(R.id.epg_item_menu_timer_toggle); - enableMenuItem.setVisible(true); - enableMenuItem - .setTitle(item.getEpg().getTimer().isEnabled() ? R.string.epg_item_menu_timer_disable - : R.string.epg_item_menu_timer_enable); - } - - if (item.isLive()) { - menu.findItem(R.id.epg_item_menu_live_tv).setVisible(true); - } - - } - - } - - protected void toggleTimer(final EventListItem item) { - final ToggleTimerTask task = new ToggleTimerTask(this, item.getEpg() - .getTimer()) { - @Override - public void finished() { - refresh(); - } - }; - task.start(); - } - - /* - * (non-Javadoc) - * - * @see android.app.Activity#onActivityResult(int, int, - * android.content.Intent) - */ - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_CODE_TIMED_EDIT) { - if (resultCode == Activity.RESULT_OK) { - refresh(); - } - } - } - - /** - * @param parent - * @param view - * @param position - * @param id - */ - public void onItemClick(final AdapterView parent, final View view, - final int position, final long id) { - - // find and remember item - final EventListItem item = adapter.getItem(position); - - if (item.isHeader()) { - return; - } - - // prepare timer if we want to program - prepareTimer(item); - - // show details - final Intent intent = new Intent(); - intent.setClass(this, EpgDetailsActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT - | Intent.FLAG_ACTIVITY_SINGLE_TOP); - if (highlight != null) { - intent.putExtra(Intents.HIGHLIGHT, highlight); - } - startActivity(intent); - } - - @Override - protected void onPause() { - super.onPause(); - if (epgClient != null) { - epgClient.abort(); - } - if (progress != null) { - progress.dismiss(); - progress = null; - } - } - - public void svdrpEvent(final SvdrpEvent event, final Epg result) { - - if (progress != null) { - progress.svdrpEvent(event); - } - - switch (event) { - case CONNECTING: - break; - case CONNECT_ERROR: - case FINISHED_ABNORMALY: - case LOGIN_ERROR: - switchNoConnection(); - break; - case FINISHED_SUCCESS: - finishedSuccess(); - break; - case RESULT_RECEIVED: - break; - } - } - - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - int index = savedInstanceState.getInt("INDEX"); - int top = savedInstanceState.getInt("TOP"); - listView.setSelectionFromTop(index, top); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - int index = listView.getFirstVisiblePosition(); - View v = listView.getChildAt(0); - int top = (v == null) ? 0 : v.getTop(); - outState.putInt("INDEX", index); - outState.putInt("TOP", top); - super.onSaveInstanceState(outState); - } - - protected abstract void finishedSuccess(); - - public boolean onSearchRequested() { - InputMethodManager inputMgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - inputMgr.toggleSoftInput(0, 0); - return true; - } - - protected void startSearchManager() { - Bundle appData = new Bundle(); - startSearch(highlight, false, appData, false); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent me) { - this.detector.onTouchEvent(me); - return super.dispatchTouchEvent(me); - } - - public void onSwipe(int direction) { - - } - - public void onDoubleTap() { - // TODO Auto-generated method stub - - } - -} diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java new file mode 100644 index 0000000..09ee612 --- /dev/null +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java @@ -0,0 +1,355 @@ +package de.bjusystems.vdrmanager.gui; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.Toast; +import de.bjusystems.vdrmanager.R; +import de.bjusystems.vdrmanager.app.Intents; +import de.bjusystems.vdrmanager.data.Channel; +import de.bjusystems.vdrmanager.data.Event; +import de.bjusystems.vdrmanager.data.EventListItem; +import de.bjusystems.vdrmanager.gui.SimpleGestureFilter.SimpleGestureListener; +import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; +import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener; +import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent; +import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; + +/** + * @author lado + * + */ +public abstract class BaseEventListActivity extends + BaseActivity implements OnItemClickListener,SvdrpAsyncListener, + SimpleGestureListener { + + private SimpleGestureFilter detector; + + protected EpgClient epgClient; + + protected EventAdapter adapter; + + protected SvdrpProgressDialog progress; + + protected String highlight = null; + + protected static final Date FUTURE = new Date(Long.MAX_VALUE); + + // private static final Date BEGIN = new Date(0); + + protected Channel currentChannel = null; + + protected ListView listView; + + abstract protected int getWindowTitle(); + + protected List results = new ArrayList(); + + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + // Attach view + setContentView(getMainLayout()); + detector = new SimpleGestureFilter(this, this); + setTitle(getWindowTitle()); + initChannel(); + } + + private void initChannel() { + currentChannel = getIntent() + .getParcelableExtra(Intents.CURRENT_CHANNEL); + } + + + + /* + * (non-Javadoc) + * + * @see + * de.bjusystems.vdrmanager.gui.BaseActivity#onCreateOptionsMenu(android + * .view.Menu) + */ + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + super.onCreateOptionsMenu(menu); + + final MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.epg_list_menu, menu); + return true; + } + + protected void prepareTimer(EventListItem event) { + + } + + + /* + * (non-Javadoc) + * + * @see android.app.Activity#onContextItemSelected(android.view.MenuItem) + */ + @Override + public boolean onContextItemSelected(final MenuItem item) { + + final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item + .getMenuInfo(); + final EventListItem event = adapter.getItem(info.position); + + + switch (item.getItemId()) { + case R.id.epg_item_menu_live_tv: { + Utils.stream(this, event); + break; + } + } + + return true; + } + + /* + * (non-Javadoc) + * + * @see + * de.bjusystems.vdrmanager.gui.BaseActivity#onOptionsItemSelected(android + * .view.MenuItem) + */ + public boolean onOptionsItemSelected(final MenuItem item) { + + Intent intent; + + switch (item.getItemId()) { + case R.id.epg_menu_search: + // startSearchManager(); + super.onSearchRequested(); + break; + case R.id.epg_menu_times: + intent = new Intent(); + intent.setClass(this, EpgSearchTimesListActivity.class); + startActivity(intent); + break; + } + return super.onOptionsItemSelected(item); + } + + /* + * (non-Javadoc) + * + * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, + * android.view.View, android.view.ContextMenu.ContextMenuInfo) + */ + @Override + public void onCreateContextMenu(final ContextMenu menu, final View v, + final ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + + //if (v.getId() == R.id.whatson_list) { + final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; + + // set menu title + final EventListItem item = adapter.getItem(info.position); + + if (item.isLive()) { + menu.findItem(R.id.epg_item_menu_live_tv).setVisible(true); + } + + //} + + } + + /** + * @param parent + * @param view + * @param position + * @param id + */ + public void onItemClick(final AdapterView parent, final View view, + final int position, final long id) { + + // find and remember item + final EventListItem item = adapter.getItem(position); + + if (item.isHeader()) { + return; + } + + // prepare timer if we want to program + prepareTimer(item); + + // show details + final Intent intent = new Intent(); + intent.setClass(this, EpgDetailsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT + | Intent.FLAG_ACTIVITY_SINGLE_TOP); + if (highlight != null) { + intent.putExtra(Intents.HIGHLIGHT, highlight); + } + startActivity(intent); + } + + @Override + protected void onPause() { + super.onPause(); + if (epgClient != null) { + epgClient.abort(); + } + if (progress != null) { + progress.dismiss(); + progress = null; + } + } + + public void svdrpEvent(final SvdrpEvent event, final T result) { + + if (progress != null) { + progress.svdrpEvent(event); + } + + switch (event) { + case ERROR: + Toast.makeText(this, R.string.epg_client_errors, Toast.LENGTH_SHORT) + .show(); + dismiss(progress); + break; + case CONNECTING: + break; + case CONNECTED: + results.clear(); + break; + case CONNECT_ERROR: + case FINISHED_ABNORMALY: + case LOGIN_ERROR: + switchNoConnection(); + break; + case FINISHED_SUCCESS: + if (finishedSuccess() == false) { + say(R.string.epg_no_items); + } + break; + case RESULT_RECEIVED: + resultReceived(result); + break; + } + } + + protected void resultReceived(Event result) { + results.add(result); + } + + // + // @Override + // protected void onRestoreInstanceState(Bundle savedInstanceState) { + // super.onRestoreInstanceState(savedInstanceState); + // int index = savedInstanceState.getInt("INDEX"); + // int top = savedInstanceState.getInt("TOP"); + // listView.setSelectionFromTop(index, top); + // } + // + // @Override + // protected void onSaveInstanceState(Bundle outState) { + // int index = listView.getFirstVisiblePosition(); + // View v = listView.getChildAt(0); + // int top = (v == null) ? 0 : v.getTop(); + // outState.putInt("INDEX", index); + // outState.putInt("TOP", top); + // super.onSaveInstanceState(outState); + // } + + protected void dismiss(AlertDialog dialog) { + if (dialog == null) { + return; + } + dialog.dismiss(); + } + + /** + * @return false, if no results found + */ + protected abstract boolean finishedSuccess(); + + public boolean onSearchRequested() { + InputMethodManager inputMgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputMgr.toggleSoftInput(0, 0); + return true; + } + + protected void startSearchManager() { + Bundle appData = new Bundle(); + startSearch(highlight, false, appData, false); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent me) { + this.detector.onTouchEvent(me); + return super.dispatchTouchEvent(me); + } + + public void onSwipe(int direction) { + + } + + public void onDoubleTap() { + + } + + protected void sortItemsByChannel(List result) { + final Comparator comparator = new Comparator() { + + public int compare(final Event item1, final Event item2) { + return Integer.valueOf(item1.getChannelNumber()).compareTo( + Integer.valueOf(item2.getChannelNumber())); + } + }; + Collections.sort(result, comparator); + } + + protected void sortItemsByTime(List result) { + final Comparator comparator = new Comparator() { + + public int compare(final Event item1, final Event item2) { + int c = item1.getStart().compareTo(item2.getStart()); + if (c != 0) { + return c; + } + return Integer.valueOf(item1.getChannelNumber()).compareTo( + Integer.valueOf(item2.getChannelNumber())); + } + }; + Collections.sort(result, comparator); + } + + public void svdrpException(final SvdrpException exception) { + if (progress != null) { + progress.svdrpException(exception); + } + } + + + protected void say(int res) { + Toast.makeText(this, res, Toast.LENGTH_SHORT).show(); + } + + protected void say(String msg) { + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + } + + +} diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java index 8c52801..b0a7c01 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java @@ -20,8 +20,10 @@ import de.bjusystems.vdrmanager.app.Intents; import de.bjusystems.vdrmanager.app.VdrManagerApp; import de.bjusystems.vdrmanager.data.Channel; import de.bjusystems.vdrmanager.data.Epg; +import de.bjusystems.vdrmanager.data.Event; import de.bjusystems.vdrmanager.data.EventFormatter; import de.bjusystems.vdrmanager.data.Preferences; +import de.bjusystems.vdrmanager.data.Timer; import de.bjusystems.vdrmanager.gui.SimpleGestureFilter.SimpleGestureListener; import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; @@ -64,17 +66,17 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, // current event final VdrManagerApp app = (VdrManagerApp) getApplication(); epgs = app.getCurrentEpgList(); - Epg epg = app.getCurrentEvent(); + Event epg = app.getCurrentEvent(); counter = 0; - for(Epg e : epgs){ + for(Event e : epgs){ if(epg == e){ break; } counter++; } - + new AsyncTask(){ @@ -102,7 +104,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, app.clearActivitiesToFinish(); } - public void publishEPG(Epg event) { + public void publishEPG(Event event) { String cn = event.getChannelName(); @@ -177,7 +179,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, // setThisAsOnClickListener(R.id.epg_event_right); // set button text - if (event.getTimer() == null) { + if (event instanceof Timer) { // timeButton.setText(R.string.epg_event_create_timer_text); } else { // timeButton.setText(R.string.epg_event_modify_timer_text); @@ -213,7 +215,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, final VdrManagerApp app = (VdrManagerApp) getApplication(); switch (v.getId()) { case R.id.epg_event_livetv: - Epg event = app.getCurrentEvent(); + Event event = app.getCurrentEvent(); Utils.stream(this, event.getChannelNumber()); break; case R.id.epg_event_create_timer: @@ -241,7 +243,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, } private void prevEPG() { - Epg epg; + Event epg; if (counter == 0) { epg = epgs.get(0); } else { @@ -252,7 +254,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, } - List epgs = null; + List epgs = null; int counter = 0; public void initEPGs() { @@ -260,10 +262,10 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, if (epgs != null) { return; } - epgs = new ArrayList(); + epgs = new ArrayList(); final VdrManagerApp app = (VdrManagerApp) getApplication(); - final Epg event = app.getCurrentEvent(); + final Event event = app.getCurrentEvent(); EpgClient c = new EpgClient(new Channel() { @Override public String getName() { @@ -289,7 +291,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, } epgs.addAll(e); - Epg fe = epgs.get(0); + Event fe = epgs.get(0); if (event.getStart().equals(fe.getStart()) == false) { epgs.set(0, event); ; @@ -300,7 +302,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener, if(counter < epgs.size() - 1){ counter ++ ; } - Epg epg = epgs.get(counter); + Event epg = epgs.get(counter); publishEPG(epg); } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java index 4dba61d..85aae19 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java @@ -14,6 +14,7 @@ import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.VdrManagerApp; import de.bjusystems.vdrmanager.data.Epg; import de.bjusystems.vdrmanager.data.EpgSearchParams; +import de.bjusystems.vdrmanager.data.Event; import de.bjusystems.vdrmanager.data.EventListItem; import de.bjusystems.vdrmanager.utils.date.DateFormatter; import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; @@ -27,11 +28,9 @@ import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; * * @author bju */ -public class EpgSearchListActivity extends BaseEpgListActivity implements +public class EpgSearchListActivity extends BaseEventListActivity implements OnItemClickListener, SvdrpAsyncListener { - public List results; - @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -43,9 +42,9 @@ public class EpgSearchListActivity extends BaseEpgListActivity implements highlight = query.trim(); } } - adapter = new ChannelEventAdapter(this); + adapter = new TimeEventAdapter(this); adapter.setHideDescription(false); - + startEpgQuery(); // Create adapter for EPG list listView = (ListView) findViewById(R.id.whatson_list); listView.setAdapter(adapter); @@ -62,7 +61,7 @@ public class EpgSearchListActivity extends BaseEpgListActivity implements protected void onResume() { super.onResume(); // adapter.notifyDataSetChanged(); - startEpgQuery(); + } @@ -95,6 +94,8 @@ public class EpgSearchListActivity extends BaseEpgListActivity implements // start task task.run(); } + + /* * (non-Javadoc) TODO this method also should be used in startEpgQuery on @@ -103,14 +104,14 @@ public class EpgSearchListActivity extends BaseEpgListActivity implements * @see de.bjusystems.vdrmanager.gui.BaseEpgListActivity#finishedSuccess() */ @Override - protected void finishedSuccess() { + protected boolean finishedSuccess() { adapter.clear(); adapter.highlight = this.highlight; Calendar cal = Calendar.getInstance(); int day = -1; - results = epgClient.getResults(); - for (Epg e : results) { + sortItemsByTime(results); + for (Event e : results) { cal.setTime(e.getStart()); int eday = cal.get(Calendar.DAY_OF_YEAR); if (eday != day) { @@ -118,14 +119,14 @@ public class EpgSearchListActivity extends BaseEpgListActivity implements adapter.add(new EventListItem(new DateFormatter(cal) .getDailyHeader())); } - adapter.add(new EventListItem(e)); + adapter.add(new EventListItem((Epg)e)); } listView.setSelectionAfterHeaderView(); - if (progress != null) { - progress.dismiss(); - progress = null; - } + dismiss(progress); + return results.isEmpty() == false; } + + public void svdrpException(final SvdrpException exception) { if (progress != null) { diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventAdapter.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventAdapter.java index 98adbb9..3f7fc4d 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventAdapter.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventAdapter.java @@ -4,11 +4,6 @@ import java.util.ArrayList; import java.util.List; import android.content.Context; -import android.graphics.Color; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.TextUtils; -import android.text.style.ForegroundColorSpan; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -17,6 +12,7 @@ import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; +import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import de.bjusystems.vdrmanager.R; @@ -43,6 +39,9 @@ abstract class EventAdapter extends ArrayAdapter implements inflater = LayoutInflater.from(context); } + + + @Override public void add(EventListItem object) { items.add(object); @@ -53,11 +52,25 @@ abstract class EventAdapter extends ArrayAdapter implements public View getView(final int position, final View convertView, final ViewGroup parent) { + // get item + final EventListItem item = getItem(position); + + if (item.isHeader()) { + return getHeaderView(item, convertView, parent); + } else { + return getEventView(item, convertView, parent); + } + + } + + private View getEventView(EventListItem item, View convertView, + ViewGroup parent) { + EventListItemHolder itemHolder = new EventListItemHolder(); // recycle view? View view = convertView; - if (view == null) { + if (view == null || view instanceof ListView == false) { view = inflater.inflate(layout, null); itemHolder = new EventListItemHolder(); @@ -83,92 +96,99 @@ abstract class EventAdapter extends ArrayAdapter implements itemHolder = (EventListItemHolder) view.getTag(); } - // get item - final EventListItem item = getItem(position); - // fill item - if (item.isHeader()) { - view.setPadding(view.getPaddingLeft(), 0, view.getPaddingRight(), 0); - view.setBackgroundColor(Color.DKGRAY); - itemHolder.state.setVisibility(View.GONE); - itemHolder.channel.setVisibility(View.VISIBLE); - itemHolder.channel.setText(item.getHeader()); - itemHolder.title.setVisibility(View.GONE); - itemHolder.time.setVisibility(View.GONE); - itemHolder.progress.setVisibility(View.GONE); - itemHolder.shortText.setVisibility(View.GONE); - itemHolder.duration.setVisibility(View.GONE); - itemHolder.description.setVisibility(View.GONE); +// itemHolder.title.setVisibility(View.VISIBLE); + itemHolder.state.setVisibility(View.VISIBLE); + //itemHolder.shortText.setVisibility(View.VISIBLE); + //itemHolder.duration.setVisibility(View.VISIBLE); + // itemHolder.state.setVisibility(View.); + switch (item.getTimerState()) { + case Active: + //itemHolder.state.setVisibility(View.VISIBLE); + itemHolder.state.setImageResource(R.drawable.timer_active); + break; + case Inactive: + //itemHolder.state.setVisibility(View.VISIBLE); + itemHolder.state.setImageResource(R.drawable.timer_inactive); + break; + case Recording: + //itemHolder.state.setVisibility(View.VISIBLE); + itemHolder.state.setImageResource(R.drawable.timer_recording); + break; + case None: + //itemHolder.state.setVisibility(View.GONE); + itemHolder.state.setImageResource(R.drawable.timer_none); + break; + } + + final EventFormatter formatter = getEventFormatter(item); + itemHolder.time.setText(formatter.getTime()); + if (hideChannelName) { + itemHolder.channel.setVisibility(View.GONE); } else { + itemHolder.channel.setText(item.getChannelName()); + } - view.setBackgroundColor(Color.BLACK); - // itemHolder.channel.setVisibility(View.VISIBLE); - itemHolder.time.setVisibility(View.VISIBLE); - itemHolder.title.setVisibility(View.VISIBLE); - itemHolder.state.setVisibility(View.VISIBLE); - // itemHolder.channel.setVisibility(View.VISIBLE); - itemHolder.shortText.setVisibility(View.VISIBLE); - itemHolder.duration.setVisibility(View.VISIBLE); - // itemHolder.state.setVisibility(View.); - switch (item.getTimerState()) { - case Active: - itemHolder.state.setImageResource(R.drawable.timer_active); - break; - case Inactive: - itemHolder.state.setImageResource(R.drawable.timer_inactive); - break; - case Recording: - itemHolder.state.setImageResource(R.drawable.timer_recording); - break; - case None: - itemHolder.state.setImageResource(R.drawable.timer_none); - break; - } - final EventFormatter formatter = getEventFormatter(item.getEvent()); - itemHolder.time.setText(formatter.getTime()); - if (hideChannelName) { - itemHolder.channel.setVisibility(View.GONE); - } else { - itemHolder.channel.setText(item.getChannelName()); - } + CharSequence title = Utils.highlight(formatter.getTitle(), highlight); + CharSequence shortText = Utils.highlight(formatter.getShortText(), + highlight); + itemHolder.title.setText(title); + itemHolder.shortText.setText(shortText); - CharSequence title = Utils.highlight(formatter.getTitle(), - highlight); - CharSequence shortText = Utils.highlight(formatter.getShortText(), - highlight); - itemHolder.title.setText(title); - itemHolder.shortText.setText(shortText); - - if (hideDescription == false) { - Pair desc = Utils.highlight2( - formatter.getDescription(), highlight); - if (desc.first == true) { - itemHolder.description.setVisibility(View.VISIBLE); - itemHolder.description.setText(desc.second); - } + if (hideDescription == false) { + Pair desc = Utils.highlight2( + formatter.getDescription(), highlight); + if (desc.first == true) { + itemHolder.description.setVisibility(View.VISIBLE); + itemHolder.description.setText(desc.second); } + } - int p = Utils.getProgress(item); - if (p == -1) { - itemHolder.progress.setVisibility(View.GONE); - // itemHolder.time.setTypeface(null, Typeface.NORMAL); - // itemHolder.title.setTypeface(null, Typeface.NORMAL); - // itemHolder.shortText.setTypeface(null, Typeface.NORMAL); - int dura = Utils.getDuration(item); - itemHolder.duration.setText(getContext().getString( - R.string.epg_duration_template, dura)); - } else { - itemHolder.progress.setVisibility(View.VISIBLE); - itemHolder.progress.setProgress(p); - // itemHolder.time.setTypeface(null, Typeface.BOLD); - // itemHolder.title.setTypeface(null, Typeface.BOLD); - // itemHolder.shortText.setTypeface(null, Typeface.BOLD); - int dura = Utils.getDuration(item); - int rest = dura - (dura * p / 100); - itemHolder.duration.setText(getContext().getString( - R.string.epg_duration_template_live, rest, dura)); - } + int p = Utils.getProgress(item); + if (p == -1) { + itemHolder.progress.setVisibility(View.GONE); + // itemHolder.time.setTypeface(null, Typeface.NORMAL); + // itemHolder.title.setTypeface(null, Typeface.NORMAL); + // itemHolder.shortText.setTypeface(null, Typeface.NORMAL); + int dura = Utils.getDuration(item); + itemHolder.duration.setText(getContext().getString( + R.string.epg_duration_template, dura)); + } else { + itemHolder.progress.setVisibility(View.VISIBLE); + itemHolder.progress.setProgress(p); + // itemHolder.time.setTypeface(null, Typeface.BOLD); + // itemHolder.title.setTypeface(null, Typeface.BOLD); + // itemHolder.shortText.setTypeface(null, Typeface.BOLD); + int dura = Utils.getDuration(item); + int rest = dura - (dura * p / 100); + itemHolder.duration.setText(getContext().getString( + R.string.epg_duration_template_live, rest, dura)); + } + + return view; + } + + class EventListItemHeaderHolder { + public TextView header; + } + + private View getHeaderView(EventListItem item, View convertView, + ViewGroup parent) { + + EventListItemHeaderHolder itemHolder = new EventListItemHeaderHolder(); + + // recycle view? + View view = convertView; + if (view == null || convertView instanceof TextView == false) { + view = inflater.inflate(R.layout.header_item, null); + + itemHolder = new EventListItemHeaderHolder(); + + itemHolder.header = (TextView) view.findViewById(R.id.header_item); + } else { + itemHolder = (EventListItemHeaderHolder) view.getTag(); } + itemHolder.header.setText(item.getHeader()); return view; } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java index 476bdd9..f481244 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java @@ -5,10 +5,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -import android.app.SearchManager; -import android.content.Intent; import android.os.Bundle; -import android.text.TextUtils; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -21,24 +18,23 @@ import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.VdrManagerApp; import de.bjusystems.vdrmanager.data.Channel; import de.bjusystems.vdrmanager.data.Epg; +import de.bjusystems.vdrmanager.data.Event; import de.bjusystems.vdrmanager.data.EventListItem; import de.bjusystems.vdrmanager.utils.date.DateFormatter; import de.bjusystems.vdrmanager.utils.svdrp.ChannelClient; import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; /** * This class is used for showing what's current running on all channels * * @author bju */ -public class EventEpgListActivity extends BaseEpgListActivity implements - OnItemClickListener, OnItemSelectedListener, SvdrpAsyncListener { +public class EventEpgListActivity extends BaseTimerEditActivity implements + OnItemClickListener, OnItemSelectedListener { - private final static ArrayList CACHE = new ArrayList(); + private final static ArrayList CACHE = new ArrayList(); protected static Date nextForceCache = null; @@ -149,7 +145,8 @@ public class EventEpgListActivity extends BaseEpgListActivity implements if (useCache(channel) && !force) { Calendar cal = Calendar.getInstance(); int day = -1; - for (Epg e : CACHE) { + for (Event i : CACHE) { + Epg e = (Epg)i; cal.setTime(e.getStart()); int eday = cal.get(Calendar.DAY_OF_YEAR); if (eday != day) { @@ -189,7 +186,7 @@ public class EventEpgListActivity extends BaseEpgListActivity implements * @see de.bjusystems.vdrmanager.gui.BaseEpgListActivity#finishedSuccess() */ @Override - protected void finishedSuccess() { + protected boolean finishedSuccess() { adapter.clear(); CACHE.clear(); Date now = new Date(); @@ -212,16 +209,8 @@ public class EventEpgListActivity extends BaseEpgListActivity implements } cachedChannel = currentChannel; listView.setSelectionAfterHeaderView(); - if (progress != null) { - progress.dismiss(); - progress = null; - } - } - - public void svdrpException(final SvdrpException exception) { - if (progress != null) { - progress.svdrpException(exception); - } + dismiss(progress); + return CACHE.isEmpty() == false; } protected void prepareTimer(final EventListItem item) { diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java index 20ba517..8dfc530 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java @@ -2,55 +2,38 @@ package de.bjusystems.vdrmanager.gui; import java.util.Calendar; -import android.content.Intent; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuInflater; -import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ListView; -import android.widget.Toast; import de.bjusystems.vdrmanager.R; -import de.bjusystems.vdrmanager.app.VdrManagerApp; -import de.bjusystems.vdrmanager.data.Epg; import de.bjusystems.vdrmanager.data.EventFormatter; import de.bjusystems.vdrmanager.data.EventListItem; import de.bjusystems.vdrmanager.data.Recording; -import de.bjusystems.vdrmanager.data.Timer; -import de.bjusystems.vdrmanager.tasks.DeleteTimerTask; import de.bjusystems.vdrmanager.utils.date.DateFormatter; import de.bjusystems.vdrmanager.utils.svdrp.RecordingClient; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; /** * This class is used for showing what's current running on all channels * * @author bju */ -public class RecordingListActivity extends BaseActivity implements - OnItemClickListener, SvdrpAsyncListener { +public class RecordingListActivity extends BaseEventListActivity + implements OnItemLongClickListener, SvdrpAsyncListener { RecordingClient recordingClient; - EventAdapter adapter; - SvdrpProgressDialog progress; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // set title - setTitle(R.string.action_menu_recordings); - - // Attach view - setContentView(getMainLayout()); - // create an adapter adapter = new RecordingAdapter(this); @@ -59,8 +42,9 @@ public class RecordingListActivity extends BaseActivity implements listView.setAdapter(adapter); // set click listener + listView.setOnItemLongClickListener(this); + // register EPG item click listView.setOnItemClickListener(this); - // context menu wanted registerForContextMenu(listView); @@ -73,25 +57,19 @@ public class RecordingListActivity extends BaseActivity implements super.onResume(); } - protected void updateWindowTitle(int topic, int subtopic) { - String title; - title = getString(topic); - if (subtopic != -1) { - title += " > " + getString(subtopic); - } - setTitle(title); - } - @Override protected void onPause() { super.onPause(); if (recordingClient != null) { recordingClient.abort(); } - if (progress != null) { - progress.dismiss(); - progress = null; - } + dismiss(progress); + } + + @Override + protected void prepareTimer(EventListItem event) { + getApp().setCurrentEvent(event); + getApp().setCurrentEpgList(results); } @Override @@ -112,47 +90,25 @@ public class RecordingListActivity extends BaseActivity implements } } - @Override - public boolean onContextItemSelected(final MenuItem item) { - - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - final EventListItem event = adapter.getItem(info.position); - - switch (item.getItemId()) { - case R.id.recording_item_menu_delete: { - - break; - } - case R.id.recording_item_menu_stream: { - break; - } - } - return true; - } - - public void onItemClick(final AdapterView parent, final View view, - final int position, final long id) { - - // save selected item - final Timer timer = adapter.getItem(position).getTimer(); - if (timer == null) { - // header click - return; - } - - final VdrManagerApp app = (VdrManagerApp) getApplication(); - app.setCurrentTimer(timer); - - // after timer editing return to the timer list - app.setNextActivity(RecordingListActivity.class); - app.clearActivitiesToFinish(); - - // show timer details - final Intent intent = new Intent(); - intent.setClass(this, TimerDetailsActivity.class); - startActivity(intent); - } + // @Override + // public boolean onContextItemSelected(final MenuItem item) { + // + // final AdapterView.AdapterContextMenuInfo info = + // (AdapterView.AdapterContextMenuInfo) item + // .getMenuInfo(); + // final EventListItem event = adapter.getItem(info.position); + // + // switch (item.getItemId()) { + // case R.id.recording_item_menu_delete: { + // + // break; + // } + // case R.id.recording_item_menu_stream: { + // break; + // } + // } + // return true; + // } private void startRecordingQuery() { @@ -173,72 +129,6 @@ public class RecordingListActivity extends BaseActivity implements task.run(); } - - private void dismiss(){ - if (progress != null) { - progress.dismiss(); - } - } - - public void svdrpEvent(final SvdrpEvent event, final Recording result) { - - if (progress != null) { - progress.svdrpEvent(event); - } - - switch (event) { - case CONNECTING: - break; - case FINISHED_ABNORMALY: - case CONNECT_ERROR: - switchNoConnection();// TODO pass arg, what is the problem - case LOGIN_ERROR: - dismiss(); - switchNoConnection(); - break; - case FINISHED_SUCCESS: - adapter.clear(); - Calendar cal = Calendar.getInstance(); - int day = -1; - for (final Recording rec : recordingClient.getResults()) { - cal.setTime(rec.getStart()); - int eday = cal.get(Calendar.DAY_OF_YEAR); - if (eday != day) { - day = eday; - adapter.add(new EventListItem(new DateFormatter(cal) - .getDailyHeader())); - } - adapter.add(new EventListItem(rec)); - } - // adapter.sortItems(); - dismiss(); - if (recordingClient.getResults().isEmpty()) { - Toast.makeText(RecordingListActivity.this, - R.string.epg_no_items, Toast.LENGTH_SHORT).show(); - } - break; - } - } - - public void svdrpException(final SvdrpException exception) { - if (progress != null) { - progress.svdrpException(exception); - } - } - - private void deleteTimer(final EventListItem item) { - - final DeleteTimerTask task = new DeleteTimerTask(this, item.getTimer()) { - @Override - public void finished() { - // refresh epg list after return - final VdrManagerApp app = (VdrManagerApp) getApplication(); - app.setReload(true); - } - }; - task.start(); - } - protected void retry() { startRecordingQuery(); } @@ -252,5 +142,35 @@ public class RecordingListActivity extends BaseActivity implements return R.layout.recording_list; } + @Override + protected int getWindowTitle() { + return R.string.remux_title; + } + + @Override + protected boolean finishedSuccess() { + adapter.clear(); + Calendar cal = Calendar.getInstance(); + int day = -1; + for (final Recording rec : recordingClient.getResults()) { + results.add(rec); + cal.setTime(rec.getStart()); + int eday = cal.get(Calendar.DAY_OF_YEAR); + if (eday != day) { + day = eday; + adapter.add(new EventListItem(new DateFormatter(cal) + .getDailyHeader())); + } + adapter.add(new EventListItem(rec)); + } + // adapter.sortItems(); + return results.isEmpty() == false; + } + + public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + + return false; + } } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/SimpleGestureFilter.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/SimpleGestureFilter.java index 85b6b5d..2afe23a 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/SimpleGestureFilter.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/SimpleGestureFilter.java @@ -120,6 +120,7 @@ public class SimpleGestureFilter extends SimpleOnGestureListener{ result = true; } + /* else if(velocityY > this.swipe_Min_Velocity && yDistance > this.swipe_Min_Distance){ if(e1.getY() > e2.getY()) // bottom to up this.listener.onSwipe(SWIPE_UP); @@ -128,7 +129,7 @@ public class SimpleGestureFilter extends SimpleOnGestureListener{ result = true; } - +*/ return result; } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java index e6fcb1f..f237a89 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java @@ -1,12 +1,10 @@ package de.bjusystems.vdrmanager.gui; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; -import java.util.List; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -14,27 +12,27 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Spinner; +import android.widget.TextView; import android.widget.Toast; import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.VdrManagerApp; import de.bjusystems.vdrmanager.data.Epg; import de.bjusystems.vdrmanager.data.EpgSearchTimeValue; import de.bjusystems.vdrmanager.data.EpgSearchTimeValues; +import de.bjusystems.vdrmanager.data.Event; import de.bjusystems.vdrmanager.data.EventListItem; import de.bjusystems.vdrmanager.utils.date.DateFormatter; import de.bjusystems.vdrmanager.utils.svdrp.EpgClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; /** * This class is used for showing what's current running on all channels * * @author bju */ -public class TimeEpgListActivity extends BaseEpgListActivity implements - OnItemClickListener, OnItemSelectedListener, SvdrpAsyncListener { +public class TimeEpgListActivity extends BaseTimerEditActivity implements + OnItemClickListener, OnItemSelectedListener { Spinner timeSpinner; @@ -42,16 +40,14 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements protected static Date nextForceCache = null; - private final static ArrayList CACHE = new ArrayList(); + private final static ArrayList CACHE = new ArrayList(); private static String cachedTime = null; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - // create adapter for time spinner timeSpinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); @@ -81,6 +77,10 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements } + private void addCustom() { + + } + private void fillTimeSpinnerValues() { final EpgSearchTimeValues values = new EpgSearchTimeValues(this); timeSpinnerAdapter.clear(); @@ -88,17 +88,15 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements timeSpinnerAdapter.add(value); } } - + private int currentPostion = 0; @Override protected void onPause() { super.onPause(); - - } + } - @Override protected void onResume() { super.onResume(); @@ -152,8 +150,8 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements adapter.add(new EventListItem(new DateFormatter(CACHE.get(0) .getStart()).getDailyHeader())); } - for (Epg e : CACHE) { - adapter.add(new EventListItem(e)); + for (Event e : CACHE) { + adapter.add(new EventListItem((Epg) e)); } // adapter.sortItems(); listView.setSelectionAfterHeaderView(); @@ -163,6 +161,7 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements clearCache(); epgClient = new EpgClient(time); + epgClient.setResultInfoEnabled(true); // remove old listeners // epgClient.clearSvdrpListener(); @@ -181,7 +180,7 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements } @Override - protected void finishedSuccess() { + protected boolean finishedSuccess() { // get spinner value final EpgSearchTimeValue selection = (EpgSearchTimeValue) timeSpinner .getSelectedItem(); @@ -190,41 +189,22 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements nextForceCache = FUTURE; cachedTime = selection.getValue(); Date now = new Date(); - List results = epgClient.getResults(); sortItemsByChannel(results); if (results.isEmpty() == false) { adapter.add(new EventListItem(new DateFormatter(results.get(0) .getStart()).getDailyHeader())); } - for (Epg e : results) { + for (Event e : results) { CACHE.add(e); - adapter.add(new EventListItem(e)); + adapter.add(new EventListItem((Epg) e)); if (e.getStop().before(nextForceCache) && e.getStop().after(now)) { nextForceCache = e.getStop(); } } listView.setSelectionAfterHeaderView(); - if (progress != null) { - progress.dismiss(); - progress = null; - } - } + dismiss(progress); + return CACHE.isEmpty() == false; - public void svdrpException(final SvdrpException exception) { - if (progress != null) { - progress.svdrpException(exception); - } - } - - private void sortItemsByChannel(List result) { - final Comparator comparator = new Comparator() { - - public int compare(final Epg item1, final Epg item2) { - return Integer.valueOf(item1.getChannelNumber()).compareTo( - Integer.valueOf(item2.getChannelNumber())); - } - }; - Collections.sort(result, comparator); } protected void prepareTimer(final EventListItem item) { @@ -253,31 +233,32 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements protected void retry() { refresh(); } - + @Override protected int getWindowTitle() { return R.string.epg_by_time; } - - private void nextEvent(){ + private void nextEvent() { int pos = timeSpinner.getSelectedItemPosition(); - if(pos + 1 >= timeSpinnerAdapter.getCount()){ - Toast.makeText(this, R.string.navigae_at_the_end, Toast.LENGTH_SHORT).show(); + if (pos + 1 >= timeSpinnerAdapter.getCount()) { + Toast.makeText(this, R.string.navigae_at_the_end, + Toast.LENGTH_SHORT).show(); return; } - timeSpinner.setSelection(pos+1, true); + timeSpinner.setSelection(pos + 1, true); } - - private void prevEvent(){ + + private void prevEvent() { int pos = timeSpinner.getSelectedItemPosition(); - if(pos <= 0){ - Toast.makeText(this, R.string.navigae_at_the_start, Toast.LENGTH_SHORT).show(); + if (pos <= 0) { + Toast.makeText(this, R.string.navigae_at_the_start, + Toast.LENGTH_SHORT).show(); return; } - timeSpinner.setSelection(pos-1, true); + timeSpinner.setSelection(pos - 1, true); } - + @Override public void onSwipe(int direction) { switch (direction) { @@ -289,5 +270,4 @@ public class TimeEpgListActivity extends BaseEpgListActivity implements break; } } - } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java index 10f1822..5a79c30 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java @@ -120,7 +120,7 @@ public class TimerDetailsActivity extends Activity implements OnClickListener, .getText().toString()); // create client for saving the timer - setTimerClient = new SetTimerClient(timer, false); + //setTimerClient = new SetTimerClient(timer, false); // create backgound task final SvdrpAsyncTask> task = new SvdrpAsyncTask>( diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java index 7cf96c0..f796fa6 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java @@ -1,28 +1,18 @@ package de.bjusystems.vdrmanager.gui; -import android.content.Intent; +import java.util.Calendar; + import android.os.Bundle; -import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; -import android.widget.Toast; import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.VdrManagerApp; -import de.bjusystems.vdrmanager.data.EventFormatter; import de.bjusystems.vdrmanager.data.EventListItem; import de.bjusystems.vdrmanager.data.Timer; -import de.bjusystems.vdrmanager.tasks.DeleteTimerTask; -import de.bjusystems.vdrmanager.tasks.ToggleTimerTask; +import de.bjusystems.vdrmanager.utils.date.DateFormatter; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent; -import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException; import de.bjusystems.vdrmanager.utils.svdrp.TimerClient; /** @@ -30,23 +20,17 @@ import de.bjusystems.vdrmanager.utils.svdrp.TimerClient; * * @author bju */ -public class TimerListActivity extends BaseActivity implements +public class TimerListActivity extends BaseTimerEditActivity implements OnItemClickListener, SvdrpAsyncListener { - - private static final int REQUEST_CODE_TIMED_EDIT = 41; - TimerClient timerClient; - EventAdapter adapter; - SvdrpProgressDialog progress; + + + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - // set title - setTitle(R.string.action_menu_timers); - // Attach view setContentView(getMainLayout()); @@ -54,8 +38,10 @@ public class TimerListActivity extends BaseActivity implements adapter = new TimeEventAdapter(this); // attach adapter to ListView - final ListView listView = (ListView) findViewById(R.id.timer_list); + listView = (ListView) findViewById(R.id.timer_list); listView.setAdapter(adapter); + listView.setFastScrollEnabled(true); + listView.setTextFilterEnabled(true); // set click listener listView.setOnItemClickListener(this); @@ -70,25 +56,6 @@ public class TimerListActivity extends BaseActivity implements @Override protected void onResume() { super.onResume(); - reloadIfNeeded(); - } - - private void reloadIfNeeded() { - - final VdrManagerApp app = (VdrManagerApp) getApplication(); - if (app.isReload()) { - app.setReload(false); - startTimerQuery(); - } - } - - protected void updateWindowTitle(int topic, int subtopic) { - String title; - title = getString(topic); - if (subtopic != -1) { - title += " > " + getString(subtopic); - } - setTitle(title); } @Override @@ -97,81 +64,9 @@ public class TimerListActivity extends BaseActivity implements if (timerClient != null) { timerClient.abort(); } - if (progress != null) { - progress.dismiss(); - progress = null; - } + dismiss(progress); } - @Override - public void onCreateContextMenu(final ContextMenu menu, final View v, - final ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - - if (v.getId() == R.id.timer_list) { - final MenuInflater inflater = getMenuInflater(); - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; - - // set menu title - final EventListItem item = adapter.getItem(info.position); - final EventFormatter formatter = new EventFormatter(item); - menu.setHeaderTitle(formatter.getTitle()); - - inflater.inflate(R.menu.epg_list_item_menu, menu); - - // remove unneeded menu items - menu.findItem(R.id.epg_item_menu_timer_add).setVisible(false); - final MenuItem enableMenuItem = menu - .findItem(R.id.epg_item_menu_timer_toggle); - enableMenuItem - .setTitle(item.getTimer().isEnabled() ? R.string.epg_item_menu_timer_disable - : R.string.epg_item_menu_timer_enable); - } - } -// -// @Override -// public boolean onContextItemSelected(final MenuItem item) { -// -// final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item -// .getMenuInfo(); -// final EventListItem event = adapter.getItem(info.position); -// -// switch (item.getItemId()) { -// case R.id.epg_item_menu_timer_modify: { -// onItemClick(null, null, info.position, 0); -// break; -// } -// case R.id.epg_item_menu_timer_delete: { -// deleteTimer(event); -// break; -// } -// case R.id.epg_item_menu_timer_toggle: { -// toggleTimer(event); -// } -// } -// -// return true; -// } - - public void onItemClick(final AdapterView parent, final View view, - final int position, final long id) { - - // save selected item - final Timer timer = adapter.getItem(position).getTimer(); - if (timer == null) { - // header click - return; - } - - - //timer.getChannelName() - //timer.getEvent(); - - // show details - final Intent intent = new Intent(); - intent.setClass(this, EpgDetailsActivity.class); - startActivity(intent); - } private void startTimerQuery() { @@ -192,118 +87,56 @@ public class TimerListActivity extends BaseActivity implements task.run(); } - public void svdrpEvent(final SvdrpEvent event, final Timer result) { - - if (progress != null) { - progress.svdrpEvent(event); - } - switch (event) { - case CONNECTING: - break; - case FINISHED_ABNORMALY: - case CONNECT_ERROR: - switchNoConnection();// TODO pass arg, what is the problem - case LOGIN_ERROR: - progress.dismiss(); - switchNoConnection(); - break; - case FINISHED_SUCCESS: - adapter.clear(); - for (final Timer timer : timerClient.getResults()) { - adapter.add(new EventListItem(timer)); - } - // adapter.sortItems(); - progress.dismiss(); - progress = null; - if (timerClient.getResults().isEmpty()) { - Toast.makeText(TimerListActivity.this, R.string.epg_no_items, - Toast.LENGTH_SHORT).show(); - } - break; - } - } - - public void svdrpException(final SvdrpException exception) { - if (progress != null) { - progress.svdrpException(exception); - } + @Override + protected Timer getTimer(EventListItem item) { + return item.getTimer(); } - - private void deleteTimer(final EventListItem item) { - - final DeleteTimerTask task = new DeleteTimerTask(this, item.getTimer()) { - @Override - public void finished() { - // refresh epg list after return - final VdrManagerApp app = (VdrManagerApp) getApplication(); - app.setReload(true); - reloadIfNeeded(); + protected void prepareTimer(final EventListItem item) { + final VdrManagerApp app = (VdrManagerApp) getApplication(); + // remember event for details view and timer things + app.setCurrentEvent(item.getTimer()); + app.setCurrentEpgList(results); + } + + protected boolean finishedSuccess() { + adapter.clear(); + for(Timer e : timerClient.getResults()){ + results.add(e); + Calendar cal = Calendar.getInstance(); + int day = -1; + cal.setTime(e.getStart()); + int eday = cal.get(Calendar.DAY_OF_YEAR); + if (eday != day) { + day = eday; + adapter.add(new EventListItem(new DateFormatter(cal) + .getDailyHeader())); } - }; - task.start(); - } - - @Override - public boolean onContextItemSelected(final MenuItem item) { - - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item - .getMenuInfo(); - final EventListItem event = adapter.getItem(info.position); - - switch (item.getItemId()) { - case R.id.epg_item_menu_timer_add: - case R.id.epg_item_menu_timer_modify: { - //prepareTimer(event); - final Intent intent = new Intent(); - intent.setClass(this, TimerDetailsActivity.class); - startActivityForResult(intent, REQUEST_CODE_TIMED_EDIT); - break; - } - case R.id.epg_item_menu_timer_delete: { - deleteTimer(event); - break; + adapter.add(new EventListItem(e)); } - case R.id.epg_item_menu_timer_toggle: { - toggleTimer(event); - break; - } - case R.id.epg_item_menu_live_tv: { - Utils.stream(this, event.getEvent()); - break; - - } - } - - return true; + listView.setSelectionAfterHeaderView(); + dismiss(progress); + return results.isEmpty() == false; } - - - private void toggleTimer(final EventListItem item) { - final ToggleTimerTask task = new ToggleTimerTask(this, item.getTimer()) { - @Override - public void finished() { - // refresh epg list after return - final VdrManagerApp app = (VdrManagerApp) getApplication(); - app.setReload(true); - reloadIfNeeded(); - } - }; - task.start(); + @Override + protected int getWindowTitle() { + return R.string.action_menu_timers; } - protected void retry() { - startTimerQuery(); + @Override + protected int getMainLayout() { + return R.layout.timer_list; } + @Override protected void refresh() { startTimerQuery(); } @Override - protected int getMainLayout() { - return R.layout.timer_list; + protected void retry() { + refresh(); } } -- cgit v1.2.3