aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/metadata.themoviedb.org/addon.xml2
-rw-r--r--addons/metadata.themoviedb.org/changelog.txt9
-rw-r--r--addons/metadata.themoviedb.org/tmdb.xml6
-rw-r--r--addons/service.xbmc.versioncheck/addon.xml18
-rw-r--r--addons/service.xbmc.versioncheck/changelog.txt4
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Asturian/strings.po21
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Croatian/strings.po32
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Czech/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Danish/strings.po80
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/French (Canada)/strings.po14
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/French/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Galician/strings.po14
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Hungarian/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Italian/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Norwegian/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Polish/strings.po36
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Portuguese/strings.po36
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Romanian/strings.po44
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Russian/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Slovak/strings.po20
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Slovenian/strings.po80
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Spanish/strings.po28
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Tamil (India)/strings.po21
-rw-r--r--addons/service.xbmc.versioncheck/resources/language/Turkish/strings.po80
-rw-r--r--addons/service.xbmc.versioncheck/resources/versions.txt42
-rw-r--r--addons/service.xbmc.versioncheck/service.py5
-rw-r--r--configure.ac1
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in14
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java.in16
-rw-r--r--xbmc/Application.cpp18
-rw-r--r--xbmc/Util.cpp4
-rw-r--r--xbmc/android/activity/XBMCApp.cpp110
-rw-r--r--xbmc/android/activity/XBMCApp.h18
-rw-r--r--xbmc/android/activity/android_main.cpp19
-rw-r--r--xbmc/android/jni/Activity.cpp21
-rw-r--r--xbmc/android/jni/Activity.h6
-rw-r--r--xbmc/android/jni/AudioManager.cpp60
-rw-r--r--xbmc/android/jni/AudioManager.h25
-rw-r--r--xbmc/android/jni/Display.cpp40
-rw-r--r--xbmc/android/jni/Display.h32
-rw-r--r--xbmc/android/jni/Makefile.in2
-rw-r--r--xbmc/android/jni/View.cpp10
-rw-r--r--xbmc/android/jni/View.h3
-rw-r--r--xbmc/android/jni/Window.cpp18
-rw-r--r--xbmc/android/jni/Window.h5
-rw-r--r--xbmc/android/jni/WindowManager.cpp39
-rw-r--r--xbmc/android/jni/WindowManager.h32
-rw-r--r--xbmc/android/jni/jutils/jutils-details.hpp31
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.cpp16
-rw-r--r--xbmc/cores/dvdplayer/IDVDPlayer.h2
-rw-r--r--xbmc/utils/XMLUtils.cpp10
-rw-r--r--xbmc/utils/XMLUtils.h19
-rw-r--r--xbmc/video/VideoInfoTag.cpp162
-rw-r--r--xbmc/windowing/egl/EGLNativeTypeAndroid.cpp67
54 files changed, 1434 insertions, 126 deletions
diff --git a/addons/metadata.themoviedb.org/addon.xml b/addons/metadata.themoviedb.org/addon.xml
index a37ac88ece..846272214f 100644
--- a/addons/metadata.themoviedb.org/addon.xml
+++ b/addons/metadata.themoviedb.org/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="metadata.themoviedb.org"
name="The Movie Database"
- version="3.8.0"
+ version="3.8.3"
provider-name="XBMC Foundation">
<requires>
<import addon="xbmc.metadata" version="2.1.0"/>
diff --git a/addons/metadata.themoviedb.org/changelog.txt b/addons/metadata.themoviedb.org/changelog.txt
index 2c81297503..6c32b33b32 100644
--- a/addons/metadata.themoviedb.org/changelog.txt
+++ b/addons/metadata.themoviedb.org/changelog.txt
@@ -1,3 +1,12 @@
+[B]3.8.3[/B]
+- fixed: further fixes to the broken search results due to API changes
+
+[B]3.8.2[/B]
+- fixed: further fixes to the broken search results due to API changes
+
+[B]3.8.1[/B]
+- fixed: broken search results due to API changes
+
[B]3.8.0[/B]
- added extra languages for selection
- changed language to a selection list
diff --git a/addons/metadata.themoviedb.org/tmdb.xml b/addons/metadata.themoviedb.org/tmdb.xml
index 15f9f15038..73c1fb2ff1 100644
--- a/addons/metadata.themoviedb.org/tmdb.xml
+++ b/addons/metadata.themoviedb.org/tmdb.xml
@@ -22,13 +22,13 @@
<GetSearchResults dest="8">
<RegExp input="$$3" output="&lt;results&gt;\1&lt;/results&gt;" dest="8">
<RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\4&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.tmdb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3">
- <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:&quot;([0-9]+)-.*?&quot;title&quot;:&quot;([^&quot;]*)</expression>
+ <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_language&quot;:&quot;[^&quot;]*&quot;,&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;overview&quot;:.*?,&quot;release_date&quot;:&quot;([0-9]+)-.*?&quot;title&quot;:&quot;([^&quot;]*)</expression>
</RegExp>
<RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;year&gt;\3&lt;/year&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.tmdb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3+">
- <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:&quot;([0-9]+)-</expression>
+ <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_language&quot;:&quot;[^&quot;]*&quot;,&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;overview&quot;:.*?,&quot;release_date&quot;:&quot;([0-9]+)-</expression>
</RegExp>
<RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\2&lt;/title&gt;&lt;id&gt;\1&lt;/id&gt;&lt;url cache=&quot;tmdb-$INFO[language]-\1.json&quot;&gt;http://api.tmdb.org/3/movie/\1?api_key=57983e31fb435df4df77afb854740ea9&amp;amp;language=$INFO[language]&lt;/url&gt;&lt;/entity&gt;" dest="3+">
- <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;release_date&quot;:null</expression>
+ <expression repeat="yes">&quot;id&quot;:([0-9]*),&quot;original_language&quot;:&quot;[^&quot;]*&quot;,&quot;original_title&quot;:&quot;([^&quot;]*)&quot;,&quot;overview&quot;:.*?,&quot;release_date&quot;:null</expression>
</RegExp>
<expression noclean="1" />
</RegExp>
diff --git a/addons/service.xbmc.versioncheck/addon.xml b/addons/service.xbmc.versioncheck/addon.xml
index 8f63c24e06..7dcfb04021 100644
--- a/addons/service.xbmc.versioncheck/addon.xml
+++ b/addons/service.xbmc.versioncheck/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="service.xbmc.versioncheck"
name="Version Check"
- version="0.3.2"
+ version="0.3.3"
provider-name="XBMC Foundation">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
@@ -12,6 +12,7 @@
<summary lang="bg">Проверява дали ползвате най-новата версия на Kodi.</summary>
<summary lang="ca">Kodi Version Check comprova si està utilitzant la última versió publicada.</summary>
<summary lang="cs">Kontrola verze Kodi, zkontroluje, zda používáte nejnovější vydanou verzi.</summary>
+ <summary lang="da">Kodi undersøger om du benytter den nyeste version.</summary>
<summary lang="de">Kodi Versionsprüfung prüft, ob die neuste Version von Kodi installiert ist.</summary>
<summary lang="el">Ο Έλεγχος Έκδοσης Kodi εξετάζει αν έχετε την πιο πρόσφατη έκδοση του προγράμματος.</summary>
<summary lang="en">Kodi Version Check checks if you are running latest released version.</summary>
@@ -32,17 +33,21 @@
<summary lang="lt">Kodi Version Check patikrina ar naudojate naujausią versiją.</summary>
<summary lang="nl">Kodi versie-check controleert of je de laatst beschikbare versie hebt.</summary>
<summary lang="no">Kodi Versjonsettersyn sjekker om du kjører den sist utgitte versjonen.</summary>
- <summary lang="pl">Wtyczka sprawdza czy używasz najnowszą wersję Kodi.</summary>
+ <summary lang="pl">Dodatek Version Check sprawdza czy używasz najnowszej wersji Kodi.</summary>
<summary lang="pt">O Kodi Version Check verifica se a sua versão de lançamento do Kodi está actualizada.</summary>
<summary lang="pt_BR">Kodi Version Check verifica se você está executando a versão mais recente.</summary>
+ <summary lang="ro">Verificare versiune Kodi verifică dacă folosiți ultima versiune lansată.</summary>
<summary lang="ru">Kodi Version Check проверяет если вы используете последнюю версию</summary>
<summary lang="sk">Kodi Kontrola verzií overuje, či používate najnovšiu vydanú verziu.</summary>
+ <summary lang="sl">Preverjanje različice Kodi preveri, če imate nameščeno nazadnje izdano različico.</summary>
<summary lang="sv">Kodi Version Check kontrollerar om du använder den senaste versionen.</summary>
+ <summary lang="tr">Kodi Versiyon Kontrol yayınlanmış son versiyonu kullanıp kullanmadığınızı kontrol eder.</summary>
<summary lang="zh">Kodi 版本检查检查你使用的是否为最新发布的版本。</summary>
<description lang="be">Kodi Version Check only supports a number of platforms/distros as releases may differ between them. For more information visit the kodi.tv website.</description>
<description lang="bg">Kodi Version Check поддържа няколко платформи/дистрибуции. За повече информация посетете страницата www.kodi.tv</description>
<description lang="ca">Kodi Version Check només és compatible amb una sèrie de plataformes / distribucions ja que les ultimes versions poden ser diferents entre elles. Per obtenir més informació, visiteu el lloc web kodi.tv.</description>
<description lang="cs">Kontrola verze Kodi podporuje pouze několik platforem/distribucí a verze mezi nimi se můžou lišit. Pro více informací navštivte webové stránky kodi.tv.</description>
+ <description lang="da">Kodi kan kun undersøge for opdateringer for visse platforme/udgaver, da der kan være forskel. For mere information, besøg kodi.tv.</description>
<description lang="de">Kodi Versionsprüfung unterstützt nur ein paar Plattformen/Distributionen, da sich die jeweiligen Veröffentlichungen unterscheiden können. Für weitere Informationen besuchen Sie die kodi.tv-Webseite.</description>
<description lang="el">Ο Έλεγχος Έκδοσης Kodi υποστηρίζει μόνο ορισμένα λειτουργικά συστήματα/διανομές, καθώς οι εκδόσεις διαφέρουν για το καθένα. Για περισσότερες πληροφορίες επισκεφθείτε το kodi.tv</description>
<description lang="en">Kodi Version Check only supports a number of platforms/distros as releases may differ between them. For more information visit the kodi.tv website.</description>
@@ -61,16 +66,19 @@
<description lang="lt">Kodi Version Check palaiko tik kelias platformas/distribucijas, nes leidimai tarp jų gali skirtis. Norėdami gauti daugiau informacijos, apsilankykite Kodi.tv puslapyje.</description>
<description lang="nl">Kodi versie check ondersteunt alleen een aantal platforms/distro`s omdat uitgaven verschillen tussen hen. Voor meer informatie bezoek de kodi.tv website.</description>
<description lang="no">Kodi Versjonsettersyn støtter kun noen plattformer/distribusjoner fordi utgivelser kan være forskjellige mellom dem. Besøk kodi.tv for mer informasjon.</description>
- <description lang="pl">Kodi Version Check, jako że wydania mogą się różnić, wspiera tylko część platform/dystrybucji. Więcej informacji na stronie kodi.tv.</description>
+ <description lang="pl">Dodatek Version Check wspiera tylko część platform i dystrybucji. Więcej informacji na stronie kodi.tv</description>
<description lang="pt">O Kodi Version Check suporta apenas algumas plataformas/distribuições, porque os lançamentos podem não ser sempre idênticos. Para mais informação, visite o site kodi.tv.</description>
<description lang="pt_BR">Verificador de versões do Kodi somente suporta algumas plataformas/distros em que os lançamentos podem diferenciar entre si. Para maiores informações visite o website kodi.tv.</description>
<description lang="ru">Проверка новых версий Kodi поддерживается только на ряде платформ/дистрибутивов и они могут различаться между собой. Для получения доп. информации посетите сайт kodi.tv</description>
+ <description lang="sl">Preverjanje različice Kodi podpira le nekatere platforme/distribucije, saj se izdaje med njimi lahko zelo razlikujejo. Za več informacij obiščite spletišče kodi.tv</description>
<description lang="sv">Kodi Version Check stöder endeast ett antal plattformar/distributioner eftersom utgivningar kan skilja mellan dessa. För mer information besök kodi.tv webplatsen.</description>
+ <description lang="tr">Kodi Versiyon Kontrol sürümler arasında değişiklik olduğu için sadece birkaç platform/dağıtım destekler. Daha fazla bilgi için kodi.tv websitesini ziyaret edin</description>
<description lang="zh">Kodi 版本检查只支持部分平台/发行版,它们之间的版本可能会有所不同。欲了解更多信息,请访问 kodi.tv 网站。</description>
<disclaimer lang="be">Feel free to use this script. For information visit kodi.tv</disclaimer>
<disclaimer lang="bg">Ползвайте скрипта свободно. За повече информация посетете www.kodi.tv</disclaimer>
<disclaimer lang="ca">Sigues lliure d'utilitzar aquest script. Per més informació visita kodi.tv</disclaimer>
<disclaimer lang="cs">Neváhejte použít tento skript. Pro více informací navštivte kodi.tv</disclaimer>
+ <disclaimer lang="da">Du er velkommen til at bruge dette script. For information, besøg kodi.tv</disclaimer>
<disclaimer lang="de">Zögern Sie nicht, dieses Skript zu verwenden. Für Informationen besuchen Sie kodi.tv</disclaimer>
<disclaimer lang="el">Χρησιμοποιήστε αυτό το script ελεύθερα. Για πληροφορίες επισκεφθείτε το kodi.tv</disclaimer>
<disclaimer lang="en">Feel free to use this script. For information visit kodi.tv</disclaimer>
@@ -90,11 +98,13 @@
<disclaimer lang="lt">Galite laisvai naudoti šį scenarijų. Apsilankykite kodi.tv, norėdami gauti daugiau informacijos.</disclaimer>
<disclaimer lang="nl">Gebruik dit script vrijblijvend. Voor meer informatie bezoek kodi.tv</disclaimer>
<disclaimer lang="no">Du har fri tillatelse til å benytte dette skriptet. Besøk kodi.tv for informasjon</disclaimer>
- <disclaimer lang="pl">Zapraszamy do używania skryptu. Więcej informacji na stronie kodi.tv.</disclaimer>
+ <disclaimer lang="pl">Zapraszamy do używania tego dodatku. Więcej informacji na stronie kodi.tv</disclaimer>
<disclaimer lang="pt">Esteja à vontade para usar este script. Para mais informação, visite kodi.tv.</disclaimer>
<disclaimer lang="pt_BR">Sinta-se livre para usar este script. Para maiores informações visite kodi.tv</disclaimer>
<disclaimer lang="ru">Используйте этот скрипт на свое усмотрение. Для информации посетите kodi.tv</disclaimer>
+ <disclaimer lang="sl">Izvolite uporabiti ta skript. Za dodatne informacije obiščite kodi.tv</disclaimer>
<disclaimer lang="sv">Använd gärna detta skript. För information, besök kodi.tv</disclaimer>
+ <disclaimer lang="tr">Bu betiği kullanmaktan çekinmeyin. Daha fazla bilgi için kodi.tv ziyaret edin</disclaimer>
<disclaimer lang="zh">可放心使用此脚本,更多信息访问 kodi.tv</disclaimer>
<platform>all</platform>
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
diff --git a/addons/service.xbmc.versioncheck/changelog.txt b/addons/service.xbmc.versioncheck/changelog.txt
index b5f5c3a56a..e2a9d917cd 100644
--- a/addons/service.xbmc.versioncheck/changelog.txt
+++ b/addons/service.xbmc.versioncheck/changelog.txt
@@ -1,3 +1,7 @@
+v0.3.3
+- Updated language files from Transifex
+- Update version list
+
v0.3.2
- Don't notify on newer unreleased builds
diff --git a/addons/service.xbmc.versioncheck/resources/language/Asturian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Asturian/strings.po
new file mode 100644
index 0000000000..8f916b6dcb
--- /dev/null
+++ b/addons/service.xbmc.versioncheck/resources/language/Asturian/strings.po
@@ -0,0 +1,21 @@
+# Kodi Media Center language file
+# Addon Name: Version Check
+# Addon id: service.xbmc.versioncheck
+# Addon Provider: XBMC Foundation
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Addons\n"
+"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Kodi Translation Team\n"
+"Language-Team: Asturian (http://www.transifex.com/projects/p/xbmc-addons/language/ast/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ast\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#32020"
+msgid "General"
+msgstr "Xeneral"
diff --git a/addons/service.xbmc.versioncheck/resources/language/Croatian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Croatian/strings.po
index bf2c4ceae3..0b7bbd3f02 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Croatian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Croatian/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Želite li ukloniti ovog podsjetnika?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Možete ga omogućiti/onemogućiti u postavakama dodataka."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Koristite svoj upravitelj paketa (apt) za nadogradnju."
@@ -48,6 +52,10 @@ msgctxt "#32015"
msgid "Do you want to check the repository for a new version?"
msgstr "Želite li provjeriti repozitorij za novu inačicu?"
+msgctxt "#32016"
+msgid "There is a newer stable Kodi version available."
+msgstr "Dostupna je novija stabilna inačica Kodija."
+
msgctxt "#32020"
msgid "General"
msgstr "Općenito"
@@ -67,3 +75,27 @@ msgstr "Linux: nadogradi cjelokupan sustav"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: ažurirajte koristeći 'apt'"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Dostupna je novija stabilna inačica Kodija."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Posjetite http://kodi.tv za više informacija."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Dostupna je novija stabilna inačica Kodija."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Posjetite http://kodi.tv za više informacija."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Koristite %s dok je %s dostupna."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Preporučljivo je da nadogradite na noviju inačicu."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Czech/strings.po b/addons/service.xbmc.versioncheck/resources/language/Czech/strings.po
index 2dcde3d1d4..61f91c630b 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Czech/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Czech/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Chtěli byste odstranit tuto připomínku?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Je možno povolit/zakázat v nastavení doplňku"
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Použijte správce balíčků (APT) k upgradu."
@@ -71,3 +75,27 @@ msgstr "Linux: Aktualizace celého systému"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Aktualizace za použití apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Je k dispozici nová stabilní verze Kodi."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Navštivte http://kodi.tv pro více informací."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Je k dispozici nová stabilní verze Kodi."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Navštivte http://kodi.tv pro více informací."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Používáte %s zatímco je %s k dispozici."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Je doporučeno upgradovat na novější verzi."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Danish/strings.po b/addons/service.xbmc.versioncheck/resources/language/Danish/strings.po
index 574cdb5e14..d50c670ccc 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Danish/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Danish/strings.po
@@ -16,6 +16,86 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgctxt "#32001"
+msgid "We would like to recommend you to upgrade."
+msgstr "Opdatering anbefales!"
+
+msgctxt "#32002"
+msgid "Visit Kodi.tv for more information."
+msgstr "Besøg Kodi.tv for mere information."
+
+msgctxt "#32009"
+msgid "Would you like to remove this reminder?"
+msgstr "Ønsker du at fjerne denne advarsel?"
+
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Du kan slå den til/fra i tilføjelses indstillingerne."
+
+msgctxt "#32011"
+msgid "Use your package manager(apt) to upgrade."
+msgstr "Benyt til pakke manager(apt) til at opgradere."
+
+msgctxt "#32012"
+msgid "A new version is available, do you want to upgrade now?"
+msgstr "Ny version tilgængelig. Ønsker du at opdatere?"
+
+msgctxt "#32013"
+msgid "Upgrade successful"
+msgstr "Opdatering lykkedes"
+
+msgctxt "#32014"
+msgid "Do you want to restart Kodi to finish the upgrade?"
+msgstr "Ønsker du at genstarte Kodi for at afslutte opgraderingen?"
+
+msgctxt "#32015"
+msgid "Do you want to check the repository for a new version?"
+msgstr "Ønsker du at undersøge om repositoriet for ny version?"
+
+msgctxt "#32016"
+msgid "There is a newer stable Kodi version available."
+msgstr "Der er en nyere stabil version af Kodi tilgængelig."
+
msgctxt "#32020"
msgid "General"
msgstr "Generelt"
+
+msgctxt "#32021"
+msgid "Enable Kodi version check?"
+msgstr "Tjek for Kodi-opdateringer?"
+
+msgctxt "#32022"
+msgid "Please enter your password"
+msgstr "Indtast dit password"
+
+msgctxt "#32023"
+msgid "Linux: Upgrade complete system"
+msgstr "Linux: Opgrader hele systemet"
+
+msgctxt "#32024"
+msgid "Linux: Upgrade using apt"
+msgstr "Linux: Opgrader ved brug af apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Der er en ny stabil version af Kodi tilgængelig."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Besøg http://kodi.tv for mere information."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Der er en ny stabil version af Kodi tilgængelig."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Besøg http://kodi.tv for mere information."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Du benytter %s, mens %s er tilgængelig."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Det anbefales at du opdaterer til en nyere version."
diff --git a/addons/service.xbmc.versioncheck/resources/language/French (Canada)/strings.po b/addons/service.xbmc.versioncheck/resources/language/French (Canada)/strings.po
index de439470de..aa6ea3c6ac 100644
--- a/addons/service.xbmc.versioncheck/resources/language/French (Canada)/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/French (Canada)/strings.po
@@ -26,7 +26,7 @@ msgstr "Visitez Kodi.tv pour plus d'information."
msgctxt "#32009"
msgid "Would you like to remove this reminder?"
-msgstr "Voulez-vous enlever ce rappel?"
+msgstr "Voulez-vous supprimer ce rappel?"
msgctxt "#32010"
msgid "You can enable/disable it through add-on settings."
@@ -38,7 +38,7 @@ msgstr "Utilisez votre gestionnaire de paquets (apt) pour mettre à niveau."
msgctxt "#32012"
msgid "A new version is available, do you want to upgrade now?"
-msgstr "Une nouvelle version est disponible, voulez-vous mettre à niveau maintenant?"
+msgstr "Une nouvelle version est proposée, voulez-vous mettre à niveau maintenant?"
msgctxt "#32013"
msgid "Upgrade successful"
@@ -50,11 +50,11 @@ msgstr "Voulez-vous redémarrer Kodi pour finir la mise à niveau?"
msgctxt "#32015"
msgid "Do you want to check the repository for a new version?"
-msgstr "Voulez-vous vérifier si une nouvelle version est disponible dans le dépôt?"
+msgstr "Voulez-vous vérifier si une nouvelle version est proposée dans le dépôt?"
msgctxt "#32016"
msgid "There is a newer stable Kodi version available."
-msgstr "Il y a une nouvelle version stable de Kodi disponible."
+msgstr "Une nouvelle version stable de Kodi est proposée."
msgctxt "#32020"
msgid "General"
@@ -78,7 +78,7 @@ msgstr "Linux : mettre à niveau en utilisant apt"
msgctxt "#32030"
msgid "A new stable version of Kodi is available."
-msgstr "Une nouvelle version stable de Kodi est disponible."
+msgstr "Une nouvelle version stable de Kodi est proposée."
msgctxt "#32031"
msgid "Visit http://kodi.tv for more information."
@@ -86,7 +86,7 @@ msgstr "Visitez http://kodi.tv pour plus d'informations."
msgctxt "#32032"
msgid "A new stable version of Kodi is available."
-msgstr "Une nouvelle version de Kodi est disponible."
+msgstr "Une nouvelle version de Kodi est proposée."
msgctxt "#32033"
msgid "Visit http://kodi.tv for more information."
@@ -94,7 +94,7 @@ msgstr "Visitez http://kodi.tv pour plus d'informations."
msgctxt "#32034"
msgid "Using %s while %s is available."
-msgstr "%s est utilisé alors que %s est disponible."
+msgstr "%s est utilisée alors que %s est proposée."
msgctxt "#32035"
msgid "It is recommended that you to upgrade to a newer version."
diff --git a/addons/service.xbmc.versioncheck/resources/language/French/strings.po b/addons/service.xbmc.versioncheck/resources/language/French/strings.po
index aac9565f6a..c2fd99fca6 100644
--- a/addons/service.xbmc.versioncheck/resources/language/French/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/French/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Souhaitez-vous supprimer ce rappel ?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Vous pouvez l'activer/désactiver depuis les paramètres de l'extension."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Utilisez votre gestionnaire de paquets (apt) pour mettre à jour."
@@ -71,3 +75,27 @@ msgstr "Linux: Mise à niveau du système terminée"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Mettre à niveau en utilisant apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Une nouvelle version stable de Kodi est disponible"
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visitez http://kodi.tv pour plus d'informations."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "A new stable version of Kodi is available."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visitez http://kodi.tv pour plus d'informations."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Utiliser %s tant que %s est disponible."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Il est recommandé de mettre à niveau vers une nouvelle version."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Galician/strings.po b/addons/service.xbmc.versioncheck/resources/language/Galician/strings.po
index e2ec309cda..b608e6aaa0 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Galician/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Galician/strings.po
@@ -28,13 +28,17 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Quere eliminar este aviso?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Pode des/activalo a través dos axustes do complemento."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Use o xestor de paquetes(apt) para actualizar."
msgctxt "#32012"
msgid "A new version is available, do you want to upgrade now?"
-msgstr "Hai unha nova versión dispoñíbel, ¿quere actualizar agora?"
+msgstr "Hai unha nova versión dispoñíbel, quere actualizar agora?"
msgctxt "#32013"
msgid "Upgrade successful"
@@ -82,12 +86,16 @@ msgstr "Ir a http://kodi.tv para máis información."
msgctxt "#32032"
msgid "A new stable version of Kodi is available."
-msgstr "Está dispoñible unha versión estable nova de Kodi. "
+msgstr "Está dispoñíbel unha nova versión estábel de Kodi. "
msgctxt "#32033"
msgid "Visit http://kodi.tv for more information."
msgstr "Ir a http://kodi.tv para máis información."
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Está a empregar a versión %s mentres que a %s está dispoñíbel."
+
msgctxt "#32035"
msgid "It is recommended that you to upgrade to a newer version."
-msgstr "É recomendable actualizar á nova versión."
+msgstr "É recomendábel actualizar á nova versión."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Hungarian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Hungarian/strings.po
index 48181a64dc..7fa35c362f 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Hungarian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Hungarian/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Szeretné eltávolítani ezt az emlékeztetőt?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Engedélyezheti / letilthatja a kiegészítő beállításaiban."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Használja a csomagkezelőt (apt) a frissítéshez."
@@ -71,3 +75,27 @@ msgstr "Linux: Teljes rendszer frissítése"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Frissítés apt segítségével"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Újabb stabil Kodi kiadás elérhető."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "További információkért keresse fel az http://kodi.tv oldalt!"
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Újabb stabil Kodi kiadás elérhető."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "További információkért keresse fel az http://kodi.tv."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "%s használata mialatt %s elérhető."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Javasolt a hogy frissítsen az újabb változatra."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Italian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Italian/strings.po
index e091724d72..6724984dbd 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Italian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Italian/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Vuoi eliminare questo promemoria?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Puoi abilitare/disabilitare attraverso le impostazione dell'addon"
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Usa il tuo gestore pacchetti (apt) per aggiornare."
@@ -71,3 +75,27 @@ msgstr "Linux: Aggiornamento completo del sistema"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Aggiorna utilizzando apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Una nuova versione stabile di di Kodi è disponibile "
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visita http://kodi.tv per più informazioni."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Una nuova versione stabile di di Kodi è disponibile."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visita http://kodi.tv per più informazioni."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Usa %s mentre %s è disponibile."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "E' raccomandato che tu aggiorni ad una nuova versione."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Norwegian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Norwegian/strings.po
index 4d4d6fbe13..9a7de075e0 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Norwegian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Norwegian/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Ønsker du å fjerne denne påminnelsen?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Du kan aktivere/deaktivere det gjennom utvidelsesinnstillingene."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Bruk pakkebehandleren (apt) din for å oppgradere."
@@ -71,3 +75,27 @@ msgstr "Linux: Oppgrader hele systemet"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Oppgrader med apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "En ny stabil versjon av Kodi er tilgjengelig."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Se http://kodi.tv for mer informasjon."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "En ny stabil versjon av Kodi er tilgjengelig."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Se http://kodi.tv for mer informasjon."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Bruker %s mens %s er tilgjengelig."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Det er anbefalt å oppgradere til en nyere versjon."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Polish/strings.po b/addons/service.xbmc.versioncheck/resources/language/Polish/strings.po
index 190816113b..8eddb69d36 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Polish/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Polish/strings.po
@@ -18,16 +18,20 @@ msgstr ""
msgctxt "#32001"
msgid "We would like to recommend you to upgrade."
-msgstr "Chcielibyśmy polecić aktualizację."
+msgstr "Zaleca się uaktualnienie do nowszej wersji."
msgctxt "#32002"
msgid "Visit Kodi.tv for more information."
-msgstr "Odwiedź Kodi.tv po więcej informacji."
+msgstr "Odwiedź stronę Kodi.tv po więcej informacji."
msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Usunąć to przypomnienie?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Można to włączyć/wyłączyć w ustawieniach wtyczki."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Używaj własnego menedżera pakietów (apt) do aktualizacji."
@@ -42,7 +46,7 @@ msgstr "Aktualizacja powiodła się"
msgctxt "#32014"
msgid "Do you want to restart Kodi to finish the upgrade?"
-msgstr "Chcesz zrestartować Kodi by dokończyć aktualizację?"
+msgstr "Chcesz zrestartować Kodi, aby dokończyć aktualizację?"
msgctxt "#32015"
msgid "Do you want to check the repository for a new version?"
@@ -62,7 +66,7 @@ msgstr "Sprawdzać wersję Kodi?"
msgctxt "#32022"
msgid "Please enter your password"
-msgstr "Proszę podać hasło"
+msgstr "Wprowadź hasło"
msgctxt "#32023"
msgid "Linux: Upgrade complete system"
@@ -71,3 +75,27 @@ msgstr "Linux: aktualizacja systemu kompletna"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Aktualizuj za pomocą menadżera pakietów (apt)"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Dostępna jest nowa, stabilna wersja Kodi."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Odwiedź stronę http://kodi.tv po więcej informacji."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Dostępna jest nowa, stabilna wersja Kodi."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Odwiedź stronę http://kodi.tv po więcej informacji."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Korzystasz z %s a dostępna jest już wersja %s."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Zaleca się uaktualnienie do nowszej wersji."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Portuguese/strings.po b/addons/service.xbmc.versioncheck/resources/language/Portuguese/strings.po
index efd5d20362..9ea1e4549f 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Portuguese/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Portuguese/strings.po
@@ -28,13 +28,17 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Gostaria de anular este lembrete?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Pode activá-lo/desactivá-lo através das definições de addon."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Use o gestor de pacotes(apt) para actualizar."
msgctxt "#32012"
msgid "A new version is available, do you want to upgrade now?"
-msgstr "Uma nova versão está disponível, quer actualizar agora?"
+msgstr "Uma nova versão está disponível, deseja actualizar agora?"
msgctxt "#32013"
msgid "Upgrade successful"
@@ -42,11 +46,11 @@ msgstr "A actualização foi concluída"
msgctxt "#32014"
msgid "Do you want to restart Kodi to finish the upgrade?"
-msgstr "Quer reiniciar o Kodi para concluir a actualização?"
+msgstr "Deseja reiniciar o Kodi para concluir a actualização?"
msgctxt "#32015"
msgid "Do you want to check the repository for a new version?"
-msgstr "Quer procurar por uma nova versão no repositório?"
+msgstr "Deseja procurar por uma nova versão no repositório?"
msgctxt "#32016"
msgid "There is a newer stable Kodi version available."
@@ -54,7 +58,7 @@ msgstr "Está disponível uma versão mais recente do Kodi."
msgctxt "#32020"
msgid "General"
-msgstr "Menus"
+msgstr "Geral"
msgctxt "#32021"
msgid "Enable Kodi version check?"
@@ -71,3 +75,27 @@ msgstr "Linux: Actualização completa do sistema"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Actualizar com apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Está disponível uma nova versão do Kodi."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visite http://kodi.tv para mais informação."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Está disponível uma nova versão do Kodi."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visite http://kodi.tv para mais informação."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Possuis a %s embora esteja disponível a %s."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Recomenda-se que actualize para uma versão mais recente."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Romanian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Romanian/strings.po
index c90947238b..cf765156bf 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Romanian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Romanian/strings.po
@@ -16,6 +16,50 @@ msgstr ""
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+msgctxt "#32002"
+msgid "Visit Kodi.tv for more information."
+msgstr "Vizitați Kodi.tv pentru mai multe informații"
+
+msgctxt "#32014"
+msgid "Do you want to restart Kodi to finish the upgrade?"
+msgstr "Doriți să reporniți Kodi pentru a finaliza actualizarea?"
+
+msgctxt "#32016"
+msgid "There is a newer stable Kodi version available."
+msgstr "Este disponibilă o nouă versiune stabilă pentru Kodi."
+
msgctxt "#32020"
msgid "General"
msgstr "General"
+
+msgctxt "#32021"
+msgid "Enable Kodi version check?"
+msgstr "Activați Verificare versiune Kodi?"
+
+msgctxt "#32022"
+msgid "Please enter your password"
+msgstr "Introduceți parola dumneavoastră"
+
+msgctxt "#32024"
+msgid "Linux: Upgrade using apt"
+msgstr "Linux: Actualizare folosind apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Este disponibilă o versiune stabilă mai nouă pentru Kodi."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Vizitați http://kodi.tv pentru mai multe informații."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Este disponibilă o versiune stabilă mai nouă pentru Kodi."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Vizitați http://kodi.tv pentru mai multe informații."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Este recomandat să treceți la o versiune mai nouă."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Russian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Russian/strings.po
index 8f2ac0d634..9417147284 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Russian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Russian/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Вы хотите убрать это напоминание?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Вы можете включить/выключить это в разделе настроек дополнений."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Используйте Ваш менеджер пакетов (apt) чтобы обновиться."
@@ -71,3 +75,27 @@ msgstr "Linux: Полное обновление системы"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Обновление с помощью apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Доступна новая стабильная версия Kodi."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Для более полной информации посетите http://kodi.tv"
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Доступна новая стабильная версия Kodi."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Для более полной информации посетите http://kodi.tv"
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Вы используете %s, но обновленная версия %s уже доступна."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Рекомендуется обновление до новой версии."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Slovak/strings.po b/addons/service.xbmc.versioncheck/resources/language/Slovak/strings.po
index c31861f7f3..201f15955b 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Slovak/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Slovak/strings.po
@@ -20,6 +20,10 @@ msgctxt "#32001"
msgid "We would like to recommend you to upgrade."
msgstr "Radi by sme vám odporučili aktualizáciu."
+msgctxt "#32002"
+msgid "Visit Kodi.tv for more information."
+msgstr "Pre viac informácií navštívte Kodi.tv"
+
msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "Chcete túto pripomienku odstrániť?"
@@ -67,3 +71,19 @@ msgstr "Linux: Aktualizovať kompletný systém"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Aktualizovať pomocou apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Nová stabilná verzia Kodi je k dipozícii."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Pre viac informácií navštívte http://kodi.tv."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Nová stabilná verzia Kodi je k dipozícii."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Pre viac informácií navštívte http://kodi.tv."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Slovenian/strings.po b/addons/service.xbmc.versioncheck/resources/language/Slovenian/strings.po
index 0154a2b08b..f0c869c681 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Slovenian/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Slovenian/strings.po
@@ -16,6 +16,86 @@ msgstr ""
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+msgctxt "#32001"
+msgid "We would like to recommend you to upgrade."
+msgstr "Predlagamo vam nadgradnjo."
+
+msgctxt "#32002"
+msgid "Visit Kodi.tv for more information."
+msgstr "Za dodatne informacije obiščite Kodi.tv."
+
+msgctxt "#32009"
+msgid "Would you like to remove this reminder?"
+msgstr "Želite odstraniti ta opomnik?"
+
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Omogočite/onemogočite ga lahko prek nastavitev dodatkov."
+
+msgctxt "#32011"
+msgid "Use your package manager(apt) to upgrade."
+msgstr "Za nadgradnjo uporabite upravitelja paketov (apt)."
+
+msgctxt "#32012"
+msgid "A new version is available, do you want to upgrade now?"
+msgstr "Na voljo je nova različica, želite zdaj izvesti nadgradnjo?"
+
+msgctxt "#32013"
+msgid "Upgrade successful"
+msgstr "Nadgradnja je uspela."
+
+msgctxt "#32014"
+msgid "Do you want to restart Kodi to finish the upgrade?"
+msgstr "Želite ponovno zagnati Kodi, da zaključite z nadgradnjo?"
+
+msgctxt "#32015"
+msgid "Do you want to check the repository for a new version?"
+msgstr "Želite preveriti, če je v skladišču na voljo novejša različica?"
+
+msgctxt "#32016"
+msgid "There is a newer stable Kodi version available."
+msgstr "Na voljo je novejša stabilna različica Kodija."
+
msgctxt "#32020"
msgid "General"
msgstr "Splošno"
+
+msgctxt "#32021"
+msgid "Enable Kodi version check?"
+msgstr "Želite omogočiti preverjanje različice Kodi?"
+
+msgctxt "#32022"
+msgid "Please enter your password"
+msgstr "Vnesite svoje geslo"
+
+msgctxt "#32023"
+msgid "Linux: Upgrade complete system"
+msgstr "GNU/Linux: nadgradite celoten sistem"
+
+msgctxt "#32024"
+msgid "Linux: Upgrade using apt"
+msgstr "GNU/Linux: nadgradite z apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Na voljo je nova stabilna različica Kodija."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Za dodatne informacije obiščite http://kodi.tv"
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Na voljo je nova stabilna različica Kodija."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Za dodatne informacije obiščite Kodi.tv."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Uporabljate %s, ko je na voljo že %s."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Priporočamo, da nadgradite sistem na novejšo različico."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Spanish/strings.po b/addons/service.xbmc.versioncheck/resources/language/Spanish/strings.po
index 090077d6e4..8b6f39867c 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Spanish/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Spanish/strings.po
@@ -28,6 +28,10 @@ msgctxt "#32009"
msgid "Would you like to remove this reminder?"
msgstr "¿Desea eliminar este recordatorio?"
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Puede activarlo/desactivarlo a través de los ajustes del add-on ."
+
msgctxt "#32011"
msgid "Use your package manager(apt) to upgrade."
msgstr "Use su administrador de paquetes (apt) para actualizar."
@@ -71,3 +75,27 @@ msgstr "Linux: Actualizar sistema completo"
msgctxt "#32024"
msgid "Linux: Upgrade using apt"
msgstr "Linux: Actualizar usado apt"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Una nueva versión estable de Kodi está disponible."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visite http://kodi.tv para más información."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Una nueva versión estable de Kodi está disponible."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Visite http://kodi.tv para más información."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "Usando %s mientras que %s está disponible."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Se recomienda que actualice a una nueva versión."
diff --git a/addons/service.xbmc.versioncheck/resources/language/Tamil (India)/strings.po b/addons/service.xbmc.versioncheck/resources/language/Tamil (India)/strings.po
new file mode 100644
index 0000000000..81196db3b9
--- /dev/null
+++ b/addons/service.xbmc.versioncheck/resources/language/Tamil (India)/strings.po
@@ -0,0 +1,21 @@
+# Kodi Media Center language file
+# Addon Name: Version Check
+# Addon id: service.xbmc.versioncheck
+# Addon Provider: XBMC Foundation
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Addons\n"
+"Report-Msgid-Bugs-To: alanwww1@xbmc.org\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Kodi Translation Team\n"
+"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/xbmc-addons/language/ta_IN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_IN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#32020"
+msgid "General"
+msgstr "பொதுவானது"
diff --git a/addons/service.xbmc.versioncheck/resources/language/Turkish/strings.po b/addons/service.xbmc.versioncheck/resources/language/Turkish/strings.po
index b9c5ea8c47..adc62d2c00 100644
--- a/addons/service.xbmc.versioncheck/resources/language/Turkish/strings.po
+++ b/addons/service.xbmc.versioncheck/resources/language/Turkish/strings.po
@@ -16,6 +16,86 @@ msgstr ""
"Language: tr\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+msgctxt "#32001"
+msgid "We would like to recommend you to upgrade."
+msgstr "Sürüm güncellemenizi tavsiye ederiz."
+
+msgctxt "#32002"
+msgid "Visit Kodi.tv for more information."
+msgstr "Daha fazla bilgi için Kodi.tv adresini ziyaret edin."
+
+msgctxt "#32009"
+msgid "Would you like to remove this reminder?"
+msgstr "Bu hatırlatmayı kaldırmak istermisiniz?"
+
+msgctxt "#32010"
+msgid "You can enable/disable it through add-on settings."
+msgstr "Eklenti ayarlarından etkinleştir/etkinleştirmeyi kaldırabilirsiniz."
+
+msgctxt "#32011"
+msgid "Use your package manager(apt) to upgrade."
+msgstr "Güncelleme için paket yöneticinizi(apt) kullanabilirsiniz."
+
+msgctxt "#32012"
+msgid "A new version is available, do you want to upgrade now?"
+msgstr "Yeni bir versiyon mevcut, şimdi güncellemek istermisiniz?"
+
+msgctxt "#32013"
+msgid "Upgrade successful"
+msgstr "Güncelleme başarılı"
+
+msgctxt "#32014"
+msgid "Do you want to restart Kodi to finish the upgrade?"
+msgstr "Güncellemeyi tamamlamak için Kodi'yi yeniden başlatmak istermisiniz?"
+
+msgctxt "#32015"
+msgid "Do you want to check the repository for a new version?"
+msgstr "Yeni bir versiyon için depoyu kontrol etmek istermisiniz?"
+
+msgctxt "#32016"
+msgid "There is a newer stable Kodi version available."
+msgstr "Daha yeni stabil bir Kodi versiyonu mevcut."
+
msgctxt "#32020"
msgid "General"
msgstr "Genel"
+
+msgctxt "#32021"
+msgid "Enable Kodi version check?"
+msgstr "Kodi versiyon kontrolünü etkinleştir?"
+
+msgctxt "#32022"
+msgid "Please enter your password"
+msgstr "Lütfen şifrenizi giriniz"
+
+msgctxt "#32023"
+msgid "Linux: Upgrade complete system"
+msgstr "Linux: Tüm sistemi güncelle"
+
+msgctxt "#32024"
+msgid "Linux: Upgrade using apt"
+msgstr "Linux: apt kullanarak güncelle"
+
+msgctxt "#32030"
+msgid "A new stable version of Kodi is available."
+msgstr "Yeni stabil bir Kodi versiyonu mevcut."
+
+msgctxt "#32031"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Daha fazla bilgi için http://kodi.tv ziyaret ediniz."
+
+msgctxt "#32032"
+msgid "A new stable version of Kodi is available."
+msgstr "Yeni stabil bir Kodi versiyonu mevcut."
+
+msgctxt "#32033"
+msgid "Visit http://kodi.tv for more information."
+msgstr "Daha fazla bilgi için http://kodi.tv ziyaret ediniz."
+
+msgctxt "#32034"
+msgid "Using %s while %s is available."
+msgstr "%s kullanırken %s mevcut."
+
+msgctxt "#32035"
+msgid "It is recommended that you to upgrade to a newer version."
+msgstr "Daha yeni bir versiyona güncellemeniz tavsiye olunur."
diff --git a/addons/service.xbmc.versioncheck/resources/versions.txt b/addons/service.xbmc.versioncheck/resources/versions.txt
index 73e2f1ca90..990b029945 100644
--- a/addons/service.xbmc.versioncheck/resources/versions.txt
+++ b/addons/service.xbmc.versioncheck/resources/versions.txt
@@ -4,6 +4,24 @@
"stable": [
{
"major": "14",
+ "minor": "2",
+ "tag": "stable",
+ "tagversion":"",
+ "revision": "20150326-7cc53a9",
+ "extrainfo": "final",
+ "addon_support": "yes"
+ },
+ {
+ "major": "14",
+ "minor": "1",
+ "tag": "stable",
+ "tagversion":"",
+ "revision": "20150129-38e4046",
+ "extrainfo": "final",
+ "addon_support": "yes"
+ },
+ {
+ "major": "14",
"minor": "0",
"tag": "stable",
"tagversion":"",
@@ -205,6 +223,14 @@
],
"beta": [
{
+ "major": "15",
+ "minor": "0",
+ "tag": "beta",
+ "tagversion":"1",
+ "revision": "20150501-d1a2c33",
+ "addon_support": "yes"
+ },
+ {
"major": "14",
"minor": "0",
"tag": "beta",
@@ -391,6 +417,22 @@
],
"alpha": [
{
+ "major": "15",
+ "minor": "0",
+ "tag": "alpha",
+ "tagversion":"2",
+ "revision": "20150331-32c1f53",
+ "addon_support": "yes"
+ },
+ {
+ "major": "15",
+ "minor": "0",
+ "tag": "alpha",
+ "tagversion":"1",
+ "revision": "20150228-5dc1a55",
+ "addon_support": "yes"
+ },
+ {
"major": "14",
"minor": "0",
"tag": "alpha",
diff --git a/addons/service.xbmc.versioncheck/service.py b/addons/service.xbmc.versioncheck/service.py
index 97a4f3238c..d69cbc0711 100644
--- a/addons/service.xbmc.versioncheck/service.py
+++ b/addons/service.xbmc.versioncheck/service.py
@@ -37,11 +37,8 @@ class Main:
packages = []
xbmc.sleep(5000)
if xbmc.getCondVisibility('System.Platform.Linux') and __addon__.getSetting("upgrade_apt") == 'true':
- packages = ['xbmc']
+ packages = ['kodi']
_versionchecklinux(packages)
- # temporary don't notify Windows untill crashing has been solved
- elif xbmc.getCondVisibility('System.Platform.Windows'):
- pass
else:
oldversion, version_installed, version_available, version_stable = _versioncheck()
if oldversion:
diff --git a/configure.ac b/configure.ac
index 8c1e41221d..4e55ad6b28 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2530,6 +2530,7 @@ OUTPUT_FILES="Makefile \
tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCBroadcastReceiver.java \
tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnFrameAvailableListener.java \
tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCSettingsContentObserver.java \
+ tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java \
tools/android/packaging/xbmc/strings.xml \
addons/xbmc.addon/addon.xml"
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
index eba046a6ae..0c35d43285 100644
--- a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
+++ b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Main.java.in
@@ -109,4 +109,18 @@ public class Main extends NativeActivity
getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver);
super.onDestroy();
}
+
+ private native void _callNative(long funcAddr, long variantAddr);
+
+ private void runNativeOnUiThread(final long funcAddr, final long variantAddr)
+ {
+ runOnUiThread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ _callNative(funcAddr, variantAddr);
+ }
+ });
+ }
}
diff --git a/tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java.in b/tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java.in
new file mode 100644
index 0000000000..df33b17810
--- /dev/null
+++ b/tools/android/packaging/xbmc/src/org/xbmc/kodi/XBMCOnAudioFocusChangeListener.java.in
@@ -0,0 +1,16 @@
+package org.xbmc.@APP_NAME_LC@;
+
+import android.media.AudioManager.OnAudioFocusChangeListener;
+import android.util.Log;
+
+public class XBMCOnAudioFocusChangeListener implements OnAudioFocusChangeListener
+{
+ native void _onAudioFocusChange(int focusChange);
+
+ @Override
+ public void onAudioFocusChange(int focusChange)
+ {
+ _onAudioFocusChange(focusChange);
+
+ }
+}
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 291f3a04af..ffc7ad38d6 100644
--- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp
@@ -2598,6 +2598,9 @@ void CApplication::Stop(int exitCode)
vExitCode["exitcode"] = exitCode;
CAnnouncementManager::Get().Announce(System, "xbmc", "OnQuit", vExitCode);
+ // Abort any active screensaver
+ WakeUpScreenSaverAndDPMS();
+
SaveFileState(true);
g_alarmClock.StopThread();
@@ -3310,6 +3313,9 @@ void CApplication::OnPlayBackEnded()
#ifdef HAS_PYTHON
g_pythonParser.OnPlayBackEnded();
#endif
+#ifdef TARGET_ANDROID
+ CXBMCApp::OnPlayBackEnded();
+#endif
CVariant data(CVariant::VariantTypeObject);
data["end"] = true;
@@ -3332,6 +3338,9 @@ void CApplication::OnPlayBackStarted()
// (does nothing if python is not loaded)
g_pythonParser.OnPlayBackStarted();
#endif
+#ifdef TARGET_ANDROID
+ CXBMCApp::OnPlayBackStarted();
+#endif
CGUIMessage msg(GUI_MSG_PLAYBACK_STARTED, 0, 0);
g_windowManager.SendThreadMessage(msg);
@@ -3366,6 +3375,9 @@ void CApplication::OnPlayBackStopped()
#ifdef HAS_PYTHON
g_pythonParser.OnPlayBackStopped();
#endif
+#ifdef TARGET_ANDROID
+ CXBMCApp::OnPlayBackStopped();
+#endif
CVariant data(CVariant::VariantTypeObject);
data["end"] = false;
@@ -3380,6 +3392,9 @@ void CApplication::OnPlayBackPaused()
#ifdef HAS_PYTHON
g_pythonParser.OnPlayBackPaused();
#endif
+#ifdef TARGET_ANDROID
+ CXBMCApp::OnPlayBackPaused();
+#endif
CVariant param;
param["player"]["speed"] = 0;
@@ -3392,6 +3407,9 @@ void CApplication::OnPlayBackResumed()
#ifdef HAS_PYTHON
g_pythonParser.OnPlayBackResumed();
#endif
+#ifdef TARGET_ANDROID
+ CXBMCApp::OnPlayBackResumed();
+#endif
CVariant param;
param["player"]["speed"] = 1;
diff --git a/xbmc/Util.cpp b/xbmc/Util.cpp
index 28da2653fa..086345e4c0 100644
--- a/xbmc/Util.cpp
+++ b/xbmc/Util.cpp
@@ -1856,6 +1856,7 @@ void CUtil::ScanForExternalSubtitles(const std::string& strMovie, std::vector<st
int CUtil::ScanArchiveForSubtitles( const std::string& strArchivePath, const std::string& strMovieFileNameNoExt, std::vector<std::string>& vecSubtitles )
{
+ CLog::Log(LOGDEBUG, "ScanArchiveForSubtitles:: Scanning archive %s", strArchivePath.c_str());
int nSubtitlesAdded = 0;
CFileItemList ItemList;
@@ -1882,8 +1883,7 @@ int CUtil::ScanArchiveForSubtitles( const std::string& strArchivePath, const std
{
std::string strPathInRar = ItemList[it]->GetPath();
std::string strExt = URIUtils::GetExtension(strPathInRar);
-
- CLog::Log(LOGDEBUG, "ScanArchiveForSubtitles:: Found file %s", strPathInRar.c_str());
+
// always check any embedded rar archives
// checking for embedded rars, I moved this outside the sub_ext[] loop. We only need to check this once for each file.
if (URIUtils::IsRAR(strPathInRar) || URIUtils::IsZIP(strPathInRar))
diff --git a/xbmc/android/activity/XBMCApp.cpp b/xbmc/android/activity/XBMCApp.cpp
index 5b07d525f6..1ece8379d9 100644
--- a/xbmc/android/activity/XBMCApp.cpp
+++ b/xbmc/android/activity/XBMCApp.cpp
@@ -45,6 +45,7 @@
#include "utils/log.h"
#include "ApplicationMessenger.h"
#include "utils/StringUtils.h"
+#include "utils/Variant.h"
#include "AppParamParser.h"
#include "XbmcContext.h"
#include <android/bitmap.h>
@@ -53,7 +54,6 @@
#include "android/jni/Intent.h"
#include "android/jni/PackageManager.h"
#include "android/jni/Context.h"
-#include "android/jni/AudioManager.h"
#include "android/jni/PowerManager.h"
#include "android/jni/WakeLock.h"
#include "android/jni/Environment.h"
@@ -75,6 +75,9 @@
#if defined(HAS_LIBAMCODEC)
#include "utils/AMLUtils.h"
#endif
+#include "android/jni/Window.h"
+#include "android/jni/WindowManager.h"
+
#include "CompileInfo.h"
#define GIGABYTES 1073741824
@@ -87,6 +90,8 @@ void* thread_run(void* obj)
(static_cast<T*>(obj)->*fn)();
return NULL;
}
+
+CXBMCApp* CXBMCApp::m_xbmcappinstance = NULL;
CEvent CXBMCApp::m_windowCreated;
ANativeActivity *CXBMCApp::m_activity = NULL;
CJNIWakeLock *CXBMCApp::m_wakeLock = NULL;
@@ -101,6 +106,7 @@ CXBMCApp::CXBMCApp(ANativeActivity* nativeActivity)
: CJNIApplicationMainActivity(nativeActivity)
, CJNIBroadcastReceiver("org/xbmc/kodi/XBMCBroadcastReceiver")
{
+ m_xbmcappinstance = this;
m_activity = nativeActivity;
m_firstrun = true;
m_exiting=false;
@@ -114,6 +120,7 @@ CXBMCApp::CXBMCApp(ANativeActivity* nativeActivity)
CXBMCApp::~CXBMCApp()
{
+ m_xbmcappinstance = NULL;
delete m_wakeLock;
}
@@ -299,6 +306,45 @@ bool CXBMCApp::EnableWakeLock(bool on)
return true;
}
+bool CXBMCApp::AcquireAudioFocus()
+{
+ if (!m_xbmcappinstance)
+ return false;
+
+ CJNIAudioManager audioManager(getSystemService("audio"));
+
+ // Request audio focus for playback
+ int result = audioManager.requestAudioFocus(*m_xbmcappinstance,
+ // Use the music stream.
+ CJNIAudioManager::STREAM_MUSIC,
+ // Request permanent focus.
+ CJNIAudioManager::AUDIOFOCUS_GAIN);
+
+ if (result != CJNIAudioManager::AUDIOFOCUS_REQUEST_GRANTED)
+ {
+ CXBMCApp::android_printf("Audio Focus request failed");
+ return false;
+ }
+ return true;
+}
+
+bool CXBMCApp::ReleaseAudioFocus()
+{
+ if (!m_xbmcappinstance)
+ return false;
+
+ CJNIAudioManager audioManager(getSystemService("audio"));
+
+ // Release audio focus after playback
+ int result = audioManager.abandonAudioFocus(*m_xbmcappinstance);
+ if (result != CJNIAudioManager::AUDIOFOCUS_REQUEST_GRANTED)
+ {
+ CXBMCApp::android_printf("Audio Focus abandon failed");
+ return false;
+ }
+ return true;
+}
+
bool CXBMCApp::HasFocus()
{
return m_hasFocus;
@@ -380,6 +426,36 @@ int CXBMCApp::SetBuffersGeometry(int width, int height, int format)
return ANativeWindow_setBuffersGeometry(m_window, width, height, format);
}
+#include "threads/Event.h"
+#include <time.h>
+
+void CXBMCApp::SetRefreshRateCallback(CVariant* rateVariant)
+{
+ float rate = rateVariant->asFloat();
+ delete rateVariant;
+
+ CJNIWindow window = getWindow();
+ if (window)
+ {
+ CJNIWindowManagerLayoutParams params = window.getAttributes();
+ if (params.getpreferredRefreshRate() != rate)
+ {
+ params.setpreferredRefreshRate(rate);
+ if (params.getpreferredRefreshRate() > 0.0)
+ window.setAttributes(params);
+ }
+ }
+}
+
+void CXBMCApp::SetRefreshRate(float rate)
+{
+ if (rate < 1.0)
+ return;
+
+ CVariant *variant = new CVariant(rate);
+ runNativeOnUiThread(SetRefreshRateCallback, variant);
+}
+
int CXBMCApp::android_printf(const char *format, ...)
{
// For use before CLog is setup by XBMC_Run()
@@ -405,6 +481,31 @@ int CXBMCApp::GetDPI()
return dpi;
}
+void CXBMCApp::OnPlayBackStarted()
+{
+ AcquireAudioFocus();
+}
+
+void CXBMCApp::OnPlayBackPaused()
+{
+ ReleaseAudioFocus();
+}
+
+void CXBMCApp::OnPlayBackResumed()
+{
+ AcquireAudioFocus();
+}
+
+void CXBMCApp::OnPlayBackStopped()
+{
+ ReleaseAudioFocus();
+}
+
+void CXBMCApp::OnPlayBackEnded()
+{
+ ReleaseAudioFocus();
+}
+
std::vector<androidPackage> CXBMCApp::GetApplications()
{
CSingleLock lock(m_applicationsMutex);
@@ -652,6 +753,13 @@ void CXBMCApp::onVolumeChanged(int volume)
CApplicationMessenger::Get().SendAction(CAction(ACTION_VOLUME_SET, (float)volume), WINDOW_INVALID, false);
}
+void CXBMCApp::onAudioFocusChange(int focusChange)
+{
+ CXBMCApp::android_printf("Audio Focus changed: %d", focusChange);
+ if (focusChange == CJNIAudioManager::AUDIOFOCUS_LOSS && g_application.m_pPlayer->IsPlaying() && !g_application.m_pPlayer->IsPaused())
+ CApplicationMessenger::Get().SendAction(CAction(ACTION_PAUSE), WINDOW_INVALID, true);
+}
+
void CXBMCApp::SetupEnv()
{
setenv("XBMC_ANDROID_SYSTEM_LIBS", CJNISystem::getProperty("java.library.path").c_str(), 0);
diff --git a/xbmc/android/activity/XBMCApp.h b/xbmc/android/activity/XBMCApp.h
index 72b9caad53..6f16ff739a 100644
--- a/xbmc/android/activity/XBMCApp.h
+++ b/xbmc/android/activity/XBMCApp.h
@@ -32,11 +32,13 @@
#include "xbmc.h"
#include "android/jni/Activity.h"
#include "android/jni/BroadcastReceiver.h"
+#include "android/jni/AudioManager.h"
#include "threads/Event.h"
// forward delares
class CJNIWakeLock;
class CAESinkAUDIOTRACK;
+class CVariant;
typedef struct _JNIEnv JNIEnv;
struct androidIcon
@@ -52,7 +54,7 @@ struct androidPackage
std::string packageLabel;
};
-class CXBMCApp : public IActivityHandler, public CJNIApplicationMainActivity, public CJNIBroadcastReceiver
+class CXBMCApp : public IActivityHandler, public CJNIApplicationMainActivity, public CJNIBroadcastReceiver, public CJNIAudioManagerAudioFocusChangeListener
{
public:
CXBMCApp(ANativeActivity *nativeActivity);
@@ -60,6 +62,7 @@ public:
virtual void onReceive(CJNIIntent intent);
virtual void onNewIntent(CJNIIntent intent);
virtual void onVolumeChanged(int volume);
+ virtual void onAudioFocusChange(int focusChange);
bool isValid() { return m_activity != NULL; }
@@ -105,19 +108,32 @@ public:
static float GetSystemVolume();
static void SetSystemVolume(float percent);
+ static void SetRefreshRate(float rate);
static int GetDPI();
+
+ // Playback callbacks
+ static void OnPlayBackStarted();
+ static void OnPlayBackPaused();
+ static void OnPlayBackResumed();
+ static void OnPlayBackStopped();
+ static void OnPlayBackEnded();
+
protected:
// limit who can access Volume
friend class CAESinkAUDIOTRACK;
static int GetMaxSystemVolume(JNIEnv *env);
+ static bool AcquireAudioFocus();
+ static bool ReleaseAudioFocus();
private:
+ static CXBMCApp* m_xbmcappinstance;
static bool HasLaunchIntent(const std::string &package);
std::string GetFilenameFromIntent(const CJNIIntent &intent);
void run();
void stop();
void SetupEnv();
+ static void SetRefreshRateCallback(CVariant *rate);
static ANativeActivity *m_activity;
static CJNIWakeLock *m_wakeLock;
static int m_batteryLevel;
diff --git a/xbmc/android/activity/android_main.cpp b/xbmc/android/activity/android_main.cpp
index c028eb8a2a..47f03cacb3 100644
--- a/xbmc/android/activity/android_main.cpp
+++ b/xbmc/android/activity/android_main.cpp
@@ -90,6 +90,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
std::string bcReceiver = "org/xbmc/" + appName + "/XBMCBroadcastReceiver";
std::string frameListener = "org/xbmc/" + appName + "/XBMCOnFrameAvailableListener";
std::string settingsObserver = "org/xbmc/" + appName + "/XBMCSettingsContentObserver";
+ std::string audioFocusChangeListener = "org/xbmc/" + appName + "/XBMCOnAudioFocusChangeListener";
jclass cMain = env->FindClass(mainClass.c_str());
if(cMain)
@@ -100,6 +101,13 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
(void*)&CJNIApplicationMainActivity::_onNewIntent
};
env->RegisterNatives(cMain, &mOnNewIntent, 1);
+
+ JNINativeMethod mCallNative = {
+ "_callNative",
+ "(JJ)V",
+ (void*)&CJNIApplicationMainActivity::_callNative
+ };
+ env->RegisterNatives(cMain, &mCallNative, 1);
}
jclass cBroadcastReceiver = env->FindClass(bcReceiver.c_str());
@@ -135,5 +143,16 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
env->RegisterNatives(cSettingsObserver, &mOnVolumeChanged, 1);
}
+ jclass cAudioFocusChangeListener = env->FindClass(audioFocusChangeListener.c_str());
+ if(cAudioFocusChangeListener)
+ {
+ JNINativeMethod mOnAudioFocusChange = {
+ "_onAudioFocusChange",
+ "(I)V",
+ (void*)&CJNIApplicationMainActivity::_onAudioFocusChange
+ };
+ env->RegisterNatives(cAudioFocusChangeListener, &mOnAudioFocusChange, 1);
+ }
+
return version;
}
diff --git a/xbmc/android/jni/Activity.cpp b/xbmc/android/jni/Activity.cpp
index 4162703b2d..1df5241ee4 100644
--- a/xbmc/android/jni/Activity.cpp
+++ b/xbmc/android/jni/Activity.cpp
@@ -68,6 +68,19 @@ void CJNIApplicationMainActivity::_onNewIntent(JNIEnv *env, jobject context, job
m_appInstance->onNewIntent(CJNIIntent(jhobject(intent)));
}
+void CJNIApplicationMainActivity::_callNative(JNIEnv *env, jobject context, jlong funcAddr, jlong variantAddr)
+{
+ (void)env;
+ (void)context;
+ ((void (*)(CVariant *))funcAddr)((CVariant *)variantAddr);
+}
+
+void CJNIApplicationMainActivity::runNativeOnUiThread(void (*callback)(CVariant *), CVariant* variant)
+{
+ call_method<void>(m_context,
+ "runNativeOnUiThread", "(JJ)V", (jlong)callback, (jlong)variant);
+}
+
void CJNIApplicationMainActivity::_onVolumeChanged(JNIEnv *env, jobject context, jint volume)
{
(void)env;
@@ -75,3 +88,11 @@ void CJNIApplicationMainActivity::_onVolumeChanged(JNIEnv *env, jobject context,
if(m_appInstance)
m_appInstance->onVolumeChanged(volume);
}
+
+void CJNIApplicationMainActivity::_onAudioFocusChange(JNIEnv *env, jobject context, jint focusChange)
+{
+ (void)env;
+ (void)context;
+ if(m_appInstance)
+ m_appInstance->onAudioFocusChange(focusChange);
+}
diff --git a/xbmc/android/jni/Activity.h b/xbmc/android/jni/Activity.h
index 25da7b5a96..e87585883a 100644
--- a/xbmc/android/jni/Activity.h
+++ b/xbmc/android/jni/Activity.h
@@ -22,6 +22,7 @@
#include "JNIBase.h"
#include "Context.h"
+class CVariant;
struct ANativeActivity;
class CJNIActivity : public CJNIContext
@@ -48,6 +49,10 @@ public:
static void _onNewIntent(JNIEnv *env, jobject context, jobject intent);
static void _onVolumeChanged(JNIEnv *env, jobject context, jint volume);
+ static void _onAudioFocusChange(JNIEnv *env, jobject context, jint focusChange);
+
+ static void _callNative(JNIEnv *env, jobject context, jlong funcAddr, jlong variantAddr);
+ static void runNativeOnUiThread(void (*callback)(CVariant *), CVariant *variant);
private:
static CJNIApplicationMainActivity *m_appInstance;
@@ -55,5 +60,6 @@ private:
protected:
virtual void onNewIntent(CJNIIntent intent)=0;
virtual void onVolumeChanged(int volume)=0;
+ virtual void onAudioFocusChange(int focusChange)=0;
};
diff --git a/xbmc/android/jni/AudioManager.cpp b/xbmc/android/jni/AudioManager.cpp
index 5983852dea..42b0dc292e 100644
--- a/xbmc/android/jni/AudioManager.cpp
+++ b/xbmc/android/jni/AudioManager.cpp
@@ -19,16 +19,30 @@
*/
#include "AudioManager.h"
+#include "Activity.h"
+#include "ClassLoader.h"
+
#include "jutils/jutils-details.hpp"
+#include <algorithm>
+
using namespace jni;
int CJNIAudioManager::STREAM_MUSIC(3);
+int CJNIAudioManager::AUDIOFOCUS_GAIN(0x00000001);
+int CJNIAudioManager::AUDIOFOCUS_LOSS(0xffffffff);
+int CJNIAudioManager::AUDIOFOCUS_REQUEST_GRANTED(0x00000001);
+int CJNIAudioManager::AUDIOFOCUS_REQUEST_FAILED(0x00000000);
+
void CJNIAudioManager::PopulateStaticFields()
{
jhclass clazz = find_class("android/media/AudioManager");
STREAM_MUSIC = (get_static_field<int>(clazz, "STREAM_MUSIC"));
+ AUDIOFOCUS_GAIN = (get_static_field<int>(clazz, "AUDIOFOCUS_GAIN"));
+ AUDIOFOCUS_LOSS = (get_static_field<int>(clazz, "AUDIOFOCUS_LOSS"));
+ AUDIOFOCUS_REQUEST_GRANTED = (get_static_field<int>(clazz, "AUDIOFOCUS_REQUEST_GRANTED"));
+ AUDIOFOCUS_REQUEST_FAILED = (get_static_field<int>(clazz, "AUDIOFOCUS_REQUEST_FAILED"));
}
int CJNIAudioManager::getStreamMaxVolume()
@@ -49,5 +63,49 @@ void CJNIAudioManager::setStreamVolume(int index /* 0 */, int flags /* NONE */)
{
call_method<void>(m_object,
"setStreamVolume", "(III)V",
- STREAM_MUSIC, index, flags);
+ STREAM_MUSIC, index, flags);
+}
+
+int CJNIAudioManager::requestAudioFocus(const CJNIAudioManagerAudioFocusChangeListener &listener, int streamType, int durationHint)
+{
+ return call_method<int>(m_object,
+ "requestAudioFocus",
+ "(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I", listener.get_raw(), streamType, durationHint);
+}
+
+int CJNIAudioManager::abandonAudioFocus(const CJNIAudioManagerAudioFocusChangeListener &listener)
+{
+ return call_method<int>(m_object,
+ "abandonAudioFocus",
+ "(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I", listener.get_raw());
+}
+
+//////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+CJNIAudioManagerAudioFocusChangeListener* CJNIAudioManagerAudioFocusChangeListener::m_listenerInstance(NULL);
+
+CJNIAudioManagerAudioFocusChangeListener::CJNIAudioManagerAudioFocusChangeListener()
+: CJNIBase("org/xbmc/kodi/XBMCOnAudioFocusChangeListener")
+{
+ CJNIApplicationMainActivity *appInstance = CJNIApplicationMainActivity::GetAppInstance();
+ if (!appInstance)
+ return;
+
+ // Convert "the/class/name" to "the.class.name" as loadClass() expects it.
+ std::string dotClassName = GetClassName();
+ std::replace(dotClassName.begin(), dotClassName.end(), '/', '.');
+ m_object = new_object(appInstance->getClassLoader().loadClass(dotClassName));
+ m_object.setGlobal();
+
+ m_listenerInstance = this;
+}
+
+void CJNIAudioManagerAudioFocusChangeListener::_onAudioFocusChange(JNIEnv *env, jobject context, jint focusChange)
+{
+ (void)env;
+ (void)context;
+ if (m_listenerInstance)
+ {
+ m_listenerInstance->onAudioFocusChange(focusChange);
+ }
}
diff --git a/xbmc/android/jni/AudioManager.h b/xbmc/android/jni/AudioManager.h
index 0eb8291617..c02889fefd 100644
--- a/xbmc/android/jni/AudioManager.h
+++ b/xbmc/android/jni/AudioManager.h
@@ -21,6 +21,23 @@
#include "JNIBase.h"
+class CJNIAudioManagerAudioFocusChangeListener : public CJNIBase
+{
+public:
+ CJNIAudioManagerAudioFocusChangeListener(const jni::jhobject &object) : CJNIBase(object) {};
+ virtual ~CJNIAudioManagerAudioFocusChangeListener() {};
+
+ static void _onAudioFocusChange(JNIEnv *env, jobject context, jint focusChange);
+
+protected:
+ CJNIAudioManagerAudioFocusChangeListener();
+
+ virtual void onAudioFocusChange(int focusChange)=0;
+
+private:
+ static CJNIAudioManagerAudioFocusChangeListener *m_listenerInstance;
+};
+
class CJNIAudioManager : public CJNIBase
{
public:
@@ -32,9 +49,17 @@ public:
int getStreamVolume();
void setStreamVolume(int index = 0, int flags = 0);
+ int requestAudioFocus(const CJNIAudioManagerAudioFocusChangeListener &listener, int streamType, int durationHint);
+ int abandonAudioFocus (const CJNIAudioManagerAudioFocusChangeListener &listener);
+
static void PopulateStaticFields();
static int STREAM_MUSIC;
+ static int AUDIOFOCUS_GAIN;
+ static int AUDIOFOCUS_LOSS;
+ static int AUDIOFOCUS_REQUEST_GRANTED;
+ static int AUDIOFOCUS_REQUEST_FAILED;
+
private:
CJNIAudioManager();
};
diff --git a/xbmc/android/jni/Display.cpp b/xbmc/android/jni/Display.cpp
new file mode 100644
index 0000000000..088802aa71
--- /dev/null
+++ b/xbmc/android/jni/Display.cpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2014 Team Kodi
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kodi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "Display.h"
+
+#include "jutils/jutils-details.hpp"
+
+using namespace jni;
+
+float CJNIDisplay::getRefreshRate()
+{
+ return call_method<jfloat>(m_object,
+ "getRefreshRate", "()F");
+}
+
+std::vector<float> CJNIDisplay::getSupportedRefreshRates()
+{
+ if (GetSDKVersion() >= 21)
+ return jcast<std::vector<float>>(
+ call_method<jhfloatArray>(m_object, "getSupportedRefreshRates", "()[F"));
+ else
+ return std::vector<float>();
+}
diff --git a/xbmc/android/jni/Display.h b/xbmc/android/jni/Display.h
new file mode 100644
index 0000000000..536a753bd0
--- /dev/null
+++ b/xbmc/android/jni/Display.h
@@ -0,0 +1,32 @@
+#pragma once
+/*
+ * Copyright (C) 2014 Team Kodi
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kodi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "JNIBase.h"
+
+class CJNIDisplay : public CJNIBase
+{
+public:
+ CJNIDisplay(const jni::jhobject &object) : CJNIBase(object) {};
+ ~CJNIDisplay() {};
+
+ float getRefreshRate();
+ std::vector<float> getSupportedRefreshRates();
+};
diff --git a/xbmc/android/jni/Makefile.in b/xbmc/android/jni/Makefile.in
index d108ba701f..7e7a58431a 100644
--- a/xbmc/android/jni/Makefile.in
+++ b/xbmc/android/jni/Makefile.in
@@ -52,6 +52,8 @@ SRCS += Build.cpp
SRCS += KeyCharacterMap.cpp
SRCS += Activity.cpp
SRCS += SystemProperties.cpp
+SRCS += Display.cpp
+SRCS += WindowManager.cpp
LIB = jni.a
diff --git a/xbmc/android/jni/View.cpp b/xbmc/android/jni/View.cpp
index 2667a97752..635f568e2b 100644
--- a/xbmc/android/jni/View.cpp
+++ b/xbmc/android/jni/View.cpp
@@ -20,6 +20,7 @@
#include "Window.h"
#include "View.h"
+#include "Display.h"
#include "jutils/jutils-details.hpp"
@@ -148,3 +149,12 @@ int CJNIView::getSystemUiVisibility()
return call_method<int>(m_object,
"getSystemUiVisibility", "()I");
}
+
+CJNIDisplay CJNIView::getDisplay()
+{
+ if (GetSDKVersion() >= 17)
+ return call_method<jhobject>(m_object,
+ "getDisplay", "()Landroid/view/Display;");
+ else
+ return jhobject();
+}
diff --git a/xbmc/android/jni/View.h b/xbmc/android/jni/View.h
index 1284024492..cd22ad98c5 100644
--- a/xbmc/android/jni/View.h
+++ b/xbmc/android/jni/View.h
@@ -22,6 +22,8 @@
#include "JNIBase.h"
#include "List.h"
+class CJNIDisplay;
+
class CJNIViewInputDeviceMotionRange : public CJNIBase
{
public:
@@ -68,6 +70,7 @@ public:
void setSystemUiVisibility(int visibility);
int getSystemUiVisibility();
+ CJNIDisplay getDisplay();
static void PopulateStaticFields();
static int SYSTEM_UI_FLAG_FULLSCREEN;
diff --git a/xbmc/android/jni/Window.cpp b/xbmc/android/jni/Window.cpp
index 2f8c749f71..969e9aa067 100644
--- a/xbmc/android/jni/Window.cpp
+++ b/xbmc/android/jni/Window.cpp
@@ -19,12 +19,30 @@
*/
#include "Window.h"
+#include "WindowManager.h"
#include "View.h"
#include "jutils/jutils-details.hpp"
using namespace jni;
+CJNIWindowManagerLayoutParams CJNIWindow::getAttributes()
+{
+ return call_method<jhobject>(m_object,
+ "getAttributes", "()Landroid/view/WindowManager$LayoutParams;");
+}
+
+void CJNIWindow::setAttributes(const CJNIWindowManagerLayoutParams& attributes)
+{
+ call_method<void>(m_object,
+ "setAttributes", "(Landroid/view/WindowManager$LayoutParams;)V",
+ attributes.get_raw());
+
+
+ if (xbmc_jnienv()->ExceptionCheck())
+ xbmc_jnienv()->ExceptionClear();
+}
+
CJNIView CJNIWindow::getDecorView()
{
return call_method<jhobject>(m_object,
diff --git a/xbmc/android/jni/Window.h b/xbmc/android/jni/Window.h
index 737f090947..eb63f8b8f6 100644
--- a/xbmc/android/jni/Window.h
+++ b/xbmc/android/jni/Window.h
@@ -22,11 +22,16 @@
#include "JNIBase.h"
class CJNIView;
+class CJNIWindowManagerLayoutParams;
+
class CJNIWindow : public CJNIBase
{
public:
CJNIWindow(const jni::jhobject &object) : CJNIBase(object) {};
~CJNIWindow() {};
+ CJNIWindowManagerLayoutParams getAttributes();
+ void setAttributes(const CJNIWindowManagerLayoutParams& attributes);
+
CJNIView getDecorView();
};
diff --git a/xbmc/android/jni/WindowManager.cpp b/xbmc/android/jni/WindowManager.cpp
new file mode 100644
index 0000000000..8e0f352b6d
--- /dev/null
+++ b/xbmc/android/jni/WindowManager.cpp
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 Team Kodi
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kodi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "WindowManager.h"
+
+#include "jutils/jutils-details.hpp"
+
+using namespace jni;
+
+float CJNIWindowManagerLayoutParams::getpreferredRefreshRate() const
+{
+ if (GetSDKVersion() >= 21)
+ return get_field<jfloat>(m_object, "preferredRefreshRate");
+ else
+ return -1.0;
+}
+
+void CJNIWindowManagerLayoutParams::setpreferredRefreshRate(float rate)
+{
+ if (GetSDKVersion() >= 21)
+ set_field(m_object, "preferredRefreshRate", rate);
+}
diff --git a/xbmc/android/jni/WindowManager.h b/xbmc/android/jni/WindowManager.h
new file mode 100644
index 0000000000..0ea37fc16b
--- /dev/null
+++ b/xbmc/android/jni/WindowManager.h
@@ -0,0 +1,32 @@
+#pragma once
+/*
+ * Copyright (C) 2014 Team Kodi
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Kodi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "JNIBase.h"
+
+class CJNIWindowManagerLayoutParams : public CJNIBase
+{
+public:
+ CJNIWindowManagerLayoutParams(const jni::jhobject &object) : CJNIBase(object) {};
+ ~CJNIWindowManagerLayoutParams() {};
+
+ float getpreferredRefreshRate() const;
+ void setpreferredRefreshRate(float rate);
+};
diff --git a/xbmc/android/jni/jutils/jutils-details.hpp b/xbmc/android/jni/jutils/jutils-details.hpp
index 9c3e833a99..b67a6aa545 100644
--- a/xbmc/android/jni/jutils/jutils-details.hpp
+++ b/xbmc/android/jni/jutils/jutils-details.hpp
@@ -78,6 +78,29 @@ struct jcast_helper<std::vector<T>, jobjectArray>
};
template <>
+struct jcast_helper<std::vector<float>, jfloatArray>
+{
+ static std::vector<float> cast(jfloatArray const &v)
+ {
+ JNIEnv *env = xbmc_jnienv();
+ jsize size = 0;
+ if(v)
+ size = env->GetArrayLength(v);
+
+ std::vector<float> vec;
+ vec.reserve(size);
+
+ float *elements = env->GetFloatArrayElements(v, NULL);
+ for (int i = 0; i < size; i++)
+ {
+ vec.emplace_back(elements[i]);
+ }
+ env->ReleaseFloatArrayElements(v, elements, JNI_ABORT);
+ return vec;
+ }
+};
+
+template <>
struct jcast_helper<jhstring, std::string>
{
static jhstring cast(const std::string &v);
@@ -116,6 +139,14 @@ struct jcast_helper<std::vector<T>, jhobjectArray>
}
};
+template <>
+struct jcast_helper<std::vector<float>, jhfloatArray>
+{
+ static std::vector<float> cast(jhfloatArray const &v)
+ {
+ return jcast_helper<std::vector<float>, jfloatArray>::cast(v.get());
+ }
+};
template <typename T>
std::vector<T> jcast_helper<std::vector<T>, jobjectArray>::cast(jobjectArray const &v)
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index dd9e10a378..82b5baa538 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -3407,8 +3407,6 @@ bool CDVDPlayer::OpenAudioStream(CDVDStreamInfo& hint, bool reset)
/* we are potentially going to be waiting on this */
m_dvdPlayerAudio->SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
- /* audio normally won't consume full cpu, so let it have prio */
- m_dvdPlayerAudio->SetPriority(GetPriority()+1);
return true;
}
@@ -3469,20 +3467,6 @@ bool CDVDPlayer::OpenVideoStream(CDVDStreamInfo& hint, bool reset)
/* we are potentially going to be waiting on this */
m_dvdPlayerVideo->SendMessage(new CDVDMsg(CDVDMsg::PLAYER_STARTED), 1);
-#if defined(TARGET_DARWIN)
- // Apple thread scheduler works a little different than Linux. It
- // will favor OS GUI side and can cause DVDPlayerVideo to miss frame
- // updates when the OS gets busy. Apple's recomended method is to
- // elevate time critical threads to SCHED_RR and OSX does this for
- // the CoreAudio audio device handler thread. We do the same for
- // the DVDPlayerVideo thread so it can run to sleep without getting
- // swapped out by a busy OS.
- m_dvdPlayerVideo->SetPriority(GetSchedRRPriority());
-#else
- /* use same priority for video thread as demuxing thread, as */
- /* otherwise demuxer will starve if video consumes the full cpu */
- m_dvdPlayerVideo->SetPriority(GetPriority());
-#endif
return true;
}
diff --git a/xbmc/cores/dvdplayer/IDVDPlayer.h b/xbmc/cores/dvdplayer/IDVDPlayer.h
index 4e3fd69042..560a3f4d11 100644
--- a/xbmc/cores/dvdplayer/IDVDPlayer.h
+++ b/xbmc/cores/dvdplayer/IDVDPlayer.h
@@ -55,7 +55,6 @@ class IDVDStreamPlayerVideo : public IDVDStreamPlayer
public:
~IDVDStreamPlayerVideo() {}
float GetRelativeUsage() { return 0.0f; }
- bool SetPriority(const int iPriority) { return true; }
virtual bool OpenStream(CDVDStreamInfo &hint) = 0;
virtual void CloseStream(bool bWaitForBuffers) = 0;
virtual bool StepFrame() = 0;
@@ -96,7 +95,6 @@ class IDVDStreamPlayerAudio : public IDVDStreamPlayer
public:
~IDVDStreamPlayerAudio() {}
float GetRelativeUsage() { return 0.0f; }
- bool SetPriority(const int iPriority) { return true; }
virtual bool OpenStream(CDVDStreamInfo &hints) = 0;
virtual void CloseStream(bool bWaitForBuffers) = 0;
virtual void SetSpeed(int speed) = 0;
diff --git a/xbmc/utils/XMLUtils.cpp b/xbmc/utils/XMLUtils.cpp
index dc234da225..94329bfe70 100644
--- a/xbmc/utils/XMLUtils.cpp
+++ b/xbmc/utils/XMLUtils.cpp
@@ -125,8 +125,9 @@ bool XMLUtils::GetBoolean(const TiXmlNode* pRootNode, const char* strTag, bool&
bool XMLUtils::GetString(const TiXmlNode* pRootNode, const char* strTag, std::string& strStringValue)
{
- const TiXmlElement* pElement = pRootNode->FirstChildElement(strTag );
+ const TiXmlElement* pElement = pRootNode->FirstChildElement(strTag);
if (!pElement) return false;
+
const char* encoded = pElement->Attribute("urlencoded");
const TiXmlNode* pNode = pElement->FirstChild();
if (pNode != NULL)
@@ -140,6 +141,13 @@ bool XMLUtils::GetString(const TiXmlNode* pRootNode, const char* strTag, std::st
return true;
}
+std::string XMLUtils::GetString(const TiXmlNode* pRootNode, const char* strTag)
+{
+ std::string temp;
+ GetString(pRootNode, strTag, temp);
+ return temp;
+}
+
bool XMLUtils::HasChild(const TiXmlNode* pRootNode, const char* strTag)
{
const TiXmlElement* pElement = pRootNode->FirstChildElement(strTag);
diff --git a/xbmc/utils/XMLUtils.h b/xbmc/utils/XMLUtils.h
index 70e6446e46..294dadc39d 100644
--- a/xbmc/utils/XMLUtils.h
+++ b/xbmc/utils/XMLUtils.h
@@ -39,7 +39,26 @@ public:
static bool GetDouble(const TiXmlNode* pRootNode, const char* strTag, double &value);
static bool GetInt(const TiXmlNode* pRootNode, const char* strTag, int& iIntValue);
static bool GetBoolean(const TiXmlNode* pRootNode, const char* strTag, bool& bBoolValue);
+
+ /*! \brief Get a string value from the xml tag
+ If the specified tag isn't found strStringvalue is not modified and will contain whatever
+ value it had before the method call.
+
+ \param[in] pRootNode the xml node that contains the tag
+ \param[in] strTag the xml tag to read from
+ \param[in,out] strStringValue where to store the read string
+ \return true on success, false if the tag isn't found
+ */
static bool GetString(const TiXmlNode* pRootNode, const char* strTag, std::string& strStringValue);
+
+ /*! \brief Get a string value from the xml tag
+
+ \param[in] pRootNode the xml node that contains the tag
+ \param[in] strTag the tag to read from
+
+ \return the value in the specified tag or an empty string if the tag isn't found
+ */
+ static std::string GetString(const TiXmlNode* pRootNode, const char* strTag);
/*! \brief Get multiple tags, concatenating the values together.
Transforms
<tag>value1</tag>
diff --git a/xbmc/video/VideoInfoTag.cpp b/xbmc/video/VideoInfoTag.cpp
index fa24851147..57f8bd43be 100644
--- a/xbmc/video/VideoInfoTag.cpp
+++ b/xbmc/video/VideoInfoTag.cpp
@@ -568,14 +568,19 @@ const std::string CVideoInfoTag::GetCast(bool bIncludeRole /*= false*/) const
void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
{
std::string value;
- XMLUtils::GetString(movie, "title", value);
- SetTitle(value);
- XMLUtils::GetString(movie, "originaltitle", value);
- SetOriginalTitle(value);
- XMLUtils::GetString(movie, "showtitle", value);
- SetShowTitle(value);
- XMLUtils::GetString(movie, "sorttitle", value);
- SetSortTitle(value);
+
+ if (XMLUtils::GetString(movie, "title", value))
+ SetTitle(value);
+
+ if (XMLUtils::GetString(movie, "originaltitle", value))
+ SetOriginalTitle(value);
+
+ if (XMLUtils::GetString(movie, "showtitle", value))
+ SetShowTitle(value);
+
+ if (XMLUtils::GetString(movie, "sorttitle", value))
+ SetSortTitle(value);
+
XMLUtils::GetFloat(movie, "rating", m_fRating);
XMLUtils::GetFloat(movie, "epbookmark", m_fEpBookmark);
int max_value = 10;
@@ -589,8 +594,9 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
XMLUtils::GetInt(movie, "season", m_iSeason);
XMLUtils::GetInt(movie, "episode", m_iEpisode);
XMLUtils::GetInt(movie, "track", m_iTrack);
- XMLUtils::GetString(movie, "uniqueid", value);
- SetUniqueId(value);
+ if (XMLUtils::GetString(movie, "uniqueid", value))
+ SetUniqueId(value);
+
XMLUtils::GetInt(movie, "displayseason", m_iSpecialSortSeason);
XMLUtils::GetInt(movie, "displayepisode", m_iSpecialSortEpisode);
int after=0;
@@ -600,40 +606,58 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
m_iSpecialSortSeason = after;
m_iSpecialSortEpisode = 0x1000; // should be more than any realistic episode number
}
- XMLUtils::GetString(movie, "votes", value);
- SetVotes(value);
- XMLUtils::GetString(movie, "outline", value);
- SetPlotOutline(value);
- XMLUtils::GetString(movie, "plot", value);
- SetPlot(value);
- XMLUtils::GetString(movie, "tagline", value);
- SetTagLine(value);
+ if (XMLUtils::GetString(movie, "votes", value))
+ SetVotes(value);
+
+ if (XMLUtils::GetString(movie, "outline", value))
+ SetPlotOutline(value);
+
+ if (XMLUtils::GetString(movie, "plot", value))
+ SetPlot(value);
+
+ if (XMLUtils::GetString(movie, "tagline", value))
+ SetTagLine(value);
+
+
if (XMLUtils::GetString(movie, "runtime", value) && !value.empty())
m_duration = GetDurationFromMinuteString(StringUtils::Trim(value));
- XMLUtils::GetString(movie, "mpaa", value);
- SetMPAARating(value);
+
+ if (XMLUtils::GetString(movie, "mpaa", value))
+ SetMPAARating(value);
+
XMLUtils::GetInt(movie, "playcount", m_playCount);
XMLUtils::GetDate(movie, "lastplayed", m_lastPlayed);
- XMLUtils::GetString(movie, "file", value);
- SetFile(value);
- XMLUtils::GetString(movie, "path", value);
- SetPath(value);
- XMLUtils::GetString(movie, "id", value);
- SetIMDBNumber(value);
- XMLUtils::GetString(movie, "filenameandpath", value);
- SetFileNameAndPath(value);
+
+ if (XMLUtils::GetString(movie, "file", value))
+ SetFile(value);
+
+ if (XMLUtils::GetString(movie, "path", value))
+ SetPath(value);
+
+ if (XMLUtils::GetString(movie, "id", value))
+ SetIMDBNumber(value);
+
+ if (XMLUtils::GetString(movie, "filenameandpath", value))
+ SetFileNameAndPath(value);
+
XMLUtils::GetDate(movie, "premiered", m_premiered);
- XMLUtils::GetString(movie, "status", value);
- SetStatus(value);
- XMLUtils::GetString(movie, "code", value);
- SetProductionCode(value);
+
+ if (XMLUtils::GetString(movie, "status", value))
+ SetStatus(value);
+
+ if (XMLUtils::GetString(movie, "code", value))
+ SetProductionCode(value);
+
XMLUtils::GetDate(movie, "aired", m_firstAired);
- XMLUtils::GetString(movie, "album", value);
- SetAlbum(value);
- XMLUtils::GetString(movie, "trailer", value);
- SetTrailer(value);
- XMLUtils::GetString(movie, "basepath", value);
- SetBasePath(value);
+
+ if (XMLUtils::GetString(movie, "album", value))
+ SetAlbum(value);
+
+ if (XMLUtils::GetString(movie, "trailer", value))
+ SetTrailer(value);
+
+ if (XMLUtils::GetString(movie, "basepath", value))
+ SetBasePath(value);
size_t iThumbCount = m_strPictureURL.m_url.size();
std::string xmlAdd = m_strPictureURL.m_xml;
@@ -661,24 +685,24 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
}
std::vector<std::string> genres(m_genre);
- XMLUtils::GetStringArray(movie, "genre", genres, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetGenre(genres);
+ if (XMLUtils::GetStringArray(movie, "genre", genres, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetGenre(genres);
std::vector<std::string> country(m_country);
- XMLUtils::GetStringArray(movie, "country", country, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetCountry(country);
+ if (XMLUtils::GetStringArray(movie, "country", country, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetCountry(country);
std::vector<std::string> credits(m_writingCredits);
- XMLUtils::GetStringArray(movie, "credits", credits, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetWritingCredits(credits);
+ if (XMLUtils::GetStringArray(movie, "credits", credits, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetWritingCredits(credits);
std::vector<std::string> director(m_director);
- XMLUtils::GetStringArray(movie, "director", director, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetDirector(director);
+ if (XMLUtils::GetStringArray(movie, "director", director, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetDirector(director);
std::vector<std::string> showLink(m_showLink);
- XMLUtils::GetStringArray(movie, "showlink", showLink, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetShowLink(showLink);
+ if (XMLUtils::GetStringArray(movie, "showlink", showLink, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetShowLink(showLink);
// cast
const TiXmlElement* node = movie->FirstChildElement("actor");
@@ -691,8 +715,10 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
{
SActorInfo info;
info.strName = actor->FirstChild()->Value();
- XMLUtils::GetString(node, "role", value);
- info.strRole = StringUtils::Trim(value);
+
+ if (XMLUtils::GetString(node, "role", value))
+ info.strRole = StringUtils::Trim(value);
+
XMLUtils::GetInt(node, "order", info.order);
const TiXmlElement* thumb = node->FirstChildElement("thumb");
while (thumb)
@@ -708,16 +734,16 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
node = node->NextSiblingElement("actor");
}
- XMLUtils::GetString(movie, "set", value);
- SetSet(value);
+ if (XMLUtils::GetString(movie, "set", value))
+ SetSet(value);
std::vector<std::string> tags(m_tags);
- XMLUtils::GetStringArray(movie, "tag", tags, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetTags(tags);
+ if (XMLUtils::GetStringArray(movie, "tag", tags, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetTags(tags);
std::vector<std::string> studio(m_studio);
- XMLUtils::GetStringArray(movie, "studio", studio, prioritise, g_advancedSettings.m_videoItemSeparator);
- SetStudio(studio);
+ if (XMLUtils::GetStringArray(movie, "studio", studio, prioritise, g_advancedSettings.m_videoItemSeparator))
+ SetStudio(studio);
// artists
std::vector<std::string> artist(m_artist);
@@ -755,10 +781,12 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
while ((nodeDetail = nodeStreamDetails->IterateChildren("audio", nodeDetail)))
{
CStreamDetailAudio *p = new CStreamDetailAudio();
- XMLUtils::GetString(nodeDetail, "codec", value);
- p->m_strCodec = StringUtils::Trim(value);
- XMLUtils::GetString(nodeDetail, "language", value);
- p->m_strLanguage = StringUtils::Trim(value);
+ if (XMLUtils::GetString(nodeDetail, "codec", value))
+ p->m_strCodec = StringUtils::Trim(value);
+
+ if (XMLUtils::GetString(nodeDetail, "language", value))
+ p->m_strLanguage = StringUtils::Trim(value);
+
XMLUtils::GetInt(nodeDetail, "channels", p->m_iChannels);
StringUtils::ToLower(p->m_strCodec);
StringUtils::ToLower(p->m_strLanguage);
@@ -768,14 +796,16 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
while ((nodeDetail = nodeStreamDetails->IterateChildren("video", nodeDetail)))
{
CStreamDetailVideo *p = new CStreamDetailVideo();
- XMLUtils::GetString(nodeDetail, "codec", value);
- p->m_strCodec = StringUtils::Trim(value);
+ if (XMLUtils::GetString(nodeDetail, "codec", value))
+ p->m_strCodec = StringUtils::Trim(value);
+
XMLUtils::GetFloat(nodeDetail, "aspect", p->m_fAspect);
XMLUtils::GetInt(nodeDetail, "width", p->m_iWidth);
XMLUtils::GetInt(nodeDetail, "height", p->m_iHeight);
XMLUtils::GetInt(nodeDetail, "durationinseconds", p->m_iDuration);
- XMLUtils::GetString(nodeDetail, "stereomode", value);
- p->m_strStereoMode = StringUtils::Trim(value);
+ if (XMLUtils::GetString(nodeDetail, "stereomode", value))
+ p->m_strStereoMode = StringUtils::Trim(value);
+
StringUtils::ToLower(p->m_strCodec);
StringUtils::ToLower(p->m_strStereoMode);
m_streamDetails.AddStream(p);
@@ -784,8 +814,8 @@ void CVideoInfoTag::ParseNative(const TiXmlElement* movie, bool prioritise)
while ((nodeDetail = nodeStreamDetails->IterateChildren("subtitle", nodeDetail)))
{
CStreamDetailSubtitle *p = new CStreamDetailSubtitle();
- XMLUtils::GetString(nodeDetail, "language", value);
- p->m_strLanguage = StringUtils::Trim(value);
+ if (XMLUtils::GetString(nodeDetail, "language", value))
+ p->m_strLanguage = StringUtils::Trim(value);
StringUtils::ToLower(p->m_strLanguage);
m_streamDetails.AddStream(p);
}
diff --git a/xbmc/windowing/egl/EGLNativeTypeAndroid.cpp b/xbmc/windowing/egl/EGLNativeTypeAndroid.cpp
index 35505d1f50..c8dba0302e 100644
--- a/xbmc/windowing/egl/EGLNativeTypeAndroid.cpp
+++ b/xbmc/windowing/egl/EGLNativeTypeAndroid.cpp
@@ -27,6 +27,10 @@
#include "android/activity/XBMCApp.h"
#include "utils/StringUtils.h"
#include "android/jni/SystemProperties.h"
+#include "android/jni/Display.h"
+#include "android/jni/View.h"
+#include "android/jni/Window.h"
+#include "android/jni/WindowManager.h"
CEGLNativeTypeAndroid::CEGLNativeTypeAndroid()
: m_width(0), m_height(0)
@@ -105,6 +109,30 @@ bool CEGLNativeTypeAndroid::DestroyNativeWindow()
return true;
}
+static float currentRefreshRate()
+{
+ CJNIWindow window = CXBMCApp::getWindow();
+ if (window)
+ {
+ float preferredRate = window.getAttributes().getpreferredRefreshRate();
+ if (preferredRate > 1.0)
+ {
+ return preferredRate;
+ }
+ CJNIView view(window.getDecorView());
+ if (view) {
+ CJNIDisplay display(view.getDisplay());
+ if (display)
+ {
+ float reportedRate = display.getRefreshRate();
+ return reportedRate;
+ }
+ }
+ }
+ CLog::Log(LOGDEBUG, "found no refresh rate");
+ return 60.0;
+}
+
bool CEGLNativeTypeAndroid::GetNativeResolution(RESOLUTION_INFO *res) const
{
EGLNativeWindowType *nativeWindow = (EGLNativeWindowType*)CXBMCApp::GetNativeWindow(30000);
@@ -124,7 +152,7 @@ bool CEGLNativeTypeAndroid::GetNativeResolution(RESOLUTION_INFO *res) const
res->iHeight = m_height;
}
- res->fRefreshRate = 60;
+ res->fRefreshRate = currentRefreshRate();
res->dwFlags= D3DPRESENTFLAG_PROGRESSIVE;
res->iScreen = 0;
res->bFullScreen = true;
@@ -142,10 +170,10 @@ bool CEGLNativeTypeAndroid::SetNativeResolution(const RESOLUTION_INFO &res)
{
CLog::Log(LOGDEBUG, "CEGLNativeTypeAndroid: SetNativeResolution: %dx%d", m_width, m_height);
if (m_width && m_height)
- {
- if (!CXBMCApp::SetBuffersGeometry(m_width, m_height, 0))
- return false;
- }
+ CXBMCApp::SetBuffersGeometry(m_width, m_height, 0);
+
+ if (abs(currentRefreshRate() - res.fRefreshRate) > 0.0001)
+ CXBMCApp::SetRefreshRate(res.fRefreshRate);
return true;
}
@@ -156,7 +184,34 @@ bool CEGLNativeTypeAndroid::ProbeResolutions(std::vector<RESOLUTION_INFO> &resol
bool ret = GetNativeResolution(&res);
if (ret && res.iWidth > 1 && res.iHeight > 1)
{
- resolutions.push_back(res);
+ std::vector<float> refreshRates;
+ CJNIWindow window = CXBMCApp::getWindow();
+ if (window)
+ {
+ CJNIView view = window.getDecorView();
+ if (view)
+ {
+ CJNIDisplay display = view.getDisplay();
+ if (display)
+ {
+ refreshRates = display.getSupportedRefreshRates();
+ }
+ }
+ }
+
+ if (refreshRates.size())
+ {
+ for (unsigned int i = 0; i < refreshRates.size(); i++)
+ {
+ res.fRefreshRate = refreshRates[i];
+ resolutions.push_back(res);
+ }
+ }
+ else
+ {
+ /* No refresh rate list available, just provide the current one */
+ resolutions.push_back(res);
+ }
return true;
}
return false;