diff --git a/res/layout/channel_list_widget.xml b/res/layout/channel_list_widget.xml
index 09c94af..74a79ca 100644
--- a/res/layout/channel_list_widget.xml
+++ b/res/layout/channel_list_widget.xml
@@ -11,12 +11,25 @@
android:layout_marginRight="5sp"
>
-
+
+
+
+
+
+
+
- TVHGuide
- Hilfe
- Einstellungen
- Aktualisieren
- Tags
- Aufnahmen
+ "TVHGuide"
+ "Hilfe"
+ "Einstellungen"
+ "Aktualisieren"
+ "Tags"
+ "Aufnahmen"
+ "Aufnahme"
+ "Aufnahme abbrechen"
+ "Aufnahme entfernen"
+ "Hostname"
+ "Hostname eingeben"
+ "Port"
+ "Server-Port eingeben"
+ "Benutzername"
+ "Benutzername eingeben"
+ "Passwort"
+ "Passwort eingeben"
+ "Benutzerschnittstelle"
+ "Kanal-Logos"
+ "Kanal-Logos anzeigen? (verbraucht mehr Speicher)"
+ "Helles Thema"
+ "Helle Darstellung benutzen?"
+ "Auflösung"
+ "Maximale Auflösung für den Transcoder"
+ "Audio-Codec"
+ "Audio-Codec des Transcoders verwenden"
+ "Video-Codec"
+ "Video-Codec des Transcoder verwenden"
+ "Untertitel Codec"
+ "Untertitel Codec des Transcoder verwenden"
+ "Medien-Container"
+ "Bevorzugter Medien-Container"
+ "Wiedergabe"
+ "HTTP-Port"
+ "HTTP-Port des Servers"
+ "Stream transkodieren"
+ "Transkodiere Stream während live Wiedergabe"
+ "Bevorzuge externen Videoplayer"
+ "Soll ein externer Video-Player benutz werden? (z.B. BSPlayer)"
+ "Zugriff verweigert"
+ "Ungültige Antwort vom Server"
+ "Keine Verbindung zum Server möglich"
+ "Verbindung zum Server verloren"
+ "Ladevorgang läuft…"
+ "Bitte warten Sie ein paar Sekunden…"
+ "Alle Kanäle"
+ "Mehr"
+ "Staffel"
+ "Folge"
+ "Teil"
+ "Ausstrahlung"
+ "Bewertung"
+ "Genre"
+ "Teil"
- Hostname
- Hostnamen des Servers eingeben
+
+ - "Film / Drama"
+ - "Nachrichten / Aktuelles"
+ - "Show / Spielshow"
+ - "Sport"
+ - "Kinder / Jugend"
+ - "Musik / Ballett / Tanz"
+ - "Kunst / Kultur"
+ - "Gesellschaft / Politik / Wirtschaft"
+ - "Bildung / Wissenschaft"
+ - "Freizeit / Hobbys"
+ - "Verschiedenes"
+
+
+ - "Film / Drama"
+ - "Krimi / Thriller"
+ - "Abenteuer / Western / Krieg"
+ - "Science Fiction / Fantasy / Horror"
+ - "Komödie"
+ - "Seife Oper / Melodrama / Folklore"
+ - "Romanze"
+ - "Historisches"
+ - "Erwachsenen Film / Drama"
+
+
+ - "Nachrichten / Aktuelles"
+ - "Nachrichten / Wetterbericht"
+ - "Magazin"
+ - "Dokumentation"
+ - "Diskussion / Interview / Debatte"
+
+
+ - "Show / Spielshow"
+ - "Spiel Show / Quiz / Contest"
+ - "Varietee"
+ - "Unterhaltung"
+
+
+ - "Sport"
+ - "Sondersendung"
+ - "Magazin"
+ - "Fußball"
+ - "Tennis / Squash"
+ - "Mannschaftssport"
+ - "Leichtathletik"
+ - "Motorsport"
+ - "Wassersport"
+ - "Wintersport"
+ - "Reitsport"
+ - "Kampfsport"
+
+
+ - "Kinder / Jugend"
+ - "Vorschul"
+ - "Unterhaltung (6 bis 14-Jährigen)"
+ - "Unterhaltung (10 bis 16-Jährigen)"
+ - "Informativ / Bildung / Schulen"
+ - "Cartoons / Puppets"
+
+
+ - "Musik / Ballett / Tanz"
+ - "Rock und Pop"
+ - "Klassik"
+ - "Folk / Traditionelle Musik"
+ - "Jazz"
+ - "Musical / Oper"
+ - "Ballet"
+
+
+ - "Kunst / Kultur"
+ - "Darstellenden Kunst"
+ - "Ästhetisches"
+ - "Religion"
+ - "Pop Kultur / Traditionelle Kunst"
+ - "Literatur"
+ - "Film / Kino"
+ - "Experimenteller Film / Video"
+ - "Rundfunk / Presse"
+ - "Neue Medien"
+ - "Magazin"
+ - "Mode"
+
+
+ - "Gesellschaft / Politik / Wirtschaft"
+ - "Magazin / Report / Dokumentation"
+ - "Wirtschaft / Soziales Engagement"
+ - "Bemerkenswerte Menschen"
+
+
+ - "Bildung / Wissenschaft"
+ - "Natur / Tiere / Umwelt"
+ - "Technik / Naturwissenschaften"
+ - "Medizin / Physiologie / Psychologie"
+ - "Ausland / Expeditionen"
+ - "Soziales / Spirituelles"
+ - "Weiterbildung"
+ - "Sprachen"
+
+
+ - "Freizeit / Hobbys"
+ - "Tourismus / Reisen"
+ - "Handwerk"
+ - "Motorsport"
+ - "Fitness und Gesundheit"
+ - "Kochen"
+ - "Werbung / Shopping"
+ - "Garten"
+
+
+ - "Verschiedenes"
+ - "Schwarz / Weiß"
+ - "Unveröffentlicht"
+ - "Live-Sendung"
+
- Port
- Port der Servers eingeben
+ "Geplant"
+ "Aufzeichnung"
+ "Abgeschlossen"
+ "Entgangen"
+ "Ungültig"
+ "Abspielen"
+ "Keine Übertragung"
+ "EPG durchsuchen"
+ "heute"
- Benutzername
- Benutzernamen eingeben
-
- Passwort
- Passwort eingeben
-
- Kanal-Logos
- Kanal-Logos anzeigen?
-
- Zugriff verweigert
- Ungültige Antwort des Servers
- Konnte nicht mit dem Server verbinden
- Verbindung zum Server verloren
-
- Lade...
- Bitte warten Sie einen Moment...
-
- Alle Kanäle
-
- Geplant
- Aufnahme
- Fertig
- Verpasst
- Ungültig
\ No newline at end of file
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 58b2319..db52f94 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -87,4 +87,133 @@
Sök i programtablån
idag
+
+
+
+ - Movie/Drama
+ - News/Current affairs
+ - Show/Game show
+ - Sports
+ - Children\'s / Youth
+ - Music/Ballet/Dance
+ - Arts/Culture
+ - Social/Political issues/Economics
+ - Education/Science/Factual
+ - Leisure hobbies
+ - Misc
+
+
+
+ - Movie/Drama
+ - Detective/Thriller
+ - Adventure/Western/War
+ - Science Fiction/Fantasy/Horror
+ - Comedy
+ - Soap/Melodrama/Folkloric
+ - Romance
+ - Serious/ClassicalReligion/Historical
+ - Adult Movie/Drama
+
+
+
+ - News/Current affairs
+ - News/Weather Report
+ - Magazine
+ - Documentary
+ - Discussion/Interview/Debate
+
+
+
+ - Show/Game show
+ - Game show/Quiz/Contest
+ - Variety
+ - Talk
+
+
+
+ - Sports
+ - Special Event
+ - Magazine
+ - Football/Soccer
+ - Tennis/Squash
+ - Team sports
+ - Athletics
+ - Motor Sport
+ - Water Sport
+ - Winter Sports
+ - Equestrian
+ - Martial sports
+
+
+
+ - Children\'s / Youth
+ - Pre-school
+ - Entertainment (6 to 14 year-olds)
+ - Entertainment (10 to 16 year-olds)
+ - Informational/Educational/Schools
+ - Cartoons/Puppets
+
+
+
+ - Music/Ballet/Dance
+ - Rock/Pop
+ - Serious music/Classical Music
+ - Folk/Traditional music
+ - Jazz
+ - Musical/Opera
+ - Ballet
+
+
+
+ - Arts/Culture
+ - Performing Arts
+ - Fine Arts
+ - Religion
+ - Popular Culture/Tradital Arts
+ - Literature
+ - Film/Cinema
+ - Experimental Film/Video
+ - Broadcasting/Press
+ - New Media
+ - Magazine
+ - Fashion
+
+
+
+ - Social/Political issues/Economics
+ - Magazine/Report/Domentary
+ - Economics/Social Advisory
+ - Remarkable People
+
+
+
+
+ - Education/Science/Factual
+ - Nature/Animals/Environment
+ - Technology/Natural sciences
+ - Medicine/Physiology/Psychology
+ - Foreign Countries/Expeditions
+ - Social/Spiritual Sciences
+ - Further Education
+ - Languages
+
+
+
+ - Leisure hobbies
+ - Tourism/Travel
+ - Handicraft
+ - Motoring
+ - Fitness and Health
+ - Cooking
+ - Advertisement/Shopping
+ - Gardening
+
+
+
+ - Misc
+ - Black and White
+ - Unpublished
+ - Live Broadcast
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ec275ac..e6070b1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -27,7 +27,7 @@
User interface
Channel icons
- Show channel icons?
+ Show channel icons? (consumes more memory)
Light theme
Use a light theme
@@ -45,7 +45,7 @@
Subtitle codec to use with the transcoder
Media container
- Prefered media container
+ Preferred media container
Playback
diff --git a/src/org/tvheadend/tvhguide/ChannelListViewWrapper.java b/src/org/tvheadend/tvhguide/ChannelListViewWrapper.java
index 37c68d6..fa2a86e 100644
--- a/src/org/tvheadend/tvhguide/ChannelListViewWrapper.java
+++ b/src/org/tvheadend/tvhguide/ChannelListViewWrapper.java
@@ -18,8 +18,13 @@
*/
package org.tvheadend.tvhguide;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.tvheadend.tvhguide.model.Channel;
+import org.tvheadend.tvhguide.model.Programme;
+
import android.content.SharedPreferences;
-import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ClipDrawable;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
@@ -27,11 +32,6 @@
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import java.util.Date;
-import java.util.Iterator;
-import org.tvheadend.tvhguide.R;
-import org.tvheadend.tvhguide.model.Channel;
-import org.tvheadend.tvhguide.model.Programme;
/**
*
@@ -45,6 +45,7 @@ public class ChannelListViewWrapper {
private TextView nextTitle;
private TextView nextTime;
private ImageView icon;
+ private ImageView iconRec;
private ImageView nowProgressImage;
private ClipDrawable nowProgress;
@@ -60,6 +61,7 @@ public ChannelListViewWrapper(View base) {
nextTitle = (TextView) base.findViewById(R.id.ch_next_title);
nextTime = (TextView) base.findViewById(R.id.ch_next_time);
icon = (ImageView) base.findViewById(R.id.ch_icon);
+ iconRec = (ImageView) base.findViewById(R.id.ch_icon_rec);
}
public void repaint(Channel channel) {
@@ -74,15 +76,24 @@ public void repaint(Channel channel) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(icon.getContext());
Boolean showIcons = prefs.getBoolean("showIconPref", false);
- icon.setVisibility(showIcons ? ImageView.VISIBLE : ImageView.GONE);
- icon.setBackgroundDrawable(new BitmapDrawable(channel.iconBitmap));
+ if(showIcons){
+ icon.setVisibility(ImageView.VISIBLE);
+ iconRec.setVisibility(ImageView.VISIBLE);
+ icon.setImageBitmap(channel.iconBitmap);
+ }
+ else{
+ icon.setVisibility(ImageView.GONE);
+ iconRec.setVisibility(ImageView.GONE);
+ icon.setImageDrawable(null);
+ }
- if (channel.isRecording()) {
- icon.setImageResource(R.drawable.ic_rec_small);
- } else {
- icon.setImageDrawable(null);
+ if (channel.isRecording() && showIcons) {
+ iconRec.setImageResource(R.drawable.ic_rec_small);
+ } else {
+ iconRec.setImageDrawable(null);
}
icon.invalidate();
+ iconRec.invalidate();
Iterator it = channel.epg.iterator();
if (!channel.isTransmitting && it.hasNext()) {
diff --git a/src/org/tvheadend/tvhguide/htsp/HTSService.java b/src/org/tvheadend/tvhguide/htsp/HTSService.java
index fcf6bcd..bf1bbcf 100644
--- a/src/org/tvheadend/tvhguide/htsp/HTSService.java
+++ b/src/org/tvheadend/tvhguide/htsp/HTSService.java
@@ -18,15 +18,6 @@
*/
package org.tvheadend.tvhguide.htsp;
-import android.app.Service;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Binder;
-import android.os.IBinder;
-import android.util.Log;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
@@ -43,6 +34,7 @@
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+
import org.tvheadend.tvhguide.R;
import org.tvheadend.tvhguide.TVHGuideApplication;
import org.tvheadend.tvhguide.model.Channel;
@@ -55,6 +47,18 @@
import org.tvheadend.tvhguide.model.Stream;
import org.tvheadend.tvhguide.model.Subscription;
+import android.app.Service;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Binder;
+import android.os.IBinder;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
/**
*
* @author john-tornblom
@@ -575,46 +579,60 @@ public void cacheImage(String url, File f) throws MalformedURLException, IOExcep
OutputStream os = new FileOutputStream(f);
- float scale = getResources().getDisplayMetrics().scaledDensity;
+ float scale = getResources().getDisplayMetrics().density;
int width = (int) (64 * scale);
int height = (int) (64 * scale);
BitmapFactory.Options o = new BitmapFactory.Options();
- o.outWidth = width;
- o.outHeight = height;
+ o.inJustDecodeBounds = true;
+ BitmapFactory.decodeStream(is, null, o);
+ is.close();
+ if (url.startsWith("http")) {
+ is = new BufferedInputStream(new URL(url).openStream());
+ }
+ else if (connection.getProtocolVersion() > 9) {
+ is = new HTSFileInputStream(connection, url);
+ }
+
+ int ratio = Math.max(o.outWidth / width, o.outHeight / height);
+ int sampleSize = Integer.highestOneBit((int) Math.floor(ratio));
+
+ o = new BitmapFactory.Options();
+ o.inSampleSize = sampleSize;
Bitmap bitmap = BitmapFactory.decodeStream(is, null, o);
if(bitmap != null) {
- Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
- bitmap.recycle();
-
- resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
- resizedBitmap.recycle();
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
}
os.close();
- is.close();
+ is.close();
}
private Bitmap getIcon(final String url) throws MalformedURLException, IOException {
if (url == null || url.length() == 0) {
return null;
}
-
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ Boolean showIcons = prefs.getBoolean("showIconPref", false);
+ if(!showIcons){
+ return null; // This will drastically reduce memory consumption if many channels with icons are available!
+ }
File dir = getCacheDir();
File f = new File(dir, hashString(url) + ".png");
if (!f.exists()) {
cacheImage(url, f);
}
-
- return BitmapFactory.decodeFile(f.toString());
+
+ return BitmapFactory.decodeFile(f.toString());
}
private void getChannelIcon(final Channel ch) {
execService.execute(new Runnable() {
- public void run() {
+ @Override
+ public void run() {
try {
ch.iconBitmap = getIcon(ch.icon);