diff --git a/app/build.gradle b/app/build.gradle index 40ce21c2..d9922658 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ plugins { ext { gitVersionName = grgit.describe() - gitVersionCode = gitVersionName.isInteger() ? gitVersionName.toInteger() : 1 + gitVersionCode = gitVersionName != null && gitVersionName.isInteger() ? gitVersionName.toInteger() : 1 } println("Version Name: $gitVersionName") diff --git a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt index 63b9dfe3..197232ac 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -29,7 +29,7 @@ import javax.jmdns.ServiceTypeListener class StateCasting { private val _scopeIO = CoroutineScope(Dispatchers.IO); private val _scopeMain = CoroutineScope(Dispatchers.Main); - private lateinit var _jmDNS: JmDNS; + private var _jmDNS: JmDNS? = null; private val _storage: CastingDeviceInfoStorage = FragmentedStorage.get(); private val _castServer = ManagedHttpServer(9999); @@ -162,14 +162,16 @@ class StateCasting { _scopeIO.launch { try { - _jmDNS = JmDNS.create(InetAddress.getLocalHost()); - _jmDNS.addServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); - _jmDNS.addServiceListener("_airplay._tcp.local.", _airPlayServiceListener); - _jmDNS.addServiceListener("_fastcast._tcp.local.", _fastCastServiceListener); + val jmDNS = JmDNS.create(InetAddress.getLocalHost()); + jmDNS.addServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); + jmDNS.addServiceListener("_airplay._tcp.local.", _airPlayServiceListener); + jmDNS.addServiceListener("_fastcast._tcp.local.", _fastCastServiceListener); if (BuildConfig.DEBUG) { - _jmDNS.addServiceTypeListener(_serviceTypeListener); + jmDNS.addServiceTypeListener(_serviceTypeListener); } + + _jmDNS = jmDNS; } catch (e: Throwable) { Logger.e(TAG, "Failed to start casting service.", e); } @@ -189,18 +191,21 @@ class StateCasting { Logger.i(TAG, "CastingService stopping.") - _scopeIO.launch { - try { - _jmDNS.removeServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); - _jmDNS.removeServiceListener("_airplay._tcp", _airPlayServiceListener); + val jmDNS = _jmDNS; + if (jmDNS != null) { + _scopeIO.launch { + try { + jmDNS.removeServiceListener("_googlecast._tcp.local.", _chromecastServiceListener); + jmDNS.removeServiceListener("_airplay._tcp", _airPlayServiceListener); - if (BuildConfig.DEBUG) { - _jmDNS.removeServiceTypeListener(_serviceTypeListener); + if (BuildConfig.DEBUG) { + jmDNS.removeServiceTypeListener(_serviceTypeListener); + } + + jmDNS.close(); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to stop mDNS.", e); } - - _jmDNS.close(); - } catch (e: Throwable) { - Logger.e(TAG, "Failed to stop mDNS.", e); } } diff --git a/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt b/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt index 878a14d9..612c7a8c 100644 --- a/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt +++ b/app/src/main/java/com/futo/platformplayer/dialogs/ConnectedCastingDialog.kt @@ -53,7 +53,17 @@ class ConnectedCastingDialog(context: Context?) : AlertDialog(context) { dismiss(); }; - _sliderVolume.addOnChangeListener(OnChangeListener { _, value, _ -> StateCasting.instance.activeDevice?.changeVolume(value.toDouble()); }); + //TODO: Check if volume slider is properly hidden in all cases + _sliderVolume.addOnChangeListener(OnChangeListener { _, value, _ -> + val activeDevice = StateCasting.instance.activeDevice ?: return@OnChangeListener; + if (activeDevice.canSetVolume) { + try { + activeDevice.changeVolume(value.toDouble()); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to change volume.", e); + } + } + }); setLoading(false); updateDevice(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 0a72510c..031d98f3 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -1869,7 +1869,11 @@ class VideoDetailView : ConstraintLayout { } fragment.lifecycleScope.launch(Dispatchers.IO) { - playbackTracker.onProgress(positionMs.toDouble() / 1000, isPlaying); + try { + playbackTracker.onProgress(positionMs.toDouble() / 1000, isPlaying); + } catch (e: Throwable) { + Logger.e(TAG, "Failed to notify progress.", e); + } } }