diff options
Diffstat (limited to 'vdrmanager/src')
19 files changed, 474 insertions, 133 deletions
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/StringUtils.java b/vdrmanager/src/de/bjusystems/vdrmanager/StringUtils.java index 18e1d88..b440055 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/StringUtils.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/StringUtils.java @@ -1,3 +1,4 @@ + package de.bjusystems.vdrmanager; import java.util.ArrayList; @@ -10,6 +11,9 @@ public class StringUtils { * An empty immutable <code>String</code> array. */ public static final String[] EMPTY_STRING_ARRAY = new String[0]; + + + public static final String EMPTY_STRING = ""; /** diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java b/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java index d2b5e3f..29b0691 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java @@ -6,6 +6,7 @@ import java.util.Locale; import android.app.Activity; import android.app.Application; + import de.bjusystems.vdrmanager.data.Channel; import de.bjusystems.vdrmanager.data.EpgSearchParams; import de.bjusystems.vdrmanager.data.Event; @@ -14,6 +15,7 @@ import de.bjusystems.vdrmanager.data.Timer; import de.bjusystems.vdrmanager.data.Vdr; import de.bjusystems.vdrmanager.gui.Cache; + public class VdrManagerApp extends Application { public enum EpgListState { diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Channel.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Channel.java index e67e93b..02e9cc7 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Channel.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Channel.java @@ -118,6 +118,10 @@ public class Channel implements Parcelable { if(o instanceof Channel == false){ return false; } + if(o == this){ + return true; + } + return number == ((Channel)o).getNumber(); }; diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Preferences.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Preferences.java index aa70a32..88156cd 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Preferences.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Preferences.java @@ -10,6 +10,7 @@ import android.content.res.Configuration; import android.text.TextUtils; import android.widget.Toast; import de.bjusystems.vdrmanager.R; +import de.bjusystems.vdrmanager.StringUtils; import de.bjusystems.vdrmanager.app.Intents; import de.bjusystems.vdrmanager.data.db.OrmDatabaseHelper; import de.bjusystems.vdrmanager.gui.VdrListActivity; @@ -35,19 +36,22 @@ public class Preferences { } public static void setCurrentVdr(Context context, Vdr vdr) { - final SharedPreferences sharedPrefs = getSharedPreferences(context); current = vdr; + final SharedPreferences sharedPrefs = getSharedPreferences(context); sharedPrefs .edit() .putInt(context.getString(R.string.current_vdr_id_key), - current.getId()).commit(); + current != null ? current.getId() : -1 ).commit(); } - public Vdr getCurrentVdr() { return current; } + public int getCurrentVdrContext(Context context){ + return getInteger(context, R.string.current_vdr_id_key, -1); + } + /** user defined epg search times */ private String epgSearchTimes; /** @@ -77,7 +81,12 @@ public class Preferences { */ private boolean showTmdbButton = false; - + private int maxRecentChannels = 10; + + public int getMaxRecentChannels() { + return maxRecentChannels; + } + public boolean isShowTmdbButton() { return showTmdbButton; } @@ -207,7 +216,11 @@ public class Preferences { * @return SVDRO password */ public String getPassword() { - return getCurrentVdr().getPassword(); + String pwd = getCurrentVdr().getPassword(); + if (pwd == null) { + return StringUtils.EMPTY_STRING; + } + return pwd; } /** @@ -216,7 +229,7 @@ public class Preferences { * @return true, if remote wakeup is enabled */ public boolean isWakeupEnabled() { - return getCurrentVdr().isWakeupEnabled(); + return getCurrentVdr().isWakeupEnabled(); } /** @@ -254,15 +267,15 @@ public class Preferences { public boolean isAliveCheckEnabled() { return getCurrentVdr().isAliveCheckEnabled(); } - - public boolean isEnableRecStream(){ + + public boolean isEnableRecStream() { return getCurrentVdr().isEnableRecStreaming(); } - public int getLivePort(){ + public int getLivePort() { return getCurrentVdr().getLivePort(); } - + /** * Gets the time between alive checks * @@ -459,8 +472,8 @@ public class Preferences { prefs.epgSearchTimes = getString(context, R.string.epg_search_times_key, ""); - prefs.use24hFormat = getBoolean(context, - R.string.gui_enable_24h_format_key, true); + prefs.use24hFormat = getBoolean(context, + R.string.gui_enable_24h_format_key, true); prefs.showChannelNumbers = getBoolean(context, R.string.gui_channels_show_channel_numbers_key, false); @@ -474,21 +487,64 @@ public class Preferences { prefs.showOmdbButton = getBoolean(context, R.string.qui_show_omdb_button_key, true); - prefs.showTmdbButton = getBoolean(context, R.string.qui_show_tmdb_button_key, true); + prefs.imdbUrl = getString(context, R.string.qui_imdb_url_key, + "akas.imdb.com"); + + prefs.maxRecentChannels = getInt(context, + R.string.gui_max_recent_channels_key, 10); - prefs.imdbUrl = getString(context, R.string.qui_imdb_url_key, "akas.imdb.com"); - thePrefs = prefs; } public static void reset() { thePrefs = null; } - + + public static void reloadVDR() { + if (current == null) { + return; + } + db.getVdrDAO().refresh(current); + } + + public static boolean initVDR(final Context context) { + if (current != null) { + return true; + } + + int id = getInteger(context, R.string.current_vdr_id_key, -1); + + Vdr vdr = null; + if (id != -1) { + vdr = db.getVdrDAO().queryForId(id); + } + + setCurrentVdr(context, vdr); + + if (vdr != null) { + return true; + } + + List<Vdr> list = db.getVdrDAO().queryForAll(); + if (list != null && list.isEmpty() == false) { + vdr = list.get(0); + setCurrentVdr(context, vdr); + return true; + } + + return initFromOldVersion(context); + //Intent intent = new Intent(); + //intent.setClass(context, VdrListActivity.class); + //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + //intent.putExtra(Intents.EMPTY_CONFIG, Boolean.TRUE); + //context.startActivity(intent); + //Toast.makeText(context, R.string.no_vdr, Toast.LENGTH_SHORT).show(); + } + /** * Loads all preferences * @@ -511,40 +567,6 @@ public class Preferences { initInternal(context); setLocale(context); } - - // if (current != null) { - // return; - // } - - final SharedPreferences sharedPrefs = getSharedPreferences(context); - int id = sharedPrefs.getInt( - context.getString(R.string.current_vdr_id_key), -1); - - Vdr vdr = null; - if (id != -1) { - vdr = db.getVdrDAO().queryForId(id); - } - - if (vdr != null) { - setCurrentVdr(context, vdr); - return; - } - - List<Vdr> list = db.getVdrDAO().queryForAll(); - if (list != null && list.isEmpty() == false) { - vdr = list.get(0); - setCurrentVdr(context, vdr); - return; - } - if (initFromOldVersion(context) == false) { - Intent intent = new Intent(); - intent.setClass(context, VdrListActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(Intents.EMPTY_CONFIG, Boolean.TRUE); - context.startActivity(intent); - Toast.makeText(context, R.string.no_vdr, Toast.LENGTH_SHORT).show(); - } - } private static boolean initFromOldVersion(Context context) { @@ -552,7 +574,7 @@ public class Preferences { Vdr vdr = new Vdr(); String host = getString(context, R.string.vdr_host_key, null); - if(host == null){ + if (host == null) { return false; } vdr.setHost(host); @@ -649,7 +671,7 @@ public class Preferences { private static int getInt(final Context context, final int resId, final int defValue) { final String value = getString(context, resId, String.valueOf(defValue)); - if(TextUtils.isEmpty(value) || !TextUtils.isDigitsOnly(value)){ + if (TextUtils.isEmpty(value) || !TextUtils.isDigitsOnly(value)) { return 0; } return Integer.parseInt(value); @@ -689,6 +711,12 @@ public class Preferences { return sharedPrefs.getString(context.getString(resId), defValue); } + private static int getInteger(final Context context, final int resId, + final int defValue) { + final SharedPreferences sharedPrefs = getSharedPreferences(context); + return sharedPrefs.getInt(context.getString(resId), defValue); + } + public String getTimeFormat() { if (isUse24hFormat()) { return "HH:mm"; diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java index 2d5eb8d..0c8ce4e 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java @@ -85,6 +85,7 @@ public class Timer extends Event implements Timerable{ t.lifetime = lifetime; t.start = new Date(start.getTime()); t.stop = new Date(stop.getTime()); + t.title = title; return t; } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Vdr.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Vdr.java index 8dd150f..fa16e69 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Vdr.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Vdr.java @@ -38,11 +38,11 @@ public class Vdr { /** should channels be filtered? */ @DatabaseField - private boolean filterChannels; + private boolean filterChannels = false; /** last channel to retrieve */ @DatabaseField - private String channelFilter; + private String channelFilter = ""; /** Enable remote wakeup */ @DatabaseField @@ -481,6 +481,18 @@ public class Vdr { return (T) map.get(key); } + private static Integer getInteger(Map<String, Object> map, String key, Integer def) { + if (map.containsKey(key) == false) { + return def; + } + + Object obj = get(map, key); + if (obj instanceof Integer) { + return (Integer) obj; + } + return Integer.valueOf(String.valueOf(obj)); + } + private static Integer getInteger(Map<String, Object> map, String key) { if (map.containsKey(key) == false) { return Integer.valueOf(0); @@ -528,7 +540,7 @@ public class Vdr { map.put("key_vdr_timeout", timeout); map.put("timer_pre_start_buffer", timerPreMargin); - map.put("timer_post_end_buffer", timerPreMargin); + map.put("timer_post_end_buffer", timerPostMargin); map.put("timer_default_priority", timerDefaultPriority); map.put("timer_default_lifetime", timerDefaultLifetime); @@ -568,8 +580,8 @@ public class Vdr { readTimeout = getInteger(map, "key_vdr_readtimeout"); timeout = getInteger(map, "key_vdr_timeout"); - timerPreMargin = getInteger(map, "timer_pre_start_buffer"); - timerPreMargin = getInteger(map, "timer_post_end_buffer"); + timerPreMargin = getInteger(map, "timer_pre_start_buffer", 5); + timerPostMargin = getInteger(map, "timer_post_end_buffer", 30); timerDefaultPriority = getInteger(map, "timer_default_priority"); timerDefaultLifetime = getInteger(map, "timer_default_lifetime"); diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/db/OrmDatabaseHelper.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/db/OrmDatabaseHelper.java index 55f8314..ab4a0ed 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/data/db/OrmDatabaseHelper.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/db/OrmDatabaseHelper.java @@ -9,7 +9,6 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; -import android.util.Pair; import com.j256.ormlite.android.AndroidCompiledStatement; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java index c88ba8c..39f03b3 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java @@ -4,6 +4,7 @@ import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; +import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -193,11 +194,13 @@ public abstract class BaseActivity<Result, T extends ListView> extends ICSBaseAc // } protected void say(int res) { - Toast.makeText(this, res, Toast.LENGTH_SHORT).show(); + say(this.getString(res)); } protected void say(String msg) { - Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + Toast t = Toast.makeText(this, msg, Toast.LENGTH_SHORT); + t.setGravity(Gravity.CENTER, 0, 0); + t.show(); } protected boolean noConnection(SvdrpEvent event) { diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java index 7a0f1e8..37b34d3 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java @@ -80,12 +80,10 @@ public abstract class BaseEventListActivity<T extends Event> extends // .getParcelableExtra(Intents.CURRENT_CHANNEL); } - private boolean refreshViewOnResume = false; - @Override protected void onResume() { super.onResume(); - if (refreshViewOnResume) { + if (notifyDataSetChangedOnResume()) { adapter.notifyDataSetChanged(); } } @@ -235,10 +233,13 @@ public abstract class BaseEventListActivity<T extends Event> extends TimerDetailsActivity.REQUEST_CODE_TIMER_MODIFIED); } + protected boolean notifyDataSetChangedOnResume(){ + return true; + } + @Override protected void onPause() { super.onPause(); - refreshViewOnResume = true; // if (epgClient != null) { // epgClient.abort(); // } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java index dea64c4..313bf1a 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java @@ -108,8 +108,8 @@ public abstract class BaseTimerEditActivity<T extends Event> extends return; } - final EventFormatter formatter = new EventFormatter(item); - menu.setHeaderTitle(formatter.getTitle()); + //final EventFormatter formatter = new EventFormatter(item); + menu.setHeaderTitle(item.getTitle()); inflater.inflate(R.menu.epg_list_item_menu, menu); Timer timer = getTimer(item); @@ -195,6 +195,10 @@ public abstract class BaseTimerEditActivity<T extends Event> extends //worker.schedule(task, 1000, TimeUnit.MILLISECONDS); } + @Override + protected void onResume() { + super.onResume(); + } /* * (non-Javadoc) * diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java index f1ddc70..ee67b90 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java @@ -2,11 +2,16 @@ package de.bjusystems.vdrmanager.gui; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.ContextMenu; @@ -15,14 +20,18 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; +import android.widget.ArrayAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ExpandableListView.OnGroupClickListener; +import android.widget.TextView; import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.data.Channel; import de.bjusystems.vdrmanager.data.Preferences; +import de.bjusystems.vdrmanager.tasks.VoidAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.ChannelClient; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask; import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient; @@ -44,6 +53,8 @@ public class ChannelListActivity extends Preferences prefs; + private static final LinkedList<Channel> RECENT = new LinkedList<Channel>(); + public static final int MENU_GROUP = 0; public static final int MENU_PROVIDER = 1; public static final int MENU_NAME = 2; @@ -107,6 +118,61 @@ public class ChannelListActivity extends task.run(); } + static RecentChannelsAdapter RECENT_ADAPTER = null; + + + static class RecentChannelsAdapter extends ArrayAdapter<Channel>{ + private Activity context; + int resId; + + public RecentChannelsAdapter(Activity context, List<Channel> list) { + super(context, android.R.layout.simple_list_item_1, list); + this.context = context; + showChannelNumbers = Preferences.get().isShowChannelNumbers(); + + if (Build.VERSION.SDK_INT < 11) { + resId = android.R.layout.select_dialog_item; + } else { + resId = android.R.layout.simple_list_item_1; + } + } + + public boolean showChannelNumbers; + + public View getView(int position, View convertView, ViewGroup parent) { + // recycle view? + TextView text1; + View view = convertView; + if (view == null) { + view = this.context.getLayoutInflater().inflate( + resId, null); + text1 = (TextView) view.findViewById(android.R.id.text1); + view.setTag(text1); + } else { + text1 = (TextView) view.getTag(); + } + + Channel c = getItem(position); + String text = showChannelNumbers ? text = c.toString() : c.getName(); + text1.setText(text); + return view; + + } + } + + private ArrayAdapter<Channel> getRecentAdapter() { + if (RECENT_ADAPTER != null) + { + RECENT_ADAPTER.showChannelNumbers = Preferences.get().isShowChannelNumbers(); + RECENT_ADAPTER.notifyDataSetChanged(); + return RECENT_ADAPTER; + } + + RECENT_ADAPTER = new RecentChannelsAdapter(this, RECENT); + return RECENT_ADAPTER; + + } + @Override public void reset() { channelClient.clearCache(); @@ -157,10 +223,9 @@ public class ChannelListActivity extends public final boolean onCreateOptionsMenu(final Menu menu) { super.onCreateOptionsMenu(menu); - MenuItem item; - item = menu.add(MENU_GROUP, MENU_GROUP, 0, R.string.menu_groupby); - item.setIcon(android.R.drawable.ic_menu_sort_alphabetically); - item.setAlphabeticShortcut('g'); + final MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.channellist, menu); + return true; } @@ -180,7 +245,7 @@ public class ChannelListActivity extends public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case MENU_GROUP: + case R.id.channels_groupby: // case MENU_PROVIDER: // case MENU_NAME: if (groupByDialog == null) { @@ -201,6 +266,29 @@ public class ChannelListActivity extends groupByDialog.show(); return true; + case R.id.channels_recent_channels: + if (RECENT.isEmpty()) { + say(R.string.recent_channels_no_history); + return true; + } + + if(Preferences.get().getMaxRecentChannels() <= 0){ + RECENT.clear(); + say(R.string.recent_channels_no_history); + return true; + } + + new AlertDialog.Builder(this) + .setTitle(R.string.recent_channels) + .setAdapter(getRecentAdapter(), new DialogInterface.OnClickListener() { + + public void onClick(DialogInterface dialog, int which) { + Channel c = RECENT.get(which); + startChannelEPG(c); + } + })// + .create().show(); + return true; default: return super.onOptionsItemSelected(item); } @@ -226,12 +314,11 @@ public class ChannelListActivity extends inflater.inflate(R.menu.channel_list_item_menu, menu); } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { /* - * http://projects.vdr-developer.org/issues/722 - String grp = adapter.getGroup(group); - final MenuInflater infl = getMenuInflater(); - menu.setHeaderTitle(grp); - infl.inflate(R.menu.channel_list_group_menu, menu); - */ + * http://projects.vdr-developer.org/issues/722 String grp = + * adapter.getGroup(group); final MenuInflater infl = + * getMenuInflater(); menu.setHeaderTitle(grp); + * infl.inflate(R.menu.channel_list_group_menu, menu); + */ } } @@ -262,10 +349,10 @@ public class ChannelListActivity extends Utils.stream(this, channel); break; case R.id.channel_item_menu_hide: - //TODO http://projects.vdr-developer.org/issues/722 + // TODO http://projects.vdr-developer.org/issues/722 break; case R.id.channel_item_menu_hide_permanent: - //TODO http://projects.vdr-developer.org/issues/722 + // TODO http://projects.vdr-developer.org/issues/722 break; } @@ -293,7 +380,33 @@ public class ChannelListActivity extends return true; } - private void startChannelEPG(Channel channel) { + private void startChannelEPG(final Channel channel) { + new VoidAsyncTask() { + + @Override + protected Void doInBackground(Void... arg0) { + int max = Preferences.get().getMaxRecentChannels(); + if(max <= 0){ + return null; + } + Iterator<Channel> i = RECENT.iterator(); + while (i.hasNext()) { + Channel c = i.next(); + if (c.equals(channel)) { + i.remove(); + break; + } + } + + if (RECENT.size() >= Preferences.get().getMaxRecentChannels()) { + RECENT.removeLast(); + + } + RECENT.addFirst(channel); + return (Void) null; + } + }.execute((Void) null); + // for(int i = 0; i < recent) // find and remember item // final Channel channel = adapter.getItem(position); // final VdrManagerApp app = (VdrManagerApp) getApplication(); diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ICSBaseActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ICSBaseActivity.java index 9f4f2b1..39047ff 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ICSBaseActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ICSBaseActivity.java @@ -13,6 +13,9 @@ public abstract class ICSBaseActivity extends Activity{ } ActionBar actionBar = getActionBar(); + if(actionBar == null){ + return; + } //this is since 14 enabled actionBar.setHomeButtonEnabled(true); } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java index 3a9351c..64faf73 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java @@ -2,6 +2,7 @@ package de.bjusystems.vdrmanager.gui; import java.util.Calendar; +import android.content.ClipData.Item; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; @@ -81,25 +82,31 @@ public class RecordingListActivity extends BaseEventListActivity<Recording> public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) { + final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; + final EventListItem item = adapter.getItem(info.position); + if(item.isHeader()){ + return; + } + if (v.getId() == R.id.recording_list) { final MenuInflater inflater = getMenuInflater(); - final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; - // set menu title - final EventListItem item = adapter.getItem(info.position); - if(item.isHeader()){ - return; - } final EventFormatter formatter = new EventFormatter(item); menu.setHeaderTitle(formatter.getTitle()); inflater.inflate(R.menu.recording_list_item_menu, menu); if(Preferences.get().isEnableRecStream() == false){ menu.removeItem(R.id.recording_item_menu_stream); - } + } } + super.onCreateContextMenu(menu, v, menuInfo); + // +// http://projects.vdr-developer.org/issues/863 + if(Utils.isLive(item)){ + menu.removeItem(R.id.epg_item_menu_live_tv); + } } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java index c085442..599d18d 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java @@ -178,11 +178,13 @@ public class TimerDetailsActivity extends Activity implements OnClickListener, break; } case R.id.timer_details_modify: + timer.setTitle(tView.title.getText().toString()); modifyTimer(timer); //say(R.string.done); break; case R.id.timer_details_save: { + timer.setTitle(tView.title.getText().toString()); createTimer(timer); //say(R.string.done); break; diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java index cc2c431..abb4d7f 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java @@ -2,8 +2,11 @@ package de.bjusystems.vdrmanager.gui; import java.util.Calendar; +import android.content.Intent; import android.os.Bundle; import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import de.bjusystems.vdrmanager.R; @@ -145,6 +148,10 @@ public class TimerListActivity extends BaseTimerEditActivity<Timer> implements } @Override + protected boolean notifyDataSetChangedOnResume() { + return true; + } + @Override protected String getWindowTitle() { return getString(R.string.action_menu_timers); } @@ -164,11 +171,43 @@ public class TimerListActivity extends BaseTimerEditActivity<Timer> implements refresh(); } + /* + * (non-Javadoc) + * + * @see + * de.bjusystems.vdrmanager.gui.BaseActivity#onOptionsItemSelected(android + * .view.MenuItem) + */ + public boolean onOptionsItemSelected(final MenuItem item) { + + switch(item.getItemId()){ + case R.id.timer_menu_add: + say("Comming soon..."); + return true; + } + + // 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); + } + public boolean onCreateOptionsMenu(final Menu menu) { // MenuItem item; //item = menu.add(MENU_GROUP_NEW_TIMER, MENU_NEW_TIMER, 0, R.string.new_timer); //item.setIcon(android.R.drawable.ic_menu_add);; // /item.setAlphabeticShortcut('r'); + + final MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.timer_list_menu, menu); return super.onCreateOptionsMenu(menu); } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/Utils.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/Utils.java index bccff8c..8b95bf4 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/Utils.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/Utils.java @@ -37,6 +37,9 @@ public class Utils { public static final String TAG = Utils.class.getName(); public static final List EMPTY_LIST = new ArrayList(0); + + public static final String[] EMPTY = new String[] {}; + public static final ForegroundColorSpan HIGHLIGHT_TEXT = new ForegroundColorSpan( Color.RED); diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrListActivity.java index 8f8d67d..7619d77 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrListActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrListActivity.java @@ -1,22 +1,34 @@ package de.bjusystems.vdrmanager.gui; +import java.util.ArrayList; +import java.util.List; + import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; +import android.graphics.Typeface; import android.os.Bundle; +import android.text.SpannableString; +import android.text.style.UnderlineSpan; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.ArrayAdapter; +import android.widget.ImageView; import android.widget.SimpleCursorAdapter; +import android.widget.TextView; import com.j256.ormlite.android.apptools.OrmLiteBaseListActivity; import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.Intents; import de.bjusystems.vdrmanager.data.Preferences; +import de.bjusystems.vdrmanager.data.Vdr; import de.bjusystems.vdrmanager.data.db.OrmDatabaseHelper; public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> @@ -24,33 +36,40 @@ public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> private static final String TAG = VdrListActivity.class.getName(); - SimpleCursorAdapter adapter = null; + List<Vdr> list = new ArrayList<Vdr>(); + + ArrayAdapter<Vdr> adapter = null; - Cursor cursor; + //Cursor cursor; String[] listItems = {}; private boolean emptyConfig = false; - private void initCursor() { - - //if (cursor != null) { - //if (!cursor.isClosed()) { - //cursor.close(); -// } - //} - try { - cursor = getHelper().getVdrCursor(); - startManagingCursor(cursor); - } catch (Exception ex) { - Log.w(TAG,ex); - } - } +// private void initCursor() { +// +// //if (cursor != null) { +// //if (!cursor.isClosed()) { +// //cursor.close(); +//// } +// //} +// try { +// cursor = getHelper().getVdrCursor(); +// //startManagingCursor(cursor); +// } catch (Exception ex) { +// Log.w(TAG,ex); +// } +// } private void populateIntent(){ emptyConfig = getIntent().getBooleanExtra(Intents.EMPTY_CONFIG, Boolean.FALSE); } + static class Holder{ + public TextView text1; + public TextView text2; + } + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { @@ -67,11 +86,74 @@ public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> } }); - initCursor(); - adapter = new SimpleCursorAdapter(this, - android.R.layout.simple_list_item_2, cursor, new String[] { - "name", "host" }, new int[] { android.R.id.text1, - android.R.id.text2 }); +// initCursor(); + final Vdr cur = Preferences.get().getCurrentVdr(); + adapter = new ArrayAdapter<Vdr>(this, android.R.layout.simple_list_item_2 , list) { + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // recycle view? + Holder holder = null; + View view = convertView; + if (view == null) { + view = getLayoutInflater().inflate(android.R.layout.simple_list_item_2, null); + holder = new Holder(); + + holder.text1 = (TextView)view.findViewById(android.R.id.text1); + holder.text2 = (TextView)view.findViewById(android.R.id.text2); + view.setTag(holder); + } else { + holder = (Holder) view.getTag(); + } + + Vdr vdr = getItem(position); + String name = vdr.getName(); + String host = vdr.getHost(); + holder.text2.setText(host); + + if(cur != null && cur.getId() == vdr.getId()) { + SpannableString content = new SpannableString(name); + content.setSpan(new UnderlineSpan(), 0, content.length(), 0); + holder.text1.setText(content); + //text1.setText(text1.getText()); + } else { + holder.text1.setTypeface(Typeface.DEFAULT); + holder.text1.setText(name); + } + return view; + } + + + }; + + //adapter = new ArrayAdapter<Vdr>( +// "name", "host" }, new int[] { android.R.id.text1, +// android.R.id.text2}) { +// @Override +// public void bindView(View view, Context context, +// Cursor cursor) { +// +// TextView text1 = (TextView)view.findViewById(android.R.id.text1); +// TextView text2 = (TextView)view.findViewById(android.R.id.text2); +// int id = cursor.getInt(cursor.getColumnIndex("_id")); +// String name = cursor.getString(cursor.getColumnIndex("name")); +// String host = cursor.getString(cursor.getColumnIndex("host")); +// text2.setText(host); +// +// if(cur != null && cur.getId() == id) { +// SpannableString content = new SpannableString(name); +// content.setSpan(new UnderlineSpan(), 0, content.length(), 0); +// text1.setText(content); +// //text1.setText(text1.getText()); +// } else { +// text1.setTypeface(Typeface.DEFAULT); +// text1.setText(name); +// } +// +// +// } +// +// }; setListAdapter(adapter); registerForContextMenu(getListView()); getListView().setOnItemClickListener(this); @@ -87,7 +169,7 @@ public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> */ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - editVdr(Long.valueOf(id).intValue()); + editVdr(adapter.getItem(position).getId()); } /** @@ -123,31 +205,35 @@ public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> @Override protected void onResume() { + refresh(); super.onResume(); } @Override public void onBackPressed() { - if(cursor.getCount() == 0){ + if(list.isEmpty()){ finish(); return; } - Preferences.init(this); if (emptyConfig) { Intent intent = new Intent(this, VdrManagerActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); } else { super.onBackPressed(); } } + + /** * Refresh the list */ private void refresh() { - initCursor(); - adapter.changeCursor(cursor); + list.clear(); + list.addAll(getHelper().getVdrDAO().queryForAll()); + adapter.notifyDataSetChanged(); } public boolean onItemLongClick(AdapterView<?> parent, View view, @@ -160,7 +246,10 @@ public class VdrListActivity extends OrmLiteBaseListActivity<OrmDatabaseHelper> public void onClick(DialogInterface dialog, int which) { if (getHelper().getVdrDAO() - .deleteById((int) id) > 0) { + .deleteById(adapter.getItem(position).getId()) > 0) { + if(Preferences.get().getCurrentVdrContext(VdrListActivity.this) == id){ + Preferences.setCurrentVdr(VdrListActivity.this, null); + } refresh(); } diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java index bb6173c..a2cdc07 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java @@ -2,8 +2,6 @@ package de.bjusystems.vdrmanager.gui; import android.app.Activity; import android.app.AlertDialog; -import android.app.SearchManager; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; @@ -16,9 +14,9 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.widget.SearchView; import android.widget.Toast; import de.bjusystems.vdrmanager.R; +import de.bjusystems.vdrmanager.app.Intents; import de.bjusystems.vdrmanager.app.VdrManagerApp; import de.bjusystems.vdrmanager.data.Preferences; import de.bjusystems.vdrmanager.data.Vdr; @@ -33,11 +31,34 @@ public class VdrManagerActivity extends Activity implements OnClickListener { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if(Preferences.get().getCurrentVdr() == null){ + + //Preferences.initVDR(this); + + //if(Preferences.get().getCurrentVdr() == null){ + //finish(); + //return; + //} + + + if (Preferences.initVDR(this) == false) { + Intent intent = new Intent(); + intent.setClass(this, VdrListActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(Intents.EMPTY_CONFIG, Boolean.TRUE); + startActivity(intent); + Toast.makeText(this, R.string.no_vdr, Toast.LENGTH_SHORT).show(); finish(); return; - } + } + + + + Preferences.setLocale(this); + + + + // this.getActionBar().setDisplayShowCustomEnabled(true); // this.getActionBar().setDisplayShowTitleEnabled(false); // setTitle(getString(R.string.app_name)); @@ -50,7 +71,10 @@ public class VdrManagerActivity extends Activity implements OnClickListener { findViewById(R.id.action_menu_recordings).setOnClickListener(this); findViewById(R.id.action_menu_timers).setOnClickListener(this); findViewById(R.id.action_menu_epg).setOnClickListener(this); - findViewById(R.id.action_menu_search).setOnClickListener(this); + View v = findViewById(R.id.action_menu_search); + if(v != null){ + v.setOnClickListener(this); + } findViewById(R.id.main_logo).setOnClickListener(this); if (Preferences.get().isWakeupEnabled() == false) { findViewById(R.id.action_menu_wakeup).setVisibility(View.GONE); @@ -58,6 +82,7 @@ public class VdrManagerActivity extends Activity implements OnClickListener { findViewById(R.id.action_menu_wakeup).setOnClickListener(this); } + // add and register buttons // createButtons(); } @@ -71,12 +96,12 @@ public class VdrManagerActivity extends Activity implements OnClickListener { int api = Build.VERSION.SDK_INT; if ( api >= 11){ - SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - SearchView searchView = (SearchView) menu.findItem(R.id.menu_search) - .getActionView(); - searchView.setSearchableInfo(searchManager - .getSearchableInfo(getComponentName())); - searchView.setIconifiedByDefault(false); // Do not iconify the widget; +// SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); +// SearchView searchView = (SearchView) menu.findItem(R.id.menu_search) +// .getActionView(); +// searchView.setSearchableInfo(searchManager +// .getSearchableInfo(getComponentName())); +// searchView.setIconifiedByDefault(false); // Do not iconify the widget; } return true; @@ -111,12 +136,13 @@ public class VdrManagerActivity extends Activity implements OnClickListener { finish(); break; } - case R.id.menu_search: { - if(Build.VERSION.SDK_INT <11){ - onSearchRequested(); - } - break; - } + +// case R.id.menu_search: { + // if(Build.VERSION.SDK_INT <11){ + // onSearchRequested(); + //} + //break; + //} case R.id.main_menu_goto: { try { final Cursor cursor = Preferences.getDatabaseHelper() diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrPreferencesActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrPreferencesActivity.java index 6e5c25e..85fb57e 100644 --- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrPreferencesActivity.java +++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrPreferencesActivity.java @@ -7,6 +7,7 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import de.bjusystems.vdrmanager.R; import de.bjusystems.vdrmanager.app.Intents; +import de.bjusystems.vdrmanager.data.Preferences; import de.bjusystems.vdrmanager.data.Vdr; import de.bjusystems.vdrmanager.data.VdrSharedPreferences; @@ -74,6 +75,7 @@ public class VdrPreferencesActivity extends BasePreferencesActivity implements updateChildPreferences(); Preference p = findPreference(key); updateSummary(p); + Preferences.reloadVDR(); } @Override @@ -181,7 +183,6 @@ public class VdrPreferencesActivity extends BasePreferencesActivity implements finish(); return; } - super.onBackPressed(); } |