diff --git a/app/build.gradle b/app/build.gradle index bec035cf..2a59d47a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,6 +99,10 @@ dependencies { implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version" implementation files('libs/extension-ffmpeg-release.aar') + // Timber + def timber_version = "4.7.1" + implementation "com.jakewharton.timber:timber:$timber_version" + // Testing testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' diff --git a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt b/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt index fd427166..f4927fc4 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt @@ -2,6 +2,14 @@ package dev.jdtech.jellyfin import android.app.Application import dagger.hilt.android.HiltAndroidApp +import timber.log.Timber @HiltAndroidApp -class BaseApplication : Application() \ No newline at end of file +class BaseApplication : Application() { + override fun onCreate() { + super.onCreate() + if (BuildConfig.DEBUG) { + Timber.plant(Timber.DebugTree()) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index 3be4ce01..baef10a4 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -2,7 +2,6 @@ package dev.jdtech.jellyfin import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import android.util.Log import android.view.WindowManager import androidx.activity.viewModels import androidx.core.view.WindowCompat @@ -12,6 +11,7 @@ import androidx.navigation.navArgs import com.google.android.exoplayer2.ui.StyledPlayerView import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel +import timber.log.Timber @AndroidEntryPoint class PlayerActivity : AppCompatActivity() { @@ -23,7 +23,7 @@ class PlayerActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Log.d("PlayerActivity", "onCreate") + Timber.d("Creating player activity") setContentView(R.layout.activity_player) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) @@ -47,7 +47,7 @@ class PlayerActivity : AppCompatActivity() { override fun onDestroy() { super.onDestroy() - Log.d("PlayerActivity", "onDestroy") + Timber.d("Destroying player activity") showSystemUI() } diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt index 2c168ee1..f2fcc5e5 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt @@ -1,10 +1,10 @@ package dev.jdtech.jellyfin.repository -import android.util.Log import dev.jdtech.jellyfin.api.JellyfinApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.* +import timber.log.Timber import java.util.* class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRepository { @@ -139,21 +139,21 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep mediaSourceId = mediaSourceId ) } catch (e: Exception) { - Log.e("JellyfinRepository", "${e.message}") + Timber.e(e) } } return streamUrl } override suspend fun postPlaybackStart(itemId: UUID) { - Log.d("PlayerActivity", "Sending start $itemId") + Timber.d("Sending start $itemId") withContext(Dispatchers.IO) { jellyfinApi.playStateApi.onPlaybackStart(jellyfinApi.userId!!, itemId) } } override suspend fun postPlaybackStop(itemId: UUID, positionTicks: Long) { - Log.d("PlayerActivity", "Sending stop $itemId") + Timber.d("Sending stop $itemId") withContext(Dispatchers.IO) { jellyfinApi.playStateApi.onPlaybackStopped( jellyfinApi.userId!!, @@ -168,6 +168,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep positionTicks: Long, isPaused: Boolean ) { + Timber.d("Posting progress of $itemId, position: $positionTicks") withContext(Dispatchers.IO) { jellyfinApi.playStateApi.onPlaybackProgress( jellyfinApi.userId!!, diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt index 7e0bddb5..abc5adff 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt @@ -1,7 +1,6 @@ package dev.jdtech.jellyfin.viewmodels import android.app.Application -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -13,6 +12,7 @@ import dev.jdtech.jellyfin.database.ServerDatabaseDao import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import timber.log.Timber import javax.inject.Inject @HiltViewModel @@ -42,7 +42,7 @@ constructor( val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) try { val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo() - Log.i("AddServerViewModel", "Remote server: ${publicSystemInfo.id}") + Timber.d("Remote server: ${publicSystemInfo.id}") if (serverAlreadyInDatabase(publicSystemInfo.id)) { _error.value = "Server already added" @@ -52,7 +52,7 @@ constructor( _navigateToLogin.value = true } } catch (e: Exception) { - Log.e("AddServerViewModel", "${e.message}") + Timber.e(e) _error.value = e.message _navigateToLogin.value = false } @@ -71,9 +71,9 @@ constructor( servers = database.getAllServersSync() } for (server in servers) { - Log.i("AddServerViewModel", "Database server: ${server.id}") + Timber.d("Database server: ${server.id}") if (server.id == id) { - Log.i("AddServerViewModel", "Server already in the database") + Timber.w("Server already in the database") return true } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt index 6dd3dcba..e5973c35 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt @@ -1,7 +1,6 @@ package dev.jdtech.jellyfin.viewmodels import android.app.Application -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -14,6 +13,7 @@ import dev.jdtech.jellyfin.models.View import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.BaseItemDto +import timber.log.Timber import java.util.* import javax.inject.Inject @@ -80,7 +80,7 @@ constructor( _finishedLoading.value = true } catch (e: Exception) { - Log.e("HomeViewModel", e.message.toString()) + Timber.e(e.message.toString()) _finishedLoading.value = true _error.value = true } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt index c34d6e8a..19065b41 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt @@ -1,7 +1,6 @@ package dev.jdtech.jellyfin.viewmodels import android.app.Application -import android.util.Log import androidx.lifecycle.* import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.api.JellyfinApi @@ -11,6 +10,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.jellyfin.sdk.model.api.AuthenticateUserByName +import timber.log.Timber import java.lang.Exception import javax.inject.Inject @@ -63,7 +63,7 @@ constructor( } _navigateToMain.value = true } catch (e: Exception) { - Log.e("LoginViewModel", "${e.message}") + Timber.e(e) _error.value = e.message } } diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt index 1382add5..77790360 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt @@ -3,7 +3,6 @@ package dev.jdtech.jellyfin.viewmodels import android.app.Application import android.os.Handler import android.os.Looper -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -15,6 +14,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.repository.JellyfinRepository import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import timber.log.Timber import java.util.* import javax.inject.Inject @@ -65,7 +65,7 @@ constructor( viewModelScope.launch { val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId) - Log.d("PlayerActivity", streamUrl) + Timber.d("Stream url: $streamUrl") val mediaItem = MediaItem.Builder() .setMediaId(itemId.toString()) @@ -106,10 +106,6 @@ constructor( val runnable: Runnable = object : Runnable { override fun run() { viewModelScope.launch { - Log.d( - "PlayerActivity", - "Posting progress of $itemId, position: ${player.currentPosition}" - ) jellyfinRepository.postPlaybackProgress( itemId, player.currentPosition.times(10000), @@ -143,13 +139,13 @@ constructor( _navigateBack.value = true } } - Log.d("PlayerActivity", "changed state to $stateString") + Timber.d("Changed player state to $stateString") } } override fun onCleared() { super.onCleared() - Log.d("PlayerActivity", "onCleared ViewModel") + Timber.d("Clearing Player ViewModel") releasePlayer() } } \ No newline at end of file