summaryrefslogtreecommitdiff
path: root/vdrmanager
diff options
context:
space:
mode:
Diffstat (limited to 'vdrmanager')
-rw-r--r--vdrmanager/AndroidManifest.xml7
-rw-r--r--vdrmanager/res/layout/about.xml13
-rw-r--r--vdrmanager/res/layout/channel_list.xml7
-rw-r--r--vdrmanager/res/layout/epg_detail.xml325
-rw-r--r--vdrmanager/res/layout/epg_search_times_item.xml1
-rw-r--r--vdrmanager/res/layout/event_epg_list.xml20
-rw-r--r--vdrmanager/res/layout/recording_list.xml13
-rw-r--r--vdrmanager/res/layout/time_epg_list.xml148
-rw-r--r--vdrmanager/res/layout/timer_list.xml13
-rw-r--r--vdrmanager/res/layout/timer_operation_list_item10
-rw-r--r--vdrmanager/res/menu/epg_list_menu.xml3
-rw-r--r--vdrmanager/res/values-de/epg.xml2
-rw-r--r--vdrmanager/res/values-de/epg_search_times.xml1
-rw-r--r--vdrmanager/res/values-de/timers.xml4
-rw-r--r--vdrmanager/res/values/epg.xml2
-rw-r--r--vdrmanager/res/values/epg_search_times.xml1
-rw-r--r--vdrmanager/res/values/timers.xml2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/app/Intents.java5
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/BaseEvent.java104
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/Epg.java2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchParams.java4
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValue.java7
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValues.java6
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/Event.java110
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/EventListItem.java2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/Recording.java2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java2
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java144
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java79
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java287
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java174
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java349
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java5
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java136
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java9
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/SvdrpProgressDialog.java18
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java105
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java242
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java11
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java32
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/ChannelClient.java66
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/EpgClient.java3
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/SvdrpClient.java69
44 files changed, 1443 insertions, 1104 deletions
diff --git a/vdrmanager/AndroidManifest.xml b/vdrmanager/AndroidManifest.xml
index 18f984f..d6e7f64 100644
--- a/vdrmanager/AndroidManifest.xml
+++ b/vdrmanager/AndroidManifest.xml
@@ -5,7 +5,7 @@
<application android:icon="@drawable/app_logo"
android:label="@string/app_name" android:debuggable="true"
android:name=".app.VdrManagerApp">
- <activity android:label="@string/app_name" android:name=".gui.VdrManagerActivity" android:configChanges="orientation|locale">
+ <activity android:label="@string/app_name" android:name=".gui.VdrManagerActivity" android:configChanges="locale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -55,7 +55,8 @@
<meta-data android:name="android.app.default_searchable"
android:value=".gui.EpgSearchListActivity" />
</activity>
- <activity android:name=".gui.TimerDetailsActivity">
+ <activity android:name=".gui.TimerDetailsActivity" android:configChanges="orientation|locale|keyboardHidden"
+ android:windowSoftInputMode="stateHidden" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
@@ -79,7 +80,7 @@
android:resource="@xml/searchable" />
</activity>
- <activity android:name=".gui.EpgSearchTimesListActivity"></activity>
+ <activity android:name=".gui.EpgSearchTimesListActivity" android:configChanges="orientation|locale"/>
<provider android:name=".data.db.DataProvider"
diff --git a/vdrmanager/res/layout/about.xml b/vdrmanager/res/layout/about.xml
new file mode 100644
index 0000000..3831b90
--- /dev/null
+++ b/vdrmanager/res/layout/about.xml
@@ -0,0 +1,13 @@
+<?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"
+ android:orientation="vertical" >
+
+ <TextView
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:autoLink="all"
+ android:text="@string/about_text" />
+
+</ScrollView> \ No newline at end of file
diff --git a/vdrmanager/res/layout/channel_list.xml b/vdrmanager/res/layout/channel_list.xml
index 0a089d2..a632b48 100644
--- a/vdrmanager/res/layout/channel_list.xml
+++ b/vdrmanager/res/layout/channel_list.xml
@@ -1,4 +1,4 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/flipper"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
@@ -19,7 +19,7 @@
</LinearLayout>
<LinearLayout android:orientation="vertical"
android:id="@+id/no_connection_layout" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:visibility="gone">
+ android:layout_height="fill_parent">
<LinearLayout android:layout_height="fill_parent"
android:gravity="center" android:layout_width="fill_parent"
android:orientation="horizontal">
@@ -34,5 +34,4 @@
</LinearLayout>
</LinearLayout>
-
-</LinearLayout>
+</ViewFlipper>
diff --git a/vdrmanager/res/layout/epg_detail.xml b/vdrmanager/res/layout/epg_detail.xml
index d763429..fb4ed6c 100644
--- a/vdrmanager/res/layout/epg_detail.xml
+++ b/vdrmanager/res/layout/epg_detail.xml
@@ -1,167 +1,168 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/epg_detail_title"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textStyle="bold"
- android:textAppearance="?android:textAppearanceMedium"
- android:text="Unterwegs nach Cold Mountain"/>
<LinearLayout
- android:id="@+id/epg_detail_time_channel"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/epg_detail_time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="left"
- android:textAppearance="?android:textAppearanceSmall"
- android:text="20:10-20-15"
- />
-
- <TextView
- android:id="@+id/epg_detail_duration"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="right" android:layout_weight="1"
- android:paddingLeft="10dip"
- android:text="2/123min"
- android:textAppearance="?android:textAppearanceSmall"
- />
-
-
- <TextView
- android:id="@+id/epg_detail_channel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="Sky Cinema"
- android:visibility="gone"
- android:gravity="right"/>
-
- </LinearLayout>
-
-
- <LinearLayout android:layout_width="fill_parent" android:padding="3dip" android:paddingBottom="1dip"
- android:layout_height="wrap_content" android:layout_marginTop="0dip"
- android:orientation="horizontal">
-
- <ImageView android:id="@+id/epg_timer_state" android:layout_marginRight="5dip"
- android:layout_width="wrap_content" android:layout_height="fill_parent"
- android:layout_centerVertical="true" android:visibility="gone" />
-
- <TextView
- android:id="@+id/epg_detail_shorttext"
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="left"
- android:layout_weight="1"
- android:text="Krimikömedie"
- android:textAppearance="?android:textAppearanceSmall"/>
-
- </LinearLayout>
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
+ <TextView
+ android:id="@+id/epg_detail_title"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Unterwegs nach Cold Mountain"
+ android:textAppearance="?android:textAppearanceMedium"
+ android:textStyle="bold" />
- <TextView
- android:id="@+id/epg_detail_separator_0"
- android:layout_width="fill_parent"
- android:layout_height="2sp"/>
-
-
-
-
- <ProgressBar
- android:id="@+id/epg_detail_progress"
- android:layout_width="fill_parent"
- android:indeterminate="false"
- android:layout_height="2dip"
- android:progress="40"
- style="?android:attr/progressBarStyleHorizontal"/>
-
- <ScrollView
- android:id="@+id/epg_detail_description_scroll"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1">
+ <LinearLayout
+ android:id="@+id/epg_detail_time_channel"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+
+ <TextView
+ android:id="@+id/epg_detail_time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="left"
+ android:text="20:10-20-15"
+ android:textAppearance="?android:textAppearanceSmall" />
- <TextView android:textSize="16dip"
- android:id="@+id/epg_detail_description"
+ <TextView
+ android:id="@+id/epg_detail_duration"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="right"
+ android:paddingLeft="10dip"
+ android:text="2/123min"
+ android:textAppearance="?android:textAppearanceSmall" />
+
+ <TextView
+ android:id="@+id/epg_detail_channel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="right"
+ android:text="Sky Cinema"
+ android:visibility="gone" />
+ </LinearLayout>
+
+ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- </TextView>
-
- </ScrollView>
+ android:layout_height="wrap_content"
+ android:layout_marginTop="0dip"
+ android:orientation="horizontal"
+ android:padding="3dip"
+ android:paddingBottom="1dip" >
- <TextView
- android:id="@+id/epg_detail_separator_2"
- android:layout_width="fill_parent"
- android:layout_height="1sp"/>
+ <ImageView
+ android:id="@+id/epg_timer_state"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:layout_centerVertical="true"
+ android:layout_marginRight="5dip"
+ android:visibility="gone" />
- <TextView
- android:id="@+id/epg_detail_separator_3"
- android:layout_width="fill_parent"
- android:layout_height="4sp"/>
-
-<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center">
+ <TextView
+ android:id="@+id/epg_detail_shorttext"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="left"
+ android:text="Krimikömedie"
+ android:textAppearance="?android:textAppearanceSmall" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/epg_detail_separator_0"
+ android:layout_width="fill_parent"
+ android:layout_height="2sp" />
+
+ <ProgressBar
+ android:id="@+id/epg_detail_progress"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="2dip"
+ android:indeterminate="false"
+ android:progress="40" />
+
+ <ScrollView
+ android:id="@+id/epg_detail_description_scroll"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" >
+
+ <TextView
+ android:id="@+id/epg_detail_description"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:textSize="16dip" >
+ </TextView>
+ </ScrollView>
+
+ <TextView
+ android:id="@+id/epg_detail_separator_2"
+ android:layout_width="fill_parent"
+ android:layout_height="1sp" />
+
+ <TextView
+ android:id="@+id/epg_detail_separator_3"
+ android:layout_width="fill_parent"
+ android:layout_height="4sp" />
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:orientation="horizontal" >
-<!--
+ <!-- -->
<ImageButton
android:id="@+id/epg_event_left"
- android:src="@drawable/left"
+ android:src="@drawable/ic_menu_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
- style="?android:attr/buttonStyleSmall"
- android:layout_marginRight="40dip"
android:background="@android:drawable/list_selector_background"/>
-
- -->
-
-
- <ImageButton
- android:id="@+id/epg_event_livetv"
- android:src="@drawable/tv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_centerHorizontal="true"
- style="?android:attr/buttonStyleSmall" android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
- android:background="@android:drawable/list_selector_background"
- android:text="@string/epg_eent_livetv_text"/>
-
- <ImageButton
- android:id="@+id/epg_event_create_timer"
- android:src="@drawable/timer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
- android:layout_gravity="center_horizontal"
- android:layout_centerHorizontal="true"
- android:background="@android:drawable/list_selector_background"
- style="?android:attr/buttonStyleSmall"
- android:text="@string/epg_event_create_timer_text"/>
-
- <ImageButton
- android:id="@+id/epg_event_imdb"
- android:src="@drawable/imdb"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
- android:layout_gravity="center_horizontal"
- android:layout_centerHorizontal="true"
- android:background="@android:drawable/list_selector_background"
- style="?android:attr/buttonStyleSmall"
- android:text="@string/epg_event_imdb_text"/>
-
-
- <!--
+ <!-- -->
+
+<LinearLayout android:orientation="horizontal" android:layout_height="wrap_content" android:addStatesFromChildren="true" android:layout_weight="1.0" android:layout_width="wrap_content" android:gravity="center_vertical"
+ android:baselineAligned="false">
+ <ImageButton android:layout_weight="1"
+ android:id="@+id/epg_event_livetv"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:drawable/list_selector_background"
+ android:src="@drawable/tv"
+ android:text="@string/epg_eent_livetv_text" />
+
+ <ImageButton android:layout_weight="1"
+ android:id="@+id/epg_event_create_timer"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:drawable/list_selector_background"
+ android:src="@drawable/timer"
+ android:text="@string/epg_event_create_timer_text" />
+
+ <ImageButton android:layout_weight="1"
+ android:id="@+id/epg_event_imdb"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:drawable/list_selector_background"
+ android:src="@drawable/imdb"
+ android:text="@string/epg_event_imdb_text" />
+</LinearLayout>
+ <!--
<ImageButton
android:id="@+id/epg_event_share"
android:src="@android:drawable/ic_menu_share"
@@ -172,9 +173,10 @@
android:background="@android:drawable/list_selector_background"
style="?android:attr/buttonStyleSmall"
android:text="@string/epg_event_share_text"/>
- -->
-
- <!--
+ -->
+
+
+ <!--
<ImageButton
android:id="@+id/epg_event_epg"
android:src="@drawable/epg"
@@ -185,22 +187,15 @@
android:background="@android:drawable/list_selector_background"
style="?android:attr/buttonStyleSmall"
android:text="@string/epg_event_create_timer_text"/>
- -->
- <!--
- <ImageButton
+ -->
+ <!-- -->
+ <ImageButton
android:id="@+id/epg_event_right"
- android:src="@drawable/right"
+ android:src="@drawable/ic_menu_forward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:layout_centerHorizontal="true"
- style="?android:attr/buttonStyleSmall"
- android:layout_marginLeft="40dip"
android:background="@android:drawable/list_selector_background"/>
--->
-
-
- </LinearLayout>
-
-
-</LinearLayout>
+
+
+ </LinearLayout>
+ </LinearLayout> \ No newline at end of file
diff --git a/vdrmanager/res/layout/epg_search_times_item.xml b/vdrmanager/res/layout/epg_search_times_item.xml
index 93aa44b..5680f7e 100644
--- a/vdrmanager/res/layout/epg_search_times_item.xml
+++ b/vdrmanager/res/layout/epg_search_times_item.xml
@@ -5,4 +5,5 @@
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity= "center_vertical"
+ android:textAppearance="?android:textAppearanceLarge"
android:lines="2"/>
diff --git a/vdrmanager/res/layout/event_epg_list.xml b/vdrmanager/res/layout/event_epg_list.xml
index 436ca23..e706f06 100644
--- a/vdrmanager/res/layout/event_epg_list.xml
+++ b/vdrmanager/res/layout/event_epg_list.xml
@@ -10,13 +10,33 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
+
+ <LinearLayout
+ android:id="@+id/whatson_time"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+
<Spinner
android:id="@+id/epg_list_channel_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:layout_weight="1"
android:prompt="@string/epg_list_channel_spinner" />
+ <ImageView
+ android:clickable="true"
+ android:background="@android:drawable/list_selector_background"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center_horizontal"
+ android:id="@+id/switch_epg_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonStyleSmall"
+ android:src="@android:drawable/ic_menu_revert" />
+ </LinearLayout>
+
<ListView
android:id="@+id/whatson_list"
android:layout_width="fill_parent"
diff --git a/vdrmanager/res/layout/recording_list.xml b/vdrmanager/res/layout/recording_list.xml
index 1dabd2c..66eb5de 100644
--- a/vdrmanager/res/layout/recording_list.xml
+++ b/vdrmanager/res/layout/recording_list.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- android:orientation="vertical">
+<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/flipper"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
<LinearLayout android:layout_height="fill_parent"
android:layout_width="fill_parent" android:id="@+id/main_content">
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
@@ -11,9 +13,10 @@
android:layout_alignParentTop="true" android:layout_centerHorizontal="true"
android:cacheColorHint="?android:attr/colorBackground" />
</LinearLayout>
+
<LinearLayout android:orientation="vertical"
android:id="@+id/no_connection_layout" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:visibility="gone">
+ android:layout_height="fill_parent">
<LinearLayout android:layout_height="fill_parent"
android:gravity="center" android:layout_width="fill_parent"
android:orientation="horizontal">
@@ -28,4 +31,4 @@
</LinearLayout>
</LinearLayout>
-</LinearLayout> \ No newline at end of file
+</ViewFlipper> \ No newline at end of file
diff --git a/vdrmanager/res/layout/time_epg_list.xml b/vdrmanager/res/layout/time_epg_list.xml
index c45f9ba..5364aa9 100644
--- a/vdrmanager/res/layout/time_epg_list.xml
+++ b/vdrmanager/res/layout/time_epg_list.xml
@@ -1,63 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
+<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:orientation="vertical">
+ android:orientation="vertical" >
- <LinearLayout
- android:id="@+id/whatson_time"
+ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/epg_list_time_label"
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
+
+ <LinearLayout
+ android:id="@+id/whatson_time"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+
+ <TextView
+ android:id="@+id/epg_list_time_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/epg_list_time_label"
+ android:visibility="gone" />
+
+ <ImageView
+ android:id="@+id/epg_list_times"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_centerHorizontal="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:drawable/list_selector_background"
+ android:clickable="true"
+ android:src="@android:drawable/ic_menu_recent_history" />
+
+ <Spinner
+ android:id="@+id/epg_list_time_spinner"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:prompt="@string/epg_list_time_label" />
+
+ <ImageView
+ android:id="@+id/switch_epg_view"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:drawable/list_selector_background"
+ android:clickable="true"
+ android:src="@android:drawable/ic_menu_revert" />
+ </LinearLayout>
+
+ <ListView
+ android:id="@+id/whatson_list"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_alignParentTop="true"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_below="@id/epg_list_time_spinner"
+ android:layout_centerHorizontal="true"
+ android:cacheColorHint="?android:attr/colorBackground" />
+
+ <TextView
+ android:id="@+id/epg_list_search_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/epg_list_time_label"/>
-
- <Spinner
- android:id="@+id/epg_list_time_spinner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:prompt="@string/epg_list_time_label"/>
-
+ android:text="@string/epg_list_search_label" />
</LinearLayout>
-
- <ListView
- android:id="@+id/whatson_list"
+
+ <LinearLayout
+ android:id="@+id/no_connection_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:layout_below="@id/epg_list_time_spinner"
- android:layout_alignWithParentIfMissing="true"
- android:layout_alignParentTop="true"
- android:layout_centerHorizontal="true"
- android:cacheColorHint="?android:attr/colorBackground"/>
-
- <TextView
- android:id="@+id/epg_list_search_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/epg_list_search_label"/>
-
- <LinearLayout android:orientation="vertical"
- android:id="@+id/no_connection_layout" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:visibility="gone">
- <LinearLayout android:layout_height="fill_parent"
- android:gravity="center" android:layout_width="fill_parent"
- android:orientation="horizontal">
- <TextView android:text="@string/no_connection"
- android:layout_height="wrap_content" android:layout_width="wrap_content"
- android:textSize="18dip" />
- <ImageView android:src="@drawable/sad"
- android:layout_height="wrap_content" android:layout_width="wrap_content" />
- <Button android:text="@string/no_connection_retry"
- android:textSize="18dip" android:layout_height="wrap_content"
- android:layout_width="wrap_content" android:id="@+id/retry_button" />
-
- </LinearLayout>
- </LinearLayout>
-
-
-</LinearLayout>
+ android:orientation="vertical" >
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:gravity="center"
+ android:orientation="horizontal" >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/no_connection"
+ android:textSize="18dip" />
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/sad" />
+
+ <Button
+ android:id="@+id/retry_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/no_connection_retry"
+ android:textSize="18dip" />
+ </LinearLayout>
+ </LinearLayout>
+
+</ViewFlipper> \ No newline at end of file
diff --git a/vdrmanager/res/layout/timer_list.xml b/vdrmanager/res/layout/timer_list.xml
index 2416767..5e01c4a 100644
--- a/vdrmanager/res/layout/timer_list.xml
+++ b/vdrmanager/res/layout/timer_list.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- android:orientation="vertical">
+<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/flipper"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
<LinearLayout android:layout_height="fill_parent"
android:layout_width="fill_parent" android:id="@+id/main_content">
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
@@ -11,9 +13,10 @@
android:layout_alignParentTop="true" android:layout_centerHorizontal="true"
android:cacheColorHint="?android:attr/colorBackground" />
</LinearLayout>
+
<LinearLayout android:orientation="vertical"
android:id="@+id/no_connection_layout" android:layout_width="fill_parent"
- android:layout_height="fill_parent" android:visibility="gone">
+ android:layout_height="fill_parent">
<LinearLayout android:layout_height="fill_parent"
android:gravity="center" android:layout_width="fill_parent"
android:orientation="horizontal">
@@ -28,4 +31,4 @@
</LinearLayout>
</LinearLayout>
-</LinearLayout> \ No newline at end of file
+</ViewFlipper> \ No newline at end of file
diff --git a/vdrmanager/res/layout/timer_operation_list_item b/vdrmanager/res/layout/timer_operation_list_item
new file mode 100644
index 0000000..16aa849
--- /dev/null
+++ b/vdrmanager/res/layout/timer_operation_list_item
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:paddingLeft="5dp"
+ android:paddingRight="5dp"
+ android:gravity= "center_vertical"
+ android:textAppearance="?android:textAppearanceLarge"
+ android:textColor="#000"
+ android:lines="2"/>
diff --git a/vdrmanager/res/menu/epg_list_menu.xml b/vdrmanager/res/menu/epg_list_menu.xml
index 44ae64d..86a1f78 100644
--- a/vdrmanager/res/menu/epg_list_menu.xml
+++ b/vdrmanager/res/menu/epg_list_menu.xml
@@ -1,10 +1,11 @@
<?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"
diff --git a/vdrmanager/res/values-de/epg.xml b/vdrmanager/res/values-de/epg.xml
index 3c2e905..e2795c1 100644
--- a/vdrmanager/res/values-de/epg.xml
+++ b/vdrmanager/res/values-de/epg.xml
@@ -5,6 +5,7 @@
<string name="epg_list_time_label">Was kommt</string>
<string name="epg_list_time_now">jetzt</string>
<string name="epg_list_time_next">als nächstes</string>
+ <string name="epg_list_time_adhoc">Ad Hoc</string>
<string name="epg_list_channel_spinner">Kanal</string>
<string name="epg_list_search_label">Suchergebnisse</string>
@@ -24,6 +25,7 @@
<string name="epg_by_search">EPG Suche</string>
<string name="epg_by_search_param">EPG Suche: \'%1$s\'</string>
<string name="epg_by_time">EPG nach Zeit</string>
+ <string name="epg_by_time_args">EPG nach Zeit: \'%1$s\'</string>
<string name="search_epg_hint">Suche EPG</string>
<string name="epg_search_settings_description">Suche VDR EPG</string>
diff --git a/vdrmanager/res/values-de/epg_search_times.xml b/vdrmanager/res/values-de/epg_search_times.xml
index c44d2ab..9657ab8 100644
--- a/vdrmanager/res/values-de/epg_search_times.xml
+++ b/vdrmanager/res/values-de/epg_search_times.xml
@@ -2,5 +2,6 @@
<resources>
<string name="epg_search_times_add">Zeit hinzufügen</string>
+ <string name="epg_search_times_window">Selbstdefinierte Zeiten</string>
</resources>
diff --git a/vdrmanager/res/values-de/timers.xml b/vdrmanager/res/values-de/timers.xml
index 3410395..d2e9a7d 100644
--- a/vdrmanager/res/values-de/timers.xml
+++ b/vdrmanager/res/values-de/timers.xml
@@ -9,5 +9,7 @@
<string name="timer_details_create_title">Erzeuge Timer</string>
<string name="timer_details_save_title">Speichere Änderungen</string>
<string name="timer_details_delete_title">Lösche Timer</string>
-
+
+ <string name="timer_details_add_title">Neuer Timer anlegen</string>
+ <string name="timer_details_modify_title">Einen Timer änern</string>
</resources>
diff --git a/vdrmanager/res/values/epg.xml b/vdrmanager/res/values/epg.xml
index 3936bf4..f4ecd4f 100644
--- a/vdrmanager/res/values/epg.xml
+++ b/vdrmanager/res/values/epg.xml
@@ -5,6 +5,7 @@
<string name="epg_list_time_label">What\'s on at</string>
<string name="epg_list_time_now">Now</string>
<string name="epg_list_time_next">Next</string>
+ <string name="epg_list_time_adhoc">Ad Hoc</string>
<string name="epg_list_channel_spinner">Channel</string>
<string name="epg_list_search_label">Search results</string>
@@ -24,6 +25,7 @@
<string name="epg_by_search">EPG Search</string>
<string name="epg_by_search_param">EPG Search: \'%1$s\'</string>
<string name="epg_by_time">EPG by time</string>
+ <string name="epg_by_time_args">EPG by time: \'%1$s\'</string>
<string name="search_epg_hint">Search EPG</string>
<string name="epg_search_settings_description">Search VDR EPG</string>
diff --git a/vdrmanager/res/values/epg_search_times.xml b/vdrmanager/res/values/epg_search_times.xml
index 851935c..5ecf735 100644
--- a/vdrmanager/res/values/epg_search_times.xml
+++ b/vdrmanager/res/values/epg_search_times.xml
@@ -2,5 +2,6 @@
<resources>
<string name="epg_search_times_add">Add time</string>
+ <string name="epg_search_times_window">Custom times</string>
</resources>
diff --git a/vdrmanager/res/values/timers.xml b/vdrmanager/res/values/timers.xml
index b391c72..b091acd 100644
--- a/vdrmanager/res/values/timers.xml
+++ b/vdrmanager/res/values/timers.xml
@@ -10,4 +10,6 @@
<string name="timer_details_save_title">Save changes</string>
<string name="timer_details_delete_title">Delete timer</string>
+ <string name="timer_details_add_title">Create a new timer</string>
+ <string name="timer_details_modify_title">Modify a timer</string>
</resources>
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/app/Intents.java b/vdrmanager/src/de/bjusystems/vdrmanager/app/Intents.java
index dc71105..853f772 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/app/Intents.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/app/Intents.java
@@ -2,7 +2,10 @@ package de.bjusystems.vdrmanager.app;
public interface Intents {
- public static final String CURRENT_CHANNEL = "CURRENT_CHANNEL";
+ //public static final String CURRENT_CHANNEL = "CURRENT_CHANNEL";
public static final String HIGHLIGHT = "HIGHLIGHT";
+ public static final String TIMER_OP = "TIMER_OP";
+ public static final int EDIT_TIMER = 0;
+ public static final int ADD_TIMER = 1;
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java b/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java
index 7be0259..c4dc2a4 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/app/VdrManagerApp.java
@@ -60,7 +60,6 @@ public class VdrManagerApp extends Application {
}
public void setCurrentEvent(final Event currentEvent) {
- clear();
this.currentEvent = currentEvent;
//if (currentEvent.getTimer() != null) {
//this.currentTimer = currentEvent.getTimer();
@@ -74,7 +73,6 @@ public class VdrManagerApp extends Application {
}
public void setCurrentTimer(final Timer currentTimer) {
- clear();
this.currentTimer = currentTimer;
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/BaseEvent.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/BaseEvent.java
deleted file mode 100644
index b044b1a..0000000
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/BaseEvent.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package de.bjusystems.vdrmanager.data;
-
-import java.util.Date;
-
-import android.text.TextUtils;
-
-public abstract class BaseEvent implements Event {
-
- protected String channelNumber;
- protected String channelName;
- protected String title;
- protected String shortText;
- protected String description;
- protected Date start;
- protected Date stop;
-
- public BaseEvent(){
-
- }
-
- public Timer createTimer() {
- return new Timer(this);
- }
-
- public TimerState getTimerState() {
- return TimerState.None;
- }
-
- public void setChannelNumber(String channelNumber) {
- this.channelNumber = channelNumber;
- }
-
- public void setChannelName(String channelName) {
- this.channelName = channelName;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public void setShortText(String shortText) {
- this.shortText = shortText;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public void setStart(Date start) {
- this.start = start;
- }
-
- public void setStop(Date stop) {
- this.stop = stop;
- }
-
- public BaseEvent(Event event) {
- channelNumber = event.getChannelNumber();
- channelName = event.getChannelName();
- title = event.getTitle();
- shortText = event.getShortText();
- description = event.getDescription();
- start = event.getStart();
- stop = event.getStop();
- }
-
- public String getChannelNumber() {
- return channelNumber;
- }
-
- public String getChannelName() {
- return channelName;
- }
-
- public String getTitle() {
- return title;
- }
-
- public String getShortText() {
- if (TextUtils.isEmpty(shortText) == false) {
- return shortText;
- }
- if (TextUtils.isEmpty(description) == false) {
- if (description.length() < 30) {
- return description;
- }
- return TextUtils.substring(description, 0, 30) + "…";
- }
- return shortText;
- }
-
- public String getDescription() {
- return description;
- }
-
- public Date getStart() {
- return start;
- }
-
- public Date getStop() {
- return stop;
- }
-
-}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Epg.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Epg.java
index f9ca15a..721e839 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Epg.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Epg.java
@@ -12,7 +12,7 @@ import static de.bjusystems.vdrmanager.gui.Utils.mapSpecialChars;
* Class for EPG events
* @author bju
*/
-public class Epg extends BaseEvent {
+public class Epg extends Event {
private Timer timer;
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchParams.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchParams.java
index 62ca4e2..fbcac24 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchParams.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchParams.java
@@ -2,6 +2,8 @@ package de.bjusystems.vdrmanager.data;
import java.util.Date;
+import de.bjusystems.vdrmanager.gui.Utils;
+
/**
* Class for EPG events
* @author bju
@@ -38,6 +40,6 @@ public class EpgSearchParams {
this.end = end;
}
public String toCommandLine() {
- return title;
+ return Utils.unMapSpecialChars(title);
}
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValue.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValue.java
index 281b020..8ba9b5e 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValue.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValue.java
@@ -18,13 +18,20 @@ public class EpgSearchTimeValue {
this.text = "";
}
+ public String getText(){
+ return text;
+ }
+
public String getValue() {
switch (index) {
+ case -1:
+ return "adhoc";
case 0:
return "now";
case 1:
return "next";
default:
+
final String[] values = text.split(":");
final Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(values[0]));
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValues.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValues.java
index 6fba7ba..19878f3 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValues.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/EpgSearchTimeValues.java
@@ -13,7 +13,6 @@ public class EpgSearchTimeValues {
private final Context context;
public EpgSearchTimeValues(final Context context) {
-
this.context = context;
}
@@ -38,9 +37,14 @@ public class EpgSearchTimeValues {
}
}
+ values.add(new EpgSearchTimeValue(-1, context.getString(R.string.epg_list_time_adhoc)));
return values;
}
+ public void append(EpgSearchTimeValue est){
+ values.add(values.size() - 1, est);
+ }
+
public void saveValues(final List<EpgSearchTimeValue> values) {
// get old values
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Event.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Event.java
index 8bf9270..0348441 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Event.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Event.java
@@ -2,7 +2,106 @@ package de.bjusystems.vdrmanager.data;
import java.util.Date;
-public interface Event {
+import android.text.TextUtils;
+
+public abstract class Event {
+
+ protected String channelNumber;
+ protected String channelName;
+ protected String title;
+ protected String shortText;
+ protected String description;
+ protected Date start;
+ protected Date stop;
+
+ public Event(){
+
+ }
+
+ public Timer createTimer() {
+ return new Timer(this);
+ }
+
+ public TimerState getTimerState() {
+ return TimerState.None;
+ }
+
+ public void setChannelNumber(String channelNumber) {
+ this.channelNumber = channelNumber;
+ }
+
+ public void setChannelName(String channelName) {
+ this.channelName = channelName;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public void setShortText(String shortText) {
+ this.shortText = shortText;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setStart(Date start) {
+ this.start = start;
+ }
+
+ public void setStop(Date stop) {
+ this.stop = stop;
+ }
+
+ public Event(Event event) {
+ channelNumber = event.getChannelNumber();
+ channelName = event.getChannelName();
+ title = event.getTitle();
+ shortText = event.getShortText();
+ description = event.getDescription();
+ start = event.getStart();
+ stop = event.getStop();
+ }
+
+ public String getChannelNumber() {
+ return channelNumber;
+ }
+
+ public String getChannelName() {
+ return channelName;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public String getShortText() {
+ if (TextUtils.isEmpty(shortText) == false) {
+ return shortText;
+ }
+ if (TextUtils.isEmpty(description) == false) {
+ if (description.length() < 30) {
+ return description;
+ }
+ return TextUtils.substring(description, 0, 30) + "…";
+ }
+ return shortText;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public Date getStart() {
+ return start;
+ }
+
+ public Date getStop() {
+ return stop;
+ }
+
+
public enum TimerState {
None,
@@ -13,12 +112,5 @@ public interface Event {
;
}
- String getChannelNumber();
- String getChannelName();
- String getTitle();
- String getDescription();
- String getShortText();
- Date getStart();
- Date getStop();
- TimerState getTimerState();
+
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/EventListItem.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/EventListItem.java
index 1f1fd8f..e37aa3c 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/EventListItem.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/EventListItem.java
@@ -8,7 +8,7 @@ import de.bjusystems.vdrmanager.gui.Utils;
* TODO auf Event Interface umstellen und die Aufrufen an event
* delegieren. Das hier ist nicht gut.
*/
-public class EventListItem extends BaseEvent {
+public class EventListItem extends Event {
Event event;
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Recording.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Recording.java
index 378ec00..8209004 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Recording.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Recording.java
@@ -8,7 +8,7 @@ import de.bjusystems.vdrmanager.app.C;
import static de.bjusystems.vdrmanager.gui.Utils.mapSpecialChars;
-public class Recording extends BaseEvent{
+public class Recording extends Event{
public Recording(String line) {
final String[] words = StringUtils.splitPreserveAllTokens(line, C.DATA_SEPARATOR);
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java
index fb79fde..7765a36 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/Timer.java
@@ -15,7 +15,7 @@ import de.bjusystems.vdrmanager.utils.svdrp.SetTimerClient.TimerOperation;
*
* @author bju
*/
-public class Timer extends BaseEvent {
+public class Timer extends Event {
private static final int ENABLED = 1;
private static final int INSTANT = 2;
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java
index 5e2e49c..f4633b5 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseActivity.java
@@ -2,6 +2,8 @@ package de.bjusystems.vdrmanager.gui;
import android.app.Activity;
import android.app.AlertDialog;
+import android.content.Context;
+import android.net.ConnectivityManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -13,51 +15,46 @@ import android.widget.ViewFlipper;
import de.bjusystems.vdrmanager.R;
import de.bjusystems.vdrmanager.app.VdrManagerApp;
import de.bjusystems.vdrmanager.data.Channel;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
-public abstract class BaseActivity<T extends ListView> extends Activity
- implements OnClickListener {
+public abstract class BaseActivity<Result, T extends ListView> extends Activity
+ implements OnClickListener, SvdrpAsyncListener<Result> {
+
+ public static final String TAG = BaseActivity.class.getName();
public static final int MENU_GROUP_REFRESH = 99;
public static final int MENU_REFRESH = 99;
protected T listView;
-
+
protected ViewFlipper flipper;
+ private Button retry;
+
protected SvdrpProgressDialog progress;
+
abstract protected int getMainLayout();
- public void svdrpException(final SvdrpException exception) {
- // Log.w(TAG, exception);
- alert(getString(R.string.vdr_error_text, exception.getMessage()));
- }
-
+
protected void switchNoConnection() {
- View view = findViewById(R.id.main_content);
- if (view != null) {
- view.setVisibility(View.GONE);
+ if (flipper == null) {
+ return;
}
- view = findViewById(R.id.no_connection_layout);
- if (view != null) {
- view.setVisibility(View.VISIBLE);
- }
- Button b = (Button) findViewById(R.id.retry_button);
- b.setOnClickListener(this);
+ flipper.setDisplayedChild(1);
+ }
+
+ protected void initFlipper() {
+ this.flipper = (ViewFlipper) findViewById(R.id.flipper);
+ retry = (Button) findViewById(R.id.retry_button);
+ retry.setOnClickListener(this);
}
public void onClick(View v) {
if (v.getId() == R.id.retry_button) {
- View view = findViewById(R.id.no_connection_layout);
- if (view != null) {
- view.setVisibility(View.GONE);
- }
- view = findViewById(R.id.main_content);
- if (view != null) {
- view.setVisibility(View.VISIBLE);
- }
retry();
}
}
@@ -83,7 +80,7 @@ public abstract class BaseActivity<T extends ListView> extends Activity
public boolean onCreateOptionsMenu(final Menu menu) {
MenuItem item;
item = menu.add(MENU_GROUP_REFRESH, MENU_REFRESH, 0, R.string.refresh);
- item.setIcon(android.R.drawable.ic_menu_rotate);
+ item.setIcon(R.drawable.ic_menu_refresh);
item.setAlphabeticShortcut('r');
return true;
}
@@ -104,7 +101,7 @@ public abstract class BaseActivity<T extends ListView> extends Activity
}
}
- protected void setAsCurrent(Channel channel) {
+ protected void setCurrent(Channel channel) {
getApp().setCurrentChannel(channel);
}
@@ -127,6 +124,26 @@ public abstract class BaseActivity<T extends ListView> extends Activity
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
+ protected boolean noConnection(SvdrpEvent event) {
+ switch (event) {
+ case CONNECT_ERROR:
+ say(R.string.progress_connect_error);
+ switchNoConnection();
+ break;
+ case FINISHED_ABNORMALY:
+ alert(R.string.progress_connect_finished_abnormal);
+ switchNoConnection();
+ break;
+ case LOGIN_ERROR:
+ say(R.string.progress_login_error);
+ switchNoConnection();
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
protected void alert(String msg) {
new AlertDialog.Builder(this)//
.setMessage(msg)//
@@ -152,4 +169,77 @@ public abstract class BaseActivity<T extends ListView> extends Activity
int index;
int top;
+ protected boolean checkInternetConnection() {
+ ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ // test for connection
+ if (cm.getActiveNetworkInfo() != null
+ && cm.getActiveNetworkInfo().isAvailable()
+ && cm.getActiveNetworkInfo().isConnected()) {
+ return true;
+ }
+ return false;
+ }
+
+ public void svdrpEvent(final SvdrpEvent event, final Result result) {
+
+ switch (event) {
+
+ case ABORTED:
+ alert(R.string.aborted);
+ break;
+ case ERROR:
+ alert(R.string.epg_client_errors);
+ // say(R.string.epg_client_errors);
+ // dismiss(progress);
+ break;
+ case CONNECTING:
+ break;
+ case CONNECTED:
+ connected();
+ break;
+ case CONNECT_ERROR:
+ case FINISHED_ABNORMALY:
+ case LOGIN_ERROR:
+ noConnection(event);
+ break;
+ case CACHE_HIT:
+ cacheHit();
+ return;
+ case FINISHED_SUCCESS:
+ if (finishedSuccess() == false) {
+ say(R.string.epg_no_items);
+ } else {
+ restoreViewSelection();
+ }
+ break;
+ case RESULT_RECEIVED:
+ resultReceived(result);
+ break;
+ }
+ }
+
+ protected void cacheHit() {
+
+ }
+
+ /**
+ * @return false, if no results found
+ */
+ protected abstract boolean finishedSuccess();
+
+ /**
+ * @param result
+ */
+ protected abstract void resultReceived(Result result);
+
+ protected void connected() {
+
+ }
+
+ public void svdrpException(final SvdrpException exception) {
+ progress.svdrpException(exception);
+ // Log.w(TAG, exception);
+ alert(getString(R.string.vdr_error_text, exception.getMessage()));
+ }
+
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java
index 7174803..f802b81 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseEventListActivity.java
@@ -29,17 +29,14 @@ import de.bjusystems.vdrmanager.data.Event;
import de.bjusystems.vdrmanager.data.EventListItem;
import de.bjusystems.vdrmanager.gui.SimpleGestureFilter.SimpleGestureListener;
import de.bjusystems.vdrmanager.utils.svdrp.EpgClient;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
/**
* @author lado
*
*/
-public abstract class BaseEventListActivity<T extends Event> extends
- BaseActivity<ListView> implements OnItemClickListener,
- SvdrpAsyncListener<T>, SimpleGestureListener {
+public abstract class BaseEventListActivity<T extends Event> extends BaseActivity<T, ListView> implements OnItemClickListener,
+ SimpleGestureListener {
public static final String TAG = BaseEventListActivity.class.getName();
@@ -56,6 +53,7 @@ public abstract class BaseEventListActivity<T extends Event> extends
protected String highlight = null;
protected static final Date FUTURE = new Date(Long.MAX_VALUE);
+
// private static final Date BEGIN = new Date(0);
@@ -70,14 +68,17 @@ public abstract class BaseEventListActivity<T extends Event> extends
super.onCreate(savedInstanceState);
// Attach view
setContentView(getMainLayout());
- detector = new SimpleGestureFilter(this, this);
setTitle(getWindowTitle());
+ initFlipper();
+ detector = new SimpleGestureFilter(this, this);
+
initChannel();
}
private void initChannel() {
- currentChannel = getIntent()
- .getParcelableExtra(Intents.CURRENT_CHANNEL);
+ currentChannel = getApp().getCurrentChannel();
+ //currentChannel = getIntent()
+ // .getParcelableExtra(Intents.CURRENT_CHANNEL);
}
private boolean refreshViewOnResume = false;
@@ -153,10 +154,10 @@ public abstract class BaseEventListActivity<T extends Event> extends
Intent intent;
switch (item.getItemId()) {
- case R.id.epg_menu_search:
+// case R.id.epg_menu_search:
// startSearchManager();
- super.onSearchRequested();
- break;
+ // super.onSearchRequested();
+ // break;
case R.id.epg_menu_times:
intent = new Intent();
intent.setClass(this, EpgSearchTimesListActivity.class);
@@ -205,11 +206,6 @@ public abstract class BaseEventListActivity<T extends Event> extends
// find and remember item
final EventListItem item = adapter.getItem(position);
- if (item.isHeader()) {
- return;
- }
-
- // prepare timer if we want to program
prepareTimer(item);
// show details
@@ -236,51 +232,20 @@ public abstract class BaseEventListActivity<T extends Event> extends
// }
}
- public void svdrpEvent(final SvdrpEvent event, final T result) {
-
- switch (event) {
- case ABORTED:
- alert(R.string.aborted);
- break;
- case ERROR:
- alert(R.string.epg_client_errors);
- // say(R.string.epg_client_errors);
- // dismiss(progress);
- break;
- // case CONNECTING:
- // break;
- case CONNECTED:
- results.clear();
- break;
- case CONNECT_ERROR:
- say(R.string.progress_connect_error);
- switchNoConnection();
- break;
- case FINISHED_ABNORMALY:
- alert(R.string.progress_connect_finished_abnormal);
- switchNoConnection();
- break;
- case LOGIN_ERROR:
- switchNoConnection();
- break;
- case FINISHED_SUCCESS:
- if (finishedSuccess() == false) {
- say(R.string.epg_no_items);
- } else {
- restoreViewSelection();
- }
- break;
- case RESULT_RECEIVED:
- resultReceived(result);
- break;
- }
- }
protected void resultReceived(Event result) {
results.add(result);
}
@Override
+ protected void connected() {
+ if(flipper != null){
+ flipper.setDisplayedChild(0);
+ }
+ results.clear();
+ }
+
+ @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int index = savedInstanceState.getInt("INDEX");
@@ -305,10 +270,6 @@ public abstract class BaseEventListActivity<T extends Event> extends
dialog.dismiss();
}
- /**
- * @return false, if no results found
- */
- protected abstract boolean finishedSuccess();
public boolean onSearchRequested() {
InputMethodManager inputMgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java
index 55cc468..c9aec1d 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/BaseTimerEditActivity.java
@@ -1,14 +1,7 @@
package de.bjusystems.vdrmanager.gui;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-import android.app.AlertDialog;
-import android.app.DatePickerDialog;
-import android.app.DatePickerDialog.OnDateSetListener;
-import android.app.TimePickerDialog;
-import android.app.TimePickerDialog.OnTimeSetListener;
+import android.app.Activity;
+import android.content.Intent;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
@@ -16,77 +9,20 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
-import android.widget.Button;
-import android.widget.DatePicker;
-import android.widget.TextView;
-import android.widget.TimePicker;
import de.bjusystems.vdrmanager.R;
+import de.bjusystems.vdrmanager.app.Intents;
import de.bjusystems.vdrmanager.data.Event;
import de.bjusystems.vdrmanager.data.EventFormatter;
import de.bjusystems.vdrmanager.data.EventListItem;
import de.bjusystems.vdrmanager.data.Timer;
-import de.bjusystems.vdrmanager.tasks.CreateTimerTask;
import de.bjusystems.vdrmanager.tasks.DeleteTimerTask;
-import de.bjusystems.vdrmanager.tasks.ModifyTimerTask;
import de.bjusystems.vdrmanager.tasks.ToggleTimerTask;
-import de.bjusystems.vdrmanager.utils.svdrp.SetTimerClient.TimerOperation;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
public abstract class BaseTimerEditActivity<T extends Event> extends
- BaseEventListActivity<T> implements OnClickListener, OnDateSetListener,
- OnTimeSetListener // SvdrpAsyncListener<Timer>,
+ BaseEventListActivity<T> implements OnClickListener // SvdrpAsyncListener<Timer>,
{
- public class EditTimerViewHolder {
- View view;
- TextView title;
- TextView channel;
- TextView dateField;
- TextView startField;
- TextView endField;
- Button saveButton;
- Button modifyButton;
- }
-
- EditTimerViewHolder tView = null;
- AlertDialog tDialog = null;
-
- boolean editStart;
-
- // SetTimerClient setTimerClient;
-
- Timer timer;
-
- private void updateDisplay(TimerOperation op) {
- updateDisplay();
- switch (op) {
- case CREATE:
- tView.modifyButton.setVisibility(View.GONE);
- tView.saveButton.setVisibility(View.VISIBLE);
- tView.saveButton.setText(R.string.timer_details_create_title);
- break;
- case MODIFY:
- tView.saveButton.setVisibility(View.GONE);
- tView.modifyButton.setVisibility(View.VISIBLE);
- tView.saveButton.setText(R.string.timer_details_save_title);
- break;
- }
-
- }
-
- private void updateDisplay() {
- EventFormatter f = new EventFormatter(timer,true);
- tView.channel.setText(timer.getChannelNumber() + " "
- + timer.getChannelName());
- tView.title.setText(f.getTitle());
- tView.dateField.setText(f.getDate());
- tView.startField.setText(f.getTime());
- tView.endField.setText(f.getStop());
- }
-
- protected Timer getTimer(EventListItem item) {
- return item.getEpg().getTimer();
- }
-
/*
* (non-Javadoc)
*
@@ -94,63 +30,41 @@ public abstract class BaseTimerEditActivity<T extends Event> extends
*/
@Override
public boolean onContextItemSelected(final MenuItem item) {
-
+ //
final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
final EventListItem event = adapter.getItem(info.position);
-
- if (tView == null) {
- tView = new EditTimerViewHolder();
- View view = getLayoutInflater()
- .inflate(R.layout.timer_detail, null);
- tView.view = view;
- tView.title = (TextView) view.findViewById(R.id.timer_detail_title);
- tView.channel = (TextView) view
- .findViewById(R.id.timer_detail_channel);
- tView.dateField = (TextView) view
- .findViewById(R.id.timer_detail_day);
- tView.startField = (TextView) view
- .findViewById(R.id.timer_detail_start);
- tView.endField = (TextView) view
- .findViewById(R.id.timer_detail_end);
- tView.saveButton = (Button) view
- .findViewById(R.id.timer_details_save);
- tView.modifyButton = (Button) view
- .findViewById(R.id.timer_details_modify);
-
- view.findViewById(R.id.timer_details_cancel).setOnClickListener(
- this);
- tView.dateField.setOnClickListener(this);
- tView.startField.setOnClickListener(this);
- tView.endField.setOnClickListener(this);
- tView.saveButton.setOnClickListener(this);
- tView.modifyButton.setOnClickListener(this);
-
- tDialog = new AlertDialog.Builder(this)
-
- .setView(view).create();
- }
-
+ getApp().setCurrentEvent(event.getEvent());
switch (item.getItemId()) {
- case R.id.epg_item_menu_timer_add:
- timer = event.createTimer();
- updateDisplay(TimerOperation.CREATE);
- tDialog.show();
+ case R.id.epg_item_menu_timer_add: {
+ getApp().setCurrentTimer(event.createTimer());
+ // updateDisplay(TimerOperation.CREATE);
+ // tDialog.show();
+ final Intent intent = new Intent();
+ intent.setClass(this, TimerDetailsActivity.class);
+ intent.putExtra(Intents.TIMER_OP, Intents.ADD_TIMER);
+ startActivityForResult(intent,
+ TimerDetailsActivity.REQUEST_CODE_TIMER_EDIT);
+ }
break;
case R.id.epg_item_menu_timer_modify: {
- timer = getTimer(event);
- updateDisplay(TimerOperation.MODIFY);
- tDialog.show();
- // final Intent intent = new Intent();
- // intent.setClass(this, TimerDetailsActivity.class);
- // startActivityForResult(intent, REQUEST_CODE_TIMED_EDIT);
+ getApp().setCurrentTimer(getTimer(event));
+ // updateDisplay(TimerOperation.MODIFY);
+ // tDialog.show();
+ final Intent intent = new Intent();
+ intent.setClass(this, TimerDetailsActivity.class);
+ intent.putExtra(Intents.TIMER_OP, Intents.EDIT_TIMER);
+ startActivityForResult(intent,
+ TimerDetailsActivity.REQUEST_CODE_TIMER_EDIT);
break;
}
case R.id.epg_item_menu_timer_delete: {
+ backupViewSelection();
deleteTimer(getTimer(event));
break;
}
case R.id.epg_item_menu_timer_toggle: {
+ backupViewSelection();
toggleTimer(getTimer(event));
break;
}
@@ -200,155 +114,50 @@ public abstract class BaseTimerEditActivity<T extends Event> extends
}
- protected void toggleTimer(Timer timer) {
- final ToggleTimerTask task = new ToggleTimerTask(this, timer) {
- @Override
- public void finished() {
- refresh();
- }
- };
- task.start();
- }
-
- public void onClick(final View view) {
- switch (view.getId()) {
- case R.id.timer_detail_day: {
- final Calendar cal = new GregorianCalendar();
- cal.setTime(timer.getStart());
- final DatePickerDialog dialog = new DatePickerDialog(this, this,
- cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
- cal.get(Calendar.DAY_OF_MONTH));
- dialog.show();
- break;
- }
- case R.id.timer_detail_start: {
- final Calendar cal = new GregorianCalendar();
- cal.setTime(timer.getStart());
- editStart = true;
- final TimePickerDialog dialog = new TimePickerDialog(this, this,
- cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE),
- true);
- dialog.show();
- break;
- }
- case R.id.timer_detail_end: {
- final Calendar cal = new GregorianCalendar();
- cal.setTime(timer.getStop());
- editStart = false;
- final TimePickerDialog dialog = new TimePickerDialog(this, this,
- cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE),
- true);
- dialog.show();
- break;
- }
- case R.id.timer_details_cancel: {
- tDialog.dismiss();
- break;
- }
- case R.id.timer_details_modify:
- modifyTimer(timer);
- tDialog.dismiss();
- say(R.string.done);
- break;
-
- case R.id.timer_details_save: {
- createTimer(timer);
- tDialog.dismiss();
- say(R.string.done);
- break;
- }
-
- default:
- super.onClick(view);
- }
+ protected Timer getTimer(EventListItem item) {
+ return item.getEpg().getTimer();
}
- private void modifyTimer(Timer timer) {
- backupViewSelection();
- final ModifyTimerTask task = new ModifyTimerTask(this, timer) {
+ protected void toggleTimer(Timer timer) {
+ final ToggleTimerTask task = new ToggleTimerTask(this, timer) {
@Override
- public void finished() {
+ public void finished(SvdrpEvent event) {
refresh();
- //say(R.string.done);
+ restoreViewSelection();
}
};
task.start();
}
protected void deleteTimer(final Timer timer) {
- backupViewSelection();
+ //backupViewSelection();
final DeleteTimerTask task = new DeleteTimerTask(this, timer) {
@Override
- public void finished() {
+ public void finished(SvdrpEvent event) {
refresh();
restoreViewSelection();
- //say(R.string.done);
}
};
task.start();
}
-
- private void createTimer(Timer timer) {
+
+ protected void timerModified(){
backupViewSelection();
- final CreateTimerTask task = new CreateTimerTask(this, timer) {
- @Override
- public void finished() {
- refresh();
- //say(R.string.done);
- }
- };
- task.start();
- }
-
- public void onTimeSet(final TimePicker view, final int hourOfDay,
- final int minute) {
- if (editStart) {
- timer.setStart(calculateTime(timer.getStart(), hourOfDay, minute,
- null));
- } else {
- timer.setStop(calculateTime(timer.getStop(), hourOfDay, minute,
- timer.getStart()));
- }
- updateDisplay();
- }
-
- public void onDateSet(final DatePicker view, final int year,
- final int monthOfYear, final int dayOfMonth) {
- timer.setStart(calculateDate(timer.getStart(), year, monthOfYear,
- dayOfMonth));
- updateDisplay();
- }
-
- private Date calculateDate(final Date oldDate, final int year,
- final int monthOfYear, final int dayOfMonth) {
-
- final Calendar cal = new GregorianCalendar();
- cal.setTime(oldDate);
- cal.set(Calendar.YEAR, year);
- cal.set(Calendar.MONTH, monthOfYear);
- cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-
- return cal.getTime();
+ refresh();
}
+
- private Date calculateTime(final Date oldTime, final int hourOfDay,
- final int minute, final Date startTime) {
-
- // set hour and minute
- final Calendar cal = new GregorianCalendar();
- cal.setTime(oldTime);
- cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
- cal.set(Calendar.MINUTE, minute);
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
- // go to the next day if end time before start time
- if (startTime != null) {
- if (cal.getTime().before(startTime)) {
- cal.add(Calendar.DAY_OF_MONTH, 1);
- }
+ if (resultCode != Activity.RESULT_OK) {
+ return;
}
-
- return cal.getTime();
-
+ if(requestCode == TimerDetailsActivity.REQUEST_CODE_TIMER_EDIT){
+ timerModified();
+ }
+// refresh();
}
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java
index 1c2c4ff..510e1de 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/ChannelListActivity.java
@@ -8,7 +8,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
@@ -21,81 +20,53 @@ import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import de.bjusystems.vdrmanager.R;
-import de.bjusystems.vdrmanager.app.Intents;
import de.bjusystems.vdrmanager.data.Channel;
import de.bjusystems.vdrmanager.data.Preferences;
import de.bjusystems.vdrmanager.utils.svdrp.ChannelClient;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
/**
* This class is used for showing what's current running on all channels
*
* @author bju
*/
-public class ChannelListActivity extends BaseActivity<ExpandableListView> implements
- OnChildClickListener, OnGroupClickListener, SvdrpAsyncListener<Channel> {
+public class ChannelListActivity extends BaseActivity<Channel, ExpandableListView>
+ implements OnChildClickListener, OnGroupClickListener
+{
private static final String TAG = ChannelListActivity.class.getName();
+
ChannelClient channelClient;
-
+
ChannelAdapter adapter;
-
+
Preferences prefs;
-
+
public static final int MENU_GROUP = 0;
public static final int MENU_PROVIDER = 1;
public static final int MENU_NAME = 2;
private int groupBy = MENU_GROUP;
- final static ArrayList<String> ALL_CHANNELS_GROUP = new ArrayList<String>(
- 1);
-
- //ExpandableListView listView;
+ final static ArrayList<String> ALL_CHANNELS_GROUP = new ArrayList<String>(1);
- // @Override
- // public boolean onKeyLongPress(int keyCode, KeyEvent event) {
- // // TODO Auto-generated method stub
- // return super.onKeyLongPress(keyCode, event);
- // }
- //
- // @Override
- // public boolean onKeyDown(int keyCode, KeyEvent event) {
- // // TODO Auto-generated method stub
- // return super.onKeyDown(keyCode, event);
- // }
-
- // @Override
- // public boolean onKeyUp(int keyCode, KeyEvent event) {
- // // TODO Auto-generated method stub
- // return super.onKeyUp(keyCode, event);
- // }
- //
-
@Override
protected void onResume() {
super.onResume();
}
-
+
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
-
// Attach view
setContentView(getMainLayout());
setTitle(R.string.action_menu_channels);
+ initFlipper();
adapter = new ChannelAdapter(this);
- // Create adapter for ListView
-
listView = (ExpandableListView) findViewById(R.id.channel_list);
- // listView.setOnItemClickListener(this);
listView.setOnChildClickListener(this);
listView.setTextFilterEnabled(true);
listView.setFastScrollEnabled(true);
@@ -119,6 +90,11 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
private void startChannelQuery(boolean useCache) {
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
+
// get channel task
channelClient = new ChannelClient(useCache);
@@ -140,10 +116,10 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
private void fillAdapter() {
switch (groupBy) {
case MENU_GROUP:
- ArrayList<String> cgs = channelClient.getChannelGroups();
- adapter.fill(cgs, channelClient.getGroupChannels(), groupBy);
- if(cgs.size() == 1){
- listView.expandGroup(0);
+ ArrayList<String> cgs = ChannelClient.getChannelGroups();
+ adapter.fill(cgs, ChannelClient.getGroupChannels(), groupBy);
+ if (cgs.size() == 1) {
+ listView.expandGroup(0);
}
updateWindowTitle(
getString(R.string.action_menu_channels),
@@ -151,11 +127,10 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
getString(R.string.groupby_group)));
break;
case MENU_PROVIDER:
- ArrayList<String> gs = new ArrayList<String>(channelClient
+ ArrayList<String> gs = new ArrayList<String>(ChannelClient
.getProviderChannels().keySet());
- adapter.fill(gs, channelClient
- .getProviderChannels(), groupBy);
- if(gs.size() == 1){
+ adapter.fill(gs, ChannelClient.getProviderChannels(), groupBy);
+ if (gs.size() == 1) {
listView.expandGroup(0);
}
updateWindowTitle(
@@ -171,7 +146,7 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
HashMap<String, ArrayList<Channel>> channels = new HashMap<String, ArrayList<Channel>>(
1);
channels.put(getString(R.string.groupby_name_all_channels_group),
- channelClient.getChannels());
+ ChannelClient.getChannels());
adapter.fill(ALL_CHANNELS_GROUP, channels, groupBy);
listView.expandGroup(0);
@@ -181,54 +156,12 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
}
}
- public void svdrpEvent(final SvdrpEvent event, final Channel result) {
- switch (event) {
- case ABORTED:
- say(R.string.aborted);
- break;
- case ERROR:
- say(R.string.epg_client_errors);
- break;
- case CONNECTING:
- break;
- case CONNECT_ERROR:
- say(R.string.progress_connect_error);
- switchNoConnection();
- break;
- case FINISHED_ABNORMALY:
- say(R.string.progress_connect_finished_abnormal);
- switchNoConnection();
- break;
- case LOGIN_ERROR:
- switchNoConnection();
- break;
- case CACHE_HIT:
- say(R.string.progress_cache_hit);
- fillAdapter();
- restoreViewSelection();
- break;
- case FINISHED_SUCCESS:
- fillAdapter();
- restoreViewSelection();
- break;
-
- }
- }
-
- public void svdrpException(final SvdrpException exception) {
- progress.svdrpException(exception);
- Log.w(TAG, exception);
- alert(getString(R.string.vdr_error_text, exception.getMessage()));
- }
-
-
public boolean onPrepareOptionsMenu(Menu menu) {
-
+
return super.onPrepareOptionsMenu(menu);
}
-
@Override
public final boolean onCreateOptionsMenu(final Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -237,17 +170,6 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
item = menu.add(MENU_GROUP, MENU_GROUP, 0, R.string.menu_groupby);
item.setIcon(android.R.drawable.ic_menu_sort_alphabetically);
item.setAlphabeticShortcut('g');
-
- // item = menu.add(MENU_GROUP_PROVIDER, MENU_PROVIDER, 0,
- // R.string.groupby_provider);
- // item.setIcon(android.R.drawable.ic_menu_sort_alphabetically);
- // item.setAlphabeticShortcut('p');
-
- // item = menu.add(MENU_GROUP_NAME, MENU_NAME, 0,
- // R.string.groupby_name);
- // item.setIcon(android.R.drawable.ic_menu_sort_alphabetically);
- // item.setAlphabeticShortcut('n');
-
return true;
}
@@ -359,29 +281,6 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
}
- // @Override
- // public boolean onContextItemSelected(final MenuItem item) {
- //
- // final AdapterView.AdapterContextMenuInfo info =
- // (AdapterView.AdapterContextMenuInfo) item
- // .getMenuInfo();
- // // final Channel channel = adapter.getItem(info.position);
- // // if(channel.isGroupSeparator()){
- // //
- // // }
- //
- // switch (item.getItemId()) {
- // case R.id.channel_item_menu_epg:
- // //onItemClick(null, null, info.position, 0);
- // break;
- // case R.id.channel_item_menu_stream:
- // // show live stream
- // // Utils.stream(this, channel);
- // break;
- // }
- //
- // return true;
- // }
@Override
public boolean onSearchRequested() {
@@ -390,11 +289,6 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
return true;
}
- @Override
- public void onBackPressed() {
- super.onBackPressed();
- }
-
public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2,
long arg3) {
return true;
@@ -408,7 +302,8 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
// show details
final Intent intent = new Intent();
- intent.putExtra(Intents.CURRENT_CHANNEL, channel);
+ getApp().setCurrentChannel(channel);
+ //intent.putExtra(Intents.CURRENT_CHANNEL, channel);
intent.setClass(this, EventEpgListActivity.class);
startActivity(intent);
}
@@ -437,4 +332,21 @@ public class ChannelListActivity extends BaseActivity<ExpandableListView> implem
return R.layout.channel_list;
}
+ @Override
+ protected boolean finishedSuccess() {
+ fillAdapter();
+ restoreViewSelection();
+ return ChannelClient.getChannels().isEmpty() == false;
+ }
+
+ @Override
+ protected void resultReceived(Channel result) {
+
+ }
+
+ protected void cacheHit() {
+ fillAdapter();
+ restoreViewSelection();
+ }
+
} \ No newline at end of file
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java
index 40d54fe..2e3dd4e 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgDetailsActivity.java
@@ -4,18 +4,18 @@ import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
-import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
-import android.widget.AdapterView;
+import android.view.Window;
+import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -24,17 +24,19 @@ 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.Channel;
import de.bjusystems.vdrmanager.data.Epg;
import de.bjusystems.vdrmanager.data.Event;
+import de.bjusystems.vdrmanager.data.Event.TimerState;
import de.bjusystems.vdrmanager.data.EventFormatter;
-import de.bjusystems.vdrmanager.data.EventListItem;
import de.bjusystems.vdrmanager.data.Preferences;
+import de.bjusystems.vdrmanager.data.Recording;
import de.bjusystems.vdrmanager.data.Timer;
import de.bjusystems.vdrmanager.gui.SimpleGestureFilter.SimpleGestureListener;
-import de.bjusystems.vdrmanager.utils.date.DateFormatter;
-import de.bjusystems.vdrmanager.utils.svdrp.EpgClient;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
+import de.bjusystems.vdrmanager.tasks.DeleteTimerTask;
+import de.bjusystems.vdrmanager.tasks.ModifyTimerTask;
+import de.bjusystems.vdrmanager.tasks.ToggleTimerTask;
+import de.bjusystems.vdrmanager.tasks.VoidAsyncTask;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
/**
* This class is used for showing what's current running on all channels
@@ -56,12 +58,16 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
Event cEvent;
+ ImageView state;
+
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+
Intent i = getIntent();
-
+
highlight = i.getStringExtra(Intents.HIGHLIGHT);
// Attach view
@@ -69,23 +75,42 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
detector = new SimpleGestureFilter(this, this);
- // event_left = (ImageButton) findViewById(R.id.epg_event_left);
- // event_right = (ImageButton) findViewById(R.id.epg_event_right);
+ event_left = (ImageButton) findViewById(R.id.epg_event_left);
+ event_right = (ImageButton) findViewById(R.id.epg_event_right);
+ state = (ImageView) findViewById(R.id.epg_timer_state);
- // current event
- final VdrManagerApp app = (VdrManagerApp) getApplication();
- epgs = app.getCurrentEpgList();
- Event epg = app.getCurrentEvent();
+ new VoidAsyncTask() {
+
+ private Event epg;
- counter = 0;
- for (Event e : epgs) {
- if (epg == e) {
- break;
+ @Override
+ protected void onPreExecute() {
+ setProgressBarIndeterminateVisibility(true);
}
- counter++;
- }
- publishEPG(epg);
+ @Override
+ protected Void doInBackground(Void... params) {
+ // current event
+ final VdrManagerApp app = (VdrManagerApp) getApplication();
+ epgs = app.getCurrentEpgList();
+ epg = app.getCurrentEvent();
+
+ counter = 0;
+ for (Event e : epgs) {
+ if (epg == e) {
+ break;
+ }
+ counter++;
+ }
+ return (Void) null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ publishEPG(epg);
+ }
+ }.execute((Void) null);
+
}
private void setState(ImageView view, int res) {
@@ -93,7 +118,13 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
view.setImageResource(res);
}
- public void publishEPG(Event event) {
+ public void publishEPG(final Event event) {
+ setProgressBarIndeterminateVisibility(true);
+ publishEPGImpl(event);
+ setProgressBarIndeterminateVisibility(false);
+ }
+
+ public void publishEPGImpl(Event event) {
cEvent = event;
@@ -118,7 +149,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
.getChannelName());
// ((TextView) findViewById(R.id.epg_detail_date)).setText(formatter
// .getLongDate());
- ImageView state = (ImageView) findViewById(R.id.epg_timer_state);
+
switch (event.getTimerState()) {
case Active:
@@ -130,6 +161,8 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
case Recording:
setState(state, R.drawable.timer_recording);
break;
+ default:
+ setState(state, R.drawable.timer_none);
}
final TextView shortText = (TextView) findViewById(R.id.epg_detail_shorttext);
@@ -177,8 +210,8 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
b.setVisibility(View.VISIBLE);
setThisAsOnClickListener(b);
}
- // setThisAsOnClickListener(R.id.epg_event_left);
- // setThisAsOnClickListener(R.id.epg_event_right);
+ setThisAsOnClickListener(R.id.epg_event_left);
+ setThisAsOnClickListener(R.id.epg_event_right);
// set button text
if (event instanceof Timer) {
@@ -203,8 +236,6 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
protected void onResume() {
super.onResume();
// TODO Check here whether the config has changed for imdb
- // TODO check here if we are still live ?
-
}
@Override
@@ -212,14 +243,107 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
super.onPause();
}
+ class Wrapper {
+ public int id;
+ public String value;
+
+ public Wrapper(int id) {
+ this.id = id;
+ this.value = getString(id);
+ }
+
+ public String toString() {
+ return value;
+ }
+ }
+
+ public Timer getTimer(Event event) {
+ if (event instanceof Timer) {
+ return (Timer) event;
+ }
+ if (event instanceof Epg) {
+ return ((Epg) event).getTimer();
+ }
+ return null;
+ }
+
+ protected VdrManagerApp getApp() {
+ final VdrManagerApp app = (VdrManagerApp) getApplication();
+ return app;
+ }
+
public void onClick(final View v) {
switch (v.getId()) {
case R.id.epg_event_livetv:
Utils.stream(this, cEvent.getChannelNumber());
break;
case R.id.epg_event_create_timer:
- Toast.makeText(this, "Soon we get here the timer menu",
- Toast.LENGTH_SHORT).show();
+ final ArrayAdapter<Wrapper> ada = new ArrayAdapter<Wrapper>(this,
+ R.layout.timer_operation_list_item);
+ final Timer timer = getTimer(cEvent);
+ // remove unneeded menu items
+ if (timer != null) {
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_modify));
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_delete));
+ if (timer.isEnabled()) {
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_disable));
+ } else {
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_enable));
+ }
+ } else if (cEvent instanceof Recording) {
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_delete));
+
+ } else {
+ ada.add(new Wrapper(R.string.epg_item_menu_timer_add));
+ }
+ new AlertDialog.Builder(this)
+ .setAdapter(ada, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ final Timer t;
+ if (timer == null) {
+ t = cEvent.createTimer();
+ } else {
+ t = timer;
+ }
+ getApp().setCurrentTimer(t);
+ Wrapper w = ada.getItem(which);
+ switch (w.id) {
+ case R.string.epg_item_menu_timer_add: {
+ final Intent intent = new Intent();
+ intent.setClass(EpgDetailsActivity.this,
+ TimerDetailsActivity.class);
+ intent.putExtra(Intents.TIMER_OP,
+ Intents.ADD_TIMER);
+ startActivityForResult(
+ intent,
+ TimerDetailsActivity.REQUEST_CODE_TIMER_ADD);
+ break;
+ }
+ case R.string.epg_item_menu_timer_modify: {
+ final Intent intent = new Intent();
+ intent.setClass(EpgDetailsActivity.this,
+ TimerDetailsActivity.class);
+ intent.putExtra(Intents.TIMER_OP,
+ Intents.EDIT_TIMER);
+ startActivityForResult(
+ intent,
+ TimerDetailsActivity.REQUEST_CODE_TIMER_EDIT);
+ break;
+ }
+ case R.string.epg_item_menu_timer_delete: {
+ deleteTimer(timer);
+ break;
+ }
+ case R.string.epg_item_menu_timer_enable:
+ case R.string.epg_item_menu_timer_disable: {
+ toggleTimer(timer);
+ break;
+ }
+ }
+ }
+ }).create()//
+ .show();//
+
break;
case R.id.epg_event_imdb:
final TextView title = (TextView) findViewById(R.id.epg_detail_title);
@@ -230,12 +354,43 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
i.setData(Uri.parse(url));
startActivity(i);
break;
-// case R.id.epg_event_share:
-// shareEvent(cEvent);
-// break;
+ case R.id.epg_event_left:
+ prevEPG();
+ break;
+ case R.id.epg_event_right:
+ nextEPG();
+ break;
+ // case R.id.epg_event_share:
+ // shareEvent(cEvent);
+ // break;
}
}
+ protected void toggleTimer(final Timer timer) {
+ final ToggleTimerTask task = new ToggleTimerTask(this, timer) {
+ @Override
+ public void finished(SvdrpEvent event) {
+ if (event == SvdrpEvent.FINISHED_SUCCESS) {
+ TimerState state = timer.getTimerState();
+ int res = -1;
+ if (state == TimerState.Active) {
+ res = R.drawable.timer_inactive;
+ } else if (state == TimerState.Inactive) {
+ res = R.drawable.timer_active;
+ }
+ if (res != -1) {
+ setState(
+ (ImageView) findViewById(R.id.epg_timer_state),
+ res);
+ }
+ }
+ }
+ };
+ task.start();
+ }
+
+ // EditTimerViewHolder tView = null;
+
public void onSwipe(int direction) {
switch (direction) {
case SimpleGestureFilter.SWIPE_RIGHT:
@@ -250,66 +405,56 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
private void prevEPG() {
Event epg;
if (counter == 0) {
- epg = epgs.get(0);
- } else {
- epg = epgs.get(--counter);
+ say(R.string.navigae_at_the_start);
+ return;
}
-
+ epg = epgs.get(--counter);
publishEPG(epg);
-
}
List<Event> epgs = new ArrayList<Event>();
-
- int counter = 0;
-/*
- public void initEPGs() {
-
- if (epgs != null) {
- return;
- }
- epgs = new ArrayList<Event>();
-
- final VdrManagerApp app = (VdrManagerApp) getApplication();
- final Event event = app.getCurrentEvent();
- EpgClient c = new EpgClient(new Channel() {
- @Override
- public String getName() {
- return event.getChannelName();
- }
- @Override
- public int getNumber() {
- return Integer.valueOf(event.getChannelNumber());
- }
- });
-
- try {
- c.run();
- } catch (SvdrpException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- List<Epg> e = c.getResults();
- if (e == null || e.isEmpty()) {
- return;
- }
+ int counter = 0;
- epgs.addAll(e);
- Event fe = epgs.get(0);
- if (event.getStart().equals(fe.getStart()) == false) {
- epgs.set(0, event);
- ;
- }
- }
-*/
+ /*
+ * public void initEPGs() {
+ *
+ * if (epgs != null) { return; } epgs = new ArrayList<Event>();
+ *
+ * final VdrManagerApp app = (VdrManagerApp) getApplication(); final Event
+ * event = app.getCurrentEvent(); EpgClient c = new EpgClient(new Channel()
+ * {
+ *
+ * @Override public String getName() { return event.getChannelName(); }
+ *
+ * @Override public int getNumber() { return
+ * Integer.valueOf(event.getChannelNumber()); } });
+ *
+ * try { c.run(); } catch (SvdrpException e) { // TODO Auto-generated catch
+ * block e.printStackTrace(); }
+ *
+ * List<Epg> e = c.getResults(); if (e == null || e.isEmpty()) { return; }
+ *
+ * epgs.addAll(e); Event fe = epgs.get(0); if
+ * (event.getStart().equals(fe.getStart()) == false) { epgs.set(0, event); ;
+ * } }
+ */
private void nextEPG() {
if (counter < epgs.size() - 1) {
counter++;
+ Event epg = epgs.get(counter);
+ publishEPG(epg);
+ } else {
+ say(R.string.navigae_at_the_end);
}
- Event epg = epgs.get(counter);
- publishEPG(epg);
+ }
+
+ protected void say(int res) {
+ Toast.makeText(this, res, Toast.LENGTH_SHORT).show();
+ }
+
+ protected void say(String msg) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
public void onDoubleTap() {
@@ -337,7 +482,7 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
private void shareEvent(Event event) {
Utils.shareEvent(this, event);
}
-
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == MENU_SHARE) {
@@ -346,4 +491,40 @@ public class EpgDetailsActivity extends Activity implements OnClickListener,
}
return super.onOptionsItemSelected(item);
}
+
+ protected void modifyTimer(Timer timer) {
+ final ModifyTimerTask task = new ModifyTimerTask(this, timer) {
+ @Override
+ public void finished(SvdrpEvent event) {
+
+ }
+ };
+ task.start();
+ }
+
+ protected void deleteTimer(final Timer timer) {
+ final DeleteTimerTask task = new DeleteTimerTask(this, timer) {
+ @Override
+ public void finished(SvdrpEvent event) {
+ if (event == SvdrpEvent.FINISHED_SUCCESS) {
+ setState((ImageView) findViewById(R.id.epg_timer_state),
+ R.drawable.timer_none);
+ }
+ }
+ };
+ task.start();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if(resultCode != RESULT_OK){
+ return;
+ }
+ if(requestCode == TimerDetailsActivity.REQUEST_CODE_TIMER_ADD){
+ setState(state, Utils.isLive(getApp().getCurrentEvent()) ? R.drawable.timer_recording : R.drawable.timer_active);
+ } else if( requestCode == TimerDetailsActivity.REQUEST_CODE_TIMER_EDIT){
+ //??
+ }
+ }
+
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java
index 3ff0df2..b79e084 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EpgSearchListActivity.java
@@ -83,6 +83,11 @@ public class EpgSearchListActivity extends BaseTimerEditActivity<Epg> implements
private void startEpgQuery() {
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
+
EpgSearchParams sp = new EpgSearchParams();
sp.setTitle(highlight);
setTitle(getString(R.string.epg_by_search_param, highlight));
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java
index 257eea5..7841f20 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/EventEpgListActivity.java
@@ -2,9 +2,12 @@ package de.bjusystems.vdrmanager.gui;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
@@ -25,6 +28,9 @@ import de.bjusystems.vdrmanager.utils.svdrp.ChannelClient;
import de.bjusystems.vdrmanager.utils.svdrp.EpgClient;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpListener;
/**
* This class is used for showing what's current running on all channels
@@ -42,15 +48,15 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
Spinner channelSpinner;
+ View switcher;
+
ArrayAdapter<Channel> channelSpinnerAdapter;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- // get state
- final List<Channel> channels = ChannelClient.getChannels();
-
+ //
+ //
// create adapter for channel spinner
channelSpinnerAdapter = new ArrayAdapter<Channel>(this,
android.R.layout.simple_spinner_item);
@@ -58,18 +64,19 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
channelSpinner = (Spinner) findViewById(R.id.epg_list_channel_spinner);
channelSpinner.setAdapter(channelSpinnerAdapter);
+ switcher = findViewById(R.id.switch_epg_view);
+ switcher.setOnClickListener(this);
// add channel values
// boolean useChannelNumber = Preferences.get().isShowChannelNumbers();
- for (final Channel c : channels) {
- channelSpinnerAdapter.add(c);
- }
+
// show needed items
adapter = new ChannelEventAdapter(this);
- channelSpinner.setOnItemSelectedListener(this);
- channelSpinner.setSelection(currentChannel.getNumber() - 1);
+ // if (currentChannel != null) {
+
+ // }
// startChannelEpgQuery(channel);
// findViewById(R.id.timer_item_channel).setVisibility(View.GONE);
// break;
@@ -77,15 +84,28 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
// Create adapter for EPG list
listView = (ListView) findViewById(R.id.whatson_list);
listView.setAdapter(adapter);
- //listView.setFastScrollEnabled(true);
+ // listView.setFastScrollEnabled(true);
listView.setTextFilterEnabled(true);
registerForContextMenu(listView);
// register EPG item click
listView.setOnItemClickListener(this);
+ }
+ // private void ensureChannelList() {
+
+ @Override
+ protected void onPause() {
+ super.onPause();
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ backupViewSelection();
+ startEpgQuery();
+ channelSpinner.setOnItemSelectedListener(this);
+ }
public void onItemSelected(final AdapterView<?> parent, final View view,
final int position, final long id) {
@@ -93,12 +113,37 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
// get spinner value
final Channel channel = (Channel) channelSpinner.getSelectedItem();
currentChannel = channel;
+ getApp().setCurrentChannel(currentChannel);
// setAsCurrent(channel);
// update search
startEpgQuery();
}
+ // class LoadChannelsTask extends AsyncProgressTask<Channel> {
+ //
+ // boolean f;
+ // Channel c;
+ //
+ // public LoadChannelsTask(Channel channel, boolean force,
+ // Activity activity, ChannelClient client) {
+ // super(activity, client);
+ // this.f = force;
+ // this.c = channel;
+ // }
+ //
+ // @Override
+ // public void finished(SvdrpEvent event) {
+ // if (noConnection(event)) {
+ // return;
+ // }
+ // ArrayList<Channel> channels = ChannelClient.getChannels();
+ // for (final Channel c : channels) {
+ // channelSpinnerAdapter.add(c);
+ // }
+ // }
+ // }
+
public void onNothingSelected(final AdapterView<?> arg0) {
// startTimeEpgQuery(((EpgTimeSpinnerValue)timeSpinner.getAdapter().getItem(0)).getValue());
}
@@ -134,13 +179,49 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
startEpgQuery(false);
}
+ @Override
+ public void onClick(View view) {
+ if (view == switcher) {
+ final Intent intent = new Intent();
+ intent.setClass(this, TimeEpgListActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ } else {
+ super.onClick(view);
+ }
+ }
+
private void startEpgQuery(Channel channel, boolean force) {
+ try {
+ ChannelClient client = new ChannelClient();
+ client.addSvdrpListener(new SvdrpListener<Channel>() {
+ public void svdrpEvent(SvdrpEvent event, Channel result) {
+ if (event == SvdrpEvent.CACHE_HIT
+ || event == SvdrpEvent.FINISHED_SUCCESS) {
+ ArrayList<Channel> channels = ChannelClient
+ .getChannels();
+ for (final Channel c : channels) {
+ channelSpinnerAdapter.add(c);
+ }
+ }
+ noConnection(event);
+ }
+ });
+ client.run();
+ } catch (SvdrpException ex) {
+ svdrpException(ex);
+ }
+ startEpgQueryImpl(channel, force);
+ }
+
+ private void startEpgQueryImpl(Channel channel, boolean force) {
if (useCache(channel) && !force) {
Calendar cal = Calendar.getInstance();
int day = -1;
for (Event i : CACHE) {
- Epg e = (Epg)i;
+ Epg e = (Epg) i;
cal.setTime(e.getStart());
int eday = cal.get(Calendar.DAY_OF_YEAR);
if (eday != day) {
@@ -153,9 +234,15 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
return;
}
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
+
clearCache();
epgClient = new EpgClient(channel);
+ epgClient.setResultInfoEnabled(true);
// remove old listeners
// epgClient.clearSvdrpListener();
@@ -170,7 +257,6 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
task.addListener(progress);
task.addListener(this);
-
// start task
task.run();
}
@@ -189,7 +275,8 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
nextForceCache = FUTURE;
Calendar cal = Calendar.getInstance();
int day = -1;
- for (Epg e : epgClient.getResults()) {
+ sortItemsByTime(results);
+ for (Event e : results) {
CACHE.add(e);
cal.setTime(e.getStart());
int eday = cal.get(Calendar.DAY_OF_YEAR);
@@ -198,13 +285,13 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
adapter.add(new EventListItem(new DateFormatter(cal)
.getDailyHeader()));
}
- adapter.add(new EventListItem(e));
+ adapter.add(new EventListItem((Epg) e));
if (e.getStop().before(nextForceCache) && e.getStop().after(now)) {
nextForceCache = e.getStop();
}
}
cachedChannel = currentChannel;
- //listView.setSelectionAfterHeaderView();
+ // listView.setSelectionAfterHeaderView();
dismiss(progress);
return CACHE.isEmpty() == false;
}
@@ -227,7 +314,7 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
@Override
protected void retry() {
- startEpgQuery(currentChannel, true);
+ refresh();
}
@Override
@@ -265,4 +352,21 @@ public class EventEpgListActivity extends BaseTimerEditActivity<Epg> implements
break;
}
}
+
+ protected void sortItemsByChannel(List<Event> result) {
+ final Comparator<Event> comparator = new Comparator<Event>() {
+
+ public int compare(final Event item1, final Event item2) {
+ return Integer.valueOf(item1.getChannelNumber()).compareTo(
+ Integer.valueOf(item2.getChannelNumber()));
+ }
+ };
+ Collections.sort(result, comparator);
+ }
+
+ @Override
+ protected void timerModified() {
+ cachedChannel = null;
+ }
+
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java
index b13d3ae..c38a20d 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/RecordingListActivity.java
@@ -21,6 +21,7 @@ import de.bjusystems.vdrmanager.utils.svdrp.RecordingClient;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
+import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
/**
* This class is used for showing what's current running on all channels
@@ -94,7 +95,7 @@ public class RecordingListActivity extends BaseEventListActivity<Recording>
case R.id.recording_item_menu_delete: {
DeleteRecordingTask drt = new DeleteRecordingTask(this, rec) {
@Override
- public void finished() {
+ public void finished(SvdrpEvent event) {
dismiss(progress);
refresh();
}
@@ -114,6 +115,12 @@ public class RecordingListActivity extends BaseEventListActivity<Recording>
}
private void startRecordingQuery() {
+
+
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
// get timer client
recordingClient = new RecordingClient();
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/SvdrpProgressDialog.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/SvdrpProgressDialog.java
index f3468f8..4e34590 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/SvdrpProgressDialog.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/SvdrpProgressDialog.java
@@ -2,6 +2,7 @@ package de.bjusystems.vdrmanager.gui;
import android.app.Activity;
import android.app.ProgressDialog;
+import android.content.DialogInterface;
import de.bjusystems.vdrmanager.R;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
@@ -9,7 +10,7 @@ import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
public class SvdrpProgressDialog<T> extends ProgressDialog implements
- SvdrpAsyncListener<T> {
+ SvdrpAsyncListener<T>, DialogInterface.OnCancelListener {
ProgressDialog progress;
Activity activity;
SvdrpClient<? extends Object> client;
@@ -20,6 +21,8 @@ public class SvdrpProgressDialog<T> extends ProgressDialog implements
this.activity = activity;
this.client = client;
progress = new ProgressDialog(activity);
+ progress.setOnCancelListener(this);
+ progress.setCancelable(false);
}
public void svdrpEvent(final SvdrpEvent event) {
@@ -69,8 +72,19 @@ public class SvdrpProgressDialog<T> extends ProgressDialog implements
progress.setMessage(activity.getString(resId, args));
}
}
-
+
+ private void abort() {
+ if (client.isConnected()) {
+ client.abort();
+ dismiss();
+ }
+ }
+
public void dismiss() {
progress.dismiss();
}
+
+ public void onCancel(DialogInterface dialog) {
+ abort();
+ }
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java
index dfa7e6c..6a12b0d 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimeEpgListActivity.java
@@ -1,10 +1,15 @@
package de.bjusystems.vdrmanager.gui;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+import android.app.TimePickerDialog;
+import android.app.TimePickerDialog.OnTimeSetListener;
+import android.content.Intent;
import android.os.Bundle;
-import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
@@ -12,8 +17,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
-import android.widget.TextView;
-import android.widget.Toast;
+import android.widget.TimePicker;
import de.bjusystems.vdrmanager.R;
import de.bjusystems.vdrmanager.app.VdrManagerApp;
import de.bjusystems.vdrmanager.data.Epg;
@@ -21,6 +25,7 @@ import de.bjusystems.vdrmanager.data.EpgSearchTimeValue;
import de.bjusystems.vdrmanager.data.EpgSearchTimeValues;
import de.bjusystems.vdrmanager.data.Event;
import de.bjusystems.vdrmanager.data.EventListItem;
+import de.bjusystems.vdrmanager.data.Preferences;
import de.bjusystems.vdrmanager.utils.date.DateFormatter;
import de.bjusystems.vdrmanager.utils.svdrp.EpgClient;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask;
@@ -32,9 +37,13 @@ import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
* @author bju
*/
public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
- OnItemClickListener, OnItemSelectedListener {
+ OnItemClickListener, OnItemSelectedListener, OnTimeSetListener {
- Spinner timeSpinner;
+ protected Spinner timeSpinner;
+
+ protected View switcher;
+
+ protected View clock;
ArrayAdapter<EpgSearchTimeValue> timeSpinnerAdapter;
@@ -44,6 +53,8 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
private static String cachedTime = null;
+ int selectedIndex = 0;
+
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -56,13 +67,18 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
timeSpinner = (Spinner) findViewById(R.id.epg_list_time_spinner);
timeSpinner.setAdapter(timeSpinnerAdapter);
- fillTimeSpinnerValues();
+ switcher = findViewById(R.id.switch_epg_view);
+ switcher.setOnClickListener(this);
+
+ clock = findViewById(R.id.epg_list_times);
+ clock.setOnClickListener(this);
// update gui
adapter = new TimeEventAdapter(this);
// searchLabel.setVisibility(View.GONE);
timeSpinner.setOnItemSelectedListener(this);
- timeSpinner.setSelection(0);
+
+ fillTimeSpinnerValues();
// Create adapter for EPG list
listView = (ListView) findViewById(R.id.whatson_list);
@@ -77,8 +93,6 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
}
-
-
private void fillTimeSpinnerValues() {
final EpgSearchTimeValues values = new EpgSearchTimeValues(this);
timeSpinnerAdapter.clear();
@@ -87,6 +101,10 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
}
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
@Override
protected void onPause() {
@@ -94,6 +112,49 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
}
+ @Override
+ public void onClick(View view) {
+ if (view == switcher) {
+ final Intent intent = new Intent();
+ intent.setClass(this, EventEpgListActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ } else if (view == clock) {
+ Intent intent = new Intent();
+ intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ intent.setClass(this, EpgSearchTimesListActivity.class);
+ startActivity(intent);
+ } else {
+ super.onClick(view);
+ }
+ }
+
+ public void onTimeSet(final TimePicker view, final int hourOfDay,
+ final int minute) {
+ String tm = String.format("%02d:%02d", hourOfDay, minute);
+
+ // timeSpinnerAdapter.add(time);
+ final EpgSearchTimeValues values = new EpgSearchTimeValues(this);
+ List<EpgSearchTimeValue> vs = values.getValues();
+ final EpgSearchTimeValue time = new EpgSearchTimeValue(3, tm);
+ vs.add(vs.size() - 1, time);
+ timeSpinnerAdapter.clear();
+ int select = -1;
+ int counter = 0;
+ for (final EpgSearchTimeValue value : vs) {
+ timeSpinnerAdapter.add(value);
+ if (select == -1 && value.getText().equals(tm)) {
+ select = counter;
+ }
+ counter++;
+ }
+ timeSpinner.setSelection(select);
+ setTitle(getString(R.string.epg_by_time_args, tm));
+ // update search
+ startEpgQuery(time.getValue(), false);
+ }
public void onItemSelected(final AdapterView<?> parent, final View view,
final int position, final long id) {
@@ -101,9 +162,19 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
// get spinner value
final EpgSearchTimeValue selection = (EpgSearchTimeValue) timeSpinner
.getSelectedItem();
- // update search
- startEpgQuery(selection.getValue(), false);
+ if (selection.getValue().equals("adhoc")) {
+ final Calendar cal = Calendar.getInstance(TimeZone.getDefault());
+ // show time selection
+ final TimePickerDialog dialog = new TimePickerDialog(this, this,
+ cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE),
+ Preferences.get().isUse24hFormat());
+ dialog.show();
+ } else {
+ // update search
+ setTitle(getString(R.string.epg_by_time_args, selection.getText()));
+ startEpgQuery(selection.getValue(), false);
+ }
}
public void onNothingSelected(final AdapterView<?> arg0) {
@@ -151,6 +222,11 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
return;
}
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
+
clearCache();
epgClient = new EpgClient(time);
@@ -236,8 +312,7 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
private void nextEvent() {
int pos = timeSpinner.getSelectedItemPosition();
if (pos + 1 >= timeSpinnerAdapter.getCount()) {
- Toast.makeText(this, R.string.navigae_at_the_end,
- Toast.LENGTH_SHORT).show();
+ say(R.string.navigae_at_the_end);
return;
}
timeSpinner.setSelection(pos + 1, true);
@@ -246,8 +321,7 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
private void prevEvent() {
int pos = timeSpinner.getSelectedItemPosition();
if (pos <= 0) {
- Toast.makeText(this, R.string.navigae_at_the_start,
- Toast.LENGTH_SHORT).show();
+ say(R.string.navigae_at_the_start);
return;
}
timeSpinner.setSelection(pos - 1, true);
@@ -264,4 +338,5 @@ public class TimeEpgListActivity extends BaseTimerEditActivity<Epg> implements
break;
}
}
+
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java
index 5a79c30..696da9e 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerDetailsActivity.java
@@ -16,71 +16,123 @@ import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
+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.EventFormatter;
import de.bjusystems.vdrmanager.data.Timer;
-import de.bjusystems.vdrmanager.utils.date.DateFormatter;
-import de.bjusystems.vdrmanager.utils.svdrp.SetTimerClient;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncListener;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpAsyncTask;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpClient;
+import de.bjusystems.vdrmanager.tasks.CreateTimerTask;
+import de.bjusystems.vdrmanager.tasks.ModifyTimerTask;
+import de.bjusystems.vdrmanager.utils.svdrp.SetTimerClient.TimerOperation;
import de.bjusystems.vdrmanager.utils.svdrp.SvdrpEvent;
-import de.bjusystems.vdrmanager.utils.svdrp.SvdrpException;
-/**
- * This class is used for showing what's current running on all channels
- *
- * @author bju
- */
public class TimerDetailsActivity extends Activity implements OnClickListener,
- OnDateSetListener, OnTimeSetListener, SvdrpAsyncListener<Timer> {
+ OnDateSetListener, OnTimeSetListener {
- Preferences prefs;
- TextView dateField;
- TextView startField;
- TextView endField;
- boolean editStart;
- Timer timer;
- SvdrpProgressDialog progress;
- SetTimerClient setTimerClient;
+ public static final int REQUEST_CODE_TIMER_EDIT = 84;
+
+ public static final int REQUEST_CODE_TIMER_ADD = 85;
@Override
- protected void onCreate(final Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- // Attach view
- setContentView(R.layout.timer_detail);
+ View view = getLayoutInflater().inflate(R.layout.timer_detail, null);
+ tView = new EditTimerViewHolder();
+ tView.view = view;
+ tView.title = (TextView) view.findViewById(R.id.timer_detail_title);
+ tView.channel = (TextView) view.findViewById(R.id.timer_detail_channel);
+ tView.dateField = (TextView) view.findViewById(R.id.timer_detail_day);
+ tView.startField = (TextView) view
+ .findViewById(R.id.timer_detail_start);
+ tView.endField = (TextView) view.findViewById(R.id.timer_detail_end);
+ tView.saveButton = (Button) view.findViewById(R.id.timer_details_save);
+ tView.modifyButton = (Button) view
+ .findViewById(R.id.timer_details_modify);
+
+ view.findViewById(R.id.timer_details_cancel).setOnClickListener(this);
+ tView.dateField.setOnClickListener(this);
+ tView.startField.setOnClickListener(this);
+ tView.endField.setOnClickListener(this);
+ tView.saveButton.setOnClickListener(this);
+ tView.modifyButton.setOnClickListener(this);
+ setContentView(view);
+ timer = getApp().getCurrentTimer();
+ int op = getIntent().getExtras().getInt(Intents.TIMER_OP);
+ switch (op) {
+ case Intents.ADD_TIMER:
+ setTitle(R.string.timer_details_add_title);
+ add();
+ break;
+ case Intents.EDIT_TIMER:
+ setTitle(R.string.timer_details_modify_title);
+ modify();
+ break;
- // timer
- timer = ((VdrManagerApp) getApplication()).getCurrentTimer();
+ default:
+ finish();
+ }
- // update display
- updateDisplay();
+ }
- // register buttons
- final Button saveButton = (Button) findViewById(R.id.timer_details_save);
- saveButton.setOnClickListener(this);
- if (timer.getNumber() > 0) {
- saveButton.setText(R.string.timer_details_save_title);
- } else {
- saveButton.setText(R.string.timer_details_create_title);
+ public class EditTimerViewHolder {
+ View view;
+ TextView title;
+ TextView channel;
+ TextView dateField;
+ TextView startField;
+ TextView endField;
+ Button saveButton;
+ Button modifyButton;
+ }
+
+ EditTimerViewHolder tView = null;
+
+ boolean editStart;
+
+ // SetTimerClient setTimerClient;
+
+ Timer timer;
+
+ private void updateDisplay(TimerOperation op) {
+ updateDisplay();
+ switch (op) {
+ case CREATE:
+ tView.modifyButton.setVisibility(View.GONE);
+ tView.saveButton.setVisibility(View.VISIBLE);
+ tView.saveButton.setText(R.string.timer_details_create_title);
+ break;
+ case MODIFY:
+ tView.saveButton.setVisibility(View.GONE);
+ tView.modifyButton.setVisibility(View.VISIBLE);
+ tView.saveButton.setText(R.string.timer_details_save_title);
+ break;
}
- // register text fields for editing
- dateField.setOnClickListener(this);
- startField.setOnClickListener(this);
- endField.setOnClickListener(this);
}
- @Override
- protected void onResume() {
- super.onResume();
+ private void updateDisplay() {
+ EventFormatter f = new EventFormatter(timer, true);
+ tView.channel.setText(timer.getChannelNumber() + " "
+ + timer.getChannelName());
+ tView.title.setText(f.getTitle());
+ tView.dateField.setText(f.getDate());
+ tView.startField.setText(f.getTime());
+ tView.endField.setText(f.getStop());
}
- @Override
- protected void onPause() {
- super.onPause();
+ protected VdrManagerApp getApp() {
+ final VdrManagerApp app = (VdrManagerApp) getApplication();
+ return app;
+ }
+
+ public void add() {
+ updateDisplay(TimerOperation.CREATE);
+ }
+
+ public void modify() {
+ updateDisplay(TimerOperation.MODIFY);
}
public void onClick(final View view) {
@@ -114,30 +166,29 @@ public class TimerDetailsActivity extends Activity implements OnClickListener,
dialog.show();
break;
}
- case R.id.timer_details_save: {
- // collect values
- timer.setTitle(((TextView) findViewById(R.id.timer_detail_title))
- .getText().toString());
-
- // create client for saving the timer
- //setTimerClient = new SetTimerClient(timer, false);
-
- // create backgound task
- final SvdrpAsyncTask<Timer, SvdrpClient<Timer>> task = new SvdrpAsyncTask<Timer, SvdrpClient<Timer>>(
- setTimerClient);
-
- // create progress
- progress = new SvdrpProgressDialog(this, setTimerClient);
-
- // attach listener
- task.addListener(this);
+ case R.id.timer_details_cancel: {
+ finishActivity(REQUEST_CODE_TIMER_EDIT);
+ finish();
+ break;
+ }
+ case R.id.timer_details_modify:
+ modifyTimer(timer);
+ say(R.string.done);
+ break;
- // start task
- task.run();
+ case R.id.timer_details_save: {
+ createTimer(timer);
+ say(R.string.done);
+ break;
}
+
}
}
+ protected void say(int res) {
+ Toast.makeText(this, res, Toast.LENGTH_SHORT).show();
+ }
+
public void onTimeSet(final TimePicker view, final int hourOfDay,
final int minute) {
if (editStart) {
@@ -189,54 +240,29 @@ public class TimerDetailsActivity extends Activity implements OnClickListener,
}
- private void updateDisplay() {
-
- ((TextView) findViewById(R.id.timer_detail_title)).setText(timer
- .getTitle());
- ((TextView) findViewById(R.id.timer_detail_channel)).setText(timer
- .getChannelName());
- dateField = (TextView) findViewById(R.id.timer_detail_day);
- final DateFormatter dateFormatter = new DateFormatter(timer.getStart());
- dateField.setText(dateFormatter.getDateString());
- startField = (TextView) findViewById(R.id.timer_detail_start);
- startField.setText(dateFormatter.getTimeString());
- endField = (TextView) findViewById(R.id.timer_detail_end);
- endField.setText(new DateFormatter(timer.getStop()).getTimeString());
-
- final Button button = (Button) findViewById(R.id.timer_details_save);
- if (timer.getNumber() > 0) {
- // existing timer
- button.setText(R.string.timer_details_save_title);
- } else {
- // new timer
- button.setText(R.string.timer_details_create_title);
- }
+ private void createTimer(Timer timer) {
+ final CreateTimerTask task = new CreateTimerTask(this, timer) {
+ @Override
+ public void finished(SvdrpEvent event) {
+ done();
+ }
+ };
+ task.start();
}
- public void svdrpEvent(final SvdrpEvent event, final Timer result) {
-
- progress.svdrpEvent(event);
+ public void done() {
+ setResult(RESULT_OK);
+ finish();
+ }
- switch (event) {
- case FINISHED_ABNORMALY:
- finish();
- if(progress != null) {
- progress.dismiss();
- progress = null;
+ private void modifyTimer(Timer timer) {
+ final ModifyTimerTask task = new ModifyTimerTask(this, timer) {
+ @Override
+ public void finished(SvdrpEvent event) {
+ done();
}
- break;
- case FINISHED_SUCCESS:
- if(progress != null){
- progress.dismiss();
- progress = null;
- }
- setResult(Activity.RESULT_OK);
- finish();
- break;
- }
+ };
+ task.start();
}
- public void svdrpException(final SvdrpException exception) {
- progress.svdrpException(exception);
- }
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java
index 7c3c77b..8d8d3a3 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/TimerListActivity.java
@@ -32,7 +32,7 @@ public class TimerListActivity extends BaseTimerEditActivity<Timer> implements
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Attach view
- setContentView(getMainLayout());
+// setContentView(getMainLayout());
// create an adapter
adapter = new TimeEventAdapter(this);
@@ -57,15 +57,16 @@ public class TimerListActivity extends BaseTimerEditActivity<Timer> implements
@Override
protected void onPause() {
super.onPause();
- if (timerClient != null) {
- timerClient.abort();
- }
- dismiss(progress);
}
private void startTimerQuery() {
+ if (checkInternetConnection() == false) {
+ switchNoConnection();
+ return;
+ }
+
// get timer client
timerClient = new TimerClient();
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java
index 983fb28..d3fbcb6 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/gui/VdrManagerActivity.java
@@ -15,7 +15,6 @@ import de.bjusystems.vdrmanager.utils.wakeup.AsyncWakeupTask;
public class VdrManagerActivity extends Activity implements OnClickListener {
-
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -23,15 +22,15 @@ public class VdrManagerActivity extends Activity implements OnClickListener {
// attach view
setContentView(R.layout.vdrmanager);
- //Preferences.loadPreferences(this);
+ // Preferences.loadPreferences(this);
findViewById(R.id.action_menu_channels).setOnClickListener(this);
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);
-
- if(Preferences.get().isWakeupEnabled() == false){
+
+ if (Preferences.get().isWakeupEnabled() == false) {
findViewById(R.id.action_menu_wakeup).setVisibility(View.GONE);
} else {
findViewById(R.id.action_menu_wakeup).setOnClickListener(this);
@@ -49,21 +48,26 @@ public class VdrManagerActivity extends Activity implements OnClickListener {
inflater.inflate(R.menu.main_menu, menu);
return true;
}
-
+
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
- case R.id.main_menu_preferences:
+ case R.id.main_menu_preferences: {
// remember activity for finishing
final VdrManagerApp app = (VdrManagerApp) getApplication();
app.clearActivitiesToFinish();
app.addActivityToFinish(this);
- final Intent intent = new Intent();
+ Intent intent = new Intent();
intent.setClass(this, PreferencesActivity.class);
startActivity(intent);
break;
+ }
+ case R.id.main_menu_info: {
+ About.show(this);
+ break;
+ }
case R.id.main_menu_exit:
finish();
break;
@@ -73,11 +77,11 @@ public class VdrManagerActivity extends Activity implements OnClickListener {
@Override
public void onBackPressed() {
- if(Preferences.get().isQuiteOnBackButton()){
+ if (Preferences.get().isQuiteOnBackButton()) {
super.onBackPressed();
}
}
-
+
public void startActivity(Class<?> clazz) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(this, clazz);
@@ -110,12 +114,12 @@ public class VdrManagerActivity extends Activity implements OnClickListener {
}
}
-
+
@Override
public boolean onSearchRequested() {
- Bundle appData = new Bundle();
- //appData.putBoolean(SearchableActivity.JARGON, true);
- startSearch(null, false, appData, false);
- return true;
+ Bundle appData = new Bundle();
+ // appData.putBoolean(SearchableActivity.JARGON, true);
+ startSearch(null, false, appData, false);
+ return true;
}
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/ChannelClient.java b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/ChannelClient.java
index 5ec1a6a..41ca798 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/ChannelClient.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/ChannelClient.java
@@ -3,7 +3,6 @@ package de.bjusystems.vdrmanager.utils.svdrp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.TreeMap;
import de.bjusystems.vdrmanager.R;
@@ -27,18 +26,18 @@ public class ChannelClient extends SvdrpClient<Channel> implements
private static ArrayList<Channel> channels = new ArrayList<Channel>();
- private static boolean inited = false;
+ private static boolean inited = false;
-
- public ChannelClient(boolean useCache){
+ public ChannelClient(boolean useCache) {
super();
- if(useCache == false){
+ if (useCache == false) {
clearCache();
}
+ setResultInfoEnabled(true);
addSvdrpListener(this);
}
-
- private void clearCache(){
+
+ private void clearCache() {
channelGroups.clear();
groupChannels.clear();
providerChannels.clear();
@@ -46,9 +45,8 @@ public class ChannelClient extends SvdrpClient<Channel> implements
inited = false;
}
-
public static ArrayList<String> getChannelGroups() {
- return channelGroups;
+ return channelGroups;
}
public static HashMap<String, ArrayList<Channel>> getGroupChannels() {
@@ -103,37 +101,33 @@ public class ChannelClient extends SvdrpClient<Channel> implements
return R.string.progress_channels_loading;
}
- private synchronized void initChannels(List<Channel> results) {
- if(inited){
- return;
- }
- ArrayList<Channel> currentChannels = null;
- for (Channel c : results) {
- if (c.isGroupSeparator()) {
- channelGroups.add(c.getName());
- currentChannels = new ArrayList<Channel>();
- groupChannels.put(c.getName(), currentChannels);
- } else {
- channels.add(c);
- currentChannels.add(c);
- String provider = c.getProvider();
- ArrayList<Channel> channels = providerChannels.get(provider);
- if (channels == null) {
- channels = new ArrayList<Channel>();
- providerChannels.put(provider, channels);
- }
- channels.add(c);
+ ArrayList<Channel> currentChannels = null;
+
+ private void received(Channel c) {
+ if (c.isGroupSeparator()) {
+ channelGroups.add(c.getName());
+ currentChannels = new ArrayList<Channel>();
+ groupChannels.put(c.getName(), currentChannels);
+ } else {
+ channels.add(c);
+ currentChannels.add(c);
+ String provider = c.getProvider();
+ ArrayList<Channel> channels = providerChannels.get(provider);
+ if (channels == null) {
+ channels = new ArrayList<Channel>();
+ providerChannels.put(provider, channels);
}
+ channels.add(c);
}
- inited = true;
}
- public void svdrpEvent(SvdrpEvent event, Channel result) {
- if(event != SvdrpEvent.FINISHED_SUCCESS){
+ public void svdrpEvent(SvdrpEvent event, Channel c) {
+ if (event == SvdrpEvent.RESULT_RECEIVED) {
+ received(c);
return;
}
- initChannels(getResults());
- getResults().clear();
+ if(event == SvdrpEvent.FINISHED_SUCCESS){
+ inited = true;
+ }
}
-
-} \ No newline at end of file
+}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/EpgClient.java b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/EpgClient.java
index df30055..3d1e73f 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/EpgClient.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/EpgClient.java
@@ -1,5 +1,6 @@
package de.bjusystems.vdrmanager.utils.svdrp;
+import android.text.TextUtils;
import de.bjusystems.vdrmanager.R;
import de.bjusystems.vdrmanager.data.Channel;
import de.bjusystems.vdrmanager.data.Epg;
@@ -67,7 +68,7 @@ public class EpgClient extends SvdrpClient<Epg> {
} else if (channel != null) {
runCommand(String.format("cevents %s", channel.getNumber()));
} else if (search != null) {
- runCommand(String.format("search %s %s", Preferences.getPreferences().getChannels(), search.toCommandLine()));
+ runCommand(String.format("search %s:%s", Preferences.get().getChannels(), search.toCommandLine()));
}
}
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/SvdrpClient.java b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/SvdrpClient.java
index 35016b1..6849e90 100644
--- a/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/SvdrpClient.java
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/utils/svdrp/SvdrpClient.java
@@ -41,6 +41,13 @@ public abstract class SvdrpClient<Result> {
private boolean resultInfoEnabled = false;
private Timer watchDog = new Timer();
+
+ public boolean isConnected(){
+ if(socket == null){
+ return false;
+ }
+ return socket.isConnected();
+ }
/**
* Parse received answer line
@@ -97,6 +104,23 @@ public abstract class SvdrpClient<Result> {
*/
public void abort() {
abort = true;
+ try {
+ if (socket != null) {
+ if (socket.isConnected()) {
+ socket.shutdownInput();
+ socket.shutdownOutput();
+ socket.close();
+ } else {
+ if(st != null){
+ st.interrupt();
+ }
+ socket.close();
+ }
+ }
+ } catch (Exception ex) {
+ Log.w(TAG, ex);
+ }
+
}
/**
@@ -108,6 +132,8 @@ public abstract class SvdrpClient<Result> {
return results;
}
+ private Thread st;
+
/**
* Connect to SVDRP
*
@@ -122,15 +148,45 @@ public abstract class SvdrpClient<Result> {
*/
protected boolean connect() throws IOException {
- Preferences prefs = Preferences.get();
+ final Preferences prefs = Preferences.get();
try {
// connect
- //TODO prefs
informListener(SvdrpEvent.CONNECTING, null);
socket = new Socket();
- socket.connect(new InetSocketAddress(prefs.getSvdrpHost(), prefs.getSvdrpPort()), 10 * 1000);//8 secs for connect
- socket.setSoTimeout(15 * 1000);//15 sec for each read
- final long delay = C.ONE_MINUTE_IN_MILLIS * 3; //in 3 minutes we abort the communication
+ //st = new Thread(){
+// @Override
+// public void run() {
+// try{
+ socket.connect(
+ new InetSocketAddress(prefs.getSvdrpHost(), prefs
+ .getSvdrpPort()),
+ prefs.getConnectionTimeout() * 1000);// 8 secs for connect
+// }catch(IOException iox){
+// throw new RuntimeException();
+// }
+// }
+//
+// };
+
+// st.start();
+//
+// try {
+// st.join();
+// } catch (InterruptedException e) {
+// Thread.currentThread().interrupt();
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+//
+ socket.setSoTimeout(prefs.getReadTimeout() * 1000);// 15 sec for
+ // each read
+ final long delay = C.ONE_MINUTE_IN_MILLIS * prefs.getTimeout() * 60; // in
+ // 3
+ // minutes
+ // we
+ // abort
+ // the
+ // communication
watchDog.schedule(new TimerTask() {
@Override
public void run() {
@@ -139,7 +195,7 @@ public abstract class SvdrpClient<Result> {
}
}, delay);
informListener(SvdrpEvent.CONNECTED, null);
- } catch (final IOException e) {
+ } catch (final Exception e) {
Log.w(TAG, e);
informListener(SvdrpEvent.CONNECT_ERROR, null);
return false;
@@ -159,7 +215,6 @@ public abstract class SvdrpClient<Result> {
} else {
informListener(SvdrpEvent.LOGGED_IN, null);
}
-
return true;
}