diff --git a/.gitignore b/.gitignore index 7fa71a44..daf934b5 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ gradle-app.setting /app/release /app/releases +/prototype.txt diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt index 20f89a87..3486b6a1 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/ZappApplicationBase.kt @@ -34,6 +34,7 @@ abstract class ZappApplicationBase : Application() { private lateinit var koin: Koin + @Suppress("unused") fun reportError(throwable: Throwable?) { if (ACRA.isInitialised) { ACRA.errorReporter.handleException(throwable) diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/Channel.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/Channel.kt index 55fd324b..90edbd84 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/Channel.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/Channel.kt @@ -3,7 +3,6 @@ package de.christinecoenen.code.zapp.app.livestream.api.model import androidx.annotation.Keep @Keep -@Suppress("unused") enum class Channel(private val id: String) { DAS_ERSTE("das_erste"), diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/ShowResponse.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/ShowResponse.kt index b89466c2..f1d0b5d2 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/ShowResponse.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/api/model/ShowResponse.kt @@ -11,5 +11,5 @@ class ShowResponse( get() = shows!![0] val isSuccess: Boolean - get() = shows != null && shows.isNotEmpty() + get() = !shows.isNullOrEmpty() } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/detail/ChannelPlayerActivity.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/detail/ChannelPlayerActivity.kt index 1276273c..131e81a8 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/detail/ChannelPlayerActivity.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/livestream/ui/detail/ChannelPlayerActivity.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.view.Menu import android.view.MenuInflater import android.view.MenuItem -import androidx.core.view.isVisible import de.christinecoenen.code.zapp.R import de.christinecoenen.code.zapp.app.livestream.ui.ProgramInfoViewModel import de.christinecoenen.code.zapp.app.player.AbstractPlayerActivity diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/main/MainActivity.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/main/MainActivity.kt index b07ae605..bc176471 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/main/MainActivity.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/main/MainActivity.kt @@ -14,7 +14,6 @@ import androidx.core.view.MenuProvider import androidx.core.view.isVisible import androidx.navigation.NavController import androidx.navigation.NavDestination -import androidx.navigation.NavGraph import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.* import androidx.preference.PreferenceManager diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/api/request/QueryRequest.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/api/request/QueryRequest.kt index c73bf501..56bec7d5 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/api/request/QueryRequest.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/api/request/QueryRequest.kt @@ -8,13 +8,8 @@ import java.io.Serializable @Keep class QueryRequest : Serializable { - @Suppress("unused") private val sortBy: String = "timestamp" - - @Suppress("unused") private val sortOrder: String = "desc" - - @Suppress("unused") private val future: Boolean = true var offset: Int = 0 diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/controller/downloads/DownloadFileInfoManager.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/controller/downloads/DownloadFileInfoManager.kt index 952a6567..2d0025d8 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/controller/downloads/DownloadFileInfoManager.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/controller/downloads/DownloadFileInfoManager.kt @@ -74,7 +74,6 @@ class DownloadFileInfoManager( } else { val resolver = applicationContext.contentResolver - @Suppress("NON_EXHAUSTIVE_WHEN") when (status) { DownloadStatus.DELETED, DownloadStatus.FAILED -> try { diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt index f54ad66b..f3db696b 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/detail/MediathekDetailFragment.kt @@ -8,7 +8,6 @@ import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResultListener import androidx.lifecycle.Lifecycle -import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.google.android.material.snackbar.Snackbar @@ -29,7 +28,11 @@ import de.christinecoenen.code.zapp.utils.system.IntentHelper.openUrl import de.christinecoenen.code.zapp.utils.system.LifecycleOwnerHelper.launchOnCreated import kotlinx.coroutines.Job import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.transform import org.koin.android.ext.android.inject import timber.log.Timber import kotlin.time.Duration.Companion.milliseconds diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/MediathekListFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/MediathekListFragment.kt index a2960218..5478f25d 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/MediathekListFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/MediathekListFragment.kt @@ -1,7 +1,12 @@ package de.christinecoenen.code.zapp.app.mediathek.ui.list import android.os.Bundle -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View +import android.view.ViewGroup import androidx.activity.OnBackPressedCallback import androidx.core.view.MenuProvider import androidx.core.view.isVisible @@ -19,9 +24,9 @@ import com.google.android.material.chip.Chip import de.christinecoenen.code.zapp.R import de.christinecoenen.code.zapp.app.mediathek.api.request.MediathekChannel import de.christinecoenen.code.zapp.app.mediathek.api.result.QueryInfoResult +import de.christinecoenen.code.zapp.app.mediathek.ui.helper.ShowMenuHelper import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.FooterLoadStateAdapter import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.MediathekShowListItemListener -import de.christinecoenen.code.zapp.app.mediathek.ui.helper.ShowMenuHelper import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.PagedMediathekShowListAdapter import de.christinecoenen.code.zapp.databinding.MediathekListFragmentBinding import de.christinecoenen.code.zapp.databinding.ViewNoShowsBinding @@ -31,12 +36,12 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.map -import kotlinx.coroutines.launch import org.koin.androidx.viewmodel.ext.android.viewModel import java.net.UnknownServiceException import java.text.DateFormat import java.text.NumberFormat -import java.util.* +import java.util.Date +import java.util.Locale import javax.net.ssl.SSLHandshakeException diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/adapter/UiModel.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/adapter/UiModel.kt index b700a7ea..997e113e 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/adapter/UiModel.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/mediathek/ui/list/adapter/UiModel.kt @@ -8,7 +8,7 @@ sealed class UiModel { class MediathekShowModel( val show: MediathekShow, - val date: DateTime + date: DateTime ) : UiModel() { val localDate = LocalDate(date) diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/player/BackgroundPlayerService.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/player/BackgroundPlayerService.kt index f48c8414..d2916dc4 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/player/BackgroundPlayerService.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/player/BackgroundPlayerService.kt @@ -3,7 +3,6 @@ package de.christinecoenen.code.zapp.app.player import android.app.Notification import android.app.NotificationManager import android.app.PendingIntent -import android.app.Service import android.content.Context import android.content.Intent import android.content.ServiceConnection @@ -87,7 +86,7 @@ class BackgroundPlayerService : LifecycleService(), override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) handleIntent(intent) - return Service.START_STICKY + return START_STICKY } override fun onTaskRemoved(rootIntent: Intent) { @@ -169,7 +168,7 @@ class BackgroundPlayerService : LifecycleService(), private fun movePlaybackToForeground() { isPlaybackInBackground = false - stopForeground(Service.STOP_FOREGROUND_REMOVE) + stopForeground(STOP_FOREGROUND_REMOVE) stopSelf() playerNotificationManager?.apply { @@ -238,7 +237,7 @@ class BackgroundPlayerService : LifecycleService(), if (ongoing) { startForeground(notificationId, notification) } else { - stopForeground(Service.STOP_FOREGROUND_REMOVE) + stopForeground(STOP_FOREGROUND_REMOVE) } } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/repository/SettingsRepository.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/repository/SettingsRepository.kt index ae4880aa..0a2dac8f 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/repository/SettingsRepository.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/repository/SettingsRepository.kt @@ -2,6 +2,7 @@ package de.christinecoenen.code.zapp.app.settings.repository import android.annotation.SuppressLint import android.content.Context +import android.content.SharedPreferences import android.os.Build import androidx.appcompat.app.AppCompatDelegate import androidx.preference.PreferenceManager @@ -14,7 +15,7 @@ import kotlin.time.Duration.Companion.minutes class SettingsRepository(context: Context) { private val context = context.applicationContext - val preferences = PreferenceManager.getDefaultSharedPreferences(context) + val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) val lockVideosInLandcapeFormat: Boolean get() = preferences.getBoolean(context.getString(R.string.pref_key_detail_landscape), true) diff --git a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/SettingsFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/SettingsFragment.kt index bd67901c..662272b2 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/SettingsFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/app/settings/ui/SettingsFragment.kt @@ -7,7 +7,6 @@ import androidx.core.os.LocaleListCompat import androidx.navigation.fragment.findNavController import androidx.preference.ListPreference import androidx.preference.Preference -import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreferenceCompat import com.google.android.material.color.DynamicColors import com.jakewharton.processphoenix.ProcessPhoenix diff --git a/app/src/main/java/de/christinecoenen/code/zapp/repositories/MediathekRepository.kt b/app/src/main/java/de/christinecoenen/code/zapp/repositories/MediathekRepository.kt index 2c4a646d..36c0c13f 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/repositories/MediathekRepository.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/repositories/MediathekRepository.kt @@ -7,7 +7,12 @@ import de.christinecoenen.code.zapp.models.shows.PersistedMediathekShow import de.christinecoenen.code.zapp.models.shows.SortableMediathekShow import de.christinecoenen.code.zapp.persistence.Database import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.withContext import org.joda.time.DateTime @@ -74,13 +79,6 @@ class MediathekRepository(private val database: Database) { .update(show!!) } - suspend fun updateDownloadStatus(downloadId: Int, downloadStatus: DownloadStatus?) = - withContext(Dispatchers.IO) { - database - .mediathekShowDao() - .updateDownloadStatus(downloadId, downloadStatus!!) - } - suspend fun updateDownloadProgress(downloadId: Int, progress: Int) = withContext(Dispatchers.IO) { database diff --git a/app/src/main/java/de/christinecoenen/code/zapp/tv/error/CrashFragment.kt b/app/src/main/java/de/christinecoenen/code/zapp/tv/error/CrashFragment.kt index c73d3eb0..e58e9deb 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/tv/error/CrashFragment.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/tv/error/CrashFragment.kt @@ -17,7 +17,7 @@ class CrashFragment : ErrorSupportFragment() { val dialogConfiguration = helper.config.getPluginConfiguration(DialogConfiguration::class.java) - val iconResId = dialogConfiguration.resIcon ?: R.drawable.ic_zapp_tv_small; + val iconResId = dialogConfiguration.resIcon ?: R.drawable.ic_zapp_tv_small title = dialogConfiguration.title message = dialogConfiguration.text diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/LifecycleOwnerHelper.kt b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/LifecycleOwnerHelper.kt index 90c60ffd..649fbfb1 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/LifecycleOwnerHelper.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/LifecycleOwnerHelper.kt @@ -22,6 +22,7 @@ object LifecycleOwnerHelper { return launchOnLifecycle(Lifecycle.State.RESUMED, block) } + @Suppress("MemberVisibilityCanBePrivate") fun LifecycleOwner.launchOnLifecycle( state: Lifecycle.State, block: suspend CoroutineScope.() -> Unit diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/NotificationHelper.kt b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/NotificationHelper.kt index 0c3bb711..d5562970 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/utils/system/NotificationHelper.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/system/NotificationHelper.kt @@ -26,7 +26,7 @@ object NotificationHelper { return ActivityCompat.checkSelfPermission( context, Manifest.permission.POST_NOTIFICATIONS - ) == PackageManager.PERMISSION_GRANTED; + ) == PackageManager.PERMISSION_GRANTED } @JvmStatic diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/video/SwipeablePlayerView.kt b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/SwipeablePlayerView.kt index 84e1e0c8..36dda2d8 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/utils/video/SwipeablePlayerView.kt +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/SwipeablePlayerView.kt @@ -92,14 +92,6 @@ class SwipeablePlayerView @JvmOverloads constructor( subtitleView?.setUserDefaultTextSize() } - fun toggleControls() { - if (isControllerFullyVisible) { - hideController() - } else { - showController() - } - } - private fun adjustBrightness(yPercent: Float) { val lp = window.attributes lp.screenBrightness = yPercent