diff options
38 files changed, 960 insertions, 396 deletions
diff --git a/vdr-vdrmanager/helpers.cpp b/vdr-vdrmanager/helpers.cpp index 3f4b9ec..b1ca86f 100644 --- a/vdr-vdrmanager/helpers.cpp +++ b/vdr-vdrmanager/helpers.cpp @@ -355,9 +355,7 @@ string cHelpers::SetTimerIntern(char op, string param) { default: return Error("unknown timer command"); } - return "START\r\nEND\r\n"; - } string cHelpers::SetTimerIntern(string args) { @@ -391,7 +389,7 @@ string cHelpers::SetTimerIntern(string args) { } string cHelpers::Error(const string& msg) { - return "!ERROR:" + msg + "\r\n"; + return "START\r\n!ERROR:" + msg + "\r\nEND\r\n"; } string cHelpers::SearchEventsIntern(string wantedChannels, string pattern) { @@ -504,7 +502,10 @@ string cHelpers::ToText(cRecording * recording) { result += MapSpecialChars(info->ChannelID().ToString()); result += ":"; - snprintf(buf, sizeof(buf)-1, "%d", RecordingLengthInSeconds(recording)); + + int length = RecordingLengthInSeconds(recording); + + snprintf(buf, sizeof(buf)-1, "%d", length); result += buf; result += "\r\n"; @@ -820,6 +821,10 @@ string cHelpers::UnMapSpecialChars(string text) { */ int cHelpers::RecordingLengthInSeconds(cRecording* recording) { +#if APIVERSNUM < 10721 + return -1; +#endif + int nf = recording->NumFrames(); if (nf >= 0) #if APIVERSNUM >= 10703 diff --git a/vdrmanager/AndroidManifest.xml b/vdrmanager/AndroidManifest.xml index 3604581..12e6b37 100644 --- a/vdrmanager/AndroidManifest.xml +++ b/vdrmanager/AndroidManifest.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="de.bjusystems.vdrmanager" android:versionName="0.4.6" - android:versionCode="406"> + package="de.bjusystems.vdrmanager" android:versionName="0.4.7" + android:versionCode="407"> <application android:icon="@drawable/app_logo" + android:hardwareAccelerated="true" android:label="@string/app_name" android:debuggable="false" android:name=".app.VdrManagerApp"> <activity android:label="@string/app_name" android:name=".gui.VdrManagerActivity" android:configChanges="locale"> diff --git a/vdrmanager/res/drawable-hdpi/ic_menu_recent_history.png b/vdrmanager/res/drawable-hdpi/ic_menu_recent_history.png Binary files differnew file mode 100644 index 0000000..4101434 --- /dev/null +++ b/vdrmanager/res/drawable-hdpi/ic_menu_recent_history.png diff --git a/vdrmanager/res/drawable-mdpi/ic_menu_recent_history.png b/vdrmanager/res/drawable-mdpi/ic_menu_recent_history.png Binary files differnew file mode 100644 index 0000000..e5f8e2d --- /dev/null +++ b/vdrmanager/res/drawable-mdpi/ic_menu_recent_history.png diff --git a/vdrmanager/res/drawable-xhdpi/ic_menu_recent_history.png b/vdrmanager/res/drawable-xhdpi/ic_menu_recent_history.png Binary files differnew file mode 100644 index 0000000..fc5e1fc --- /dev/null +++ b/vdrmanager/res/drawable-xhdpi/ic_menu_recent_history.png diff --git a/vdrmanager/res/layout-land-v11/vdrmanager.xml b/vdrmanager/res/layout-land-v11/vdrmanager.xml new file mode 100644 index 0000000..a2728f0 --- /dev/null +++ b/vdrmanager/res/layout-land-v11/vdrmanager.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent"> +<LinearLayout + android:layout_width="fill_parent" android:layout_height="fill_parent" + android:orientation="vertical" android:padding="10dip"> + <ImageView android:id="@+id/main_logo" android:layout_width="fill_parent" + android:layout_height="80dip" android:src="@drawable/vdr_logo" android:paddingBottom="5dip" /> + + <!-- <ListView android:id="@+id/vdrmanager_menu" android:layout_width="fill_parent" + android:layout_height="wrap_content" android:layout_below="@id/main_logo"/> --> + + <LinearLayout android:layout_width="fill_parent" + android:layout_height="wrap_content" android:orientation="horizontal" android:padding="3dip"> + <Button android:text="@string/action_menu_channels" + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawableTop="@drawable/btn_channels" android:layout_width="wrap_content" + android:id="@+id/action_menu_channels" android:layout_height="wrap_content" + android:textColor="#FFF" android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background"/> + + + <Button android:text="@string/action_menu_recordings" + xmlns:android="http://schemas.android.com/apk/res/android" android:padding="3dip" + android:drawableTop="@drawable/btn_recordings" android:layout_width="wrap_content" + android:id="@+id/action_menu_recordings" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" + /> + + <Button android:text="@string/action_menu_timers" + xmlns:android="http://schemas.android.com/apk/res/android" android:padding="3dip" + android:drawableTop="@drawable/btn_timer" android:layout_width="wrap_content" + android:id="@+id/action_menu_timers" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + </LinearLayout> + <LinearLayout android:layout_width="fill_parent" + android:layout_height="wrap_content" android:orientation="horizontal"> + <Button android:text="@string/action_menu_epg" + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawableTop="@drawable/btn_epglist" android:layout_width="wrap_content" + android:id="@+id/action_menu_epg" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:padding="3dip" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + + <Button android:text="@string/action_menu_wakeup" + xmlns:android="http://schemas.android.com/apk/res/android" android:layout_weight="1" + android:padding="3dip" + android:drawableTop="@drawable/btn_wakeup" android:layout_width="wrap_content" + android:id="@+id/action_menu_wakeup" android:layout_height="wrap_content" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + </LinearLayout> + +</LinearLayout> + </ScrollView>
\ No newline at end of file diff --git a/vdrmanager/res/layout-land/vdrmanager.xml b/vdrmanager/res/layout-land/vdrmanager.xml index 817eb4d..52cc9c6 100644 --- a/vdrmanager/res/layout-land/vdrmanager.xml +++ b/vdrmanager/res/layout-land/vdrmanager.xml @@ -31,15 +31,20 @@ android:background="@android:drawable/list_selector_background" android:textColor="#FFF" /> - - <Button android:text="@string/action_menu_timers" - xmlns:android="http://schemas.android.com/apk/res/android" android:padding="3dip" - android:drawableTop="@drawable/btn_timer" android:layout_width="wrap_content" - android:id="@+id/action_menu_timers" android:layout_height="wrap_content" - android:layout_weight="1" - android:cacheColorHint="?android:attr/colorBackground" - android:background="@android:drawable/list_selector_background" - android:textColor="#FFF" /> + + <Button + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/action_menu_timers" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:background="@android:drawable/list_selector_background" + android:cacheColorHint="?android:attr/colorBackground" + android:drawableTop="@drawable/btn_timer" + android:padding="3dip" + android:text="@string/action_menu_timers" + android:textColor="#FFF" /> + </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> diff --git a/vdrmanager/res/layout-v11/vdrmanager.xml b/vdrmanager/res/layout-v11/vdrmanager.xml new file mode 100644 index 0000000..40367c8 --- /dev/null +++ b/vdrmanager/res/layout-v11/vdrmanager.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> + + <ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + + > + +<LinearLayout + android:layout_width="fill_parent" android:layout_height="fill_parent" + android:orientation="vertical" android:padding="10dip"> + + <ImageView android:id="@+id/main_logo" android:layout_width="fill_parent" + android:clickable="true" + android:layout_height="80dip" android:src="@drawable/vdr_logo" android:padding="10dip" /> + + <!-- <ListView android:id="@+id/vdrmanager_menu" android:layout_width="fill_parent" + android:layout_height="wrap_content" android:layout_below="@id/main_logo"/> --> + + <LinearLayout android:layout_width="fill_parent" + android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dip"> + <Button android:text="@string/action_menu_channels" + android:drawableTop="@drawable/btn_channels" android:layout_width="wrap_content" + android:id="@+id/action_menu_channels" android:layout_height="wrap_content" + android:textColor="#FFF" android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background"/> + + <Button android:text="@string/action_menu_epg" + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawableTop="@drawable/btn_epglist" android:layout_width="wrap_content" + android:id="@+id/action_menu_epg" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + + </LinearLayout> + + <LinearLayout android:layout_width="fill_parent" android:padding="10dip" + android:layout_height="wrap_content" android:orientation="horizontal"> + + <Button android:text="@string/action_menu_recordings" + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawableTop="@drawable/btn_recordings" android:layout_width="wrap_content" + android:id="@+id/action_menu_recordings" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" + /> + + <Button android:text="@string/action_menu_timers" + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawableTop="@drawable/btn_timer" android:layout_width="wrap_content" + android:id="@+id/action_menu_timers" android:layout_height="wrap_content" + android:layout_weight="1" + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + </LinearLayout> + + <LinearLayout android:layout_width="fill_parent" android:padding="10dip" + android:layout_height="wrap_content" android:orientation="horizontal"> + + + <Button android:text="@string/action_menu_wakeup" + xmlns:android="http://schemas.android.com/apk/res/android" android:layout_weight="1" + android:padding="5dip" + android:drawableTop="@drawable/btn_wakeup" android:layout_width="wrap_content" + android:id="@+id/action_menu_wakeup" android:layout_height="wrap_content" + + android:cacheColorHint="?android:attr/colorBackground" + android:background="@android:drawable/list_selector_background" + android:textColor="#FFF" /> + </LinearLayout> + +</LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/vdrmanager/res/menu-v11/channellist.xml b/vdrmanager/res/menu-v11/channellist.xml new file mode 100644 index 0000000..2ca3884 --- /dev/null +++ b/vdrmanager/res/menu-v11/channellist.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/channels_recent_channels" android:alphabeticShortcut="r" + android:icon="@drawable/ic_menu_recent_history" + android:showAsAction="ifRoom" + android:title="@string/recent_channels"/> + + <item + android:id="@+id/channels_groupby" android:alphabeticShortcut="g" + android:icon="@android:drawable/ic_menu_sort_alphabetically" + android:showAsAction="ifRoom" + android:title="@string/menu_groupby"/> + +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu-v11/recording_list_item_menu.xml b/vdrmanager/res/menu-v11/recording_list_item_menu.xml deleted file mode 100644 index c94161a..0000000 --- a/vdrmanager/res/menu-v11/recording_list_item_menu.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android"> - - <item android:id="@+id/recording_item_menu_delete" android:title="@string/recording_item_menu_delete"/> - <item android:id="@+id/recording_item_menu_stream" android:title="@string/recording_item_menu_stream"/> - <item android:id="@+id/epg_item_menu_live_tv" android:title="@string/livetv" android:visible="false" /> -</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu-v11/recording_list_menu.xml b/vdrmanager/res/menu-v11/recording_list_menu.xml new file mode 100644 index 0000000..2edc02b --- /dev/null +++ b/vdrmanager/res/menu-v11/recording_list_menu.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<!-- + <item + android:id="@+id/epg_menu_search" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_search"/> +--> +<!-- + <item + android:id="@+id/epg_menu_times" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_times"/> + --> + + <item + android:id="@+id/menu_groupby" android:alphabeticShortcut="g" + android:icon="@android:drawable/ic_menu_sort_alphabetically" + android:showAsAction="ifRoom" + android:title="@string/menu_groupby"/> +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu-v11/timer_list_menu.xml b/vdrmanager/res/menu-v11/timer_list_menu.xml new file mode 100644 index 0000000..fa00a26 --- /dev/null +++ b/vdrmanager/res/menu-v11/timer_list_menu.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<!-- + <item + android:id="@+id/epg_menu_search" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_search"/> +--> +<!-- --> + <item + android:id="@+id/timer_menu_add" + android:icon="@android:drawable/ic_menu_add" + android:alphabeticShortcut="a" + android:title="@string/epg_item_menu_timer_add"/> + + <item + android:id="@+id/epg_list_menu_channels" + android:icon="@drawable/ic_menu_moreoverflow" + android:showAsAction="ifRoom" + android:title="@string/action_menu_channels"/> +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu/channellist.xml b/vdrmanager/res/menu/channellist.xml new file mode 100644 index 0000000..c62dd18 --- /dev/null +++ b/vdrmanager/res/menu/channellist.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + + <item + android:id="@+id/channels_recent_channels" android:alphabeticShortcut="r" + android:icon="@drawable/ic_menu_recent_history" + android:title="@string/recent_channels"/> + + <item + android:id="@+id/channels_groupby" android:alphabeticShortcut="g" + android:icon="@android:drawable/ic_menu_sort_alphabetically" + android:title="@string/menu_groupby"/> + +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu/recording_list_menu.xml b/vdrmanager/res/menu/recording_list_menu.xml new file mode 100644 index 0000000..8b3e72d --- /dev/null +++ b/vdrmanager/res/menu/recording_list_menu.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<!-- + <item + android:id="@+id/epg_menu_search" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_search"/> +--> +<!-- + <item + android:id="@+id/epg_menu_times" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_times"/> + --> + + <item + android:id="@+id/menu_groupby" android:alphabeticShortcut="g" + android:icon="@android:drawable/ic_menu_sort_alphabetically" + android:title="@string/menu_groupby"/> +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/menu/timer_list_menu.xml b/vdrmanager/res/menu/timer_list_menu.xml new file mode 100644 index 0000000..93509ec --- /dev/null +++ b/vdrmanager/res/menu/timer_list_menu.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<!-- + <item + android:id="@+id/epg_menu_search" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/epg_menu_search"/> +--> +<!-- --> + <item + android:id="@+id/timer_menu_add" + android:icon="@android:drawable/ic_menu_add" + android:alphabeticShortcut="a" + android:title="@string/epg_item_menu_timer_add"/> + <item + android:id="@+id/epg_list_menu_channels" + android:icon="@android:drawable/ic_menu_agenda" + android:title="@string/action_menu_channels"/> + +</menu>
\ No newline at end of file diff --git a/vdrmanager/res/values-it/strings.xml b/vdrmanager/res/values-it/strings.xml index 3c73595..ad11824 100644 --- a/vdrmanager/res/values-it/strings.xml +++ b/vdrmanager/res/values-it/strings.xml @@ -1,47 +1,39 @@ <?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.net--> <resources> - - <string name="action_menu_channels">Canali</string> + <string name="action_menu_channels">Canali</string> <string name="action_menu_timers">Timer</string> <string name="action_menu_recordings">Registrazioni</string> <string name="action_menu_epg">Elenco EPG</string> <string name="action_menu_search">Ricerca EPG</string> <string name="action_menu_wakeup">Accensione</string> - - <string name="app_name">Gestore VDR</string> - - <string name="channel_item_menu_epg">Mostra EPG</string> <string name="channel_item_menu_stream">Mostra trasmissione</string> <string name="channel_item_menu_hide">Nascondi</string> <string name="channel_item_menu_hide_permanent">Nascondi sempre</string> - <string name="channel_group_menu_hide">Nascondi</string> <string name="channel_group_menu_hide_permanent">Nascondi sempre</string> - <string name="menu_groupby">Ordina per</string> <string name="groupby_group">Gruppo</string> <string name="groupby_provider">Emittente</string> <string name="groupby_name">Nome</string> <string name="groupby_name_all_channels_group">Tutti i canali</string> <string name="groupby_window_title_templte">Ordina per %1$s</string> - - - <string name="common_delete">Elimina</string> - <string name="prefs_current_value">Attuale:</string> - <string name="prefs_current_value_template">\nAttuale: %1$s</string> - <string name="prefs_current_value_not_set"><non impostato></string> - <string name="no_connection">Nessuna connessione</string> - <string name="aborted">Connessione terminata.</string> - <string name="no_connection_retry">Riprova</string> - <string name="refresh">Aggiorna</string> - <string name="done">Completato</string> - <string name="share">Condividi</string> - <string name="search_reapt">Riesegui</string> - <string name="share_chooser">Condividi valore EPG</string> - <string name="about_text"> - Info sul programma "Gestore VDR" per Android\n + <string name="common_delete">Elimina</string> + <string name="prefs_current_value">Attuale:</string> + <string name="prefs_current_value_template">\nAttuale: %1$s</string> + <string name="prefs_current_value_not_set"><non impostato></string> + <string name="no_connection">Nessuna connessione</string> + <string name="aborted">Connessione terminata.</string> + <string name="no_connection_retry">Riprova</string> + <string name="refresh">Aggiorna</string> + <string name="done">Completato</string> + <string name="share">Condividi</string> + <string name="search_reapt">Riesegui</string> + <string name="share_chooser">Condividi valore EPG</string> + <string name="about_text"> + Info sul programma \"Gestore VDR\" per Android\n Questa è la versione %1$s\n Se a casa disponi di una VDR raggiungibile da Internet e possiedi un telefono cellulare che usa Android allora forse hai trovato l\'applicazione che fa per te. @@ -52,16 +44,11 @@ Traduzione italiana:\n Diego Pierotto </string> - <string name="about_title">Info</string> - - <string name="no_internet_connection">Nessuna connessione dati</string> - <string name="update_will_start_in">L\'aggiornamento si avvierà tra qualche secondo</string> - - - + <string name="about_title">Info</string> + <string name="no_internet_connection">Nessuna connessione dati</string> + <string name="update_will_start_in">L\'aggiornamento si avvierà tra qualche secondo</string> <string name="epg_menu_search">Ricerca EPG</string> <string name="epg_menu_times">Numero ricerche</string> - <string name="epg_item_menu_timer_add">Crea timer</string> <string name="epg_item_menu_timer_delete">Elimina timer</string> <string name="epg_item_menu_timer_modify">Modifica timer</string> @@ -69,229 +56,159 @@ <string name="epg_item_menu_timer_disable">Disabilita timer</string> <string name="epg_no_items">Nessun risultato trovato...</string> <string name="epg_client_errors">Si è verificato un errore, verifica il registro...</string> - - - <string name="navigae_at_the_end">Fine</string> - <string name="navigae_at_the_start">Inizio</string> - + <string name="navigae_at_the_end">Fine</string> + <string name="navigae_at_the_start">Inizio</string> <string name="epg_search_times_add">Aggiungi numero</string> <string name="epg_search_times_window">Numero personalizzato</string> - - - <!-- What's on display --> <string name="epg_list_time_label">In programmazione alle</string> <string name="epg_list_time_now">In onda</string> <string name="epg_list_time_next">Successivo</string> <string name="epg_list_time_adhoc">Alle</string> <string name="epg_list_channel_spinner">Canale</string> <string name="epg_list_search_label">Ricerca risultati</string> - - <!-- create timer --> <string name="epg_event_share_text">Condividi</string> <string name="epg_event_imdb_text">Ricerca IMDb</string> <string name="epg_event_omdb_text">Ricerca OMDB</string> + <string name="epg_event_tmdb_text">Ricerca TMDb</string> <string name="epg_eent_livetv_text">Trasmissione</string> <string name="epg_event_create_timer_text">Aggiungi timer</string> <string name="epg_event_modify_timer_text">Modifica timer</string> - - <!-- search --> <string name="epg_search_button">Cerca</string> <string name="epg_duration_template">%1$s min</string> <string name="epg_duration_template_live">%1$s/%2$s min</string> - <string name="epg_of_a_channel">EPG -> %1$s, %2$s/%3$s</string> + <string name="epg_of_a_channel">EPG -> %1$s, %2$s/%3$s</string> <string name="epg_by_channel">EPG per canale</string> <string name="epg_by_search">Ricerca EPG</string> <string name="epg_by_search_param">Ricerca EPG: \'%1$s\'</string> - <string name="epg_by_time">EPG per ora</string> - <string name="epg_by_time_args">EPG per ora: \'%1$s\'</string> + <string name="epg_by_time">EPG per ora</string> + <string name="epg_by_time_args">EPG per ora: \'%1$s\'</string> <string name="search_epg_hint">Ricerca EPG</string> <string name="epg_search_settings_description">Ricerca EPG in VDR</string> <string name="epg_window_title_count">%1$s, %2$s</string> <string name="channels_window_title_count">%1$s, %2$s/%3$s</string> <string name="new_timer">Nuovo timer</string> - - <string name="vdr_error_text">La comunicazione con VDR ha causato un errore: %1$s</string> - - <string name="livetv">Trasmissione dal vivo</string> - <string name="settings_livetv_summary">Sono necessari "streamdev-server" nella VDR e un riproduttore esterno come VPlayer</string> - <string name="settings_livetv_streamformat">Formato trasmissione</string> - <string name="settings_livetv_port">Porta trasmissione</string> - <string name="settings_livetv_port_summary">Predefinita 3000. L\'accesso deve essere abilitato in "streamdevhosts.conf".</string> - <string-array name="livetv_streamformat"> - <item>TS</item> - <item>PES</item> - <item>ES</item> - <item>PS</item> - </string-array> - <string-array name="livetv_streamformat_values"> - <item>TS</item> - <item>PES</item> - <item>ES</item> - <item>PS</item> - </string-array> - <string name="key_remux_enable">remux_enable</string> - <string name="key_remux_command">remux_command</string> - <string name="key_remux_parameter">remux_parameter</string> - - <string name="stream_via_as">Trasmissione</string> - <string name="stream_via">tramite %s</string> - <string name="stream_as">come %s</string> - <string name="remux_title">Remux</string> - <string name="remux_enable_title">Abilita Remux</string> - <string name="remux_enable_summary">Abilita trasmissione tramite remux (es. externremux.sh)</string> - - <string name="remux_command_title">Comando</string> - <string name="remux_command_summary">Di solito EXT o Extern (es. http://vdr:3000/Extern/1)</string> - - <string name="remux_parameter_title">Parametro</string> - <string name="remux_parameter_summary">Controllo qualità trasmissione (es. http://vdr:3000/Extern;DSL1000/1)</string> - + <string name="livetv">Trasmissione dal vivo</string> + <string name="settings_livetv_summary">Sono necessari \"streamdev-server\" nella VDR e un riproduttore esterno come VPlayer</string> + <string name="settings_livetv_streamformat">Formato trasmissione</string> + <string name="settings_livetv_port">Porta trasmissione</string> + <string name="settings_livetv_port_summary">Predefinita 3000. L\'accesso deve essere abilitato in \"streamdevhosts.conf\".</string> + <string name="key_remux_enable">remux_enable</string> + <string name="key_remux_command">remux_command</string> + <string name="key_remux_parameter">remux_parameter</string> + <string name="stream_via_as">Trasmissione</string> + <string name="stream_via">tramite %s</string> + <string name="stream_as">come %s</string> + <string name="remux_title">Remux</string> + <string name="remux_enable_title">Abilita Remux</string> + <string name="remux_enable_summary">Abilita trasmissione tramite remux (es. externremux.sh)</string> + <string name="remux_command_title">Comando</string> + <string name="remux_command_summary">Di solito EXT o Extern (es. http://vdr:3000/Extern/1)</string> + <string name="remux_parameter_title">Parametro</string> + <string name="remux_parameter_summary">Controllo qualità trasmissione (es. http://vdr:3000/Extern;DSL1000/1)</string> <string name="main_menu_preferences">Impostazioni</string> <string name="main_menu_info">Info</string> <string name="main_menu_exit">Esci</string> - - - <string name="vdr_devices_summary">Definisci uno o più dispositivi VDR (in arrivo)</string> - <string name="vdr_devices">Dispositivi VDR</string> - - <!-- VDR plugin preferences --> - <string name="vdr_preferences">Impostazioni rete</string> - <string name="vdr_host_title">Nome sistema/IP</string> - <string name="vdr_host_summary">Nome sistema o indirizzo IP della VDR in esecuzione</string> - <string name="vdr_port_title">Porta plugin VDR</string> - <string name="vdr_port_summary">Porta per connessioni al plugin di VDR</string> - <string name="vdr_port_default">6420</string> - <string name="vdr_password_title">Password plugin VDR</string> - <string name="vdr_password_summary">Password per il plugin di VDR</string> - <string name="vdr_ssl_title">Connessione sicura</string> - <string name="vdr_ssl_summary">Usa SSL per le connessioni (al momento non supportato)</string> - - <!-- channel filter preferences --> - <string name="channel_filter_preferences">Impostazioni canale</string> - <string name="channel_filter_filter_title">Limita canali</string> - <string name="channel_filter_filter_summary">Usa solo determinati canali</string> - <string name="channel_filter_last_title">Filtro canale</string> - <string name="channel_filter_last_summary">Numero di canali o sequenze separate da virgole (separatore \'-\'). Es. 1,2,4-10</string> - - <!-- wakeup --> - <string name="wakeup_preferences">Accensione VDR da remoto</string> - <string name="wakeup_enabled_title">Può accendere VDR da remoto</string> - <string name="wakeup_enabled_summary">Abilita accensione VDR da remoto</string> - <string name="wakeup_url_title">URL per accensione remota</string> - <string name="wakeup_url_summary">URL per richiesta esecuzione accensione</string> - <string name="wakeup_user_title">Utente accensione</string> - <string name="wakeup_user_summary">Utente per accensione remota</string> - <string name="wakeup_password_title">Password accensione</string> - <string name="wakeup_password_summary">Password per accensione remota</string> - <string name="wakeup_method_title">Metodo accensione</string> - <string name="wakeup_method_summary">Scegli un metodo per accendere VDR</string> - - <string-array name="wakeup_methods"> - <item>Chiama URL</item> - <item>WOL</item> - </string-array> - <string-array name="wakeup_methods_values"> - <item>url</item> - <item>wol</item> - </string-array> - - <string name="default_wakeup_method">url</string> - <string name="wakeup_wol_custom_boradcast_title">Indirizzo IP destinazione</string> - <string name="wakeup_wol_custom_boradcast_summary">A meno di non avere delle tabelle ARP statiche dovresti usare un indirizzo di broadcast.</string> - <string name="wakeup_wol_mac_title">Indirizzo MAC</string> - <string name="wakeup_wol_mac_summary">Indirizzo MAC di VDR. Usa \':\' o \'-\' o uno spazio come separatore.</string> - - <!-- timer --> - <string name="timer_preferences">Valori predefiniti timer</string> - <string name="timer_pre_start_buffer_title">Margine inizio</string> - <string name="timer_pre_start_buffer_summary">Minuti di avvio registrazione prima dell\'inizio + <string name="main_menu_goto">Cambia dispositivo</string> + <string name="main_menu_goto_title">Passa a...</string> + <string name="main_menu_goto_no_vdr">Impossibile caricare il dispositivo selezionato</string> + <string name="main_menu_switched_to">Passato a %1$s</string> + <string name="vdr_devices_summary">Definisci uno o più dispositivi VDR (in arrivo)</string> + <string name="vdr_devices">Dispositivi VDR</string> + <string name="vdr_preferences">Impostazioni rete</string> + <string name="vdr_host_title">Nome sistema/IP</string> + <string name="vdr_host_summary">Nome sistema o indirizzo IP della VDR in esecuzione</string> + <string name="vdr_port_title">Porta plugin VDR</string> + <string name="vdr_port_summary">Porta per connessioni al plugin di VDR</string> + <string name="vdr_port_default">6420</string> + <string name="vdr_password_title">Password plugin VDR</string> + <string name="vdr_password_summary">Password per il plugin di VDR</string> + <string name="vdr_ssl_title">Connessione sicura</string> + <string name="vdr_ssl_summary">Usa SSL per le connessioni (al momento non supportato)</string> + <string name="channel_filter_preferences">Impostazioni canale</string> + <string name="channel_filter_filter_title">Limita canali</string> + <string name="channel_filter_filter_summary">Usa solo determinati canali</string> + <string name="channel_filter_last_title">Filtro canale</string> + <string name="channel_filter_last_summary">Numero di canali o sequenze separate da virgole (separatore \'-\'). Es. 1,2,4-10</string> + <string name="wakeup_preferences">Accensione VDR da remoto</string> + <string name="wakeup_enabled_title">Può accendere VDR da remoto</string> + <string name="wakeup_enabled_summary">Abilita accensione VDR da remoto</string> + <string name="wakeup_url_title">URL per accensione remota</string> + <string name="wakeup_url_summary">URL per richiesta esecuzione accensione</string> + <string name="wakeup_user_title">Utente accensione</string> + <string name="wakeup_user_summary">Utente per accensione remota</string> + <string name="wakeup_password_title">Password accensione</string> + <string name="wakeup_password_summary">Password per accensione remota</string> + <string name="wakeup_method_title">Metodo accensione</string> + <string name="wakeup_method_summary">Scegli un metodo per accendere VDR</string> + <string name="default_wakeup_method">url</string> + <string name="wakeup_wol_custom_boradcast_title">Indirizzo IP destinazione</string> + <string name="wakeup_wol_custom_boradcast_summary">A meno di non avere delle tabelle ARP statiche dovresti usare un indirizzo di broadcast.</string> + <string name="wakeup_wol_mac_title">Indirizzo MAC</string> + <string name="wakeup_wol_mac_summary">Indirizzo MAC di VDR. Usa \':\' o \'-\' o uno spazio come separatore.</string> + <string name="timer_preferences">Valori predefiniti timer</string> + <string name="timer_pre_start_buffer_title">Margine inizio</string> + <string name="timer_pre_start_buffer_summary">Minuti di avvio registrazione prima dell\'inizio dell\'evento</string> - <string name="timer_post_end_buffer_title">Margine fine</string> - <string name="timer_post_end_buffer_summary">Minuti di fermo registrazione dopo la fine + <string name="timer_post_end_buffer_title">Margine fine</string> + <string name="timer_post_end_buffer_summary">Minuti di fermo registrazione dopo la fine dell\'evento</string> - <string name="timer_default_priority_title">Priorità predefinita</string> - <string name="timer_default_priority_summary">Priorità predefinita</string> - <string name="timer_default_primary_limit_title">Limite primario predefinito</string> - <string name="timer_default_primary_limit_summary">Limite primario predefinito</string> - <string name="timer_default_lifetime_title">Durata predefinita</string> - <string name="timer_default_lifetime_summary">Durata predefinita</string> - - <!-- GUI --> - <string name="gui_preferences">Impostazioni GUI</string> - <string name="gui_enable_24h_format_title">Usa formato 24 ore</string> - <string name="gui_enable_24h_format_summary_on">13:00</string> - <string name="gui_enable_24h_format_summary_off">1:00 PM</string> - <string name="gui_channels_show_channel_numbers_title">Mostra numero canali</string> - <string name="gui_channels_show_channel_numbers_summary">Mostra il numero di canali nella lista canali</string> - <string name="gui_quit_on_back_title">Esci con tasto Indietro</string> - <string name="gui_quit_on_back_summary_on">Il tasto Indietro chiude VDR-Manager</string> - <string name="gui_quit_on_back_summary_off">Il tasto Indietro non chiude VDR-Manager</string> - <string name="qui_show_imdb_button_title">Mostra tasto IMDb</string> - <string name="qui_show_imdb_button_summary_on">Mostra il tasto IMDb</string> - <string name="qui_show_imdb_button_summary_off">Non mostrare il tasto IMDb</string> - <string name="qui_show_omdb_button_title">Mostra tasto OMDB</string> - <string name="qui_show_omdb_button_summary_on">Mostra il tasto OMDB</string> - <string name="qui_show_omdb_button_summary_off">Non mostrare il tasto OMDB</string> - <string name="qui_imdb_url_title">Sito IMDb</string> - <string name="qui_imdb_url_summary">Sito IMDb da usare</string> - <string name="gui_custom_locale_title">Lingua</string> - <string name="gui_custom_locale_sum">Seleziona una lingua</string> - - <string-array name="imdb_urls"> - <item>akas.imdb.com</item> - <item>imdb.com</item> - <item>uk.imdb.com</item> - <item>imdb.de</item> - <item>imdb.es</item> - <item>imdb.fr</item> - <item>imdb.it</item> - <item>imdb.pt</item> - </string-array> - <string-array name="imdb_urls_values"> - <item>Internazionale</item> - <item>imdb.com</item> - <item>uk.imdb.com</item> - <item>imdb.de</item> - <item>imdb.es</item> - <item>imdb.fr</item> - <item>imdb.it</item> - <item>imdb.pt</item> - </string-array> - <string-array name="lang_values"> - <item>en</item> - <item>de</item> - <item>it</item> - </string-array> - <string-array name="lang"> - <!-- - <item>Default language</item> - --> - <item>Inglese</item> - <item>Tedesco</item> - <item>Italiano</item> - </string-array> - - <string name="vdr_advanced_preferences">Avanzate</string> - <string name="vdr_advanced_preferences_summary">Impostazioni avanzate</string> - - <string name="vdr_conntimeout_title">Durata connessione</string> - <string name="vdr_conntimeout_sum">Tempo (in secondi) da aspettare prima che la connessione venga stabilita</string> - <string name="vdr_readtimeout_title">Durata lettura</string> - <string name="vdr_readtimeout_sum">Tempo (in secondi) da apsettare per ogni operazione di lettura</string> - <string name="vdr_timeout_title">Durata totale</string> - <string name="vdr_timeout_sum">Tempo (in secondi) da aspettare per un\'intera operazione di I/O prima di essere terminata</string> - - <string name="streaming_password_title">Password streamdev</string> - <string name="streaming_password_sum">Imposta la password del server streamdev (es. -a \'nomeutente:password\')</string> - - <string name="streaming_username_title">Nome utente streamdev</string> - <string name="streaming_username_sum">Imposta il nome utente del server streamdev (es. -a \'nomeutente:password\')</string> - - <string name="vdr_encoding_title">Codifica caratteri</string> - <string name="vdr_encoding_summary">Codifica caratteri della VDR. Predefinito utf-8.</string> - - <!-- progress --> + <string name="timer_default_priority_title">Priorità predefinita</string> + <string name="timer_default_priority_summary">Priorità predefinita</string> + <string name="timer_default_primary_limit_title">Limite primario predefinito</string> + <string name="timer_default_primary_limit_summary">Limite primario predefinito</string> + <string name="timer_default_lifetime_title">Durata predefinita</string> + <string name="timer_default_lifetime_summary">Durata predefinita</string> + <string name="gui_preferences">Impostazioni GUI</string> + <string name="gui_enable_24h_format_title">Usa formato 24 ore</string> + <string name="gui_enable_24h_format_summary_on">13:00</string> + <string name="gui_enable_24h_format_summary_off">1:00 PM</string> + <string name="gui_channels_show_channel_numbers_title">Mostra numero canali</string> + <string name="gui_channels_show_channel_numbers_summary">Mostra il numero di canali nella lista canali</string> + <string name="gui_quit_on_back_title">Esci con tasto Indietro</string> + <string name="gui_quit_on_back_summary_on">Il tasto Indietro chiude VDR-Manager</string> + <string name="gui_quit_on_back_summary_off">Il tasto Indietro non chiude VDR-Manager</string> + <string name="qui_show_imdb_button_title">Mostra tasto IMDb</string> + <string name="qui_show_imdb_button_summary_on">Mostra il tasto IMDb</string> + <string name="qui_show_imdb_button_summary_off">Non mostrare il tasto IMDb</string> + <string name="qui_imdb_url_title">Sito IMDb</string> + <string name="qui_imdb_url_summary">Sito IMDb da usare</string> + <string name="qui_show_omdb_button_title">Mostra tasto OMDB</string> + <string name="qui_show_omdb_button_summary_on">Mostra il tasto OMDB</string> + <string name="qui_show_omdb_button_summary_off">Non mostrare il tasto OMDB</string> + <string name="qui_show_tmdb_button_title">Mostra tasto TMDb</string> + <string name="qui_show_tmdb_button_summary_on">Tasto TMDb visibile</string> + <string name="qui_show_tmdb_button_summary_off">Tasto TMDb non visibile</string> + <string name="gui_custom_locale_title">Lingua</string> + <string name="gui_custom_locale_sum">Seleziona una lingua</string> + <string name="vdr_advanced_preferences">Avanzate</string> + <string name="vdr_advanced_preferences_summary">Impostazioni avanzate</string> + <string name="vdr_conntimeout_title">Durata connessione</string> + <string name="vdr_conntimeout_sum">Tempo (in secondi) da aspettare prima che la connessione venga stabilita</string> + <string name="vdr_readtimeout_title">Durata lettura</string> + <string name="vdr_readtimeout_sum">Tempo (in secondi) da apsettare per ogni operazione di lettura</string> + <string name="vdr_timeout_title">Durata totale</string> + <string name="vdr_timeout_sum">Tempo (in secondi) da aspettare per un\'intera operazione di I/O prima di essere terminata</string> + <string name="streaming_password_title">Password streamdev</string> + <string name="streaming_password_sum">Imposta la password del server streamdev (es. -a \'nomeutente:password\')</string> + <string name="streaming_username_title">Nome utente streamdev</string> + <string name="streaming_username_sum">Imposta il nome utente del server streamdev (es. -a \'nomeutente:password\')</string> + <string name="vdr_encoding_title">Codifica caratteri</string> + <string name="vdr_encoding_summary">Codifica caratteri della VDR. Predefinito utf-8.</string> + <string name="new_vdr">Nuova VDR</string> + <string name="no_vdr">Nessun dispositivo VDR</string> + <string name="vdr_devices_category">Dispositivi VDR</string> + <string name="vdr_prefs_category">Dispositivo</string> + <string name="vdr_name_title">Nome</string> + <string name="vdr_name_summary">Nome del dispositivo</string> + <string name="vdr_device_delete_qeustion">Eliminare questo dispositivo?</string> + <string name="recstream">Trasmissione registrazioni</string> + <string name="recstream_enable_title">Trasmissione registrazioni</string> + <string name="recstream_enable_summary">Abilita trasmissione registrazioni</string> + <string name="recstream_method_title">Metodo trasmissione</string> + <string name="recstream_method_summary">La trasmissione tramite il plugin VDR Live è attualmente supportata</string> + <string name="settings_live_port">Porta plugin VDR Live</string> + <string name="settings_live_port_summary">Il plugin VDR Live usa la porta 8008 come predefinita.</string> <string name="progress_connect">Connessione...</string> <string name="progress_connect_error">Connessione fallita!</string> <string name="progress_connect_timeout">Connessione scaduta!</string> @@ -314,21 +231,48 @@ <string name="progress_connect_finished_abnormal">Connessione completata in modo anomalo</string> <string name="progress_connect_finished_abnormal_arg">Connessione completata in modo anomalo: %1$s</string> <string name="progress_cache_hit">Caricato dalla cache</string> - <string name="recording_item_menu_delete">Elimina</string> <string name="recording_item_menu_stream">Trasmissione</string> - - - <string name="timer_detail_title_title">Titolo:</string> - <string name="timer_detail_channel_title">Canale:</string> - <string name="timer_detail_start_title">Inizio:</string> - <string name="timer_detail_end_title">Fine:</string> - - <string name="timer_details_create_title">Crea timer</string> - <string name="timer_details_save_title">Salva modifiche</string> - <string name="timer_details_delete_title">Elimina timer</string> - - <string name="timer_details_add_title">Crea nuovo timer</string> - <string name="timer_details_modify_title">Modifica timer</string> - - </resources>
\ No newline at end of file + <string name="recent_channels">Canali recenti</string> + <string name="recent_channels_no_history">Nessuna cronologia...</string> + <string name="gui_max_recent_channels_title">Numero massimo canali recenti</string> + <string name="gui_max_recent_channels_summary">Quanti canali vuoi conservare tra quelli recenti?</string> + <string-array name="livetv_streamformat"> + <item>TS</item> + <item>PES</item> + <item>ES</item> + <item>PS</item> + </string-array> + <string-array name="livetv_streamformat_values"> + <item>TS</item> + <item>PES</item> + <item>ES</item> + <item>PS</item> + </string-array> + <string-array name="wakeup_methods"> + <item>Chiama URL</item> + <item>WOL</item> + </string-array> + <string-array name="imdb_urls"> + <item>akas.imdb.com</item> + <item>imdb.com</item> + <item>uk.imdb.com</item> + <item>imdb.de</item> + <item>imdb.es</item> + <item>imdb.fr</item> + <item>imdb.it</item> + <item>imdb.pt</item> + </string-array> + <string-array name="lang"> + <item>Inglese</item> + <item>Tedesco</item> + <item>Italiano</item> + </string-array> + <string-array name="remux_entries"> + <item>EXT</item> + <item>EXTERN (deprecato)</item> + </string-array> + <string-array name="recstream_entries"> + <item>Plugin VDR Live</item> + </string-array> +</resources> diff --git a/vdrmanager/res/values/preferences_keys.xml b/vdrmanager/res/values/preferences_keys.xml index f79bf42..1b86bd6 100644 --- a/vdrmanager/res/values/preferences_keys.xml +++ b/vdrmanager/res/values/preferences_keys.xml @@ -52,4 +52,6 @@ <string name="vdr_conntimeout_key">key_conntimeout_key</string> <string name="vdr_readtimeout_key">key_vdr_readtimeout</string> <string name="vdr_timeout_key">key_vdr_timeout</string> + + <string name="gui_max_recent_channels_key">key_gui_max_recent_channels</string> </resources> diff --git a/vdrmanager/res/values/strings.xml b/vdrmanager/res/values/strings.xml index caa9a3c..f85fe60 100644 --- a/vdrmanager/res/values/strings.xml +++ b/vdrmanager/res/values/strings.xml @@ -18,6 +18,8 @@ <string name="groupby_group">Group</string> <string name="groupby_provider">Provider</string> <string name="groupby_name">Name</string> + <string name="groupby_channel">By Channel</string> + <string name="groupby_date">By Date</string> <string name="groupby_name_all_channels_group">All Channels</string> <string name="groupby_window_title_templte">Group by %1$s</string> <string name="common_delete">Delete</string> @@ -303,5 +305,8 @@ <string name="progress_cache_hit">Loaded from cache.</string> <string name="recording_item_menu_delete">Delete</string> <string name="recording_item_menu_stream">Stream</string> - + <string name="recent_channels">Recent channels</string> + <string name="recent_channels_no_history">No history…</string> + <string name="gui_max_recent_channels_title">Max. recent channels</string> + <string name="gui_max_recent_channels_summary">How many channels should be kept in the recent channels?</string> </resources>
\ No newline at end of file diff --git a/vdrmanager/res/xml/preferences.xml b/vdrmanager/res/xml/preferences.xml index c92b1fa..8a819dd 100644 --- a/vdrmanager/res/xml/preferences.xml +++ b/vdrmanager/res/xml/preferences.xml @@ -20,12 +20,21 @@ android:summary="@string/gui_channels_show_channel_numbers_summary" android:title="@string/gui_channels_show_channel_numbers_title" /> + + <EditTextPreference android:defaultValue="10" + android:key="@string/gui_max_recent_channels_key" android:inputType="number" + android:summary="@string/gui_max_recent_channels_summary" + android:title="@string/gui_max_recent_channels_title" /> + + <CheckBoxPreference android:key="@string/gui_enable_24h_format_key" android:defaultValue="true" android:summaryOff="@string/gui_enable_24h_format_summary_off" android:summaryOn="@string/gui_enable_24h_format_summary_on" android:title="@string/gui_enable_24h_format_title" /> + + <CheckBoxPreference android:defaultValue="true" android:key="@string/qui_show_imdb_button_key" android:summaryOff="@string/qui_show_imdb_button_summary_off" android:summaryOn="@string/qui_show_imdb_button_summary_on" 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(); } |